From 26236456ae90296ccf3053fe88825f0badc4f289 Mon Sep 17 00:00:00 2001 From: Marius Poke Date: Mon, 27 Nov 2023 21:50:45 +0100 Subject: [PATCH 01/19] chore: update proto files for LSM (#3) * Format protos * Fix Proto lints * update protos * make proto-gen * implement necessary interfaces * remove minSelfDelegation (partially) --------- Co-authored-by: Zaki Manian --- .../v1beta1/distribution.pulsar.go | 683 +- .../distribution/v1beta1/query.pulsar.go | 1588 ++- .../distribution/v1beta1/query_grpc.pb.go | 39 + api/cosmos/distribution/v1beta1/tx.pulsar.go | 2037 +++- api/cosmos/distribution/v1beta1/tx_grpc.pb.go | 90 +- api/cosmos/staking/v1beta1/genesis.pulsar.go | 1320 ++- api/cosmos/staking/v1beta1/query.pulsar.go | 9453 +++++++++++++++-- api/cosmos/staking/v1beta1/query_grpc.pb.go | 312 + api/cosmos/staking/v1beta1/staking.pulsar.go | 2470 ++++- api/cosmos/staking/v1beta1/tx.pulsar.go | 8148 +++++++++++++- api/cosmos/staking/v1beta1/tx_grpc.pb.go | 299 +- .../distribution/v1beta1/distribution.proto | 11 + proto/cosmos/distribution/v1beta1/query.proto | 25 + proto/cosmos/distribution/v1beta1/tx.proto | 36 +- proto/cosmos/staking/v1beta1/genesis.proto | 28 + proto/cosmos/staking/v1beta1/query.proto | 138 + proto/cosmos/staking/v1beta1/staking.proto | 73 +- proto/cosmos/staking/v1beta1/tx.proto | 134 +- simapp/simd/cmd/testnet.go | 1 - tests/e2e/staking/suite.go | 4 - tests/integration/genutil/gentx_test.go | 6 +- testutil/network/network.go | 1 - x/distribution/keeper/grpc_query.go | 11 + x/distribution/keeper/keeper.go | 19 + x/distribution/keeper/msg_server.go | 16 +- x/distribution/types/distribution.pb.go | 373 +- x/distribution/types/query.pb.go | 620 +- x/distribution/types/query.pb.gw.go | 101 + x/distribution/types/tx.pb.go | 935 +- x/genutil/gentx_test.go | 7 +- x/genutil/types/genesis_state_test.go | 7 +- x/gov/abci_test.go | 3 +- x/slashing/app_test.go | 2 +- x/staking/README.md | 3 +- x/staking/app_test.go | 4 +- x/staking/client/cli/flags.go | 9 - x/staking/client/cli/tx.go | 55 +- x/staking/client/cli/tx_test.go | 24 +- x/staking/keeper/grpc_query.go | 75 + x/staking/keeper/msg_server.go | 75 +- x/staking/simulation/operations.go | 5 +- x/staking/testutil/helpers.go | 4 +- x/staking/types/events.go | 17 +- x/staking/types/genesis.pb.go | 572 +- x/staking/types/msg.go | 42 +- x/staking/types/msg_test.go | 6 +- x/staking/types/query.pb.go | 7868 +++++++++----- x/staking/types/query.pb.gw.go | 784 +- x/staking/types/staking.pb.go | 2547 +++-- x/staking/types/tx.pb.go | 5620 +++++++--- 50 files changed, 39355 insertions(+), 7345 deletions(-) diff --git a/api/cosmos/distribution/v1beta1/distribution.pulsar.go b/api/cosmos/distribution/v1beta1/distribution.pulsar.go index a3a7a03f6d03..5f1a0d4f527f 100644 --- a/api/cosmos/distribution/v1beta1/distribution.pulsar.go +++ b/api/cosmos/distribution/v1beta1/distribution.pulsar.go @@ -4146,6 +4146,548 @@ func (x *fastReflection_FeePool) ProtoMethods() *protoiface.Methods { } } +var _ protoreflect.List = (*_TokenizeShareRecordReward_2_list)(nil) + +type _TokenizeShareRecordReward_2_list struct { + list *[]*v1beta1.DecCoin +} + +func (x *_TokenizeShareRecordReward_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_TokenizeShareRecordReward_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_TokenizeShareRecordReward_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.DecCoin) + (*x.list)[i] = concreteValue +} + +func (x *_TokenizeShareRecordReward_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.DecCoin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_TokenizeShareRecordReward_2_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.DecCoin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_TokenizeShareRecordReward_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_TokenizeShareRecordReward_2_list) NewElement() protoreflect.Value { + v := new(v1beta1.DecCoin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_TokenizeShareRecordReward_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_TokenizeShareRecordReward protoreflect.MessageDescriptor + fd_TokenizeShareRecordReward_record_id protoreflect.FieldDescriptor + fd_TokenizeShareRecordReward_reward protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_distribution_v1beta1_distribution_proto_init() + md_TokenizeShareRecordReward = File_cosmos_distribution_v1beta1_distribution_proto.Messages().ByName("TokenizeShareRecordReward") + fd_TokenizeShareRecordReward_record_id = md_TokenizeShareRecordReward.Fields().ByName("record_id") + fd_TokenizeShareRecordReward_reward = md_TokenizeShareRecordReward.Fields().ByName("reward") +} + +var _ protoreflect.Message = (*fastReflection_TokenizeShareRecordReward)(nil) + +type fastReflection_TokenizeShareRecordReward TokenizeShareRecordReward + +func (x *TokenizeShareRecordReward) ProtoReflect() protoreflect.Message { + return (*fastReflection_TokenizeShareRecordReward)(x) +} + +func (x *TokenizeShareRecordReward) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_TokenizeShareRecordReward_messageType fastReflection_TokenizeShareRecordReward_messageType +var _ protoreflect.MessageType = fastReflection_TokenizeShareRecordReward_messageType{} + +type fastReflection_TokenizeShareRecordReward_messageType struct{} + +func (x fastReflection_TokenizeShareRecordReward_messageType) Zero() protoreflect.Message { + return (*fastReflection_TokenizeShareRecordReward)(nil) +} +func (x fastReflection_TokenizeShareRecordReward_messageType) New() protoreflect.Message { + return new(fastReflection_TokenizeShareRecordReward) +} +func (x fastReflection_TokenizeShareRecordReward_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_TokenizeShareRecordReward +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_TokenizeShareRecordReward) Descriptor() protoreflect.MessageDescriptor { + return md_TokenizeShareRecordReward +} + +// 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_TokenizeShareRecordReward) Type() protoreflect.MessageType { + return _fastReflection_TokenizeShareRecordReward_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_TokenizeShareRecordReward) New() protoreflect.Message { + return new(fastReflection_TokenizeShareRecordReward) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_TokenizeShareRecordReward) Interface() protoreflect.ProtoMessage { + return (*TokenizeShareRecordReward)(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_TokenizeShareRecordReward) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.RecordId != uint64(0) { + value := protoreflect.ValueOfUint64(x.RecordId) + if !f(fd_TokenizeShareRecordReward_record_id, value) { + return + } + } + if len(x.Reward) != 0 { + value := protoreflect.ValueOfList(&_TokenizeShareRecordReward_2_list{list: &x.Reward}) + if !f(fd_TokenizeShareRecordReward_reward, 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_TokenizeShareRecordReward) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.TokenizeShareRecordReward.record_id": + return x.RecordId != uint64(0) + case "cosmos.distribution.v1beta1.TokenizeShareRecordReward.reward": + return len(x.Reward) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.TokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.TokenizeShareRecordReward 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_TokenizeShareRecordReward) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.TokenizeShareRecordReward.record_id": + x.RecordId = uint64(0) + case "cosmos.distribution.v1beta1.TokenizeShareRecordReward.reward": + x.Reward = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.TokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.TokenizeShareRecordReward 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_TokenizeShareRecordReward) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.distribution.v1beta1.TokenizeShareRecordReward.record_id": + value := x.RecordId + return protoreflect.ValueOfUint64(value) + case "cosmos.distribution.v1beta1.TokenizeShareRecordReward.reward": + if len(x.Reward) == 0 { + return protoreflect.ValueOfList(&_TokenizeShareRecordReward_2_list{}) + } + listValue := &_TokenizeShareRecordReward_2_list{list: &x.Reward} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.TokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.TokenizeShareRecordReward 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_TokenizeShareRecordReward) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.TokenizeShareRecordReward.record_id": + x.RecordId = value.Uint() + case "cosmos.distribution.v1beta1.TokenizeShareRecordReward.reward": + lv := value.List() + clv := lv.(*_TokenizeShareRecordReward_2_list) + x.Reward = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.TokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.TokenizeShareRecordReward 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_TokenizeShareRecordReward) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.TokenizeShareRecordReward.reward": + if x.Reward == nil { + x.Reward = []*v1beta1.DecCoin{} + } + value := &_TokenizeShareRecordReward_2_list{list: &x.Reward} + return protoreflect.ValueOfList(value) + case "cosmos.distribution.v1beta1.TokenizeShareRecordReward.record_id": + panic(fmt.Errorf("field record_id of message cosmos.distribution.v1beta1.TokenizeShareRecordReward is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.TokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.TokenizeShareRecordReward 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_TokenizeShareRecordReward) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.TokenizeShareRecordReward.record_id": + return protoreflect.ValueOfUint64(uint64(0)) + case "cosmos.distribution.v1beta1.TokenizeShareRecordReward.reward": + list := []*v1beta1.DecCoin{} + return protoreflect.ValueOfList(&_TokenizeShareRecordReward_2_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.TokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.TokenizeShareRecordReward 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_TokenizeShareRecordReward) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.distribution.v1beta1.TokenizeShareRecordReward", 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_TokenizeShareRecordReward) 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_TokenizeShareRecordReward) 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_TokenizeShareRecordReward) 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_TokenizeShareRecordReward) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*TokenizeShareRecordReward) + 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.RecordId != 0 { + n += 1 + runtime.Sov(uint64(x.RecordId)) + } + if len(x.Reward) > 0 { + for _, e := range x.Reward { + l = options.Size(e) + 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().(*TokenizeShareRecordReward) + 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.Reward) > 0 { + for iNdEx := len(x.Reward) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Reward[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if x.RecordId != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.RecordId)) + 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().(*TokenizeShareRecordReward) + 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: TokenizeShareRecordReward: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: TokenizeShareRecordReward: 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 RecordId", wireType) + } + x.RecordId = 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.RecordId |= 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 Reward", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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.Reward = append(x.Reward, &v1beta1.DecCoin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Reward[len(x.Reward)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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 _ protoreflect.List = (*_CommunityPoolSpendProposal_4_list)(nil) type _CommunityPoolSpendProposal_4_list struct { @@ -4223,7 +4765,7 @@ func (x *CommunityPoolSpendProposal) ProtoReflect() protoreflect.Message { } func (x *CommunityPoolSpendProposal) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[8] + mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4856,7 +5398,7 @@ func (x *DelegatorStartingInfo) ProtoReflect() protoreflect.Message { } func (x *DelegatorStartingInfo) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[9] + mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5421,7 +5963,7 @@ func (x *DelegationDelegatorReward) ProtoReflect() protoreflect.Message { } func (x *DelegationDelegatorReward) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[10] + mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5934,7 +6476,7 @@ func (x *CommunityPoolSpendProposalWithDeposit) ProtoReflect() protoreflect.Mess } func (x *CommunityPoolSpendProposalWithDeposit) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[11] + mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6960,6 +7502,50 @@ func (x *FeePool) GetCommunityPool() []*v1beta1.DecCoin { return nil } +// TokenizeShareRecordReward represents the properties of tokenize share +type TokenizeShareRecordReward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RecordId uint64 `protobuf:"varint,1,opt,name=record_id,json=recordId,proto3" json:"record_id,omitempty"` + Reward []*v1beta1.DecCoin `protobuf:"bytes,2,rep,name=reward,proto3" json:"reward,omitempty"` +} + +func (x *TokenizeShareRecordReward) Reset() { + *x = TokenizeShareRecordReward{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TokenizeShareRecordReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TokenizeShareRecordReward) ProtoMessage() {} + +// Deprecated: Use TokenizeShareRecordReward.ProtoReflect.Descriptor instead. +func (*TokenizeShareRecordReward) Descriptor() ([]byte, []int) { + return file_cosmos_distribution_v1beta1_distribution_proto_rawDescGZIP(), []int{8} +} + +func (x *TokenizeShareRecordReward) GetRecordId() uint64 { + if x != nil { + return x.RecordId + } + return 0 +} + +func (x *TokenizeShareRecordReward) GetReward() []*v1beta1.DecCoin { + if x != nil { + return x.Reward + } + return nil +} + // CommunityPoolSpendProposal details a proposal for use of community funds, // together with how many coins are proposed to be spent, and to which // recipient account. @@ -6984,7 +7570,7 @@ type CommunityPoolSpendProposal struct { func (x *CommunityPoolSpendProposal) Reset() { *x = CommunityPoolSpendProposal{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[8] + mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6998,7 +7584,7 @@ func (*CommunityPoolSpendProposal) ProtoMessage() {} // Deprecated: Use CommunityPoolSpendProposal.ProtoReflect.Descriptor instead. func (*CommunityPoolSpendProposal) Descriptor() ([]byte, []int) { - return file_cosmos_distribution_v1beta1_distribution_proto_rawDescGZIP(), []int{8} + return file_cosmos_distribution_v1beta1_distribution_proto_rawDescGZIP(), []int{9} } func (x *CommunityPoolSpendProposal) GetTitle() string { @@ -7048,7 +7634,7 @@ type DelegatorStartingInfo struct { func (x *DelegatorStartingInfo) Reset() { *x = DelegatorStartingInfo{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[9] + mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7062,7 +7648,7 @@ func (*DelegatorStartingInfo) ProtoMessage() {} // Deprecated: Use DelegatorStartingInfo.ProtoReflect.Descriptor instead. func (*DelegatorStartingInfo) Descriptor() ([]byte, []int) { - return file_cosmos_distribution_v1beta1_distribution_proto_rawDescGZIP(), []int{9} + return file_cosmos_distribution_v1beta1_distribution_proto_rawDescGZIP(), []int{10} } func (x *DelegatorStartingInfo) GetPreviousPeriod() uint64 { @@ -7100,7 +7686,7 @@ type DelegationDelegatorReward struct { func (x *DelegationDelegatorReward) Reset() { *x = DelegationDelegatorReward{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[10] + mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7114,7 +7700,7 @@ func (*DelegationDelegatorReward) ProtoMessage() {} // Deprecated: Use DelegationDelegatorReward.ProtoReflect.Descriptor instead. func (*DelegationDelegatorReward) Descriptor() ([]byte, []int) { - return file_cosmos_distribution_v1beta1_distribution_proto_rawDescGZIP(), []int{10} + return file_cosmos_distribution_v1beta1_distribution_proto_rawDescGZIP(), []int{11} } func (x *DelegationDelegatorReward) GetValidatorAddress() string { @@ -7148,7 +7734,7 @@ type CommunityPoolSpendProposalWithDeposit struct { func (x *CommunityPoolSpendProposalWithDeposit) Reset() { *x = CommunityPoolSpendProposalWithDeposit{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[11] + mi := &file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7162,7 +7748,7 @@ func (*CommunityPoolSpendProposalWithDeposit) ProtoMessage() {} // Deprecated: Use CommunityPoolSpendProposalWithDeposit.ProtoReflect.Descriptor instead. func (*CommunityPoolSpendProposalWithDeposit) Descriptor() ([]byte, []int) { - return file_cosmos_distribution_v1beta1_distribution_proto_rawDescGZIP(), []int{11} + return file_cosmos_distribution_v1beta1_distribution_proto_rawDescGZIP(), []int{12} } func (x *CommunityPoolSpendProposalWithDeposit) GetTitle() string { @@ -7311,7 +7897,18 @@ var file_cosmos_distribution_v1beta1_distribution_proto_rawDesc = []byte{ 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0d, 0x63, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x8a, 0x02, 0x0a, 0x1a, 0x43, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0xad, 0x01, 0x0a, 0x19, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x49, 0x64, 0x12, 0x69, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x43, + 0x6f, 0x69, 0x6e, 0x42, 0x33, 0xc8, 0xde, 0x1f, 0x00, 0xaa, 0xdf, 0x1f, 0x2b, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x01, 0x22, 0x8a, 0x02, 0x0a, 0x1a, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, @@ -7401,7 +7998,7 @@ func file_cosmos_distribution_v1beta1_distribution_proto_rawDescGZIP() []byte { return file_cosmos_distribution_v1beta1_distribution_proto_rawDescData } -var file_cosmos_distribution_v1beta1_distribution_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_cosmos_distribution_v1beta1_distribution_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_cosmos_distribution_v1beta1_distribution_proto_goTypes = []interface{}{ (*Params)(nil), // 0: cosmos.distribution.v1beta1.Params (*ValidatorHistoricalRewards)(nil), // 1: cosmos.distribution.v1beta1.ValidatorHistoricalRewards @@ -7411,27 +8008,29 @@ var file_cosmos_distribution_v1beta1_distribution_proto_goTypes = []interface{}{ (*ValidatorSlashEvent)(nil), // 5: cosmos.distribution.v1beta1.ValidatorSlashEvent (*ValidatorSlashEvents)(nil), // 6: cosmos.distribution.v1beta1.ValidatorSlashEvents (*FeePool)(nil), // 7: cosmos.distribution.v1beta1.FeePool - (*CommunityPoolSpendProposal)(nil), // 8: cosmos.distribution.v1beta1.CommunityPoolSpendProposal - (*DelegatorStartingInfo)(nil), // 9: cosmos.distribution.v1beta1.DelegatorStartingInfo - (*DelegationDelegatorReward)(nil), // 10: cosmos.distribution.v1beta1.DelegationDelegatorReward - (*CommunityPoolSpendProposalWithDeposit)(nil), // 11: cosmos.distribution.v1beta1.CommunityPoolSpendProposalWithDeposit - (*v1beta1.DecCoin)(nil), // 12: cosmos.base.v1beta1.DecCoin - (*v1beta1.Coin)(nil), // 13: cosmos.base.v1beta1.Coin + (*TokenizeShareRecordReward)(nil), // 8: cosmos.distribution.v1beta1.TokenizeShareRecordReward + (*CommunityPoolSpendProposal)(nil), // 9: cosmos.distribution.v1beta1.CommunityPoolSpendProposal + (*DelegatorStartingInfo)(nil), // 10: cosmos.distribution.v1beta1.DelegatorStartingInfo + (*DelegationDelegatorReward)(nil), // 11: cosmos.distribution.v1beta1.DelegationDelegatorReward + (*CommunityPoolSpendProposalWithDeposit)(nil), // 12: cosmos.distribution.v1beta1.CommunityPoolSpendProposalWithDeposit + (*v1beta1.DecCoin)(nil), // 13: cosmos.base.v1beta1.DecCoin + (*v1beta1.Coin)(nil), // 14: cosmos.base.v1beta1.Coin } var file_cosmos_distribution_v1beta1_distribution_proto_depIdxs = []int32{ - 12, // 0: cosmos.distribution.v1beta1.ValidatorHistoricalRewards.cumulative_reward_ratio:type_name -> cosmos.base.v1beta1.DecCoin - 12, // 1: cosmos.distribution.v1beta1.ValidatorCurrentRewards.rewards:type_name -> cosmos.base.v1beta1.DecCoin - 12, // 2: cosmos.distribution.v1beta1.ValidatorAccumulatedCommission.commission:type_name -> cosmos.base.v1beta1.DecCoin - 12, // 3: cosmos.distribution.v1beta1.ValidatorOutstandingRewards.rewards:type_name -> cosmos.base.v1beta1.DecCoin + 13, // 0: cosmos.distribution.v1beta1.ValidatorHistoricalRewards.cumulative_reward_ratio:type_name -> cosmos.base.v1beta1.DecCoin + 13, // 1: cosmos.distribution.v1beta1.ValidatorCurrentRewards.rewards:type_name -> cosmos.base.v1beta1.DecCoin + 13, // 2: cosmos.distribution.v1beta1.ValidatorAccumulatedCommission.commission:type_name -> cosmos.base.v1beta1.DecCoin + 13, // 3: cosmos.distribution.v1beta1.ValidatorOutstandingRewards.rewards:type_name -> cosmos.base.v1beta1.DecCoin 5, // 4: cosmos.distribution.v1beta1.ValidatorSlashEvents.validator_slash_events:type_name -> cosmos.distribution.v1beta1.ValidatorSlashEvent - 12, // 5: cosmos.distribution.v1beta1.FeePool.community_pool:type_name -> cosmos.base.v1beta1.DecCoin - 13, // 6: cosmos.distribution.v1beta1.CommunityPoolSpendProposal.amount:type_name -> cosmos.base.v1beta1.Coin - 12, // 7: cosmos.distribution.v1beta1.DelegationDelegatorReward.reward:type_name -> cosmos.base.v1beta1.DecCoin - 8, // [8:8] is the sub-list for method output_type - 8, // [8:8] 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 + 13, // 5: cosmos.distribution.v1beta1.FeePool.community_pool:type_name -> cosmos.base.v1beta1.DecCoin + 13, // 6: cosmos.distribution.v1beta1.TokenizeShareRecordReward.reward:type_name -> cosmos.base.v1beta1.DecCoin + 14, // 7: cosmos.distribution.v1beta1.CommunityPoolSpendProposal.amount:type_name -> cosmos.base.v1beta1.Coin + 13, // 8: cosmos.distribution.v1beta1.DelegationDelegatorReward.reward:type_name -> cosmos.base.v1beta1.DecCoin + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_cosmos_distribution_v1beta1_distribution_proto_init() } @@ -7537,7 +8136,7 @@ func file_cosmos_distribution_v1beta1_distribution_proto_init() { } } file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommunityPoolSpendProposal); i { + switch v := v.(*TokenizeShareRecordReward); i { case 0: return &v.state case 1: @@ -7549,7 +8148,7 @@ func file_cosmos_distribution_v1beta1_distribution_proto_init() { } } file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DelegatorStartingInfo); i { + switch v := v.(*CommunityPoolSpendProposal); i { case 0: return &v.state case 1: @@ -7561,7 +8160,7 @@ func file_cosmos_distribution_v1beta1_distribution_proto_init() { } } file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DelegationDelegatorReward); i { + switch v := v.(*DelegatorStartingInfo); i { case 0: return &v.state case 1: @@ -7573,6 +8172,18 @@ func file_cosmos_distribution_v1beta1_distribution_proto_init() { } } file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DelegationDelegatorReward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_distribution_v1beta1_distribution_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CommunityPoolSpendProposalWithDeposit); i { case 0: return &v.state @@ -7591,7 +8202,7 @@ func file_cosmos_distribution_v1beta1_distribution_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_distribution_v1beta1_distribution_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 13, NumExtensions: 0, NumServices: 0, }, diff --git a/api/cosmos/distribution/v1beta1/query.pulsar.go b/api/cosmos/distribution/v1beta1/query.pulsar.go index ae9656c2e57e..73f2471278bd 100644 --- a/api/cosmos/distribution/v1beta1/query.pulsar.go +++ b/api/cosmos/distribution/v1beta1/query.pulsar.go @@ -9423,6 +9423,1058 @@ func (x *fastReflection_QueryCommunityPoolResponse) ProtoMethods() *protoiface.M } } +var ( + md_QueryTokenizeShareRecordRewardRequest protoreflect.MessageDescriptor + fd_QueryTokenizeShareRecordRewardRequest_owner_address protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_distribution_v1beta1_query_proto_init() + md_QueryTokenizeShareRecordRewardRequest = File_cosmos_distribution_v1beta1_query_proto.Messages().ByName("QueryTokenizeShareRecordRewardRequest") + fd_QueryTokenizeShareRecordRewardRequest_owner_address = md_QueryTokenizeShareRecordRewardRequest.Fields().ByName("owner_address") +} + +var _ protoreflect.Message = (*fastReflection_QueryTokenizeShareRecordRewardRequest)(nil) + +type fastReflection_QueryTokenizeShareRecordRewardRequest QueryTokenizeShareRecordRewardRequest + +func (x *QueryTokenizeShareRecordRewardRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordRewardRequest)(x) +} + +func (x *QueryTokenizeShareRecordRewardRequest) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_distribution_v1beta1_query_proto_msgTypes[20] + 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_QueryTokenizeShareRecordRewardRequest_messageType fastReflection_QueryTokenizeShareRecordRewardRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryTokenizeShareRecordRewardRequest_messageType{} + +type fastReflection_QueryTokenizeShareRecordRewardRequest_messageType struct{} + +func (x fastReflection_QueryTokenizeShareRecordRewardRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordRewardRequest)(nil) +} +func (x fastReflection_QueryTokenizeShareRecordRewardRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordRewardRequest) +} +func (x fastReflection_QueryTokenizeShareRecordRewardRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordRewardRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTokenizeShareRecordRewardRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordRewardRequest +} + +// 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_QueryTokenizeShareRecordRewardRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryTokenizeShareRecordRewardRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTokenizeShareRecordRewardRequest) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordRewardRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTokenizeShareRecordRewardRequest) Interface() protoreflect.ProtoMessage { + return (*QueryTokenizeShareRecordRewardRequest)(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_QueryTokenizeShareRecordRewardRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.OwnerAddress != "" { + value := protoreflect.ValueOfString(x.OwnerAddress) + if !f(fd_QueryTokenizeShareRecordRewardRequest_owner_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_QueryTokenizeShareRecordRewardRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest.owner_address": + return x.OwnerAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest 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_QueryTokenizeShareRecordRewardRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest.owner_address": + x.OwnerAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest 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_QueryTokenizeShareRecordRewardRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest.owner_address": + value := x.OwnerAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest 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_QueryTokenizeShareRecordRewardRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest.owner_address": + x.OwnerAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest 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_QueryTokenizeShareRecordRewardRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest.owner_address": + panic(fmt.Errorf("field owner_address of message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest 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_QueryTokenizeShareRecordRewardRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest.owner_address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest 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_QueryTokenizeShareRecordRewardRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest", 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_QueryTokenizeShareRecordRewardRequest) 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_QueryTokenizeShareRecordRewardRequest) 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_QueryTokenizeShareRecordRewardRequest) 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_QueryTokenizeShareRecordRewardRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTokenizeShareRecordRewardRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.OwnerAddress) + 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().(*QueryTokenizeShareRecordRewardRequest) + 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.OwnerAddress) > 0 { + i -= len(x.OwnerAddress) + copy(dAtA[i:], x.OwnerAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.OwnerAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTokenizeShareRecordRewardRequest) + 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: QueryTokenizeShareRecordRewardRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTokenizeShareRecordRewardRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field OwnerAddress", 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.OwnerAddress = 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 _ protoreflect.List = (*_QueryTokenizeShareRecordRewardResponse_1_list)(nil) + +type _QueryTokenizeShareRecordRewardResponse_1_list struct { + list *[]*TokenizeShareRecordReward +} + +func (x *_QueryTokenizeShareRecordRewardResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryTokenizeShareRecordRewardResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryTokenizeShareRecordRewardResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*TokenizeShareRecordReward) + (*x.list)[i] = concreteValue +} + +func (x *_QueryTokenizeShareRecordRewardResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*TokenizeShareRecordReward) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryTokenizeShareRecordRewardResponse_1_list) AppendMutable() protoreflect.Value { + v := new(TokenizeShareRecordReward) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryTokenizeShareRecordRewardResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryTokenizeShareRecordRewardResponse_1_list) NewElement() protoreflect.Value { + v := new(TokenizeShareRecordReward) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryTokenizeShareRecordRewardResponse_1_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_QueryTokenizeShareRecordRewardResponse_2_list)(nil) + +type _QueryTokenizeShareRecordRewardResponse_2_list struct { + list *[]*v1beta1.DecCoin +} + +func (x *_QueryTokenizeShareRecordRewardResponse_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryTokenizeShareRecordRewardResponse_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryTokenizeShareRecordRewardResponse_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.DecCoin) + (*x.list)[i] = concreteValue +} + +func (x *_QueryTokenizeShareRecordRewardResponse_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.DecCoin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryTokenizeShareRecordRewardResponse_2_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.DecCoin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryTokenizeShareRecordRewardResponse_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryTokenizeShareRecordRewardResponse_2_list) NewElement() protoreflect.Value { + v := new(v1beta1.DecCoin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryTokenizeShareRecordRewardResponse_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryTokenizeShareRecordRewardResponse protoreflect.MessageDescriptor + fd_QueryTokenizeShareRecordRewardResponse_rewards protoreflect.FieldDescriptor + fd_QueryTokenizeShareRecordRewardResponse_total protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_distribution_v1beta1_query_proto_init() + md_QueryTokenizeShareRecordRewardResponse = File_cosmos_distribution_v1beta1_query_proto.Messages().ByName("QueryTokenizeShareRecordRewardResponse") + fd_QueryTokenizeShareRecordRewardResponse_rewards = md_QueryTokenizeShareRecordRewardResponse.Fields().ByName("rewards") + fd_QueryTokenizeShareRecordRewardResponse_total = md_QueryTokenizeShareRecordRewardResponse.Fields().ByName("total") +} + +var _ protoreflect.Message = (*fastReflection_QueryTokenizeShareRecordRewardResponse)(nil) + +type fastReflection_QueryTokenizeShareRecordRewardResponse QueryTokenizeShareRecordRewardResponse + +func (x *QueryTokenizeShareRecordRewardResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordRewardResponse)(x) +} + +func (x *QueryTokenizeShareRecordRewardResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_distribution_v1beta1_query_proto_msgTypes[21] + 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_QueryTokenizeShareRecordRewardResponse_messageType fastReflection_QueryTokenizeShareRecordRewardResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryTokenizeShareRecordRewardResponse_messageType{} + +type fastReflection_QueryTokenizeShareRecordRewardResponse_messageType struct{} + +func (x fastReflection_QueryTokenizeShareRecordRewardResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordRewardResponse)(nil) +} +func (x fastReflection_QueryTokenizeShareRecordRewardResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordRewardResponse) +} +func (x fastReflection_QueryTokenizeShareRecordRewardResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordRewardResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTokenizeShareRecordRewardResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordRewardResponse +} + +// 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_QueryTokenizeShareRecordRewardResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryTokenizeShareRecordRewardResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTokenizeShareRecordRewardResponse) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordRewardResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTokenizeShareRecordRewardResponse) Interface() protoreflect.ProtoMessage { + return (*QueryTokenizeShareRecordRewardResponse)(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_QueryTokenizeShareRecordRewardResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Rewards) != 0 { + value := protoreflect.ValueOfList(&_QueryTokenizeShareRecordRewardResponse_1_list{list: &x.Rewards}) + if !f(fd_QueryTokenizeShareRecordRewardResponse_rewards, value) { + return + } + } + if len(x.Total) != 0 { + value := protoreflect.ValueOfList(&_QueryTokenizeShareRecordRewardResponse_2_list{list: &x.Total}) + if !f(fd_QueryTokenizeShareRecordRewardResponse_total, 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_QueryTokenizeShareRecordRewardResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.rewards": + return len(x.Rewards) != 0 + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.total": + return len(x.Total) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse 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_QueryTokenizeShareRecordRewardResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.rewards": + x.Rewards = nil + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.total": + x.Total = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse 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_QueryTokenizeShareRecordRewardResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.rewards": + if len(x.Rewards) == 0 { + return protoreflect.ValueOfList(&_QueryTokenizeShareRecordRewardResponse_1_list{}) + } + listValue := &_QueryTokenizeShareRecordRewardResponse_1_list{list: &x.Rewards} + return protoreflect.ValueOfList(listValue) + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.total": + if len(x.Total) == 0 { + return protoreflect.ValueOfList(&_QueryTokenizeShareRecordRewardResponse_2_list{}) + } + listValue := &_QueryTokenizeShareRecordRewardResponse_2_list{list: &x.Total} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse 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_QueryTokenizeShareRecordRewardResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.rewards": + lv := value.List() + clv := lv.(*_QueryTokenizeShareRecordRewardResponse_1_list) + x.Rewards = *clv.list + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.total": + lv := value.List() + clv := lv.(*_QueryTokenizeShareRecordRewardResponse_2_list) + x.Total = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse 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_QueryTokenizeShareRecordRewardResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.rewards": + if x.Rewards == nil { + x.Rewards = []*TokenizeShareRecordReward{} + } + value := &_QueryTokenizeShareRecordRewardResponse_1_list{list: &x.Rewards} + return protoreflect.ValueOfList(value) + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.total": + if x.Total == nil { + x.Total = []*v1beta1.DecCoin{} + } + value := &_QueryTokenizeShareRecordRewardResponse_2_list{list: &x.Total} + return protoreflect.ValueOfList(value) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse 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_QueryTokenizeShareRecordRewardResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.rewards": + list := []*TokenizeShareRecordReward{} + return protoreflect.ValueOfList(&_QueryTokenizeShareRecordRewardResponse_1_list{list: &list}) + case "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.total": + list := []*v1beta1.DecCoin{} + return protoreflect.ValueOfList(&_QueryTokenizeShareRecordRewardResponse_2_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse 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_QueryTokenizeShareRecordRewardResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse", 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_QueryTokenizeShareRecordRewardResponse) 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_QueryTokenizeShareRecordRewardResponse) 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_QueryTokenizeShareRecordRewardResponse) 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_QueryTokenizeShareRecordRewardResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTokenizeShareRecordRewardResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.Rewards) > 0 { + for _, e := range x.Rewards { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.Total) > 0 { + for _, e := range x.Total { + l = options.Size(e) + 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().(*QueryTokenizeShareRecordRewardResponse) + 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.Total) > 0 { + for iNdEx := len(x.Total) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Total[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if len(x.Rewards) > 0 { + for iNdEx := len(x.Rewards) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Rewards[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTokenizeShareRecordRewardResponse) + 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: QueryTokenizeShareRecordRewardResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTokenizeShareRecordRewardResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Rewards", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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.Rewards = append(x.Rewards, &TokenizeShareRecordReward{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Rewards[len(x.Rewards)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Total", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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.Total = append(x.Total, &v1beta1.DecCoin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Total[len(x.Total)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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, + } +} + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.0 @@ -10243,6 +11295,90 @@ func (x *QueryCommunityPoolResponse) GetPool() []*v1beta1.DecCoin { return nil } +// QueryTokenizeShareRecordRewardRequest is the request type for the Query/TokenizeShareRecordReward RPC +// method. +type QueryTokenizeShareRecordRewardRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OwnerAddress string `protobuf:"bytes,1,opt,name=owner_address,json=ownerAddress,proto3" json:"owner_address,omitempty"` +} + +func (x *QueryTokenizeShareRecordRewardRequest) Reset() { + *x = QueryTokenizeShareRecordRewardRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_distribution_v1beta1_query_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryTokenizeShareRecordRewardRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryTokenizeShareRecordRewardRequest) ProtoMessage() {} + +// Deprecated: Use QueryTokenizeShareRecordRewardRequest.ProtoReflect.Descriptor instead. +func (*QueryTokenizeShareRecordRewardRequest) Descriptor() ([]byte, []int) { + return file_cosmos_distribution_v1beta1_query_proto_rawDescGZIP(), []int{20} +} + +func (x *QueryTokenizeShareRecordRewardRequest) GetOwnerAddress() string { + if x != nil { + return x.OwnerAddress + } + return "" +} + +// QueryTokenizeShareRecordRewardResponse is the response type for the Query/TokenizeShareRecordReward +// RPC method. +type QueryTokenizeShareRecordRewardResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // rewards defines all the rewards accrued by a delegator. + Rewards []*TokenizeShareRecordReward `protobuf:"bytes,1,rep,name=rewards,proto3" json:"rewards,omitempty"` + // total defines the sum of all the rewards. + Total []*v1beta1.DecCoin `protobuf:"bytes,2,rep,name=total,proto3" json:"total,omitempty"` +} + +func (x *QueryTokenizeShareRecordRewardResponse) Reset() { + *x = QueryTokenizeShareRecordRewardResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_distribution_v1beta1_query_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryTokenizeShareRecordRewardResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryTokenizeShareRecordRewardResponse) ProtoMessage() {} + +// Deprecated: Use QueryTokenizeShareRecordRewardResponse.ProtoReflect.Descriptor instead. +func (*QueryTokenizeShareRecordRewardResponse) Descriptor() ([]byte, []int) { + return file_cosmos_distribution_v1beta1_query_proto_rawDescGZIP(), []int{21} +} + +func (x *QueryTokenizeShareRecordRewardResponse) GetRewards() []*TokenizeShareRecordReward { + if x != nil { + return x.Rewards + } + return nil +} + +func (x *QueryTokenizeShareRecordRewardResponse) GetTotal() []*v1beta1.DecCoin { + if x != nil { + return x.Total + } + return nil +} + var File_cosmos_distribution_v1beta1_query_proto protoreflect.FileDescriptor var file_cosmos_distribution_v1beta1_query_proto_rawDesc = []byte{ @@ -10442,164 +11578,201 @@ var file_cosmos_distribution_v1beta1_query_proto_rawDesc = []byte{ 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x04, - 0x70, 0x6f, 0x6f, 0x6c, 0x32, 0xc4, 0x11, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x98, - 0x01, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0xe9, 0x01, 0x0a, 0x19, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x70, 0x6f, 0x6f, 0x6c, 0x22, 0x70, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, + 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xf2, 0xde, 0x1f, 0x14, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x0c, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x08, 0x88, 0xa0, + 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xe9, 0x01, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x56, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x67, 0x0a, 0x05, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, + 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x33, 0xc8, 0xde, 0x1f, 0x00, 0xaa, 0xdf, 0x1f, 0x2b, + 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, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x52, 0x05, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x32, 0xbf, 0x13, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x98, 0x01, 0x0a, + 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x1b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x4f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x44, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x25, 0x12, 0x23, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0xe9, 0x01, 0x0a, 0x19, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x4f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x12, 0x4f, 0x2f, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x6f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0xe2, 0x01, 0x0a, 0x13, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, + 0x6f, 0x72, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, + 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x1b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x4f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x12, 0x44, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x3d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x12, 0x46, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x4f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x12, 0x4f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0xd6, 0x01, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x6c, - 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, - 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x6c, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x7d, 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0xed, 0x01, 0x0a, 0x11, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, - 0x3a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, + 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x6f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x3c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x3d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x59, - 0x12, 0x57, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xe8, 0x01, 0x0a, 0x16, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x12, 0x3f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, - 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, - 0x43, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x3c, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x48, 0x12, 0x46, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0xf7, 0x01, 0x0a, 0x18, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x12, 0x4c, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, - 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x7d, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0xb5, 0x01, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, - 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, - 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, - 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, + 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x12, 0x46, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, + 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xd6, + 0x01, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x6c, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x53, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x45, 0x12, 0x43, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, + 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0xed, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x3a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, + 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x59, 0x12, 0x57, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x42, 0xfd, 0x01, 0x0a, 0x1f, - 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, - 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x40, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xe8, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x12, 0x3f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x64, 0x69, 0x73, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, - 0x02, 0x03, 0x43, 0x44, 0x58, 0xaa, 0x02, 0x1b, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, - 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0xca, 0x02, 0x1b, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0xe2, 0x02, 0x27, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1d, 0x43, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x3c, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x12, + 0x46, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0xf7, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, + 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x4e, 0x12, 0x4c, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, + 0x2f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0xb5, 0x01, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, + 0x6f, 0x6f, 0x6c, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x12, 0xf8, 0x01, 0x0a, 0x19, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x5f, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x42, 0xfd, 0x01, 0x0a, 0x1f, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x40, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, + 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x3b, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x44, 0x58, 0xaa, 0x02, + 0x1b, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1b, 0x43, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x27, 0x43, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x44, + 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -10614,7 +11787,7 @@ func file_cosmos_distribution_v1beta1_query_proto_rawDescGZIP() []byte { return file_cosmos_distribution_v1beta1_query_proto_rawDescData } -var file_cosmos_distribution_v1beta1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_cosmos_distribution_v1beta1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_cosmos_distribution_v1beta1_query_proto_goTypes = []interface{}{ (*QueryParamsRequest)(nil), // 0: cosmos.distribution.v1beta1.QueryParamsRequest (*QueryParamsResponse)(nil), // 1: cosmos.distribution.v1beta1.QueryParamsResponse @@ -10636,53 +11809,60 @@ var file_cosmos_distribution_v1beta1_query_proto_goTypes = []interface{}{ (*QueryDelegatorWithdrawAddressResponse)(nil), // 17: cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse (*QueryCommunityPoolRequest)(nil), // 18: cosmos.distribution.v1beta1.QueryCommunityPoolRequest (*QueryCommunityPoolResponse)(nil), // 19: cosmos.distribution.v1beta1.QueryCommunityPoolResponse - (*Params)(nil), // 20: cosmos.distribution.v1beta1.Params - (*v1beta1.DecCoin)(nil), // 21: cosmos.base.v1beta1.DecCoin - (*ValidatorOutstandingRewards)(nil), // 22: cosmos.distribution.v1beta1.ValidatorOutstandingRewards - (*ValidatorAccumulatedCommission)(nil), // 23: cosmos.distribution.v1beta1.ValidatorAccumulatedCommission - (*v1beta11.PageRequest)(nil), // 24: cosmos.base.query.v1beta1.PageRequest - (*ValidatorSlashEvent)(nil), // 25: cosmos.distribution.v1beta1.ValidatorSlashEvent - (*v1beta11.PageResponse)(nil), // 26: cosmos.base.query.v1beta1.PageResponse - (*DelegationDelegatorReward)(nil), // 27: cosmos.distribution.v1beta1.DelegationDelegatorReward + (*QueryTokenizeShareRecordRewardRequest)(nil), // 20: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest + (*QueryTokenizeShareRecordRewardResponse)(nil), // 21: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse + (*Params)(nil), // 22: cosmos.distribution.v1beta1.Params + (*v1beta1.DecCoin)(nil), // 23: cosmos.base.v1beta1.DecCoin + (*ValidatorOutstandingRewards)(nil), // 24: cosmos.distribution.v1beta1.ValidatorOutstandingRewards + (*ValidatorAccumulatedCommission)(nil), // 25: cosmos.distribution.v1beta1.ValidatorAccumulatedCommission + (*v1beta11.PageRequest)(nil), // 26: cosmos.base.query.v1beta1.PageRequest + (*ValidatorSlashEvent)(nil), // 27: cosmos.distribution.v1beta1.ValidatorSlashEvent + (*v1beta11.PageResponse)(nil), // 28: cosmos.base.query.v1beta1.PageResponse + (*DelegationDelegatorReward)(nil), // 29: cosmos.distribution.v1beta1.DelegationDelegatorReward + (*TokenizeShareRecordReward)(nil), // 30: cosmos.distribution.v1beta1.TokenizeShareRecordReward } var file_cosmos_distribution_v1beta1_query_proto_depIdxs = []int32{ - 20, // 0: cosmos.distribution.v1beta1.QueryParamsResponse.params:type_name -> cosmos.distribution.v1beta1.Params - 21, // 1: cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse.self_bond_rewards:type_name -> cosmos.base.v1beta1.DecCoin - 21, // 2: cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse.commission:type_name -> cosmos.base.v1beta1.DecCoin - 22, // 3: cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse.rewards:type_name -> cosmos.distribution.v1beta1.ValidatorOutstandingRewards - 23, // 4: cosmos.distribution.v1beta1.QueryValidatorCommissionResponse.commission:type_name -> cosmos.distribution.v1beta1.ValidatorAccumulatedCommission - 24, // 5: cosmos.distribution.v1beta1.QueryValidatorSlashesRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 25, // 6: cosmos.distribution.v1beta1.QueryValidatorSlashesResponse.slashes:type_name -> cosmos.distribution.v1beta1.ValidatorSlashEvent - 26, // 7: cosmos.distribution.v1beta1.QueryValidatorSlashesResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 21, // 8: cosmos.distribution.v1beta1.QueryDelegationRewardsResponse.rewards:type_name -> cosmos.base.v1beta1.DecCoin - 27, // 9: cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse.rewards:type_name -> cosmos.distribution.v1beta1.DelegationDelegatorReward - 21, // 10: cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse.total:type_name -> cosmos.base.v1beta1.DecCoin - 21, // 11: cosmos.distribution.v1beta1.QueryCommunityPoolResponse.pool:type_name -> cosmos.base.v1beta1.DecCoin - 0, // 12: cosmos.distribution.v1beta1.Query.Params:input_type -> cosmos.distribution.v1beta1.QueryParamsRequest - 2, // 13: cosmos.distribution.v1beta1.Query.ValidatorDistributionInfo:input_type -> cosmos.distribution.v1beta1.QueryValidatorDistributionInfoRequest - 4, // 14: cosmos.distribution.v1beta1.Query.ValidatorOutstandingRewards:input_type -> cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsRequest - 6, // 15: cosmos.distribution.v1beta1.Query.ValidatorCommission:input_type -> cosmos.distribution.v1beta1.QueryValidatorCommissionRequest - 8, // 16: cosmos.distribution.v1beta1.Query.ValidatorSlashes:input_type -> cosmos.distribution.v1beta1.QueryValidatorSlashesRequest - 10, // 17: cosmos.distribution.v1beta1.Query.DelegationRewards:input_type -> cosmos.distribution.v1beta1.QueryDelegationRewardsRequest - 12, // 18: cosmos.distribution.v1beta1.Query.DelegationTotalRewards:input_type -> cosmos.distribution.v1beta1.QueryDelegationTotalRewardsRequest - 14, // 19: cosmos.distribution.v1beta1.Query.DelegatorValidators:input_type -> cosmos.distribution.v1beta1.QueryDelegatorValidatorsRequest - 16, // 20: cosmos.distribution.v1beta1.Query.DelegatorWithdrawAddress:input_type -> cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressRequest - 18, // 21: cosmos.distribution.v1beta1.Query.CommunityPool:input_type -> cosmos.distribution.v1beta1.QueryCommunityPoolRequest - 1, // 22: cosmos.distribution.v1beta1.Query.Params:output_type -> cosmos.distribution.v1beta1.QueryParamsResponse - 3, // 23: cosmos.distribution.v1beta1.Query.ValidatorDistributionInfo:output_type -> cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse - 5, // 24: cosmos.distribution.v1beta1.Query.ValidatorOutstandingRewards:output_type -> cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse - 7, // 25: cosmos.distribution.v1beta1.Query.ValidatorCommission:output_type -> cosmos.distribution.v1beta1.QueryValidatorCommissionResponse - 9, // 26: cosmos.distribution.v1beta1.Query.ValidatorSlashes:output_type -> cosmos.distribution.v1beta1.QueryValidatorSlashesResponse - 11, // 27: cosmos.distribution.v1beta1.Query.DelegationRewards:output_type -> cosmos.distribution.v1beta1.QueryDelegationRewardsResponse - 13, // 28: cosmos.distribution.v1beta1.Query.DelegationTotalRewards:output_type -> cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse - 15, // 29: cosmos.distribution.v1beta1.Query.DelegatorValidators:output_type -> cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse - 17, // 30: cosmos.distribution.v1beta1.Query.DelegatorWithdrawAddress:output_type -> cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse - 19, // 31: cosmos.distribution.v1beta1.Query.CommunityPool:output_type -> cosmos.distribution.v1beta1.QueryCommunityPoolResponse - 22, // [22:32] is the sub-list for method output_type - 12, // [12:22] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name + 22, // 0: cosmos.distribution.v1beta1.QueryParamsResponse.params:type_name -> cosmos.distribution.v1beta1.Params + 23, // 1: cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse.self_bond_rewards:type_name -> cosmos.base.v1beta1.DecCoin + 23, // 2: cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse.commission:type_name -> cosmos.base.v1beta1.DecCoin + 24, // 3: cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse.rewards:type_name -> cosmos.distribution.v1beta1.ValidatorOutstandingRewards + 25, // 4: cosmos.distribution.v1beta1.QueryValidatorCommissionResponse.commission:type_name -> cosmos.distribution.v1beta1.ValidatorAccumulatedCommission + 26, // 5: cosmos.distribution.v1beta1.QueryValidatorSlashesRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 27, // 6: cosmos.distribution.v1beta1.QueryValidatorSlashesResponse.slashes:type_name -> cosmos.distribution.v1beta1.ValidatorSlashEvent + 28, // 7: cosmos.distribution.v1beta1.QueryValidatorSlashesResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 23, // 8: cosmos.distribution.v1beta1.QueryDelegationRewardsResponse.rewards:type_name -> cosmos.base.v1beta1.DecCoin + 29, // 9: cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse.rewards:type_name -> cosmos.distribution.v1beta1.DelegationDelegatorReward + 23, // 10: cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse.total:type_name -> cosmos.base.v1beta1.DecCoin + 23, // 11: cosmos.distribution.v1beta1.QueryCommunityPoolResponse.pool:type_name -> cosmos.base.v1beta1.DecCoin + 30, // 12: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.rewards:type_name -> cosmos.distribution.v1beta1.TokenizeShareRecordReward + 23, // 13: cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse.total:type_name -> cosmos.base.v1beta1.DecCoin + 0, // 14: cosmos.distribution.v1beta1.Query.Params:input_type -> cosmos.distribution.v1beta1.QueryParamsRequest + 2, // 15: cosmos.distribution.v1beta1.Query.ValidatorDistributionInfo:input_type -> cosmos.distribution.v1beta1.QueryValidatorDistributionInfoRequest + 4, // 16: cosmos.distribution.v1beta1.Query.ValidatorOutstandingRewards:input_type -> cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsRequest + 6, // 17: cosmos.distribution.v1beta1.Query.ValidatorCommission:input_type -> cosmos.distribution.v1beta1.QueryValidatorCommissionRequest + 8, // 18: cosmos.distribution.v1beta1.Query.ValidatorSlashes:input_type -> cosmos.distribution.v1beta1.QueryValidatorSlashesRequest + 10, // 19: cosmos.distribution.v1beta1.Query.DelegationRewards:input_type -> cosmos.distribution.v1beta1.QueryDelegationRewardsRequest + 12, // 20: cosmos.distribution.v1beta1.Query.DelegationTotalRewards:input_type -> cosmos.distribution.v1beta1.QueryDelegationTotalRewardsRequest + 14, // 21: cosmos.distribution.v1beta1.Query.DelegatorValidators:input_type -> cosmos.distribution.v1beta1.QueryDelegatorValidatorsRequest + 16, // 22: cosmos.distribution.v1beta1.Query.DelegatorWithdrawAddress:input_type -> cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressRequest + 18, // 23: cosmos.distribution.v1beta1.Query.CommunityPool:input_type -> cosmos.distribution.v1beta1.QueryCommunityPoolRequest + 20, // 24: cosmos.distribution.v1beta1.Query.TokenizeShareRecordReward:input_type -> cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest + 1, // 25: cosmos.distribution.v1beta1.Query.Params:output_type -> cosmos.distribution.v1beta1.QueryParamsResponse + 3, // 26: cosmos.distribution.v1beta1.Query.ValidatorDistributionInfo:output_type -> cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse + 5, // 27: cosmos.distribution.v1beta1.Query.ValidatorOutstandingRewards:output_type -> cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse + 7, // 28: cosmos.distribution.v1beta1.Query.ValidatorCommission:output_type -> cosmos.distribution.v1beta1.QueryValidatorCommissionResponse + 9, // 29: cosmos.distribution.v1beta1.Query.ValidatorSlashes:output_type -> cosmos.distribution.v1beta1.QueryValidatorSlashesResponse + 11, // 30: cosmos.distribution.v1beta1.Query.DelegationRewards:output_type -> cosmos.distribution.v1beta1.QueryDelegationRewardsResponse + 13, // 31: cosmos.distribution.v1beta1.Query.DelegationTotalRewards:output_type -> cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse + 15, // 32: cosmos.distribution.v1beta1.Query.DelegatorValidators:output_type -> cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse + 17, // 33: cosmos.distribution.v1beta1.Query.DelegatorWithdrawAddress:output_type -> cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse + 19, // 34: cosmos.distribution.v1beta1.Query.CommunityPool:output_type -> cosmos.distribution.v1beta1.QueryCommunityPoolResponse + 21, // 35: cosmos.distribution.v1beta1.Query.TokenizeShareRecordReward:output_type -> cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse + 25, // [25:36] is the sub-list for method output_type + 14, // [14:25] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_cosmos_distribution_v1beta1_query_proto_init() } @@ -10932,6 +12112,30 @@ func file_cosmos_distribution_v1beta1_query_proto_init() { return nil } } + file_cosmos_distribution_v1beta1_query_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTokenizeShareRecordRewardRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_distribution_v1beta1_query_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTokenizeShareRecordRewardResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -10939,7 +12143,7 @@ func file_cosmos_distribution_v1beta1_query_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_distribution_v1beta1_query_proto_rawDesc, NumEnums: 0, - NumMessages: 20, + NumMessages: 22, NumExtensions: 0, NumServices: 1, }, diff --git a/api/cosmos/distribution/v1beta1/query_grpc.pb.go b/api/cosmos/distribution/v1beta1/query_grpc.pb.go index 9360bcff9335..33ab6de82404 100644 --- a/api/cosmos/distribution/v1beta1/query_grpc.pb.go +++ b/api/cosmos/distribution/v1beta1/query_grpc.pb.go @@ -29,6 +29,7 @@ const ( Query_DelegatorValidators_FullMethodName = "/cosmos.distribution.v1beta1.Query/DelegatorValidators" Query_DelegatorWithdrawAddress_FullMethodName = "/cosmos.distribution.v1beta1.Query/DelegatorWithdrawAddress" Query_CommunityPool_FullMethodName = "/cosmos.distribution.v1beta1.Query/CommunityPool" + Query_TokenizeShareRecordReward_FullMethodName = "/cosmos.distribution.v1beta1.Query/TokenizeShareRecordReward" ) // QueryClient is the client API for Query service. @@ -56,6 +57,8 @@ type QueryClient interface { DelegatorWithdrawAddress(ctx context.Context, in *QueryDelegatorWithdrawAddressRequest, opts ...grpc.CallOption) (*QueryDelegatorWithdrawAddressResponse, error) // CommunityPool queries the community pool coins. CommunityPool(ctx context.Context, in *QueryCommunityPoolRequest, opts ...grpc.CallOption) (*QueryCommunityPoolResponse, error) + // TokenizeShareRecordReward queries the tokenize share record rewards + TokenizeShareRecordReward(ctx context.Context, in *QueryTokenizeShareRecordRewardRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordRewardResponse, error) } type queryClient struct { @@ -156,6 +159,15 @@ func (c *queryClient) CommunityPool(ctx context.Context, in *QueryCommunityPoolR return out, nil } +func (c *queryClient) TokenizeShareRecordReward(ctx context.Context, in *QueryTokenizeShareRecordRewardRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordRewardResponse, error) { + out := new(QueryTokenizeShareRecordRewardResponse) + err := c.cc.Invoke(ctx, Query_TokenizeShareRecordReward_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryServer is the server API for Query service. // All implementations must embed UnimplementedQueryServer // for forward compatibility @@ -181,6 +193,8 @@ type QueryServer interface { DelegatorWithdrawAddress(context.Context, *QueryDelegatorWithdrawAddressRequest) (*QueryDelegatorWithdrawAddressResponse, error) // CommunityPool queries the community pool coins. CommunityPool(context.Context, *QueryCommunityPoolRequest) (*QueryCommunityPoolResponse, error) + // TokenizeShareRecordReward queries the tokenize share record rewards + TokenizeShareRecordReward(context.Context, *QueryTokenizeShareRecordRewardRequest) (*QueryTokenizeShareRecordRewardResponse, error) mustEmbedUnimplementedQueryServer() } @@ -218,6 +232,9 @@ func (UnimplementedQueryServer) DelegatorWithdrawAddress(context.Context, *Query func (UnimplementedQueryServer) CommunityPool(context.Context, *QueryCommunityPoolRequest) (*QueryCommunityPoolResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CommunityPool not implemented") } +func (UnimplementedQueryServer) TokenizeShareRecordReward(context.Context, *QueryTokenizeShareRecordRewardRequest) (*QueryTokenizeShareRecordRewardResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareRecordReward not implemented") +} func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} // UnsafeQueryServer may be embedded to opt out of forward compatibility for this service. @@ -411,6 +428,24 @@ func _Query_CommunityPool_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _Query_TokenizeShareRecordReward_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenizeShareRecordRewardRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TokenizeShareRecordReward(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_TokenizeShareRecordReward_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenizeShareRecordReward(ctx, req.(*QueryTokenizeShareRecordRewardRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Query_ServiceDesc is the grpc.ServiceDesc for Query service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -458,6 +493,10 @@ var Query_ServiceDesc = grpc.ServiceDesc{ MethodName: "CommunityPool", Handler: _Query_CommunityPool_Handler, }, + { + MethodName: "TokenizeShareRecordReward", + Handler: _Query_TokenizeShareRecordReward_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "cosmos/distribution/v1beta1/query.proto", diff --git a/api/cosmos/distribution/v1beta1/tx.pulsar.go b/api/cosmos/distribution/v1beta1/tx.pulsar.go index a59ff980eb62..10cb6409fd45 100644 --- a/api/cosmos/distribution/v1beta1/tx.pulsar.go +++ b/api/cosmos/distribution/v1beta1/tx.pulsar.go @@ -5140,6 +5140,1606 @@ func (x *fastReflection_MsgCommunityPoolSpend) ProtoMethods() *protoiface.Method } } +var ( + md_MsgWithdrawTokenizeShareRecordReward protoreflect.MessageDescriptor + fd_MsgWithdrawTokenizeShareRecordReward_owner_address protoreflect.FieldDescriptor + fd_MsgWithdrawTokenizeShareRecordReward_record_id protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_distribution_v1beta1_tx_proto_init() + md_MsgWithdrawTokenizeShareRecordReward = File_cosmos_distribution_v1beta1_tx_proto.Messages().ByName("MsgWithdrawTokenizeShareRecordReward") + fd_MsgWithdrawTokenizeShareRecordReward_owner_address = md_MsgWithdrawTokenizeShareRecordReward.Fields().ByName("owner_address") + fd_MsgWithdrawTokenizeShareRecordReward_record_id = md_MsgWithdrawTokenizeShareRecordReward.Fields().ByName("record_id") +} + +var _ protoreflect.Message = (*fastReflection_MsgWithdrawTokenizeShareRecordReward)(nil) + +type fastReflection_MsgWithdrawTokenizeShareRecordReward MsgWithdrawTokenizeShareRecordReward + +func (x *MsgWithdrawTokenizeShareRecordReward) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgWithdrawTokenizeShareRecordReward)(x) +} + +func (x *MsgWithdrawTokenizeShareRecordReward) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_distribution_v1beta1_tx_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_MsgWithdrawTokenizeShareRecordReward_messageType fastReflection_MsgWithdrawTokenizeShareRecordReward_messageType +var _ protoreflect.MessageType = fastReflection_MsgWithdrawTokenizeShareRecordReward_messageType{} + +type fastReflection_MsgWithdrawTokenizeShareRecordReward_messageType struct{} + +func (x fastReflection_MsgWithdrawTokenizeShareRecordReward_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgWithdrawTokenizeShareRecordReward)(nil) +} +func (x fastReflection_MsgWithdrawTokenizeShareRecordReward_messageType) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawTokenizeShareRecordReward) +} +func (x fastReflection_MsgWithdrawTokenizeShareRecordReward_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawTokenizeShareRecordReward +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgWithdrawTokenizeShareRecordReward) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawTokenizeShareRecordReward +} + +// 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_MsgWithdrawTokenizeShareRecordReward) Type() protoreflect.MessageType { + return _fastReflection_MsgWithdrawTokenizeShareRecordReward_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgWithdrawTokenizeShareRecordReward) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawTokenizeShareRecordReward) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgWithdrawTokenizeShareRecordReward) Interface() protoreflect.ProtoMessage { + return (*MsgWithdrawTokenizeShareRecordReward)(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_MsgWithdrawTokenizeShareRecordReward) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.OwnerAddress != "" { + value := protoreflect.ValueOfString(x.OwnerAddress) + if !f(fd_MsgWithdrawTokenizeShareRecordReward_owner_address, value) { + return + } + } + if x.RecordId != uint64(0) { + value := protoreflect.ValueOfUint64(x.RecordId) + if !f(fd_MsgWithdrawTokenizeShareRecordReward_record_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_MsgWithdrawTokenizeShareRecordReward) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward.owner_address": + return x.OwnerAddress != "" + case "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward.record_id": + return x.RecordId != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward 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_MsgWithdrawTokenizeShareRecordReward) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward.owner_address": + x.OwnerAddress = "" + case "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward.record_id": + x.RecordId = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward 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_MsgWithdrawTokenizeShareRecordReward) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward.owner_address": + value := x.OwnerAddress + return protoreflect.ValueOfString(value) + case "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward.record_id": + value := x.RecordId + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward 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_MsgWithdrawTokenizeShareRecordReward) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward.owner_address": + x.OwnerAddress = value.Interface().(string) + case "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward.record_id": + x.RecordId = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward 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_MsgWithdrawTokenizeShareRecordReward) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward.owner_address": + panic(fmt.Errorf("field owner_address of message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward is not mutable")) + case "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward.record_id": + panic(fmt.Errorf("field record_id of message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward 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_MsgWithdrawTokenizeShareRecordReward) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward.owner_address": + return protoreflect.ValueOfString("") + case "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward.record_id": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward 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_MsgWithdrawTokenizeShareRecordReward) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward", 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_MsgWithdrawTokenizeShareRecordReward) 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_MsgWithdrawTokenizeShareRecordReward) 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_MsgWithdrawTokenizeShareRecordReward) 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_MsgWithdrawTokenizeShareRecordReward) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgWithdrawTokenizeShareRecordReward) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.OwnerAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.RecordId != 0 { + n += 1 + runtime.Sov(uint64(x.RecordId)) + } + 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().(*MsgWithdrawTokenizeShareRecordReward) + 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.RecordId != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.RecordId)) + i-- + dAtA[i] = 0x10 + } + if len(x.OwnerAddress) > 0 { + i -= len(x.OwnerAddress) + copy(dAtA[i:], x.OwnerAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.OwnerAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgWithdrawTokenizeShareRecordReward) + 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: MsgWithdrawTokenizeShareRecordReward: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgWithdrawTokenizeShareRecordReward: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field OwnerAddress", 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.OwnerAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RecordId", wireType) + } + x.RecordId = 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.RecordId |= 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_MsgWithdrawTokenizeShareRecordRewardResponse protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_distribution_v1beta1_tx_proto_init() + md_MsgWithdrawTokenizeShareRecordRewardResponse = File_cosmos_distribution_v1beta1_tx_proto.Messages().ByName("MsgWithdrawTokenizeShareRecordRewardResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse)(nil) + +type fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse MsgWithdrawTokenizeShareRecordRewardResponse + +func (x *MsgWithdrawTokenizeShareRecordRewardResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse)(x) +} + +func (x *MsgWithdrawTokenizeShareRecordRewardResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_distribution_v1beta1_tx_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse_messageType fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse_messageType{} + +type fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse_messageType struct{} + +func (x fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse)(nil) +} +func (x fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse) +} +func (x fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawTokenizeShareRecordRewardResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawTokenizeShareRecordRewardResponse +} + +// 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_MsgWithdrawTokenizeShareRecordRewardResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgWithdrawTokenizeShareRecordRewardResponse) Interface() protoreflect.ProtoMessage { + return (*MsgWithdrawTokenizeShareRecordRewardResponse)(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_MsgWithdrawTokenizeShareRecordRewardResponse) 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_MsgWithdrawTokenizeShareRecordRewardResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse 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_MsgWithdrawTokenizeShareRecordRewardResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse 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_MsgWithdrawTokenizeShareRecordRewardResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse 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_MsgWithdrawTokenizeShareRecordRewardResponse) 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.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse 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_MsgWithdrawTokenizeShareRecordRewardResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse 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_MsgWithdrawTokenizeShareRecordRewardResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse 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_MsgWithdrawTokenizeShareRecordRewardResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse", 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_MsgWithdrawTokenizeShareRecordRewardResponse) 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_MsgWithdrawTokenizeShareRecordRewardResponse) 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_MsgWithdrawTokenizeShareRecordRewardResponse) 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_MsgWithdrawTokenizeShareRecordRewardResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgWithdrawTokenizeShareRecordRewardResponse) + 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().(*MsgWithdrawTokenizeShareRecordRewardResponse) + 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().(*MsgWithdrawTokenizeShareRecordRewardResponse) + 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: MsgWithdrawTokenizeShareRecordRewardResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgWithdrawTokenizeShareRecordRewardResponse: 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_MsgWithdrawAllTokenizeShareRecordReward protoreflect.MessageDescriptor + fd_MsgWithdrawAllTokenizeShareRecordReward_owner_address protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_distribution_v1beta1_tx_proto_init() + md_MsgWithdrawAllTokenizeShareRecordReward = File_cosmos_distribution_v1beta1_tx_proto.Messages().ByName("MsgWithdrawAllTokenizeShareRecordReward") + fd_MsgWithdrawAllTokenizeShareRecordReward_owner_address = md_MsgWithdrawAllTokenizeShareRecordReward.Fields().ByName("owner_address") +} + +var _ protoreflect.Message = (*fastReflection_MsgWithdrawAllTokenizeShareRecordReward)(nil) + +type fastReflection_MsgWithdrawAllTokenizeShareRecordReward MsgWithdrawAllTokenizeShareRecordReward + +func (x *MsgWithdrawAllTokenizeShareRecordReward) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgWithdrawAllTokenizeShareRecordReward)(x) +} + +func (x *MsgWithdrawAllTokenizeShareRecordReward) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_distribution_v1beta1_tx_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_MsgWithdrawAllTokenizeShareRecordReward_messageType fastReflection_MsgWithdrawAllTokenizeShareRecordReward_messageType +var _ protoreflect.MessageType = fastReflection_MsgWithdrawAllTokenizeShareRecordReward_messageType{} + +type fastReflection_MsgWithdrawAllTokenizeShareRecordReward_messageType struct{} + +func (x fastReflection_MsgWithdrawAllTokenizeShareRecordReward_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgWithdrawAllTokenizeShareRecordReward)(nil) +} +func (x fastReflection_MsgWithdrawAllTokenizeShareRecordReward_messageType) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawAllTokenizeShareRecordReward) +} +func (x fastReflection_MsgWithdrawAllTokenizeShareRecordReward_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawAllTokenizeShareRecordReward +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgWithdrawAllTokenizeShareRecordReward) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawAllTokenizeShareRecordReward +} + +// 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_MsgWithdrawAllTokenizeShareRecordReward) Type() protoreflect.MessageType { + return _fastReflection_MsgWithdrawAllTokenizeShareRecordReward_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgWithdrawAllTokenizeShareRecordReward) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawAllTokenizeShareRecordReward) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgWithdrawAllTokenizeShareRecordReward) Interface() protoreflect.ProtoMessage { + return (*MsgWithdrawAllTokenizeShareRecordReward)(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_MsgWithdrawAllTokenizeShareRecordReward) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.OwnerAddress != "" { + value := protoreflect.ValueOfString(x.OwnerAddress) + if !f(fd_MsgWithdrawAllTokenizeShareRecordReward_owner_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_MsgWithdrawAllTokenizeShareRecordReward) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward.owner_address": + return x.OwnerAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward 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_MsgWithdrawAllTokenizeShareRecordReward) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward.owner_address": + x.OwnerAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward 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_MsgWithdrawAllTokenizeShareRecordReward) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward.owner_address": + value := x.OwnerAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward 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_MsgWithdrawAllTokenizeShareRecordReward) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward.owner_address": + x.OwnerAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward 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_MsgWithdrawAllTokenizeShareRecordReward) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward.owner_address": + panic(fmt.Errorf("field owner_address of message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward 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_MsgWithdrawAllTokenizeShareRecordReward) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward.owner_address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward 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_MsgWithdrawAllTokenizeShareRecordReward) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward", 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_MsgWithdrawAllTokenizeShareRecordReward) 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_MsgWithdrawAllTokenizeShareRecordReward) 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_MsgWithdrawAllTokenizeShareRecordReward) 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_MsgWithdrawAllTokenizeShareRecordReward) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgWithdrawAllTokenizeShareRecordReward) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.OwnerAddress) + 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().(*MsgWithdrawAllTokenizeShareRecordReward) + 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.OwnerAddress) > 0 { + i -= len(x.OwnerAddress) + copy(dAtA[i:], x.OwnerAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.OwnerAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgWithdrawAllTokenizeShareRecordReward) + 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: MsgWithdrawAllTokenizeShareRecordReward: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgWithdrawAllTokenizeShareRecordReward: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field OwnerAddress", 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.OwnerAddress = 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_MsgWithdrawAllTokenizeShareRecordRewardResponse protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_distribution_v1beta1_tx_proto_init() + md_MsgWithdrawAllTokenizeShareRecordRewardResponse = File_cosmos_distribution_v1beta1_tx_proto.Messages().ByName("MsgWithdrawAllTokenizeShareRecordRewardResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse)(nil) + +type fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse MsgWithdrawAllTokenizeShareRecordRewardResponse + +func (x *MsgWithdrawAllTokenizeShareRecordRewardResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse)(x) +} + +func (x *MsgWithdrawAllTokenizeShareRecordRewardResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_distribution_v1beta1_tx_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse_messageType fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse_messageType{} + +type fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse_messageType struct{} + +func (x fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse)(nil) +} +func (x fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse) +} +func (x fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawAllTokenizeShareRecordRewardResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawAllTokenizeShareRecordRewardResponse +} + +// 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_MsgWithdrawAllTokenizeShareRecordRewardResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgWithdrawAllTokenizeShareRecordRewardResponse) Interface() protoreflect.ProtoMessage { + return (*MsgWithdrawAllTokenizeShareRecordRewardResponse)(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_MsgWithdrawAllTokenizeShareRecordRewardResponse) 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_MsgWithdrawAllTokenizeShareRecordRewardResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse 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_MsgWithdrawAllTokenizeShareRecordRewardResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse 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_MsgWithdrawAllTokenizeShareRecordRewardResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse 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_MsgWithdrawAllTokenizeShareRecordRewardResponse) 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.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse 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_MsgWithdrawAllTokenizeShareRecordRewardResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse 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_MsgWithdrawAllTokenizeShareRecordRewardResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse")) + } + panic(fmt.Errorf("message cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse 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_MsgWithdrawAllTokenizeShareRecordRewardResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse", 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_MsgWithdrawAllTokenizeShareRecordRewardResponse) 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_MsgWithdrawAllTokenizeShareRecordRewardResponse) 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_MsgWithdrawAllTokenizeShareRecordRewardResponse) 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_MsgWithdrawAllTokenizeShareRecordRewardResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgWithdrawAllTokenizeShareRecordRewardResponse) + 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().(*MsgWithdrawAllTokenizeShareRecordRewardResponse) + 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().(*MsgWithdrawAllTokenizeShareRecordRewardResponse) + 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: MsgWithdrawAllTokenizeShareRecordRewardResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgWithdrawAllTokenizeShareRecordRewardResponse: 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_MsgCommunityPoolSpendResponse protoreflect.MessageDescriptor ) @@ -5158,7 +6758,7 @@ func (x *MsgCommunityPoolSpendResponse) ProtoReflect() protoreflect.Message { } func (x *MsgCommunityPoolSpendResponse) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_distribution_v1beta1_tx_proto_msgTypes[11] + mi := &file_cosmos_distribution_v1beta1_tx_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5949,6 +7549,141 @@ func (x *MsgCommunityPoolSpend) GetAmount() []*v1beta1.Coin { return nil } +// MsgWithdrawTokenizeShareRecordReward withdraws tokenize share rewards for a specific record +type MsgWithdrawTokenizeShareRecordReward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OwnerAddress string `protobuf:"bytes,1,opt,name=owner_address,json=ownerAddress,proto3" json:"owner_address,omitempty"` + RecordId uint64 `protobuf:"varint,2,opt,name=record_id,json=recordId,proto3" json:"record_id,omitempty"` +} + +func (x *MsgWithdrawTokenizeShareRecordReward) Reset() { + *x = MsgWithdrawTokenizeShareRecordReward{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_distribution_v1beta1_tx_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgWithdrawTokenizeShareRecordReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgWithdrawTokenizeShareRecordReward) ProtoMessage() {} + +// Deprecated: Use MsgWithdrawTokenizeShareRecordReward.ProtoReflect.Descriptor instead. +func (*MsgWithdrawTokenizeShareRecordReward) Descriptor() ([]byte, []int) { + return file_cosmos_distribution_v1beta1_tx_proto_rawDescGZIP(), []int{11} +} + +func (x *MsgWithdrawTokenizeShareRecordReward) GetOwnerAddress() string { + if x != nil { + return x.OwnerAddress + } + return "" +} + +func (x *MsgWithdrawTokenizeShareRecordReward) GetRecordId() uint64 { + if x != nil { + return x.RecordId + } + return 0 +} + +// MsgWithdrawTokenizeShareRecordReward defines the Msg/WithdrawTokenizeShareRecordReward response type. +type MsgWithdrawTokenizeShareRecordRewardResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgWithdrawTokenizeShareRecordRewardResponse) Reset() { + *x = MsgWithdrawTokenizeShareRecordRewardResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_distribution_v1beta1_tx_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgWithdrawTokenizeShareRecordRewardResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgWithdrawTokenizeShareRecordRewardResponse) ProtoMessage() {} + +// Deprecated: Use MsgWithdrawTokenizeShareRecordRewardResponse.ProtoReflect.Descriptor instead. +func (*MsgWithdrawTokenizeShareRecordRewardResponse) Descriptor() ([]byte, []int) { + return file_cosmos_distribution_v1beta1_tx_proto_rawDescGZIP(), []int{12} +} + +// MsgWithdrawAllTokenizeShareRecordReward withdraws tokenize share rewards or all +// records owned by the designated owner +type MsgWithdrawAllTokenizeShareRecordReward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OwnerAddress string `protobuf:"bytes,1,opt,name=owner_address,json=ownerAddress,proto3" json:"owner_address,omitempty"` +} + +func (x *MsgWithdrawAllTokenizeShareRecordReward) Reset() { + *x = MsgWithdrawAllTokenizeShareRecordReward{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_distribution_v1beta1_tx_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgWithdrawAllTokenizeShareRecordReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgWithdrawAllTokenizeShareRecordReward) ProtoMessage() {} + +// Deprecated: Use MsgWithdrawAllTokenizeShareRecordReward.ProtoReflect.Descriptor instead. +func (*MsgWithdrawAllTokenizeShareRecordReward) Descriptor() ([]byte, []int) { + return file_cosmos_distribution_v1beta1_tx_proto_rawDescGZIP(), []int{13} +} + +func (x *MsgWithdrawAllTokenizeShareRecordReward) GetOwnerAddress() string { + if x != nil { + return x.OwnerAddress + } + return "" +} + +// MsgWithdrawAllTokenizeShareRecordRewardResponse defines the Msg/WithdrawTokenizeShareRecordReward response type. +type MsgWithdrawAllTokenizeShareRecordRewardResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgWithdrawAllTokenizeShareRecordRewardResponse) Reset() { + *x = MsgWithdrawAllTokenizeShareRecordRewardResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_distribution_v1beta1_tx_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgWithdrawAllTokenizeShareRecordRewardResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgWithdrawAllTokenizeShareRecordRewardResponse) ProtoMessage() {} + +// Deprecated: Use MsgWithdrawAllTokenizeShareRecordRewardResponse.ProtoReflect.Descriptor instead. +func (*MsgWithdrawAllTokenizeShareRecordRewardResponse) Descriptor() ([]byte, []int) { + return file_cosmos_distribution_v1beta1_tx_proto_rawDescGZIP(), []int{14} +} + // MsgCommunityPoolSpendResponse defines the response to executing a // MsgCommunityPoolSpend message. // @@ -5962,7 +7697,7 @@ type MsgCommunityPoolSpendResponse struct { func (x *MsgCommunityPoolSpendResponse) Reset() { *x = MsgCommunityPoolSpendResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_distribution_v1beta1_tx_proto_msgTypes[11] + mi := &file_cosmos_distribution_v1beta1_tx_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5976,7 +7711,7 @@ func (*MsgCommunityPoolSpendResponse) ProtoMessage() {} // Deprecated: Use MsgCommunityPoolSpendResponse.ProtoReflect.Descriptor instead. func (*MsgCommunityPoolSpendResponse) Descriptor() ([]byte, []int) { - return file_cosmos_distribution_v1beta1_tx_proto_rawDescGZIP(), []int{11} + return file_cosmos_distribution_v1beta1_tx_proto_rawDescGZIP(), []int{15} } var File_cosmos_distribution_v1beta1_tx_proto protoreflect.FileDescriptor @@ -6108,78 +7843,124 @@ var file_cosmos_distribution_v1beta1_tx_proto_rawDesc = []byte{ 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x8a, 0xe7, 0xb0, 0x2a, 0x26, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x2f, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, - 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x22, 0x1f, 0x0a, 0x1d, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xca, 0x06, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, - 0x84, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x57, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x17, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x3f, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9f, 0x01, 0x0a, - 0x1b, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x2e, 0x63, + 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x22, 0x8c, 0x01, 0x0a, 0x24, 0x4d, 0x73, 0x67, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, + 0x3d, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xf2, 0xde, 0x1f, 0x14, 0x79, 0x61, 0x6d, 0x6c, + 0x3a, 0x22, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, + 0x52, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, + 0x0a, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64, 0x3a, 0x08, 0x88, 0xa0, 0x1f, + 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x2e, 0x0a, 0x2c, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x72, 0x0a, 0x27, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x12, 0x3d, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xf2, 0xde, 0x1f, 0x14, 0x79, 0x61, 0x6d, + 0x6c, 0x3a, 0x22, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x22, 0x52, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, + 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x31, 0x0a, 0x2f, 0x4d, 0x73, 0x67, + 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x0a, 0x1d, + 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, + 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xbb, 0x09, + 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x84, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x43, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, - 0x01, 0x0a, 0x11, 0x46, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, - 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x46, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x46, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x12, 0x2c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, + 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x12, 0x43, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x32, 0x2e, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, - 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, + 0x73, 0x67, 0x53, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x93, 0x01, 0x0a, + 0x17, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x1a, 0x3f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, - 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, - 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xfe, 0x01, 0x0a, 0x1f, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, + 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x1b, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x3b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x1a, + 0x43, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x11, 0x46, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x40, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, - 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x3b, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x44, 0x58, 0xaa, 0x02, 0x1b, 0x43, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1b, 0x43, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5c, - 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x27, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x1d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x44, 0x69, 0x73, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0xa8, 0xe2, 0x1e, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x46, 0x75, 0x6e, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x1a, 0x39, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x46, + 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, + 0x12, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0xb1, 0x01, 0x0a, 0x21, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x49, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xba, 0x01, 0x0a, 0x24, 0x57, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x12, 0x44, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, + 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x4c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xfe, 0x01, 0x0a, 0x1f, + 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, + 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x40, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, + 0x44, 0x58, 0xaa, 0x02, 0x1b, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0xca, 0x02, 0x1b, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, + 0x27, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x3a, 0x3a, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, + 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa8, 0xe2, 0x1e, 0x01, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6194,43 +7975,51 @@ func file_cosmos_distribution_v1beta1_tx_proto_rawDescGZIP() []byte { return file_cosmos_distribution_v1beta1_tx_proto_rawDescData } -var file_cosmos_distribution_v1beta1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_cosmos_distribution_v1beta1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_cosmos_distribution_v1beta1_tx_proto_goTypes = []interface{}{ - (*MsgSetWithdrawAddress)(nil), // 0: cosmos.distribution.v1beta1.MsgSetWithdrawAddress - (*MsgSetWithdrawAddressResponse)(nil), // 1: cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse - (*MsgWithdrawDelegatorReward)(nil), // 2: cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward - (*MsgWithdrawDelegatorRewardResponse)(nil), // 3: cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse - (*MsgWithdrawValidatorCommission)(nil), // 4: cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission - (*MsgWithdrawValidatorCommissionResponse)(nil), // 5: cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse - (*MsgFundCommunityPool)(nil), // 6: cosmos.distribution.v1beta1.MsgFundCommunityPool - (*MsgFundCommunityPoolResponse)(nil), // 7: cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse - (*MsgUpdateParams)(nil), // 8: cosmos.distribution.v1beta1.MsgUpdateParams - (*MsgUpdateParamsResponse)(nil), // 9: cosmos.distribution.v1beta1.MsgUpdateParamsResponse - (*MsgCommunityPoolSpend)(nil), // 10: cosmos.distribution.v1beta1.MsgCommunityPoolSpend - (*MsgCommunityPoolSpendResponse)(nil), // 11: cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse - (*v1beta1.Coin)(nil), // 12: cosmos.base.v1beta1.Coin - (*Params)(nil), // 13: cosmos.distribution.v1beta1.Params + (*MsgSetWithdrawAddress)(nil), // 0: cosmos.distribution.v1beta1.MsgSetWithdrawAddress + (*MsgSetWithdrawAddressResponse)(nil), // 1: cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse + (*MsgWithdrawDelegatorReward)(nil), // 2: cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward + (*MsgWithdrawDelegatorRewardResponse)(nil), // 3: cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse + (*MsgWithdrawValidatorCommission)(nil), // 4: cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission + (*MsgWithdrawValidatorCommissionResponse)(nil), // 5: cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse + (*MsgFundCommunityPool)(nil), // 6: cosmos.distribution.v1beta1.MsgFundCommunityPool + (*MsgFundCommunityPoolResponse)(nil), // 7: cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse + (*MsgUpdateParams)(nil), // 8: cosmos.distribution.v1beta1.MsgUpdateParams + (*MsgUpdateParamsResponse)(nil), // 9: cosmos.distribution.v1beta1.MsgUpdateParamsResponse + (*MsgCommunityPoolSpend)(nil), // 10: cosmos.distribution.v1beta1.MsgCommunityPoolSpend + (*MsgWithdrawTokenizeShareRecordReward)(nil), // 11: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward + (*MsgWithdrawTokenizeShareRecordRewardResponse)(nil), // 12: cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse + (*MsgWithdrawAllTokenizeShareRecordReward)(nil), // 13: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward + (*MsgWithdrawAllTokenizeShareRecordRewardResponse)(nil), // 14: cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse + (*MsgCommunityPoolSpendResponse)(nil), // 15: cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse + (*v1beta1.Coin)(nil), // 16: cosmos.base.v1beta1.Coin + (*Params)(nil), // 17: cosmos.distribution.v1beta1.Params } var file_cosmos_distribution_v1beta1_tx_proto_depIdxs = []int32{ - 12, // 0: cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse.amount:type_name -> cosmos.base.v1beta1.Coin - 12, // 1: cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse.amount:type_name -> cosmos.base.v1beta1.Coin - 12, // 2: cosmos.distribution.v1beta1.MsgFundCommunityPool.amount:type_name -> cosmos.base.v1beta1.Coin - 13, // 3: cosmos.distribution.v1beta1.MsgUpdateParams.params:type_name -> cosmos.distribution.v1beta1.Params - 12, // 4: cosmos.distribution.v1beta1.MsgCommunityPoolSpend.amount:type_name -> cosmos.base.v1beta1.Coin + 16, // 0: cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse.amount:type_name -> cosmos.base.v1beta1.Coin + 16, // 1: cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse.amount:type_name -> cosmos.base.v1beta1.Coin + 16, // 2: cosmos.distribution.v1beta1.MsgFundCommunityPool.amount:type_name -> cosmos.base.v1beta1.Coin + 17, // 3: cosmos.distribution.v1beta1.MsgUpdateParams.params:type_name -> cosmos.distribution.v1beta1.Params + 16, // 4: cosmos.distribution.v1beta1.MsgCommunityPoolSpend.amount:type_name -> cosmos.base.v1beta1.Coin 0, // 5: cosmos.distribution.v1beta1.Msg.SetWithdrawAddress:input_type -> cosmos.distribution.v1beta1.MsgSetWithdrawAddress 2, // 6: cosmos.distribution.v1beta1.Msg.WithdrawDelegatorReward:input_type -> cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward 4, // 7: cosmos.distribution.v1beta1.Msg.WithdrawValidatorCommission:input_type -> cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission 6, // 8: cosmos.distribution.v1beta1.Msg.FundCommunityPool:input_type -> cosmos.distribution.v1beta1.MsgFundCommunityPool 8, // 9: cosmos.distribution.v1beta1.Msg.UpdateParams:input_type -> cosmos.distribution.v1beta1.MsgUpdateParams 10, // 10: cosmos.distribution.v1beta1.Msg.CommunityPoolSpend:input_type -> cosmos.distribution.v1beta1.MsgCommunityPoolSpend - 1, // 11: cosmos.distribution.v1beta1.Msg.SetWithdrawAddress:output_type -> cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse - 3, // 12: cosmos.distribution.v1beta1.Msg.WithdrawDelegatorReward:output_type -> cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse - 5, // 13: cosmos.distribution.v1beta1.Msg.WithdrawValidatorCommission:output_type -> cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse - 7, // 14: cosmos.distribution.v1beta1.Msg.FundCommunityPool:output_type -> cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse - 9, // 15: cosmos.distribution.v1beta1.Msg.UpdateParams:output_type -> cosmos.distribution.v1beta1.MsgUpdateParamsResponse - 11, // 16: cosmos.distribution.v1beta1.Msg.CommunityPoolSpend:output_type -> cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse - 11, // [11:17] is the sub-list for method output_type - 5, // [5:11] is the sub-list for method input_type + 11, // 11: cosmos.distribution.v1beta1.Msg.WithdrawTokenizeShareRecordReward:input_type -> cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward + 13, // 12: cosmos.distribution.v1beta1.Msg.WithdrawAllTokenizeShareRecordReward:input_type -> cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward + 1, // 13: cosmos.distribution.v1beta1.Msg.SetWithdrawAddress:output_type -> cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse + 3, // 14: cosmos.distribution.v1beta1.Msg.WithdrawDelegatorReward:output_type -> cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse + 5, // 15: cosmos.distribution.v1beta1.Msg.WithdrawValidatorCommission:output_type -> cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse + 7, // 16: cosmos.distribution.v1beta1.Msg.FundCommunityPool:output_type -> cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse + 9, // 17: cosmos.distribution.v1beta1.Msg.UpdateParams:output_type -> cosmos.distribution.v1beta1.MsgUpdateParamsResponse + 15, // 18: cosmos.distribution.v1beta1.Msg.CommunityPoolSpend:output_type -> cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse + 12, // 19: cosmos.distribution.v1beta1.Msg.WithdrawTokenizeShareRecordReward:output_type -> cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse + 14, // 20: cosmos.distribution.v1beta1.Msg.WithdrawAllTokenizeShareRecordReward:output_type -> cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse + 13, // [13:21] is the sub-list for method output_type + 5, // [5:13] is the sub-list for method input_type 5, // [5:5] is the sub-list for extension type_name 5, // [5:5] is the sub-list for extension extendee 0, // [0:5] is the sub-list for field type_name @@ -6376,6 +8165,54 @@ func file_cosmos_distribution_v1beta1_tx_proto_init() { } } file_cosmos_distribution_v1beta1_tx_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgWithdrawTokenizeShareRecordReward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_distribution_v1beta1_tx_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgWithdrawTokenizeShareRecordRewardResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_distribution_v1beta1_tx_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgWithdrawAllTokenizeShareRecordReward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_distribution_v1beta1_tx_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgWithdrawAllTokenizeShareRecordRewardResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_distribution_v1beta1_tx_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MsgCommunityPoolSpendResponse); i { case 0: return &v.state @@ -6394,7 +8231,7 @@ func file_cosmos_distribution_v1beta1_tx_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_distribution_v1beta1_tx_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 16, NumExtensions: 0, NumServices: 1, }, diff --git a/api/cosmos/distribution/v1beta1/tx_grpc.pb.go b/api/cosmos/distribution/v1beta1/tx_grpc.pb.go index 1282990a3d54..e1c36f5c0fec 100644 --- a/api/cosmos/distribution/v1beta1/tx_grpc.pb.go +++ b/api/cosmos/distribution/v1beta1/tx_grpc.pb.go @@ -19,12 +19,14 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - Msg_SetWithdrawAddress_FullMethodName = "/cosmos.distribution.v1beta1.Msg/SetWithdrawAddress" - Msg_WithdrawDelegatorReward_FullMethodName = "/cosmos.distribution.v1beta1.Msg/WithdrawDelegatorReward" - Msg_WithdrawValidatorCommission_FullMethodName = "/cosmos.distribution.v1beta1.Msg/WithdrawValidatorCommission" - Msg_FundCommunityPool_FullMethodName = "/cosmos.distribution.v1beta1.Msg/FundCommunityPool" - Msg_UpdateParams_FullMethodName = "/cosmos.distribution.v1beta1.Msg/UpdateParams" - Msg_CommunityPoolSpend_FullMethodName = "/cosmos.distribution.v1beta1.Msg/CommunityPoolSpend" + Msg_SetWithdrawAddress_FullMethodName = "/cosmos.distribution.v1beta1.Msg/SetWithdrawAddress" + Msg_WithdrawDelegatorReward_FullMethodName = "/cosmos.distribution.v1beta1.Msg/WithdrawDelegatorReward" + Msg_WithdrawValidatorCommission_FullMethodName = "/cosmos.distribution.v1beta1.Msg/WithdrawValidatorCommission" + Msg_FundCommunityPool_FullMethodName = "/cosmos.distribution.v1beta1.Msg/FundCommunityPool" + Msg_UpdateParams_FullMethodName = "/cosmos.distribution.v1beta1.Msg/UpdateParams" + Msg_CommunityPoolSpend_FullMethodName = "/cosmos.distribution.v1beta1.Msg/CommunityPoolSpend" + Msg_WithdrawTokenizeShareRecordReward_FullMethodName = "/cosmos.distribution.v1beta1.Msg/WithdrawTokenizeShareRecordReward" + Msg_WithdrawAllTokenizeShareRecordReward_FullMethodName = "/cosmos.distribution.v1beta1.Msg/WithdrawAllTokenizeShareRecordReward" ) // MsgClient is the client API for Msg service. @@ -55,6 +57,10 @@ type MsgClient interface { // // Since: cosmos-sdk 0.47 CommunityPoolSpend(ctx context.Context, in *MsgCommunityPoolSpend, opts ...grpc.CallOption) (*MsgCommunityPoolSpendResponse, error) + // WithdrawTokenizeShareRecordReward defines a method to withdraw reward for an owning TokenizeShareRecord + WithdrawTokenizeShareRecordReward(ctx context.Context, in *MsgWithdrawTokenizeShareRecordReward, opts ...grpc.CallOption) (*MsgWithdrawTokenizeShareRecordRewardResponse, error) + // WithdrawAllTokenizeShareRecordReward defines a method to withdraw reward for all owning TokenizeShareRecord + WithdrawAllTokenizeShareRecordReward(ctx context.Context, in *MsgWithdrawAllTokenizeShareRecordReward, opts ...grpc.CallOption) (*MsgWithdrawAllTokenizeShareRecordRewardResponse, error) } type msgClient struct { @@ -119,6 +125,24 @@ func (c *msgClient) CommunityPoolSpend(ctx context.Context, in *MsgCommunityPool return out, nil } +func (c *msgClient) WithdrawTokenizeShareRecordReward(ctx context.Context, in *MsgWithdrawTokenizeShareRecordReward, opts ...grpc.CallOption) (*MsgWithdrawTokenizeShareRecordRewardResponse, error) { + out := new(MsgWithdrawTokenizeShareRecordRewardResponse) + err := c.cc.Invoke(ctx, Msg_WithdrawTokenizeShareRecordReward_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) WithdrawAllTokenizeShareRecordReward(ctx context.Context, in *MsgWithdrawAllTokenizeShareRecordReward, opts ...grpc.CallOption) (*MsgWithdrawAllTokenizeShareRecordRewardResponse, error) { + out := new(MsgWithdrawAllTokenizeShareRecordRewardResponse) + err := c.cc.Invoke(ctx, Msg_WithdrawAllTokenizeShareRecordReward_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. // All implementations must embed UnimplementedMsgServer // for forward compatibility @@ -147,6 +171,10 @@ type MsgServer interface { // // Since: cosmos-sdk 0.47 CommunityPoolSpend(context.Context, *MsgCommunityPoolSpend) (*MsgCommunityPoolSpendResponse, error) + // WithdrawTokenizeShareRecordReward defines a method to withdraw reward for an owning TokenizeShareRecord + WithdrawTokenizeShareRecordReward(context.Context, *MsgWithdrawTokenizeShareRecordReward) (*MsgWithdrawTokenizeShareRecordRewardResponse, error) + // WithdrawAllTokenizeShareRecordReward defines a method to withdraw reward for all owning TokenizeShareRecord + WithdrawAllTokenizeShareRecordReward(context.Context, *MsgWithdrawAllTokenizeShareRecordReward) (*MsgWithdrawAllTokenizeShareRecordRewardResponse, error) mustEmbedUnimplementedMsgServer() } @@ -172,6 +200,12 @@ func (UnimplementedMsgServer) UpdateParams(context.Context, *MsgUpdateParams) (* func (UnimplementedMsgServer) CommunityPoolSpend(context.Context, *MsgCommunityPoolSpend) (*MsgCommunityPoolSpendResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CommunityPoolSpend not implemented") } +func (UnimplementedMsgServer) WithdrawTokenizeShareRecordReward(context.Context, *MsgWithdrawTokenizeShareRecordReward) (*MsgWithdrawTokenizeShareRecordRewardResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WithdrawTokenizeShareRecordReward not implemented") +} +func (UnimplementedMsgServer) WithdrawAllTokenizeShareRecordReward(context.Context, *MsgWithdrawAllTokenizeShareRecordReward) (*MsgWithdrawAllTokenizeShareRecordRewardResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WithdrawAllTokenizeShareRecordReward not implemented") +} func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {} // UnsafeMsgServer may be embedded to opt out of forward compatibility for this service. @@ -293,6 +327,42 @@ func _Msg_CommunityPoolSpend_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _Msg_WithdrawTokenizeShareRecordReward_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgWithdrawTokenizeShareRecordReward) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).WithdrawTokenizeShareRecordReward(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_WithdrawTokenizeShareRecordReward_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).WithdrawTokenizeShareRecordReward(ctx, req.(*MsgWithdrawTokenizeShareRecordReward)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_WithdrawAllTokenizeShareRecordReward_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgWithdrawAllTokenizeShareRecordReward) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).WithdrawAllTokenizeShareRecordReward(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_WithdrawAllTokenizeShareRecordReward_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).WithdrawAllTokenizeShareRecordReward(ctx, req.(*MsgWithdrawAllTokenizeShareRecordReward)) + } + return interceptor(ctx, in, info, handler) +} + // Msg_ServiceDesc is the grpc.ServiceDesc for Msg service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -324,6 +394,14 @@ var Msg_ServiceDesc = grpc.ServiceDesc{ MethodName: "CommunityPoolSpend", Handler: _Msg_CommunityPoolSpend_Handler, }, + { + MethodName: "WithdrawTokenizeShareRecordReward", + Handler: _Msg_WithdrawTokenizeShareRecordReward_Handler, + }, + { + MethodName: "WithdrawAllTokenizeShareRecordReward", + Handler: _Msg_WithdrawAllTokenizeShareRecordReward_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "cosmos/distribution/v1beta1/tx.proto", diff --git a/api/cosmos/staking/v1beta1/genesis.pulsar.go b/api/cosmos/staking/v1beta1/genesis.pulsar.go index 67b645dc1521..afdb448c566b 100644 --- a/api/cosmos/staking/v1beta1/genesis.pulsar.go +++ b/api/cosmos/staking/v1beta1/genesis.pulsar.go @@ -10,6 +10,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoiface "google.golang.org/protobuf/runtime/protoiface" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" io "io" reflect "reflect" sync "sync" @@ -270,16 +271,122 @@ func (x *_GenesisState_7_list) IsValid() bool { return x.list != nil } +var _ protoreflect.List = (*_GenesisState_9_list)(nil) + +type _GenesisState_9_list struct { + list *[]*TokenizeShareRecord +} + +func (x *_GenesisState_9_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_9_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_9_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*TokenizeShareRecord) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_9_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*TokenizeShareRecord) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_9_list) AppendMutable() protoreflect.Value { + v := new(TokenizeShareRecord) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_9_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_9_list) NewElement() protoreflect.Value { + v := new(TokenizeShareRecord) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_9_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_12_list)(nil) + +type _GenesisState_12_list struct { + list *[]*TokenizeShareLock +} + +func (x *_GenesisState_12_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_12_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_12_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*TokenizeShareLock) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_12_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*TokenizeShareLock) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_12_list) AppendMutable() protoreflect.Value { + v := new(TokenizeShareLock) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_12_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_12_list) NewElement() protoreflect.Value { + v := new(TokenizeShareLock) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_12_list) IsValid() bool { + return x.list != nil +} + var ( - md_GenesisState protoreflect.MessageDescriptor - fd_GenesisState_params protoreflect.FieldDescriptor - fd_GenesisState_last_total_power protoreflect.FieldDescriptor - fd_GenesisState_last_validator_powers protoreflect.FieldDescriptor - fd_GenesisState_validators protoreflect.FieldDescriptor - fd_GenesisState_delegations protoreflect.FieldDescriptor - fd_GenesisState_unbonding_delegations protoreflect.FieldDescriptor - fd_GenesisState_redelegations protoreflect.FieldDescriptor - fd_GenesisState_exported protoreflect.FieldDescriptor + md_GenesisState protoreflect.MessageDescriptor + fd_GenesisState_params protoreflect.FieldDescriptor + fd_GenesisState_last_total_power protoreflect.FieldDescriptor + fd_GenesisState_last_validator_powers protoreflect.FieldDescriptor + fd_GenesisState_validators protoreflect.FieldDescriptor + fd_GenesisState_delegations protoreflect.FieldDescriptor + fd_GenesisState_unbonding_delegations protoreflect.FieldDescriptor + fd_GenesisState_redelegations protoreflect.FieldDescriptor + fd_GenesisState_exported protoreflect.FieldDescriptor + fd_GenesisState_tokenize_share_records protoreflect.FieldDescriptor + fd_GenesisState_last_tokenize_share_record_id protoreflect.FieldDescriptor + fd_GenesisState_total_liquid_staked_tokens protoreflect.FieldDescriptor + fd_GenesisState_tokenize_share_locks protoreflect.FieldDescriptor ) func init() { @@ -293,6 +400,10 @@ func init() { fd_GenesisState_unbonding_delegations = md_GenesisState.Fields().ByName("unbonding_delegations") fd_GenesisState_redelegations = md_GenesisState.Fields().ByName("redelegations") fd_GenesisState_exported = md_GenesisState.Fields().ByName("exported") + fd_GenesisState_tokenize_share_records = md_GenesisState.Fields().ByName("tokenize_share_records") + fd_GenesisState_last_tokenize_share_record_id = md_GenesisState.Fields().ByName("last_tokenize_share_record_id") + fd_GenesisState_total_liquid_staked_tokens = md_GenesisState.Fields().ByName("total_liquid_staked_tokens") + fd_GenesisState_tokenize_share_locks = md_GenesisState.Fields().ByName("tokenize_share_locks") } var _ protoreflect.Message = (*fastReflection_GenesisState)(nil) @@ -408,6 +519,30 @@ func (x *fastReflection_GenesisState) Range(f func(protoreflect.FieldDescriptor, return } } + if len(x.TokenizeShareRecords) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_9_list{list: &x.TokenizeShareRecords}) + if !f(fd_GenesisState_tokenize_share_records, value) { + return + } + } + if x.LastTokenizeShareRecordId != uint64(0) { + value := protoreflect.ValueOfUint64(x.LastTokenizeShareRecordId) + if !f(fd_GenesisState_last_tokenize_share_record_id, value) { + return + } + } + if len(x.TotalLiquidStakedTokens) != 0 { + value := protoreflect.ValueOfBytes(x.TotalLiquidStakedTokens) + if !f(fd_GenesisState_total_liquid_staked_tokens, value) { + return + } + } + if len(x.TokenizeShareLocks) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_12_list{list: &x.TokenizeShareLocks}) + if !f(fd_GenesisState_tokenize_share_locks, value) { + return + } + } } // Has reports whether a field is populated. @@ -439,6 +574,14 @@ func (x *fastReflection_GenesisState) Has(fd protoreflect.FieldDescriptor) bool return len(x.Redelegations) != 0 case "cosmos.staking.v1beta1.GenesisState.exported": return x.Exported != false + case "cosmos.staking.v1beta1.GenesisState.tokenize_share_records": + return len(x.TokenizeShareRecords) != 0 + case "cosmos.staking.v1beta1.GenesisState.last_tokenize_share_record_id": + return x.LastTokenizeShareRecordId != uint64(0) + case "cosmos.staking.v1beta1.GenesisState.total_liquid_staked_tokens": + return len(x.TotalLiquidStakedTokens) != 0 + case "cosmos.staking.v1beta1.GenesisState.tokenize_share_locks": + return len(x.TokenizeShareLocks) != 0 default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.GenesisState")) @@ -471,6 +614,14 @@ func (x *fastReflection_GenesisState) Clear(fd protoreflect.FieldDescriptor) { x.Redelegations = nil case "cosmos.staking.v1beta1.GenesisState.exported": x.Exported = false + case "cosmos.staking.v1beta1.GenesisState.tokenize_share_records": + x.TokenizeShareRecords = nil + case "cosmos.staking.v1beta1.GenesisState.last_tokenize_share_record_id": + x.LastTokenizeShareRecordId = uint64(0) + case "cosmos.staking.v1beta1.GenesisState.total_liquid_staked_tokens": + x.TotalLiquidStakedTokens = nil + case "cosmos.staking.v1beta1.GenesisState.tokenize_share_locks": + x.TokenizeShareLocks = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.GenesisState")) @@ -526,6 +677,24 @@ func (x *fastReflection_GenesisState) Get(descriptor protoreflect.FieldDescripto case "cosmos.staking.v1beta1.GenesisState.exported": value := x.Exported return protoreflect.ValueOfBool(value) + case "cosmos.staking.v1beta1.GenesisState.tokenize_share_records": + if len(x.TokenizeShareRecords) == 0 { + return protoreflect.ValueOfList(&_GenesisState_9_list{}) + } + listValue := &_GenesisState_9_list{list: &x.TokenizeShareRecords} + return protoreflect.ValueOfList(listValue) + case "cosmos.staking.v1beta1.GenesisState.last_tokenize_share_record_id": + value := x.LastTokenizeShareRecordId + return protoreflect.ValueOfUint64(value) + case "cosmos.staking.v1beta1.GenesisState.total_liquid_staked_tokens": + value := x.TotalLiquidStakedTokens + return protoreflect.ValueOfBytes(value) + case "cosmos.staking.v1beta1.GenesisState.tokenize_share_locks": + if len(x.TokenizeShareLocks) == 0 { + return protoreflect.ValueOfList(&_GenesisState_12_list{}) + } + listValue := &_GenesisState_12_list{list: &x.TokenizeShareLocks} + return protoreflect.ValueOfList(listValue) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.GenesisState")) @@ -572,6 +741,18 @@ func (x *fastReflection_GenesisState) Set(fd protoreflect.FieldDescriptor, value x.Redelegations = *clv.list case "cosmos.staking.v1beta1.GenesisState.exported": x.Exported = value.Bool() + case "cosmos.staking.v1beta1.GenesisState.tokenize_share_records": + lv := value.List() + clv := lv.(*_GenesisState_9_list) + x.TokenizeShareRecords = *clv.list + case "cosmos.staking.v1beta1.GenesisState.last_tokenize_share_record_id": + x.LastTokenizeShareRecordId = value.Uint() + case "cosmos.staking.v1beta1.GenesisState.total_liquid_staked_tokens": + x.TotalLiquidStakedTokens = value.Bytes() + case "cosmos.staking.v1beta1.GenesisState.tokenize_share_locks": + lv := value.List() + clv := lv.(*_GenesisState_12_list) + x.TokenizeShareLocks = *clv.list default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.GenesisState")) @@ -627,10 +808,26 @@ func (x *fastReflection_GenesisState) Mutable(fd protoreflect.FieldDescriptor) p } value := &_GenesisState_7_list{list: &x.Redelegations} return protoreflect.ValueOfList(value) + case "cosmos.staking.v1beta1.GenesisState.tokenize_share_records": + if x.TokenizeShareRecords == nil { + x.TokenizeShareRecords = []*TokenizeShareRecord{} + } + value := &_GenesisState_9_list{list: &x.TokenizeShareRecords} + return protoreflect.ValueOfList(value) + case "cosmos.staking.v1beta1.GenesisState.tokenize_share_locks": + if x.TokenizeShareLocks == nil { + x.TokenizeShareLocks = []*TokenizeShareLock{} + } + value := &_GenesisState_12_list{list: &x.TokenizeShareLocks} + return protoreflect.ValueOfList(value) case "cosmos.staking.v1beta1.GenesisState.last_total_power": panic(fmt.Errorf("field last_total_power of message cosmos.staking.v1beta1.GenesisState is not mutable")) case "cosmos.staking.v1beta1.GenesisState.exported": panic(fmt.Errorf("field exported of message cosmos.staking.v1beta1.GenesisState is not mutable")) + case "cosmos.staking.v1beta1.GenesisState.last_tokenize_share_record_id": + panic(fmt.Errorf("field last_tokenize_share_record_id of message cosmos.staking.v1beta1.GenesisState is not mutable")) + case "cosmos.staking.v1beta1.GenesisState.total_liquid_staked_tokens": + panic(fmt.Errorf("field total_liquid_staked_tokens of message cosmos.staking.v1beta1.GenesisState is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.GenesisState")) @@ -666,6 +863,16 @@ func (x *fastReflection_GenesisState) NewField(fd protoreflect.FieldDescriptor) return protoreflect.ValueOfList(&_GenesisState_7_list{list: &list}) case "cosmos.staking.v1beta1.GenesisState.exported": return protoreflect.ValueOfBool(false) + case "cosmos.staking.v1beta1.GenesisState.tokenize_share_records": + list := []*TokenizeShareRecord{} + return protoreflect.ValueOfList(&_GenesisState_9_list{list: &list}) + case "cosmos.staking.v1beta1.GenesisState.last_tokenize_share_record_id": + return protoreflect.ValueOfUint64(uint64(0)) + case "cosmos.staking.v1beta1.GenesisState.total_liquid_staked_tokens": + return protoreflect.ValueOfBytes(nil) + case "cosmos.staking.v1beta1.GenesisState.tokenize_share_locks": + list := []*TokenizeShareLock{} + return protoreflect.ValueOfList(&_GenesisState_12_list{list: &list}) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.GenesisState")) @@ -776,6 +983,25 @@ func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { if x.Exported { n += 2 } + if len(x.TokenizeShareRecords) > 0 { + for _, e := range x.TokenizeShareRecords { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.LastTokenizeShareRecordId != 0 { + n += 1 + runtime.Sov(uint64(x.LastTokenizeShareRecordId)) + } + l = len(x.TotalLiquidStakedTokens) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.TokenizeShareLocks) > 0 { + for _, e := range x.TokenizeShareLocks { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -805,6 +1031,50 @@ func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if len(x.TokenizeShareLocks) > 0 { + for iNdEx := len(x.TokenizeShareLocks) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.TokenizeShareLocks[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x62 + } + } + if len(x.TotalLiquidStakedTokens) > 0 { + i -= len(x.TotalLiquidStakedTokens) + copy(dAtA[i:], x.TotalLiquidStakedTokens) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.TotalLiquidStakedTokens))) + i-- + dAtA[i] = 0x5a + } + if x.LastTokenizeShareRecordId != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LastTokenizeShareRecordId)) + i-- + dAtA[i] = 0x50 + } + if len(x.TokenizeShareRecords) > 0 { + for iNdEx := len(x.TokenizeShareRecords) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.TokenizeShareRecords[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x4a + } + } if x.Exported { i-- if x.Exported { @@ -1225,6 +1495,127 @@ func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { } } x.Exported = bool(v != 0) + case 9: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TokenizeShareRecords", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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.TokenizeShareRecords = append(x.TokenizeShareRecords, &TokenizeShareRecord{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.TokenizeShareRecords[len(x.TokenizeShareRecords)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 10: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LastTokenizeShareRecordId", wireType) + } + x.LastTokenizeShareRecordId = 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.LastTokenizeShareRecordId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 11: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TotalLiquidStakedTokens", wireType) + } + var byteLen int + 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++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + 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.TotalLiquidStakedTokens = append(x.TotalLiquidStakedTokens[:0], dAtA[iNdEx:postIndex]...) + if x.TotalLiquidStakedTokens == nil { + x.TotalLiquidStakedTokens = []byte{} + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TokenizeShareLocks", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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.TokenizeShareLocks = append(x.TokenizeShareLocks, &TokenizeShareLock{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.TokenizeShareLocks[len(x.TokenizeShareLocks)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -1261,27 +1652,29 @@ func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { } var ( - md_LastValidatorPower protoreflect.MessageDescriptor - fd_LastValidatorPower_address protoreflect.FieldDescriptor - fd_LastValidatorPower_power protoreflect.FieldDescriptor + md_TokenizeShareLock protoreflect.MessageDescriptor + fd_TokenizeShareLock_address protoreflect.FieldDescriptor + fd_TokenizeShareLock_status protoreflect.FieldDescriptor + fd_TokenizeShareLock_completion_time protoreflect.FieldDescriptor ) func init() { file_cosmos_staking_v1beta1_genesis_proto_init() - md_LastValidatorPower = File_cosmos_staking_v1beta1_genesis_proto.Messages().ByName("LastValidatorPower") - fd_LastValidatorPower_address = md_LastValidatorPower.Fields().ByName("address") - fd_LastValidatorPower_power = md_LastValidatorPower.Fields().ByName("power") + md_TokenizeShareLock = File_cosmos_staking_v1beta1_genesis_proto.Messages().ByName("TokenizeShareLock") + fd_TokenizeShareLock_address = md_TokenizeShareLock.Fields().ByName("address") + fd_TokenizeShareLock_status = md_TokenizeShareLock.Fields().ByName("status") + fd_TokenizeShareLock_completion_time = md_TokenizeShareLock.Fields().ByName("completion_time") } -var _ protoreflect.Message = (*fastReflection_LastValidatorPower)(nil) +var _ protoreflect.Message = (*fastReflection_TokenizeShareLock)(nil) -type fastReflection_LastValidatorPower LastValidatorPower +type fastReflection_TokenizeShareLock TokenizeShareLock -func (x *LastValidatorPower) ProtoReflect() protoreflect.Message { - return (*fastReflection_LastValidatorPower)(x) +func (x *TokenizeShareLock) ProtoReflect() protoreflect.Message { + return (*fastReflection_TokenizeShareLock)(x) } -func (x *LastValidatorPower) slowProtoReflect() protoreflect.Message { +func (x *TokenizeShareLock) slowProtoReflect() protoreflect.Message { mi := &file_cosmos_staking_v1beta1_genesis_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1293,13 +1686,574 @@ func (x *LastValidatorPower) slowProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -var _fastReflection_LastValidatorPower_messageType fastReflection_LastValidatorPower_messageType -var _ protoreflect.MessageType = fastReflection_LastValidatorPower_messageType{} +var _fastReflection_TokenizeShareLock_messageType fastReflection_TokenizeShareLock_messageType +var _ protoreflect.MessageType = fastReflection_TokenizeShareLock_messageType{} -type fastReflection_LastValidatorPower_messageType struct{} +type fastReflection_TokenizeShareLock_messageType struct{} -func (x fastReflection_LastValidatorPower_messageType) Zero() protoreflect.Message { - return (*fastReflection_LastValidatorPower)(nil) +func (x fastReflection_TokenizeShareLock_messageType) Zero() protoreflect.Message { + return (*fastReflection_TokenizeShareLock)(nil) +} +func (x fastReflection_TokenizeShareLock_messageType) New() protoreflect.Message { + return new(fastReflection_TokenizeShareLock) +} +func (x fastReflection_TokenizeShareLock_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_TokenizeShareLock +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_TokenizeShareLock) Descriptor() protoreflect.MessageDescriptor { + return md_TokenizeShareLock +} + +// 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_TokenizeShareLock) Type() protoreflect.MessageType { + return _fastReflection_TokenizeShareLock_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_TokenizeShareLock) New() protoreflect.Message { + return new(fastReflection_TokenizeShareLock) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_TokenizeShareLock) Interface() protoreflect.ProtoMessage { + return (*TokenizeShareLock)(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_TokenizeShareLock) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_TokenizeShareLock_address, value) { + return + } + } + if x.Status != "" { + value := protoreflect.ValueOfString(x.Status) + if !f(fd_TokenizeShareLock_status, value) { + return + } + } + if x.CompletionTime != nil { + value := protoreflect.ValueOfMessage(x.CompletionTime.ProtoReflect()) + if !f(fd_TokenizeShareLock_completion_time, 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_TokenizeShareLock) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.TokenizeShareLock.address": + return x.Address != "" + case "cosmos.staking.v1beta1.TokenizeShareLock.status": + return x.Status != "" + case "cosmos.staking.v1beta1.TokenizeShareLock.completion_time": + return x.CompletionTime != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.TokenizeShareLock")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.TokenizeShareLock 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_TokenizeShareLock) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.TokenizeShareLock.address": + x.Address = "" + case "cosmos.staking.v1beta1.TokenizeShareLock.status": + x.Status = "" + case "cosmos.staking.v1beta1.TokenizeShareLock.completion_time": + x.CompletionTime = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.TokenizeShareLock")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.TokenizeShareLock 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_TokenizeShareLock) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.TokenizeShareLock.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.TokenizeShareLock.status": + value := x.Status + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.TokenizeShareLock.completion_time": + value := x.CompletionTime + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.TokenizeShareLock")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.TokenizeShareLock 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_TokenizeShareLock) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.TokenizeShareLock.address": + x.Address = value.Interface().(string) + case "cosmos.staking.v1beta1.TokenizeShareLock.status": + x.Status = value.Interface().(string) + case "cosmos.staking.v1beta1.TokenizeShareLock.completion_time": + x.CompletionTime = value.Message().Interface().(*timestamppb.Timestamp) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.TokenizeShareLock")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.TokenizeShareLock 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_TokenizeShareLock) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.TokenizeShareLock.completion_time": + if x.CompletionTime == nil { + x.CompletionTime = new(timestamppb.Timestamp) + } + return protoreflect.ValueOfMessage(x.CompletionTime.ProtoReflect()) + case "cosmos.staking.v1beta1.TokenizeShareLock.address": + panic(fmt.Errorf("field address of message cosmos.staking.v1beta1.TokenizeShareLock is not mutable")) + case "cosmos.staking.v1beta1.TokenizeShareLock.status": + panic(fmt.Errorf("field status of message cosmos.staking.v1beta1.TokenizeShareLock is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.TokenizeShareLock")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.TokenizeShareLock 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_TokenizeShareLock) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.TokenizeShareLock.address": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.TokenizeShareLock.status": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.TokenizeShareLock.completion_time": + m := new(timestamppb.Timestamp) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.TokenizeShareLock")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.TokenizeShareLock 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_TokenizeShareLock) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.TokenizeShareLock", 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_TokenizeShareLock) 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_TokenizeShareLock) 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_TokenizeShareLock) 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_TokenizeShareLock) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*TokenizeShareLock) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Status) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.CompletionTime != nil { + l = options.Size(x.CompletionTime) + 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().(*TokenizeShareLock) + 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.CompletionTime != nil { + encoded, err := options.Marshal(x.CompletionTime) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.Status) > 0 { + i -= len(x.Status) + copy(dAtA[i:], x.Status) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Status))) + i-- + dAtA[i] = 0x12 + } + 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] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*TokenizeShareLock) + 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: TokenizeShareLock: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: TokenizeShareLock: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field 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 + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Status", 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.Status = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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 + } + if x.CompletionTime == nil { + x.CompletionTime = ×tamppb.Timestamp{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.CompletionTime); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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_LastValidatorPower protoreflect.MessageDescriptor + fd_LastValidatorPower_address protoreflect.FieldDescriptor + fd_LastValidatorPower_power protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_genesis_proto_init() + md_LastValidatorPower = File_cosmos_staking_v1beta1_genesis_proto.Messages().ByName("LastValidatorPower") + fd_LastValidatorPower_address = md_LastValidatorPower.Fields().ByName("address") + fd_LastValidatorPower_power = md_LastValidatorPower.Fields().ByName("power") +} + +var _ protoreflect.Message = (*fastReflection_LastValidatorPower)(nil) + +type fastReflection_LastValidatorPower LastValidatorPower + +func (x *LastValidatorPower) ProtoReflect() protoreflect.Message { + return (*fastReflection_LastValidatorPower)(x) +} + +func (x *LastValidatorPower) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_genesis_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_LastValidatorPower_messageType fastReflection_LastValidatorPower_messageType +var _ protoreflect.MessageType = fastReflection_LastValidatorPower_messageType{} + +type fastReflection_LastValidatorPower_messageType struct{} + +func (x fastReflection_LastValidatorPower_messageType) Zero() protoreflect.Message { + return (*fastReflection_LastValidatorPower)(nil) } func (x fastReflection_LastValidatorPower_messageType) New() protoreflect.Message { return new(fastReflection_LastValidatorPower) @@ -1764,6 +2718,14 @@ type GenesisState struct { // redelegations defines the redelegations active at genesis. Redelegations []*Redelegation `protobuf:"bytes,7,rep,name=redelegations,proto3" json:"redelegations,omitempty"` Exported bool `protobuf:"varint,8,opt,name=exported,proto3" json:"exported,omitempty"` + // store tokenize share records to provide reward to record owners + TokenizeShareRecords []*TokenizeShareRecord `protobuf:"bytes,9,rep,name=tokenize_share_records,json=tokenizeShareRecords,proto3" json:"tokenize_share_records,omitempty"` + // last tokenize share record id, used for next share record id calculation + LastTokenizeShareRecordId uint64 `protobuf:"varint,10,opt,name=last_tokenize_share_record_id,json=lastTokenizeShareRecordId,proto3" json:"last_tokenize_share_record_id,omitempty"` + // total number of liquid staked tokens at genesis + TotalLiquidStakedTokens []byte `protobuf:"bytes,11,opt,name=total_liquid_staked_tokens,json=totalLiquidStakedTokens,proto3" json:"total_liquid_staked_tokens,omitempty"` + // tokenize shares locks at genesis + TokenizeShareLocks []*TokenizeShareLock `protobuf:"bytes,12,rep,name=tokenize_share_locks,json=tokenizeShareLocks,proto3" json:"tokenize_share_locks,omitempty"` } func (x *GenesisState) Reset() { @@ -1842,6 +2804,89 @@ func (x *GenesisState) GetExported() bool { return false } +func (x *GenesisState) GetTokenizeShareRecords() []*TokenizeShareRecord { + if x != nil { + return x.TokenizeShareRecords + } + return nil +} + +func (x *GenesisState) GetLastTokenizeShareRecordId() uint64 { + if x != nil { + return x.LastTokenizeShareRecordId + } + return 0 +} + +func (x *GenesisState) GetTotalLiquidStakedTokens() []byte { + if x != nil { + return x.TotalLiquidStakedTokens + } + return nil +} + +func (x *GenesisState) GetTokenizeShareLocks() []*TokenizeShareLock { + if x != nil { + return x.TokenizeShareLocks + } + return nil +} + +// TokenizeSharesLock required for specifying account locks at genesis +type TokenizeShareLock struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Address of the account that is locked + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + // Status of the lock (LOCKED or LOCK_EXPIRING) + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + // Completion time if the lock is expiring + CompletionTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=completion_time,json=completionTime,proto3" json:"completion_time,omitempty"` +} + +func (x *TokenizeShareLock) Reset() { + *x = TokenizeShareLock{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_genesis_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TokenizeShareLock) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TokenizeShareLock) ProtoMessage() {} + +// Deprecated: Use TokenizeShareLock.ProtoReflect.Descriptor instead. +func (*TokenizeShareLock) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_genesis_proto_rawDescGZIP(), []int{1} +} + +func (x *TokenizeShareLock) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *TokenizeShareLock) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *TokenizeShareLock) GetCompletionTime() *timestamppb.Timestamp { + if x != nil { + return x.CompletionTime + } + return nil +} + // LastValidatorPower required for validator set update logic. type LastValidatorPower struct { state protoimpl.MessageState @@ -1857,7 +2902,7 @@ type LastValidatorPower struct { func (x *LastValidatorPower) Reset() { *x = LastValidatorPower{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_genesis_proto_msgTypes[1] + mi := &file_cosmos_staking_v1beta1_genesis_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1871,7 +2916,7 @@ func (*LastValidatorPower) ProtoMessage() {} // Deprecated: Use LastValidatorPower.ProtoReflect.Descriptor instead. func (*LastValidatorPower) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_genesis_proto_rawDescGZIP(), []int{1} + return file_cosmos_staking_v1beta1_genesis_proto_rawDescGZIP(), []int{2} } func (x *LastValidatorPower) GetAddress() string { @@ -1901,70 +2946,109 @@ var file_cosmos_staking_v1beta1_genesis_proto_rawDesc = []byte{ 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, - 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9a, 0x05, 0x0a, 0x0c, 0x47, 0x65, 0x6e, - 0x65, 0x73, 0x69, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, - 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5d, 0x0a, 0x10, - 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x77, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x33, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, - 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, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x6c, 0x61, 0x73, - 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x69, 0x0a, 0x15, 0x6c, - 0x61, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x70, 0x6f, - 0x77, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x6f, 0x73, + 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbb, 0x08, 0x0a, 0x0c, 0x47, 0x65, + 0x6e, 0x65, 0x73, 0x69, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, + 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5d, 0x0a, + 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x77, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x33, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, + 0x26, 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, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x6c, 0x61, + 0x73, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x69, 0x0a, 0x15, + 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x70, + 0x6f, 0x77, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, + 0x2a, 0x01, 0x52, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x09, + 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, - 0x01, 0x52, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x50, 0x6f, 0x77, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x73, + 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, + 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x6b, 0x0a, 0x15, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, + 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x14, 0x75, + 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x09, 0xc8, - 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0xc8, - 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x6b, 0x0a, 0x15, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x6e, - 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x14, 0x75, 0x6e, - 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x65, 0x64, 0x22, 0x68, 0x0a, 0x12, 0x4c, 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x12, - 0x14, 0x0a, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x70, 0x6f, 0x77, 0x65, 0x72, 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x42, - 0xdc, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0c, - 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, 0x16, 0x43, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, - 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, - 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74, - 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x67, 0x0a, 0x16, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, + 0x7a, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x14, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, + 0x40, 0x0a, 0x1d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, + 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x64, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x19, 0x6c, 0x61, 0x73, 0x74, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, + 0x64, 0x12, 0x90, 0x01, 0x0a, 0x1a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x71, 0x75, + 0x69, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x53, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, + 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, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xf2, 0xde, 0x1f, 0x21, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x61, + 0x6b, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x52, 0x17, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x61, 0x0a, 0x14, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, + 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x0c, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x42, 0x04, 0xc8, + 0xde, 0x1f, 0x00, 0x52, 0x12, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x73, 0x22, 0xae, 0x01, 0x0a, 0x11, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x67, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x22, 0xc8, 0xde, 0x1f, 0x00, 0xf2, 0xde, 0x1f, 0x16, 0x79, 0x61, + 0x6d, 0x6c, 0x3a, 0x22, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x22, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x68, 0x0a, 0x12, 0x4c, 0x61, 0x73, 0x74, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x32, + 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, + 0x1f, 0x00, 0x42, 0xdc, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x42, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, + 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, + 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1979,28 +3063,34 @@ func file_cosmos_staking_v1beta1_genesis_proto_rawDescGZIP() []byte { return file_cosmos_staking_v1beta1_genesis_proto_rawDescData } -var file_cosmos_staking_v1beta1_genesis_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_cosmos_staking_v1beta1_genesis_proto_msgTypes = make([]protoimpl.MessageInfo, 3) var file_cosmos_staking_v1beta1_genesis_proto_goTypes = []interface{}{ - (*GenesisState)(nil), // 0: cosmos.staking.v1beta1.GenesisState - (*LastValidatorPower)(nil), // 1: cosmos.staking.v1beta1.LastValidatorPower - (*Params)(nil), // 2: cosmos.staking.v1beta1.Params - (*Validator)(nil), // 3: cosmos.staking.v1beta1.Validator - (*Delegation)(nil), // 4: cosmos.staking.v1beta1.Delegation - (*UnbondingDelegation)(nil), // 5: cosmos.staking.v1beta1.UnbondingDelegation - (*Redelegation)(nil), // 6: cosmos.staking.v1beta1.Redelegation + (*GenesisState)(nil), // 0: cosmos.staking.v1beta1.GenesisState + (*TokenizeShareLock)(nil), // 1: cosmos.staking.v1beta1.TokenizeShareLock + (*LastValidatorPower)(nil), // 2: cosmos.staking.v1beta1.LastValidatorPower + (*Params)(nil), // 3: cosmos.staking.v1beta1.Params + (*Validator)(nil), // 4: cosmos.staking.v1beta1.Validator + (*Delegation)(nil), // 5: cosmos.staking.v1beta1.Delegation + (*UnbondingDelegation)(nil), // 6: cosmos.staking.v1beta1.UnbondingDelegation + (*Redelegation)(nil), // 7: cosmos.staking.v1beta1.Redelegation + (*TokenizeShareRecord)(nil), // 8: cosmos.staking.v1beta1.TokenizeShareRecord + (*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp } var file_cosmos_staking_v1beta1_genesis_proto_depIdxs = []int32{ - 2, // 0: cosmos.staking.v1beta1.GenesisState.params:type_name -> cosmos.staking.v1beta1.Params - 1, // 1: cosmos.staking.v1beta1.GenesisState.last_validator_powers:type_name -> cosmos.staking.v1beta1.LastValidatorPower - 3, // 2: cosmos.staking.v1beta1.GenesisState.validators:type_name -> cosmos.staking.v1beta1.Validator - 4, // 3: cosmos.staking.v1beta1.GenesisState.delegations:type_name -> cosmos.staking.v1beta1.Delegation - 5, // 4: cosmos.staking.v1beta1.GenesisState.unbonding_delegations:type_name -> cosmos.staking.v1beta1.UnbondingDelegation - 6, // 5: cosmos.staking.v1beta1.GenesisState.redelegations:type_name -> cosmos.staking.v1beta1.Redelegation - 6, // [6:6] is the sub-list for method output_type - 6, // [6:6] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 3, // 0: cosmos.staking.v1beta1.GenesisState.params:type_name -> cosmos.staking.v1beta1.Params + 2, // 1: cosmos.staking.v1beta1.GenesisState.last_validator_powers:type_name -> cosmos.staking.v1beta1.LastValidatorPower + 4, // 2: cosmos.staking.v1beta1.GenesisState.validators:type_name -> cosmos.staking.v1beta1.Validator + 5, // 3: cosmos.staking.v1beta1.GenesisState.delegations:type_name -> cosmos.staking.v1beta1.Delegation + 6, // 4: cosmos.staking.v1beta1.GenesisState.unbonding_delegations:type_name -> cosmos.staking.v1beta1.UnbondingDelegation + 7, // 5: cosmos.staking.v1beta1.GenesisState.redelegations:type_name -> cosmos.staking.v1beta1.Redelegation + 8, // 6: cosmos.staking.v1beta1.GenesisState.tokenize_share_records:type_name -> cosmos.staking.v1beta1.TokenizeShareRecord + 1, // 7: cosmos.staking.v1beta1.GenesisState.tokenize_share_locks:type_name -> cosmos.staking.v1beta1.TokenizeShareLock + 9, // 8: cosmos.staking.v1beta1.TokenizeShareLock.completion_time:type_name -> google.protobuf.Timestamp + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_cosmos_staking_v1beta1_genesis_proto_init() } @@ -2023,6 +3113,18 @@ func file_cosmos_staking_v1beta1_genesis_proto_init() { } } file_cosmos_staking_v1beta1_genesis_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TokenizeShareLock); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_genesis_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LastValidatorPower); i { case 0: return &v.state @@ -2041,7 +3143,7 @@ func file_cosmos_staking_v1beta1_genesis_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_staking_v1beta1_genesis_proto_rawDesc, NumEnums: 0, - NumMessages: 2, + NumMessages: 3, NumExtensions: 0, NumServices: 0, }, diff --git a/api/cosmos/staking/v1beta1/query.pulsar.go b/api/cosmos/staking/v1beta1/query.pulsar.go index b1905fe7e803..f422c40046a0 100644 --- a/api/cosmos/staking/v1beta1/query.pulsar.go +++ b/api/cosmos/staking/v1beta1/query.pulsar.go @@ -4,6 +4,7 @@ package stakingv1beta1 import ( _ "cosmossdk.io/api/amino" v1beta1 "cosmossdk.io/api/cosmos/base/query/v1beta1" + v1beta11 "cosmossdk.io/api/cosmos/base/v1beta1" _ "cosmossdk.io/api/cosmos/query/v1" fmt "fmt" _ "github.com/cosmos/cosmos-proto" @@ -13683,1218 +13684,8648 @@ func (x *fastReflection_QueryParamsResponse) ProtoMethods() *protoiface.Methods } } +var ( + md_QueryTokenizeShareRecordByIdRequest protoreflect.MessageDescriptor + fd_QueryTokenizeShareRecordByIdRequest_id protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryTokenizeShareRecordByIdRequest = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryTokenizeShareRecordByIdRequest") + fd_QueryTokenizeShareRecordByIdRequest_id = md_QueryTokenizeShareRecordByIdRequest.Fields().ByName("id") +} + +var _ protoreflect.Message = (*fastReflection_QueryTokenizeShareRecordByIdRequest)(nil) + +type fastReflection_QueryTokenizeShareRecordByIdRequest QueryTokenizeShareRecordByIdRequest + +func (x *QueryTokenizeShareRecordByIdRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordByIdRequest)(x) +} + +func (x *QueryTokenizeShareRecordByIdRequest) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[28] + 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_QueryTokenizeShareRecordByIdRequest_messageType fastReflection_QueryTokenizeShareRecordByIdRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryTokenizeShareRecordByIdRequest_messageType{} + +type fastReflection_QueryTokenizeShareRecordByIdRequest_messageType struct{} + +func (x fastReflection_QueryTokenizeShareRecordByIdRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordByIdRequest)(nil) +} +func (x fastReflection_QueryTokenizeShareRecordByIdRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordByIdRequest) +} +func (x fastReflection_QueryTokenizeShareRecordByIdRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordByIdRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTokenizeShareRecordByIdRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordByIdRequest +} + +// 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_QueryTokenizeShareRecordByIdRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryTokenizeShareRecordByIdRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTokenizeShareRecordByIdRequest) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordByIdRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTokenizeShareRecordByIdRequest) Interface() protoreflect.ProtoMessage { + return (*QueryTokenizeShareRecordByIdRequest)(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_QueryTokenizeShareRecordByIdRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Id != uint64(0) { + value := protoreflect.ValueOfUint64(x.Id) + if !f(fd_QueryTokenizeShareRecordByIdRequest_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_QueryTokenizeShareRecordByIdRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest.id": + return x.Id != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest 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_QueryTokenizeShareRecordByIdRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest.id": + x.Id = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest 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_QueryTokenizeShareRecordByIdRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest.id": + value := x.Id + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest 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_QueryTokenizeShareRecordByIdRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest.id": + x.Id = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest 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_QueryTokenizeShareRecordByIdRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest.id": + panic(fmt.Errorf("field id of message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest 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_QueryTokenizeShareRecordByIdRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest.id": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest 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_QueryTokenizeShareRecordByIdRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest", 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_QueryTokenizeShareRecordByIdRequest) 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_QueryTokenizeShareRecordByIdRequest) 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_QueryTokenizeShareRecordByIdRequest) 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_QueryTokenizeShareRecordByIdRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTokenizeShareRecordByIdRequest) + 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.Id != 0 { + n += 1 + runtime.Sov(uint64(x.Id)) + } + 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().(*QueryTokenizeShareRecordByIdRequest) + 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.Id != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.Id)) + 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().(*QueryTokenizeShareRecordByIdRequest) + 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: QueryTokenizeShareRecordByIdRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTokenizeShareRecordByIdRequest: 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 Id", wireType) + } + x.Id = 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.Id |= 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_QueryTokenizeShareRecordByIdResponse protoreflect.MessageDescriptor + fd_QueryTokenizeShareRecordByIdResponse_record protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryTokenizeShareRecordByIdResponse = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryTokenizeShareRecordByIdResponse") + fd_QueryTokenizeShareRecordByIdResponse_record = md_QueryTokenizeShareRecordByIdResponse.Fields().ByName("record") +} + +var _ protoreflect.Message = (*fastReflection_QueryTokenizeShareRecordByIdResponse)(nil) + +type fastReflection_QueryTokenizeShareRecordByIdResponse QueryTokenizeShareRecordByIdResponse + +func (x *QueryTokenizeShareRecordByIdResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordByIdResponse)(x) +} + +func (x *QueryTokenizeShareRecordByIdResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[29] + 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_QueryTokenizeShareRecordByIdResponse_messageType fastReflection_QueryTokenizeShareRecordByIdResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryTokenizeShareRecordByIdResponse_messageType{} + +type fastReflection_QueryTokenizeShareRecordByIdResponse_messageType struct{} + +func (x fastReflection_QueryTokenizeShareRecordByIdResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordByIdResponse)(nil) +} +func (x fastReflection_QueryTokenizeShareRecordByIdResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordByIdResponse) +} +func (x fastReflection_QueryTokenizeShareRecordByIdResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordByIdResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTokenizeShareRecordByIdResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordByIdResponse +} + +// 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_QueryTokenizeShareRecordByIdResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryTokenizeShareRecordByIdResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTokenizeShareRecordByIdResponse) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordByIdResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTokenizeShareRecordByIdResponse) Interface() protoreflect.ProtoMessage { + return (*QueryTokenizeShareRecordByIdResponse)(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_QueryTokenizeShareRecordByIdResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Record != nil { + value := protoreflect.ValueOfMessage(x.Record.ProtoReflect()) + if !f(fd_QueryTokenizeShareRecordByIdResponse_record, 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_QueryTokenizeShareRecordByIdResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse.record": + return x.Record != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse 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_QueryTokenizeShareRecordByIdResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse.record": + x.Record = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse 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_QueryTokenizeShareRecordByIdResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse.record": + value := x.Record + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse 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_QueryTokenizeShareRecordByIdResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse.record": + x.Record = value.Message().Interface().(*TokenizeShareRecord) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse 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_QueryTokenizeShareRecordByIdResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse.record": + if x.Record == nil { + x.Record = new(TokenizeShareRecord) + } + return protoreflect.ValueOfMessage(x.Record.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse 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_QueryTokenizeShareRecordByIdResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse.record": + m := new(TokenizeShareRecord) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse 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_QueryTokenizeShareRecordByIdResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse", 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_QueryTokenizeShareRecordByIdResponse) 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_QueryTokenizeShareRecordByIdResponse) 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_QueryTokenizeShareRecordByIdResponse) 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_QueryTokenizeShareRecordByIdResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTokenizeShareRecordByIdResponse) + 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.Record != nil { + l = options.Size(x.Record) + 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().(*QueryTokenizeShareRecordByIdResponse) + 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.Record != nil { + encoded, err := options.Marshal(x.Record) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTokenizeShareRecordByIdResponse) + 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: QueryTokenizeShareRecordByIdResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTokenizeShareRecordByIdResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Record", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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 + } + if x.Record == nil { + x.Record = &TokenizeShareRecord{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Record); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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_QueryTokenizeShareRecordByDenomRequest protoreflect.MessageDescriptor + fd_QueryTokenizeShareRecordByDenomRequest_denom protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryTokenizeShareRecordByDenomRequest = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryTokenizeShareRecordByDenomRequest") + fd_QueryTokenizeShareRecordByDenomRequest_denom = md_QueryTokenizeShareRecordByDenomRequest.Fields().ByName("denom") +} + +var _ protoreflect.Message = (*fastReflection_QueryTokenizeShareRecordByDenomRequest)(nil) + +type fastReflection_QueryTokenizeShareRecordByDenomRequest QueryTokenizeShareRecordByDenomRequest + +func (x *QueryTokenizeShareRecordByDenomRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordByDenomRequest)(x) +} + +func (x *QueryTokenizeShareRecordByDenomRequest) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[30] + 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_QueryTokenizeShareRecordByDenomRequest_messageType fastReflection_QueryTokenizeShareRecordByDenomRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryTokenizeShareRecordByDenomRequest_messageType{} + +type fastReflection_QueryTokenizeShareRecordByDenomRequest_messageType struct{} + +func (x fastReflection_QueryTokenizeShareRecordByDenomRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordByDenomRequest)(nil) +} +func (x fastReflection_QueryTokenizeShareRecordByDenomRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordByDenomRequest) +} +func (x fastReflection_QueryTokenizeShareRecordByDenomRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordByDenomRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTokenizeShareRecordByDenomRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordByDenomRequest +} + +// 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_QueryTokenizeShareRecordByDenomRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryTokenizeShareRecordByDenomRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTokenizeShareRecordByDenomRequest) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordByDenomRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTokenizeShareRecordByDenomRequest) Interface() protoreflect.ProtoMessage { + return (*QueryTokenizeShareRecordByDenomRequest)(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_QueryTokenizeShareRecordByDenomRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Denom != "" { + value := protoreflect.ValueOfString(x.Denom) + if !f(fd_QueryTokenizeShareRecordByDenomRequest_denom, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryTokenizeShareRecordByDenomRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest.denom": + return x.Denom != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest 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_QueryTokenizeShareRecordByDenomRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest.denom": + x.Denom = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest 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_QueryTokenizeShareRecordByDenomRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest.denom": + value := x.Denom + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest 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_QueryTokenizeShareRecordByDenomRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest.denom": + x.Denom = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest 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_QueryTokenizeShareRecordByDenomRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest.denom": + panic(fmt.Errorf("field denom of message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest 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_QueryTokenizeShareRecordByDenomRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest.denom": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest 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_QueryTokenizeShareRecordByDenomRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest", 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_QueryTokenizeShareRecordByDenomRequest) 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_QueryTokenizeShareRecordByDenomRequest) 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_QueryTokenizeShareRecordByDenomRequest) 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_QueryTokenizeShareRecordByDenomRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTokenizeShareRecordByDenomRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Denom) + 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().(*QueryTokenizeShareRecordByDenomRequest) + 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.Denom) > 0 { + i -= len(x.Denom) + copy(dAtA[i:], x.Denom) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Denom))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTokenizeShareRecordByDenomRequest) + 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: QueryTokenizeShareRecordByDenomRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTokenizeShareRecordByDenomRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Denom", 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.Denom = 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_QueryTokenizeShareRecordByDenomResponse protoreflect.MessageDescriptor + fd_QueryTokenizeShareRecordByDenomResponse_record protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryTokenizeShareRecordByDenomResponse = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryTokenizeShareRecordByDenomResponse") + fd_QueryTokenizeShareRecordByDenomResponse_record = md_QueryTokenizeShareRecordByDenomResponse.Fields().ByName("record") +} + +var _ protoreflect.Message = (*fastReflection_QueryTokenizeShareRecordByDenomResponse)(nil) + +type fastReflection_QueryTokenizeShareRecordByDenomResponse QueryTokenizeShareRecordByDenomResponse + +func (x *QueryTokenizeShareRecordByDenomResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordByDenomResponse)(x) +} + +func (x *QueryTokenizeShareRecordByDenomResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_QueryTokenizeShareRecordByDenomResponse_messageType fastReflection_QueryTokenizeShareRecordByDenomResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryTokenizeShareRecordByDenomResponse_messageType{} + +type fastReflection_QueryTokenizeShareRecordByDenomResponse_messageType struct{} + +func (x fastReflection_QueryTokenizeShareRecordByDenomResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordByDenomResponse)(nil) +} +func (x fastReflection_QueryTokenizeShareRecordByDenomResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordByDenomResponse) +} +func (x fastReflection_QueryTokenizeShareRecordByDenomResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordByDenomResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTokenizeShareRecordByDenomResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordByDenomResponse +} + +// 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_QueryTokenizeShareRecordByDenomResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryTokenizeShareRecordByDenomResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTokenizeShareRecordByDenomResponse) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordByDenomResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTokenizeShareRecordByDenomResponse) Interface() protoreflect.ProtoMessage { + return (*QueryTokenizeShareRecordByDenomResponse)(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_QueryTokenizeShareRecordByDenomResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Record != nil { + value := protoreflect.ValueOfMessage(x.Record.ProtoReflect()) + if !f(fd_QueryTokenizeShareRecordByDenomResponse_record, 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_QueryTokenizeShareRecordByDenomResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse.record": + return x.Record != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse 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_QueryTokenizeShareRecordByDenomResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse.record": + x.Record = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse 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_QueryTokenizeShareRecordByDenomResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse.record": + value := x.Record + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse 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_QueryTokenizeShareRecordByDenomResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse.record": + x.Record = value.Message().Interface().(*TokenizeShareRecord) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse 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_QueryTokenizeShareRecordByDenomResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse.record": + if x.Record == nil { + x.Record = new(TokenizeShareRecord) + } + return protoreflect.ValueOfMessage(x.Record.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse 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_QueryTokenizeShareRecordByDenomResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse.record": + m := new(TokenizeShareRecord) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse 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_QueryTokenizeShareRecordByDenomResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse", 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_QueryTokenizeShareRecordByDenomResponse) 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_QueryTokenizeShareRecordByDenomResponse) 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_QueryTokenizeShareRecordByDenomResponse) 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_QueryTokenizeShareRecordByDenomResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTokenizeShareRecordByDenomResponse) + 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.Record != nil { + l = options.Size(x.Record) + 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().(*QueryTokenizeShareRecordByDenomResponse) + 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.Record != nil { + encoded, err := options.Marshal(x.Record) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTokenizeShareRecordByDenomResponse) + 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: QueryTokenizeShareRecordByDenomResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTokenizeShareRecordByDenomResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Record", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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 + } + if x.Record == nil { + x.Record = &TokenizeShareRecord{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Record); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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_QueryTokenizeShareRecordsOwnedRequest protoreflect.MessageDescriptor + fd_QueryTokenizeShareRecordsOwnedRequest_owner protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryTokenizeShareRecordsOwnedRequest = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryTokenizeShareRecordsOwnedRequest") + fd_QueryTokenizeShareRecordsOwnedRequest_owner = md_QueryTokenizeShareRecordsOwnedRequest.Fields().ByName("owner") +} + +var _ protoreflect.Message = (*fastReflection_QueryTokenizeShareRecordsOwnedRequest)(nil) + +type fastReflection_QueryTokenizeShareRecordsOwnedRequest QueryTokenizeShareRecordsOwnedRequest + +func (x *QueryTokenizeShareRecordsOwnedRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordsOwnedRequest)(x) +} + +func (x *QueryTokenizeShareRecordsOwnedRequest) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_QueryTokenizeShareRecordsOwnedRequest_messageType fastReflection_QueryTokenizeShareRecordsOwnedRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryTokenizeShareRecordsOwnedRequest_messageType{} + +type fastReflection_QueryTokenizeShareRecordsOwnedRequest_messageType struct{} + +func (x fastReflection_QueryTokenizeShareRecordsOwnedRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordsOwnedRequest)(nil) +} +func (x fastReflection_QueryTokenizeShareRecordsOwnedRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordsOwnedRequest) +} +func (x fastReflection_QueryTokenizeShareRecordsOwnedRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordsOwnedRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTokenizeShareRecordsOwnedRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordsOwnedRequest +} + +// 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_QueryTokenizeShareRecordsOwnedRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryTokenizeShareRecordsOwnedRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTokenizeShareRecordsOwnedRequest) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordsOwnedRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTokenizeShareRecordsOwnedRequest) Interface() protoreflect.ProtoMessage { + return (*QueryTokenizeShareRecordsOwnedRequest)(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_QueryTokenizeShareRecordsOwnedRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Owner != "" { + value := protoreflect.ValueOfString(x.Owner) + if !f(fd_QueryTokenizeShareRecordsOwnedRequest_owner, 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_QueryTokenizeShareRecordsOwnedRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest.owner": + return x.Owner != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest 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_QueryTokenizeShareRecordsOwnedRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest.owner": + x.Owner = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest 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_QueryTokenizeShareRecordsOwnedRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest.owner": + value := x.Owner + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest 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_QueryTokenizeShareRecordsOwnedRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest.owner": + x.Owner = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest 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_QueryTokenizeShareRecordsOwnedRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest.owner": + panic(fmt.Errorf("field owner of message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest 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_QueryTokenizeShareRecordsOwnedRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest.owner": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest 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_QueryTokenizeShareRecordsOwnedRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest", 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_QueryTokenizeShareRecordsOwnedRequest) 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_QueryTokenizeShareRecordsOwnedRequest) 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_QueryTokenizeShareRecordsOwnedRequest) 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_QueryTokenizeShareRecordsOwnedRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTokenizeShareRecordsOwnedRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Owner) + 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().(*QueryTokenizeShareRecordsOwnedRequest) + 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.Owner) > 0 { + i -= len(x.Owner) + copy(dAtA[i:], x.Owner) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Owner))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTokenizeShareRecordsOwnedRequest) + 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: QueryTokenizeShareRecordsOwnedRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTokenizeShareRecordsOwnedRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Owner", 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.Owner = 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 _ protoreflect.List = (*_QueryTokenizeShareRecordsOwnedResponse_1_list)(nil) + +type _QueryTokenizeShareRecordsOwnedResponse_1_list struct { + list *[]*TokenizeShareRecord +} + +func (x *_QueryTokenizeShareRecordsOwnedResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryTokenizeShareRecordsOwnedResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryTokenizeShareRecordsOwnedResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*TokenizeShareRecord) + (*x.list)[i] = concreteValue +} + +func (x *_QueryTokenizeShareRecordsOwnedResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*TokenizeShareRecord) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryTokenizeShareRecordsOwnedResponse_1_list) AppendMutable() protoreflect.Value { + v := new(TokenizeShareRecord) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryTokenizeShareRecordsOwnedResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryTokenizeShareRecordsOwnedResponse_1_list) NewElement() protoreflect.Value { + v := new(TokenizeShareRecord) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryTokenizeShareRecordsOwnedResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryTokenizeShareRecordsOwnedResponse protoreflect.MessageDescriptor + fd_QueryTokenizeShareRecordsOwnedResponse_records protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryTokenizeShareRecordsOwnedResponse = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryTokenizeShareRecordsOwnedResponse") + fd_QueryTokenizeShareRecordsOwnedResponse_records = md_QueryTokenizeShareRecordsOwnedResponse.Fields().ByName("records") +} + +var _ protoreflect.Message = (*fastReflection_QueryTokenizeShareRecordsOwnedResponse)(nil) + +type fastReflection_QueryTokenizeShareRecordsOwnedResponse QueryTokenizeShareRecordsOwnedResponse + +func (x *QueryTokenizeShareRecordsOwnedResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordsOwnedResponse)(x) +} + +func (x *QueryTokenizeShareRecordsOwnedResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[33] + 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_QueryTokenizeShareRecordsOwnedResponse_messageType fastReflection_QueryTokenizeShareRecordsOwnedResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryTokenizeShareRecordsOwnedResponse_messageType{} + +type fastReflection_QueryTokenizeShareRecordsOwnedResponse_messageType struct{} + +func (x fastReflection_QueryTokenizeShareRecordsOwnedResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareRecordsOwnedResponse)(nil) +} +func (x fastReflection_QueryTokenizeShareRecordsOwnedResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordsOwnedResponse) +} +func (x fastReflection_QueryTokenizeShareRecordsOwnedResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordsOwnedResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTokenizeShareRecordsOwnedResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareRecordsOwnedResponse +} + +// 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_QueryTokenizeShareRecordsOwnedResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryTokenizeShareRecordsOwnedResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTokenizeShareRecordsOwnedResponse) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareRecordsOwnedResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTokenizeShareRecordsOwnedResponse) Interface() protoreflect.ProtoMessage { + return (*QueryTokenizeShareRecordsOwnedResponse)(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_QueryTokenizeShareRecordsOwnedResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Records) != 0 { + value := protoreflect.ValueOfList(&_QueryTokenizeShareRecordsOwnedResponse_1_list{list: &x.Records}) + if !f(fd_QueryTokenizeShareRecordsOwnedResponse_records, 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_QueryTokenizeShareRecordsOwnedResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse.records": + return len(x.Records) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse 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_QueryTokenizeShareRecordsOwnedResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse.records": + x.Records = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse 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_QueryTokenizeShareRecordsOwnedResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse.records": + if len(x.Records) == 0 { + return protoreflect.ValueOfList(&_QueryTokenizeShareRecordsOwnedResponse_1_list{}) + } + listValue := &_QueryTokenizeShareRecordsOwnedResponse_1_list{list: &x.Records} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse 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_QueryTokenizeShareRecordsOwnedResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse.records": + lv := value.List() + clv := lv.(*_QueryTokenizeShareRecordsOwnedResponse_1_list) + x.Records = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse 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_QueryTokenizeShareRecordsOwnedResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse.records": + if x.Records == nil { + x.Records = []*TokenizeShareRecord{} + } + value := &_QueryTokenizeShareRecordsOwnedResponse_1_list{list: &x.Records} + return protoreflect.ValueOfList(value) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse 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_QueryTokenizeShareRecordsOwnedResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse.records": + list := []*TokenizeShareRecord{} + return protoreflect.ValueOfList(&_QueryTokenizeShareRecordsOwnedResponse_1_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse 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_QueryTokenizeShareRecordsOwnedResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse", 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_QueryTokenizeShareRecordsOwnedResponse) 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_QueryTokenizeShareRecordsOwnedResponse) 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_QueryTokenizeShareRecordsOwnedResponse) 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_QueryTokenizeShareRecordsOwnedResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTokenizeShareRecordsOwnedResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.Records) > 0 { + for _, e := range x.Records { + l = options.Size(e) + 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().(*QueryTokenizeShareRecordsOwnedResponse) + 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.Records) > 0 { + for iNdEx := len(x.Records) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Records[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTokenizeShareRecordsOwnedResponse) + 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: QueryTokenizeShareRecordsOwnedResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTokenizeShareRecordsOwnedResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Records", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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.Records = append(x.Records, &TokenizeShareRecord{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Records[len(x.Records)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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_QueryAllTokenizeShareRecordsRequest protoreflect.MessageDescriptor + fd_QueryAllTokenizeShareRecordsRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryAllTokenizeShareRecordsRequest = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryAllTokenizeShareRecordsRequest") + fd_QueryAllTokenizeShareRecordsRequest_pagination = md_QueryAllTokenizeShareRecordsRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllTokenizeShareRecordsRequest)(nil) + +type fastReflection_QueryAllTokenizeShareRecordsRequest QueryAllTokenizeShareRecordsRequest + +func (x *QueryAllTokenizeShareRecordsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllTokenizeShareRecordsRequest)(x) +} + +func (x *QueryAllTokenizeShareRecordsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[34] + 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_QueryAllTokenizeShareRecordsRequest_messageType fastReflection_QueryAllTokenizeShareRecordsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllTokenizeShareRecordsRequest_messageType{} + +type fastReflection_QueryAllTokenizeShareRecordsRequest_messageType struct{} + +func (x fastReflection_QueryAllTokenizeShareRecordsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllTokenizeShareRecordsRequest)(nil) +} +func (x fastReflection_QueryAllTokenizeShareRecordsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllTokenizeShareRecordsRequest) +} +func (x fastReflection_QueryAllTokenizeShareRecordsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllTokenizeShareRecordsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllTokenizeShareRecordsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllTokenizeShareRecordsRequest +} + +// 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_QueryAllTokenizeShareRecordsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllTokenizeShareRecordsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllTokenizeShareRecordsRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllTokenizeShareRecordsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllTokenizeShareRecordsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllTokenizeShareRecordsRequest)(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_QueryAllTokenizeShareRecordsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllTokenizeShareRecordsRequest_pagination, 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_QueryAllTokenizeShareRecordsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest 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_QueryAllTokenizeShareRecordsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest 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_QueryAllTokenizeShareRecordsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest 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_QueryAllTokenizeShareRecordsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest 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_QueryAllTokenizeShareRecordsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest 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_QueryAllTokenizeShareRecordsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest 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_QueryAllTokenizeShareRecordsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest", 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_QueryAllTokenizeShareRecordsRequest) 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_QueryAllTokenizeShareRecordsRequest) 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_QueryAllTokenizeShareRecordsRequest) 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_QueryAllTokenizeShareRecordsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllTokenizeShareRecordsRequest) + 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.Pagination != nil { + l = options.Size(x.Pagination) + 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().(*QueryAllTokenizeShareRecordsRequest) + 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.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllTokenizeShareRecordsRequest) + 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: QueryAllTokenizeShareRecordsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllTokenizeShareRecordsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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 + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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 _ protoreflect.List = (*_QueryAllTokenizeShareRecordsResponse_1_list)(nil) + +type _QueryAllTokenizeShareRecordsResponse_1_list struct { + list *[]*TokenizeShareRecord +} + +func (x *_QueryAllTokenizeShareRecordsResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllTokenizeShareRecordsResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllTokenizeShareRecordsResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*TokenizeShareRecord) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllTokenizeShareRecordsResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*TokenizeShareRecord) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllTokenizeShareRecordsResponse_1_list) AppendMutable() protoreflect.Value { + v := new(TokenizeShareRecord) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllTokenizeShareRecordsResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllTokenizeShareRecordsResponse_1_list) NewElement() protoreflect.Value { + v := new(TokenizeShareRecord) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllTokenizeShareRecordsResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllTokenizeShareRecordsResponse protoreflect.MessageDescriptor + fd_QueryAllTokenizeShareRecordsResponse_records protoreflect.FieldDescriptor + fd_QueryAllTokenizeShareRecordsResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryAllTokenizeShareRecordsResponse = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryAllTokenizeShareRecordsResponse") + fd_QueryAllTokenizeShareRecordsResponse_records = md_QueryAllTokenizeShareRecordsResponse.Fields().ByName("records") + fd_QueryAllTokenizeShareRecordsResponse_pagination = md_QueryAllTokenizeShareRecordsResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllTokenizeShareRecordsResponse)(nil) + +type fastReflection_QueryAllTokenizeShareRecordsResponse QueryAllTokenizeShareRecordsResponse + +func (x *QueryAllTokenizeShareRecordsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllTokenizeShareRecordsResponse)(x) +} + +func (x *QueryAllTokenizeShareRecordsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[35] + 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_QueryAllTokenizeShareRecordsResponse_messageType fastReflection_QueryAllTokenizeShareRecordsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllTokenizeShareRecordsResponse_messageType{} + +type fastReflection_QueryAllTokenizeShareRecordsResponse_messageType struct{} + +func (x fastReflection_QueryAllTokenizeShareRecordsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllTokenizeShareRecordsResponse)(nil) +} +func (x fastReflection_QueryAllTokenizeShareRecordsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllTokenizeShareRecordsResponse) +} +func (x fastReflection_QueryAllTokenizeShareRecordsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllTokenizeShareRecordsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllTokenizeShareRecordsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllTokenizeShareRecordsResponse +} + +// 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_QueryAllTokenizeShareRecordsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllTokenizeShareRecordsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllTokenizeShareRecordsResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllTokenizeShareRecordsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllTokenizeShareRecordsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllTokenizeShareRecordsResponse)(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_QueryAllTokenizeShareRecordsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Records) != 0 { + value := protoreflect.ValueOfList(&_QueryAllTokenizeShareRecordsResponse_1_list{list: &x.Records}) + if !f(fd_QueryAllTokenizeShareRecordsResponse_records, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllTokenizeShareRecordsResponse_pagination, 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_QueryAllTokenizeShareRecordsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.records": + return len(x.Records) != 0 + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse 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_QueryAllTokenizeShareRecordsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.records": + x.Records = nil + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse 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_QueryAllTokenizeShareRecordsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.records": + if len(x.Records) == 0 { + return protoreflect.ValueOfList(&_QueryAllTokenizeShareRecordsResponse_1_list{}) + } + listValue := &_QueryAllTokenizeShareRecordsResponse_1_list{list: &x.Records} + return protoreflect.ValueOfList(listValue) + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse 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_QueryAllTokenizeShareRecordsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.records": + lv := value.List() + clv := lv.(*_QueryAllTokenizeShareRecordsResponse_1_list) + x.Records = *clv.list + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse 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_QueryAllTokenizeShareRecordsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.records": + if x.Records == nil { + x.Records = []*TokenizeShareRecord{} + } + value := &_QueryAllTokenizeShareRecordsResponse_1_list{list: &x.Records} + return protoreflect.ValueOfList(value) + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse 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_QueryAllTokenizeShareRecordsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.records": + list := []*TokenizeShareRecord{} + return protoreflect.ValueOfList(&_QueryAllTokenizeShareRecordsResponse_1_list{list: &list}) + case "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse 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_QueryAllTokenizeShareRecordsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse", 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_QueryAllTokenizeShareRecordsResponse) 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_QueryAllTokenizeShareRecordsResponse) 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_QueryAllTokenizeShareRecordsResponse) 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_QueryAllTokenizeShareRecordsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllTokenizeShareRecordsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.Records) > 0 { + for _, e := range x.Records { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + 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().(*QueryAllTokenizeShareRecordsResponse) + 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.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Records) > 0 { + for iNdEx := len(x.Records) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Records[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllTokenizeShareRecordsResponse) + 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: QueryAllTokenizeShareRecordsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllTokenizeShareRecordsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Records", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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.Records = append(x.Records, &TokenizeShareRecord{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Records[len(x.Records)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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 + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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_QueryLastTokenizeShareRecordIdRequest protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryLastTokenizeShareRecordIdRequest = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryLastTokenizeShareRecordIdRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryLastTokenizeShareRecordIdRequest)(nil) + +type fastReflection_QueryLastTokenizeShareRecordIdRequest QueryLastTokenizeShareRecordIdRequest + +func (x *QueryLastTokenizeShareRecordIdRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryLastTokenizeShareRecordIdRequest)(x) +} + +func (x *QueryLastTokenizeShareRecordIdRequest) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[36] + 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_QueryLastTokenizeShareRecordIdRequest_messageType fastReflection_QueryLastTokenizeShareRecordIdRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryLastTokenizeShareRecordIdRequest_messageType{} + +type fastReflection_QueryLastTokenizeShareRecordIdRequest_messageType struct{} + +func (x fastReflection_QueryLastTokenizeShareRecordIdRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryLastTokenizeShareRecordIdRequest)(nil) +} +func (x fastReflection_QueryLastTokenizeShareRecordIdRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryLastTokenizeShareRecordIdRequest) +} +func (x fastReflection_QueryLastTokenizeShareRecordIdRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryLastTokenizeShareRecordIdRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryLastTokenizeShareRecordIdRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryLastTokenizeShareRecordIdRequest +} + +// 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_QueryLastTokenizeShareRecordIdRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryLastTokenizeShareRecordIdRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryLastTokenizeShareRecordIdRequest) New() protoreflect.Message { + return new(fastReflection_QueryLastTokenizeShareRecordIdRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryLastTokenizeShareRecordIdRequest) Interface() protoreflect.ProtoMessage { + return (*QueryLastTokenizeShareRecordIdRequest)(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_QueryLastTokenizeShareRecordIdRequest) 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_QueryLastTokenizeShareRecordIdRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest 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_QueryLastTokenizeShareRecordIdRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest 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_QueryLastTokenizeShareRecordIdRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest 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_QueryLastTokenizeShareRecordIdRequest) 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.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest 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_QueryLastTokenizeShareRecordIdRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest 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_QueryLastTokenizeShareRecordIdRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest 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_QueryLastTokenizeShareRecordIdRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest", 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_QueryLastTokenizeShareRecordIdRequest) 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_QueryLastTokenizeShareRecordIdRequest) 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_QueryLastTokenizeShareRecordIdRequest) 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_QueryLastTokenizeShareRecordIdRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryLastTokenizeShareRecordIdRequest) + 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().(*QueryLastTokenizeShareRecordIdRequest) + 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().(*QueryLastTokenizeShareRecordIdRequest) + 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: QueryLastTokenizeShareRecordIdRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryLastTokenizeShareRecordIdRequest: 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_QueryLastTokenizeShareRecordIdResponse protoreflect.MessageDescriptor + fd_QueryLastTokenizeShareRecordIdResponse_id protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryLastTokenizeShareRecordIdResponse = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryLastTokenizeShareRecordIdResponse") + fd_QueryLastTokenizeShareRecordIdResponse_id = md_QueryLastTokenizeShareRecordIdResponse.Fields().ByName("id") +} + +var _ protoreflect.Message = (*fastReflection_QueryLastTokenizeShareRecordIdResponse)(nil) + +type fastReflection_QueryLastTokenizeShareRecordIdResponse QueryLastTokenizeShareRecordIdResponse + +func (x *QueryLastTokenizeShareRecordIdResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryLastTokenizeShareRecordIdResponse)(x) +} + +func (x *QueryLastTokenizeShareRecordIdResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[37] + 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_QueryLastTokenizeShareRecordIdResponse_messageType fastReflection_QueryLastTokenizeShareRecordIdResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryLastTokenizeShareRecordIdResponse_messageType{} + +type fastReflection_QueryLastTokenizeShareRecordIdResponse_messageType struct{} + +func (x fastReflection_QueryLastTokenizeShareRecordIdResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryLastTokenizeShareRecordIdResponse)(nil) +} +func (x fastReflection_QueryLastTokenizeShareRecordIdResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryLastTokenizeShareRecordIdResponse) +} +func (x fastReflection_QueryLastTokenizeShareRecordIdResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryLastTokenizeShareRecordIdResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryLastTokenizeShareRecordIdResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryLastTokenizeShareRecordIdResponse +} + +// 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_QueryLastTokenizeShareRecordIdResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryLastTokenizeShareRecordIdResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryLastTokenizeShareRecordIdResponse) New() protoreflect.Message { + return new(fastReflection_QueryLastTokenizeShareRecordIdResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryLastTokenizeShareRecordIdResponse) Interface() protoreflect.ProtoMessage { + return (*QueryLastTokenizeShareRecordIdResponse)(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_QueryLastTokenizeShareRecordIdResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Id != uint64(0) { + value := protoreflect.ValueOfUint64(x.Id) + if !f(fd_QueryLastTokenizeShareRecordIdResponse_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_QueryLastTokenizeShareRecordIdResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse.id": + return x.Id != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse 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_QueryLastTokenizeShareRecordIdResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse.id": + x.Id = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse 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_QueryLastTokenizeShareRecordIdResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse.id": + value := x.Id + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse 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_QueryLastTokenizeShareRecordIdResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse.id": + x.Id = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse 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_QueryLastTokenizeShareRecordIdResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse.id": + panic(fmt.Errorf("field id of message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse 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_QueryLastTokenizeShareRecordIdResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse.id": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse 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_QueryLastTokenizeShareRecordIdResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse", 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_QueryLastTokenizeShareRecordIdResponse) 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_QueryLastTokenizeShareRecordIdResponse) 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_QueryLastTokenizeShareRecordIdResponse) 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_QueryLastTokenizeShareRecordIdResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryLastTokenizeShareRecordIdResponse) + 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.Id != 0 { + n += 1 + runtime.Sov(uint64(x.Id)) + } + 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().(*QueryLastTokenizeShareRecordIdResponse) + 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.Id != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.Id)) + 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().(*QueryLastTokenizeShareRecordIdResponse) + 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: QueryLastTokenizeShareRecordIdResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryLastTokenizeShareRecordIdResponse: 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 Id", wireType) + } + x.Id = 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.Id |= 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_QueryTotalTokenizeSharedAssetsRequest protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryTotalTokenizeSharedAssetsRequest = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryTotalTokenizeSharedAssetsRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryTotalTokenizeSharedAssetsRequest)(nil) + +type fastReflection_QueryTotalTokenizeSharedAssetsRequest QueryTotalTokenizeSharedAssetsRequest + +func (x *QueryTotalTokenizeSharedAssetsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTotalTokenizeSharedAssetsRequest)(x) +} + +func (x *QueryTotalTokenizeSharedAssetsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[38] + 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_QueryTotalTokenizeSharedAssetsRequest_messageType fastReflection_QueryTotalTokenizeSharedAssetsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryTotalTokenizeSharedAssetsRequest_messageType{} + +type fastReflection_QueryTotalTokenizeSharedAssetsRequest_messageType struct{} + +func (x fastReflection_QueryTotalTokenizeSharedAssetsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTotalTokenizeSharedAssetsRequest)(nil) +} +func (x fastReflection_QueryTotalTokenizeSharedAssetsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTotalTokenizeSharedAssetsRequest) +} +func (x fastReflection_QueryTotalTokenizeSharedAssetsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalTokenizeSharedAssetsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTotalTokenizeSharedAssetsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalTokenizeSharedAssetsRequest +} + +// 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_QueryTotalTokenizeSharedAssetsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryTotalTokenizeSharedAssetsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTotalTokenizeSharedAssetsRequest) New() protoreflect.Message { + return new(fastReflection_QueryTotalTokenizeSharedAssetsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTotalTokenizeSharedAssetsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryTotalTokenizeSharedAssetsRequest)(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_QueryTotalTokenizeSharedAssetsRequest) 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_QueryTotalTokenizeSharedAssetsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest 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_QueryTotalTokenizeSharedAssetsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest 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_QueryTotalTokenizeSharedAssetsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest 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_QueryTotalTokenizeSharedAssetsRequest) 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.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest 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_QueryTotalTokenizeSharedAssetsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest 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_QueryTotalTokenizeSharedAssetsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest 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_QueryTotalTokenizeSharedAssetsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest", 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_QueryTotalTokenizeSharedAssetsRequest) 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_QueryTotalTokenizeSharedAssetsRequest) 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_QueryTotalTokenizeSharedAssetsRequest) 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_QueryTotalTokenizeSharedAssetsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTotalTokenizeSharedAssetsRequest) + 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().(*QueryTotalTokenizeSharedAssetsRequest) + 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().(*QueryTotalTokenizeSharedAssetsRequest) + 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: QueryTotalTokenizeSharedAssetsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTotalTokenizeSharedAssetsRequest: 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_QueryTotalTokenizeSharedAssetsResponse protoreflect.MessageDescriptor + fd_QueryTotalTokenizeSharedAssetsResponse_value protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryTotalTokenizeSharedAssetsResponse = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryTotalTokenizeSharedAssetsResponse") + fd_QueryTotalTokenizeSharedAssetsResponse_value = md_QueryTotalTokenizeSharedAssetsResponse.Fields().ByName("value") +} + +var _ protoreflect.Message = (*fastReflection_QueryTotalTokenizeSharedAssetsResponse)(nil) + +type fastReflection_QueryTotalTokenizeSharedAssetsResponse QueryTotalTokenizeSharedAssetsResponse + +func (x *QueryTotalTokenizeSharedAssetsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTotalTokenizeSharedAssetsResponse)(x) +} + +func (x *QueryTotalTokenizeSharedAssetsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[39] + 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_QueryTotalTokenizeSharedAssetsResponse_messageType fastReflection_QueryTotalTokenizeSharedAssetsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryTotalTokenizeSharedAssetsResponse_messageType{} + +type fastReflection_QueryTotalTokenizeSharedAssetsResponse_messageType struct{} + +func (x fastReflection_QueryTotalTokenizeSharedAssetsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTotalTokenizeSharedAssetsResponse)(nil) +} +func (x fastReflection_QueryTotalTokenizeSharedAssetsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTotalTokenizeSharedAssetsResponse) +} +func (x fastReflection_QueryTotalTokenizeSharedAssetsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalTokenizeSharedAssetsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTotalTokenizeSharedAssetsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalTokenizeSharedAssetsResponse +} + +// 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_QueryTotalTokenizeSharedAssetsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryTotalTokenizeSharedAssetsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTotalTokenizeSharedAssetsResponse) New() protoreflect.Message { + return new(fastReflection_QueryTotalTokenizeSharedAssetsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTotalTokenizeSharedAssetsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryTotalTokenizeSharedAssetsResponse)(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_QueryTotalTokenizeSharedAssetsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Value != nil { + value := protoreflect.ValueOfMessage(x.Value.ProtoReflect()) + if !f(fd_QueryTotalTokenizeSharedAssetsResponse_value, 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_QueryTotalTokenizeSharedAssetsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse.value": + return x.Value != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse 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_QueryTotalTokenizeSharedAssetsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse.value": + x.Value = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse 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_QueryTotalTokenizeSharedAssetsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse.value": + value := x.Value + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse 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_QueryTotalTokenizeSharedAssetsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse.value": + x.Value = value.Message().Interface().(*v1beta11.Coin) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse 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_QueryTotalTokenizeSharedAssetsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse.value": + if x.Value == nil { + x.Value = new(v1beta11.Coin) + } + return protoreflect.ValueOfMessage(x.Value.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse 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_QueryTotalTokenizeSharedAssetsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse.value": + m := new(v1beta11.Coin) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse 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_QueryTotalTokenizeSharedAssetsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse", 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_QueryTotalTokenizeSharedAssetsResponse) 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_QueryTotalTokenizeSharedAssetsResponse) 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_QueryTotalTokenizeSharedAssetsResponse) 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_QueryTotalTokenizeSharedAssetsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTotalTokenizeSharedAssetsResponse) + 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.Value != nil { + l = options.Size(x.Value) + 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().(*QueryTotalTokenizeSharedAssetsResponse) + 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.Value != nil { + encoded, err := options.Marshal(x.Value) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTotalTokenizeSharedAssetsResponse) + 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: QueryTotalTokenizeSharedAssetsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTotalTokenizeSharedAssetsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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 + } + if x.Value == nil { + x.Value = &v1beta11.Coin{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Value); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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_QueryTotalLiquidStaked protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryTotalLiquidStaked = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryTotalLiquidStaked") +} + +var _ protoreflect.Message = (*fastReflection_QueryTotalLiquidStaked)(nil) + +type fastReflection_QueryTotalLiquidStaked QueryTotalLiquidStaked + +func (x *QueryTotalLiquidStaked) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTotalLiquidStaked)(x) +} + +func (x *QueryTotalLiquidStaked) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[40] + 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_QueryTotalLiquidStaked_messageType fastReflection_QueryTotalLiquidStaked_messageType +var _ protoreflect.MessageType = fastReflection_QueryTotalLiquidStaked_messageType{} + +type fastReflection_QueryTotalLiquidStaked_messageType struct{} + +func (x fastReflection_QueryTotalLiquidStaked_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTotalLiquidStaked)(nil) +} +func (x fastReflection_QueryTotalLiquidStaked_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTotalLiquidStaked) +} +func (x fastReflection_QueryTotalLiquidStaked_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalLiquidStaked +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTotalLiquidStaked) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalLiquidStaked +} + +// 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_QueryTotalLiquidStaked) Type() protoreflect.MessageType { + return _fastReflection_QueryTotalLiquidStaked_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTotalLiquidStaked) New() protoreflect.Message { + return new(fastReflection_QueryTotalLiquidStaked) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTotalLiquidStaked) Interface() protoreflect.ProtoMessage { + return (*QueryTotalLiquidStaked)(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_QueryTotalLiquidStaked) 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_QueryTotalLiquidStaked) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalLiquidStaked")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalLiquidStaked 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_QueryTotalLiquidStaked) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalLiquidStaked")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalLiquidStaked 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_QueryTotalLiquidStaked) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalLiquidStaked")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalLiquidStaked 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_QueryTotalLiquidStaked) 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.staking.v1beta1.QueryTotalLiquidStaked")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalLiquidStaked 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_QueryTotalLiquidStaked) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalLiquidStaked")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalLiquidStaked 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_QueryTotalLiquidStaked) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalLiquidStaked")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalLiquidStaked 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_QueryTotalLiquidStaked) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryTotalLiquidStaked", 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_QueryTotalLiquidStaked) 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_QueryTotalLiquidStaked) 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_QueryTotalLiquidStaked) 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_QueryTotalLiquidStaked) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTotalLiquidStaked) + 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().(*QueryTotalLiquidStaked) + 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().(*QueryTotalLiquidStaked) + 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: QueryTotalLiquidStaked: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTotalLiquidStaked: 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_QueryTotalLiquidStakedResponse protoreflect.MessageDescriptor + fd_QueryTotalLiquidStakedResponse_tokens protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryTotalLiquidStakedResponse = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryTotalLiquidStakedResponse") + fd_QueryTotalLiquidStakedResponse_tokens = md_QueryTotalLiquidStakedResponse.Fields().ByName("tokens") +} + +var _ protoreflect.Message = (*fastReflection_QueryTotalLiquidStakedResponse)(nil) + +type fastReflection_QueryTotalLiquidStakedResponse QueryTotalLiquidStakedResponse + +func (x *QueryTotalLiquidStakedResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTotalLiquidStakedResponse)(x) +} + +func (x *QueryTotalLiquidStakedResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[41] + 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_QueryTotalLiquidStakedResponse_messageType fastReflection_QueryTotalLiquidStakedResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryTotalLiquidStakedResponse_messageType{} + +type fastReflection_QueryTotalLiquidStakedResponse_messageType struct{} + +func (x fastReflection_QueryTotalLiquidStakedResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTotalLiquidStakedResponse)(nil) +} +func (x fastReflection_QueryTotalLiquidStakedResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTotalLiquidStakedResponse) +} +func (x fastReflection_QueryTotalLiquidStakedResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalLiquidStakedResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTotalLiquidStakedResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalLiquidStakedResponse +} + +// 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_QueryTotalLiquidStakedResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryTotalLiquidStakedResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTotalLiquidStakedResponse) New() protoreflect.Message { + return new(fastReflection_QueryTotalLiquidStakedResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTotalLiquidStakedResponse) Interface() protoreflect.ProtoMessage { + return (*QueryTotalLiquidStakedResponse)(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_QueryTotalLiquidStakedResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Tokens != "" { + value := protoreflect.ValueOfString(x.Tokens) + if !f(fd_QueryTotalLiquidStakedResponse_tokens, 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_QueryTotalLiquidStakedResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse.tokens": + return x.Tokens != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse 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_QueryTotalLiquidStakedResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse.tokens": + x.Tokens = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse 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_QueryTotalLiquidStakedResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse.tokens": + value := x.Tokens + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse 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_QueryTotalLiquidStakedResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse.tokens": + x.Tokens = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse 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_QueryTotalLiquidStakedResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse.tokens": + panic(fmt.Errorf("field tokens of message cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse 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_QueryTotalLiquidStakedResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse.tokens": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse 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_QueryTotalLiquidStakedResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse", 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_QueryTotalLiquidStakedResponse) 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_QueryTotalLiquidStakedResponse) 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_QueryTotalLiquidStakedResponse) 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_QueryTotalLiquidStakedResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTotalLiquidStakedResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Tokens) + 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().(*QueryTotalLiquidStakedResponse) + 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.Tokens) > 0 { + i -= len(x.Tokens) + copy(dAtA[i:], x.Tokens) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Tokens))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTotalLiquidStakedResponse) + 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: QueryTotalLiquidStakedResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTotalLiquidStakedResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Tokens", 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.Tokens = 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_QueryTokenizeShareLockInfo protoreflect.MessageDescriptor + fd_QueryTokenizeShareLockInfo_address protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryTokenizeShareLockInfo = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryTokenizeShareLockInfo") + fd_QueryTokenizeShareLockInfo_address = md_QueryTokenizeShareLockInfo.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_QueryTokenizeShareLockInfo)(nil) + +type fastReflection_QueryTokenizeShareLockInfo QueryTokenizeShareLockInfo + +func (x *QueryTokenizeShareLockInfo) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareLockInfo)(x) +} + +func (x *QueryTokenizeShareLockInfo) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[42] + 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_QueryTokenizeShareLockInfo_messageType fastReflection_QueryTokenizeShareLockInfo_messageType +var _ protoreflect.MessageType = fastReflection_QueryTokenizeShareLockInfo_messageType{} + +type fastReflection_QueryTokenizeShareLockInfo_messageType struct{} + +func (x fastReflection_QueryTokenizeShareLockInfo_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareLockInfo)(nil) +} +func (x fastReflection_QueryTokenizeShareLockInfo_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareLockInfo) +} +func (x fastReflection_QueryTokenizeShareLockInfo_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareLockInfo +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTokenizeShareLockInfo) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareLockInfo +} + +// 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_QueryTokenizeShareLockInfo) Type() protoreflect.MessageType { + return _fastReflection_QueryTokenizeShareLockInfo_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTokenizeShareLockInfo) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareLockInfo) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTokenizeShareLockInfo) Interface() protoreflect.ProtoMessage { + return (*QueryTokenizeShareLockInfo)(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_QueryTokenizeShareLockInfo) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryTokenizeShareLockInfo_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_QueryTokenizeShareLockInfo) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfo.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareLockInfo")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareLockInfo 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_QueryTokenizeShareLockInfo) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfo.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareLockInfo")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareLockInfo 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_QueryTokenizeShareLockInfo) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfo.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareLockInfo")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareLockInfo 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_QueryTokenizeShareLockInfo) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfo.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareLockInfo")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareLockInfo 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_QueryTokenizeShareLockInfo) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfo.address": + panic(fmt.Errorf("field address of message cosmos.staking.v1beta1.QueryTokenizeShareLockInfo is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareLockInfo")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareLockInfo 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_QueryTokenizeShareLockInfo) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfo.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareLockInfo")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareLockInfo 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_QueryTokenizeShareLockInfo) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryTokenizeShareLockInfo", 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_QueryTokenizeShareLockInfo) 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_QueryTokenizeShareLockInfo) 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_QueryTokenizeShareLockInfo) 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_QueryTokenizeShareLockInfo) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTokenizeShareLockInfo) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.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().(*QueryTokenizeShareLockInfo) + 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] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTokenizeShareLockInfo) + 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: QueryTokenizeShareLockInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTokenizeShareLockInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field 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_QueryTokenizeShareLockInfoResponse protoreflect.MessageDescriptor + fd_QueryTokenizeShareLockInfoResponse_status protoreflect.FieldDescriptor + fd_QueryTokenizeShareLockInfoResponse_expiration_time protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_query_proto_init() + md_QueryTokenizeShareLockInfoResponse = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryTokenizeShareLockInfoResponse") + fd_QueryTokenizeShareLockInfoResponse_status = md_QueryTokenizeShareLockInfoResponse.Fields().ByName("status") + fd_QueryTokenizeShareLockInfoResponse_expiration_time = md_QueryTokenizeShareLockInfoResponse.Fields().ByName("expiration_time") +} + +var _ protoreflect.Message = (*fastReflection_QueryTokenizeShareLockInfoResponse)(nil) + +type fastReflection_QueryTokenizeShareLockInfoResponse QueryTokenizeShareLockInfoResponse + +func (x *QueryTokenizeShareLockInfoResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareLockInfoResponse)(x) +} + +func (x *QueryTokenizeShareLockInfoResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[43] + 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_QueryTokenizeShareLockInfoResponse_messageType fastReflection_QueryTokenizeShareLockInfoResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryTokenizeShareLockInfoResponse_messageType{} + +type fastReflection_QueryTokenizeShareLockInfoResponse_messageType struct{} + +func (x fastReflection_QueryTokenizeShareLockInfoResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTokenizeShareLockInfoResponse)(nil) +} +func (x fastReflection_QueryTokenizeShareLockInfoResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareLockInfoResponse) +} +func (x fastReflection_QueryTokenizeShareLockInfoResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareLockInfoResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTokenizeShareLockInfoResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTokenizeShareLockInfoResponse +} + +// 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_QueryTokenizeShareLockInfoResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryTokenizeShareLockInfoResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTokenizeShareLockInfoResponse) New() protoreflect.Message { + return new(fastReflection_QueryTokenizeShareLockInfoResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTokenizeShareLockInfoResponse) Interface() protoreflect.ProtoMessage { + return (*QueryTokenizeShareLockInfoResponse)(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_QueryTokenizeShareLockInfoResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Status != "" { + value := protoreflect.ValueOfString(x.Status) + if !f(fd_QueryTokenizeShareLockInfoResponse_status, value) { + return + } + } + if x.ExpirationTime != "" { + value := protoreflect.ValueOfString(x.ExpirationTime) + if !f(fd_QueryTokenizeShareLockInfoResponse_expiration_time, 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_QueryTokenizeShareLockInfoResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse.status": + return x.Status != "" + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse.expiration_time": + return x.ExpirationTime != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse 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_QueryTokenizeShareLockInfoResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse.status": + x.Status = "" + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse.expiration_time": + x.ExpirationTime = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse 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_QueryTokenizeShareLockInfoResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse.status": + value := x.Status + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse.expiration_time": + value := x.ExpirationTime + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse 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_QueryTokenizeShareLockInfoResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse.status": + x.Status = value.Interface().(string) + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse.expiration_time": + x.ExpirationTime = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse 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_QueryTokenizeShareLockInfoResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse.status": + panic(fmt.Errorf("field status of message cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse is not mutable")) + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse.expiration_time": + panic(fmt.Errorf("field expiration_time of message cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse 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_QueryTokenizeShareLockInfoResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse.status": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse.expiration_time": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse 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_QueryTokenizeShareLockInfoResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse", 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_QueryTokenizeShareLockInfoResponse) 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_QueryTokenizeShareLockInfoResponse) 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_QueryTokenizeShareLockInfoResponse) 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_QueryTokenizeShareLockInfoResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTokenizeShareLockInfoResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Status) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ExpirationTime) + 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().(*QueryTokenizeShareLockInfoResponse) + 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.ExpirationTime) > 0 { + i -= len(x.ExpirationTime) + copy(dAtA[i:], x.ExpirationTime) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ExpirationTime))) + i-- + dAtA[i] = 0x12 + } + if len(x.Status) > 0 { + i -= len(x.Status) + copy(dAtA[i:], x.Status) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Status))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTokenizeShareLockInfoResponse) + 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: QueryTokenizeShareLockInfoResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTokenizeShareLockInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Status", 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.Status = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ExpirationTime", 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.ExpirationTime = 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, + } +} + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.0 // protoc (unknown) // source: cosmos/staking/v1beta1/query.proto -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// QueryValidatorsRequest is request type for Query/Validators RPC method. +type QueryValidatorsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // status enables to query for validators matching a given status. + Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + // pagination defines an optional pagination for the request. + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryValidatorsRequest) Reset() { + *x = QueryValidatorsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryValidatorsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryValidatorsRequest) ProtoMessage() {} + +// Deprecated: Use QueryValidatorsRequest.ProtoReflect.Descriptor instead. +func (*QueryValidatorsRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{0} +} + +func (x *QueryValidatorsRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *QueryValidatorsRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +// QueryValidatorsResponse is response type for the Query/Validators RPC method +type QueryValidatorsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // validators contains all the queried validators. + Validators []*Validator `protobuf:"bytes,1,rep,name=validators,proto3" json:"validators,omitempty"` + // pagination defines the pagination in the response. + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryValidatorsResponse) Reset() { + *x = QueryValidatorsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryValidatorsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryValidatorsResponse) ProtoMessage() {} + +// Deprecated: Use QueryValidatorsResponse.ProtoReflect.Descriptor instead. +func (*QueryValidatorsResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{1} +} + +func (x *QueryValidatorsResponse) GetValidators() []*Validator { + if x != nil { + return x.Validators + } + return nil +} + +func (x *QueryValidatorsResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +// QueryValidatorRequest is response type for the Query/Validator RPC method +type QueryValidatorRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // validator_addr defines the validator address to query for. + ValidatorAddr string `protobuf:"bytes,1,opt,name=validator_addr,json=validatorAddr,proto3" json:"validator_addr,omitempty"` +} + +func (x *QueryValidatorRequest) Reset() { + *x = QueryValidatorRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryValidatorRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryValidatorRequest) ProtoMessage() {} + +// Deprecated: Use QueryValidatorRequest.ProtoReflect.Descriptor instead. +func (*QueryValidatorRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{2} +} + +func (x *QueryValidatorRequest) GetValidatorAddr() string { + if x != nil { + return x.ValidatorAddr + } + return "" +} + +// QueryValidatorResponse is response type for the Query/Validator RPC method +type QueryValidatorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // validator defines the validator info. + Validator *Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator,omitempty"` +} + +func (x *QueryValidatorResponse) Reset() { + *x = QueryValidatorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryValidatorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryValidatorResponse) ProtoMessage() {} + +// Deprecated: Use QueryValidatorResponse.ProtoReflect.Descriptor instead. +func (*QueryValidatorResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{3} +} + +func (x *QueryValidatorResponse) GetValidator() *Validator { + if x != nil { + return x.Validator + } + return nil +} + +// QueryValidatorDelegationsRequest is request type for the +// Query/ValidatorDelegations RPC method +type QueryValidatorDelegationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // validator_addr defines the validator address to query for. + ValidatorAddr string `protobuf:"bytes,1,opt,name=validator_addr,json=validatorAddr,proto3" json:"validator_addr,omitempty"` + // pagination defines an optional pagination for the request. + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryValidatorDelegationsRequest) Reset() { + *x = QueryValidatorDelegationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryValidatorDelegationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryValidatorDelegationsRequest) ProtoMessage() {} + +// Deprecated: Use QueryValidatorDelegationsRequest.ProtoReflect.Descriptor instead. +func (*QueryValidatorDelegationsRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{4} +} + +func (x *QueryValidatorDelegationsRequest) GetValidatorAddr() string { + if x != nil { + return x.ValidatorAddr + } + return "" +} + +func (x *QueryValidatorDelegationsRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +// QueryValidatorDelegationsResponse is response type for the +// Query/ValidatorDelegations RPC method +type QueryValidatorDelegationsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DelegationResponses []*DelegationResponse `protobuf:"bytes,1,rep,name=delegation_responses,json=delegationResponses,proto3" json:"delegation_responses,omitempty"` + // pagination defines the pagination in the response. + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryValidatorDelegationsResponse) Reset() { + *x = QueryValidatorDelegationsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryValidatorDelegationsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryValidatorDelegationsResponse) ProtoMessage() {} + +// Deprecated: Use QueryValidatorDelegationsResponse.ProtoReflect.Descriptor instead. +func (*QueryValidatorDelegationsResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{5} +} + +func (x *QueryValidatorDelegationsResponse) GetDelegationResponses() []*DelegationResponse { + if x != nil { + return x.DelegationResponses + } + return nil +} + +func (x *QueryValidatorDelegationsResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +// QueryValidatorUnbondingDelegationsRequest is required type for the +// Query/ValidatorUnbondingDelegations RPC method +type QueryValidatorUnbondingDelegationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // validator_addr defines the validator address to query for. + ValidatorAddr string `protobuf:"bytes,1,opt,name=validator_addr,json=validatorAddr,proto3" json:"validator_addr,omitempty"` + // pagination defines an optional pagination for the request. + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryValidatorUnbondingDelegationsRequest) Reset() { + *x = QueryValidatorUnbondingDelegationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryValidatorUnbondingDelegationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryValidatorUnbondingDelegationsRequest) ProtoMessage() {} + +// Deprecated: Use QueryValidatorUnbondingDelegationsRequest.ProtoReflect.Descriptor instead. +func (*QueryValidatorUnbondingDelegationsRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{6} +} + +func (x *QueryValidatorUnbondingDelegationsRequest) GetValidatorAddr() string { + if x != nil { + return x.ValidatorAddr + } + return "" +} + +func (x *QueryValidatorUnbondingDelegationsRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +// QueryValidatorUnbondingDelegationsResponse is response type for the +// Query/ValidatorUnbondingDelegations RPC method. +type QueryValidatorUnbondingDelegationsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UnbondingResponses []*UnbondingDelegation `protobuf:"bytes,1,rep,name=unbonding_responses,json=unbondingResponses,proto3" json:"unbonding_responses,omitempty"` + // pagination defines the pagination in the response. + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryValidatorUnbondingDelegationsResponse) Reset() { + *x = QueryValidatorUnbondingDelegationsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryValidatorUnbondingDelegationsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryValidatorUnbondingDelegationsResponse) ProtoMessage() {} + +// Deprecated: Use QueryValidatorUnbondingDelegationsResponse.ProtoReflect.Descriptor instead. +func (*QueryValidatorUnbondingDelegationsResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{7} +} + +func (x *QueryValidatorUnbondingDelegationsResponse) GetUnbondingResponses() []*UnbondingDelegation { + if x != nil { + return x.UnbondingResponses + } + return nil +} + +func (x *QueryValidatorUnbondingDelegationsResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +// QueryDelegationRequest is request type for the Query/Delegation RPC method. +type QueryDelegationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // delegator_addr defines the delegator address to query for. + DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` + // validator_addr defines the validator address to query for. + ValidatorAddr string `protobuf:"bytes,2,opt,name=validator_addr,json=validatorAddr,proto3" json:"validator_addr,omitempty"` +} + +func (x *QueryDelegationRequest) Reset() { + *x = QueryDelegationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryDelegationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryDelegationRequest) ProtoMessage() {} + +// Deprecated: Use QueryDelegationRequest.ProtoReflect.Descriptor instead. +func (*QueryDelegationRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{8} +} + +func (x *QueryDelegationRequest) GetDelegatorAddr() string { + if x != nil { + return x.DelegatorAddr + } + return "" +} + +func (x *QueryDelegationRequest) GetValidatorAddr() string { + if x != nil { + return x.ValidatorAddr + } + return "" +} + +// QueryDelegationResponse is response type for the Query/Delegation RPC method. +type QueryDelegationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -// QueryValidatorsRequest is request type for Query/Validators RPC method. -type QueryValidatorsRequest struct { + // delegation_responses defines the delegation info of a delegation. + DelegationResponse *DelegationResponse `protobuf:"bytes,1,opt,name=delegation_response,json=delegationResponse,proto3" json:"delegation_response,omitempty"` +} + +func (x *QueryDelegationResponse) Reset() { + *x = QueryDelegationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryDelegationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryDelegationResponse) ProtoMessage() {} + +// Deprecated: Use QueryDelegationResponse.ProtoReflect.Descriptor instead. +func (*QueryDelegationResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{9} +} + +func (x *QueryDelegationResponse) GetDelegationResponse() *DelegationResponse { + if x != nil { + return x.DelegationResponse + } + return nil +} + +// QueryUnbondingDelegationRequest is request type for the +// Query/UnbondingDelegation RPC method. +type QueryUnbondingDelegationRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // status enables to query for validators matching a given status. - Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + // delegator_addr defines the delegator address to query for. + DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` + // validator_addr defines the validator address to query for. + ValidatorAddr string `protobuf:"bytes,2,opt,name=validator_addr,json=validatorAddr,proto3" json:"validator_addr,omitempty"` +} + +func (x *QueryUnbondingDelegationRequest) Reset() { + *x = QueryUnbondingDelegationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryUnbondingDelegationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryUnbondingDelegationRequest) ProtoMessage() {} + +// Deprecated: Use QueryUnbondingDelegationRequest.ProtoReflect.Descriptor instead. +func (*QueryUnbondingDelegationRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{10} +} + +func (x *QueryUnbondingDelegationRequest) GetDelegatorAddr() string { + if x != nil { + return x.DelegatorAddr + } + return "" +} + +func (x *QueryUnbondingDelegationRequest) GetValidatorAddr() string { + if x != nil { + return x.ValidatorAddr + } + return "" +} + +// QueryDelegationResponse is response type for the Query/UnbondingDelegation +// RPC method. +type QueryUnbondingDelegationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // unbond defines the unbonding information of a delegation. + Unbond *UnbondingDelegation `protobuf:"bytes,1,opt,name=unbond,proto3" json:"unbond,omitempty"` +} + +func (x *QueryUnbondingDelegationResponse) Reset() { + *x = QueryUnbondingDelegationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryUnbondingDelegationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryUnbondingDelegationResponse) ProtoMessage() {} + +// Deprecated: Use QueryUnbondingDelegationResponse.ProtoReflect.Descriptor instead. +func (*QueryUnbondingDelegationResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{11} +} + +func (x *QueryUnbondingDelegationResponse) GetUnbond() *UnbondingDelegation { + if x != nil { + return x.Unbond + } + return nil +} + +// QueryDelegatorDelegationsRequest is request type for the +// Query/DelegatorDelegations RPC method. +type QueryDelegatorDelegationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // delegator_addr defines the delegator address to query for. + DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` // pagination defines an optional pagination for the request. Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (x *QueryValidatorsRequest) Reset() { - *x = QueryValidatorsRequest{} +func (x *QueryDelegatorDelegationsRequest) Reset() { + *x = QueryDelegatorDelegationsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[0] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryValidatorsRequest) String() string { +func (x *QueryDelegatorDelegationsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryValidatorsRequest) ProtoMessage() {} +func (*QueryDelegatorDelegationsRequest) ProtoMessage() {} -// Deprecated: Use QueryValidatorsRequest.ProtoReflect.Descriptor instead. -func (*QueryValidatorsRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{0} +// Deprecated: Use QueryDelegatorDelegationsRequest.ProtoReflect.Descriptor instead. +func (*QueryDelegatorDelegationsRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{12} } -func (x *QueryValidatorsRequest) GetStatus() string { +func (x *QueryDelegatorDelegationsRequest) GetDelegatorAddr() string { if x != nil { - return x.Status + return x.DelegatorAddr } return "" } -func (x *QueryValidatorsRequest) GetPagination() *v1beta1.PageRequest { +func (x *QueryDelegatorDelegationsRequest) GetPagination() *v1beta1.PageRequest { if x != nil { return x.Pagination } return nil } -// QueryValidatorsResponse is response type for the Query/Validators RPC method -type QueryValidatorsResponse struct { +// QueryDelegatorDelegationsResponse is response type for the +// Query/DelegatorDelegations RPC method. +type QueryDelegatorDelegationsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // delegation_responses defines all the delegations' info of a delegator. + DelegationResponses []*DelegationResponse `protobuf:"bytes,1,rep,name=delegation_responses,json=delegationResponses,proto3" json:"delegation_responses,omitempty"` + // pagination defines the pagination in the response. + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryDelegatorDelegationsResponse) Reset() { + *x = QueryDelegatorDelegationsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryDelegatorDelegationsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryDelegatorDelegationsResponse) ProtoMessage() {} + +// Deprecated: Use QueryDelegatorDelegationsResponse.ProtoReflect.Descriptor instead. +func (*QueryDelegatorDelegationsResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{13} +} + +func (x *QueryDelegatorDelegationsResponse) GetDelegationResponses() []*DelegationResponse { + if x != nil { + return x.DelegationResponses + } + return nil +} + +func (x *QueryDelegatorDelegationsResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +// QueryDelegatorUnbondingDelegationsRequest is request type for the +// Query/DelegatorUnbondingDelegations RPC method. +type QueryDelegatorUnbondingDelegationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // delegator_addr defines the delegator address to query for. + DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` + // pagination defines an optional pagination for the request. + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryDelegatorUnbondingDelegationsRequest) Reset() { + *x = QueryDelegatorUnbondingDelegationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryDelegatorUnbondingDelegationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryDelegatorUnbondingDelegationsRequest) ProtoMessage() {} + +// Deprecated: Use QueryDelegatorUnbondingDelegationsRequest.ProtoReflect.Descriptor instead. +func (*QueryDelegatorUnbondingDelegationsRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{14} +} + +func (x *QueryDelegatorUnbondingDelegationsRequest) GetDelegatorAddr() string { + if x != nil { + return x.DelegatorAddr + } + return "" +} + +func (x *QueryDelegatorUnbondingDelegationsRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +// QueryUnbondingDelegatorDelegationsResponse is response type for the +// Query/UnbondingDelegatorDelegations RPC method. +type QueryDelegatorUnbondingDelegationsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // validators contains all the queried validators. - Validators []*Validator `protobuf:"bytes,1,rep,name=validators,proto3" json:"validators,omitempty"` + UnbondingResponses []*UnbondingDelegation `protobuf:"bytes,1,rep,name=unbonding_responses,json=unbondingResponses,proto3" json:"unbonding_responses,omitempty"` // pagination defines the pagination in the response. Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (x *QueryValidatorsResponse) Reset() { - *x = QueryValidatorsResponse{} +func (x *QueryDelegatorUnbondingDelegationsResponse) Reset() { + *x = QueryDelegatorUnbondingDelegationsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[1] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryValidatorsResponse) String() string { +func (x *QueryDelegatorUnbondingDelegationsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryValidatorsResponse) ProtoMessage() {} +func (*QueryDelegatorUnbondingDelegationsResponse) ProtoMessage() {} -// Deprecated: Use QueryValidatorsResponse.ProtoReflect.Descriptor instead. -func (*QueryValidatorsResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{1} +// Deprecated: Use QueryDelegatorUnbondingDelegationsResponse.ProtoReflect.Descriptor instead. +func (*QueryDelegatorUnbondingDelegationsResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{15} } -func (x *QueryValidatorsResponse) GetValidators() []*Validator { +func (x *QueryDelegatorUnbondingDelegationsResponse) GetUnbondingResponses() []*UnbondingDelegation { if x != nil { - return x.Validators + return x.UnbondingResponses } return nil } -func (x *QueryValidatorsResponse) GetPagination() *v1beta1.PageResponse { +func (x *QueryDelegatorUnbondingDelegationsResponse) GetPagination() *v1beta1.PageResponse { if x != nil { return x.Pagination } return nil } -// QueryValidatorRequest is response type for the Query/Validator RPC method -type QueryValidatorRequest struct { +// QueryRedelegationsRequest is request type for the Query/Redelegations RPC +// method. +type QueryRedelegationsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // validator_addr defines the validator address to query for. - ValidatorAddr string `protobuf:"bytes,1,opt,name=validator_addr,json=validatorAddr,proto3" json:"validator_addr,omitempty"` + // delegator_addr defines the delegator address to query for. + DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` + // src_validator_addr defines the validator address to redelegate from. + SrcValidatorAddr string `protobuf:"bytes,2,opt,name=src_validator_addr,json=srcValidatorAddr,proto3" json:"src_validator_addr,omitempty"` + // dst_validator_addr defines the validator address to redelegate to. + DstValidatorAddr string `protobuf:"bytes,3,opt,name=dst_validator_addr,json=dstValidatorAddr,proto3" json:"dst_validator_addr,omitempty"` + // pagination defines an optional pagination for the request. + Pagination *v1beta1.PageRequest `protobuf:"bytes,4,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (x *QueryValidatorRequest) Reset() { - *x = QueryValidatorRequest{} +func (x *QueryRedelegationsRequest) Reset() { + *x = QueryRedelegationsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[2] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryValidatorRequest) String() string { +func (x *QueryRedelegationsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryValidatorRequest) ProtoMessage() {} +func (*QueryRedelegationsRequest) ProtoMessage() {} -// Deprecated: Use QueryValidatorRequest.ProtoReflect.Descriptor instead. -func (*QueryValidatorRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{2} +// Deprecated: Use QueryRedelegationsRequest.ProtoReflect.Descriptor instead. +func (*QueryRedelegationsRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{16} } -func (x *QueryValidatorRequest) GetValidatorAddr() string { +func (x *QueryRedelegationsRequest) GetDelegatorAddr() string { if x != nil { - return x.ValidatorAddr + return x.DelegatorAddr } return "" } -// QueryValidatorResponse is response type for the Query/Validator RPC method -type QueryValidatorResponse struct { +func (x *QueryRedelegationsRequest) GetSrcValidatorAddr() string { + if x != nil { + return x.SrcValidatorAddr + } + return "" +} + +func (x *QueryRedelegationsRequest) GetDstValidatorAddr() string { + if x != nil { + return x.DstValidatorAddr + } + return "" +} + +func (x *QueryRedelegationsRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +// QueryRedelegationsResponse is response type for the Query/Redelegations RPC +// method. +type QueryRedelegationsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // validator defines the validator info. - Validator *Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator,omitempty"` + RedelegationResponses []*RedelegationResponse `protobuf:"bytes,1,rep,name=redelegation_responses,json=redelegationResponses,proto3" json:"redelegation_responses,omitempty"` + // pagination defines the pagination in the response. + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (x *QueryValidatorResponse) Reset() { - *x = QueryValidatorResponse{} +func (x *QueryRedelegationsResponse) Reset() { + *x = QueryRedelegationsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[3] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryValidatorResponse) String() string { +func (x *QueryRedelegationsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryValidatorResponse) ProtoMessage() {} +func (*QueryRedelegationsResponse) ProtoMessage() {} -// Deprecated: Use QueryValidatorResponse.ProtoReflect.Descriptor instead. -func (*QueryValidatorResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{3} +// Deprecated: Use QueryRedelegationsResponse.ProtoReflect.Descriptor instead. +func (*QueryRedelegationsResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{17} } -func (x *QueryValidatorResponse) GetValidator() *Validator { +func (x *QueryRedelegationsResponse) GetRedelegationResponses() []*RedelegationResponse { if x != nil { - return x.Validator + return x.RedelegationResponses } return nil } -// QueryValidatorDelegationsRequest is request type for the -// Query/ValidatorDelegations RPC method -type QueryValidatorDelegationsRequest struct { +func (x *QueryRedelegationsResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +// QueryDelegatorValidatorsRequest is request type for the +// Query/DelegatorValidators RPC method. +type QueryDelegatorValidatorsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // validator_addr defines the validator address to query for. - ValidatorAddr string `protobuf:"bytes,1,opt,name=validator_addr,json=validatorAddr,proto3" json:"validator_addr,omitempty"` + // delegator_addr defines the delegator address to query for. + DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` // pagination defines an optional pagination for the request. Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (x *QueryValidatorDelegationsRequest) Reset() { - *x = QueryValidatorDelegationsRequest{} +func (x *QueryDelegatorValidatorsRequest) Reset() { + *x = QueryDelegatorValidatorsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[4] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryValidatorDelegationsRequest) String() string { +func (x *QueryDelegatorValidatorsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryValidatorDelegationsRequest) ProtoMessage() {} +func (*QueryDelegatorValidatorsRequest) ProtoMessage() {} -// Deprecated: Use QueryValidatorDelegationsRequest.ProtoReflect.Descriptor instead. -func (*QueryValidatorDelegationsRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{4} +// Deprecated: Use QueryDelegatorValidatorsRequest.ProtoReflect.Descriptor instead. +func (*QueryDelegatorValidatorsRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{18} } -func (x *QueryValidatorDelegationsRequest) GetValidatorAddr() string { +func (x *QueryDelegatorValidatorsRequest) GetDelegatorAddr() string { if x != nil { - return x.ValidatorAddr + return x.DelegatorAddr } return "" } -func (x *QueryValidatorDelegationsRequest) GetPagination() *v1beta1.PageRequest { +func (x *QueryDelegatorValidatorsRequest) GetPagination() *v1beta1.PageRequest { if x != nil { return x.Pagination } return nil } -// QueryValidatorDelegationsResponse is response type for the -// Query/ValidatorDelegations RPC method -type QueryValidatorDelegationsResponse struct { +// QueryDelegatorValidatorsResponse is response type for the +// Query/DelegatorValidators RPC method. +type QueryDelegatorValidatorsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DelegationResponses []*DelegationResponse `protobuf:"bytes,1,rep,name=delegation_responses,json=delegationResponses,proto3" json:"delegation_responses,omitempty"` + // validators defines the validators' info of a delegator. + Validators []*Validator `protobuf:"bytes,1,rep,name=validators,proto3" json:"validators,omitempty"` // pagination defines the pagination in the response. Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (x *QueryValidatorDelegationsResponse) Reset() { - *x = QueryValidatorDelegationsResponse{} +func (x *QueryDelegatorValidatorsResponse) Reset() { + *x = QueryDelegatorValidatorsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[5] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryValidatorDelegationsResponse) String() string { +func (x *QueryDelegatorValidatorsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryValidatorDelegationsResponse) ProtoMessage() {} +func (*QueryDelegatorValidatorsResponse) ProtoMessage() {} -// Deprecated: Use QueryValidatorDelegationsResponse.ProtoReflect.Descriptor instead. -func (*QueryValidatorDelegationsResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{5} +// Deprecated: Use QueryDelegatorValidatorsResponse.ProtoReflect.Descriptor instead. +func (*QueryDelegatorValidatorsResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{19} } -func (x *QueryValidatorDelegationsResponse) GetDelegationResponses() []*DelegationResponse { +func (x *QueryDelegatorValidatorsResponse) GetValidators() []*Validator { if x != nil { - return x.DelegationResponses + return x.Validators } return nil } -func (x *QueryValidatorDelegationsResponse) GetPagination() *v1beta1.PageResponse { +func (x *QueryDelegatorValidatorsResponse) GetPagination() *v1beta1.PageResponse { if x != nil { return x.Pagination } return nil } -// QueryValidatorUnbondingDelegationsRequest is required type for the -// Query/ValidatorUnbondingDelegations RPC method -type QueryValidatorUnbondingDelegationsRequest struct { +// QueryDelegatorValidatorRequest is request type for the +// Query/DelegatorValidator RPC method. +type QueryDelegatorValidatorRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // delegator_addr defines the delegator address to query for. + DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` // validator_addr defines the validator address to query for. - ValidatorAddr string `protobuf:"bytes,1,opt,name=validator_addr,json=validatorAddr,proto3" json:"validator_addr,omitempty"` - // pagination defines an optional pagination for the request. - Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + ValidatorAddr string `protobuf:"bytes,2,opt,name=validator_addr,json=validatorAddr,proto3" json:"validator_addr,omitempty"` } -func (x *QueryValidatorUnbondingDelegationsRequest) Reset() { - *x = QueryValidatorUnbondingDelegationsRequest{} +func (x *QueryDelegatorValidatorRequest) Reset() { + *x = QueryDelegatorValidatorRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[6] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryValidatorUnbondingDelegationsRequest) String() string { +func (x *QueryDelegatorValidatorRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryValidatorUnbondingDelegationsRequest) ProtoMessage() {} +func (*QueryDelegatorValidatorRequest) ProtoMessage() {} -// Deprecated: Use QueryValidatorUnbondingDelegationsRequest.ProtoReflect.Descriptor instead. -func (*QueryValidatorUnbondingDelegationsRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{6} +// Deprecated: Use QueryDelegatorValidatorRequest.ProtoReflect.Descriptor instead. +func (*QueryDelegatorValidatorRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{20} } -func (x *QueryValidatorUnbondingDelegationsRequest) GetValidatorAddr() string { +func (x *QueryDelegatorValidatorRequest) GetDelegatorAddr() string { if x != nil { - return x.ValidatorAddr + return x.DelegatorAddr } return "" } -func (x *QueryValidatorUnbondingDelegationsRequest) GetPagination() *v1beta1.PageRequest { +func (x *QueryDelegatorValidatorRequest) GetValidatorAddr() string { if x != nil { - return x.Pagination + return x.ValidatorAddr } - return nil + return "" } -// QueryValidatorUnbondingDelegationsResponse is response type for the -// Query/ValidatorUnbondingDelegations RPC method. -type QueryValidatorUnbondingDelegationsResponse struct { +// QueryDelegatorValidatorResponse response type for the +// Query/DelegatorValidator RPC method. +type QueryDelegatorValidatorResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - UnbondingResponses []*UnbondingDelegation `protobuf:"bytes,1,rep,name=unbonding_responses,json=unbondingResponses,proto3" json:"unbonding_responses,omitempty"` - // pagination defines the pagination in the response. - Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + // validator defines the validator info. + Validator *Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator,omitempty"` } -func (x *QueryValidatorUnbondingDelegationsResponse) Reset() { - *x = QueryValidatorUnbondingDelegationsResponse{} +func (x *QueryDelegatorValidatorResponse) Reset() { + *x = QueryDelegatorValidatorResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[7] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryValidatorUnbondingDelegationsResponse) String() string { +func (x *QueryDelegatorValidatorResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryValidatorUnbondingDelegationsResponse) ProtoMessage() {} - -// Deprecated: Use QueryValidatorUnbondingDelegationsResponse.ProtoReflect.Descriptor instead. -func (*QueryValidatorUnbondingDelegationsResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{7} -} +func (*QueryDelegatorValidatorResponse) ProtoMessage() {} -func (x *QueryValidatorUnbondingDelegationsResponse) GetUnbondingResponses() []*UnbondingDelegation { - if x != nil { - return x.UnbondingResponses - } - return nil +// Deprecated: Use QueryDelegatorValidatorResponse.ProtoReflect.Descriptor instead. +func (*QueryDelegatorValidatorResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{21} } -func (x *QueryValidatorUnbondingDelegationsResponse) GetPagination() *v1beta1.PageResponse { +func (x *QueryDelegatorValidatorResponse) GetValidator() *Validator { if x != nil { - return x.Pagination + return x.Validator } return nil } -// QueryDelegationRequest is request type for the Query/Delegation RPC method. -type QueryDelegationRequest struct { +// QueryHistoricalInfoRequest is request type for the Query/HistoricalInfo RPC +// method. +type QueryHistoricalInfoRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // delegator_addr defines the delegator address to query for. - DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` - // validator_addr defines the validator address to query for. - ValidatorAddr string `protobuf:"bytes,2,opt,name=validator_addr,json=validatorAddr,proto3" json:"validator_addr,omitempty"` + // height defines at which height to query the historical info. + Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` } -func (x *QueryDelegationRequest) Reset() { - *x = QueryDelegationRequest{} +func (x *QueryHistoricalInfoRequest) Reset() { + *x = QueryHistoricalInfoRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[8] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryDelegationRequest) String() string { +func (x *QueryHistoricalInfoRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryDelegationRequest) ProtoMessage() {} - -// Deprecated: Use QueryDelegationRequest.ProtoReflect.Descriptor instead. -func (*QueryDelegationRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{8} -} +func (*QueryHistoricalInfoRequest) ProtoMessage() {} -func (x *QueryDelegationRequest) GetDelegatorAddr() string { - if x != nil { - return x.DelegatorAddr - } - return "" +// Deprecated: Use QueryHistoricalInfoRequest.ProtoReflect.Descriptor instead. +func (*QueryHistoricalInfoRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{22} } -func (x *QueryDelegationRequest) GetValidatorAddr() string { +func (x *QueryHistoricalInfoRequest) GetHeight() int64 { if x != nil { - return x.ValidatorAddr + return x.Height } - return "" + return 0 } -// QueryDelegationResponse is response type for the Query/Delegation RPC method. -type QueryDelegationResponse struct { +// QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo RPC +// method. +type QueryHistoricalInfoResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // delegation_responses defines the delegation info of a delegation. - DelegationResponse *DelegationResponse `protobuf:"bytes,1,opt,name=delegation_response,json=delegationResponse,proto3" json:"delegation_response,omitempty"` + // hist defines the historical info at the given height. + Hist *HistoricalInfo `protobuf:"bytes,1,opt,name=hist,proto3" json:"hist,omitempty"` } -func (x *QueryDelegationResponse) Reset() { - *x = QueryDelegationResponse{} +func (x *QueryHistoricalInfoResponse) Reset() { + *x = QueryHistoricalInfoResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[9] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryDelegationResponse) String() string { +func (x *QueryHistoricalInfoResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryDelegationResponse) ProtoMessage() {} +func (*QueryHistoricalInfoResponse) ProtoMessage() {} -// Deprecated: Use QueryDelegationResponse.ProtoReflect.Descriptor instead. -func (*QueryDelegationResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{9} +// Deprecated: Use QueryHistoricalInfoResponse.ProtoReflect.Descriptor instead. +func (*QueryHistoricalInfoResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{23} } -func (x *QueryDelegationResponse) GetDelegationResponse() *DelegationResponse { +func (x *QueryHistoricalInfoResponse) GetHist() *HistoricalInfo { if x != nil { - return x.DelegationResponse + return x.Hist } return nil } -// QueryUnbondingDelegationRequest is request type for the -// Query/UnbondingDelegation RPC method. -type QueryUnbondingDelegationRequest struct { +// QueryPoolRequest is request type for the Query/Pool RPC method. +type QueryPoolRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // delegator_addr defines the delegator address to query for. - DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` - // validator_addr defines the validator address to query for. - ValidatorAddr string `protobuf:"bytes,2,opt,name=validator_addr,json=validatorAddr,proto3" json:"validator_addr,omitempty"` } -func (x *QueryUnbondingDelegationRequest) Reset() { - *x = QueryUnbondingDelegationRequest{} +func (x *QueryPoolRequest) Reset() { + *x = QueryPoolRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[10] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryUnbondingDelegationRequest) String() string { +func (x *QueryPoolRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryUnbondingDelegationRequest) ProtoMessage() {} - -// Deprecated: Use QueryUnbondingDelegationRequest.ProtoReflect.Descriptor instead. -func (*QueryUnbondingDelegationRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{10} -} - -func (x *QueryUnbondingDelegationRequest) GetDelegatorAddr() string { - if x != nil { - return x.DelegatorAddr - } - return "" -} +func (*QueryPoolRequest) ProtoMessage() {} -func (x *QueryUnbondingDelegationRequest) GetValidatorAddr() string { - if x != nil { - return x.ValidatorAddr - } - return "" +// Deprecated: Use QueryPoolRequest.ProtoReflect.Descriptor instead. +func (*QueryPoolRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{24} } -// QueryDelegationResponse is response type for the Query/UnbondingDelegation -// RPC method. -type QueryUnbondingDelegationResponse struct { +// QueryPoolResponse is response type for the Query/Pool RPC method. +type QueryPoolResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // unbond defines the unbonding information of a delegation. - Unbond *UnbondingDelegation `protobuf:"bytes,1,opt,name=unbond,proto3" json:"unbond,omitempty"` + // pool defines the pool info. + Pool *Pool `protobuf:"bytes,1,opt,name=pool,proto3" json:"pool,omitempty"` } -func (x *QueryUnbondingDelegationResponse) Reset() { - *x = QueryUnbondingDelegationResponse{} +func (x *QueryPoolResponse) Reset() { + *x = QueryPoolResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[11] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryUnbondingDelegationResponse) String() string { +func (x *QueryPoolResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryUnbondingDelegationResponse) ProtoMessage() {} +func (*QueryPoolResponse) ProtoMessage() {} -// Deprecated: Use QueryUnbondingDelegationResponse.ProtoReflect.Descriptor instead. -func (*QueryUnbondingDelegationResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{11} +// Deprecated: Use QueryPoolResponse.ProtoReflect.Descriptor instead. +func (*QueryPoolResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{25} } -func (x *QueryUnbondingDelegationResponse) GetUnbond() *UnbondingDelegation { +func (x *QueryPoolResponse) GetPool() *Pool { if x != nil { - return x.Unbond + return x.Pool } return nil } -// QueryDelegatorDelegationsRequest is request type for the -// Query/DelegatorDelegations RPC method. -type QueryDelegatorDelegationsRequest struct { +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // delegator_addr defines the delegator address to query for. - DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` - // pagination defines an optional pagination for the request. - Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (x *QueryDelegatorDelegationsRequest) Reset() { - *x = QueryDelegatorDelegationsRequest{} +func (x *QueryParamsRequest) Reset() { + *x = QueryParamsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[12] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryDelegatorDelegationsRequest) String() string { +func (x *QueryParamsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryDelegatorDelegationsRequest) ProtoMessage() {} +func (*QueryParamsRequest) ProtoMessage() {} -// Deprecated: Use QueryDelegatorDelegationsRequest.ProtoReflect.Descriptor instead. -func (*QueryDelegatorDelegationsRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{12} +// Deprecated: Use QueryParamsRequest.ProtoReflect.Descriptor instead. +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{26} } -func (x *QueryDelegatorDelegationsRequest) GetDelegatorAddr() string { - if x != nil { - return x.DelegatorAddr +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params holds all the parameters of this module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *QueryParamsResponse) Reset() { + *x = QueryParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *QueryDelegatorDelegationsRequest) GetPagination() *v1beta1.PageRequest { +func (x *QueryParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsResponse) ProtoMessage() {} + +// Deprecated: Use QueryParamsResponse.ProtoReflect.Descriptor instead. +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{27} +} + +func (x *QueryParamsResponse) GetParams() *Params { if x != nil { - return x.Pagination + return x.Params } return nil } -// QueryDelegatorDelegationsResponse is response type for the -// Query/DelegatorDelegations RPC method. -type QueryDelegatorDelegationsResponse struct { +// QueryTokenizeShareRecordByIdRequest is request type for the +// Query/QueryTokenizeShareRecordById RPC method. +type QueryTokenizeShareRecordByIdRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // delegation_responses defines all the delegations' info of a delegator. - DelegationResponses []*DelegationResponse `protobuf:"bytes,1,rep,name=delegation_responses,json=delegationResponses,proto3" json:"delegation_responses,omitempty"` - // pagination defines the pagination in the response. - Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` } -func (x *QueryDelegatorDelegationsResponse) Reset() { - *x = QueryDelegatorDelegationsResponse{} +func (x *QueryTokenizeShareRecordByIdRequest) Reset() { + *x = QueryTokenizeShareRecordByIdRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[13] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryDelegatorDelegationsResponse) String() string { +func (x *QueryTokenizeShareRecordByIdRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryDelegatorDelegationsResponse) ProtoMessage() {} - -// Deprecated: Use QueryDelegatorDelegationsResponse.ProtoReflect.Descriptor instead. -func (*QueryDelegatorDelegationsResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{13} -} +func (*QueryTokenizeShareRecordByIdRequest) ProtoMessage() {} -func (x *QueryDelegatorDelegationsResponse) GetDelegationResponses() []*DelegationResponse { - if x != nil { - return x.DelegationResponses - } - return nil +// Deprecated: Use QueryTokenizeShareRecordByIdRequest.ProtoReflect.Descriptor instead. +func (*QueryTokenizeShareRecordByIdRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{28} } -func (x *QueryDelegatorDelegationsResponse) GetPagination() *v1beta1.PageResponse { +func (x *QueryTokenizeShareRecordByIdRequest) GetId() uint64 { if x != nil { - return x.Pagination + return x.Id } - return nil + return 0 } -// QueryDelegatorUnbondingDelegationsRequest is request type for the -// Query/DelegatorUnbondingDelegations RPC method. -type QueryDelegatorUnbondingDelegationsRequest struct { +// QueryTokenizeShareRecordByIdRequest is response type for the +// Query/QueryTokenizeShareRecordById RPC method. +type QueryTokenizeShareRecordByIdResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // delegator_addr defines the delegator address to query for. - DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` - // pagination defines an optional pagination for the request. - Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + Record *TokenizeShareRecord `protobuf:"bytes,1,opt,name=record,proto3" json:"record,omitempty"` } -func (x *QueryDelegatorUnbondingDelegationsRequest) Reset() { - *x = QueryDelegatorUnbondingDelegationsRequest{} +func (x *QueryTokenizeShareRecordByIdResponse) Reset() { + *x = QueryTokenizeShareRecordByIdResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[14] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryDelegatorUnbondingDelegationsRequest) String() string { +func (x *QueryTokenizeShareRecordByIdResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryDelegatorUnbondingDelegationsRequest) ProtoMessage() {} - -// Deprecated: Use QueryDelegatorUnbondingDelegationsRequest.ProtoReflect.Descriptor instead. -func (*QueryDelegatorUnbondingDelegationsRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{14} -} +func (*QueryTokenizeShareRecordByIdResponse) ProtoMessage() {} -func (x *QueryDelegatorUnbondingDelegationsRequest) GetDelegatorAddr() string { - if x != nil { - return x.DelegatorAddr - } - return "" +// Deprecated: Use QueryTokenizeShareRecordByIdResponse.ProtoReflect.Descriptor instead. +func (*QueryTokenizeShareRecordByIdResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{29} } -func (x *QueryDelegatorUnbondingDelegationsRequest) GetPagination() *v1beta1.PageRequest { +func (x *QueryTokenizeShareRecordByIdResponse) GetRecord() *TokenizeShareRecord { if x != nil { - return x.Pagination + return x.Record } return nil -} - -// QueryUnbondingDelegatorDelegationsResponse is response type for the -// Query/UnbondingDelegatorDelegations RPC method. -type QueryDelegatorUnbondingDelegationsResponse struct { +} + +// QueryTokenizeShareRecordByDenomRequest is request type for the +// Query/QueryTokenizeShareRecordByDenom RPC method. +type QueryTokenizeShareRecordByDenomRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - UnbondingResponses []*UnbondingDelegation `protobuf:"bytes,1,rep,name=unbonding_responses,json=unbondingResponses,proto3" json:"unbonding_responses,omitempty"` - // pagination defines the pagination in the response. - Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` } -func (x *QueryDelegatorUnbondingDelegationsResponse) Reset() { - *x = QueryDelegatorUnbondingDelegationsResponse{} +func (x *QueryTokenizeShareRecordByDenomRequest) Reset() { + *x = QueryTokenizeShareRecordByDenomRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[15] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryDelegatorUnbondingDelegationsResponse) String() string { +func (x *QueryTokenizeShareRecordByDenomRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryDelegatorUnbondingDelegationsResponse) ProtoMessage() {} - -// Deprecated: Use QueryDelegatorUnbondingDelegationsResponse.ProtoReflect.Descriptor instead. -func (*QueryDelegatorUnbondingDelegationsResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{15} -} +func (*QueryTokenizeShareRecordByDenomRequest) ProtoMessage() {} -func (x *QueryDelegatorUnbondingDelegationsResponse) GetUnbondingResponses() []*UnbondingDelegation { - if x != nil { - return x.UnbondingResponses - } - return nil +// Deprecated: Use QueryTokenizeShareRecordByDenomRequest.ProtoReflect.Descriptor instead. +func (*QueryTokenizeShareRecordByDenomRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{30} } -func (x *QueryDelegatorUnbondingDelegationsResponse) GetPagination() *v1beta1.PageResponse { +func (x *QueryTokenizeShareRecordByDenomRequest) GetDenom() string { if x != nil { - return x.Pagination + return x.Denom } - return nil + return "" } -// QueryRedelegationsRequest is request type for the Query/Redelegations RPC -// method. -type QueryRedelegationsRequest struct { +// QueryTokenizeShareRecordByDenomResponse is response type for the +// Query/QueryTokenizeShareRecordByDenom RPC method. +type QueryTokenizeShareRecordByDenomResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // delegator_addr defines the delegator address to query for. - DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` - // src_validator_addr defines the validator address to redelegate from. - SrcValidatorAddr string `protobuf:"bytes,2,opt,name=src_validator_addr,json=srcValidatorAddr,proto3" json:"src_validator_addr,omitempty"` - // dst_validator_addr defines the validator address to redelegate to. - DstValidatorAddr string `protobuf:"bytes,3,opt,name=dst_validator_addr,json=dstValidatorAddr,proto3" json:"dst_validator_addr,omitempty"` - // pagination defines an optional pagination for the request. - Pagination *v1beta1.PageRequest `protobuf:"bytes,4,opt,name=pagination,proto3" json:"pagination,omitempty"` + Record *TokenizeShareRecord `protobuf:"bytes,1,opt,name=record,proto3" json:"record,omitempty"` } -func (x *QueryRedelegationsRequest) Reset() { - *x = QueryRedelegationsRequest{} +func (x *QueryTokenizeShareRecordByDenomResponse) Reset() { + *x = QueryTokenizeShareRecordByDenomResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[16] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryRedelegationsRequest) String() string { +func (x *QueryTokenizeShareRecordByDenomResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryRedelegationsRequest) ProtoMessage() {} +func (*QueryTokenizeShareRecordByDenomResponse) ProtoMessage() {} -// Deprecated: Use QueryRedelegationsRequest.ProtoReflect.Descriptor instead. -func (*QueryRedelegationsRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{16} +// Deprecated: Use QueryTokenizeShareRecordByDenomResponse.ProtoReflect.Descriptor instead. +func (*QueryTokenizeShareRecordByDenomResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{31} } -func (x *QueryRedelegationsRequest) GetDelegatorAddr() string { +func (x *QueryTokenizeShareRecordByDenomResponse) GetRecord() *TokenizeShareRecord { if x != nil { - return x.DelegatorAddr + return x.Record } - return "" + return nil } -func (x *QueryRedelegationsRequest) GetSrcValidatorAddr() string { - if x != nil { - return x.SrcValidatorAddr - } - return "" +// QueryTokenizeShareRecordsOwnedRequest is request type for the +// Query/QueryTokenizeShareRecordsOwned RPC method. +type QueryTokenizeShareRecordsOwnedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` } -func (x *QueryRedelegationsRequest) GetDstValidatorAddr() string { - if x != nil { - return x.DstValidatorAddr +func (x *QueryTokenizeShareRecordsOwnedRequest) Reset() { + *x = QueryTokenizeShareRecordsOwnedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *QueryRedelegationsRequest) GetPagination() *v1beta1.PageRequest { +func (x *QueryTokenizeShareRecordsOwnedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryTokenizeShareRecordsOwnedRequest) ProtoMessage() {} + +// Deprecated: Use QueryTokenizeShareRecordsOwnedRequest.ProtoReflect.Descriptor instead. +func (*QueryTokenizeShareRecordsOwnedRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{32} +} + +func (x *QueryTokenizeShareRecordsOwnedRequest) GetOwner() string { if x != nil { - return x.Pagination + return x.Owner } - return nil + return "" } -// QueryRedelegationsResponse is response type for the Query/Redelegations RPC -// method. -type QueryRedelegationsResponse struct { +// QueryTokenizeShareRecordsOwnedResponse is response type for the +// Query/QueryTokenizeShareRecordsOwned RPC method. +type QueryTokenizeShareRecordsOwnedResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RedelegationResponses []*RedelegationResponse `protobuf:"bytes,1,rep,name=redelegation_responses,json=redelegationResponses,proto3" json:"redelegation_responses,omitempty"` - // pagination defines the pagination in the response. - Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + Records []*TokenizeShareRecord `protobuf:"bytes,1,rep,name=records,proto3" json:"records,omitempty"` } -func (x *QueryRedelegationsResponse) Reset() { - *x = QueryRedelegationsResponse{} +func (x *QueryTokenizeShareRecordsOwnedResponse) Reset() { + *x = QueryTokenizeShareRecordsOwnedResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[17] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryRedelegationsResponse) String() string { +func (x *QueryTokenizeShareRecordsOwnedResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryRedelegationsResponse) ProtoMessage() {} - -// Deprecated: Use QueryRedelegationsResponse.ProtoReflect.Descriptor instead. -func (*QueryRedelegationsResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{17} -} +func (*QueryTokenizeShareRecordsOwnedResponse) ProtoMessage() {} -func (x *QueryRedelegationsResponse) GetRedelegationResponses() []*RedelegationResponse { - if x != nil { - return x.RedelegationResponses - } - return nil +// Deprecated: Use QueryTokenizeShareRecordsOwnedResponse.ProtoReflect.Descriptor instead. +func (*QueryTokenizeShareRecordsOwnedResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{33} } -func (x *QueryRedelegationsResponse) GetPagination() *v1beta1.PageResponse { +func (x *QueryTokenizeShareRecordsOwnedResponse) GetRecords() []*TokenizeShareRecord { if x != nil { - return x.Pagination + return x.Records } return nil } -// QueryDelegatorValidatorsRequest is request type for the -// Query/DelegatorValidators RPC method. -type QueryDelegatorValidatorsRequest struct { +// QueryAllTokenizeShareRecordsRequest is request type for the +// Query/QueryAllTokenizeShareRecords RPC method. +type QueryAllTokenizeShareRecordsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // delegator_addr defines the delegator address to query for. - DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` // pagination defines an optional pagination for the request. - Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + Pagination *v1beta1.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (x *QueryDelegatorValidatorsRequest) Reset() { - *x = QueryDelegatorValidatorsRequest{} +func (x *QueryAllTokenizeShareRecordsRequest) Reset() { + *x = QueryAllTokenizeShareRecordsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[18] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryDelegatorValidatorsRequest) String() string { +func (x *QueryAllTokenizeShareRecordsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryDelegatorValidatorsRequest) ProtoMessage() {} - -// Deprecated: Use QueryDelegatorValidatorsRequest.ProtoReflect.Descriptor instead. -func (*QueryDelegatorValidatorsRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{18} -} +func (*QueryAllTokenizeShareRecordsRequest) ProtoMessage() {} -func (x *QueryDelegatorValidatorsRequest) GetDelegatorAddr() string { - if x != nil { - return x.DelegatorAddr - } - return "" +// Deprecated: Use QueryAllTokenizeShareRecordsRequest.ProtoReflect.Descriptor instead. +func (*QueryAllTokenizeShareRecordsRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{34} } -func (x *QueryDelegatorValidatorsRequest) GetPagination() *v1beta1.PageRequest { +func (x *QueryAllTokenizeShareRecordsRequest) GetPagination() *v1beta1.PageRequest { if x != nil { return x.Pagination } return nil } -// QueryDelegatorValidatorsResponse is response type for the -// Query/DelegatorValidators RPC method. -type QueryDelegatorValidatorsResponse struct { +// QueryAllTokenizeShareRecordsResponse is response type for the +// Query/QueryAllTokenizeShareRecords RPC method. +type QueryAllTokenizeShareRecordsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // validators defines the validators' info of a delegator. - Validators []*Validator `protobuf:"bytes,1,rep,name=validators,proto3" json:"validators,omitempty"` + Records []*TokenizeShareRecord `protobuf:"bytes,1,rep,name=records,proto3" json:"records,omitempty"` // pagination defines the pagination in the response. Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (x *QueryDelegatorValidatorsResponse) Reset() { - *x = QueryDelegatorValidatorsResponse{} +func (x *QueryAllTokenizeShareRecordsResponse) Reset() { + *x = QueryAllTokenizeShareRecordsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[19] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryDelegatorValidatorsResponse) String() string { +func (x *QueryAllTokenizeShareRecordsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryDelegatorValidatorsResponse) ProtoMessage() {} +func (*QueryAllTokenizeShareRecordsResponse) ProtoMessage() {} -// Deprecated: Use QueryDelegatorValidatorsResponse.ProtoReflect.Descriptor instead. -func (*QueryDelegatorValidatorsResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{19} +// Deprecated: Use QueryAllTokenizeShareRecordsResponse.ProtoReflect.Descriptor instead. +func (*QueryAllTokenizeShareRecordsResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{35} } -func (x *QueryDelegatorValidatorsResponse) GetValidators() []*Validator { +func (x *QueryAllTokenizeShareRecordsResponse) GetRecords() []*TokenizeShareRecord { if x != nil { - return x.Validators + return x.Records } return nil } -func (x *QueryDelegatorValidatorsResponse) GetPagination() *v1beta1.PageResponse { +func (x *QueryAllTokenizeShareRecordsResponse) GetPagination() *v1beta1.PageResponse { if x != nil { return x.Pagination } return nil } -// QueryDelegatorValidatorRequest is request type for the -// Query/DelegatorValidator RPC method. -type QueryDelegatorValidatorRequest struct { +// QueryLastTokenizeShareRecordIdRequest is request type for the +// Query/QueryLastTokenizeShareRecordId RPC method. +type QueryLastTokenizeShareRecordIdRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // delegator_addr defines the delegator address to query for. - DelegatorAddr string `protobuf:"bytes,1,opt,name=delegator_addr,json=delegatorAddr,proto3" json:"delegator_addr,omitempty"` - // validator_addr defines the validator address to query for. - ValidatorAddr string `protobuf:"bytes,2,opt,name=validator_addr,json=validatorAddr,proto3" json:"validator_addr,omitempty"` } -func (x *QueryDelegatorValidatorRequest) Reset() { - *x = QueryDelegatorValidatorRequest{} +func (x *QueryLastTokenizeShareRecordIdRequest) Reset() { + *x = QueryLastTokenizeShareRecordIdRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[20] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryDelegatorValidatorRequest) String() string { +func (x *QueryLastTokenizeShareRecordIdRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryDelegatorValidatorRequest) ProtoMessage() {} - -// Deprecated: Use QueryDelegatorValidatorRequest.ProtoReflect.Descriptor instead. -func (*QueryDelegatorValidatorRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{20} -} - -func (x *QueryDelegatorValidatorRequest) GetDelegatorAddr() string { - if x != nil { - return x.DelegatorAddr - } - return "" -} +func (*QueryLastTokenizeShareRecordIdRequest) ProtoMessage() {} -func (x *QueryDelegatorValidatorRequest) GetValidatorAddr() string { - if x != nil { - return x.ValidatorAddr - } - return "" +// Deprecated: Use QueryLastTokenizeShareRecordIdRequest.ProtoReflect.Descriptor instead. +func (*QueryLastTokenizeShareRecordIdRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{36} } -// QueryDelegatorValidatorResponse response type for the -// Query/DelegatorValidator RPC method. -type QueryDelegatorValidatorResponse struct { +// QueryLastTokenizeShareRecordIdResponse is response type for the +// Query/QueryLastTokenizeShareRecordId RPC method. +type QueryLastTokenizeShareRecordIdResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // validator defines the validator info. - Validator *Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator,omitempty"` + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` } -func (x *QueryDelegatorValidatorResponse) Reset() { - *x = QueryDelegatorValidatorResponse{} +func (x *QueryLastTokenizeShareRecordIdResponse) Reset() { + *x = QueryLastTokenizeShareRecordIdResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[21] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryDelegatorValidatorResponse) String() string { +func (x *QueryLastTokenizeShareRecordIdResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryDelegatorValidatorResponse) ProtoMessage() {} +func (*QueryLastTokenizeShareRecordIdResponse) ProtoMessage() {} -// Deprecated: Use QueryDelegatorValidatorResponse.ProtoReflect.Descriptor instead. -func (*QueryDelegatorValidatorResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{21} +// Deprecated: Use QueryLastTokenizeShareRecordIdResponse.ProtoReflect.Descriptor instead. +func (*QueryLastTokenizeShareRecordIdResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{37} } -func (x *QueryDelegatorValidatorResponse) GetValidator() *Validator { +func (x *QueryLastTokenizeShareRecordIdResponse) GetId() uint64 { if x != nil { - return x.Validator + return x.Id } - return nil + return 0 } -// QueryHistoricalInfoRequest is request type for the Query/HistoricalInfo RPC -// method. -type QueryHistoricalInfoRequest struct { +// QueryTotalTokenizeSharedAssetsRequest is request type for the +// Query/QueryTotalTokenizeSharedAssets RPC method. +type QueryTotalTokenizeSharedAssetsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // height defines at which height to query the historical info. - Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` } -func (x *QueryHistoricalInfoRequest) Reset() { - *x = QueryHistoricalInfoRequest{} +func (x *QueryTotalTokenizeSharedAssetsRequest) Reset() { + *x = QueryTotalTokenizeSharedAssetsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[22] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryHistoricalInfoRequest) String() string { +func (x *QueryTotalTokenizeSharedAssetsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryHistoricalInfoRequest) ProtoMessage() {} - -// Deprecated: Use QueryHistoricalInfoRequest.ProtoReflect.Descriptor instead. -func (*QueryHistoricalInfoRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{22} -} +func (*QueryTotalTokenizeSharedAssetsRequest) ProtoMessage() {} -func (x *QueryHistoricalInfoRequest) GetHeight() int64 { - if x != nil { - return x.Height - } - return 0 +// Deprecated: Use QueryTotalTokenizeSharedAssetsRequest.ProtoReflect.Descriptor instead. +func (*QueryTotalTokenizeSharedAssetsRequest) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{38} } -// QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo RPC -// method. -type QueryHistoricalInfoResponse struct { +// QueryTotalTokenizeSharedAssetsResponse is response type for the +// Query/QueryTotalTokenizeSharedAssets RPC method. +type QueryTotalTokenizeSharedAssetsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // hist defines the historical info at the given height. - Hist *HistoricalInfo `protobuf:"bytes,1,opt,name=hist,proto3" json:"hist,omitempty"` + Value *v1beta11.Coin `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` } -func (x *QueryHistoricalInfoResponse) Reset() { - *x = QueryHistoricalInfoResponse{} +func (x *QueryTotalTokenizeSharedAssetsResponse) Reset() { + *x = QueryTotalTokenizeSharedAssetsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[23] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryHistoricalInfoResponse) String() string { +func (x *QueryTotalTokenizeSharedAssetsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryHistoricalInfoResponse) ProtoMessage() {} +func (*QueryTotalTokenizeSharedAssetsResponse) ProtoMessage() {} -// Deprecated: Use QueryHistoricalInfoResponse.ProtoReflect.Descriptor instead. -func (*QueryHistoricalInfoResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{23} +// Deprecated: Use QueryTotalTokenizeSharedAssetsResponse.ProtoReflect.Descriptor instead. +func (*QueryTotalTokenizeSharedAssetsResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{39} } -func (x *QueryHistoricalInfoResponse) GetHist() *HistoricalInfo { +func (x *QueryTotalTokenizeSharedAssetsResponse) GetValue() *v1beta11.Coin { if x != nil { - return x.Hist + return x.Value } return nil } -// QueryPoolRequest is request type for the Query/Pool RPC method. -type QueryPoolRequest struct { +// QueryTotalLiquidStakedRequest is request type for the +// Query/QueryQueryTotalLiquidStaked RPC method. +type QueryTotalLiquidStaked struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *QueryPoolRequest) Reset() { - *x = QueryPoolRequest{} +func (x *QueryTotalLiquidStaked) Reset() { + *x = QueryTotalLiquidStaked{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[24] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryPoolRequest) String() string { +func (x *QueryTotalLiquidStaked) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryPoolRequest) ProtoMessage() {} +func (*QueryTotalLiquidStaked) ProtoMessage() {} -// Deprecated: Use QueryPoolRequest.ProtoReflect.Descriptor instead. -func (*QueryPoolRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{24} +// Deprecated: Use QueryTotalLiquidStaked.ProtoReflect.Descriptor instead. +func (*QueryTotalLiquidStaked) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{40} } -// QueryPoolResponse is response type for the Query/Pool RPC method. -type QueryPoolResponse struct { +// QueryTotalLiquidStakedResponse is response type for the +// Query/QueryQueryTotalLiquidStaked RPC method. +type QueryTotalLiquidStakedResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // pool defines the pool info. - Pool *Pool `protobuf:"bytes,1,opt,name=pool,proto3" json:"pool,omitempty"` + Tokens string `protobuf:"bytes,1,opt,name=tokens,proto3" json:"tokens,omitempty"` } -func (x *QueryPoolResponse) Reset() { - *x = QueryPoolResponse{} +func (x *QueryTotalLiquidStakedResponse) Reset() { + *x = QueryTotalLiquidStakedResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[25] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryPoolResponse) String() string { +func (x *QueryTotalLiquidStakedResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryPoolResponse) ProtoMessage() {} +func (*QueryTotalLiquidStakedResponse) ProtoMessage() {} -// Deprecated: Use QueryPoolResponse.ProtoReflect.Descriptor instead. -func (*QueryPoolResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{25} +// Deprecated: Use QueryTotalLiquidStakedResponse.ProtoReflect.Descriptor instead. +func (*QueryTotalLiquidStakedResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{41} } -func (x *QueryPoolResponse) GetPool() *Pool { +func (x *QueryTotalLiquidStakedResponse) GetTokens() string { if x != nil { - return x.Pool + return x.Tokens } - return nil + return "" } -// QueryParamsRequest is request type for the Query/Params RPC method. -type QueryParamsRequest struct { +// QueryTokenizeShareLockInfo queries the tokenize share lock information +// associated with given account +type QueryTokenizeShareLockInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (x *QueryParamsRequest) Reset() { - *x = QueryParamsRequest{} +func (x *QueryTokenizeShareLockInfo) Reset() { + *x = QueryTokenizeShareLockInfo{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[26] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryParamsRequest) String() string { +func (x *QueryTokenizeShareLockInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryTokenizeShareLockInfo) ProtoMessage() {} -// Deprecated: Use QueryParamsRequest.ProtoReflect.Descriptor instead. -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{26} +// Deprecated: Use QueryTokenizeShareLockInfo.ProtoReflect.Descriptor instead. +func (*QueryTokenizeShareLockInfo) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{42} +} + +func (x *QueryTokenizeShareLockInfo) GetAddress() string { + if x != nil { + return x.Address + } + return "" } -// QueryParamsResponse is response type for the Query/Params RPC method. -type QueryParamsResponse struct { +// QueryTokenizeShareLockInfoResponse is the response from the +// QueryTokenizeShareLockInfo query +type QueryTokenizeShareLockInfoResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // params holds all the parameters of this module. - Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` + Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + ExpirationTime string `protobuf:"bytes,2,opt,name=expiration_time,json=expirationTime,proto3" json:"expiration_time,omitempty"` } -func (x *QueryParamsResponse) Reset() { - *x = QueryParamsResponse{} +func (x *QueryTokenizeShareLockInfoResponse) Reset() { + *x = QueryTokenizeShareLockInfoResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[27] + mi := &file_cosmos_staking_v1beta1_query_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *QueryParamsResponse) String() string { +func (x *QueryTokenizeShareLockInfoResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryTokenizeShareLockInfoResponse) ProtoMessage() {} -// Deprecated: Use QueryParamsResponse.ProtoReflect.Descriptor instead. -func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{27} +// Deprecated: Use QueryTokenizeShareLockInfoResponse.ProtoReflect.Descriptor instead. +func (*QueryTokenizeShareLockInfoResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{43} } -func (x *QueryParamsResponse) GetParams() *Params { +func (x *QueryTokenizeShareLockInfoResponse) GetStatus() string { if x != nil { - return x.Params + return x.Status } - return nil + return "" +} + +func (x *QueryTokenizeShareLockInfoResponse) GetExpirationTime() string { + if x != nil { + return x.ExpirationTime + } + return "" } var File_cosmos_staking_v1beta1_query_proto protoreflect.FileDescriptor @@ -14912,6 +22343,8 @@ var file_cosmos_staking_v1beta1_query_proto_rawDesc = []byte{ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x71, @@ -15183,200 +22616,389 @@ var file_cosmos_staking_v1beta1_query_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, - 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x32, 0xb0, 0x16, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, - 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x2f, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, - 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x40, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x12, 0x33, 0x2f, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, - 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x7d, 0x12, 0xd9, 0x01, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x35, 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0x71, + 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x22, 0x3e, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, + 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x42, 0x79, 0x44, + 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x64, + 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, + 0x6d, 0x22, 0x74, 0x0a, 0x27, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, + 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x42, 0x79, 0x44, + 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, + 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0x3d, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x73, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0x75, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x73, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4b, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x6d, 0x0a, + 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbc, 0x01, 0x0a, + 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, + 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x27, 0x0a, 0x25, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x73, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x38, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x73, + 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0x27, + 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5f, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, + 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x53, 0x74, 0x61, 0x6b, + 0x65, 0x64, 0x22, 0x38, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x36, 0x0a, 0x1a, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x22, 0x65, 0x0a, 0x22, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x32, 0xda, 0x23, 0x0a, 0x05, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x73, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x4c, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, - 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x7d, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xfe, 0x01, - 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xcc, - 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5d, - 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x12, 0x50, 0x2f, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, - 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, - 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0xfc, 0x01, - 0x0a, 0x13, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, + 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x24, 0x12, 0x22, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x40, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, + 0x12, 0x33, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0xd9, 0x01, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x62, - 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x72, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x67, 0x12, 0x65, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xce, 0x01, 0x0a, - 0x14, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x39, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x88, 0xe7, 0xb0, 0x2a, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, + 0x12, 0x3f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0xfe, 0x01, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, + 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, + 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x88, 0xe7, 0xb0, 0x2a, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0xfe, 0x01, - 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x75, 0x6e, 0x62, + 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x5d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x12, + 0x50, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x7d, 0x12, 0xfc, 0x01, 0x0a, 0x13, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, + 0x79, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x72, 0x88, 0xe7, + 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x67, 0x12, 0x65, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x75, 0x6e, 0x62, 0x6f, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0xce, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, + 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x7d, 0x12, 0xfe, 0x01, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x55, + 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, + 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x88, 0xe7, 0xb0, 0x2a, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x75, 0x6e, 0x62, + 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0xc6, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x88, 0xe7, 0xb0, + 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x12, 0x41, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x72, 0x65, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd5, 0x01, 0x0a, 0x13, + 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x73, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x40, 0x12, 0x3e, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xc6, - 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x43, 0x12, 0x41, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, - 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd5, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, - 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x73, 0x12, 0xe3, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x88, 0xe7, 0xb0, + 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x12, 0x4f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0xd6, 0x01, 0x0a, 0x17, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x42, 0x79, 0x49, 0x64, 0x12, 0x3b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x12, 0x38, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0xe5, 0x01, 0x0a, 0x1a, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x42, 0x79, 0x44, 0x65, 0x6e, 0x6f, + 0x6d, 0x12, 0x3e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x42, 0x79, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x3f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x42, 0x79, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x6e, + 0x6f, 0x6d, 0x2f, 0x7b, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x7d, 0x12, 0xdf, 0x01, 0x0a, 0x19, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x73, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x12, 0x3d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x4b, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, - 0x3e, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, - 0xe3, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x51, 0x12, 0x4f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, - 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0xb8, 0x01, 0x0a, 0x0e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x4f, 0x77, 0x6e, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, + 0x3b, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x6f, + 0x77, 0x6e, 0x65, 0x64, 0x2f, 0x7b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x7d, 0x12, 0xcc, 0x01, 0x0a, + 0x17, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x3b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, - 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, - 0x72, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x3d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, - 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, - 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x7b, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, - 0x12, 0x86, 0x01, 0x0a, 0x04, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, - 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x63, 0x6f, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, + 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6f, 0x6c, 0x12, 0x8e, 0x01, 0x0a, 0x06, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0xd9, 0x01, 0x0a, 0x19, + 0x4c, 0x61, 0x73, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64, 0x12, 0x3d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x73, 0x74, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x73, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, + 0x12, 0x35, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x12, 0xd8, 0x01, 0x0a, 0x19, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x3d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x88, - 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0xda, 0x01, 0x0a, 0x1a, 0x63, - 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, - 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x73, 0x12, 0xb0, 0x01, 0x0a, 0x11, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4c, 0x69, 0x71, 0x75, + 0x69, 0x64, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4c, 0x69, 0x71, 0x75, + 0x69, 0x64, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x1a, 0x36, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4c, 0x69, 0x71, 0x75, + 0x69, 0x64, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x5f, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x64, 0x12, 0xcb, 0x01, 0x0a, 0x15, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, + 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x49, + 0x6e, 0x66, 0x6f, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, + 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, - 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, - 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, - 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, - 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x7d, 0x12, 0xb8, 0x01, 0x0a, 0x0e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, + 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, + 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x7b, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0x86, + 0x01, 0x0a, 0x04, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x88, 0xe7, + 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6f, 0x6c, 0x12, 0x8e, 0x01, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x88, 0xe7, 0xb0, + 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0xda, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, + 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, + 0x43, 0x53, 0x58, 0xaa, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -15391,7 +23013,7 @@ func file_cosmos_staking_v1beta1_query_proto_rawDescGZIP() []byte { return file_cosmos_staking_v1beta1_query_proto_rawDescData } -var file_cosmos_staking_v1beta1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 28) +var file_cosmos_staking_v1beta1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_cosmos_staking_v1beta1_query_proto_goTypes = []interface{}{ (*QueryValidatorsRequest)(nil), // 0: cosmos.staking.v1beta1.QueryValidatorsRequest (*QueryValidatorsResponse)(nil), // 1: cosmos.staking.v1beta1.QueryValidatorsResponse @@ -15421,78 +23043,119 @@ var file_cosmos_staking_v1beta1_query_proto_goTypes = []interface{}{ (*QueryPoolResponse)(nil), // 25: cosmos.staking.v1beta1.QueryPoolResponse (*QueryParamsRequest)(nil), // 26: cosmos.staking.v1beta1.QueryParamsRequest (*QueryParamsResponse)(nil), // 27: cosmos.staking.v1beta1.QueryParamsResponse - (*v1beta1.PageRequest)(nil), // 28: cosmos.base.query.v1beta1.PageRequest - (*Validator)(nil), // 29: cosmos.staking.v1beta1.Validator - (*v1beta1.PageResponse)(nil), // 30: cosmos.base.query.v1beta1.PageResponse - (*DelegationResponse)(nil), // 31: cosmos.staking.v1beta1.DelegationResponse - (*UnbondingDelegation)(nil), // 32: cosmos.staking.v1beta1.UnbondingDelegation - (*RedelegationResponse)(nil), // 33: cosmos.staking.v1beta1.RedelegationResponse - (*HistoricalInfo)(nil), // 34: cosmos.staking.v1beta1.HistoricalInfo - (*Pool)(nil), // 35: cosmos.staking.v1beta1.Pool - (*Params)(nil), // 36: cosmos.staking.v1beta1.Params + (*QueryTokenizeShareRecordByIdRequest)(nil), // 28: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest + (*QueryTokenizeShareRecordByIdResponse)(nil), // 29: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse + (*QueryTokenizeShareRecordByDenomRequest)(nil), // 30: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest + (*QueryTokenizeShareRecordByDenomResponse)(nil), // 31: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse + (*QueryTokenizeShareRecordsOwnedRequest)(nil), // 32: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest + (*QueryTokenizeShareRecordsOwnedResponse)(nil), // 33: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse + (*QueryAllTokenizeShareRecordsRequest)(nil), // 34: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest + (*QueryAllTokenizeShareRecordsResponse)(nil), // 35: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse + (*QueryLastTokenizeShareRecordIdRequest)(nil), // 36: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest + (*QueryLastTokenizeShareRecordIdResponse)(nil), // 37: cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse + (*QueryTotalTokenizeSharedAssetsRequest)(nil), // 38: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest + (*QueryTotalTokenizeSharedAssetsResponse)(nil), // 39: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse + (*QueryTotalLiquidStaked)(nil), // 40: cosmos.staking.v1beta1.QueryTotalLiquidStaked + (*QueryTotalLiquidStakedResponse)(nil), // 41: cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse + (*QueryTokenizeShareLockInfo)(nil), // 42: cosmos.staking.v1beta1.QueryTokenizeShareLockInfo + (*QueryTokenizeShareLockInfoResponse)(nil), // 43: cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse + (*v1beta1.PageRequest)(nil), // 44: cosmos.base.query.v1beta1.PageRequest + (*Validator)(nil), // 45: cosmos.staking.v1beta1.Validator + (*v1beta1.PageResponse)(nil), // 46: cosmos.base.query.v1beta1.PageResponse + (*DelegationResponse)(nil), // 47: cosmos.staking.v1beta1.DelegationResponse + (*UnbondingDelegation)(nil), // 48: cosmos.staking.v1beta1.UnbondingDelegation + (*RedelegationResponse)(nil), // 49: cosmos.staking.v1beta1.RedelegationResponse + (*HistoricalInfo)(nil), // 50: cosmos.staking.v1beta1.HistoricalInfo + (*Pool)(nil), // 51: cosmos.staking.v1beta1.Pool + (*Params)(nil), // 52: cosmos.staking.v1beta1.Params + (*TokenizeShareRecord)(nil), // 53: cosmos.staking.v1beta1.TokenizeShareRecord + (*v1beta11.Coin)(nil), // 54: cosmos.base.v1beta1.Coin } var file_cosmos_staking_v1beta1_query_proto_depIdxs = []int32{ - 28, // 0: cosmos.staking.v1beta1.QueryValidatorsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 29, // 1: cosmos.staking.v1beta1.QueryValidatorsResponse.validators:type_name -> cosmos.staking.v1beta1.Validator - 30, // 2: cosmos.staking.v1beta1.QueryValidatorsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 29, // 3: cosmos.staking.v1beta1.QueryValidatorResponse.validator:type_name -> cosmos.staking.v1beta1.Validator - 28, // 4: cosmos.staking.v1beta1.QueryValidatorDelegationsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 31, // 5: cosmos.staking.v1beta1.QueryValidatorDelegationsResponse.delegation_responses:type_name -> cosmos.staking.v1beta1.DelegationResponse - 30, // 6: cosmos.staking.v1beta1.QueryValidatorDelegationsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 28, // 7: cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 32, // 8: cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse.unbonding_responses:type_name -> cosmos.staking.v1beta1.UnbondingDelegation - 30, // 9: cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 31, // 10: cosmos.staking.v1beta1.QueryDelegationResponse.delegation_response:type_name -> cosmos.staking.v1beta1.DelegationResponse - 32, // 11: cosmos.staking.v1beta1.QueryUnbondingDelegationResponse.unbond:type_name -> cosmos.staking.v1beta1.UnbondingDelegation - 28, // 12: cosmos.staking.v1beta1.QueryDelegatorDelegationsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 31, // 13: cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse.delegation_responses:type_name -> cosmos.staking.v1beta1.DelegationResponse - 30, // 14: cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 28, // 15: cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 32, // 16: cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse.unbonding_responses:type_name -> cosmos.staking.v1beta1.UnbondingDelegation - 30, // 17: cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 28, // 18: cosmos.staking.v1beta1.QueryRedelegationsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 33, // 19: cosmos.staking.v1beta1.QueryRedelegationsResponse.redelegation_responses:type_name -> cosmos.staking.v1beta1.RedelegationResponse - 30, // 20: cosmos.staking.v1beta1.QueryRedelegationsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 28, // 21: cosmos.staking.v1beta1.QueryDelegatorValidatorsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest - 29, // 22: cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse.validators:type_name -> cosmos.staking.v1beta1.Validator - 30, // 23: cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse - 29, // 24: cosmos.staking.v1beta1.QueryDelegatorValidatorResponse.validator:type_name -> cosmos.staking.v1beta1.Validator - 34, // 25: cosmos.staking.v1beta1.QueryHistoricalInfoResponse.hist:type_name -> cosmos.staking.v1beta1.HistoricalInfo - 35, // 26: cosmos.staking.v1beta1.QueryPoolResponse.pool:type_name -> cosmos.staking.v1beta1.Pool - 36, // 27: cosmos.staking.v1beta1.QueryParamsResponse.params:type_name -> cosmos.staking.v1beta1.Params - 0, // 28: cosmos.staking.v1beta1.Query.Validators:input_type -> cosmos.staking.v1beta1.QueryValidatorsRequest - 2, // 29: cosmos.staking.v1beta1.Query.Validator:input_type -> cosmos.staking.v1beta1.QueryValidatorRequest - 4, // 30: cosmos.staking.v1beta1.Query.ValidatorDelegations:input_type -> cosmos.staking.v1beta1.QueryValidatorDelegationsRequest - 6, // 31: cosmos.staking.v1beta1.Query.ValidatorUnbondingDelegations:input_type -> cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsRequest - 8, // 32: cosmos.staking.v1beta1.Query.Delegation:input_type -> cosmos.staking.v1beta1.QueryDelegationRequest - 10, // 33: cosmos.staking.v1beta1.Query.UnbondingDelegation:input_type -> cosmos.staking.v1beta1.QueryUnbondingDelegationRequest - 12, // 34: cosmos.staking.v1beta1.Query.DelegatorDelegations:input_type -> cosmos.staking.v1beta1.QueryDelegatorDelegationsRequest - 14, // 35: cosmos.staking.v1beta1.Query.DelegatorUnbondingDelegations:input_type -> cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsRequest - 16, // 36: cosmos.staking.v1beta1.Query.Redelegations:input_type -> cosmos.staking.v1beta1.QueryRedelegationsRequest - 18, // 37: cosmos.staking.v1beta1.Query.DelegatorValidators:input_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorsRequest - 20, // 38: cosmos.staking.v1beta1.Query.DelegatorValidator:input_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorRequest - 22, // 39: cosmos.staking.v1beta1.Query.HistoricalInfo:input_type -> cosmos.staking.v1beta1.QueryHistoricalInfoRequest - 24, // 40: cosmos.staking.v1beta1.Query.Pool:input_type -> cosmos.staking.v1beta1.QueryPoolRequest - 26, // 41: cosmos.staking.v1beta1.Query.Params:input_type -> cosmos.staking.v1beta1.QueryParamsRequest - 1, // 42: cosmos.staking.v1beta1.Query.Validators:output_type -> cosmos.staking.v1beta1.QueryValidatorsResponse - 3, // 43: cosmos.staking.v1beta1.Query.Validator:output_type -> cosmos.staking.v1beta1.QueryValidatorResponse - 5, // 44: cosmos.staking.v1beta1.Query.ValidatorDelegations:output_type -> cosmos.staking.v1beta1.QueryValidatorDelegationsResponse - 7, // 45: cosmos.staking.v1beta1.Query.ValidatorUnbondingDelegations:output_type -> cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse - 9, // 46: cosmos.staking.v1beta1.Query.Delegation:output_type -> cosmos.staking.v1beta1.QueryDelegationResponse - 11, // 47: cosmos.staking.v1beta1.Query.UnbondingDelegation:output_type -> cosmos.staking.v1beta1.QueryUnbondingDelegationResponse - 13, // 48: cosmos.staking.v1beta1.Query.DelegatorDelegations:output_type -> cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse - 15, // 49: cosmos.staking.v1beta1.Query.DelegatorUnbondingDelegations:output_type -> cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse - 17, // 50: cosmos.staking.v1beta1.Query.Redelegations:output_type -> cosmos.staking.v1beta1.QueryRedelegationsResponse - 19, // 51: cosmos.staking.v1beta1.Query.DelegatorValidators:output_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse - 21, // 52: cosmos.staking.v1beta1.Query.DelegatorValidator:output_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorResponse - 23, // 53: cosmos.staking.v1beta1.Query.HistoricalInfo:output_type -> cosmos.staking.v1beta1.QueryHistoricalInfoResponse - 25, // 54: cosmos.staking.v1beta1.Query.Pool:output_type -> cosmos.staking.v1beta1.QueryPoolResponse - 27, // 55: cosmos.staking.v1beta1.Query.Params:output_type -> cosmos.staking.v1beta1.QueryParamsResponse - 42, // [42:56] is the sub-list for method output_type - 28, // [28:42] is the sub-list for method input_type - 28, // [28:28] is the sub-list for extension type_name - 28, // [28:28] is the sub-list for extension extendee - 0, // [0:28] is the sub-list for field type_name + 44, // 0: cosmos.staking.v1beta1.QueryValidatorsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 45, // 1: cosmos.staking.v1beta1.QueryValidatorsResponse.validators:type_name -> cosmos.staking.v1beta1.Validator + 46, // 2: cosmos.staking.v1beta1.QueryValidatorsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 45, // 3: cosmos.staking.v1beta1.QueryValidatorResponse.validator:type_name -> cosmos.staking.v1beta1.Validator + 44, // 4: cosmos.staking.v1beta1.QueryValidatorDelegationsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 47, // 5: cosmos.staking.v1beta1.QueryValidatorDelegationsResponse.delegation_responses:type_name -> cosmos.staking.v1beta1.DelegationResponse + 46, // 6: cosmos.staking.v1beta1.QueryValidatorDelegationsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 44, // 7: cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 48, // 8: cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse.unbonding_responses:type_name -> cosmos.staking.v1beta1.UnbondingDelegation + 46, // 9: cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 47, // 10: cosmos.staking.v1beta1.QueryDelegationResponse.delegation_response:type_name -> cosmos.staking.v1beta1.DelegationResponse + 48, // 11: cosmos.staking.v1beta1.QueryUnbondingDelegationResponse.unbond:type_name -> cosmos.staking.v1beta1.UnbondingDelegation + 44, // 12: cosmos.staking.v1beta1.QueryDelegatorDelegationsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 47, // 13: cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse.delegation_responses:type_name -> cosmos.staking.v1beta1.DelegationResponse + 46, // 14: cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 44, // 15: cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 48, // 16: cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse.unbonding_responses:type_name -> cosmos.staking.v1beta1.UnbondingDelegation + 46, // 17: cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 44, // 18: cosmos.staking.v1beta1.QueryRedelegationsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 49, // 19: cosmos.staking.v1beta1.QueryRedelegationsResponse.redelegation_responses:type_name -> cosmos.staking.v1beta1.RedelegationResponse + 46, // 20: cosmos.staking.v1beta1.QueryRedelegationsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 44, // 21: cosmos.staking.v1beta1.QueryDelegatorValidatorsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 45, // 22: cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse.validators:type_name -> cosmos.staking.v1beta1.Validator + 46, // 23: cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 45, // 24: cosmos.staking.v1beta1.QueryDelegatorValidatorResponse.validator:type_name -> cosmos.staking.v1beta1.Validator + 50, // 25: cosmos.staking.v1beta1.QueryHistoricalInfoResponse.hist:type_name -> cosmos.staking.v1beta1.HistoricalInfo + 51, // 26: cosmos.staking.v1beta1.QueryPoolResponse.pool:type_name -> cosmos.staking.v1beta1.Pool + 52, // 27: cosmos.staking.v1beta1.QueryParamsResponse.params:type_name -> cosmos.staking.v1beta1.Params + 53, // 28: cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse.record:type_name -> cosmos.staking.v1beta1.TokenizeShareRecord + 53, // 29: cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse.record:type_name -> cosmos.staking.v1beta1.TokenizeShareRecord + 53, // 30: cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse.records:type_name -> cosmos.staking.v1beta1.TokenizeShareRecord + 44, // 31: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 53, // 32: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.records:type_name -> cosmos.staking.v1beta1.TokenizeShareRecord + 46, // 33: cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 54, // 34: cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse.value:type_name -> cosmos.base.v1beta1.Coin + 0, // 35: cosmos.staking.v1beta1.Query.Validators:input_type -> cosmos.staking.v1beta1.QueryValidatorsRequest + 2, // 36: cosmos.staking.v1beta1.Query.Validator:input_type -> cosmos.staking.v1beta1.QueryValidatorRequest + 4, // 37: cosmos.staking.v1beta1.Query.ValidatorDelegations:input_type -> cosmos.staking.v1beta1.QueryValidatorDelegationsRequest + 6, // 38: cosmos.staking.v1beta1.Query.ValidatorUnbondingDelegations:input_type -> cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsRequest + 8, // 39: cosmos.staking.v1beta1.Query.Delegation:input_type -> cosmos.staking.v1beta1.QueryDelegationRequest + 10, // 40: cosmos.staking.v1beta1.Query.UnbondingDelegation:input_type -> cosmos.staking.v1beta1.QueryUnbondingDelegationRequest + 12, // 41: cosmos.staking.v1beta1.Query.DelegatorDelegations:input_type -> cosmos.staking.v1beta1.QueryDelegatorDelegationsRequest + 14, // 42: cosmos.staking.v1beta1.Query.DelegatorUnbondingDelegations:input_type -> cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsRequest + 16, // 43: cosmos.staking.v1beta1.Query.Redelegations:input_type -> cosmos.staking.v1beta1.QueryRedelegationsRequest + 18, // 44: cosmos.staking.v1beta1.Query.DelegatorValidators:input_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorsRequest + 20, // 45: cosmos.staking.v1beta1.Query.DelegatorValidator:input_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorRequest + 28, // 46: cosmos.staking.v1beta1.Query.TokenizeShareRecordById:input_type -> cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest + 30, // 47: cosmos.staking.v1beta1.Query.TokenizeShareRecordByDenom:input_type -> cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest + 32, // 48: cosmos.staking.v1beta1.Query.TokenizeShareRecordsOwned:input_type -> cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest + 34, // 49: cosmos.staking.v1beta1.Query.AllTokenizeShareRecords:input_type -> cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest + 36, // 50: cosmos.staking.v1beta1.Query.LastTokenizeShareRecordId:input_type -> cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest + 38, // 51: cosmos.staking.v1beta1.Query.TotalTokenizeSharedAssets:input_type -> cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest + 40, // 52: cosmos.staking.v1beta1.Query.TotalLiquidStaked:input_type -> cosmos.staking.v1beta1.QueryTotalLiquidStaked + 42, // 53: cosmos.staking.v1beta1.Query.TokenizeShareLockInfo:input_type -> cosmos.staking.v1beta1.QueryTokenizeShareLockInfo + 22, // 54: cosmos.staking.v1beta1.Query.HistoricalInfo:input_type -> cosmos.staking.v1beta1.QueryHistoricalInfoRequest + 24, // 55: cosmos.staking.v1beta1.Query.Pool:input_type -> cosmos.staking.v1beta1.QueryPoolRequest + 26, // 56: cosmos.staking.v1beta1.Query.Params:input_type -> cosmos.staking.v1beta1.QueryParamsRequest + 1, // 57: cosmos.staking.v1beta1.Query.Validators:output_type -> cosmos.staking.v1beta1.QueryValidatorsResponse + 3, // 58: cosmos.staking.v1beta1.Query.Validator:output_type -> cosmos.staking.v1beta1.QueryValidatorResponse + 5, // 59: cosmos.staking.v1beta1.Query.ValidatorDelegations:output_type -> cosmos.staking.v1beta1.QueryValidatorDelegationsResponse + 7, // 60: cosmos.staking.v1beta1.Query.ValidatorUnbondingDelegations:output_type -> cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse + 9, // 61: cosmos.staking.v1beta1.Query.Delegation:output_type -> cosmos.staking.v1beta1.QueryDelegationResponse + 11, // 62: cosmos.staking.v1beta1.Query.UnbondingDelegation:output_type -> cosmos.staking.v1beta1.QueryUnbondingDelegationResponse + 13, // 63: cosmos.staking.v1beta1.Query.DelegatorDelegations:output_type -> cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse + 15, // 64: cosmos.staking.v1beta1.Query.DelegatorUnbondingDelegations:output_type -> cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse + 17, // 65: cosmos.staking.v1beta1.Query.Redelegations:output_type -> cosmos.staking.v1beta1.QueryRedelegationsResponse + 19, // 66: cosmos.staking.v1beta1.Query.DelegatorValidators:output_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse + 21, // 67: cosmos.staking.v1beta1.Query.DelegatorValidator:output_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorResponse + 29, // 68: cosmos.staking.v1beta1.Query.TokenizeShareRecordById:output_type -> cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse + 31, // 69: cosmos.staking.v1beta1.Query.TokenizeShareRecordByDenom:output_type -> cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse + 33, // 70: cosmos.staking.v1beta1.Query.TokenizeShareRecordsOwned:output_type -> cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse + 35, // 71: cosmos.staking.v1beta1.Query.AllTokenizeShareRecords:output_type -> cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse + 37, // 72: cosmos.staking.v1beta1.Query.LastTokenizeShareRecordId:output_type -> cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse + 39, // 73: cosmos.staking.v1beta1.Query.TotalTokenizeSharedAssets:output_type -> cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse + 41, // 74: cosmos.staking.v1beta1.Query.TotalLiquidStaked:output_type -> cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse + 43, // 75: cosmos.staking.v1beta1.Query.TokenizeShareLockInfo:output_type -> cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse + 23, // 76: cosmos.staking.v1beta1.Query.HistoricalInfo:output_type -> cosmos.staking.v1beta1.QueryHistoricalInfoResponse + 25, // 77: cosmos.staking.v1beta1.Query.Pool:output_type -> cosmos.staking.v1beta1.QueryPoolResponse + 27, // 78: cosmos.staking.v1beta1.Query.Params:output_type -> cosmos.staking.v1beta1.QueryParamsResponse + 57, // [57:79] is the sub-list for method output_type + 35, // [35:57] is the sub-list for method input_type + 35, // [35:35] is the sub-list for extension type_name + 35, // [35:35] is the sub-list for extension extendee + 0, // [0:35] is the sub-list for field type_name } func init() { file_cosmos_staking_v1beta1_query_proto_init() } @@ -15838,6 +23501,198 @@ func file_cosmos_staking_v1beta1_query_proto_init() { return nil } } + file_cosmos_staking_v1beta1_query_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTokenizeShareRecordByIdRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTokenizeShareRecordByIdResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTokenizeShareRecordByDenomRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTokenizeShareRecordByDenomResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTokenizeShareRecordsOwnedRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTokenizeShareRecordsOwnedResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllTokenizeShareRecordsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllTokenizeShareRecordsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryLastTokenizeShareRecordIdRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryLastTokenizeShareRecordIdResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTotalTokenizeSharedAssetsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTotalTokenizeSharedAssetsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTotalLiquidStaked); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTotalLiquidStakedResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTokenizeShareLockInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_query_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTokenizeShareLockInfoResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -15845,7 +23700,7 @@ func file_cosmos_staking_v1beta1_query_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_staking_v1beta1_query_proto_rawDesc, NumEnums: 0, - NumMessages: 28, + NumMessages: 44, NumExtensions: 0, NumServices: 1, }, diff --git a/api/cosmos/staking/v1beta1/query_grpc.pb.go b/api/cosmos/staking/v1beta1/query_grpc.pb.go index a015a80c6eb2..11a3097a15df 100644 --- a/api/cosmos/staking/v1beta1/query_grpc.pb.go +++ b/api/cosmos/staking/v1beta1/query_grpc.pb.go @@ -30,6 +30,14 @@ const ( Query_Redelegations_FullMethodName = "/cosmos.staking.v1beta1.Query/Redelegations" Query_DelegatorValidators_FullMethodName = "/cosmos.staking.v1beta1.Query/DelegatorValidators" Query_DelegatorValidator_FullMethodName = "/cosmos.staking.v1beta1.Query/DelegatorValidator" + Query_TokenizeShareRecordById_FullMethodName = "/cosmos.staking.v1beta1.Query/TokenizeShareRecordById" + Query_TokenizeShareRecordByDenom_FullMethodName = "/cosmos.staking.v1beta1.Query/TokenizeShareRecordByDenom" + Query_TokenizeShareRecordsOwned_FullMethodName = "/cosmos.staking.v1beta1.Query/TokenizeShareRecordsOwned" + Query_AllTokenizeShareRecords_FullMethodName = "/cosmos.staking.v1beta1.Query/AllTokenizeShareRecords" + Query_LastTokenizeShareRecordId_FullMethodName = "/cosmos.staking.v1beta1.Query/LastTokenizeShareRecordId" + Query_TotalTokenizeSharedAssets_FullMethodName = "/cosmos.staking.v1beta1.Query/TotalTokenizeSharedAssets" + Query_TotalLiquidStaked_FullMethodName = "/cosmos.staking.v1beta1.Query/TotalLiquidStaked" + Query_TokenizeShareLockInfo_FullMethodName = "/cosmos.staking.v1beta1.Query/TokenizeShareLockInfo" Query_HistoricalInfo_FullMethodName = "/cosmos.staking.v1beta1.Query/HistoricalInfo" Query_Pool_FullMethodName = "/cosmos.staking.v1beta1.Query/Pool" Query_Params_FullMethodName = "/cosmos.staking.v1beta1.Query/Params" @@ -86,6 +94,22 @@ type QueryClient interface { // DelegatorValidator queries validator info for given delegator validator // pair. DelegatorValidator(ctx context.Context, in *QueryDelegatorValidatorRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorResponse, error) + // Query for individual tokenize share record information by share by id + TokenizeShareRecordById(ctx context.Context, in *QueryTokenizeShareRecordByIdRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordByIdResponse, error) + // Query for individual tokenize share record information by share denom + TokenizeShareRecordByDenom(ctx context.Context, in *QueryTokenizeShareRecordByDenomRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordByDenomResponse, error) + // Query tokenize share records by address + TokenizeShareRecordsOwned(ctx context.Context, in *QueryTokenizeShareRecordsOwnedRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordsOwnedResponse, error) + // Query for all tokenize share records + AllTokenizeShareRecords(ctx context.Context, in *QueryAllTokenizeShareRecordsRequest, opts ...grpc.CallOption) (*QueryAllTokenizeShareRecordsResponse, error) + // Query for last tokenize share record id + LastTokenizeShareRecordId(ctx context.Context, in *QueryLastTokenizeShareRecordIdRequest, opts ...grpc.CallOption) (*QueryLastTokenizeShareRecordIdResponse, error) + // Query for total tokenized staked assets + TotalTokenizeSharedAssets(ctx context.Context, in *QueryTotalTokenizeSharedAssetsRequest, opts ...grpc.CallOption) (*QueryTotalTokenizeSharedAssetsResponse, error) + // Query for total liquid staked (including tokenized shares or owned by an liquid staking provider) + TotalLiquidStaked(ctx context.Context, in *QueryTotalLiquidStaked, opts ...grpc.CallOption) (*QueryTotalLiquidStakedResponse, error) + // Query tokenize share locks + TokenizeShareLockInfo(ctx context.Context, in *QueryTokenizeShareLockInfo, opts ...grpc.CallOption) (*QueryTokenizeShareLockInfoResponse, error) // HistoricalInfo queries the historical info for given height. HistoricalInfo(ctx context.Context, in *QueryHistoricalInfoRequest, opts ...grpc.CallOption) (*QueryHistoricalInfoResponse, error) // Pool queries the pool info. @@ -201,6 +225,78 @@ func (c *queryClient) DelegatorValidator(ctx context.Context, in *QueryDelegator return out, nil } +func (c *queryClient) TokenizeShareRecordById(ctx context.Context, in *QueryTokenizeShareRecordByIdRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordByIdResponse, error) { + out := new(QueryTokenizeShareRecordByIdResponse) + err := c.cc.Invoke(ctx, Query_TokenizeShareRecordById_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TokenizeShareRecordByDenom(ctx context.Context, in *QueryTokenizeShareRecordByDenomRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordByDenomResponse, error) { + out := new(QueryTokenizeShareRecordByDenomResponse) + err := c.cc.Invoke(ctx, Query_TokenizeShareRecordByDenom_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TokenizeShareRecordsOwned(ctx context.Context, in *QueryTokenizeShareRecordsOwnedRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordsOwnedResponse, error) { + out := new(QueryTokenizeShareRecordsOwnedResponse) + err := c.cc.Invoke(ctx, Query_TokenizeShareRecordsOwned_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AllTokenizeShareRecords(ctx context.Context, in *QueryAllTokenizeShareRecordsRequest, opts ...grpc.CallOption) (*QueryAllTokenizeShareRecordsResponse, error) { + out := new(QueryAllTokenizeShareRecordsResponse) + err := c.cc.Invoke(ctx, Query_AllTokenizeShareRecords_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) LastTokenizeShareRecordId(ctx context.Context, in *QueryLastTokenizeShareRecordIdRequest, opts ...grpc.CallOption) (*QueryLastTokenizeShareRecordIdResponse, error) { + out := new(QueryLastTokenizeShareRecordIdResponse) + err := c.cc.Invoke(ctx, Query_LastTokenizeShareRecordId_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TotalTokenizeSharedAssets(ctx context.Context, in *QueryTotalTokenizeSharedAssetsRequest, opts ...grpc.CallOption) (*QueryTotalTokenizeSharedAssetsResponse, error) { + out := new(QueryTotalTokenizeSharedAssetsResponse) + err := c.cc.Invoke(ctx, Query_TotalTokenizeSharedAssets_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TotalLiquidStaked(ctx context.Context, in *QueryTotalLiquidStaked, opts ...grpc.CallOption) (*QueryTotalLiquidStakedResponse, error) { + out := new(QueryTotalLiquidStakedResponse) + err := c.cc.Invoke(ctx, Query_TotalLiquidStaked_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TokenizeShareLockInfo(ctx context.Context, in *QueryTokenizeShareLockInfo, opts ...grpc.CallOption) (*QueryTokenizeShareLockInfoResponse, error) { + out := new(QueryTokenizeShareLockInfoResponse) + err := c.cc.Invoke(ctx, Query_TokenizeShareLockInfo_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) HistoricalInfo(ctx context.Context, in *QueryHistoricalInfoRequest, opts ...grpc.CallOption) (*QueryHistoricalInfoResponse, error) { out := new(QueryHistoricalInfoResponse) err := c.cc.Invoke(ctx, Query_HistoricalInfo_FullMethodName, in, out, opts...) @@ -279,6 +375,22 @@ type QueryServer interface { // DelegatorValidator queries validator info for given delegator validator // pair. DelegatorValidator(context.Context, *QueryDelegatorValidatorRequest) (*QueryDelegatorValidatorResponse, error) + // Query for individual tokenize share record information by share by id + TokenizeShareRecordById(context.Context, *QueryTokenizeShareRecordByIdRequest) (*QueryTokenizeShareRecordByIdResponse, error) + // Query for individual tokenize share record information by share denom + TokenizeShareRecordByDenom(context.Context, *QueryTokenizeShareRecordByDenomRequest) (*QueryTokenizeShareRecordByDenomResponse, error) + // Query tokenize share records by address + TokenizeShareRecordsOwned(context.Context, *QueryTokenizeShareRecordsOwnedRequest) (*QueryTokenizeShareRecordsOwnedResponse, error) + // Query for all tokenize share records + AllTokenizeShareRecords(context.Context, *QueryAllTokenizeShareRecordsRequest) (*QueryAllTokenizeShareRecordsResponse, error) + // Query for last tokenize share record id + LastTokenizeShareRecordId(context.Context, *QueryLastTokenizeShareRecordIdRequest) (*QueryLastTokenizeShareRecordIdResponse, error) + // Query for total tokenized staked assets + TotalTokenizeSharedAssets(context.Context, *QueryTotalTokenizeSharedAssetsRequest) (*QueryTotalTokenizeSharedAssetsResponse, error) + // Query for total liquid staked (including tokenized shares or owned by an liquid staking provider) + TotalLiquidStaked(context.Context, *QueryTotalLiquidStaked) (*QueryTotalLiquidStakedResponse, error) + // Query tokenize share locks + TokenizeShareLockInfo(context.Context, *QueryTokenizeShareLockInfo) (*QueryTokenizeShareLockInfoResponse, error) // HistoricalInfo queries the historical info for given height. HistoricalInfo(context.Context, *QueryHistoricalInfoRequest) (*QueryHistoricalInfoResponse, error) // Pool queries the pool info. @@ -325,6 +437,30 @@ func (UnimplementedQueryServer) DelegatorValidators(context.Context, *QueryDeleg func (UnimplementedQueryServer) DelegatorValidator(context.Context, *QueryDelegatorValidatorRequest) (*QueryDelegatorValidatorResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DelegatorValidator not implemented") } +func (UnimplementedQueryServer) TokenizeShareRecordById(context.Context, *QueryTokenizeShareRecordByIdRequest) (*QueryTokenizeShareRecordByIdResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareRecordById not implemented") +} +func (UnimplementedQueryServer) TokenizeShareRecordByDenom(context.Context, *QueryTokenizeShareRecordByDenomRequest) (*QueryTokenizeShareRecordByDenomResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareRecordByDenom not implemented") +} +func (UnimplementedQueryServer) TokenizeShareRecordsOwned(context.Context, *QueryTokenizeShareRecordsOwnedRequest) (*QueryTokenizeShareRecordsOwnedResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareRecordsOwned not implemented") +} +func (UnimplementedQueryServer) AllTokenizeShareRecords(context.Context, *QueryAllTokenizeShareRecordsRequest) (*QueryAllTokenizeShareRecordsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllTokenizeShareRecords not implemented") +} +func (UnimplementedQueryServer) LastTokenizeShareRecordId(context.Context, *QueryLastTokenizeShareRecordIdRequest) (*QueryLastTokenizeShareRecordIdResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LastTokenizeShareRecordId not implemented") +} +func (UnimplementedQueryServer) TotalTokenizeSharedAssets(context.Context, *QueryTotalTokenizeSharedAssetsRequest) (*QueryTotalTokenizeSharedAssetsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalTokenizeSharedAssets not implemented") +} +func (UnimplementedQueryServer) TotalLiquidStaked(context.Context, *QueryTotalLiquidStaked) (*QueryTotalLiquidStakedResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalLiquidStaked not implemented") +} +func (UnimplementedQueryServer) TokenizeShareLockInfo(context.Context, *QueryTokenizeShareLockInfo) (*QueryTokenizeShareLockInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareLockInfo not implemented") +} func (UnimplementedQueryServer) HistoricalInfo(context.Context, *QueryHistoricalInfoRequest) (*QueryHistoricalInfoResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method HistoricalInfo not implemented") } @@ -545,6 +681,150 @@ func _Query_DelegatorValidator_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _Query_TokenizeShareRecordById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenizeShareRecordByIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TokenizeShareRecordById(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_TokenizeShareRecordById_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenizeShareRecordById(ctx, req.(*QueryTokenizeShareRecordByIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TokenizeShareRecordByDenom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenizeShareRecordByDenomRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TokenizeShareRecordByDenom(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_TokenizeShareRecordByDenom_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenizeShareRecordByDenom(ctx, req.(*QueryTokenizeShareRecordByDenomRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TokenizeShareRecordsOwned_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenizeShareRecordsOwnedRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TokenizeShareRecordsOwned(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_TokenizeShareRecordsOwned_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenizeShareRecordsOwned(ctx, req.(*QueryTokenizeShareRecordsOwnedRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AllTokenizeShareRecords_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllTokenizeShareRecordsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AllTokenizeShareRecords(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_AllTokenizeShareRecords_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AllTokenizeShareRecords(ctx, req.(*QueryAllTokenizeShareRecordsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_LastTokenizeShareRecordId_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryLastTokenizeShareRecordIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).LastTokenizeShareRecordId(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_LastTokenizeShareRecordId_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).LastTokenizeShareRecordId(ctx, req.(*QueryLastTokenizeShareRecordIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TotalTokenizeSharedAssets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalTokenizeSharedAssetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TotalTokenizeSharedAssets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_TotalTokenizeSharedAssets_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalTokenizeSharedAssets(ctx, req.(*QueryTotalTokenizeSharedAssetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TotalLiquidStaked_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalLiquidStaked) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TotalLiquidStaked(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_TotalLiquidStaked_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalLiquidStaked(ctx, req.(*QueryTotalLiquidStaked)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TokenizeShareLockInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenizeShareLockInfo) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TokenizeShareLockInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_TokenizeShareLockInfo_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenizeShareLockInfo(ctx, req.(*QueryTokenizeShareLockInfo)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_HistoricalInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryHistoricalInfoRequest) if err := dec(in); err != nil { @@ -650,6 +930,38 @@ var Query_ServiceDesc = grpc.ServiceDesc{ MethodName: "DelegatorValidator", Handler: _Query_DelegatorValidator_Handler, }, + { + MethodName: "TokenizeShareRecordById", + Handler: _Query_TokenizeShareRecordById_Handler, + }, + { + MethodName: "TokenizeShareRecordByDenom", + Handler: _Query_TokenizeShareRecordByDenom_Handler, + }, + { + MethodName: "TokenizeShareRecordsOwned", + Handler: _Query_TokenizeShareRecordsOwned_Handler, + }, + { + MethodName: "AllTokenizeShareRecords", + Handler: _Query_AllTokenizeShareRecords_Handler, + }, + { + MethodName: "LastTokenizeShareRecordId", + Handler: _Query_LastTokenizeShareRecordId_Handler, + }, + { + MethodName: "TotalTokenizeSharedAssets", + Handler: _Query_TotalTokenizeSharedAssets_Handler, + }, + { + MethodName: "TotalLiquidStaked", + Handler: _Query_TotalLiquidStaked_Handler, + }, + { + MethodName: "TokenizeShareLockInfo", + Handler: _Query_TokenizeShareLockInfo_Handler, + }, { MethodName: "HistoricalInfo", Handler: _Query_HistoricalInfo_Handler, diff --git a/api/cosmos/staking/v1beta1/staking.pulsar.go b/api/cosmos/staking/v1beta1/staking.pulsar.go index ac22fb75017d..f5a1b16bdbb9 100644 --- a/api/cosmos/staking/v1beta1/staking.pulsar.go +++ b/api/cosmos/staking/v1beta1/staking.pulsar.go @@ -2393,6 +2393,8 @@ var ( fd_Validator_min_self_delegation protoreflect.FieldDescriptor fd_Validator_unbonding_on_hold_ref_count protoreflect.FieldDescriptor fd_Validator_unbonding_ids protoreflect.FieldDescriptor + fd_Validator_validator_bond_shares protoreflect.FieldDescriptor + fd_Validator_liquid_shares protoreflect.FieldDescriptor ) func init() { @@ -2411,6 +2413,8 @@ func init() { fd_Validator_min_self_delegation = md_Validator.Fields().ByName("min_self_delegation") fd_Validator_unbonding_on_hold_ref_count = md_Validator.Fields().ByName("unbonding_on_hold_ref_count") fd_Validator_unbonding_ids = md_Validator.Fields().ByName("unbonding_ids") + fd_Validator_validator_bond_shares = md_Validator.Fields().ByName("validator_bond_shares") + fd_Validator_liquid_shares = md_Validator.Fields().ByName("liquid_shares") } var _ protoreflect.Message = (*fastReflection_Validator)(nil) @@ -2556,6 +2560,18 @@ func (x *fastReflection_Validator) Range(f func(protoreflect.FieldDescriptor, pr return } } + if x.ValidatorBondShares != "" { + value := protoreflect.ValueOfString(x.ValidatorBondShares) + if !f(fd_Validator_validator_bond_shares, value) { + return + } + } + if x.LiquidShares != "" { + value := protoreflect.ValueOfString(x.LiquidShares) + if !f(fd_Validator_liquid_shares, value) { + return + } + } } // Has reports whether a field is populated. @@ -2597,6 +2613,10 @@ func (x *fastReflection_Validator) Has(fd protoreflect.FieldDescriptor) bool { return x.UnbondingOnHoldRefCount != int64(0) case "cosmos.staking.v1beta1.Validator.unbonding_ids": return len(x.UnbondingIds) != 0 + case "cosmos.staking.v1beta1.Validator.validator_bond_shares": + return x.ValidatorBondShares != "" + case "cosmos.staking.v1beta1.Validator.liquid_shares": + return x.LiquidShares != "" default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Validator")) @@ -2639,6 +2659,10 @@ func (x *fastReflection_Validator) Clear(fd protoreflect.FieldDescriptor) { x.UnbondingOnHoldRefCount = int64(0) case "cosmos.staking.v1beta1.Validator.unbonding_ids": x.UnbondingIds = nil + case "cosmos.staking.v1beta1.Validator.validator_bond_shares": + x.ValidatorBondShares = "" + case "cosmos.staking.v1beta1.Validator.liquid_shares": + x.LiquidShares = "" default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Validator")) @@ -2697,6 +2721,12 @@ func (x *fastReflection_Validator) Get(descriptor protoreflect.FieldDescriptor) } listValue := &_Validator_13_list{list: &x.UnbondingIds} return protoreflect.ValueOfList(listValue) + case "cosmos.staking.v1beta1.Validator.validator_bond_shares": + value := x.ValidatorBondShares + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.Validator.liquid_shares": + value := x.LiquidShares + return protoreflect.ValueOfString(value) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Validator")) @@ -2745,6 +2775,10 @@ func (x *fastReflection_Validator) Set(fd protoreflect.FieldDescriptor, value pr lv := value.List() clv := lv.(*_Validator_13_list) x.UnbondingIds = *clv.list + case "cosmos.staking.v1beta1.Validator.validator_bond_shares": + x.ValidatorBondShares = value.Interface().(string) + case "cosmos.staking.v1beta1.Validator.liquid_shares": + x.LiquidShares = value.Interface().(string) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Validator")) @@ -2807,6 +2841,10 @@ func (x *fastReflection_Validator) Mutable(fd protoreflect.FieldDescriptor) prot panic(fmt.Errorf("field min_self_delegation of message cosmos.staking.v1beta1.Validator is not mutable")) case "cosmos.staking.v1beta1.Validator.unbonding_on_hold_ref_count": panic(fmt.Errorf("field unbonding_on_hold_ref_count of message cosmos.staking.v1beta1.Validator is not mutable")) + case "cosmos.staking.v1beta1.Validator.validator_bond_shares": + panic(fmt.Errorf("field validator_bond_shares of message cosmos.staking.v1beta1.Validator is not mutable")) + case "cosmos.staking.v1beta1.Validator.liquid_shares": + panic(fmt.Errorf("field liquid_shares of message cosmos.staking.v1beta1.Validator is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Validator")) @@ -2851,6 +2889,10 @@ func (x *fastReflection_Validator) NewField(fd protoreflect.FieldDescriptor) pro case "cosmos.staking.v1beta1.Validator.unbonding_ids": list := []uint64{} return protoreflect.ValueOfList(&_Validator_13_list{list: &list}) + case "cosmos.staking.v1beta1.Validator.validator_bond_shares": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.Validator.liquid_shares": + return protoreflect.ValueOfString("") default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Validator")) @@ -2971,6 +3013,14 @@ func (x *fastReflection_Validator) ProtoMethods() *protoiface.Methods { } n += 1 + runtime.Sov(uint64(l)) + l } + l = len(x.ValidatorBondShares) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.LiquidShares) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -3000,6 +3050,20 @@ func (x *fastReflection_Validator) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if len(x.LiquidShares) > 0 { + i -= len(x.LiquidShares) + copy(dAtA[i:], x.LiquidShares) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.LiquidShares))) + i-- + dAtA[i] = 0x7a + } + if len(x.ValidatorBondShares) > 0 { + i -= len(x.ValidatorBondShares) + copy(dAtA[i:], x.ValidatorBondShares) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ValidatorBondShares))) + i-- + dAtA[i] = 0x72 + } if len(x.UnbondingIds) > 0 { var pksize2 int for _, num := range x.UnbondingIds { @@ -3603,6 +3667,70 @@ func (x *fastReflection_Validator) ProtoMethods() *protoiface.Methods { } else { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field UnbondingIds", wireType) } + case 14: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorBondShares", 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.ValidatorBondShares = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 15: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LiquidShares", 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.LiquidShares = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -6143,6 +6271,7 @@ var ( fd_Delegation_delegator_address protoreflect.FieldDescriptor fd_Delegation_validator_address protoreflect.FieldDescriptor fd_Delegation_shares protoreflect.FieldDescriptor + fd_Delegation_validator_bond protoreflect.FieldDescriptor ) func init() { @@ -6151,6 +6280,7 @@ func init() { fd_Delegation_delegator_address = md_Delegation.Fields().ByName("delegator_address") fd_Delegation_validator_address = md_Delegation.Fields().ByName("validator_address") fd_Delegation_shares = md_Delegation.Fields().ByName("shares") + fd_Delegation_validator_bond = md_Delegation.Fields().ByName("validator_bond") } var _ protoreflect.Message = (*fastReflection_Delegation)(nil) @@ -6236,6 +6366,12 @@ func (x *fastReflection_Delegation) Range(f func(protoreflect.FieldDescriptor, p return } } + if x.ValidatorBond != false { + value := protoreflect.ValueOfBool(x.ValidatorBond) + if !f(fd_Delegation_validator_bond, value) { + return + } + } } // Has reports whether a field is populated. @@ -6257,6 +6393,8 @@ func (x *fastReflection_Delegation) Has(fd protoreflect.FieldDescriptor) bool { return x.ValidatorAddress != "" case "cosmos.staking.v1beta1.Delegation.shares": return x.Shares != "" + case "cosmos.staking.v1beta1.Delegation.validator_bond": + return x.ValidatorBond != false default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Delegation")) @@ -6279,6 +6417,8 @@ func (x *fastReflection_Delegation) Clear(fd protoreflect.FieldDescriptor) { x.ValidatorAddress = "" case "cosmos.staking.v1beta1.Delegation.shares": x.Shares = "" + case "cosmos.staking.v1beta1.Delegation.validator_bond": + x.ValidatorBond = false default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Delegation")) @@ -6304,6 +6444,9 @@ func (x *fastReflection_Delegation) Get(descriptor protoreflect.FieldDescriptor) case "cosmos.staking.v1beta1.Delegation.shares": value := x.Shares return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.Delegation.validator_bond": + value := x.ValidatorBond + return protoreflect.ValueOfBool(value) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Delegation")) @@ -6330,6 +6473,8 @@ func (x *fastReflection_Delegation) Set(fd protoreflect.FieldDescriptor, value p x.ValidatorAddress = value.Interface().(string) case "cosmos.staking.v1beta1.Delegation.shares": x.Shares = value.Interface().(string) + case "cosmos.staking.v1beta1.Delegation.validator_bond": + x.ValidatorBond = value.Bool() default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Delegation")) @@ -6356,6 +6501,8 @@ func (x *fastReflection_Delegation) Mutable(fd protoreflect.FieldDescriptor) pro panic(fmt.Errorf("field validator_address of message cosmos.staking.v1beta1.Delegation is not mutable")) case "cosmos.staking.v1beta1.Delegation.shares": panic(fmt.Errorf("field shares of message cosmos.staking.v1beta1.Delegation is not mutable")) + case "cosmos.staking.v1beta1.Delegation.validator_bond": + panic(fmt.Errorf("field validator_bond of message cosmos.staking.v1beta1.Delegation is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Delegation")) @@ -6375,6 +6522,8 @@ func (x *fastReflection_Delegation) NewField(fd protoreflect.FieldDescriptor) pr return protoreflect.ValueOfString("") case "cosmos.staking.v1beta1.Delegation.shares": return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.Delegation.validator_bond": + return protoreflect.ValueOfBool(false) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Delegation")) @@ -6456,6 +6605,9 @@ func (x *fastReflection_Delegation) ProtoMethods() *protoiface.Methods { if l > 0 { n += 1 + l + runtime.Sov(uint64(l)) } + if x.ValidatorBond { + n += 2 + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -6485,6 +6637,16 @@ func (x *fastReflection_Delegation) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if x.ValidatorBond { + i-- + if x.ValidatorBond { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } if len(x.Shares) > 0 { i -= len(x.Shares) copy(dAtA[i:], x.Shares) @@ -6651,6 +6813,26 @@ func (x *fastReflection_Delegation) ProtoMethods() *protoiface.Methods { } x.Shares = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorBond", wireType) + } + var v int + 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++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.ValidatorBond = bool(v != 0) default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -9409,13 +9591,16 @@ func (x *fastReflection_Redelegation) ProtoMethods() *protoiface.Methods { } var ( - md_Params protoreflect.MessageDescriptor - fd_Params_unbonding_time protoreflect.FieldDescriptor - fd_Params_max_validators protoreflect.FieldDescriptor - fd_Params_max_entries protoreflect.FieldDescriptor - fd_Params_historical_entries protoreflect.FieldDescriptor - fd_Params_bond_denom protoreflect.FieldDescriptor - fd_Params_min_commission_rate protoreflect.FieldDescriptor + md_Params protoreflect.MessageDescriptor + fd_Params_unbonding_time protoreflect.FieldDescriptor + fd_Params_max_validators protoreflect.FieldDescriptor + fd_Params_max_entries protoreflect.FieldDescriptor + fd_Params_historical_entries protoreflect.FieldDescriptor + fd_Params_bond_denom protoreflect.FieldDescriptor + fd_Params_min_commission_rate protoreflect.FieldDescriptor + fd_Params_validator_bond_factor protoreflect.FieldDescriptor + fd_Params_global_liquid_staking_cap protoreflect.FieldDescriptor + fd_Params_validator_liquid_staking_cap protoreflect.FieldDescriptor ) func init() { @@ -9427,6 +9612,9 @@ func init() { fd_Params_historical_entries = md_Params.Fields().ByName("historical_entries") fd_Params_bond_denom = md_Params.Fields().ByName("bond_denom") fd_Params_min_commission_rate = md_Params.Fields().ByName("min_commission_rate") + fd_Params_validator_bond_factor = md_Params.Fields().ByName("validator_bond_factor") + fd_Params_global_liquid_staking_cap = md_Params.Fields().ByName("global_liquid_staking_cap") + fd_Params_validator_liquid_staking_cap = md_Params.Fields().ByName("validator_liquid_staking_cap") } var _ protoreflect.Message = (*fastReflection_Params)(nil) @@ -9530,6 +9718,24 @@ func (x *fastReflection_Params) Range(f func(protoreflect.FieldDescriptor, proto return } } + if x.ValidatorBondFactor != "" { + value := protoreflect.ValueOfString(x.ValidatorBondFactor) + if !f(fd_Params_validator_bond_factor, value) { + return + } + } + if x.GlobalLiquidStakingCap != "" { + value := protoreflect.ValueOfString(x.GlobalLiquidStakingCap) + if !f(fd_Params_global_liquid_staking_cap, value) { + return + } + } + if x.ValidatorLiquidStakingCap != "" { + value := protoreflect.ValueOfString(x.ValidatorLiquidStakingCap) + if !f(fd_Params_validator_liquid_staking_cap, value) { + return + } + } } // Has reports whether a field is populated. @@ -9557,6 +9763,12 @@ func (x *fastReflection_Params) Has(fd protoreflect.FieldDescriptor) bool { return x.BondDenom != "" case "cosmos.staking.v1beta1.Params.min_commission_rate": return x.MinCommissionRate != "" + case "cosmos.staking.v1beta1.Params.validator_bond_factor": + return x.ValidatorBondFactor != "" + case "cosmos.staking.v1beta1.Params.global_liquid_staking_cap": + return x.GlobalLiquidStakingCap != "" + case "cosmos.staking.v1beta1.Params.validator_liquid_staking_cap": + return x.ValidatorLiquidStakingCap != "" default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Params")) @@ -9585,6 +9797,12 @@ func (x *fastReflection_Params) Clear(fd protoreflect.FieldDescriptor) { x.BondDenom = "" case "cosmos.staking.v1beta1.Params.min_commission_rate": x.MinCommissionRate = "" + case "cosmos.staking.v1beta1.Params.validator_bond_factor": + x.ValidatorBondFactor = "" + case "cosmos.staking.v1beta1.Params.global_liquid_staking_cap": + x.GlobalLiquidStakingCap = "" + case "cosmos.staking.v1beta1.Params.validator_liquid_staking_cap": + x.ValidatorLiquidStakingCap = "" default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Params")) @@ -9619,6 +9837,15 @@ func (x *fastReflection_Params) Get(descriptor protoreflect.FieldDescriptor) pro case "cosmos.staking.v1beta1.Params.min_commission_rate": value := x.MinCommissionRate return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.Params.validator_bond_factor": + value := x.ValidatorBondFactor + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.Params.global_liquid_staking_cap": + value := x.GlobalLiquidStakingCap + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.Params.validator_liquid_staking_cap": + value := x.ValidatorLiquidStakingCap + return protoreflect.ValueOfString(value) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Params")) @@ -9651,6 +9878,12 @@ func (x *fastReflection_Params) Set(fd protoreflect.FieldDescriptor, value proto x.BondDenom = value.Interface().(string) case "cosmos.staking.v1beta1.Params.min_commission_rate": x.MinCommissionRate = value.Interface().(string) + case "cosmos.staking.v1beta1.Params.validator_bond_factor": + x.ValidatorBondFactor = value.Interface().(string) + case "cosmos.staking.v1beta1.Params.global_liquid_staking_cap": + x.GlobalLiquidStakingCap = value.Interface().(string) + case "cosmos.staking.v1beta1.Params.validator_liquid_staking_cap": + x.ValidatorLiquidStakingCap = value.Interface().(string) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Params")) @@ -9686,6 +9919,12 @@ func (x *fastReflection_Params) Mutable(fd protoreflect.FieldDescriptor) protore panic(fmt.Errorf("field bond_denom of message cosmos.staking.v1beta1.Params is not mutable")) case "cosmos.staking.v1beta1.Params.min_commission_rate": panic(fmt.Errorf("field min_commission_rate of message cosmos.staking.v1beta1.Params is not mutable")) + case "cosmos.staking.v1beta1.Params.validator_bond_factor": + panic(fmt.Errorf("field validator_bond_factor of message cosmos.staking.v1beta1.Params is not mutable")) + case "cosmos.staking.v1beta1.Params.global_liquid_staking_cap": + panic(fmt.Errorf("field global_liquid_staking_cap of message cosmos.staking.v1beta1.Params is not mutable")) + case "cosmos.staking.v1beta1.Params.validator_liquid_staking_cap": + panic(fmt.Errorf("field validator_liquid_staking_cap of message cosmos.staking.v1beta1.Params is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Params")) @@ -9712,6 +9951,12 @@ func (x *fastReflection_Params) NewField(fd protoreflect.FieldDescriptor) protor return protoreflect.ValueOfString("") case "cosmos.staking.v1beta1.Params.min_commission_rate": return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.Params.validator_bond_factor": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.Params.global_liquid_staking_cap": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.Params.validator_liquid_staking_cap": + return protoreflect.ValueOfString("") default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Params")) @@ -9802,6 +10047,18 @@ func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { if l > 0 { n += 1 + l + runtime.Sov(uint64(l)) } + l = len(x.ValidatorBondFactor) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.GlobalLiquidStakingCap) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ValidatorLiquidStakingCap) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -9831,6 +10088,27 @@ func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if len(x.ValidatorLiquidStakingCap) > 0 { + i -= len(x.ValidatorLiquidStakingCap) + copy(dAtA[i:], x.ValidatorLiquidStakingCap) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ValidatorLiquidStakingCap))) + i-- + dAtA[i] = 0x4a + } + if len(x.GlobalLiquidStakingCap) > 0 { + i -= len(x.GlobalLiquidStakingCap) + copy(dAtA[i:], x.GlobalLiquidStakingCap) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.GlobalLiquidStakingCap))) + i-- + dAtA[i] = 0x42 + } + if len(x.ValidatorBondFactor) > 0 { + i -= len(x.ValidatorBondFactor) + copy(dAtA[i:], x.ValidatorBondFactor) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ValidatorBondFactor))) + i-- + dAtA[i] = 0x3a + } if len(x.MinCommissionRate) > 0 { i -= len(x.MinCommissionRate) copy(dAtA[i:], x.MinCommissionRate) @@ -10080,6 +10358,102 @@ func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { } x.MinCommissionRate = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 7: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorBondFactor", 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.ValidatorBondFactor = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GlobalLiquidStakingCap", 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.GlobalLiquidStakingCap = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorLiquidStakingCap", 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.ValidatorLiquidStakingCap = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -12679,28 +13053,1104 @@ func (x *fastReflection_ValidatorUpdates) ProtoMethods() *protoiface.Methods { } } -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.27.0 -// protoc (unknown) -// source: cosmos/staking/v1beta1/staking.proto - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +var ( + md_TokenizeShareRecord protoreflect.MessageDescriptor + fd_TokenizeShareRecord_id protoreflect.FieldDescriptor + fd_TokenizeShareRecord_owner protoreflect.FieldDescriptor + fd_TokenizeShareRecord_module_account protoreflect.FieldDescriptor + fd_TokenizeShareRecord_validator protoreflect.FieldDescriptor ) -// BondStatus is the status of a validator. -type BondStatus int32 +func init() { + file_cosmos_staking_v1beta1_staking_proto_init() + md_TokenizeShareRecord = File_cosmos_staking_v1beta1_staking_proto.Messages().ByName("TokenizeShareRecord") + fd_TokenizeShareRecord_id = md_TokenizeShareRecord.Fields().ByName("id") + fd_TokenizeShareRecord_owner = md_TokenizeShareRecord.Fields().ByName("owner") + fd_TokenizeShareRecord_module_account = md_TokenizeShareRecord.Fields().ByName("module_account") + fd_TokenizeShareRecord_validator = md_TokenizeShareRecord.Fields().ByName("validator") +} -const ( - // UNSPECIFIED defines an invalid validator status. - BondStatus_BOND_STATUS_UNSPECIFIED BondStatus = 0 - // UNBONDED defines a validator that is not bonded. - BondStatus_BOND_STATUS_UNBONDED BondStatus = 1 - // UNBONDING defines a validator that is unbonding. +var _ protoreflect.Message = (*fastReflection_TokenizeShareRecord)(nil) + +type fastReflection_TokenizeShareRecord TokenizeShareRecord + +func (x *TokenizeShareRecord) ProtoReflect() protoreflect.Message { + return (*fastReflection_TokenizeShareRecord)(x) +} + +func (x *TokenizeShareRecord) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[21] + 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_TokenizeShareRecord_messageType fastReflection_TokenizeShareRecord_messageType +var _ protoreflect.MessageType = fastReflection_TokenizeShareRecord_messageType{} + +type fastReflection_TokenizeShareRecord_messageType struct{} + +func (x fastReflection_TokenizeShareRecord_messageType) Zero() protoreflect.Message { + return (*fastReflection_TokenizeShareRecord)(nil) +} +func (x fastReflection_TokenizeShareRecord_messageType) New() protoreflect.Message { + return new(fastReflection_TokenizeShareRecord) +} +func (x fastReflection_TokenizeShareRecord_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_TokenizeShareRecord +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_TokenizeShareRecord) Descriptor() protoreflect.MessageDescriptor { + return md_TokenizeShareRecord +} + +// 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_TokenizeShareRecord) Type() protoreflect.MessageType { + return _fastReflection_TokenizeShareRecord_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_TokenizeShareRecord) New() protoreflect.Message { + return new(fastReflection_TokenizeShareRecord) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_TokenizeShareRecord) Interface() protoreflect.ProtoMessage { + return (*TokenizeShareRecord)(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_TokenizeShareRecord) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Id != uint64(0) { + value := protoreflect.ValueOfUint64(x.Id) + if !f(fd_TokenizeShareRecord_id, value) { + return + } + } + if x.Owner != "" { + value := protoreflect.ValueOfString(x.Owner) + if !f(fd_TokenizeShareRecord_owner, value) { + return + } + } + if x.ModuleAccount != "" { + value := protoreflect.ValueOfString(x.ModuleAccount) + if !f(fd_TokenizeShareRecord_module_account, value) { + return + } + } + if x.Validator != "" { + value := protoreflect.ValueOfString(x.Validator) + if !f(fd_TokenizeShareRecord_validator, 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_TokenizeShareRecord) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.TokenizeShareRecord.id": + return x.Id != uint64(0) + case "cosmos.staking.v1beta1.TokenizeShareRecord.owner": + return x.Owner != "" + case "cosmos.staking.v1beta1.TokenizeShareRecord.module_account": + return x.ModuleAccount != "" + case "cosmos.staking.v1beta1.TokenizeShareRecord.validator": + return x.Validator != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.TokenizeShareRecord")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.TokenizeShareRecord 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_TokenizeShareRecord) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.TokenizeShareRecord.id": + x.Id = uint64(0) + case "cosmos.staking.v1beta1.TokenizeShareRecord.owner": + x.Owner = "" + case "cosmos.staking.v1beta1.TokenizeShareRecord.module_account": + x.ModuleAccount = "" + case "cosmos.staking.v1beta1.TokenizeShareRecord.validator": + x.Validator = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.TokenizeShareRecord")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.TokenizeShareRecord 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_TokenizeShareRecord) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.TokenizeShareRecord.id": + value := x.Id + return protoreflect.ValueOfUint64(value) + case "cosmos.staking.v1beta1.TokenizeShareRecord.owner": + value := x.Owner + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.TokenizeShareRecord.module_account": + value := x.ModuleAccount + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.TokenizeShareRecord.validator": + value := x.Validator + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.TokenizeShareRecord")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.TokenizeShareRecord 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_TokenizeShareRecord) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.TokenizeShareRecord.id": + x.Id = value.Uint() + case "cosmos.staking.v1beta1.TokenizeShareRecord.owner": + x.Owner = value.Interface().(string) + case "cosmos.staking.v1beta1.TokenizeShareRecord.module_account": + x.ModuleAccount = value.Interface().(string) + case "cosmos.staking.v1beta1.TokenizeShareRecord.validator": + x.Validator = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.TokenizeShareRecord")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.TokenizeShareRecord 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_TokenizeShareRecord) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.TokenizeShareRecord.id": + panic(fmt.Errorf("field id of message cosmos.staking.v1beta1.TokenizeShareRecord is not mutable")) + case "cosmos.staking.v1beta1.TokenizeShareRecord.owner": + panic(fmt.Errorf("field owner of message cosmos.staking.v1beta1.TokenizeShareRecord is not mutable")) + case "cosmos.staking.v1beta1.TokenizeShareRecord.module_account": + panic(fmt.Errorf("field module_account of message cosmos.staking.v1beta1.TokenizeShareRecord is not mutable")) + case "cosmos.staking.v1beta1.TokenizeShareRecord.validator": + panic(fmt.Errorf("field validator of message cosmos.staking.v1beta1.TokenizeShareRecord is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.TokenizeShareRecord")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.TokenizeShareRecord 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_TokenizeShareRecord) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.TokenizeShareRecord.id": + return protoreflect.ValueOfUint64(uint64(0)) + case "cosmos.staking.v1beta1.TokenizeShareRecord.owner": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.TokenizeShareRecord.module_account": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.TokenizeShareRecord.validator": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.TokenizeShareRecord")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.TokenizeShareRecord 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_TokenizeShareRecord) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.TokenizeShareRecord", 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_TokenizeShareRecord) 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_TokenizeShareRecord) 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_TokenizeShareRecord) 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_TokenizeShareRecord) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*TokenizeShareRecord) + 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.Id != 0 { + n += 1 + runtime.Sov(uint64(x.Id)) + } + l = len(x.Owner) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ModuleAccount) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Validator) + 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().(*TokenizeShareRecord) + 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.Validator) > 0 { + i -= len(x.Validator) + copy(dAtA[i:], x.Validator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Validator))) + i-- + dAtA[i] = 0x22 + } + if len(x.ModuleAccount) > 0 { + i -= len(x.ModuleAccount) + copy(dAtA[i:], x.ModuleAccount) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ModuleAccount))) + i-- + dAtA[i] = 0x1a + } + if len(x.Owner) > 0 { + i -= len(x.Owner) + copy(dAtA[i:], x.Owner) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Owner))) + i-- + dAtA[i] = 0x12 + } + if x.Id != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.Id)) + 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().(*TokenizeShareRecord) + 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: TokenizeShareRecord: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: TokenizeShareRecord: 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 Id", wireType) + } + x.Id = 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.Id |= 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 Owner", 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.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ModuleAccount", 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.ModuleAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Validator", 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.Validator = 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 _ protoreflect.List = (*_PendingTokenizeShareAuthorizations_1_list)(nil) + +type _PendingTokenizeShareAuthorizations_1_list struct { + list *[]string +} + +func (x *_PendingTokenizeShareAuthorizations_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_PendingTokenizeShareAuthorizations_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfString((*x.list)[i]) +} + +func (x *_PendingTokenizeShareAuthorizations_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_PendingTokenizeShareAuthorizations_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_PendingTokenizeShareAuthorizations_1_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message PendingTokenizeShareAuthorizations at list field Addresses as it is not of Message kind")) +} + +func (x *_PendingTokenizeShareAuthorizations_1_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_PendingTokenizeShareAuthorizations_1_list) NewElement() protoreflect.Value { + v := "" + return protoreflect.ValueOfString(v) +} + +func (x *_PendingTokenizeShareAuthorizations_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_PendingTokenizeShareAuthorizations protoreflect.MessageDescriptor + fd_PendingTokenizeShareAuthorizations_addresses protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_staking_proto_init() + md_PendingTokenizeShareAuthorizations = File_cosmos_staking_v1beta1_staking_proto.Messages().ByName("PendingTokenizeShareAuthorizations") + fd_PendingTokenizeShareAuthorizations_addresses = md_PendingTokenizeShareAuthorizations.Fields().ByName("addresses") +} + +var _ protoreflect.Message = (*fastReflection_PendingTokenizeShareAuthorizations)(nil) + +type fastReflection_PendingTokenizeShareAuthorizations PendingTokenizeShareAuthorizations + +func (x *PendingTokenizeShareAuthorizations) ProtoReflect() protoreflect.Message { + return (*fastReflection_PendingTokenizeShareAuthorizations)(x) +} + +func (x *PendingTokenizeShareAuthorizations) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[22] + 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_PendingTokenizeShareAuthorizations_messageType fastReflection_PendingTokenizeShareAuthorizations_messageType +var _ protoreflect.MessageType = fastReflection_PendingTokenizeShareAuthorizations_messageType{} + +type fastReflection_PendingTokenizeShareAuthorizations_messageType struct{} + +func (x fastReflection_PendingTokenizeShareAuthorizations_messageType) Zero() protoreflect.Message { + return (*fastReflection_PendingTokenizeShareAuthorizations)(nil) +} +func (x fastReflection_PendingTokenizeShareAuthorizations_messageType) New() protoreflect.Message { + return new(fastReflection_PendingTokenizeShareAuthorizations) +} +func (x fastReflection_PendingTokenizeShareAuthorizations_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_PendingTokenizeShareAuthorizations +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_PendingTokenizeShareAuthorizations) Descriptor() protoreflect.MessageDescriptor { + return md_PendingTokenizeShareAuthorizations +} + +// 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_PendingTokenizeShareAuthorizations) Type() protoreflect.MessageType { + return _fastReflection_PendingTokenizeShareAuthorizations_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_PendingTokenizeShareAuthorizations) New() protoreflect.Message { + return new(fastReflection_PendingTokenizeShareAuthorizations) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_PendingTokenizeShareAuthorizations) Interface() protoreflect.ProtoMessage { + return (*PendingTokenizeShareAuthorizations)(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_PendingTokenizeShareAuthorizations) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Addresses) != 0 { + value := protoreflect.ValueOfList(&_PendingTokenizeShareAuthorizations_1_list{list: &x.Addresses}) + if !f(fd_PendingTokenizeShareAuthorizations_addresses, 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_PendingTokenizeShareAuthorizations) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations.addresses": + return len(x.Addresses) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations 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_PendingTokenizeShareAuthorizations) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations.addresses": + x.Addresses = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations 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_PendingTokenizeShareAuthorizations) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations.addresses": + if len(x.Addresses) == 0 { + return protoreflect.ValueOfList(&_PendingTokenizeShareAuthorizations_1_list{}) + } + listValue := &_PendingTokenizeShareAuthorizations_1_list{list: &x.Addresses} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations 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_PendingTokenizeShareAuthorizations) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations.addresses": + lv := value.List() + clv := lv.(*_PendingTokenizeShareAuthorizations_1_list) + x.Addresses = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations 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_PendingTokenizeShareAuthorizations) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations.addresses": + if x.Addresses == nil { + x.Addresses = []string{} + } + value := &_PendingTokenizeShareAuthorizations_1_list{list: &x.Addresses} + return protoreflect.ValueOfList(value) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations 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_PendingTokenizeShareAuthorizations) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations.addresses": + list := []string{} + return protoreflect.ValueOfList(&_PendingTokenizeShareAuthorizations_1_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations 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_PendingTokenizeShareAuthorizations) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations", 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_PendingTokenizeShareAuthorizations) 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_PendingTokenizeShareAuthorizations) 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_PendingTokenizeShareAuthorizations) 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_PendingTokenizeShareAuthorizations) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*PendingTokenizeShareAuthorizations) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.Addresses) > 0 { + for _, s := range x.Addresses { + l = len(s) + 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().(*PendingTokenizeShareAuthorizations) + 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.Addresses) > 0 { + for iNdEx := len(x.Addresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(x.Addresses[iNdEx]) + copy(dAtA[i:], x.Addresses[iNdEx]) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Addresses[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*PendingTokenizeShareAuthorizations) + 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: PendingTokenizeShareAuthorizations: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: PendingTokenizeShareAuthorizations: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Addresses", 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.Addresses = append(x.Addresses, 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, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: cosmos/staking/v1beta1/staking.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// BondStatus is the status of a validator. +type BondStatus int32 + +const ( + // UNSPECIFIED defines an invalid validator status. + BondStatus_BOND_STATUS_UNSPECIFIED BondStatus = 0 + // UNBONDED defines a validator that is not bonded. + BondStatus_BOND_STATUS_UNBONDED BondStatus = 1 + // UNBONDING defines a validator that is unbonding. BondStatus_BOND_STATUS_UNBONDING BondStatus = 2 // BONDED defines a validator that is bonded. BondStatus_BOND_STATUS_BONDED BondStatus = 3 @@ -12802,6 +14252,64 @@ func (Infraction) EnumDescriptor() ([]byte, []int) { return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{1} } +// TokenizeShareLockStatus indicates whether the address is able to tokenize shares +type TokenizeShareLockStatus int32 + +const ( + // UNSPECIFIED defines an empty tokenize share lock status + TokenizeShareLockStatus_TOKENIZE_SHARE_LOCK_STATUS_UNSPECIFIED TokenizeShareLockStatus = 0 + // LOCKED indicates the account is locked and cannot tokenize shares + TokenizeShareLockStatus_TOKENIZE_SHARE_LOCK_STATUS_LOCKED TokenizeShareLockStatus = 1 + // UNLOCKED indicates the account is unlocked and can tokenize shares + TokenizeShareLockStatus_TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED TokenizeShareLockStatus = 2 + // LOCK_EXPIRING indicates the account is unable to tokenize shares, but + // will be able to tokenize shortly (after 1 unbonding period) + TokenizeShareLockStatus_TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING TokenizeShareLockStatus = 3 +) + +// Enum value maps for TokenizeShareLockStatus. +var ( + TokenizeShareLockStatus_name = map[int32]string{ + 0: "TOKENIZE_SHARE_LOCK_STATUS_UNSPECIFIED", + 1: "TOKENIZE_SHARE_LOCK_STATUS_LOCKED", + 2: "TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED", + 3: "TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING", + } + TokenizeShareLockStatus_value = map[string]int32{ + "TOKENIZE_SHARE_LOCK_STATUS_UNSPECIFIED": 0, + "TOKENIZE_SHARE_LOCK_STATUS_LOCKED": 1, + "TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED": 2, + "TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING": 3, + } +) + +func (x TokenizeShareLockStatus) Enum() *TokenizeShareLockStatus { + p := new(TokenizeShareLockStatus) + *p = x + return p +} + +func (x TokenizeShareLockStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TokenizeShareLockStatus) Descriptor() protoreflect.EnumDescriptor { + return file_cosmos_staking_v1beta1_staking_proto_enumTypes[2].Descriptor() +} + +func (TokenizeShareLockStatus) Type() protoreflect.EnumType { + return &file_cosmos_staking_v1beta1_staking_proto_enumTypes[2] +} + +func (x TokenizeShareLockStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TokenizeShareLockStatus.Descriptor instead. +func (TokenizeShareLockStatus) EnumDescriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{2} +} + // HistoricalInfo contains header and validator information for a given block. // It is stored as part of staking module's state, which persists the `n` most // recent HistoricalInfo @@ -13057,14 +14565,18 @@ type Validator struct { UnbondingTime *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=unbonding_time,json=unbondingTime,proto3" json:"unbonding_time,omitempty"` // commission defines the commission parameters. Commission *Commission `protobuf:"bytes,10,opt,name=commission,proto3" json:"commission,omitempty"` - // min_self_delegation is the validator's self declared minimum self delegation. + // Deprecated: This field has been deprecated with LSM in favor of the validator bond // - // Since: cosmos-sdk 0.46 + // Deprecated: Do not use. MinSelfDelegation string `protobuf:"bytes,11,opt,name=min_self_delegation,json=minSelfDelegation,proto3" json:"min_self_delegation,omitempty"` // strictly positive if this validator's unbonding has been stopped by external modules UnbondingOnHoldRefCount int64 `protobuf:"varint,12,opt,name=unbonding_on_hold_ref_count,json=unbondingOnHoldRefCount,proto3" json:"unbonding_on_hold_ref_count,omitempty"` // list of unbonding ids, each uniquely identifing an unbonding of this validator UnbondingIds []uint64 `protobuf:"varint,13,rep,packed,name=unbonding_ids,json=unbondingIds,proto3" json:"unbonding_ids,omitempty"` + // Number of shares self bonded from the validator + ValidatorBondShares string `protobuf:"bytes,14,opt,name=validator_bond_shares,json=validatorBondShares,proto3" json:"validator_bond_shares,omitempty"` + // Number of shares either tokenized or owned by a liquid staking provider + LiquidShares string `protobuf:"bytes,15,opt,name=liquid_shares,json=liquidShares,proto3" json:"liquid_shares,omitempty"` } func (x *Validator) Reset() { @@ -13157,6 +14669,7 @@ func (x *Validator) GetCommission() *Commission { return nil } +// Deprecated: Do not use. func (x *Validator) GetMinSelfDelegation() string { if x != nil { return x.MinSelfDelegation @@ -13178,6 +14691,20 @@ func (x *Validator) GetUnbondingIds() []uint64 { return nil } +func (x *Validator) GetValidatorBondShares() string { + if x != nil { + return x.ValidatorBondShares + } + return "" +} + +func (x *Validator) GetLiquidShares() string { + if x != nil { + return x.LiquidShares + } + return "" +} + // ValAddresses defines a repeated set of validator addresses. type ValAddresses struct { state protoimpl.MessageState @@ -13401,6 +14928,8 @@ type Delegation struct { ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` // shares define the delegation shares received. Shares string `protobuf:"bytes,3,opt,name=shares,proto3" json:"shares,omitempty"` + // has this delegation been marked as a validator self bond. + ValidatorBond bool `protobuf:"varint,4,opt,name=validator_bond,json=validatorBond,proto3" json:"validator_bond,omitempty"` } func (x *Delegation) Reset() { @@ -13444,6 +14973,13 @@ func (x *Delegation) GetShares() string { return "" } +func (x *Delegation) GetValidatorBond() bool { + if x != nil { + return x.ValidatorBond + } + return false +} + // UnbondingDelegation stores all of a single delegator's unbonding bonds // for a single validator in an time-ordered list. type UnbondingDelegation struct { @@ -13747,6 +15283,15 @@ type Params struct { BondDenom string `protobuf:"bytes,5,opt,name=bond_denom,json=bondDenom,proto3" json:"bond_denom,omitempty"` // min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators MinCommissionRate string `protobuf:"bytes,6,opt,name=min_commission_rate,json=minCommissionRate,proto3" json:"min_commission_rate,omitempty"` + // validator_bond_factor is required as a safety check for tokenizing shares and + // delegations from liquid staking providers + ValidatorBondFactor string `protobuf:"bytes,7,opt,name=validator_bond_factor,json=validatorBondFactor,proto3" json:"validator_bond_factor,omitempty"` + // global_liquid_staking_cap represents a cap on the portion of stake that + // comes from liquid staking providers + GlobalLiquidStakingCap string `protobuf:"bytes,8,opt,name=global_liquid_staking_cap,json=globalLiquidStakingCap,proto3" json:"global_liquid_staking_cap,omitempty"` + // validator_liquid_staking_cap represents a cap on the portion of stake that + // comes from liquid staking providers for a specific validator + ValidatorLiquidStakingCap string `protobuf:"bytes,9,opt,name=validator_liquid_staking_cap,json=validatorLiquidStakingCap,proto3" json:"validator_liquid_staking_cap,omitempty"` } func (x *Params) Reset() { @@ -13811,6 +15356,27 @@ func (x *Params) GetMinCommissionRate() string { return "" } +func (x *Params) GetValidatorBondFactor() string { + if x != nil { + return x.ValidatorBondFactor + } + return "" +} + +func (x *Params) GetGlobalLiquidStakingCap() string { + if x != nil { + return x.GlobalLiquidStakingCap + } + return "" +} + +func (x *Params) GetValidatorLiquidStakingCap() string { + if x != nil { + return x.ValidatorLiquidStakingCap + } + return "" +} + // DelegationResponse is equivalent to Delegation except that it contains a // balance in addition to shares which is more suitable for client responses. type DelegationResponse struct { @@ -14030,6 +15596,103 @@ func (x *ValidatorUpdates) GetUpdates() []*abci.ValidatorUpdate { return nil } +// TokenizeShareRecord represents a tokenized delegation +type TokenizeShareRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + ModuleAccount string `protobuf:"bytes,3,opt,name=module_account,json=moduleAccount,proto3" json:"module_account,omitempty"` // module account take the role of delegator + Validator string `protobuf:"bytes,4,opt,name=validator,proto3" json:"validator,omitempty"` // validator delegated to for tokenize share record creation +} + +func (x *TokenizeShareRecord) Reset() { + *x = TokenizeShareRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TokenizeShareRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TokenizeShareRecord) ProtoMessage() {} + +// Deprecated: Use TokenizeShareRecord.ProtoReflect.Descriptor instead. +func (*TokenizeShareRecord) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{21} +} + +func (x *TokenizeShareRecord) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *TokenizeShareRecord) GetOwner() string { + if x != nil { + return x.Owner + } + return "" +} + +func (x *TokenizeShareRecord) GetModuleAccount() string { + if x != nil { + return x.ModuleAccount + } + return "" +} + +func (x *TokenizeShareRecord) GetValidator() string { + if x != nil { + return x.Validator + } + return "" +} + +// PendingTokenizeShareAuthorizations stores a list of addresses that have their +// tokenize share enablement in progress +type PendingTokenizeShareAuthorizations struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` +} + +func (x *PendingTokenizeShareAuthorizations) Reset() { + *x = PendingTokenizeShareAuthorizations{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PendingTokenizeShareAuthorizations) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PendingTokenizeShareAuthorizations) ProtoMessage() {} + +// Deprecated: Use PendingTokenizeShareAuthorizations.ProtoReflect.Descriptor instead. +func (*PendingTokenizeShareAuthorizations) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{22} +} + +func (x *PendingTokenizeShareAuthorizations) GetAddresses() []string { + if x != nil { + return x.Addresses + } + return nil +} + var File_cosmos_staking_v1beta1_staking_proto protoreflect.FileDescriptor var file_cosmos_staking_v1beta1_staking_proto_rawDesc = []byte{ @@ -14104,7 +15767,7 @@ var file_cosmos_staking_v1beta1_staking_proto_rawDesc = []byte{ 0x52, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x3a, 0x08, 0x98, 0xa0, 0x1f, - 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xbb, 0x07, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xaf, 0x09, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, @@ -14150,291 +15813,361 @@ var file_cosmos_staking_v1beta1_staking_proto_rawDesc = []byte{ 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6c, 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x66, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6e, 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, - 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, - 0x11, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x1b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, - 0x6f, 0x6e, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x4f, 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0c, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x49, 0x64, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, - 0xa0, 0x1f, 0x00, 0x22, 0x50, 0x0a, 0x0c, 0x56, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, + 0x09, 0x42, 0x3e, 0x18, 0x01, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, + 0x74, 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x1b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x6f, 0x6e, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e, 0x62, 0x6f, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, + 0x69, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0c, 0x75, 0x6e, 0x62, 0x6f, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4e, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, + 0x26, 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, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xf2, 0xde, 0x1f, 0x1c, 0x79, 0x61, 0x6d, 0x6c, 0x3a, + 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x5f, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x6b, 0x0a, 0x0d, + 0x6c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x46, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x44, 0x65, 0x63, 0xf2, 0xde, 0x1f, 0x14, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x6c, 0x69, 0x71, + 0x75, 0x69, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x52, 0x0c, 0x6c, 0x69, 0x71, + 0x75, 0x69, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, + 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x50, 0x0a, 0x0c, 0x56, 0x61, 0x6c, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 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, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x3a, + 0x08, 0x98, 0xa0, 0x1f, 0x00, 0x80, 0xdc, 0x20, 0x01, 0x22, 0xa4, 0x01, 0x0a, 0x06, 0x44, 0x56, + 0x50, 0x61, 0x69, 0x72, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 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, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x3a, 0x08, 0x98, 0xa0, 0x1f, - 0x00, 0x80, 0xdc, 0x20, 0x01, 0x22, 0xa4, 0x01, 0x0a, 0x06, 0x44, 0x56, 0x50, 0x61, 0x69, 0x72, - 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 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, 0x10, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x0c, - 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x4a, 0x0a, 0x07, - 0x44, 0x56, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x44, 0x56, 0x50, 0x61, 0x69, 0x72, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, - 0x01, 0x52, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x22, 0xfd, 0x01, 0x0a, 0x0a, 0x44, 0x56, 0x56, - 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x74, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, - 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x72, 0x63, 0x5f, - 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, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x53, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 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, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x44, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, - 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x58, 0x0a, 0x0b, 0x44, 0x56, 0x56, 0x54, - 0x72, 0x69, 0x70, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x70, 0x6c, - 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x44, 0x56, 0x56, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x74, 0x42, 0x09, 0xc8, - 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x08, 0x74, 0x72, 0x69, 0x70, 0x6c, 0x65, - 0x74, 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 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, 0x10, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x54, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xd2, - 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x06, 0x73, - 0x68, 0x61, 0x72, 0x65, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, - 0xa0, 0x1f, 0x00, 0x22, 0x88, 0x02, 0x0a, 0x13, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x64, + 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, + 0x22, 0x4a, 0x0a, 0x07, 0x44, 0x56, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x70, + 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x44, 0x56, 0x50, 0x61, 0x69, 0x72, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, + 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x22, 0xfd, 0x01, 0x0a, + 0x0a, 0x44, 0x56, 0x56, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x74, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 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, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x55, 0x0a, 0x07, 0x65, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x09, 0xc8, 0xde, - 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xc1, - 0x03, 0x0a, 0x18, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x52, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 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, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, - 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x65, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x61, 0x6c, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, - 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, - 0x0e, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, - 0x56, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, - 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x07, - 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x62, 0x6f, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, - 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x75, 0x6e, - 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x6e, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, - 0x72, 0x65, 0x66, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x17, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x6e, 0x48, 0x6f, 0x6c, 0x64, - 0x52, 0x65, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, - 0x1f, 0x01, 0x22, 0xbf, 0x03, 0x0a, 0x11, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x12, 0x52, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 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, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, - 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x65, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, - 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, - 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, - 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0e, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0a, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x5f, 0x64, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, - 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x09, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x44, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x62, - 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1b, - 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x6e, 0x5f, 0x68, 0x6f, 0x6c, - 0x64, 0x5f, 0x72, 0x65, 0x66, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x17, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x6e, 0x48, 0x6f, - 0x6c, 0x64, 0x52, 0x65, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, - 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xcf, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x73, 0x72, 0x63, 0x5f, 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, 0x13, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x4c, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x73, + 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 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, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x44, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x0c, + 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x58, 0x0a, 0x0b, + 0x44, 0x56, 0x56, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x08, 0x74, + 0x72, 0x69, 0x70, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x56, 0x56, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, + 0x74, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x08, 0x74, 0x72, + 0x69, 0x70, 0x6c, 0x65, 0x74, 0x73, 0x22, 0xa5, 0x02, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x72, 0x63, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 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, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x54, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, + 0x63, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, + 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x88, + 0x02, 0x0a, 0x13, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, + 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 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, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x55, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, + 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, + 0x2a, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, + 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xc1, 0x03, 0x0a, 0x18, 0x55, 0x6e, + 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x52, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x02, 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, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0xa8, 0xe7, + 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x65, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, + 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0e, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x56, 0x0a, 0x07, 0x62, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, + 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, + 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x5f, 0x6f, 0x6e, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e, 0x62, 0x6f, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xbf, 0x03, + 0x0a, 0x11, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x52, 0x0a, 0x0f, + 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x02, 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, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, + 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x65, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, + 0xde, 0x1f, 0x26, 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, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0e, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, + 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x73, 0x5f, 0x64, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, + 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x73, 0x44, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, 0x62, 0x6f, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x6e, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x66, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e, + 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x52, 0x65, 0x66, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, + 0xcf, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x53, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x03, 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, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x73, - 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4e, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x72, 0x63, 0x5f, 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, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x72, 0x63, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, + 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, 0x13, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x4e, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, + 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, + 0x00, 0x22, 0xc5, 0x06, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x4f, 0x0a, 0x0e, + 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x98, 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0d, + 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, + 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x45, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, + 0x63, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x11, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x45, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x6e, + 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6f, 0x6e, 0x64, 0x44, 0x65, + 0x6e, 0x6f, 0x6d, 0x12, 0x7c, 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x4c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, + 0xf2, 0xde, 0x1f, 0x1a, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x22, 0x52, 0x11, + 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, + 0x65, 0x12, 0x82, 0x01, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x62, 0x6f, 0x6e, 0x64, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x4e, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, + 0x63, 0xf2, 0xde, 0x1f, 0x1c, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, + 0x22, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, + 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x8d, 0x01, 0x0a, 0x19, 0x67, 0x6c, 0x6f, 0x62, 0x61, + 0x6c, 0x5f, 0x6c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x5f, 0x63, 0x61, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x52, 0xc8, 0xde, 0x1f, 0x00, + 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xf2, 0xde, 0x1f, 0x20, 0x79, 0x61, + 0x6d, 0x6c, 0x3a, 0x22, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x71, 0x75, 0x69, + 0x64, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x61, 0x70, 0x22, 0x52, 0x16, + 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x53, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x43, 0x61, 0x70, 0x12, 0x96, 0x01, 0x0a, 0x1c, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x6c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x55, 0xc8, + 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xf2, 0xde, 0x1f, + 0x23, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x6c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5f, + 0x63, 0x61, 0x70, 0x22, 0x52, 0x19, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4c, + 0x69, 0x71, 0x75, 0x69, 0x64, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x70, 0x3a, + 0x28, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x1b, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x12, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4d, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, + 0xb0, 0x2a, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x3e, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, + 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x3a, + 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xde, 0x01, 0x0a, 0x19, 0x52, 0x65, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x12, 0x72, 0x65, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x09, + 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x11, 0x72, 0x65, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x56, 0x0a, 0x07, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, + 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, + 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xc9, 0x01, 0x0a, 0x14, 0x52, + 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x56, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, - 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, - 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x97, 0x03, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x4f, 0x0a, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x98, 0xdf, 0x1f, 0x01, 0xa8, 0xe7, - 0xb0, 0x2a, 0x01, 0x52, 0x0d, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, - 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, - 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x68, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, - 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6e, - 0x64, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, - 0x6f, 0x6e, 0x64, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x7c, 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2e, 0x44, 0x65, 0x63, 0xf2, 0xde, 0x1f, 0x1a, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x6d, - 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, - 0x74, 0x65, 0x22, 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x3a, 0x28, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, - 0x8a, 0xe7, 0xb0, 0x2a, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, - 0x78, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x22, 0xad, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x69, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, - 0x22, 0xde, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, - 0x0a, 0x12, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, - 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, - 0x52, 0x11, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x56, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, - 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, - 0x01, 0x22, 0xc9, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0c, 0x72, 0x65, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, - 0x01, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x56, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, - 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x8e, 0x02, - 0x0a, 0x04, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x82, 0x01, 0x0a, 0x11, 0x6e, 0x6f, 0x74, 0x5f, 0x62, - 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x56, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, - 0x6e, 0x74, 0xea, 0xde, 0x1f, 0x11, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x42, - 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x77, 0x0a, 0x0d, 0x62, - 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x52, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, - 0x6e, 0x74, 0xea, 0xde, 0x1f, 0x0d, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, - 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0c, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x73, 0x3a, 0x08, 0xe8, 0xa0, 0x1f, 0x01, 0xf0, 0xa0, 0x1f, 0x01, 0x22, 0x59, - 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x73, 0x12, 0x45, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x74, - 0x2e, 0x61, 0x62, 0x63, 0x69, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, - 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2a, 0xb6, 0x01, 0x0a, 0x0a, 0x42, 0x6f, - 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x17, 0x42, 0x4f, 0x4e, 0x44, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x1a, 0x0f, 0x8a, 0x9d, 0x20, 0x0b, 0x55, 0x6e, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x14, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x01, - 0x1a, 0x0c, 0x8a, 0x9d, 0x20, 0x08, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x28, - 0x0a, 0x15, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, - 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x1a, 0x0d, 0x8a, 0x9d, 0x20, 0x09, 0x55, - 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x22, 0x0a, 0x12, 0x42, 0x4f, 0x4e, 0x44, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x03, - 0x1a, 0x0a, 0x8a, 0x9d, 0x20, 0x06, 0x42, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x1a, 0x04, 0x88, 0xa3, - 0x1e, 0x00, 0x2a, 0x5d, 0x0a, 0x0a, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x46, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, - 0x49, 0x4e, 0x46, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, - 0x45, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x4e, 0x46, 0x52, - 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, - 0x02, 0x42, 0xdc, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x42, 0x0c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, - 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, - 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0xc8, 0xde, + 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x8e, 0x02, 0x0a, 0x04, 0x50, 0x6f, 0x6f, 0x6c, 0x12, + 0x82, 0x01, 0x0a, 0x11, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x56, 0xc8, 0xde, 0x1f, + 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xea, 0xde, 0x1f, 0x11, 0x6e, + 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, + 0xb0, 0x2a, 0x01, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x42, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x77, 0x0a, 0x0d, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x52, 0xc8, 0xde, 0x1f, + 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xea, 0xde, 0x1f, 0x0d, 0x62, + 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, + 0x0c, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x3a, 0x08, 0xe8, + 0xa0, 0x1f, 0x01, 0xf0, 0xa0, 0x1f, 0x01, 0x22, 0x59, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x07, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x74, 0x2e, 0x61, 0x62, 0x63, 0x69, 0x2e, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x09, + 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x13, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0x42, 0x0a, 0x22, 0x50, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x2a, + 0xb6, 0x01, 0x0a, 0x0a, 0x42, 0x6f, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, + 0x0a, 0x17, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x1a, 0x0f, 0x8a, 0x9d, 0x20, + 0x0b, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x14, + 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x42, 0x4f, + 0x4e, 0x44, 0x45, 0x44, 0x10, 0x01, 0x1a, 0x0c, 0x8a, 0x9d, 0x20, 0x08, 0x55, 0x6e, 0x62, 0x6f, + 0x6e, 0x64, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x15, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x1a, + 0x0d, 0x8a, 0x9d, 0x20, 0x09, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x22, + 0x0a, 0x12, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, + 0x4e, 0x44, 0x45, 0x44, 0x10, 0x03, 0x1a, 0x0a, 0x8a, 0x9d, 0x20, 0x06, 0x42, 0x6f, 0x6e, 0x64, + 0x65, 0x64, 0x1a, 0x04, 0x88, 0xa3, 0x1e, 0x00, 0x2a, 0x5d, 0x0a, 0x0a, 0x49, 0x6e, 0x66, 0x72, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x46, 0x52, 0x41, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x46, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x01, 0x12, 0x17, + 0x0a, 0x13, 0x49, 0x4e, 0x46, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x4f, 0x57, + 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x02, 0x2a, 0xc9, 0x01, 0x0a, 0x17, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x49, 0x5a, 0x45, 0x5f, + 0x53, 0x48, 0x41, 0x52, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x25, 0x0a, 0x21, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x49, 0x5a, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x52, + 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4c, 0x4f, + 0x43, 0x4b, 0x45, 0x44, 0x10, 0x01, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x49, + 0x5a, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x02, 0x12, + 0x2c, 0x0a, 0x28, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x49, 0x5a, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x52, + 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4c, 0x4f, + 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x1a, 0x04, 0x88, + 0xa3, 0x1e, 0x00, 0x42, 0xdc, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x42, 0x0c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, + 0xaa, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -14449,62 +16182,65 @@ func file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP() []byte { return file_cosmos_staking_v1beta1_staking_proto_rawDescData } -var file_cosmos_staking_v1beta1_staking_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_cosmos_staking_v1beta1_staking_proto_msgTypes = make([]protoimpl.MessageInfo, 21) +var file_cosmos_staking_v1beta1_staking_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_cosmos_staking_v1beta1_staking_proto_msgTypes = make([]protoimpl.MessageInfo, 23) var file_cosmos_staking_v1beta1_staking_proto_goTypes = []interface{}{ - (BondStatus)(0), // 0: cosmos.staking.v1beta1.BondStatus - (Infraction)(0), // 1: cosmos.staking.v1beta1.Infraction - (*HistoricalInfo)(nil), // 2: cosmos.staking.v1beta1.HistoricalInfo - (*CommissionRates)(nil), // 3: cosmos.staking.v1beta1.CommissionRates - (*Commission)(nil), // 4: cosmos.staking.v1beta1.Commission - (*Description)(nil), // 5: cosmos.staking.v1beta1.Description - (*Validator)(nil), // 6: cosmos.staking.v1beta1.Validator - (*ValAddresses)(nil), // 7: cosmos.staking.v1beta1.ValAddresses - (*DVPair)(nil), // 8: cosmos.staking.v1beta1.DVPair - (*DVPairs)(nil), // 9: cosmos.staking.v1beta1.DVPairs - (*DVVTriplet)(nil), // 10: cosmos.staking.v1beta1.DVVTriplet - (*DVVTriplets)(nil), // 11: cosmos.staking.v1beta1.DVVTriplets - (*Delegation)(nil), // 12: cosmos.staking.v1beta1.Delegation - (*UnbondingDelegation)(nil), // 13: cosmos.staking.v1beta1.UnbondingDelegation - (*UnbondingDelegationEntry)(nil), // 14: cosmos.staking.v1beta1.UnbondingDelegationEntry - (*RedelegationEntry)(nil), // 15: cosmos.staking.v1beta1.RedelegationEntry - (*Redelegation)(nil), // 16: cosmos.staking.v1beta1.Redelegation - (*Params)(nil), // 17: cosmos.staking.v1beta1.Params - (*DelegationResponse)(nil), // 18: cosmos.staking.v1beta1.DelegationResponse - (*RedelegationEntryResponse)(nil), // 19: cosmos.staking.v1beta1.RedelegationEntryResponse - (*RedelegationResponse)(nil), // 20: cosmos.staking.v1beta1.RedelegationResponse - (*Pool)(nil), // 21: cosmos.staking.v1beta1.Pool - (*ValidatorUpdates)(nil), // 22: cosmos.staking.v1beta1.ValidatorUpdates - (*types.Header)(nil), // 23: tendermint.types.Header - (*timestamppb.Timestamp)(nil), // 24: google.protobuf.Timestamp - (*anypb.Any)(nil), // 25: google.protobuf.Any - (*durationpb.Duration)(nil), // 26: google.protobuf.Duration - (*v1beta1.Coin)(nil), // 27: cosmos.base.v1beta1.Coin - (*abci.ValidatorUpdate)(nil), // 28: tendermint.abci.ValidatorUpdate + (BondStatus)(0), // 0: cosmos.staking.v1beta1.BondStatus + (Infraction)(0), // 1: cosmos.staking.v1beta1.Infraction + (TokenizeShareLockStatus)(0), // 2: cosmos.staking.v1beta1.TokenizeShareLockStatus + (*HistoricalInfo)(nil), // 3: cosmos.staking.v1beta1.HistoricalInfo + (*CommissionRates)(nil), // 4: cosmos.staking.v1beta1.CommissionRates + (*Commission)(nil), // 5: cosmos.staking.v1beta1.Commission + (*Description)(nil), // 6: cosmos.staking.v1beta1.Description + (*Validator)(nil), // 7: cosmos.staking.v1beta1.Validator + (*ValAddresses)(nil), // 8: cosmos.staking.v1beta1.ValAddresses + (*DVPair)(nil), // 9: cosmos.staking.v1beta1.DVPair + (*DVPairs)(nil), // 10: cosmos.staking.v1beta1.DVPairs + (*DVVTriplet)(nil), // 11: cosmos.staking.v1beta1.DVVTriplet + (*DVVTriplets)(nil), // 12: cosmos.staking.v1beta1.DVVTriplets + (*Delegation)(nil), // 13: cosmos.staking.v1beta1.Delegation + (*UnbondingDelegation)(nil), // 14: cosmos.staking.v1beta1.UnbondingDelegation + (*UnbondingDelegationEntry)(nil), // 15: cosmos.staking.v1beta1.UnbondingDelegationEntry + (*RedelegationEntry)(nil), // 16: cosmos.staking.v1beta1.RedelegationEntry + (*Redelegation)(nil), // 17: cosmos.staking.v1beta1.Redelegation + (*Params)(nil), // 18: cosmos.staking.v1beta1.Params + (*DelegationResponse)(nil), // 19: cosmos.staking.v1beta1.DelegationResponse + (*RedelegationEntryResponse)(nil), // 20: cosmos.staking.v1beta1.RedelegationEntryResponse + (*RedelegationResponse)(nil), // 21: cosmos.staking.v1beta1.RedelegationResponse + (*Pool)(nil), // 22: cosmos.staking.v1beta1.Pool + (*ValidatorUpdates)(nil), // 23: cosmos.staking.v1beta1.ValidatorUpdates + (*TokenizeShareRecord)(nil), // 24: cosmos.staking.v1beta1.TokenizeShareRecord + (*PendingTokenizeShareAuthorizations)(nil), // 25: cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations + (*types.Header)(nil), // 26: tendermint.types.Header + (*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp + (*anypb.Any)(nil), // 28: google.protobuf.Any + (*durationpb.Duration)(nil), // 29: google.protobuf.Duration + (*v1beta1.Coin)(nil), // 30: cosmos.base.v1beta1.Coin + (*abci.ValidatorUpdate)(nil), // 31: tendermint.abci.ValidatorUpdate } var file_cosmos_staking_v1beta1_staking_proto_depIdxs = []int32{ - 23, // 0: cosmos.staking.v1beta1.HistoricalInfo.header:type_name -> tendermint.types.Header - 6, // 1: cosmos.staking.v1beta1.HistoricalInfo.valset:type_name -> cosmos.staking.v1beta1.Validator - 3, // 2: cosmos.staking.v1beta1.Commission.commission_rates:type_name -> cosmos.staking.v1beta1.CommissionRates - 24, // 3: cosmos.staking.v1beta1.Commission.update_time:type_name -> google.protobuf.Timestamp - 25, // 4: cosmos.staking.v1beta1.Validator.consensus_pubkey:type_name -> google.protobuf.Any + 26, // 0: cosmos.staking.v1beta1.HistoricalInfo.header:type_name -> tendermint.types.Header + 7, // 1: cosmos.staking.v1beta1.HistoricalInfo.valset:type_name -> cosmos.staking.v1beta1.Validator + 4, // 2: cosmos.staking.v1beta1.Commission.commission_rates:type_name -> cosmos.staking.v1beta1.CommissionRates + 27, // 3: cosmos.staking.v1beta1.Commission.update_time:type_name -> google.protobuf.Timestamp + 28, // 4: cosmos.staking.v1beta1.Validator.consensus_pubkey:type_name -> google.protobuf.Any 0, // 5: cosmos.staking.v1beta1.Validator.status:type_name -> cosmos.staking.v1beta1.BondStatus - 5, // 6: cosmos.staking.v1beta1.Validator.description:type_name -> cosmos.staking.v1beta1.Description - 24, // 7: cosmos.staking.v1beta1.Validator.unbonding_time:type_name -> google.protobuf.Timestamp - 4, // 8: cosmos.staking.v1beta1.Validator.commission:type_name -> cosmos.staking.v1beta1.Commission - 8, // 9: cosmos.staking.v1beta1.DVPairs.pairs:type_name -> cosmos.staking.v1beta1.DVPair - 10, // 10: cosmos.staking.v1beta1.DVVTriplets.triplets:type_name -> cosmos.staking.v1beta1.DVVTriplet - 14, // 11: cosmos.staking.v1beta1.UnbondingDelegation.entries:type_name -> cosmos.staking.v1beta1.UnbondingDelegationEntry - 24, // 12: cosmos.staking.v1beta1.UnbondingDelegationEntry.completion_time:type_name -> google.protobuf.Timestamp - 24, // 13: cosmos.staking.v1beta1.RedelegationEntry.completion_time:type_name -> google.protobuf.Timestamp - 15, // 14: cosmos.staking.v1beta1.Redelegation.entries:type_name -> cosmos.staking.v1beta1.RedelegationEntry - 26, // 15: cosmos.staking.v1beta1.Params.unbonding_time:type_name -> google.protobuf.Duration - 12, // 16: cosmos.staking.v1beta1.DelegationResponse.delegation:type_name -> cosmos.staking.v1beta1.Delegation - 27, // 17: cosmos.staking.v1beta1.DelegationResponse.balance:type_name -> cosmos.base.v1beta1.Coin - 15, // 18: cosmos.staking.v1beta1.RedelegationEntryResponse.redelegation_entry:type_name -> cosmos.staking.v1beta1.RedelegationEntry - 16, // 19: cosmos.staking.v1beta1.RedelegationResponse.redelegation:type_name -> cosmos.staking.v1beta1.Redelegation - 19, // 20: cosmos.staking.v1beta1.RedelegationResponse.entries:type_name -> cosmos.staking.v1beta1.RedelegationEntryResponse - 28, // 21: cosmos.staking.v1beta1.ValidatorUpdates.updates:type_name -> tendermint.abci.ValidatorUpdate + 6, // 6: cosmos.staking.v1beta1.Validator.description:type_name -> cosmos.staking.v1beta1.Description + 27, // 7: cosmos.staking.v1beta1.Validator.unbonding_time:type_name -> google.protobuf.Timestamp + 5, // 8: cosmos.staking.v1beta1.Validator.commission:type_name -> cosmos.staking.v1beta1.Commission + 9, // 9: cosmos.staking.v1beta1.DVPairs.pairs:type_name -> cosmos.staking.v1beta1.DVPair + 11, // 10: cosmos.staking.v1beta1.DVVTriplets.triplets:type_name -> cosmos.staking.v1beta1.DVVTriplet + 15, // 11: cosmos.staking.v1beta1.UnbondingDelegation.entries:type_name -> cosmos.staking.v1beta1.UnbondingDelegationEntry + 27, // 12: cosmos.staking.v1beta1.UnbondingDelegationEntry.completion_time:type_name -> google.protobuf.Timestamp + 27, // 13: cosmos.staking.v1beta1.RedelegationEntry.completion_time:type_name -> google.protobuf.Timestamp + 16, // 14: cosmos.staking.v1beta1.Redelegation.entries:type_name -> cosmos.staking.v1beta1.RedelegationEntry + 29, // 15: cosmos.staking.v1beta1.Params.unbonding_time:type_name -> google.protobuf.Duration + 13, // 16: cosmos.staking.v1beta1.DelegationResponse.delegation:type_name -> cosmos.staking.v1beta1.Delegation + 30, // 17: cosmos.staking.v1beta1.DelegationResponse.balance:type_name -> cosmos.base.v1beta1.Coin + 16, // 18: cosmos.staking.v1beta1.RedelegationEntryResponse.redelegation_entry:type_name -> cosmos.staking.v1beta1.RedelegationEntry + 17, // 19: cosmos.staking.v1beta1.RedelegationResponse.redelegation:type_name -> cosmos.staking.v1beta1.Redelegation + 20, // 20: cosmos.staking.v1beta1.RedelegationResponse.entries:type_name -> cosmos.staking.v1beta1.RedelegationEntryResponse + 31, // 21: cosmos.staking.v1beta1.ValidatorUpdates.updates:type_name -> tendermint.abci.ValidatorUpdate 22, // [22:22] is the sub-list for method output_type 22, // [22:22] is the sub-list for method input_type 22, // [22:22] is the sub-list for extension type_name @@ -14770,14 +16506,38 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { return nil } } + file_cosmos_staking_v1beta1_staking_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TokenizeShareRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_staking_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PendingTokenizeShareAuthorizations); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_staking_v1beta1_staking_proto_rawDesc, - NumEnums: 2, - NumMessages: 21, + NumEnums: 3, + NumMessages: 23, NumExtensions: 0, NumServices: 0, }, diff --git a/api/cosmos/staking/v1beta1/tx.pulsar.go b/api/cosmos/staking/v1beta1/tx.pulsar.go index 9511e64faea4..cf3ed905763e 100644 --- a/api/cosmos/staking/v1beta1/tx.pulsar.go +++ b/api/cosmos/staking/v1beta1/tx.pulsar.go @@ -7023,658 +7023,7325 @@ func (x *fastReflection_MsgUpdateParamsResponse) ProtoMethods() *protoiface.Meth } } +var ( + md_MsgUnbondValidator protoreflect.MessageDescriptor + fd_MsgUnbondValidator_validator_address protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgUnbondValidator = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgUnbondValidator") + fd_MsgUnbondValidator_validator_address = md_MsgUnbondValidator.Fields().ByName("validator_address") +} + +var _ protoreflect.Message = (*fastReflection_MsgUnbondValidator)(nil) + +type fastReflection_MsgUnbondValidator MsgUnbondValidator + +func (x *MsgUnbondValidator) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUnbondValidator)(x) +} + +func (x *MsgUnbondValidator) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_MsgUnbondValidator_messageType fastReflection_MsgUnbondValidator_messageType +var _ protoreflect.MessageType = fastReflection_MsgUnbondValidator_messageType{} + +type fastReflection_MsgUnbondValidator_messageType struct{} + +func (x fastReflection_MsgUnbondValidator_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUnbondValidator)(nil) +} +func (x fastReflection_MsgUnbondValidator_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUnbondValidator) +} +func (x fastReflection_MsgUnbondValidator_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUnbondValidator +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUnbondValidator) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUnbondValidator +} + +// 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_MsgUnbondValidator) Type() protoreflect.MessageType { + return _fastReflection_MsgUnbondValidator_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUnbondValidator) New() protoreflect.Message { + return new(fastReflection_MsgUnbondValidator) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUnbondValidator) Interface() protoreflect.ProtoMessage { + return (*MsgUnbondValidator)(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_MsgUnbondValidator) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ValidatorAddress != "" { + value := protoreflect.ValueOfString(x.ValidatorAddress) + if !f(fd_MsgUnbondValidator_validator_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_MsgUnbondValidator) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgUnbondValidator.validator_address": + return x.ValidatorAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgUnbondValidator")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgUnbondValidator 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_MsgUnbondValidator) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgUnbondValidator.validator_address": + x.ValidatorAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgUnbondValidator")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgUnbondValidator 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_MsgUnbondValidator) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.MsgUnbondValidator.validator_address": + value := x.ValidatorAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgUnbondValidator")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgUnbondValidator 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_MsgUnbondValidator) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgUnbondValidator.validator_address": + x.ValidatorAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgUnbondValidator")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgUnbondValidator 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_MsgUnbondValidator) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgUnbondValidator.validator_address": + panic(fmt.Errorf("field validator_address of message cosmos.staking.v1beta1.MsgUnbondValidator is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgUnbondValidator")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgUnbondValidator 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_MsgUnbondValidator) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgUnbondValidator.validator_address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgUnbondValidator")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgUnbondValidator 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_MsgUnbondValidator) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgUnbondValidator", 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_MsgUnbondValidator) 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_MsgUnbondValidator) 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_MsgUnbondValidator) 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_MsgUnbondValidator) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUnbondValidator) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.ValidatorAddress) + 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().(*MsgUnbondValidator) + 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.ValidatorAddress) > 0 { + i -= len(x.ValidatorAddress) + copy(dAtA[i:], x.ValidatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ValidatorAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUnbondValidator) + 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: MsgUnbondValidator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUnbondValidator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", 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.ValidatorAddress = 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_MsgUnbondValidatorResponse protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgUnbondValidatorResponse = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgUnbondValidatorResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUnbondValidatorResponse)(nil) + +type fastReflection_MsgUnbondValidatorResponse MsgUnbondValidatorResponse + +func (x *MsgUnbondValidatorResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUnbondValidatorResponse)(x) +} + +func (x *MsgUnbondValidatorResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_MsgUnbondValidatorResponse_messageType fastReflection_MsgUnbondValidatorResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUnbondValidatorResponse_messageType{} + +type fastReflection_MsgUnbondValidatorResponse_messageType struct{} + +func (x fastReflection_MsgUnbondValidatorResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUnbondValidatorResponse)(nil) +} +func (x fastReflection_MsgUnbondValidatorResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUnbondValidatorResponse) +} +func (x fastReflection_MsgUnbondValidatorResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUnbondValidatorResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUnbondValidatorResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUnbondValidatorResponse +} + +// 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_MsgUnbondValidatorResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUnbondValidatorResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUnbondValidatorResponse) New() protoreflect.Message { + return new(fastReflection_MsgUnbondValidatorResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUnbondValidatorResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUnbondValidatorResponse)(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_MsgUnbondValidatorResponse) 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_MsgUnbondValidatorResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgUnbondValidatorResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgUnbondValidatorResponse 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_MsgUnbondValidatorResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgUnbondValidatorResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgUnbondValidatorResponse 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_MsgUnbondValidatorResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgUnbondValidatorResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgUnbondValidatorResponse 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_MsgUnbondValidatorResponse) 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.staking.v1beta1.MsgUnbondValidatorResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgUnbondValidatorResponse 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_MsgUnbondValidatorResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgUnbondValidatorResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgUnbondValidatorResponse 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_MsgUnbondValidatorResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgUnbondValidatorResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgUnbondValidatorResponse 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_MsgUnbondValidatorResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgUnbondValidatorResponse", 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_MsgUnbondValidatorResponse) 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_MsgUnbondValidatorResponse) 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_MsgUnbondValidatorResponse) 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_MsgUnbondValidatorResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUnbondValidatorResponse) + 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().(*MsgUnbondValidatorResponse) + 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().(*MsgUnbondValidatorResponse) + 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: MsgUnbondValidatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUnbondValidatorResponse: 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_MsgTokenizeShares protoreflect.MessageDescriptor + fd_MsgTokenizeShares_delegator_address protoreflect.FieldDescriptor + fd_MsgTokenizeShares_validator_address protoreflect.FieldDescriptor + fd_MsgTokenizeShares_amount protoreflect.FieldDescriptor + fd_MsgTokenizeShares_tokenized_share_owner protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgTokenizeShares = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgTokenizeShares") + fd_MsgTokenizeShares_delegator_address = md_MsgTokenizeShares.Fields().ByName("delegator_address") + fd_MsgTokenizeShares_validator_address = md_MsgTokenizeShares.Fields().ByName("validator_address") + fd_MsgTokenizeShares_amount = md_MsgTokenizeShares.Fields().ByName("amount") + fd_MsgTokenizeShares_tokenized_share_owner = md_MsgTokenizeShares.Fields().ByName("tokenized_share_owner") +} + +var _ protoreflect.Message = (*fastReflection_MsgTokenizeShares)(nil) + +type fastReflection_MsgTokenizeShares MsgTokenizeShares + +func (x *MsgTokenizeShares) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgTokenizeShares)(x) +} + +func (x *MsgTokenizeShares) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[16] + 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_MsgTokenizeShares_messageType fastReflection_MsgTokenizeShares_messageType +var _ protoreflect.MessageType = fastReflection_MsgTokenizeShares_messageType{} + +type fastReflection_MsgTokenizeShares_messageType struct{} + +func (x fastReflection_MsgTokenizeShares_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgTokenizeShares)(nil) +} +func (x fastReflection_MsgTokenizeShares_messageType) New() protoreflect.Message { + return new(fastReflection_MsgTokenizeShares) +} +func (x fastReflection_MsgTokenizeShares_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgTokenizeShares +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgTokenizeShares) Descriptor() protoreflect.MessageDescriptor { + return md_MsgTokenizeShares +} + +// 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_MsgTokenizeShares) Type() protoreflect.MessageType { + return _fastReflection_MsgTokenizeShares_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgTokenizeShares) New() protoreflect.Message { + return new(fastReflection_MsgTokenizeShares) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgTokenizeShares) Interface() protoreflect.ProtoMessage { + return (*MsgTokenizeShares)(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_MsgTokenizeShares) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.DelegatorAddress != "" { + value := protoreflect.ValueOfString(x.DelegatorAddress) + if !f(fd_MsgTokenizeShares_delegator_address, value) { + return + } + } + if x.ValidatorAddress != "" { + value := protoreflect.ValueOfString(x.ValidatorAddress) + if !f(fd_MsgTokenizeShares_validator_address, value) { + return + } + } + if x.Amount != nil { + value := protoreflect.ValueOfMessage(x.Amount.ProtoReflect()) + if !f(fd_MsgTokenizeShares_amount, value) { + return + } + } + if x.TokenizedShareOwner != "" { + value := protoreflect.ValueOfString(x.TokenizedShareOwner) + if !f(fd_MsgTokenizeShares_tokenized_share_owner, 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_MsgTokenizeShares) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTokenizeShares.delegator_address": + return x.DelegatorAddress != "" + case "cosmos.staking.v1beta1.MsgTokenizeShares.validator_address": + return x.ValidatorAddress != "" + case "cosmos.staking.v1beta1.MsgTokenizeShares.amount": + return x.Amount != nil + case "cosmos.staking.v1beta1.MsgTokenizeShares.tokenized_share_owner": + return x.TokenizedShareOwner != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTokenizeShares 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_MsgTokenizeShares) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTokenizeShares.delegator_address": + x.DelegatorAddress = "" + case "cosmos.staking.v1beta1.MsgTokenizeShares.validator_address": + x.ValidatorAddress = "" + case "cosmos.staking.v1beta1.MsgTokenizeShares.amount": + x.Amount = nil + case "cosmos.staking.v1beta1.MsgTokenizeShares.tokenized_share_owner": + x.TokenizedShareOwner = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTokenizeShares 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_MsgTokenizeShares) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.MsgTokenizeShares.delegator_address": + value := x.DelegatorAddress + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.MsgTokenizeShares.validator_address": + value := x.ValidatorAddress + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.MsgTokenizeShares.amount": + value := x.Amount + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "cosmos.staking.v1beta1.MsgTokenizeShares.tokenized_share_owner": + value := x.TokenizedShareOwner + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTokenizeShares 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_MsgTokenizeShares) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTokenizeShares.delegator_address": + x.DelegatorAddress = value.Interface().(string) + case "cosmos.staking.v1beta1.MsgTokenizeShares.validator_address": + x.ValidatorAddress = value.Interface().(string) + case "cosmos.staking.v1beta1.MsgTokenizeShares.amount": + x.Amount = value.Message().Interface().(*v1beta1.Coin) + case "cosmos.staking.v1beta1.MsgTokenizeShares.tokenized_share_owner": + x.TokenizedShareOwner = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTokenizeShares 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_MsgTokenizeShares) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTokenizeShares.amount": + if x.Amount == nil { + x.Amount = new(v1beta1.Coin) + } + return protoreflect.ValueOfMessage(x.Amount.ProtoReflect()) + case "cosmos.staking.v1beta1.MsgTokenizeShares.delegator_address": + panic(fmt.Errorf("field delegator_address of message cosmos.staking.v1beta1.MsgTokenizeShares is not mutable")) + case "cosmos.staking.v1beta1.MsgTokenizeShares.validator_address": + panic(fmt.Errorf("field validator_address of message cosmos.staking.v1beta1.MsgTokenizeShares is not mutable")) + case "cosmos.staking.v1beta1.MsgTokenizeShares.tokenized_share_owner": + panic(fmt.Errorf("field tokenized_share_owner of message cosmos.staking.v1beta1.MsgTokenizeShares is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTokenizeShares 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_MsgTokenizeShares) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTokenizeShares.delegator_address": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.MsgTokenizeShares.validator_address": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.MsgTokenizeShares.amount": + m := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "cosmos.staking.v1beta1.MsgTokenizeShares.tokenized_share_owner": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTokenizeShares 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_MsgTokenizeShares) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgTokenizeShares", 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_MsgTokenizeShares) 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_MsgTokenizeShares) 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_MsgTokenizeShares) 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_MsgTokenizeShares) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgTokenizeShares) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.DelegatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ValidatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Amount != nil { + l = options.Size(x.Amount) + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.TokenizedShareOwner) + 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().(*MsgTokenizeShares) + 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.TokenizedShareOwner) > 0 { + i -= len(x.TokenizedShareOwner) + copy(dAtA[i:], x.TokenizedShareOwner) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.TokenizedShareOwner))) + i-- + dAtA[i] = 0x22 + } + if x.Amount != nil { + encoded, err := options.Marshal(x.Amount) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.ValidatorAddress) > 0 { + i -= len(x.ValidatorAddress) + copy(dAtA[i:], x.ValidatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(x.DelegatorAddress) > 0 { + i -= len(x.DelegatorAddress) + copy(dAtA[i:], x.DelegatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgTokenizeShares) + 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: MsgTokenizeShares: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgTokenizeShares: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", 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.DelegatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", 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.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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 + } + if x.Amount == nil { + x.Amount = &v1beta1.Coin{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Amount); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TokenizedShareOwner", 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.TokenizedShareOwner = 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_MsgTokenizeSharesResponse protoreflect.MessageDescriptor + fd_MsgTokenizeSharesResponse_amount protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgTokenizeSharesResponse = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgTokenizeSharesResponse") + fd_MsgTokenizeSharesResponse_amount = md_MsgTokenizeSharesResponse.Fields().ByName("amount") +} + +var _ protoreflect.Message = (*fastReflection_MsgTokenizeSharesResponse)(nil) + +type fastReflection_MsgTokenizeSharesResponse MsgTokenizeSharesResponse + +func (x *MsgTokenizeSharesResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgTokenizeSharesResponse)(x) +} + +func (x *MsgTokenizeSharesResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[17] + 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_MsgTokenizeSharesResponse_messageType fastReflection_MsgTokenizeSharesResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgTokenizeSharesResponse_messageType{} + +type fastReflection_MsgTokenizeSharesResponse_messageType struct{} + +func (x fastReflection_MsgTokenizeSharesResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgTokenizeSharesResponse)(nil) +} +func (x fastReflection_MsgTokenizeSharesResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgTokenizeSharesResponse) +} +func (x fastReflection_MsgTokenizeSharesResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgTokenizeSharesResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgTokenizeSharesResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgTokenizeSharesResponse +} + +// 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_MsgTokenizeSharesResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgTokenizeSharesResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgTokenizeSharesResponse) New() protoreflect.Message { + return new(fastReflection_MsgTokenizeSharesResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgTokenizeSharesResponse) Interface() protoreflect.ProtoMessage { + return (*MsgTokenizeSharesResponse)(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_MsgTokenizeSharesResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Amount != nil { + value := protoreflect.ValueOfMessage(x.Amount.ProtoReflect()) + if !f(fd_MsgTokenizeSharesResponse_amount, 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_MsgTokenizeSharesResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTokenizeSharesResponse.amount": + return x.Amount != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTokenizeSharesResponse 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_MsgTokenizeSharesResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTokenizeSharesResponse.amount": + x.Amount = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTokenizeSharesResponse 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_MsgTokenizeSharesResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.MsgTokenizeSharesResponse.amount": + value := x.Amount + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTokenizeSharesResponse 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_MsgTokenizeSharesResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTokenizeSharesResponse.amount": + x.Amount = value.Message().Interface().(*v1beta1.Coin) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTokenizeSharesResponse 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_MsgTokenizeSharesResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTokenizeSharesResponse.amount": + if x.Amount == nil { + x.Amount = new(v1beta1.Coin) + } + return protoreflect.ValueOfMessage(x.Amount.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTokenizeSharesResponse 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_MsgTokenizeSharesResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTokenizeSharesResponse.amount": + m := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTokenizeSharesResponse 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_MsgTokenizeSharesResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgTokenizeSharesResponse", 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_MsgTokenizeSharesResponse) 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_MsgTokenizeSharesResponse) 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_MsgTokenizeSharesResponse) 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_MsgTokenizeSharesResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgTokenizeSharesResponse) + 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.Amount != nil { + l = options.Size(x.Amount) + 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().(*MsgTokenizeSharesResponse) + 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.Amount != nil { + encoded, err := options.Marshal(x.Amount) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgTokenizeSharesResponse) + 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: MsgTokenizeSharesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgTokenizeSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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 + } + if x.Amount == nil { + x.Amount = &v1beta1.Coin{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Amount); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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_MsgRedeemTokensForShares protoreflect.MessageDescriptor + fd_MsgRedeemTokensForShares_delegator_address protoreflect.FieldDescriptor + fd_MsgRedeemTokensForShares_amount protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgRedeemTokensForShares = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgRedeemTokensForShares") + fd_MsgRedeemTokensForShares_delegator_address = md_MsgRedeemTokensForShares.Fields().ByName("delegator_address") + fd_MsgRedeemTokensForShares_amount = md_MsgRedeemTokensForShares.Fields().ByName("amount") +} + +var _ protoreflect.Message = (*fastReflection_MsgRedeemTokensForShares)(nil) + +type fastReflection_MsgRedeemTokensForShares MsgRedeemTokensForShares + +func (x *MsgRedeemTokensForShares) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgRedeemTokensForShares)(x) +} + +func (x *MsgRedeemTokensForShares) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_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_MsgRedeemTokensForShares_messageType fastReflection_MsgRedeemTokensForShares_messageType +var _ protoreflect.MessageType = fastReflection_MsgRedeemTokensForShares_messageType{} + +type fastReflection_MsgRedeemTokensForShares_messageType struct{} + +func (x fastReflection_MsgRedeemTokensForShares_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgRedeemTokensForShares)(nil) +} +func (x fastReflection_MsgRedeemTokensForShares_messageType) New() protoreflect.Message { + return new(fastReflection_MsgRedeemTokensForShares) +} +func (x fastReflection_MsgRedeemTokensForShares_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRedeemTokensForShares +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgRedeemTokensForShares) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRedeemTokensForShares +} + +// 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_MsgRedeemTokensForShares) Type() protoreflect.MessageType { + return _fastReflection_MsgRedeemTokensForShares_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgRedeemTokensForShares) New() protoreflect.Message { + return new(fastReflection_MsgRedeemTokensForShares) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgRedeemTokensForShares) Interface() protoreflect.ProtoMessage { + return (*MsgRedeemTokensForShares)(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_MsgRedeemTokensForShares) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.DelegatorAddress != "" { + value := protoreflect.ValueOfString(x.DelegatorAddress) + if !f(fd_MsgRedeemTokensForShares_delegator_address, value) { + return + } + } + if x.Amount != nil { + value := protoreflect.ValueOfMessage(x.Amount.ProtoReflect()) + if !f(fd_MsgRedeemTokensForShares_amount, 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_MsgRedeemTokensForShares) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRedeemTokensForShares.delegator_address": + return x.DelegatorAddress != "" + case "cosmos.staking.v1beta1.MsgRedeemTokensForShares.amount": + return x.Amount != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRedeemTokensForShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRedeemTokensForShares 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_MsgRedeemTokensForShares) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRedeemTokensForShares.delegator_address": + x.DelegatorAddress = "" + case "cosmos.staking.v1beta1.MsgRedeemTokensForShares.amount": + x.Amount = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRedeemTokensForShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRedeemTokensForShares 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_MsgRedeemTokensForShares) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.MsgRedeemTokensForShares.delegator_address": + value := x.DelegatorAddress + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.MsgRedeemTokensForShares.amount": + value := x.Amount + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRedeemTokensForShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRedeemTokensForShares 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_MsgRedeemTokensForShares) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRedeemTokensForShares.delegator_address": + x.DelegatorAddress = value.Interface().(string) + case "cosmos.staking.v1beta1.MsgRedeemTokensForShares.amount": + x.Amount = value.Message().Interface().(*v1beta1.Coin) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRedeemTokensForShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRedeemTokensForShares 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_MsgRedeemTokensForShares) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRedeemTokensForShares.amount": + if x.Amount == nil { + x.Amount = new(v1beta1.Coin) + } + return protoreflect.ValueOfMessage(x.Amount.ProtoReflect()) + case "cosmos.staking.v1beta1.MsgRedeemTokensForShares.delegator_address": + panic(fmt.Errorf("field delegator_address of message cosmos.staking.v1beta1.MsgRedeemTokensForShares is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRedeemTokensForShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRedeemTokensForShares 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_MsgRedeemTokensForShares) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRedeemTokensForShares.delegator_address": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.MsgRedeemTokensForShares.amount": + m := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRedeemTokensForShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRedeemTokensForShares 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_MsgRedeemTokensForShares) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgRedeemTokensForShares", 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_MsgRedeemTokensForShares) 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_MsgRedeemTokensForShares) 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_MsgRedeemTokensForShares) 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_MsgRedeemTokensForShares) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgRedeemTokensForShares) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.DelegatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Amount != nil { + l = options.Size(x.Amount) + 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().(*MsgRedeemTokensForShares) + 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.Amount != nil { + encoded, err := options.Marshal(x.Amount) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.DelegatorAddress) > 0 { + i -= len(x.DelegatorAddress) + copy(dAtA[i:], x.DelegatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgRedeemTokensForShares) + 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: MsgRedeemTokensForShares: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRedeemTokensForShares: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", 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.DelegatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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 + } + if x.Amount == nil { + x.Amount = &v1beta1.Coin{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Amount); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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_MsgRedeemTokensForSharesResponse protoreflect.MessageDescriptor + fd_MsgRedeemTokensForSharesResponse_amount protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgRedeemTokensForSharesResponse = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgRedeemTokensForSharesResponse") + fd_MsgRedeemTokensForSharesResponse_amount = md_MsgRedeemTokensForSharesResponse.Fields().ByName("amount") +} + +var _ protoreflect.Message = (*fastReflection_MsgRedeemTokensForSharesResponse)(nil) + +type fastReflection_MsgRedeemTokensForSharesResponse MsgRedeemTokensForSharesResponse + +func (x *MsgRedeemTokensForSharesResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgRedeemTokensForSharesResponse)(x) +} + +func (x *MsgRedeemTokensForSharesResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_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_MsgRedeemTokensForSharesResponse_messageType fastReflection_MsgRedeemTokensForSharesResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgRedeemTokensForSharesResponse_messageType{} + +type fastReflection_MsgRedeemTokensForSharesResponse_messageType struct{} + +func (x fastReflection_MsgRedeemTokensForSharesResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgRedeemTokensForSharesResponse)(nil) +} +func (x fastReflection_MsgRedeemTokensForSharesResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgRedeemTokensForSharesResponse) +} +func (x fastReflection_MsgRedeemTokensForSharesResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRedeemTokensForSharesResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgRedeemTokensForSharesResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRedeemTokensForSharesResponse +} + +// 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_MsgRedeemTokensForSharesResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgRedeemTokensForSharesResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgRedeemTokensForSharesResponse) New() protoreflect.Message { + return new(fastReflection_MsgRedeemTokensForSharesResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgRedeemTokensForSharesResponse) Interface() protoreflect.ProtoMessage { + return (*MsgRedeemTokensForSharesResponse)(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_MsgRedeemTokensForSharesResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Amount != nil { + value := protoreflect.ValueOfMessage(x.Amount.ProtoReflect()) + if !f(fd_MsgRedeemTokensForSharesResponse_amount, 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_MsgRedeemTokensForSharesResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse.amount": + return x.Amount != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse 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_MsgRedeemTokensForSharesResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse.amount": + x.Amount = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse 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_MsgRedeemTokensForSharesResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse.amount": + value := x.Amount + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse 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_MsgRedeemTokensForSharesResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse.amount": + x.Amount = value.Message().Interface().(*v1beta1.Coin) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse 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_MsgRedeemTokensForSharesResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse.amount": + if x.Amount == nil { + x.Amount = new(v1beta1.Coin) + } + return protoreflect.ValueOfMessage(x.Amount.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse 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_MsgRedeemTokensForSharesResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse.amount": + m := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse 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_MsgRedeemTokensForSharesResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse", 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_MsgRedeemTokensForSharesResponse) 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_MsgRedeemTokensForSharesResponse) 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_MsgRedeemTokensForSharesResponse) 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_MsgRedeemTokensForSharesResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgRedeemTokensForSharesResponse) + 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.Amount != nil { + l = options.Size(x.Amount) + 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().(*MsgRedeemTokensForSharesResponse) + 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.Amount != nil { + encoded, err := options.Marshal(x.Amount) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgRedeemTokensForSharesResponse) + 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: MsgRedeemTokensForSharesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRedeemTokensForSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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 + } + if x.Amount == nil { + x.Amount = &v1beta1.Coin{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Amount); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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_MsgTransferTokenizeShareRecord protoreflect.MessageDescriptor + fd_MsgTransferTokenizeShareRecord_tokenize_share_record_id protoreflect.FieldDescriptor + fd_MsgTransferTokenizeShareRecord_sender protoreflect.FieldDescriptor + fd_MsgTransferTokenizeShareRecord_new_owner protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgTransferTokenizeShareRecord = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgTransferTokenizeShareRecord") + fd_MsgTransferTokenizeShareRecord_tokenize_share_record_id = md_MsgTransferTokenizeShareRecord.Fields().ByName("tokenize_share_record_id") + fd_MsgTransferTokenizeShareRecord_sender = md_MsgTransferTokenizeShareRecord.Fields().ByName("sender") + fd_MsgTransferTokenizeShareRecord_new_owner = md_MsgTransferTokenizeShareRecord.Fields().ByName("new_owner") +} + +var _ protoreflect.Message = (*fastReflection_MsgTransferTokenizeShareRecord)(nil) + +type fastReflection_MsgTransferTokenizeShareRecord MsgTransferTokenizeShareRecord + +func (x *MsgTransferTokenizeShareRecord) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgTransferTokenizeShareRecord)(x) +} + +func (x *MsgTransferTokenizeShareRecord) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[20] + 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_MsgTransferTokenizeShareRecord_messageType fastReflection_MsgTransferTokenizeShareRecord_messageType +var _ protoreflect.MessageType = fastReflection_MsgTransferTokenizeShareRecord_messageType{} + +type fastReflection_MsgTransferTokenizeShareRecord_messageType struct{} + +func (x fastReflection_MsgTransferTokenizeShareRecord_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgTransferTokenizeShareRecord)(nil) +} +func (x fastReflection_MsgTransferTokenizeShareRecord_messageType) New() protoreflect.Message { + return new(fastReflection_MsgTransferTokenizeShareRecord) +} +func (x fastReflection_MsgTransferTokenizeShareRecord_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgTransferTokenizeShareRecord +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgTransferTokenizeShareRecord) Descriptor() protoreflect.MessageDescriptor { + return md_MsgTransferTokenizeShareRecord +} + +// 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_MsgTransferTokenizeShareRecord) Type() protoreflect.MessageType { + return _fastReflection_MsgTransferTokenizeShareRecord_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgTransferTokenizeShareRecord) New() protoreflect.Message { + return new(fastReflection_MsgTransferTokenizeShareRecord) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgTransferTokenizeShareRecord) Interface() protoreflect.ProtoMessage { + return (*MsgTransferTokenizeShareRecord)(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_MsgTransferTokenizeShareRecord) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.TokenizeShareRecordId != uint64(0) { + value := protoreflect.ValueOfUint64(x.TokenizeShareRecordId) + if !f(fd_MsgTransferTokenizeShareRecord_tokenize_share_record_id, value) { + return + } + } + if x.Sender != "" { + value := protoreflect.ValueOfString(x.Sender) + if !f(fd_MsgTransferTokenizeShareRecord_sender, value) { + return + } + } + if x.NewOwner != "" { + value := protoreflect.ValueOfString(x.NewOwner) + if !f(fd_MsgTransferTokenizeShareRecord_new_owner, 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_MsgTransferTokenizeShareRecord) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.tokenize_share_record_id": + return x.TokenizeShareRecordId != uint64(0) + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.sender": + return x.Sender != "" + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.new_owner": + return x.NewOwner != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord 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_MsgTransferTokenizeShareRecord) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.tokenize_share_record_id": + x.TokenizeShareRecordId = uint64(0) + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.sender": + x.Sender = "" + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.new_owner": + x.NewOwner = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord 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_MsgTransferTokenizeShareRecord) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.tokenize_share_record_id": + value := x.TokenizeShareRecordId + return protoreflect.ValueOfUint64(value) + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.sender": + value := x.Sender + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.new_owner": + value := x.NewOwner + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord 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_MsgTransferTokenizeShareRecord) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.tokenize_share_record_id": + x.TokenizeShareRecordId = value.Uint() + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.sender": + x.Sender = value.Interface().(string) + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.new_owner": + x.NewOwner = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord 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_MsgTransferTokenizeShareRecord) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.tokenize_share_record_id": + panic(fmt.Errorf("field tokenize_share_record_id of message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord is not mutable")) + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.sender": + panic(fmt.Errorf("field sender of message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord is not mutable")) + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.new_owner": + panic(fmt.Errorf("field new_owner of message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord 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_MsgTransferTokenizeShareRecord) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.tokenize_share_record_id": + return protoreflect.ValueOfUint64(uint64(0)) + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.sender": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord.new_owner": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord 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_MsgTransferTokenizeShareRecord) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord", 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_MsgTransferTokenizeShareRecord) 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_MsgTransferTokenizeShareRecord) 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_MsgTransferTokenizeShareRecord) 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_MsgTransferTokenizeShareRecord) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgTransferTokenizeShareRecord) + 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.TokenizeShareRecordId != 0 { + n += 1 + runtime.Sov(uint64(x.TokenizeShareRecordId)) + } + l = len(x.Sender) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.NewOwner) + 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().(*MsgTransferTokenizeShareRecord) + 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.NewOwner) > 0 { + i -= len(x.NewOwner) + copy(dAtA[i:], x.NewOwner) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NewOwner))) + i-- + dAtA[i] = 0x1a + } + if len(x.Sender) > 0 { + i -= len(x.Sender) + copy(dAtA[i:], x.Sender) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Sender))) + i-- + dAtA[i] = 0x12 + } + if x.TokenizeShareRecordId != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.TokenizeShareRecordId)) + 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().(*MsgTransferTokenizeShareRecord) + 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: MsgTransferTokenizeShareRecord: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgTransferTokenizeShareRecord: 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 TokenizeShareRecordId", wireType) + } + x.TokenizeShareRecordId = 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.TokenizeShareRecordId |= 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 Sender", 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.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NewOwner", 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.NewOwner = 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_MsgTransferTokenizeShareRecordResponse protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgTransferTokenizeShareRecordResponse = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgTransferTokenizeShareRecordResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgTransferTokenizeShareRecordResponse)(nil) + +type fastReflection_MsgTransferTokenizeShareRecordResponse MsgTransferTokenizeShareRecordResponse + +func (x *MsgTransferTokenizeShareRecordResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgTransferTokenizeShareRecordResponse)(x) +} + +func (x *MsgTransferTokenizeShareRecordResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[21] + 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_MsgTransferTokenizeShareRecordResponse_messageType fastReflection_MsgTransferTokenizeShareRecordResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgTransferTokenizeShareRecordResponse_messageType{} + +type fastReflection_MsgTransferTokenizeShareRecordResponse_messageType struct{} + +func (x fastReflection_MsgTransferTokenizeShareRecordResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgTransferTokenizeShareRecordResponse)(nil) +} +func (x fastReflection_MsgTransferTokenizeShareRecordResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgTransferTokenizeShareRecordResponse) +} +func (x fastReflection_MsgTransferTokenizeShareRecordResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgTransferTokenizeShareRecordResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgTransferTokenizeShareRecordResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgTransferTokenizeShareRecordResponse +} + +// 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_MsgTransferTokenizeShareRecordResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgTransferTokenizeShareRecordResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgTransferTokenizeShareRecordResponse) New() protoreflect.Message { + return new(fastReflection_MsgTransferTokenizeShareRecordResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgTransferTokenizeShareRecordResponse) Interface() protoreflect.ProtoMessage { + return (*MsgTransferTokenizeShareRecordResponse)(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_MsgTransferTokenizeShareRecordResponse) 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_MsgTransferTokenizeShareRecordResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse 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_MsgTransferTokenizeShareRecordResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse 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_MsgTransferTokenizeShareRecordResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse 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_MsgTransferTokenizeShareRecordResponse) 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.staking.v1beta1.MsgTransferTokenizeShareRecordResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse 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_MsgTransferTokenizeShareRecordResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse 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_MsgTransferTokenizeShareRecordResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse 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_MsgTransferTokenizeShareRecordResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse", 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_MsgTransferTokenizeShareRecordResponse) 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_MsgTransferTokenizeShareRecordResponse) 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_MsgTransferTokenizeShareRecordResponse) 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_MsgTransferTokenizeShareRecordResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgTransferTokenizeShareRecordResponse) + 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().(*MsgTransferTokenizeShareRecordResponse) + 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().(*MsgTransferTokenizeShareRecordResponse) + 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: MsgTransferTokenizeShareRecordResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgTransferTokenizeShareRecordResponse: 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_MsgDisableTokenizeShares protoreflect.MessageDescriptor + fd_MsgDisableTokenizeShares_delegator_address protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgDisableTokenizeShares = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgDisableTokenizeShares") + fd_MsgDisableTokenizeShares_delegator_address = md_MsgDisableTokenizeShares.Fields().ByName("delegator_address") +} + +var _ protoreflect.Message = (*fastReflection_MsgDisableTokenizeShares)(nil) + +type fastReflection_MsgDisableTokenizeShares MsgDisableTokenizeShares + +func (x *MsgDisableTokenizeShares) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgDisableTokenizeShares)(x) +} + +func (x *MsgDisableTokenizeShares) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[22] + 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_MsgDisableTokenizeShares_messageType fastReflection_MsgDisableTokenizeShares_messageType +var _ protoreflect.MessageType = fastReflection_MsgDisableTokenizeShares_messageType{} + +type fastReflection_MsgDisableTokenizeShares_messageType struct{} + +func (x fastReflection_MsgDisableTokenizeShares_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgDisableTokenizeShares)(nil) +} +func (x fastReflection_MsgDisableTokenizeShares_messageType) New() protoreflect.Message { + return new(fastReflection_MsgDisableTokenizeShares) +} +func (x fastReflection_MsgDisableTokenizeShares_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgDisableTokenizeShares +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgDisableTokenizeShares) Descriptor() protoreflect.MessageDescriptor { + return md_MsgDisableTokenizeShares +} + +// 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_MsgDisableTokenizeShares) Type() protoreflect.MessageType { + return _fastReflection_MsgDisableTokenizeShares_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgDisableTokenizeShares) New() protoreflect.Message { + return new(fastReflection_MsgDisableTokenizeShares) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgDisableTokenizeShares) Interface() protoreflect.ProtoMessage { + return (*MsgDisableTokenizeShares)(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_MsgDisableTokenizeShares) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.DelegatorAddress != "" { + value := protoreflect.ValueOfString(x.DelegatorAddress) + if !f(fd_MsgDisableTokenizeShares_delegator_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_MsgDisableTokenizeShares) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgDisableTokenizeShares.delegator_address": + return x.DelegatorAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgDisableTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgDisableTokenizeShares 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_MsgDisableTokenizeShares) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgDisableTokenizeShares.delegator_address": + x.DelegatorAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgDisableTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgDisableTokenizeShares 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_MsgDisableTokenizeShares) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.MsgDisableTokenizeShares.delegator_address": + value := x.DelegatorAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgDisableTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgDisableTokenizeShares 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_MsgDisableTokenizeShares) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgDisableTokenizeShares.delegator_address": + x.DelegatorAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgDisableTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgDisableTokenizeShares 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_MsgDisableTokenizeShares) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgDisableTokenizeShares.delegator_address": + panic(fmt.Errorf("field delegator_address of message cosmos.staking.v1beta1.MsgDisableTokenizeShares is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgDisableTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgDisableTokenizeShares 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_MsgDisableTokenizeShares) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgDisableTokenizeShares.delegator_address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgDisableTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgDisableTokenizeShares 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_MsgDisableTokenizeShares) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgDisableTokenizeShares", 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_MsgDisableTokenizeShares) 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_MsgDisableTokenizeShares) 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_MsgDisableTokenizeShares) 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_MsgDisableTokenizeShares) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgDisableTokenizeShares) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.DelegatorAddress) + 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().(*MsgDisableTokenizeShares) + 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.DelegatorAddress) > 0 { + i -= len(x.DelegatorAddress) + copy(dAtA[i:], x.DelegatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgDisableTokenizeShares) + 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: MsgDisableTokenizeShares: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgDisableTokenizeShares: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", 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.DelegatorAddress = 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_MsgDisableTokenizeSharesResponse protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgDisableTokenizeSharesResponse = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgDisableTokenizeSharesResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgDisableTokenizeSharesResponse)(nil) + +type fastReflection_MsgDisableTokenizeSharesResponse MsgDisableTokenizeSharesResponse + +func (x *MsgDisableTokenizeSharesResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgDisableTokenizeSharesResponse)(x) +} + +func (x *MsgDisableTokenizeSharesResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[23] + 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_MsgDisableTokenizeSharesResponse_messageType fastReflection_MsgDisableTokenizeSharesResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgDisableTokenizeSharesResponse_messageType{} + +type fastReflection_MsgDisableTokenizeSharesResponse_messageType struct{} + +func (x fastReflection_MsgDisableTokenizeSharesResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgDisableTokenizeSharesResponse)(nil) +} +func (x fastReflection_MsgDisableTokenizeSharesResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgDisableTokenizeSharesResponse) +} +func (x fastReflection_MsgDisableTokenizeSharesResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgDisableTokenizeSharesResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgDisableTokenizeSharesResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgDisableTokenizeSharesResponse +} + +// 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_MsgDisableTokenizeSharesResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgDisableTokenizeSharesResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgDisableTokenizeSharesResponse) New() protoreflect.Message { + return new(fastReflection_MsgDisableTokenizeSharesResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgDisableTokenizeSharesResponse) Interface() protoreflect.ProtoMessage { + return (*MsgDisableTokenizeSharesResponse)(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_MsgDisableTokenizeSharesResponse) 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_MsgDisableTokenizeSharesResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse 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_MsgDisableTokenizeSharesResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse 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_MsgDisableTokenizeSharesResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse 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_MsgDisableTokenizeSharesResponse) 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.staking.v1beta1.MsgDisableTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse 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_MsgDisableTokenizeSharesResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse 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_MsgDisableTokenizeSharesResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse 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_MsgDisableTokenizeSharesResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse", 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_MsgDisableTokenizeSharesResponse) 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_MsgDisableTokenizeSharesResponse) 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_MsgDisableTokenizeSharesResponse) 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_MsgDisableTokenizeSharesResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgDisableTokenizeSharesResponse) + 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().(*MsgDisableTokenizeSharesResponse) + 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().(*MsgDisableTokenizeSharesResponse) + 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: MsgDisableTokenizeSharesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgDisableTokenizeSharesResponse: 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_MsgEnableTokenizeShares protoreflect.MessageDescriptor + fd_MsgEnableTokenizeShares_delegator_address protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgEnableTokenizeShares = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgEnableTokenizeShares") + fd_MsgEnableTokenizeShares_delegator_address = md_MsgEnableTokenizeShares.Fields().ByName("delegator_address") +} + +var _ protoreflect.Message = (*fastReflection_MsgEnableTokenizeShares)(nil) + +type fastReflection_MsgEnableTokenizeShares MsgEnableTokenizeShares + +func (x *MsgEnableTokenizeShares) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgEnableTokenizeShares)(x) +} + +func (x *MsgEnableTokenizeShares) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[24] + 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_MsgEnableTokenizeShares_messageType fastReflection_MsgEnableTokenizeShares_messageType +var _ protoreflect.MessageType = fastReflection_MsgEnableTokenizeShares_messageType{} + +type fastReflection_MsgEnableTokenizeShares_messageType struct{} + +func (x fastReflection_MsgEnableTokenizeShares_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgEnableTokenizeShares)(nil) +} +func (x fastReflection_MsgEnableTokenizeShares_messageType) New() protoreflect.Message { + return new(fastReflection_MsgEnableTokenizeShares) +} +func (x fastReflection_MsgEnableTokenizeShares_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgEnableTokenizeShares +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgEnableTokenizeShares) Descriptor() protoreflect.MessageDescriptor { + return md_MsgEnableTokenizeShares +} + +// 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_MsgEnableTokenizeShares) Type() protoreflect.MessageType { + return _fastReflection_MsgEnableTokenizeShares_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgEnableTokenizeShares) New() protoreflect.Message { + return new(fastReflection_MsgEnableTokenizeShares) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgEnableTokenizeShares) Interface() protoreflect.ProtoMessage { + return (*MsgEnableTokenizeShares)(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_MsgEnableTokenizeShares) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.DelegatorAddress != "" { + value := protoreflect.ValueOfString(x.DelegatorAddress) + if !f(fd_MsgEnableTokenizeShares_delegator_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_MsgEnableTokenizeShares) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgEnableTokenizeShares.delegator_address": + return x.DelegatorAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgEnableTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgEnableTokenizeShares 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_MsgEnableTokenizeShares) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgEnableTokenizeShares.delegator_address": + x.DelegatorAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgEnableTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgEnableTokenizeShares 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_MsgEnableTokenizeShares) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.MsgEnableTokenizeShares.delegator_address": + value := x.DelegatorAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgEnableTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgEnableTokenizeShares 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_MsgEnableTokenizeShares) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgEnableTokenizeShares.delegator_address": + x.DelegatorAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgEnableTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgEnableTokenizeShares 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_MsgEnableTokenizeShares) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgEnableTokenizeShares.delegator_address": + panic(fmt.Errorf("field delegator_address of message cosmos.staking.v1beta1.MsgEnableTokenizeShares is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgEnableTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgEnableTokenizeShares 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_MsgEnableTokenizeShares) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgEnableTokenizeShares.delegator_address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgEnableTokenizeShares")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgEnableTokenizeShares 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_MsgEnableTokenizeShares) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgEnableTokenizeShares", 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_MsgEnableTokenizeShares) 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_MsgEnableTokenizeShares) 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_MsgEnableTokenizeShares) 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_MsgEnableTokenizeShares) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgEnableTokenizeShares) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.DelegatorAddress) + 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().(*MsgEnableTokenizeShares) + 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.DelegatorAddress) > 0 { + i -= len(x.DelegatorAddress) + copy(dAtA[i:], x.DelegatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgEnableTokenizeShares) + 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: MsgEnableTokenizeShares: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgEnableTokenizeShares: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", 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.DelegatorAddress = 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_MsgEnableTokenizeSharesResponse protoreflect.MessageDescriptor + fd_MsgEnableTokenizeSharesResponse_completion_time protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgEnableTokenizeSharesResponse = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgEnableTokenizeSharesResponse") + fd_MsgEnableTokenizeSharesResponse_completion_time = md_MsgEnableTokenizeSharesResponse.Fields().ByName("completion_time") +} + +var _ protoreflect.Message = (*fastReflection_MsgEnableTokenizeSharesResponse)(nil) + +type fastReflection_MsgEnableTokenizeSharesResponse MsgEnableTokenizeSharesResponse + +func (x *MsgEnableTokenizeSharesResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgEnableTokenizeSharesResponse)(x) +} + +func (x *MsgEnableTokenizeSharesResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[25] + 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_MsgEnableTokenizeSharesResponse_messageType fastReflection_MsgEnableTokenizeSharesResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgEnableTokenizeSharesResponse_messageType{} + +type fastReflection_MsgEnableTokenizeSharesResponse_messageType struct{} + +func (x fastReflection_MsgEnableTokenizeSharesResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgEnableTokenizeSharesResponse)(nil) +} +func (x fastReflection_MsgEnableTokenizeSharesResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgEnableTokenizeSharesResponse) +} +func (x fastReflection_MsgEnableTokenizeSharesResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgEnableTokenizeSharesResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgEnableTokenizeSharesResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgEnableTokenizeSharesResponse +} + +// 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_MsgEnableTokenizeSharesResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgEnableTokenizeSharesResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgEnableTokenizeSharesResponse) New() protoreflect.Message { + return new(fastReflection_MsgEnableTokenizeSharesResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgEnableTokenizeSharesResponse) Interface() protoreflect.ProtoMessage { + return (*MsgEnableTokenizeSharesResponse)(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_MsgEnableTokenizeSharesResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.CompletionTime != nil { + value := protoreflect.ValueOfMessage(x.CompletionTime.ProtoReflect()) + if !f(fd_MsgEnableTokenizeSharesResponse_completion_time, 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_MsgEnableTokenizeSharesResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse.completion_time": + return x.CompletionTime != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse 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_MsgEnableTokenizeSharesResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse.completion_time": + x.CompletionTime = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse 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_MsgEnableTokenizeSharesResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse.completion_time": + value := x.CompletionTime + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse 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_MsgEnableTokenizeSharesResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse.completion_time": + x.CompletionTime = value.Message().Interface().(*timestamppb.Timestamp) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse 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_MsgEnableTokenizeSharesResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse.completion_time": + if x.CompletionTime == nil { + x.CompletionTime = new(timestamppb.Timestamp) + } + return protoreflect.ValueOfMessage(x.CompletionTime.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse 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_MsgEnableTokenizeSharesResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse.completion_time": + m := new(timestamppb.Timestamp) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse 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_MsgEnableTokenizeSharesResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse", 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_MsgEnableTokenizeSharesResponse) 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_MsgEnableTokenizeSharesResponse) 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_MsgEnableTokenizeSharesResponse) 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_MsgEnableTokenizeSharesResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgEnableTokenizeSharesResponse) + 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.CompletionTime != nil { + l = options.Size(x.CompletionTime) + 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().(*MsgEnableTokenizeSharesResponse) + 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.CompletionTime != nil { + encoded, err := options.Marshal(x.CompletionTime) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgEnableTokenizeSharesResponse) + 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: MsgEnableTokenizeSharesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgEnableTokenizeSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType) + } + var msglen int + 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++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + 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 + } + if x.CompletionTime == nil { + x.CompletionTime = ×tamppb.Timestamp{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.CompletionTime); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + 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_MsgValidatorBond protoreflect.MessageDescriptor + fd_MsgValidatorBond_delegator_address protoreflect.FieldDescriptor + fd_MsgValidatorBond_validator_address protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgValidatorBond = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgValidatorBond") + fd_MsgValidatorBond_delegator_address = md_MsgValidatorBond.Fields().ByName("delegator_address") + fd_MsgValidatorBond_validator_address = md_MsgValidatorBond.Fields().ByName("validator_address") +} + +var _ protoreflect.Message = (*fastReflection_MsgValidatorBond)(nil) + +type fastReflection_MsgValidatorBond MsgValidatorBond + +func (x *MsgValidatorBond) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgValidatorBond)(x) +} + +func (x *MsgValidatorBond) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[26] + 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_MsgValidatorBond_messageType fastReflection_MsgValidatorBond_messageType +var _ protoreflect.MessageType = fastReflection_MsgValidatorBond_messageType{} + +type fastReflection_MsgValidatorBond_messageType struct{} + +func (x fastReflection_MsgValidatorBond_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgValidatorBond)(nil) +} +func (x fastReflection_MsgValidatorBond_messageType) New() protoreflect.Message { + return new(fastReflection_MsgValidatorBond) +} +func (x fastReflection_MsgValidatorBond_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgValidatorBond +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgValidatorBond) Descriptor() protoreflect.MessageDescriptor { + return md_MsgValidatorBond +} + +// 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_MsgValidatorBond) Type() protoreflect.MessageType { + return _fastReflection_MsgValidatorBond_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgValidatorBond) New() protoreflect.Message { + return new(fastReflection_MsgValidatorBond) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgValidatorBond) Interface() protoreflect.ProtoMessage { + return (*MsgValidatorBond)(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_MsgValidatorBond) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.DelegatorAddress != "" { + value := protoreflect.ValueOfString(x.DelegatorAddress) + if !f(fd_MsgValidatorBond_delegator_address, value) { + return + } + } + if x.ValidatorAddress != "" { + value := protoreflect.ValueOfString(x.ValidatorAddress) + if !f(fd_MsgValidatorBond_validator_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_MsgValidatorBond) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgValidatorBond.delegator_address": + return x.DelegatorAddress != "" + case "cosmos.staking.v1beta1.MsgValidatorBond.validator_address": + return x.ValidatorAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgValidatorBond")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgValidatorBond 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_MsgValidatorBond) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgValidatorBond.delegator_address": + x.DelegatorAddress = "" + case "cosmos.staking.v1beta1.MsgValidatorBond.validator_address": + x.ValidatorAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgValidatorBond")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgValidatorBond 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_MsgValidatorBond) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.MsgValidatorBond.delegator_address": + value := x.DelegatorAddress + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.MsgValidatorBond.validator_address": + value := x.ValidatorAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgValidatorBond")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgValidatorBond 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_MsgValidatorBond) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgValidatorBond.delegator_address": + x.DelegatorAddress = value.Interface().(string) + case "cosmos.staking.v1beta1.MsgValidatorBond.validator_address": + x.ValidatorAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgValidatorBond")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgValidatorBond 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_MsgValidatorBond) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgValidatorBond.delegator_address": + panic(fmt.Errorf("field delegator_address of message cosmos.staking.v1beta1.MsgValidatorBond is not mutable")) + case "cosmos.staking.v1beta1.MsgValidatorBond.validator_address": + panic(fmt.Errorf("field validator_address of message cosmos.staking.v1beta1.MsgValidatorBond is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgValidatorBond")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgValidatorBond 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_MsgValidatorBond) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgValidatorBond.delegator_address": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.MsgValidatorBond.validator_address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgValidatorBond")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgValidatorBond 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_MsgValidatorBond) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgValidatorBond", 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_MsgValidatorBond) 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_MsgValidatorBond) 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_MsgValidatorBond) 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_MsgValidatorBond) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgValidatorBond) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.DelegatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ValidatorAddress) + 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().(*MsgValidatorBond) + 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.ValidatorAddress) > 0 { + i -= len(x.ValidatorAddress) + copy(dAtA[i:], x.ValidatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(x.DelegatorAddress) > 0 { + i -= len(x.DelegatorAddress) + copy(dAtA[i:], x.DelegatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgValidatorBond) + 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: MsgValidatorBond: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgValidatorBond: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", 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.DelegatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", 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.ValidatorAddress = 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_MsgValidatorBondResponse protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgValidatorBondResponse = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgValidatorBondResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgValidatorBondResponse)(nil) + +type fastReflection_MsgValidatorBondResponse MsgValidatorBondResponse + +func (x *MsgValidatorBondResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgValidatorBondResponse)(x) +} + +func (x *MsgValidatorBondResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[27] + 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_MsgValidatorBondResponse_messageType fastReflection_MsgValidatorBondResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgValidatorBondResponse_messageType{} + +type fastReflection_MsgValidatorBondResponse_messageType struct{} + +func (x fastReflection_MsgValidatorBondResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgValidatorBondResponse)(nil) +} +func (x fastReflection_MsgValidatorBondResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgValidatorBondResponse) +} +func (x fastReflection_MsgValidatorBondResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgValidatorBondResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgValidatorBondResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgValidatorBondResponse +} + +// 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_MsgValidatorBondResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgValidatorBondResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgValidatorBondResponse) New() protoreflect.Message { + return new(fastReflection_MsgValidatorBondResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgValidatorBondResponse) Interface() protoreflect.ProtoMessage { + return (*MsgValidatorBondResponse)(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_MsgValidatorBondResponse) 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_MsgValidatorBondResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgValidatorBondResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgValidatorBondResponse 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_MsgValidatorBondResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgValidatorBondResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgValidatorBondResponse 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_MsgValidatorBondResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgValidatorBondResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgValidatorBondResponse 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_MsgValidatorBondResponse) 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.staking.v1beta1.MsgValidatorBondResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgValidatorBondResponse 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_MsgValidatorBondResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgValidatorBondResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgValidatorBondResponse 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_MsgValidatorBondResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgValidatorBondResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgValidatorBondResponse 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_MsgValidatorBondResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgValidatorBondResponse", 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_MsgValidatorBondResponse) 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_MsgValidatorBondResponse) 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_MsgValidatorBondResponse) 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_MsgValidatorBondResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgValidatorBondResponse) + 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().(*MsgValidatorBondResponse) + 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().(*MsgValidatorBondResponse) + 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: MsgValidatorBondResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgValidatorBondResponse: 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, + } +} + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.0 // protoc (unknown) // source: cosmos/staking/v1beta1/tx.proto -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MsgCreateValidator defines a SDK message for creating a new validator. +type MsgCreateValidator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Description *Description `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + Commission *CommissionRates `protobuf:"bytes,2,opt,name=commission,proto3" json:"commission,omitempty"` + // Deprecated: This field has been deprecated with LSM in favor of the validator bond + // + // Deprecated: Do not use. + MinSelfDelegation string `protobuf:"bytes,3,opt,name=min_self_delegation,json=minSelfDelegation,proto3" json:"min_self_delegation,omitempty"` + DelegatorAddress string `protobuf:"bytes,4,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` + ValidatorAddress string `protobuf:"bytes,5,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + Pubkey *anypb.Any `protobuf:"bytes,6,opt,name=pubkey,proto3" json:"pubkey,omitempty"` + Value *v1beta1.Coin `protobuf:"bytes,7,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *MsgCreateValidator) Reset() { + *x = MsgCreateValidator{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgCreateValidator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgCreateValidator) ProtoMessage() {} + +// Deprecated: Use MsgCreateValidator.ProtoReflect.Descriptor instead. +func (*MsgCreateValidator) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{0} +} + +func (x *MsgCreateValidator) GetDescription() *Description { + if x != nil { + return x.Description + } + return nil +} + +func (x *MsgCreateValidator) GetCommission() *CommissionRates { + if x != nil { + return x.Commission + } + return nil +} + +// Deprecated: Do not use. +func (x *MsgCreateValidator) GetMinSelfDelegation() string { + if x != nil { + return x.MinSelfDelegation + } + return "" +} + +func (x *MsgCreateValidator) GetDelegatorAddress() string { + if x != nil { + return x.DelegatorAddress + } + return "" +} + +func (x *MsgCreateValidator) GetValidatorAddress() string { + if x != nil { + return x.ValidatorAddress + } + return "" +} + +func (x *MsgCreateValidator) GetPubkey() *anypb.Any { + if x != nil { + return x.Pubkey + } + return nil +} + +func (x *MsgCreateValidator) GetValue() *v1beta1.Coin { + if x != nil { + return x.Value + } + return nil +} + +// MsgCreateValidatorResponse defines the Msg/CreateValidator response type. +type MsgCreateValidatorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgCreateValidatorResponse) Reset() { + *x = MsgCreateValidatorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgCreateValidatorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgCreateValidatorResponse) ProtoMessage() {} + +// Deprecated: Use MsgCreateValidatorResponse.ProtoReflect.Descriptor instead. +func (*MsgCreateValidatorResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{1} +} + +// MsgEditValidator defines a SDK message for editing an existing validator. +type MsgEditValidator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Description *Description `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + // We pass a reference to the new commission rate and min self delegation as + // it's not mandatory to update. If not updated, the deserialized rate will be + // zero with no way to distinguish if an update was intended. + // REF: #2373 + CommissionRate string `protobuf:"bytes,3,opt,name=commission_rate,json=commissionRate,proto3" json:"commission_rate,omitempty"` + // Deprecated: This field has been deprecated with LSM in favor of the validator bond + // + // Deprecated: Do not use. + MinSelfDelegation string `protobuf:"bytes,4,opt,name=min_self_delegation,json=minSelfDelegation,proto3" json:"min_self_delegation,omitempty"` +} + +func (x *MsgEditValidator) Reset() { + *x = MsgEditValidator{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgEditValidator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgEditValidator) ProtoMessage() {} + +// Deprecated: Use MsgEditValidator.ProtoReflect.Descriptor instead. +func (*MsgEditValidator) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{2} +} + +func (x *MsgEditValidator) GetDescription() *Description { + if x != nil { + return x.Description + } + return nil +} + +func (x *MsgEditValidator) GetValidatorAddress() string { + if x != nil { + return x.ValidatorAddress + } + return "" +} + +func (x *MsgEditValidator) GetCommissionRate() string { + if x != nil { + return x.CommissionRate + } + return "" +} + +// Deprecated: Do not use. +func (x *MsgEditValidator) GetMinSelfDelegation() string { + if x != nil { + return x.MinSelfDelegation + } + return "" +} + +// MsgEditValidatorResponse defines the Msg/EditValidator response type. +type MsgEditValidatorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgEditValidatorResponse) Reset() { + *x = MsgEditValidatorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgEditValidatorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgEditValidatorResponse) ProtoMessage() {} + +// Deprecated: Use MsgEditValidatorResponse.ProtoReflect.Descriptor instead. +func (*MsgEditValidatorResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{3} +} + +// MsgDelegate defines a SDK message for performing a delegation of coins +// from a delegator to a validator. +type MsgDelegate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + Amount *v1beta1.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount,omitempty"` +} + +func (x *MsgDelegate) Reset() { + *x = MsgDelegate{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgDelegate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgDelegate) ProtoMessage() {} + +// Deprecated: Use MsgDelegate.ProtoReflect.Descriptor instead. +func (*MsgDelegate) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{4} +} + +func (x *MsgDelegate) GetDelegatorAddress() string { + if x != nil { + return x.DelegatorAddress + } + return "" +} + +func (x *MsgDelegate) GetValidatorAddress() string { + if x != nil { + return x.ValidatorAddress + } + return "" +} + +func (x *MsgDelegate) GetAmount() *v1beta1.Coin { + if x != nil { + return x.Amount + } + return nil +} + +// MsgDelegateResponse defines the Msg/Delegate response type. +type MsgDelegateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgDelegateResponse) Reset() { + *x = MsgDelegateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgDelegateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgDelegateResponse) ProtoMessage() {} + +// Deprecated: Use MsgDelegateResponse.ProtoReflect.Descriptor instead. +func (*MsgDelegateResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{5} +} + +// MsgBeginRedelegate defines a SDK message for performing a redelegation +// of coins from a delegator and source validator to a destination validator. +type MsgBeginRedelegate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` + ValidatorSrcAddress string `protobuf:"bytes,2,opt,name=validator_src_address,json=validatorSrcAddress,proto3" json:"validator_src_address,omitempty"` + ValidatorDstAddress string `protobuf:"bytes,3,opt,name=validator_dst_address,json=validatorDstAddress,proto3" json:"validator_dst_address,omitempty"` + Amount *v1beta1.Coin `protobuf:"bytes,4,opt,name=amount,proto3" json:"amount,omitempty"` +} + +func (x *MsgBeginRedelegate) Reset() { + *x = MsgBeginRedelegate{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgBeginRedelegate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgBeginRedelegate) ProtoMessage() {} + +// Deprecated: Use MsgBeginRedelegate.ProtoReflect.Descriptor instead. +func (*MsgBeginRedelegate) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{6} +} + +func (x *MsgBeginRedelegate) GetDelegatorAddress() string { + if x != nil { + return x.DelegatorAddress + } + return "" +} + +func (x *MsgBeginRedelegate) GetValidatorSrcAddress() string { + if x != nil { + return x.ValidatorSrcAddress + } + return "" +} + +func (x *MsgBeginRedelegate) GetValidatorDstAddress() string { + if x != nil { + return x.ValidatorDstAddress + } + return "" +} -// MsgCreateValidator defines a SDK message for creating a new validator. -type MsgCreateValidator struct { +func (x *MsgBeginRedelegate) GetAmount() *v1beta1.Coin { + if x != nil { + return x.Amount + } + return nil +} + +// MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type. +type MsgBeginRedelegateResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Description *Description `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - Commission *CommissionRates `protobuf:"bytes,2,opt,name=commission,proto3" json:"commission,omitempty"` - MinSelfDelegation string `protobuf:"bytes,3,opt,name=min_self_delegation,json=minSelfDelegation,proto3" json:"min_self_delegation,omitempty"` - DelegatorAddress string `protobuf:"bytes,4,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` - ValidatorAddress string `protobuf:"bytes,5,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` - Pubkey *anypb.Any `protobuf:"bytes,6,opt,name=pubkey,proto3" json:"pubkey,omitempty"` - Value *v1beta1.Coin `protobuf:"bytes,7,opt,name=value,proto3" json:"value,omitempty"` + CompletionTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=completion_time,json=completionTime,proto3" json:"completion_time,omitempty"` } -func (x *MsgCreateValidator) Reset() { - *x = MsgCreateValidator{} +func (x *MsgBeginRedelegateResponse) Reset() { + *x = MsgBeginRedelegateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[0] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgCreateValidator) String() string { +func (x *MsgBeginRedelegateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgCreateValidator) ProtoMessage() {} +func (*MsgBeginRedelegateResponse) ProtoMessage() {} -// Deprecated: Use MsgCreateValidator.ProtoReflect.Descriptor instead. -func (*MsgCreateValidator) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{0} +// Deprecated: Use MsgBeginRedelegateResponse.ProtoReflect.Descriptor instead. +func (*MsgBeginRedelegateResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{7} } -func (x *MsgCreateValidator) GetDescription() *Description { +func (x *MsgBeginRedelegateResponse) GetCompletionTime() *timestamppb.Timestamp { if x != nil { - return x.Description + return x.CompletionTime } return nil } -func (x *MsgCreateValidator) GetCommission() *CommissionRates { +// MsgUndelegate defines a SDK message for performing an undelegation from a +// delegate and a validator. +type MsgUndelegate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + Amount *v1beta1.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount,omitempty"` +} + +func (x *MsgUndelegate) Reset() { + *x = MsgUndelegate{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUndelegate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUndelegate) ProtoMessage() {} + +// Deprecated: Use MsgUndelegate.ProtoReflect.Descriptor instead. +func (*MsgUndelegate) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{8} +} + +func (x *MsgUndelegate) GetDelegatorAddress() string { if x != nil { - return x.Commission + return x.DelegatorAddress } - return nil + return "" } -func (x *MsgCreateValidator) GetMinSelfDelegation() string { +func (x *MsgUndelegate) GetValidatorAddress() string { if x != nil { - return x.MinSelfDelegation + return x.ValidatorAddress } return "" } -func (x *MsgCreateValidator) GetDelegatorAddress() string { +func (x *MsgUndelegate) GetAmount() *v1beta1.Coin { + if x != nil { + return x.Amount + } + return nil +} + +// MsgUndelegateResponse defines the Msg/Undelegate response type. +type MsgUndelegateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CompletionTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=completion_time,json=completionTime,proto3" json:"completion_time,omitempty"` +} + +func (x *MsgUndelegateResponse) Reset() { + *x = MsgUndelegateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUndelegateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUndelegateResponse) ProtoMessage() {} + +// Deprecated: Use MsgUndelegateResponse.ProtoReflect.Descriptor instead. +func (*MsgUndelegateResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{9} +} + +func (x *MsgUndelegateResponse) GetCompletionTime() *timestamppb.Timestamp { + if x != nil { + return x.CompletionTime + } + return nil +} + +// MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator +// +// Since: cosmos-sdk 0.46 +type MsgCancelUnbondingDelegation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + // amount is always less than or equal to unbonding delegation entry balance + Amount *v1beta1.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount,omitempty"` + // creation_height is the height which the unbonding took place. + CreationHeight int64 `protobuf:"varint,4,opt,name=creation_height,json=creationHeight,proto3" json:"creation_height,omitempty"` +} + +func (x *MsgCancelUnbondingDelegation) Reset() { + *x = MsgCancelUnbondingDelegation{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgCancelUnbondingDelegation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgCancelUnbondingDelegation) ProtoMessage() {} + +// Deprecated: Use MsgCancelUnbondingDelegation.ProtoReflect.Descriptor instead. +func (*MsgCancelUnbondingDelegation) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{10} +} + +func (x *MsgCancelUnbondingDelegation) GetDelegatorAddress() string { if x != nil { return x.DelegatorAddress } return "" } -func (x *MsgCreateValidator) GetValidatorAddress() string { +func (x *MsgCancelUnbondingDelegation) GetValidatorAddress() string { if x != nil { return x.ValidatorAddress } return "" } -func (x *MsgCreateValidator) GetPubkey() *anypb.Any { +func (x *MsgCancelUnbondingDelegation) GetAmount() *v1beta1.Coin { if x != nil { - return x.Pubkey + return x.Amount } return nil } -func (x *MsgCreateValidator) GetValue() *v1beta1.Coin { +func (x *MsgCancelUnbondingDelegation) GetCreationHeight() int64 { if x != nil { - return x.Value + return x.CreationHeight + } + return 0 +} + +// MsgCancelUnbondingDelegationResponse +// +// Since: cosmos-sdk 0.46 +type MsgCancelUnbondingDelegationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgCancelUnbondingDelegationResponse) Reset() { + *x = MsgCancelUnbondingDelegationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgCancelUnbondingDelegationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgCancelUnbondingDelegationResponse) ProtoMessage() {} + +// Deprecated: Use MsgCancelUnbondingDelegationResponse.ProtoReflect.Descriptor instead. +func (*MsgCancelUnbondingDelegationResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{11} +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +type MsgUpdateParams struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // params defines the x/staking parameters to update. + // + // NOTE: All parameters must be supplied. + Params *Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *MsgUpdateParams) Reset() { + *x = MsgUpdateParams{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParams) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParams.ProtoReflect.Descriptor instead. +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{12} +} + +func (x *MsgUpdateParams) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +func (x *MsgUpdateParams) GetParams() *Params { + if x != nil { + return x.Params } return nil } -// MsgCreateValidatorResponse defines the Msg/CreateValidator response type. -type MsgCreateValidatorResponse struct { +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +type MsgUpdateParamsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *MsgCreateValidatorResponse) Reset() { - *x = MsgCreateValidatorResponse{} +func (x *MsgUpdateParamsResponse) Reset() { + *x = MsgUpdateParamsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[1] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgCreateValidatorResponse) String() string { +func (x *MsgUpdateParamsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgCreateValidatorResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) ProtoMessage() {} -// Deprecated: Use MsgCreateValidatorResponse.ProtoReflect.Descriptor instead. -func (*MsgCreateValidatorResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{1} +// Deprecated: Use MsgUpdateParamsResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{13} } -// MsgEditValidator defines a SDK message for editing an existing validator. -type MsgEditValidator struct { +// MsgUnbondValidator defines a method for performing the status transition for +// a validator from bonded to unbonded +// This allows a validator to stop their services and jail themselves without +// experiencing a slash +type MsgUnbondValidator struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Description *Description `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` - // We pass a reference to the new commission rate and min self delegation as - // it's not mandatory to update. If not updated, the deserialized rate will be - // zero with no way to distinguish if an update was intended. - // REF: #2373 - CommissionRate string `protobuf:"bytes,3,opt,name=commission_rate,json=commissionRate,proto3" json:"commission_rate,omitempty"` - MinSelfDelegation string `protobuf:"bytes,4,opt,name=min_self_delegation,json=minSelfDelegation,proto3" json:"min_self_delegation,omitempty"` + ValidatorAddress string `protobuf:"bytes,1,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` } -func (x *MsgEditValidator) Reset() { - *x = MsgEditValidator{} +func (x *MsgUnbondValidator) Reset() { + *x = MsgUnbondValidator{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[2] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgEditValidator) String() string { +func (x *MsgUnbondValidator) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgEditValidator) ProtoMessage() {} - -// Deprecated: Use MsgEditValidator.ProtoReflect.Descriptor instead. -func (*MsgEditValidator) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{2} -} +func (*MsgUnbondValidator) ProtoMessage() {} -func (x *MsgEditValidator) GetDescription() *Description { - if x != nil { - return x.Description - } - return nil +// Deprecated: Use MsgUnbondValidator.ProtoReflect.Descriptor instead. +func (*MsgUnbondValidator) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{14} } -func (x *MsgEditValidator) GetValidatorAddress() string { +func (x *MsgUnbondValidator) GetValidatorAddress() string { if x != nil { return x.ValidatorAddress } return "" } -func (x *MsgEditValidator) GetCommissionRate() string { - if x != nil { - return x.CommissionRate - } - return "" -} - -func (x *MsgEditValidator) GetMinSelfDelegation() string { - if x != nil { - return x.MinSelfDelegation - } - return "" -} - -// MsgEditValidatorResponse defines the Msg/EditValidator response type. -type MsgEditValidatorResponse struct { +// MsgUnbondValidatorResponse defines the Msg/UnbondValidator response type. +type MsgUnbondValidatorResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *MsgEditValidatorResponse) Reset() { - *x = MsgEditValidatorResponse{} +func (x *MsgUnbondValidatorResponse) Reset() { + *x = MsgUnbondValidatorResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[3] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgEditValidatorResponse) String() string { +func (x *MsgUnbondValidatorResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgEditValidatorResponse) ProtoMessage() {} +func (*MsgUnbondValidatorResponse) ProtoMessage() {} -// Deprecated: Use MsgEditValidatorResponse.ProtoReflect.Descriptor instead. -func (*MsgEditValidatorResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{3} +// Deprecated: Use MsgUnbondValidatorResponse.ProtoReflect.Descriptor instead. +func (*MsgUnbondValidatorResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{15} } -// MsgDelegate defines a SDK message for performing a delegation of coins -// from a delegator to a validator. -type MsgDelegate struct { +// MsgTokenizeShares tokenizes a delegation +type MsgTokenizeShares struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` - ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` - Amount *v1beta1.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount,omitempty"` + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + Amount *v1beta1.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount,omitempty"` + TokenizedShareOwner string `protobuf:"bytes,4,opt,name=tokenized_share_owner,json=tokenizedShareOwner,proto3" json:"tokenized_share_owner,omitempty"` } -func (x *MsgDelegate) Reset() { - *x = MsgDelegate{} +func (x *MsgTokenizeShares) Reset() { + *x = MsgTokenizeShares{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[4] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgDelegate) String() string { +func (x *MsgTokenizeShares) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgDelegate) ProtoMessage() {} +func (*MsgTokenizeShares) ProtoMessage() {} -// Deprecated: Use MsgDelegate.ProtoReflect.Descriptor instead. -func (*MsgDelegate) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{4} +// Deprecated: Use MsgTokenizeShares.ProtoReflect.Descriptor instead. +func (*MsgTokenizeShares) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{16} } -func (x *MsgDelegate) GetDelegatorAddress() string { +func (x *MsgTokenizeShares) GetDelegatorAddress() string { if x != nil { return x.DelegatorAddress } return "" } -func (x *MsgDelegate) GetValidatorAddress() string { +func (x *MsgTokenizeShares) GetValidatorAddress() string { if x != nil { return x.ValidatorAddress } return "" } -func (x *MsgDelegate) GetAmount() *v1beta1.Coin { +func (x *MsgTokenizeShares) GetAmount() *v1beta1.Coin { if x != nil { return x.Amount } return nil } -// MsgDelegateResponse defines the Msg/Delegate response type. -type MsgDelegateResponse struct { +func (x *MsgTokenizeShares) GetTokenizedShareOwner() string { + if x != nil { + return x.TokenizedShareOwner + } + return "" +} + +// MsgTokenizeSharesResponse defines the Msg/MsgTokenizeShares response type. +type MsgTokenizeSharesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Amount *v1beta1.Coin `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` } -func (x *MsgDelegateResponse) Reset() { - *x = MsgDelegateResponse{} +func (x *MsgTokenizeSharesResponse) Reset() { + *x = MsgTokenizeSharesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[5] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgDelegateResponse) String() string { +func (x *MsgTokenizeSharesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgDelegateResponse) ProtoMessage() {} +func (*MsgTokenizeSharesResponse) ProtoMessage() {} -// Deprecated: Use MsgDelegateResponse.ProtoReflect.Descriptor instead. -func (*MsgDelegateResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{5} +// Deprecated: Use MsgTokenizeSharesResponse.ProtoReflect.Descriptor instead. +func (*MsgTokenizeSharesResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{17} } -// MsgBeginRedelegate defines a SDK message for performing a redelegation -// of coins from a delegator and source validator to a destination validator. -type MsgBeginRedelegate struct { +func (x *MsgTokenizeSharesResponse) GetAmount() *v1beta1.Coin { + if x != nil { + return x.Amount + } + return nil +} + +// MsgRedeemTokensForShares redeems a tokenized share back into a native delegation +type MsgRedeemTokensForShares struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` - ValidatorSrcAddress string `protobuf:"bytes,2,opt,name=validator_src_address,json=validatorSrcAddress,proto3" json:"validator_src_address,omitempty"` - ValidatorDstAddress string `protobuf:"bytes,3,opt,name=validator_dst_address,json=validatorDstAddress,proto3" json:"validator_dst_address,omitempty"` - Amount *v1beta1.Coin `protobuf:"bytes,4,opt,name=amount,proto3" json:"amount,omitempty"` + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` + Amount *v1beta1.Coin `protobuf:"bytes,2,opt,name=amount,proto3" json:"amount,omitempty"` } -func (x *MsgBeginRedelegate) Reset() { - *x = MsgBeginRedelegate{} +func (x *MsgRedeemTokensForShares) Reset() { + *x = MsgRedeemTokensForShares{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[6] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgBeginRedelegate) String() string { +func (x *MsgRedeemTokensForShares) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgBeginRedelegate) ProtoMessage() {} +func (*MsgRedeemTokensForShares) ProtoMessage() {} -// Deprecated: Use MsgBeginRedelegate.ProtoReflect.Descriptor instead. -func (*MsgBeginRedelegate) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{6} +// Deprecated: Use MsgRedeemTokensForShares.ProtoReflect.Descriptor instead. +func (*MsgRedeemTokensForShares) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{18} } -func (x *MsgBeginRedelegate) GetDelegatorAddress() string { +func (x *MsgRedeemTokensForShares) GetDelegatorAddress() string { if x != nil { return x.DelegatorAddress } return "" } -func (x *MsgBeginRedelegate) GetValidatorSrcAddress() string { - if x != nil { - return x.ValidatorSrcAddress - } - return "" -} - -func (x *MsgBeginRedelegate) GetValidatorDstAddress() string { - if x != nil { - return x.ValidatorDstAddress - } - return "" -} - -func (x *MsgBeginRedelegate) GetAmount() *v1beta1.Coin { +func (x *MsgRedeemTokensForShares) GetAmount() *v1beta1.Coin { if x != nil { return x.Amount } return nil } -// MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type. -type MsgBeginRedelegateResponse struct { +// MsgRedeemTokensForSharesResponse defines the Msg/MsgRedeemTokensForShares response type. +type MsgRedeemTokensForSharesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - CompletionTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=completion_time,json=completionTime,proto3" json:"completion_time,omitempty"` + Amount *v1beta1.Coin `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` } -func (x *MsgBeginRedelegateResponse) Reset() { - *x = MsgBeginRedelegateResponse{} +func (x *MsgRedeemTokensForSharesResponse) Reset() { + *x = MsgRedeemTokensForSharesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[7] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgBeginRedelegateResponse) String() string { +func (x *MsgRedeemTokensForSharesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgBeginRedelegateResponse) ProtoMessage() {} +func (*MsgRedeemTokensForSharesResponse) ProtoMessage() {} -// Deprecated: Use MsgBeginRedelegateResponse.ProtoReflect.Descriptor instead. -func (*MsgBeginRedelegateResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{7} +// Deprecated: Use MsgRedeemTokensForSharesResponse.ProtoReflect.Descriptor instead. +func (*MsgRedeemTokensForSharesResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{19} } -func (x *MsgBeginRedelegateResponse) GetCompletionTime() *timestamppb.Timestamp { +func (x *MsgRedeemTokensForSharesResponse) GetAmount() *v1beta1.Coin { if x != nil { - return x.CompletionTime + return x.Amount } return nil } -// MsgUndelegate defines a SDK message for performing an undelegation from a -// delegate and a validator. -type MsgUndelegate struct { +// MsgTransferTokenizeShareRecord transfer a tokenize share record +type MsgTransferTokenizeShareRecord struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` - ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` - Amount *v1beta1.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount,omitempty"` + TokenizeShareRecordId uint64 `protobuf:"varint,1,opt,name=tokenize_share_record_id,json=tokenizeShareRecordId,proto3" json:"tokenize_share_record_id,omitempty"` + Sender string `protobuf:"bytes,2,opt,name=sender,proto3" json:"sender,omitempty"` + NewOwner string `protobuf:"bytes,3,opt,name=new_owner,json=newOwner,proto3" json:"new_owner,omitempty"` } -func (x *MsgUndelegate) Reset() { - *x = MsgUndelegate{} +func (x *MsgTransferTokenizeShareRecord) Reset() { + *x = MsgTransferTokenizeShareRecord{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[8] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgUndelegate) String() string { +func (x *MsgTransferTokenizeShareRecord) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgUndelegate) ProtoMessage() {} +func (*MsgTransferTokenizeShareRecord) ProtoMessage() {} -// Deprecated: Use MsgUndelegate.ProtoReflect.Descriptor instead. -func (*MsgUndelegate) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{8} +// Deprecated: Use MsgTransferTokenizeShareRecord.ProtoReflect.Descriptor instead. +func (*MsgTransferTokenizeShareRecord) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{20} } -func (x *MsgUndelegate) GetDelegatorAddress() string { +func (x *MsgTransferTokenizeShareRecord) GetTokenizeShareRecordId() uint64 { if x != nil { - return x.DelegatorAddress + return x.TokenizeShareRecordId } - return "" + return 0 } -func (x *MsgUndelegate) GetValidatorAddress() string { +func (x *MsgTransferTokenizeShareRecord) GetSender() string { if x != nil { - return x.ValidatorAddress + return x.Sender } return "" } -func (x *MsgUndelegate) GetAmount() *v1beta1.Coin { +func (x *MsgTransferTokenizeShareRecord) GetNewOwner() string { if x != nil { - return x.Amount + return x.NewOwner } - return nil + return "" } -// MsgUndelegateResponse defines the Msg/Undelegate response type. -type MsgUndelegateResponse struct { +// MsgTransferTokenizeShareRecordResponse defines the Msg/MsgTransferTokenizeShareRecord response type. +type MsgTransferTokenizeShareRecordResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - CompletionTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=completion_time,json=completionTime,proto3" json:"completion_time,omitempty"` } -func (x *MsgUndelegateResponse) Reset() { - *x = MsgUndelegateResponse{} +func (x *MsgTransferTokenizeShareRecordResponse) Reset() { + *x = MsgTransferTokenizeShareRecordResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[9] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgUndelegateResponse) String() string { +func (x *MsgTransferTokenizeShareRecordResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgUndelegateResponse) ProtoMessage() {} - -// Deprecated: Use MsgUndelegateResponse.ProtoReflect.Descriptor instead. -func (*MsgUndelegateResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{9} -} +func (*MsgTransferTokenizeShareRecordResponse) ProtoMessage() {} -func (x *MsgUndelegateResponse) GetCompletionTime() *timestamppb.Timestamp { - if x != nil { - return x.CompletionTime - } - return nil +// Deprecated: Use MsgTransferTokenizeShareRecordResponse.ProtoReflect.Descriptor instead. +func (*MsgTransferTokenizeShareRecordResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{21} } -// MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator -// -// Since: cosmos-sdk 0.46 -type MsgCancelUnbondingDelegation struct { +// MsgDisableTokenizeShares prevents the tokenization of shares for a given address +type MsgDisableTokenizeShares struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` - ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` - // amount is always less than or equal to unbonding delegation entry balance - Amount *v1beta1.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount,omitempty"` - // creation_height is the height which the unbonding took place. - CreationHeight int64 `protobuf:"varint,4,opt,name=creation_height,json=creationHeight,proto3" json:"creation_height,omitempty"` } -func (x *MsgCancelUnbondingDelegation) Reset() { - *x = MsgCancelUnbondingDelegation{} +func (x *MsgDisableTokenizeShares) Reset() { + *x = MsgDisableTokenizeShares{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[10] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgCancelUnbondingDelegation) String() string { +func (x *MsgDisableTokenizeShares) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgCancelUnbondingDelegation) ProtoMessage() {} +func (*MsgDisableTokenizeShares) ProtoMessage() {} -// Deprecated: Use MsgCancelUnbondingDelegation.ProtoReflect.Descriptor instead. -func (*MsgCancelUnbondingDelegation) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{10} +// Deprecated: Use MsgDisableTokenizeShares.ProtoReflect.Descriptor instead. +func (*MsgDisableTokenizeShares) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{22} } -func (x *MsgCancelUnbondingDelegation) GetDelegatorAddress() string { +func (x *MsgDisableTokenizeShares) GetDelegatorAddress() string { if x != nil { return x.DelegatorAddress } return "" } -func (x *MsgCancelUnbondingDelegation) GetValidatorAddress() string { - if x != nil { - return x.ValidatorAddress - } - return "" +// MsgDisableTokenizeSharesResponse defines the Msg/DisableTokenizeShares response type. +type MsgDisableTokenizeSharesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields } -func (x *MsgCancelUnbondingDelegation) GetAmount() *v1beta1.Coin { - if x != nil { - return x.Amount +func (x *MsgDisableTokenizeSharesResponse) Reset() { + *x = MsgDisableTokenizeSharesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *MsgCancelUnbondingDelegation) GetCreationHeight() int64 { - if x != nil { - return x.CreationHeight +func (x *MsgDisableTokenizeSharesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgDisableTokenizeSharesResponse) ProtoMessage() {} + +// Deprecated: Use MsgDisableTokenizeSharesResponse.ProtoReflect.Descriptor instead. +func (*MsgDisableTokenizeSharesResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{23} +} + +// MsgEnableTokenizeShares re-enables tokenization of shares for a given address +type MsgEnableTokenizeShares struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` +} + +func (x *MsgEnableTokenizeShares) Reset() { + *x = MsgEnableTokenizeShares{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return 0 } -// MsgCancelUnbondingDelegationResponse -// -// Since: cosmos-sdk 0.46 -type MsgCancelUnbondingDelegationResponse struct { +func (x *MsgEnableTokenizeShares) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgEnableTokenizeShares) ProtoMessage() {} + +// Deprecated: Use MsgEnableTokenizeShares.ProtoReflect.Descriptor instead. +func (*MsgEnableTokenizeShares) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{24} +} + +func (x *MsgEnableTokenizeShares) GetDelegatorAddress() string { + if x != nil { + return x.DelegatorAddress + } + return "" +} + +// MsgEnableTokenizeSharesResponse defines the Msg/EnableTokenizeShares response type. +type MsgEnableTokenizeSharesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + CompletionTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=completion_time,json=completionTime,proto3" json:"completion_time,omitempty"` } -func (x *MsgCancelUnbondingDelegationResponse) Reset() { - *x = MsgCancelUnbondingDelegationResponse{} +func (x *MsgEnableTokenizeSharesResponse) Reset() { + *x = MsgEnableTokenizeSharesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[11] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgCancelUnbondingDelegationResponse) String() string { +func (x *MsgEnableTokenizeSharesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgCancelUnbondingDelegationResponse) ProtoMessage() {} +func (*MsgEnableTokenizeSharesResponse) ProtoMessage() {} -// Deprecated: Use MsgCancelUnbondingDelegationResponse.ProtoReflect.Descriptor instead. -func (*MsgCancelUnbondingDelegationResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{11} +// Deprecated: Use MsgEnableTokenizeSharesResponse.ProtoReflect.Descriptor instead. +func (*MsgEnableTokenizeSharesResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{25} } -// MsgUpdateParams is the Msg/UpdateParams request type. -// -// Since: cosmos-sdk 0.47 -type MsgUpdateParams struct { +func (x *MsgEnableTokenizeSharesResponse) GetCompletionTime() *timestamppb.Timestamp { + if x != nil { + return x.CompletionTime + } + return nil +} + +// MsgValidatorBond defines a SDK message for performing validator self-bond of delegated coins +// from a delegator to a validator. +type MsgValidatorBond struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // authority is the address that controls the module (defaults to x/gov unless overwritten). - Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` - // params defines the x/staking parameters to update. - // - // NOTE: All parameters must be supplied. - Params *Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` } -func (x *MsgUpdateParams) Reset() { - *x = MsgUpdateParams{} +func (x *MsgValidatorBond) Reset() { + *x = MsgValidatorBond{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[12] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgUpdateParams) String() string { +func (x *MsgValidatorBond) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgValidatorBond) ProtoMessage() {} -// Deprecated: Use MsgUpdateParams.ProtoReflect.Descriptor instead. -func (*MsgUpdateParams) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{12} +// Deprecated: Use MsgValidatorBond.ProtoReflect.Descriptor instead. +func (*MsgValidatorBond) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{26} } -func (x *MsgUpdateParams) GetAuthority() string { +func (x *MsgValidatorBond) GetDelegatorAddress() string { if x != nil { - return x.Authority + return x.DelegatorAddress } return "" } -func (x *MsgUpdateParams) GetParams() *Params { +func (x *MsgValidatorBond) GetValidatorAddress() string { if x != nil { - return x.Params + return x.ValidatorAddress } - return nil + return "" } -// MsgUpdateParamsResponse defines the response structure for executing a -// MsgUpdateParams message. -// -// Since: cosmos-sdk 0.47 -type MsgUpdateParamsResponse struct { +// MsgValidatorBondResponse defines the Msg/ValidatorBond response type. +type MsgValidatorBondResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *MsgUpdateParamsResponse) Reset() { - *x = MsgUpdateParamsResponse{} +func (x *MsgValidatorBondResponse) Reset() { + *x = MsgValidatorBondResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[13] + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MsgUpdateParamsResponse) String() string { +func (x *MsgValidatorBondResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgValidatorBondResponse) ProtoMessage() {} -// Deprecated: Use MsgUpdateParamsResponse.ProtoReflect.Descriptor instead. -func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{13} +// Deprecated: Use MsgValidatorBondResponse.ProtoReflect.Descriptor instead. +func (*MsgValidatorBondResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{27} } var File_cosmos_staking_v1beta1_tx_proto protoreflect.FileDescriptor @@ -7697,7 +14364,7 @@ var file_cosmos_staking_v1beta1_tx_proto_rawDesc = []byte{ 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x73, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, - 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x92, 0x05, 0x0a, 0x12, 0x4d, 0x73, 0x67, + 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x94, 0x05, 0x0a, 0x12, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, @@ -7709,245 +14376,397 @@ var file_cosmos_staking_v1beta1_tx_proto_rawDesc = []byte{ 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6c, 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6e, 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, - 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, - 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 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, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x05, 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, - 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x46, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x42, 0x18, 0xca, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x62, 0x4b, 0x65, - 0x79, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x3a, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, - 0x6f, 0x69, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x56, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, - 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x1d, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x1c, 0x0a, - 0x1a, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb8, 0x03, 0x0a, 0x10, - 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x12, 0x50, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, - 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 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, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x61, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x38, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xd2, 0xb4, - 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x0e, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x13, - 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x38, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x49, 0x6e, 0x74, 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3e, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, - 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x1a, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, - 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x94, 0x02, 0x0a, 0x0b, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 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, 0x10, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, - 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x39, - 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, - 0xb0, 0x2a, 0x16, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, - 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x4d, 0x73, 0x67, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0xf7, 0x02, 0x0a, 0x12, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, - 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x72, 0x63, 0x5f, - 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, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x53, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 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, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x44, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, - 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x40, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, - 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x1d, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, - 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x22, 0x70, 0x0a, 0x1a, 0x4d, 0x73, - 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0d, 0xc8, - 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x98, 0x02, 0x0a, - 0x0d, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x45, - 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 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, 0x10, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3c, 0x0a, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, - 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x3b, 0x88, 0xa0, 0x1f, 0x00, - 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x18, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x22, 0x6b, 0x0a, 0x15, 0x4d, 0x73, 0x67, 0x55, 0x6e, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x52, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0xa8, - 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x69, 0x6d, 0x65, 0x22, 0xdf, 0x02, 0x0a, 0x1c, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x28, 0x09, 0x42, 0x3e, 0x18, 0x01, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, + 0x6e, 0x74, 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 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, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, + 0x73, 0x18, 0x05, 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, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, - 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x09, - 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x4a, 0x88, 0xa0, 0x1f, 0x00, - 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x27, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x26, 0x0a, 0x24, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc5, - 0x01, 0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, + 0x65, 0x73, 0x73, 0x12, 0x46, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x42, 0x18, 0xca, 0xb4, 0x2d, 0x14, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x62, + 0x4b, 0x65, 0x79, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x3a, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x56, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, + 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, + 0x2a, 0x1d, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x22, + 0x1c, 0x0a, 0x1a, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbe, 0x03, + 0x0a, 0x10, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0xc8, 0xde, + 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 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, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x61, 0x0a, 0x0f, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x38, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, + 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x0e, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x12, 0x6e, + 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3e, 0x18, 0x01, 0xc8, + 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 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, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, + 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x11, 0x6d, 0x69, 0x6e, + 0x53, 0x65, 0x6c, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3e, + 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, + 0xb0, 0x2a, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, + 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x1a, + 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x02, 0x0a, 0x0b, 0x4d, + 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, - 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, - 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3a, 0x37, 0x82, - 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x8a, 0xe7, 0xb0, - 0x2a, 0x24, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x32, 0x9d, 0x06, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x71, 0x0a, 0x0f, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0d, - 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 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, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x39, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, + 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x16, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x22, 0x15, 0x0a, 0x13, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf7, 0x02, 0x0a, 0x12, 0x4d, 0x73, 0x67, + 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, + 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x72, 0x63, 0x5f, 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, + 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x72, 0x63, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 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, 0x13, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x09, 0xc8, + 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x3a, 0x40, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x8a, 0xe7, 0xb0, 0x2a, 0x1d, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, + 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x22, 0x70, 0x0a, 0x1a, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x52, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0xa8, + 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0x98, 0x02, 0x0a, 0x0d, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, + 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 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, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, + 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, + 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x3a, 0x3b, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, + 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x18, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, + 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x22, + 0x6b, 0x0a, 0x15, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0d, 0xc8, + 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xdf, 0x02, 0x0a, + 0x1c, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, + 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 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, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 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, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, + 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x3a, 0x4a, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, + 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x27, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, + 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x26, + 0x0a, 0x24, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc5, 0x01, 0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 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, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3a, 0x37, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x8a, 0xe7, 0xb0, 0x2a, 0x24, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x4d, + 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, + 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x0a, 0x12, 0x4d, 0x73, 0x67, + 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x3f, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0xf2, 0xde, 0x1f, 0x0e, + 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x22, 0x1c, 0x0a, 0x1a, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa0, + 0x02, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x49, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, + 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x64, + 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x13, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, + 0x00, 0x22, 0x54, 0x0a, 0x19, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, + 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xa8, 0x01, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x52, + 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x37, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, + 0x1f, 0x00, 0x22, 0x5b, 0x0a, 0x20, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, + 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, + 0x98, 0x01, 0x0a, 0x1e, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x5f, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x4f, 0x77, 0x6e, 0x65, 0x72, + 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x28, 0x0a, 0x26, 0x4d, 0x73, + 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6f, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, + 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, + 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x08, 0x88, 0xa0, 0x1f, + 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x22, 0x0a, 0x20, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, + 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6e, 0x0a, 0x17, 0x4d, 0x73, 0x67, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, + 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x70, 0x0a, 0x1f, 0x4d, 0x73, 0x67, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0f, + 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xb2, 0x01, 0x0a, 0x10, + 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, + 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, + 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, + 0x3a, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, + 0x22, 0x1a, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x42, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x94, 0x0d, 0x0a, + 0x03, 0x4d, 0x73, 0x67, 0x12, 0x71, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x08, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0d, 0x45, 0x64, 0x69, 0x74, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, + 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, + 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x73, + 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, + 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, + 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x42, 0x65, 0x67, 0x69, 0x6e, - 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, + 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x19, 0x43, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3c, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, + 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, + 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x64, + 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, + 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x73, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, + 0x01, 0x0a, 0x1b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x36, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x3e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x55, 0x6e, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, - 0x2d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, - 0x01, 0x0a, 0x19, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, - 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x1a, 0x3c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x68, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, + 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x73, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, + 0x14, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, + 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x6b, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, + 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x42, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, + 0xb0, 0x2a, 0x01, 0x42, 0xd7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, - 0x01, 0x42, 0xd7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, - 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x61, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, 0x16, 0x43, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x22, + 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -7962,61 +14781,94 @@ func file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP() []byte { return file_cosmos_staking_v1beta1_tx_proto_rawDescData } -var file_cosmos_staking_v1beta1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_cosmos_staking_v1beta1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_cosmos_staking_v1beta1_tx_proto_goTypes = []interface{}{ - (*MsgCreateValidator)(nil), // 0: cosmos.staking.v1beta1.MsgCreateValidator - (*MsgCreateValidatorResponse)(nil), // 1: cosmos.staking.v1beta1.MsgCreateValidatorResponse - (*MsgEditValidator)(nil), // 2: cosmos.staking.v1beta1.MsgEditValidator - (*MsgEditValidatorResponse)(nil), // 3: cosmos.staking.v1beta1.MsgEditValidatorResponse - (*MsgDelegate)(nil), // 4: cosmos.staking.v1beta1.MsgDelegate - (*MsgDelegateResponse)(nil), // 5: cosmos.staking.v1beta1.MsgDelegateResponse - (*MsgBeginRedelegate)(nil), // 6: cosmos.staking.v1beta1.MsgBeginRedelegate - (*MsgBeginRedelegateResponse)(nil), // 7: cosmos.staking.v1beta1.MsgBeginRedelegateResponse - (*MsgUndelegate)(nil), // 8: cosmos.staking.v1beta1.MsgUndelegate - (*MsgUndelegateResponse)(nil), // 9: cosmos.staking.v1beta1.MsgUndelegateResponse - (*MsgCancelUnbondingDelegation)(nil), // 10: cosmos.staking.v1beta1.MsgCancelUnbondingDelegation - (*MsgCancelUnbondingDelegationResponse)(nil), // 11: cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse - (*MsgUpdateParams)(nil), // 12: cosmos.staking.v1beta1.MsgUpdateParams - (*MsgUpdateParamsResponse)(nil), // 13: cosmos.staking.v1beta1.MsgUpdateParamsResponse - (*Description)(nil), // 14: cosmos.staking.v1beta1.Description - (*CommissionRates)(nil), // 15: cosmos.staking.v1beta1.CommissionRates - (*anypb.Any)(nil), // 16: google.protobuf.Any - (*v1beta1.Coin)(nil), // 17: cosmos.base.v1beta1.Coin - (*timestamppb.Timestamp)(nil), // 18: google.protobuf.Timestamp - (*Params)(nil), // 19: cosmos.staking.v1beta1.Params + (*MsgCreateValidator)(nil), // 0: cosmos.staking.v1beta1.MsgCreateValidator + (*MsgCreateValidatorResponse)(nil), // 1: cosmos.staking.v1beta1.MsgCreateValidatorResponse + (*MsgEditValidator)(nil), // 2: cosmos.staking.v1beta1.MsgEditValidator + (*MsgEditValidatorResponse)(nil), // 3: cosmos.staking.v1beta1.MsgEditValidatorResponse + (*MsgDelegate)(nil), // 4: cosmos.staking.v1beta1.MsgDelegate + (*MsgDelegateResponse)(nil), // 5: cosmos.staking.v1beta1.MsgDelegateResponse + (*MsgBeginRedelegate)(nil), // 6: cosmos.staking.v1beta1.MsgBeginRedelegate + (*MsgBeginRedelegateResponse)(nil), // 7: cosmos.staking.v1beta1.MsgBeginRedelegateResponse + (*MsgUndelegate)(nil), // 8: cosmos.staking.v1beta1.MsgUndelegate + (*MsgUndelegateResponse)(nil), // 9: cosmos.staking.v1beta1.MsgUndelegateResponse + (*MsgCancelUnbondingDelegation)(nil), // 10: cosmos.staking.v1beta1.MsgCancelUnbondingDelegation + (*MsgCancelUnbondingDelegationResponse)(nil), // 11: cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse + (*MsgUpdateParams)(nil), // 12: cosmos.staking.v1beta1.MsgUpdateParams + (*MsgUpdateParamsResponse)(nil), // 13: cosmos.staking.v1beta1.MsgUpdateParamsResponse + (*MsgUnbondValidator)(nil), // 14: cosmos.staking.v1beta1.MsgUnbondValidator + (*MsgUnbondValidatorResponse)(nil), // 15: cosmos.staking.v1beta1.MsgUnbondValidatorResponse + (*MsgTokenizeShares)(nil), // 16: cosmos.staking.v1beta1.MsgTokenizeShares + (*MsgTokenizeSharesResponse)(nil), // 17: cosmos.staking.v1beta1.MsgTokenizeSharesResponse + (*MsgRedeemTokensForShares)(nil), // 18: cosmos.staking.v1beta1.MsgRedeemTokensForShares + (*MsgRedeemTokensForSharesResponse)(nil), // 19: cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse + (*MsgTransferTokenizeShareRecord)(nil), // 20: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord + (*MsgTransferTokenizeShareRecordResponse)(nil), // 21: cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse + (*MsgDisableTokenizeShares)(nil), // 22: cosmos.staking.v1beta1.MsgDisableTokenizeShares + (*MsgDisableTokenizeSharesResponse)(nil), // 23: cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse + (*MsgEnableTokenizeShares)(nil), // 24: cosmos.staking.v1beta1.MsgEnableTokenizeShares + (*MsgEnableTokenizeSharesResponse)(nil), // 25: cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse + (*MsgValidatorBond)(nil), // 26: cosmos.staking.v1beta1.MsgValidatorBond + (*MsgValidatorBondResponse)(nil), // 27: cosmos.staking.v1beta1.MsgValidatorBondResponse + (*Description)(nil), // 28: cosmos.staking.v1beta1.Description + (*CommissionRates)(nil), // 29: cosmos.staking.v1beta1.CommissionRates + (*anypb.Any)(nil), // 30: google.protobuf.Any + (*v1beta1.Coin)(nil), // 31: cosmos.base.v1beta1.Coin + (*timestamppb.Timestamp)(nil), // 32: google.protobuf.Timestamp + (*Params)(nil), // 33: cosmos.staking.v1beta1.Params } var file_cosmos_staking_v1beta1_tx_proto_depIdxs = []int32{ - 14, // 0: cosmos.staking.v1beta1.MsgCreateValidator.description:type_name -> cosmos.staking.v1beta1.Description - 15, // 1: cosmos.staking.v1beta1.MsgCreateValidator.commission:type_name -> cosmos.staking.v1beta1.CommissionRates - 16, // 2: cosmos.staking.v1beta1.MsgCreateValidator.pubkey:type_name -> google.protobuf.Any - 17, // 3: cosmos.staking.v1beta1.MsgCreateValidator.value:type_name -> cosmos.base.v1beta1.Coin - 14, // 4: cosmos.staking.v1beta1.MsgEditValidator.description:type_name -> cosmos.staking.v1beta1.Description - 17, // 5: cosmos.staking.v1beta1.MsgDelegate.amount:type_name -> cosmos.base.v1beta1.Coin - 17, // 6: cosmos.staking.v1beta1.MsgBeginRedelegate.amount:type_name -> cosmos.base.v1beta1.Coin - 18, // 7: cosmos.staking.v1beta1.MsgBeginRedelegateResponse.completion_time:type_name -> google.protobuf.Timestamp - 17, // 8: cosmos.staking.v1beta1.MsgUndelegate.amount:type_name -> cosmos.base.v1beta1.Coin - 18, // 9: cosmos.staking.v1beta1.MsgUndelegateResponse.completion_time:type_name -> google.protobuf.Timestamp - 17, // 10: cosmos.staking.v1beta1.MsgCancelUnbondingDelegation.amount:type_name -> cosmos.base.v1beta1.Coin - 19, // 11: cosmos.staking.v1beta1.MsgUpdateParams.params:type_name -> cosmos.staking.v1beta1.Params - 0, // 12: cosmos.staking.v1beta1.Msg.CreateValidator:input_type -> cosmos.staking.v1beta1.MsgCreateValidator - 2, // 13: cosmos.staking.v1beta1.Msg.EditValidator:input_type -> cosmos.staking.v1beta1.MsgEditValidator - 4, // 14: cosmos.staking.v1beta1.Msg.Delegate:input_type -> cosmos.staking.v1beta1.MsgDelegate - 6, // 15: cosmos.staking.v1beta1.Msg.BeginRedelegate:input_type -> cosmos.staking.v1beta1.MsgBeginRedelegate - 8, // 16: cosmos.staking.v1beta1.Msg.Undelegate:input_type -> cosmos.staking.v1beta1.MsgUndelegate - 10, // 17: cosmos.staking.v1beta1.Msg.CancelUnbondingDelegation:input_type -> cosmos.staking.v1beta1.MsgCancelUnbondingDelegation - 12, // 18: cosmos.staking.v1beta1.Msg.UpdateParams:input_type -> cosmos.staking.v1beta1.MsgUpdateParams - 1, // 19: cosmos.staking.v1beta1.Msg.CreateValidator:output_type -> cosmos.staking.v1beta1.MsgCreateValidatorResponse - 3, // 20: cosmos.staking.v1beta1.Msg.EditValidator:output_type -> cosmos.staking.v1beta1.MsgEditValidatorResponse - 5, // 21: cosmos.staking.v1beta1.Msg.Delegate:output_type -> cosmos.staking.v1beta1.MsgDelegateResponse - 7, // 22: cosmos.staking.v1beta1.Msg.BeginRedelegate:output_type -> cosmos.staking.v1beta1.MsgBeginRedelegateResponse - 9, // 23: cosmos.staking.v1beta1.Msg.Undelegate:output_type -> cosmos.staking.v1beta1.MsgUndelegateResponse - 11, // 24: cosmos.staking.v1beta1.Msg.CancelUnbondingDelegation:output_type -> cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse - 13, // 25: cosmos.staking.v1beta1.Msg.UpdateParams:output_type -> cosmos.staking.v1beta1.MsgUpdateParamsResponse - 19, // [19:26] is the sub-list for method output_type - 12, // [12:19] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name + 28, // 0: cosmos.staking.v1beta1.MsgCreateValidator.description:type_name -> cosmos.staking.v1beta1.Description + 29, // 1: cosmos.staking.v1beta1.MsgCreateValidator.commission:type_name -> cosmos.staking.v1beta1.CommissionRates + 30, // 2: cosmos.staking.v1beta1.MsgCreateValidator.pubkey:type_name -> google.protobuf.Any + 31, // 3: cosmos.staking.v1beta1.MsgCreateValidator.value:type_name -> cosmos.base.v1beta1.Coin + 28, // 4: cosmos.staking.v1beta1.MsgEditValidator.description:type_name -> cosmos.staking.v1beta1.Description + 31, // 5: cosmos.staking.v1beta1.MsgDelegate.amount:type_name -> cosmos.base.v1beta1.Coin + 31, // 6: cosmos.staking.v1beta1.MsgBeginRedelegate.amount:type_name -> cosmos.base.v1beta1.Coin + 32, // 7: cosmos.staking.v1beta1.MsgBeginRedelegateResponse.completion_time:type_name -> google.protobuf.Timestamp + 31, // 8: cosmos.staking.v1beta1.MsgUndelegate.amount:type_name -> cosmos.base.v1beta1.Coin + 32, // 9: cosmos.staking.v1beta1.MsgUndelegateResponse.completion_time:type_name -> google.protobuf.Timestamp + 31, // 10: cosmos.staking.v1beta1.MsgCancelUnbondingDelegation.amount:type_name -> cosmos.base.v1beta1.Coin + 33, // 11: cosmos.staking.v1beta1.MsgUpdateParams.params:type_name -> cosmos.staking.v1beta1.Params + 31, // 12: cosmos.staking.v1beta1.MsgTokenizeShares.amount:type_name -> cosmos.base.v1beta1.Coin + 31, // 13: cosmos.staking.v1beta1.MsgTokenizeSharesResponse.amount:type_name -> cosmos.base.v1beta1.Coin + 31, // 14: cosmos.staking.v1beta1.MsgRedeemTokensForShares.amount:type_name -> cosmos.base.v1beta1.Coin + 31, // 15: cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse.amount:type_name -> cosmos.base.v1beta1.Coin + 32, // 16: cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse.completion_time:type_name -> google.protobuf.Timestamp + 0, // 17: cosmos.staking.v1beta1.Msg.CreateValidator:input_type -> cosmos.staking.v1beta1.MsgCreateValidator + 2, // 18: cosmos.staking.v1beta1.Msg.EditValidator:input_type -> cosmos.staking.v1beta1.MsgEditValidator + 4, // 19: cosmos.staking.v1beta1.Msg.Delegate:input_type -> cosmos.staking.v1beta1.MsgDelegate + 6, // 20: cosmos.staking.v1beta1.Msg.BeginRedelegate:input_type -> cosmos.staking.v1beta1.MsgBeginRedelegate + 8, // 21: cosmos.staking.v1beta1.Msg.Undelegate:input_type -> cosmos.staking.v1beta1.MsgUndelegate + 10, // 22: cosmos.staking.v1beta1.Msg.CancelUnbondingDelegation:input_type -> cosmos.staking.v1beta1.MsgCancelUnbondingDelegation + 12, // 23: cosmos.staking.v1beta1.Msg.UpdateParams:input_type -> cosmos.staking.v1beta1.MsgUpdateParams + 14, // 24: cosmos.staking.v1beta1.Msg.UnbondValidator:input_type -> cosmos.staking.v1beta1.MsgUnbondValidator + 16, // 25: cosmos.staking.v1beta1.Msg.TokenizeShares:input_type -> cosmos.staking.v1beta1.MsgTokenizeShares + 18, // 26: cosmos.staking.v1beta1.Msg.RedeemTokensForShares:input_type -> cosmos.staking.v1beta1.MsgRedeemTokensForShares + 20, // 27: cosmos.staking.v1beta1.Msg.TransferTokenizeShareRecord:input_type -> cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord + 22, // 28: cosmos.staking.v1beta1.Msg.DisableTokenizeShares:input_type -> cosmos.staking.v1beta1.MsgDisableTokenizeShares + 24, // 29: cosmos.staking.v1beta1.Msg.EnableTokenizeShares:input_type -> cosmos.staking.v1beta1.MsgEnableTokenizeShares + 26, // 30: cosmos.staking.v1beta1.Msg.ValidatorBond:input_type -> cosmos.staking.v1beta1.MsgValidatorBond + 1, // 31: cosmos.staking.v1beta1.Msg.CreateValidator:output_type -> cosmos.staking.v1beta1.MsgCreateValidatorResponse + 3, // 32: cosmos.staking.v1beta1.Msg.EditValidator:output_type -> cosmos.staking.v1beta1.MsgEditValidatorResponse + 5, // 33: cosmos.staking.v1beta1.Msg.Delegate:output_type -> cosmos.staking.v1beta1.MsgDelegateResponse + 7, // 34: cosmos.staking.v1beta1.Msg.BeginRedelegate:output_type -> cosmos.staking.v1beta1.MsgBeginRedelegateResponse + 9, // 35: cosmos.staking.v1beta1.Msg.Undelegate:output_type -> cosmos.staking.v1beta1.MsgUndelegateResponse + 11, // 36: cosmos.staking.v1beta1.Msg.CancelUnbondingDelegation:output_type -> cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse + 13, // 37: cosmos.staking.v1beta1.Msg.UpdateParams:output_type -> cosmos.staking.v1beta1.MsgUpdateParamsResponse + 15, // 38: cosmos.staking.v1beta1.Msg.UnbondValidator:output_type -> cosmos.staking.v1beta1.MsgUnbondValidatorResponse + 17, // 39: cosmos.staking.v1beta1.Msg.TokenizeShares:output_type -> cosmos.staking.v1beta1.MsgTokenizeSharesResponse + 19, // 40: cosmos.staking.v1beta1.Msg.RedeemTokensForShares:output_type -> cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse + 21, // 41: cosmos.staking.v1beta1.Msg.TransferTokenizeShareRecord:output_type -> cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse + 23, // 42: cosmos.staking.v1beta1.Msg.DisableTokenizeShares:output_type -> cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse + 25, // 43: cosmos.staking.v1beta1.Msg.EnableTokenizeShares:output_type -> cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse + 27, // 44: cosmos.staking.v1beta1.Msg.ValidatorBond:output_type -> cosmos.staking.v1beta1.MsgValidatorBondResponse + 31, // [31:45] is the sub-list for method output_type + 17, // [17:31] is the sub-list for method input_type + 17, // [17:17] is the sub-list for extension type_name + 17, // [17:17] is the sub-list for extension extendee + 0, // [0:17] is the sub-list for field type_name } func init() { file_cosmos_staking_v1beta1_tx_proto_init() } @@ -8194,6 +15046,174 @@ func file_cosmos_staking_v1beta1_tx_proto_init() { return nil } } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUnbondValidator); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUnbondValidatorResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgTokenizeShares); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgTokenizeSharesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgRedeemTokensForShares); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgRedeemTokensForSharesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgTransferTokenizeShareRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgTransferTokenizeShareRecordResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgDisableTokenizeShares); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgDisableTokenizeSharesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgEnableTokenizeShares); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgEnableTokenizeSharesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgValidatorBond); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgValidatorBondResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -8201,7 +15221,7 @@ func file_cosmos_staking_v1beta1_tx_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_staking_v1beta1_tx_proto_rawDesc, NumEnums: 0, - NumMessages: 14, + NumMessages: 28, NumExtensions: 0, NumServices: 1, }, diff --git a/api/cosmos/staking/v1beta1/tx_grpc.pb.go b/api/cosmos/staking/v1beta1/tx_grpc.pb.go index 84a8c06e8998..f68b6e65b2d6 100644 --- a/api/cosmos/staking/v1beta1/tx_grpc.pb.go +++ b/api/cosmos/staking/v1beta1/tx_grpc.pb.go @@ -19,13 +19,20 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - Msg_CreateValidator_FullMethodName = "/cosmos.staking.v1beta1.Msg/CreateValidator" - Msg_EditValidator_FullMethodName = "/cosmos.staking.v1beta1.Msg/EditValidator" - Msg_Delegate_FullMethodName = "/cosmos.staking.v1beta1.Msg/Delegate" - Msg_BeginRedelegate_FullMethodName = "/cosmos.staking.v1beta1.Msg/BeginRedelegate" - Msg_Undelegate_FullMethodName = "/cosmos.staking.v1beta1.Msg/Undelegate" - Msg_CancelUnbondingDelegation_FullMethodName = "/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation" - Msg_UpdateParams_FullMethodName = "/cosmos.staking.v1beta1.Msg/UpdateParams" + Msg_CreateValidator_FullMethodName = "/cosmos.staking.v1beta1.Msg/CreateValidator" + Msg_EditValidator_FullMethodName = "/cosmos.staking.v1beta1.Msg/EditValidator" + Msg_Delegate_FullMethodName = "/cosmos.staking.v1beta1.Msg/Delegate" + Msg_BeginRedelegate_FullMethodName = "/cosmos.staking.v1beta1.Msg/BeginRedelegate" + Msg_Undelegate_FullMethodName = "/cosmos.staking.v1beta1.Msg/Undelegate" + Msg_CancelUnbondingDelegation_FullMethodName = "/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation" + Msg_UpdateParams_FullMethodName = "/cosmos.staking.v1beta1.Msg/UpdateParams" + Msg_UnbondValidator_FullMethodName = "/cosmos.staking.v1beta1.Msg/UnbondValidator" + Msg_TokenizeShares_FullMethodName = "/cosmos.staking.v1beta1.Msg/TokenizeShares" + Msg_RedeemTokensForShares_FullMethodName = "/cosmos.staking.v1beta1.Msg/RedeemTokensForShares" + Msg_TransferTokenizeShareRecord_FullMethodName = "/cosmos.staking.v1beta1.Msg/TransferTokenizeShareRecord" + Msg_DisableTokenizeShares_FullMethodName = "/cosmos.staking.v1beta1.Msg/DisableTokenizeShares" + Msg_EnableTokenizeShares_FullMethodName = "/cosmos.staking.v1beta1.Msg/EnableTokenizeShares" + Msg_ValidatorBond_FullMethodName = "/cosmos.staking.v1beta1.Msg/ValidatorBond" ) // MsgClient is the client API for Msg service. @@ -54,6 +61,26 @@ type MsgClient interface { // parameters. // Since: cosmos-sdk 0.47 UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) + // UnbondValidator defines a method for performing the status transition for a validator + // from bonded to unbonding + // This allows a validator to stop their services and jail themselves without + // experiencing a slash + UnbondValidator(ctx context.Context, in *MsgUnbondValidator, opts ...grpc.CallOption) (*MsgUnbondValidatorResponse, error) + // TokenizeShares defines a method for tokenizing shares from a validator. + TokenizeShares(ctx context.Context, in *MsgTokenizeShares, opts ...grpc.CallOption) (*MsgTokenizeSharesResponse, error) + // RedeemTokensForShares defines a method for redeeming tokens from a validator for + // shares. + RedeemTokensForShares(ctx context.Context, in *MsgRedeemTokensForShares, opts ...grpc.CallOption) (*MsgRedeemTokensForSharesResponse, error) + // TransferTokenizeShareRecord defines a method to transfer ownership of + // TokenizeShareRecord + TransferTokenizeShareRecord(ctx context.Context, in *MsgTransferTokenizeShareRecord, opts ...grpc.CallOption) (*MsgTransferTokenizeShareRecordResponse, error) + // DisableTokenizeShares defines a method to prevent the tokenization of an addresses stake + DisableTokenizeShares(ctx context.Context, in *MsgDisableTokenizeShares, opts ...grpc.CallOption) (*MsgDisableTokenizeSharesResponse, error) + // EnableTokenizeShares defines a method to re-enable the tokenization of an addresseses stake + // after it has been disabled + EnableTokenizeShares(ctx context.Context, in *MsgEnableTokenizeShares, opts ...grpc.CallOption) (*MsgEnableTokenizeSharesResponse, error) + // ValidatorBond defines a method for performing a validator self-bond + ValidatorBond(ctx context.Context, in *MsgValidatorBond, opts ...grpc.CallOption) (*MsgValidatorBondResponse, error) } type msgClient struct { @@ -127,6 +154,69 @@ func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts return out, nil } +func (c *msgClient) UnbondValidator(ctx context.Context, in *MsgUnbondValidator, opts ...grpc.CallOption) (*MsgUnbondValidatorResponse, error) { + out := new(MsgUnbondValidatorResponse) + err := c.cc.Invoke(ctx, Msg_UnbondValidator_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) TokenizeShares(ctx context.Context, in *MsgTokenizeShares, opts ...grpc.CallOption) (*MsgTokenizeSharesResponse, error) { + out := new(MsgTokenizeSharesResponse) + err := c.cc.Invoke(ctx, Msg_TokenizeShares_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RedeemTokensForShares(ctx context.Context, in *MsgRedeemTokensForShares, opts ...grpc.CallOption) (*MsgRedeemTokensForSharesResponse, error) { + out := new(MsgRedeemTokensForSharesResponse) + err := c.cc.Invoke(ctx, Msg_RedeemTokensForShares_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) TransferTokenizeShareRecord(ctx context.Context, in *MsgTransferTokenizeShareRecord, opts ...grpc.CallOption) (*MsgTransferTokenizeShareRecordResponse, error) { + out := new(MsgTransferTokenizeShareRecordResponse) + err := c.cc.Invoke(ctx, Msg_TransferTokenizeShareRecord_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) DisableTokenizeShares(ctx context.Context, in *MsgDisableTokenizeShares, opts ...grpc.CallOption) (*MsgDisableTokenizeSharesResponse, error) { + out := new(MsgDisableTokenizeSharesResponse) + err := c.cc.Invoke(ctx, Msg_DisableTokenizeShares_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) EnableTokenizeShares(ctx context.Context, in *MsgEnableTokenizeShares, opts ...grpc.CallOption) (*MsgEnableTokenizeSharesResponse, error) { + out := new(MsgEnableTokenizeSharesResponse) + err := c.cc.Invoke(ctx, Msg_EnableTokenizeShares_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ValidatorBond(ctx context.Context, in *MsgValidatorBond, opts ...grpc.CallOption) (*MsgValidatorBondResponse, error) { + out := new(MsgValidatorBondResponse) + err := c.cc.Invoke(ctx, Msg_ValidatorBond_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. // All implementations must embed UnimplementedMsgServer // for forward compatibility @@ -153,6 +243,26 @@ type MsgServer interface { // parameters. // Since: cosmos-sdk 0.47 UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) + // UnbondValidator defines a method for performing the status transition for a validator + // from bonded to unbonding + // This allows a validator to stop their services and jail themselves without + // experiencing a slash + UnbondValidator(context.Context, *MsgUnbondValidator) (*MsgUnbondValidatorResponse, error) + // TokenizeShares defines a method for tokenizing shares from a validator. + TokenizeShares(context.Context, *MsgTokenizeShares) (*MsgTokenizeSharesResponse, error) + // RedeemTokensForShares defines a method for redeeming tokens from a validator for + // shares. + RedeemTokensForShares(context.Context, *MsgRedeemTokensForShares) (*MsgRedeemTokensForSharesResponse, error) + // TransferTokenizeShareRecord defines a method to transfer ownership of + // TokenizeShareRecord + TransferTokenizeShareRecord(context.Context, *MsgTransferTokenizeShareRecord) (*MsgTransferTokenizeShareRecordResponse, error) + // DisableTokenizeShares defines a method to prevent the tokenization of an addresses stake + DisableTokenizeShares(context.Context, *MsgDisableTokenizeShares) (*MsgDisableTokenizeSharesResponse, error) + // EnableTokenizeShares defines a method to re-enable the tokenization of an addresseses stake + // after it has been disabled + EnableTokenizeShares(context.Context, *MsgEnableTokenizeShares) (*MsgEnableTokenizeSharesResponse, error) + // ValidatorBond defines a method for performing a validator self-bond + ValidatorBond(context.Context, *MsgValidatorBond) (*MsgValidatorBondResponse, error) mustEmbedUnimplementedMsgServer() } @@ -181,6 +291,27 @@ func (UnimplementedMsgServer) CancelUnbondingDelegation(context.Context, *MsgCan func (UnimplementedMsgServer) UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") } +func (UnimplementedMsgServer) UnbondValidator(context.Context, *MsgUnbondValidator) (*MsgUnbondValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UnbondValidator not implemented") +} +func (UnimplementedMsgServer) TokenizeShares(context.Context, *MsgTokenizeShares) (*MsgTokenizeSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenizeShares not implemented") +} +func (UnimplementedMsgServer) RedeemTokensForShares(context.Context, *MsgRedeemTokensForShares) (*MsgRedeemTokensForSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RedeemTokensForShares not implemented") +} +func (UnimplementedMsgServer) TransferTokenizeShareRecord(context.Context, *MsgTransferTokenizeShareRecord) (*MsgTransferTokenizeShareRecordResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TransferTokenizeShareRecord not implemented") +} +func (UnimplementedMsgServer) DisableTokenizeShares(context.Context, *MsgDisableTokenizeShares) (*MsgDisableTokenizeSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DisableTokenizeShares not implemented") +} +func (UnimplementedMsgServer) EnableTokenizeShares(context.Context, *MsgEnableTokenizeShares) (*MsgEnableTokenizeSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EnableTokenizeShares not implemented") +} +func (UnimplementedMsgServer) ValidatorBond(context.Context, *MsgValidatorBond) (*MsgValidatorBondResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ValidatorBond not implemented") +} func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {} // UnsafeMsgServer may be embedded to opt out of forward compatibility for this service. @@ -320,6 +451,132 @@ func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } +func _Msg_UnbondValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUnbondValidator) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UnbondValidator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UnbondValidator_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UnbondValidator(ctx, req.(*MsgUnbondValidator)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_TokenizeShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgTokenizeShares) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).TokenizeShares(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_TokenizeShares_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).TokenizeShares(ctx, req.(*MsgTokenizeShares)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RedeemTokensForShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRedeemTokensForShares) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RedeemTokensForShares(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_RedeemTokensForShares_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RedeemTokensForShares(ctx, req.(*MsgRedeemTokensForShares)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_TransferTokenizeShareRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgTransferTokenizeShareRecord) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).TransferTokenizeShareRecord(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_TransferTokenizeShareRecord_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).TransferTokenizeShareRecord(ctx, req.(*MsgTransferTokenizeShareRecord)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_DisableTokenizeShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgDisableTokenizeShares) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).DisableTokenizeShares(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_DisableTokenizeShares_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).DisableTokenizeShares(ctx, req.(*MsgDisableTokenizeShares)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_EnableTokenizeShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgEnableTokenizeShares) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).EnableTokenizeShares(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_EnableTokenizeShares_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).EnableTokenizeShares(ctx, req.(*MsgEnableTokenizeShares)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ValidatorBond_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgValidatorBond) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ValidatorBond(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_ValidatorBond_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ValidatorBond(ctx, req.(*MsgValidatorBond)) + } + return interceptor(ctx, in, info, handler) +} + // Msg_ServiceDesc is the grpc.ServiceDesc for Msg service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -355,6 +612,34 @@ var Msg_ServiceDesc = grpc.ServiceDesc{ MethodName: "UpdateParams", Handler: _Msg_UpdateParams_Handler, }, + { + MethodName: "UnbondValidator", + Handler: _Msg_UnbondValidator_Handler, + }, + { + MethodName: "TokenizeShares", + Handler: _Msg_TokenizeShares_Handler, + }, + { + MethodName: "RedeemTokensForShares", + Handler: _Msg_RedeemTokensForShares_Handler, + }, + { + MethodName: "TransferTokenizeShareRecord", + Handler: _Msg_TransferTokenizeShareRecord_Handler, + }, + { + MethodName: "DisableTokenizeShares", + Handler: _Msg_DisableTokenizeShares_Handler, + }, + { + MethodName: "EnableTokenizeShares", + Handler: _Msg_EnableTokenizeShares_Handler, + }, + { + MethodName: "ValidatorBond", + Handler: _Msg_ValidatorBond_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "cosmos/staking/v1beta1/tx.proto", diff --git a/proto/cosmos/distribution/v1beta1/distribution.proto b/proto/cosmos/distribution/v1beta1/distribution.proto index 226003dab4e1..ce7e3e342c3e 100644 --- a/proto/cosmos/distribution/v1beta1/distribution.proto +++ b/proto/cosmos/distribution/v1beta1/distribution.proto @@ -122,6 +122,17 @@ message FeePool { ]; } +// TokenizeShareRecordReward represents the properties of tokenize share +message TokenizeShareRecordReward { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = true; + + uint64 record_id = 1; + + repeated cosmos.base.v1beta1.DecCoin reward = 2 + [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; +} + // CommunityPoolSpendProposal details a proposal for use of community funds, // together with how many coins are proposed to be spent, and to which // recipient account. diff --git a/proto/cosmos/distribution/v1beta1/query.proto b/proto/cosmos/distribution/v1beta1/query.proto index 4788467d9fd3..ce1e110d4636 100644 --- a/proto/cosmos/distribution/v1beta1/query.proto +++ b/proto/cosmos/distribution/v1beta1/query.proto @@ -70,6 +70,12 @@ service Query { rpc CommunityPool(QueryCommunityPoolRequest) returns (QueryCommunityPoolResponse) { option (google.api.http).get = "/cosmos/distribution/v1beta1/community_pool"; } + + // TokenizeShareRecordReward queries the tokenize share record rewards + rpc TokenizeShareRecordReward(QueryTokenizeShareRecordRewardRequest) + returns (QueryTokenizeShareRecordRewardResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/{owner_address}/tokenize_share_record_rewards"; + } } // QueryParamsRequest is the request type for the Query/Params RPC method. @@ -254,3 +260,22 @@ message QueryCommunityPoolResponse { (amino.dont_omitempty) = true ]; } + +// QueryTokenizeShareRecordRewardRequest is the request type for the Query/TokenizeShareRecordReward RPC +// method. +message QueryTokenizeShareRecordRewardRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string owner_address = 1 [(gogoproto.moretags) = "yaml:\"owner_address\""]; +} + +// QueryTokenizeShareRecordRewardResponse is the response type for the Query/TokenizeShareRecordReward +// RPC method. +message QueryTokenizeShareRecordRewardResponse { + // rewards defines all the rewards accrued by a delegator. + repeated TokenizeShareRecordReward rewards = 1 [(gogoproto.nullable) = false]; + // total defines the sum of all the rewards. + repeated cosmos.base.v1beta1.DecCoin total = 2 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins"]; +} diff --git a/proto/cosmos/distribution/v1beta1/tx.proto b/proto/cosmos/distribution/v1beta1/tx.proto index 957747cf4332..0162bcaf8317 100644 --- a/proto/cosmos/distribution/v1beta1/tx.proto +++ b/proto/cosmos/distribution/v1beta1/tx.proto @@ -44,6 +44,14 @@ service Msg { // // Since: cosmos-sdk 0.47 rpc CommunityPoolSpend(MsgCommunityPoolSpend) returns (MsgCommunityPoolSpendResponse); + + // WithdrawTokenizeShareRecordReward defines a method to withdraw reward for an owning TokenizeShareRecord + rpc WithdrawTokenizeShareRecordReward(MsgWithdrawTokenizeShareRecordReward) + returns (MsgWithdrawTokenizeShareRecordRewardResponse); + + // WithdrawAllTokenizeShareRecordReward defines a method to withdraw reward for all owning TokenizeShareRecord + rpc WithdrawAllTokenizeShareRecordReward(MsgWithdrawAllTokenizeShareRecordReward) + returns (MsgWithdrawAllTokenizeShareRecordRewardResponse); } // MsgSetWithdrawAddress sets the withdraw address for @@ -162,8 +170,8 @@ message MsgCommunityPoolSpend { option (amino.name) = "cosmos-sdk/distr/MsgCommunityPoolSpend"; // authority is the address that controls the module (defaults to x/gov unless overwritten). - string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string recipient = 2; + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string recipient = 2; repeated cosmos.base.v1beta1.Coin amount = 3 [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true, @@ -171,6 +179,30 @@ message MsgCommunityPoolSpend { ]; } +// MsgWithdrawTokenizeShareRecordReward withdraws tokenize share rewards for a specific record +message MsgWithdrawTokenizeShareRecordReward { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string owner_address = 1 [(gogoproto.moretags) = "yaml:\"owner_address\""]; + uint64 record_id = 2; +} + +// MsgWithdrawTokenizeShareRecordReward defines the Msg/WithdrawTokenizeShareRecordReward response type. +message MsgWithdrawTokenizeShareRecordRewardResponse {} + +// MsgWithdrawAllTokenizeShareRecordReward withdraws tokenize share rewards or all +// records owned by the designated owner +message MsgWithdrawAllTokenizeShareRecordReward { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string owner_address = 1 [(gogoproto.moretags) = "yaml:\"owner_address\""]; +} + +// MsgWithdrawAllTokenizeShareRecordRewardResponse defines the Msg/WithdrawTokenizeShareRecordReward response type. +message MsgWithdrawAllTokenizeShareRecordRewardResponse {} + // MsgCommunityPoolSpendResponse defines the response to executing a // MsgCommunityPoolSpend message. // diff --git a/proto/cosmos/staking/v1beta1/genesis.proto b/proto/cosmos/staking/v1beta1/genesis.proto index 482d50ccb1aa..49e7c180478d 100644 --- a/proto/cosmos/staking/v1beta1/genesis.proto +++ b/proto/cosmos/staking/v1beta1/genesis.proto @@ -7,6 +7,7 @@ import "gogoproto/gogo.proto"; import "cosmos/staking/v1beta1/staking.proto"; import "cosmos_proto/cosmos.proto"; import "amino/amino.proto"; +import "google/protobuf/timestamp.proto"; // GenesisState defines the staking module's genesis state. message GenesisState { @@ -38,6 +39,33 @@ message GenesisState { repeated Redelegation redelegations = 7 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; bool exported = 8; + + // store tokenize share records to provide reward to record owners + repeated TokenizeShareRecord tokenize_share_records = 9 [(gogoproto.nullable) = false]; + + // last tokenize share record id, used for next share record id calculation + uint64 last_tokenize_share_record_id = 10; + + // total number of liquid staked tokens at genesis + bytes total_liquid_staked_tokens = 11 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.moretags) = "yaml:\"total_liquid_staked_tokens\"", + (gogoproto.nullable) = false + ]; + + // tokenize shares locks at genesis + repeated TokenizeShareLock tokenize_share_locks = 12 [(gogoproto.nullable) = false]; +} + +// TokenizeSharesLock required for specifying account locks at genesis +message TokenizeShareLock { + // Address of the account that is locked + string address = 1; + // Status of the lock (LOCKED or LOCK_EXPIRING) + string status = 2; + // Completion time if the lock is expiring + google.protobuf.Timestamp completion_time = 3 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.moretags) = "yaml:\"completion_time\""]; } // LastValidatorPower required for validator set update logic. diff --git a/proto/cosmos/staking/v1beta1/query.proto b/proto/cosmos/staking/v1beta1/query.proto index 06eb5551c98a..e0662b3ee9c9 100644 --- a/proto/cosmos/staking/v1beta1/query.proto +++ b/proto/cosmos/staking/v1beta1/query.proto @@ -5,6 +5,7 @@ import "cosmos/base/query/v1beta1/pagination.proto"; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "cosmos/staking/v1beta1/staking.proto"; +import "cosmos/base/v1beta1/coin.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/query/v1/query.proto"; import "amino/amino.proto"; @@ -111,6 +112,50 @@ service Query { "{validator_addr}"; } + // Query for individual tokenize share record information by share by id + rpc TokenizeShareRecordById(QueryTokenizeShareRecordByIdRequest) returns (QueryTokenizeShareRecordByIdResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/tokenize_share_record_by_id/{id}"; + } + + // Query for individual tokenize share record information by share denom + rpc TokenizeShareRecordByDenom(QueryTokenizeShareRecordByDenomRequest) + returns (QueryTokenizeShareRecordByDenomResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/tokenize_share_record_by_denom/{denom}"; + } + + // Query tokenize share records by address + rpc TokenizeShareRecordsOwned(QueryTokenizeShareRecordsOwnedRequest) + returns (QueryTokenizeShareRecordsOwnedResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/tokenize_share_record_owned/{owner}"; + } + + // Query for all tokenize share records + rpc AllTokenizeShareRecords(QueryAllTokenizeShareRecordsRequest) returns (QueryAllTokenizeShareRecordsResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/tokenize_share_records"; + } + + // Query for last tokenize share record id + rpc LastTokenizeShareRecordId(QueryLastTokenizeShareRecordIdRequest) + returns (QueryLastTokenizeShareRecordIdResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/last_tokenize_share_record_id"; + } + + // Query for total tokenized staked assets + rpc TotalTokenizeSharedAssets(QueryTotalTokenizeSharedAssetsRequest) + returns (QueryTotalTokenizeSharedAssetsResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/total_tokenize_shared_assets"; + } + + // Query for total liquid staked (including tokenized shares or owned by an liquid staking provider) + rpc TotalLiquidStaked(QueryTotalLiquidStaked) returns (QueryTotalLiquidStakedResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/total_liquid_staked"; + } + + // Query tokenize share locks + rpc TokenizeShareLockInfo(QueryTokenizeShareLockInfo) returns (QueryTokenizeShareLockInfoResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/tokenize_share_lock_info/{address}"; + } + // HistoricalInfo queries the historical info for given height. rpc HistoricalInfo(QueryHistoricalInfoRequest) returns (QueryHistoricalInfoResponse) { option (cosmos.query.v1.module_query_safe) = true; @@ -385,3 +430,96 @@ message QueryParamsResponse { // params holds all the parameters of this module. Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } + +// QueryTokenizeShareRecordByIdRequest is request type for the +// Query/QueryTokenizeShareRecordById RPC method. +message QueryTokenizeShareRecordByIdRequest { + uint64 id = 1; +} + +// QueryTokenizeShareRecordByIdRequest is response type for the +// Query/QueryTokenizeShareRecordById RPC method. +message QueryTokenizeShareRecordByIdResponse { + TokenizeShareRecord record = 1 [(gogoproto.nullable) = false]; +} + +// QueryTokenizeShareRecordByDenomRequest is request type for the +// Query/QueryTokenizeShareRecordByDenom RPC method. +message QueryTokenizeShareRecordByDenomRequest { + string denom = 1; +} + +// QueryTokenizeShareRecordByDenomResponse is response type for the +// Query/QueryTokenizeShareRecordByDenom RPC method. +message QueryTokenizeShareRecordByDenomResponse { + TokenizeShareRecord record = 1 [(gogoproto.nullable) = false]; +} + +// QueryTokenizeShareRecordsOwnedRequest is request type for the +// Query/QueryTokenizeShareRecordsOwned RPC method. +message QueryTokenizeShareRecordsOwnedRequest { + string owner = 1; +} + +// QueryTokenizeShareRecordsOwnedResponse is response type for the +// Query/QueryTokenizeShareRecordsOwned RPC method. +message QueryTokenizeShareRecordsOwnedResponse { + repeated TokenizeShareRecord records = 1 [(gogoproto.nullable) = false]; +} + +// QueryAllTokenizeShareRecordsRequest is request type for the +// Query/QueryAllTokenizeShareRecords RPC method. +message QueryAllTokenizeShareRecordsRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryAllTokenizeShareRecordsResponse is response type for the +// Query/QueryAllTokenizeShareRecords RPC method. +message QueryAllTokenizeShareRecordsResponse { + repeated TokenizeShareRecord records = 1 [(gogoproto.nullable) = false]; + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryLastTokenizeShareRecordIdRequest is request type for the +// Query/QueryLastTokenizeShareRecordId RPC method. +message QueryLastTokenizeShareRecordIdRequest {} + +// QueryLastTokenizeShareRecordIdResponse is response type for the +// Query/QueryLastTokenizeShareRecordId RPC method. +message QueryLastTokenizeShareRecordIdResponse { + uint64 id = 1; +} + +// QueryTotalTokenizeSharedAssetsRequest is request type for the +// Query/QueryTotalTokenizeSharedAssets RPC method. +message QueryTotalTokenizeSharedAssetsRequest {} + +// QueryTotalTokenizeSharedAssetsResponse is response type for the +// Query/QueryTotalTokenizeSharedAssets RPC method. +message QueryTotalTokenizeSharedAssetsResponse { + cosmos.base.v1beta1.Coin value = 1 [(gogoproto.nullable) = false]; +} + +// QueryTotalLiquidStakedRequest is request type for the +// Query/QueryQueryTotalLiquidStaked RPC method. +message QueryTotalLiquidStaked {} + +// QueryTotalLiquidStakedResponse is response type for the +// Query/QueryQueryTotalLiquidStaked RPC method. +message QueryTotalLiquidStakedResponse { + string tokens = 1; +} + +// QueryTokenizeShareLockInfo queries the tokenize share lock information +// associated with given account +message QueryTokenizeShareLockInfo { + string address = 1; +} +// QueryTokenizeShareLockInfoResponse is the response from the +// QueryTokenizeShareLockInfo query +message QueryTokenizeShareLockInfoResponse { + string status = 1; + string expiration_time = 2; +} \ No newline at end of file diff --git a/proto/cosmos/staking/v1beta1/staking.proto b/proto/cosmos/staking/v1beta1/staking.proto index e7620c557ee8..40b12023fecb 100644 --- a/proto/cosmos/staking/v1beta1/staking.proto +++ b/proto/cosmos/staking/v1beta1/staking.proto @@ -121,10 +121,9 @@ message Validator { [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; // commission defines the commission parameters. Commission commission = 10 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - // min_self_delegation is the validator's self declared minimum self delegation. - // - // Since: cosmos-sdk 0.46 + // Deprecated: This field has been deprecated with LSM in favor of the validator bond string min_self_delegation = 11 [ + deprecated = true, (cosmos_proto.scalar) = "cosmos.Int", (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false @@ -135,6 +134,19 @@ message Validator { // list of unbonding ids, each uniquely identifing an unbonding of this validator repeated uint64 unbonding_ids = 13; + + // Number of shares self bonded from the validator + string validator_bond_shares = 14 [ + (gogoproto.moretags) = "yaml:\"validator_bond_shares\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // Number of shares either tokenized or owned by a liquid staking provider + string liquid_shares = 15 [ + (gogoproto.moretags) = "yaml:\"liquid_shares\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; } // BondStatus is the status of a validator. @@ -213,6 +225,8 @@ message Delegation { (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false ]; + // has this delegation been marked as a validator self bond. + bool validator_bond = 4; } // UnbondingDelegation stores all of a single delegator's unbonding bonds @@ -330,6 +344,28 @@ message Params { (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false ]; + + // validator_bond_factor is required as a safety check for tokenizing shares and + // delegations from liquid staking providers + string validator_bond_factor = 7 [ + (gogoproto.moretags) = "yaml:\"validator_bond_factor\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // global_liquid_staking_cap represents a cap on the portion of stake that + // comes from liquid staking providers + string global_liquid_staking_cap = 8 [ + (gogoproto.moretags) = "yaml:\"global_liquid_staking_cap\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // validator_liquid_staking_cap represents a cap on the portion of stake that + // comes from liquid staking providers for a specific validator + string validator_liquid_staking_cap = 9 [ + (gogoproto.moretags) = "yaml:\"validator_liquid_staking_cap\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; } // DelegationResponse is equivalent to Delegation except that it contains a @@ -403,3 +439,34 @@ enum Infraction { message ValidatorUpdates { repeated tendermint.abci.ValidatorUpdate updates = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } + +// TokenizeShareRecord represents a tokenized delegation +message TokenizeShareRecord { + option (gogoproto.equal) = true; + + uint64 id = 1; + string owner = 2; + string module_account = 3; // module account take the role of delegator + string validator = 4; // validator delegated to for tokenize share record creation +} + +// PendingTokenizeShareAuthorizations stores a list of addresses that have their +// tokenize share enablement in progress +message PendingTokenizeShareAuthorizations { + repeated string addresses = 1; +} + +// TokenizeShareLockStatus indicates whether the address is able to tokenize shares +enum TokenizeShareLockStatus { + option (gogoproto.goproto_enum_prefix) = false; + + // UNSPECIFIED defines an empty tokenize share lock status + TOKENIZE_SHARE_LOCK_STATUS_UNSPECIFIED = 0; + // LOCKED indicates the account is locked and cannot tokenize shares + TOKENIZE_SHARE_LOCK_STATUS_LOCKED = 1; + // UNLOCKED indicates the account is unlocked and can tokenize shares + TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED = 2; + // LOCK_EXPIRING indicates the account is unable to tokenize shares, but + // will be able to tokenize shortly (after 1 unbonding period) + TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING = 3; +} \ No newline at end of file diff --git a/proto/cosmos/staking/v1beta1/tx.proto b/proto/cosmos/staking/v1beta1/tx.proto index 42e2218eaf33..237dadfb0599 100644 --- a/proto/cosmos/staking/v1beta1/tx.proto +++ b/proto/cosmos/staking/v1beta1/tx.proto @@ -45,6 +45,33 @@ service Msg { // parameters. // Since: cosmos-sdk 0.47 rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + + // UnbondValidator defines a method for performing the status transition for a validator + // from bonded to unbonding + // This allows a validator to stop their services and jail themselves without + // experiencing a slash + rpc UnbondValidator(MsgUnbondValidator) returns (MsgUnbondValidatorResponse); + + // TokenizeShares defines a method for tokenizing shares from a validator. + rpc TokenizeShares(MsgTokenizeShares) returns (MsgTokenizeSharesResponse); + + // RedeemTokensForShares defines a method for redeeming tokens from a validator for + // shares. + rpc RedeemTokensForShares(MsgRedeemTokensForShares) returns (MsgRedeemTokensForSharesResponse); + + // TransferTokenizeShareRecord defines a method to transfer ownership of + // TokenizeShareRecord + rpc TransferTokenizeShareRecord(MsgTransferTokenizeShareRecord) returns (MsgTransferTokenizeShareRecordResponse); + + // DisableTokenizeShares defines a method to prevent the tokenization of an addresses stake + rpc DisableTokenizeShares(MsgDisableTokenizeShares) returns (MsgDisableTokenizeSharesResponse); + + // EnableTokenizeShares defines a method to re-enable the tokenization of an addresseses stake + // after it has been disabled + rpc EnableTokenizeShares(MsgEnableTokenizeShares) returns (MsgEnableTokenizeSharesResponse); + + // ValidatorBond defines a method for performing a validator self-bond + rpc ValidatorBond(MsgValidatorBond) returns (MsgValidatorBondResponse); } // MsgCreateValidator defines a SDK message for creating a new validator. @@ -59,9 +86,11 @@ message MsgCreateValidator { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - Description description = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - CommissionRates commission = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - string min_self_delegation = 3 [ + Description description = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + CommissionRates commission = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // Deprecated: This field has been deprecated with LSM in favor of the validator bond + string min_self_delegation = 3 [ + deprecated = true, (cosmos_proto.scalar) = "cosmos.Int", (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false @@ -92,8 +121,13 @@ message MsgEditValidator { // REF: #2373 string commission_rate = 3 [(cosmos_proto.scalar) = "cosmos.Dec", (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec"]; - string min_self_delegation = 4 - [(cosmos_proto.scalar) = "cosmos.Int", (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int"]; + // Deprecated: This field has been deprecated with LSM in favor of the validator bond + string min_self_delegation = 4 [ + deprecated = true, + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.nullable) = false + ]; } // MsgEditValidatorResponse defines the Msg/EditValidator response type. @@ -199,3 +233,93 @@ message MsgUpdateParams { // // Since: cosmos-sdk 0.47 message MsgUpdateParamsResponse {}; + +// MsgUnbondValidator defines a method for performing the status transition for +// a validator from bonded to unbonded +// This allows a validator to stop their services and jail themselves without +// experiencing a slash +message MsgUnbondValidator { + string validator_address = 1 [(gogoproto.moretags) = "yaml:\"address\""]; +} +// MsgUnbondValidatorResponse defines the Msg/UnbondValidator response type. +message MsgUnbondValidatorResponse {} + +// MsgTokenizeShares tokenizes a delegation +message MsgTokenizeShares { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; + string tokenized_share_owner = 4; +} + +// MsgTokenizeSharesResponse defines the Msg/MsgTokenizeShares response type. +message MsgTokenizeSharesResponse { + cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false]; +} + +// MsgRedeemTokensForShares redeems a tokenized share back into a native delegation +message MsgRedeemTokensForShares { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + cosmos.base.v1beta1.Coin amount = 2 [(gogoproto.nullable) = false]; +} + +// MsgRedeemTokensForSharesResponse defines the Msg/MsgRedeemTokensForShares response type. +message MsgRedeemTokensForSharesResponse { + cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false]; +} + +// MsgTransferTokenizeShareRecord transfer a tokenize share record +message MsgTransferTokenizeShareRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + uint64 tokenize_share_record_id = 1; + string sender = 2; + string new_owner = 3; +} + +// MsgTransferTokenizeShareRecordResponse defines the Msg/MsgTransferTokenizeShareRecord response type. +message MsgTransferTokenizeShareRecordResponse {} + +// MsgDisableTokenizeShares prevents the tokenization of shares for a given address +message MsgDisableTokenizeShares { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; +} + +// MsgDisableTokenizeSharesResponse defines the Msg/DisableTokenizeShares response type. +message MsgDisableTokenizeSharesResponse {} + +// MsgEnableTokenizeShares re-enables tokenization of shares for a given address +message MsgEnableTokenizeShares { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; +} + +// MsgEnableTokenizeSharesResponse defines the Msg/EnableTokenizeShares response type. +message MsgEnableTokenizeSharesResponse { + google.protobuf.Timestamp completion_time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} + +// MsgValidatorBond defines a SDK message for performing validator self-bond of delegated coins +// from a delegator to a validator. +message MsgValidatorBond { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""]; +} + +// MsgValidatorBondResponse defines the Msg/ValidatorBond response type. +message MsgValidatorBondResponse {} \ No newline at end of file diff --git a/simapp/simd/cmd/testnet.go b/simapp/simd/cmd/testnet.go index 58a6223c89aa..c12b48400409 100644 --- a/simapp/simd/cmd/testnet.go +++ b/simapp/simd/cmd/testnet.go @@ -306,7 +306,6 @@ func initTestnetFiles( sdk.NewCoin(sdk.DefaultBondDenom, valTokens), stakingtypes.NewDescription(nodeDirName, "", "", "", ""), stakingtypes.NewCommissionRates(math.LegacyOneDec(), math.LegacyOneDec(), math.LegacyOneDec()), - math.OneInt(), ) if err != nil { return err diff --git a/tests/e2e/staking/suite.go b/tests/e2e/staking/suite.go index 1b60e726b04f..05b806cc3054 100644 --- a/tests/e2e/staking/suite.go +++ b/tests/e2e/staking/suite.go @@ -137,7 +137,6 @@ func (s *E2ETestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=0.5", cli.FlagCommissionRate), fmt.Sprintf("--%s=1.0", cli.FlagCommissionMaxRate), fmt.Sprintf("--%s=0.1", cli.FlagCommissionMaxChangeRate), - fmt.Sprintf("--%s=1", cli.FlagMinSelfDelegation), fmt.Sprintf("--%s=%s", flags.FlagFrom, newAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), @@ -156,7 +155,6 @@ func (s *E2ETestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=0.5", cli.FlagCommissionRate), fmt.Sprintf("--%s=1.0", cli.FlagCommissionMaxRate), fmt.Sprintf("--%s=0.1", cli.FlagCommissionMaxChangeRate), - fmt.Sprintf("--%s=1", cli.FlagMinSelfDelegation), fmt.Sprintf("--%s=%s", flags.FlagFrom, newAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), @@ -176,7 +174,6 @@ func (s *E2ETestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=0.5", cli.FlagCommissionRate), fmt.Sprintf("--%s=1.0", cli.FlagCommissionMaxRate), fmt.Sprintf("--%s=0.1", cli.FlagCommissionMaxChangeRate), - fmt.Sprintf("--%s=1", cli.FlagMinSelfDelegation), fmt.Sprintf("--%s=%s", flags.FlagFrom, newAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), @@ -197,7 +194,6 @@ func (s *E2ETestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=0.5", cli.FlagCommissionRate), fmt.Sprintf("--%s=1.0", cli.FlagCommissionMaxRate), fmt.Sprintf("--%s=0.1", cli.FlagCommissionMaxChangeRate), - fmt.Sprintf("--%s=1", cli.FlagMinSelfDelegation), fmt.Sprintf("--%s=%s", flags.FlagFrom, newAddr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), diff --git a/tests/integration/genutil/gentx_test.go b/tests/integration/genutil/gentx_test.go index 9562fd6b24e0..dbde43bfdffb 100644 --- a/tests/integration/genutil/gentx_test.go +++ b/tests/integration/genutil/gentx_test.go @@ -10,7 +10,6 @@ import ( tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/stretchr/testify/suite" - "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/testutil/configurator" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" @@ -80,12 +79,11 @@ func (suite *GenTxTestSuite) SetupTest() { suite.baseApp = app.BaseApp amount := sdk.NewInt64Coin(sdk.DefaultBondDenom, 50) - one := math.OneInt() suite.msg1, err = stakingtypes.NewMsgCreateValidator( - sdk.ValAddress(pk1.Address()), pk1, amount, desc, comm, one) + sdk.ValAddress(pk1.Address()), pk1, amount, desc, comm) suite.NoError(err) suite.msg2, err = stakingtypes.NewMsgCreateValidator( - sdk.ValAddress(pk2.Address()), pk1, amount, desc, comm, one) + sdk.ValAddress(pk2.Address()), pk1, amount, desc, comm) suite.NoError(err) } diff --git a/testutil/network/network.go b/testutil/network/network.go index ef065d9e68b8..96d52955c4e0 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -497,7 +497,6 @@ func New(l Logger, baseDir string, cfg Config) (*Network, error) { sdk.NewCoin(cfg.BondDenom, cfg.BondedTokens), stakingtypes.NewDescription(nodeDirName, "", "", "", ""), stakingtypes.NewCommissionRates(commission, math.LegacyOneDec(), math.LegacyOneDec()), - math.OneInt(), ) if err != nil { return nil, err diff --git a/x/distribution/keeper/grpc_query.go b/x/distribution/keeper/grpc_query.go index b63ac4328938..33ef1499b5ea 100644 --- a/x/distribution/keeper/grpc_query.go +++ b/x/distribution/keeper/grpc_query.go @@ -293,3 +293,14 @@ func (k Querier) CommunityPool(c context.Context, req *types.QueryCommunityPoolR return &types.QueryCommunityPoolResponse{Pool: pool}, nil } + +// TokenizeShareRecordReward returns estimated amount of reward from tokenize share record ownership +func (k Keeper) TokenizeShareRecordReward(c context.Context, req *types.QueryTokenizeShareRecordRewardRequest) (*types.QueryTokenizeShareRecordRewardResponse, error) { + totalRewards := sdk.DecCoins{} + rewards := []types.TokenizeShareRecordReward{} + // TODO add LSM logic + return &types.QueryTokenizeShareRecordRewardResponse{ + Rewards: rewards, + Total: totalRewards, + }, nil +} diff --git a/x/distribution/keeper/keeper.go b/x/distribution/keeper/keeper.go index 807dea8a49d7..236084a0e681 100644 --- a/x/distribution/keeper/keeper.go +++ b/x/distribution/keeper/keeper.go @@ -163,3 +163,22 @@ func (k Keeper) FundCommunityPool(ctx sdk.Context, amount sdk.Coins, sender sdk. return nil } + +func (k Keeper) WithdrawSingleShareRecordReward(ctx sdk.Context, recordID uint64) error { + // TODO add LSM logic + return nil +} + +// withdraw reward for owning TokenizeShareRecord +func (k Keeper) WithdrawTokenizeShareRecordReward(ctx sdk.Context, ownerAddr sdk.AccAddress, recordID uint64) (sdk.Coins, error) { + rewards := sdk.Coins{} + // TODO add LSM logic + return rewards, nil +} + +// withdraw reward for all owning TokenizeShareRecord +func (k Keeper) WithdrawAllTokenizeShareRecordReward(ctx sdk.Context, ownerAddr sdk.AccAddress) (sdk.Coins, error) { + totalRewards := sdk.Coins{} + // TODO add LSM logic + return totalRewards, nil +} diff --git a/x/distribution/keeper/msg_server.go b/x/distribution/keeper/msg_server.go index b38e82d670a9..dae5df0fe548 100644 --- a/x/distribution/keeper/msg_server.go +++ b/x/distribution/keeper/msg_server.go @@ -104,11 +104,11 @@ func (k msgServer) WithdrawValidatorCommission(goCtx context.Context, msg *types func (k msgServer) FundCommunityPool(goCtx context.Context, msg *types.MsgFundCommunityPool) (*types.MsgFundCommunityPoolResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - depositer, err := sdk.AccAddressFromBech32(msg.Depositor) + depositor, err := sdk.AccAddressFromBech32(msg.Depositor) if err != nil { return nil, err } - if err := k.Keeper.FundCommunityPool(ctx, msg.Amount, depositer); err != nil { + if err := k.Keeper.FundCommunityPool(ctx, msg.Amount, depositor); err != nil { return nil, err } @@ -158,3 +158,15 @@ func (k msgServer) CommunityPoolSpend(goCtx context.Context, req *types.MsgCommu return &types.MsgCommunityPoolSpendResponse{}, nil } + +// WithdrawTokenizeShareRecordReward defines a method to withdraw reward for owning TokenizeShareRecord +func (k msgServer) WithdrawTokenizeShareRecordReward(goCtx context.Context, msg *types.MsgWithdrawTokenizeShareRecordReward) (*types.MsgWithdrawTokenizeShareRecordRewardResponse, error) { + // TODO add LSM logic + return &types.MsgWithdrawTokenizeShareRecordRewardResponse{}, nil +} + +// WithdrawAllTokenizeShareRecordReward defines a method to withdraw reward for owning TokenizeShareRecord +func (k msgServer) WithdrawAllTokenizeShareRecordReward(goCtx context.Context, msg *types.MsgWithdrawAllTokenizeShareRecordReward) (*types.MsgWithdrawAllTokenizeShareRecordRewardResponse, error) { + // TODO add LSM logic + return &types.MsgWithdrawAllTokenizeShareRecordRewardResponse{}, nil +} diff --git a/x/distribution/types/distribution.pb.go b/x/distribution/types/distribution.pb.go index 03ce9ef5f426..b1d71354fc9f 100644 --- a/x/distribution/types/distribution.pb.go +++ b/x/distribution/types/distribution.pb.go @@ -428,6 +428,45 @@ func (m *FeePool) GetCommunityPool() github_com_cosmos_cosmos_sdk_types.DecCoins return nil } +// TokenizeShareRecordReward represents the properties of tokenize share +type TokenizeShareRecordReward struct { + RecordId uint64 `protobuf:"varint,1,opt,name=record_id,json=recordId,proto3" json:"record_id,omitempty"` + Reward github_com_cosmos_cosmos_sdk_types.DecCoins `protobuf:"bytes,2,rep,name=reward,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.DecCoins" json:"reward"` +} + +func (m *TokenizeShareRecordReward) Reset() { *m = TokenizeShareRecordReward{} } +func (m *TokenizeShareRecordReward) String() string { return proto.CompactTextString(m) } +func (*TokenizeShareRecordReward) ProtoMessage() {} +func (*TokenizeShareRecordReward) Descriptor() ([]byte, []int) { + return fileDescriptor_cd78a31ea281a992, []int{8} +} +func (m *TokenizeShareRecordReward) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenizeShareRecordReward) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TokenizeShareRecordReward.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 *TokenizeShareRecordReward) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenizeShareRecordReward.Merge(m, src) +} +func (m *TokenizeShareRecordReward) XXX_Size() int { + return m.Size() +} +func (m *TokenizeShareRecordReward) XXX_DiscardUnknown() { + xxx_messageInfo_TokenizeShareRecordReward.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenizeShareRecordReward proto.InternalMessageInfo + // CommunityPoolSpendProposal details a proposal for use of community funds, // together with how many coins are proposed to be spent, and to which // recipient account. @@ -448,7 +487,7 @@ type CommunityPoolSpendProposal struct { func (m *CommunityPoolSpendProposal) Reset() { *m = CommunityPoolSpendProposal{} } func (*CommunityPoolSpendProposal) ProtoMessage() {} func (*CommunityPoolSpendProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_cd78a31ea281a992, []int{8} + return fileDescriptor_cd78a31ea281a992, []int{9} } func (m *CommunityPoolSpendProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -493,7 +532,7 @@ func (m *DelegatorStartingInfo) Reset() { *m = DelegatorStartingInfo{} } func (m *DelegatorStartingInfo) String() string { return proto.CompactTextString(m) } func (*DelegatorStartingInfo) ProtoMessage() {} func (*DelegatorStartingInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_cd78a31ea281a992, []int{9} + return fileDescriptor_cd78a31ea281a992, []int{10} } func (m *DelegatorStartingInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -547,7 +586,7 @@ func (m *DelegationDelegatorReward) Reset() { *m = DelegationDelegatorRe func (m *DelegationDelegatorReward) String() string { return proto.CompactTextString(m) } func (*DelegationDelegatorReward) ProtoMessage() {} func (*DelegationDelegatorReward) Descriptor() ([]byte, []int) { - return fileDescriptor_cd78a31ea281a992, []int{10} + return fileDescriptor_cd78a31ea281a992, []int{11} } func (m *DelegationDelegatorReward) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -590,7 +629,7 @@ func (m *CommunityPoolSpendProposalWithDeposit) Reset() { *m = Community func (m *CommunityPoolSpendProposalWithDeposit) String() string { return proto.CompactTextString(m) } func (*CommunityPoolSpendProposalWithDeposit) ProtoMessage() {} func (*CommunityPoolSpendProposalWithDeposit) Descriptor() ([]byte, []int) { - return fileDescriptor_cd78a31ea281a992, []int{11} + return fileDescriptor_cd78a31ea281a992, []int{12} } func (m *CommunityPoolSpendProposalWithDeposit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -628,6 +667,7 @@ func init() { proto.RegisterType((*ValidatorSlashEvent)(nil), "cosmos.distribution.v1beta1.ValidatorSlashEvent") proto.RegisterType((*ValidatorSlashEvents)(nil), "cosmos.distribution.v1beta1.ValidatorSlashEvents") proto.RegisterType((*FeePool)(nil), "cosmos.distribution.v1beta1.FeePool") + proto.RegisterType((*TokenizeShareRecordReward)(nil), "cosmos.distribution.v1beta1.TokenizeShareRecordReward") proto.RegisterType((*CommunityPoolSpendProposal)(nil), "cosmos.distribution.v1beta1.CommunityPoolSpendProposal") proto.RegisterType((*DelegatorStartingInfo)(nil), "cosmos.distribution.v1beta1.DelegatorStartingInfo") proto.RegisterType((*DelegationDelegatorReward)(nil), "cosmos.distribution.v1beta1.DelegationDelegatorReward") @@ -639,69 +679,73 @@ func init() { } var fileDescriptor_cd78a31ea281a992 = []byte{ - // 992 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0x4f, 0x6f, 0x1b, 0x45, - 0x14, 0xf7, 0x34, 0x8e, 0x93, 0x4c, 0x69, 0x42, 0x27, 0x4e, 0xea, 0xb8, 0x95, 0x6d, 0xad, 0x44, - 0x49, 0x43, 0x63, 0x93, 0x22, 0x24, 0x64, 0x21, 0xa4, 0xd8, 0x0e, 0x82, 0x53, 0xa3, 0x0d, 0x02, - 0xc4, 0x65, 0x35, 0xde, 0x9d, 0xd8, 0xa3, 0xee, 0xce, 0x2c, 0x33, 0x63, 0x27, 0x3d, 0x70, 0xaf, - 0x7a, 0x00, 0x8e, 0x15, 0xa7, 0x08, 0x2e, 0x15, 0xa7, 0x1c, 0xf2, 0x21, 0x2a, 0x4e, 0x55, 0x0f, - 0x80, 0x2a, 0x14, 0x50, 0x72, 0x08, 0xe2, 0x53, 0xa0, 0xd9, 0x19, 0xaf, 0x9d, 0x10, 0xa2, 0x4a, - 0xad, 0xd5, 0x4b, 0xe2, 0x79, 0x6f, 0xf7, 0xfd, 0xfe, 0xcc, 0x9b, 0x37, 0x0b, 0xab, 0x3e, 0x97, - 0x11, 0x97, 0xb5, 0x80, 0x4a, 0x25, 0x68, 0xbb, 0xa7, 0x28, 0x67, 0xb5, 0xfe, 0x5a, 0x9b, 0x28, - 0xbc, 0x76, 0x2a, 0x58, 0x8d, 0x05, 0x57, 0x1c, 0x5d, 0x37, 0xcf, 0x57, 0x4f, 0xa5, 0xec, 0xf3, - 0xc5, 0x7c, 0x87, 0x77, 0x78, 0xf2, 0x5c, 0x4d, 0xff, 0x32, 0xaf, 0x14, 0x4b, 0x16, 0xa2, 0x8d, - 0x25, 0x49, 0x4b, 0xfb, 0x9c, 0xda, 0x92, 0xc5, 0x25, 0x93, 0xf7, 0xcc, 0x8b, 0xb6, 0xbe, 0x49, - 0x5d, 0xc5, 0x11, 0x65, 0xbc, 0x96, 0xfc, 0x35, 0x21, 0x67, 0x7f, 0x02, 0xe6, 0x36, 0xb1, 0xc0, - 0x91, 0x44, 0x18, 0x5e, 0xf1, 0x79, 0x14, 0xf5, 0x18, 0x55, 0xf7, 0x3d, 0x85, 0x77, 0x0b, 0xa0, - 0x02, 0x96, 0x67, 0x1a, 0x1f, 0x3e, 0x39, 0x2c, 0x67, 0x9e, 0x1f, 0x96, 0x6f, 0x76, 0xa8, 0xea, - 0xf6, 0xda, 0x55, 0x9f, 0x47, 0xb6, 0xaa, 0xfd, 0xb7, 0x2a, 0x83, 0x7b, 0x35, 0x75, 0x3f, 0x26, - 0xb2, 0xda, 0x22, 0xfe, 0xb3, 0x83, 0x55, 0x68, 0x41, 0x5b, 0xc4, 0x77, 0xdf, 0x48, 0x4b, 0x7e, - 0x86, 0x77, 0x51, 0x0c, 0xf3, 0x9a, 0xb6, 0xe6, 0x16, 0x73, 0x49, 0x84, 0x27, 0xc8, 0x0e, 0x16, - 0x41, 0xe1, 0x52, 0x82, 0xf4, 0xd1, 0xcb, 0x20, 0x15, 0x80, 0x8b, 0x74, 0xed, 0x4d, 0x5b, 0xda, - 0x4d, 0x2a, 0x23, 0x01, 0x17, 0xda, 0x9c, 0xf5, 0xe4, 0x7f, 0x20, 0x27, 0x5e, 0x09, 0xe4, 0x7c, - 0x52, 0xfc, 0x0c, 0xe6, 0x1d, 0xb8, 0xb0, 0x43, 0x55, 0x37, 0x10, 0x78, 0xc7, 0xc3, 0x41, 0x20, - 0x3c, 0xc2, 0x70, 0x3b, 0x24, 0x41, 0x21, 0x5b, 0x01, 0xcb, 0xd3, 0xee, 0xfc, 0x20, 0xb9, 0x1e, - 0x04, 0x62, 0xc3, 0xa4, 0xea, 0xb7, 0x1e, 0xed, 0x95, 0x33, 0x0f, 0x4f, 0xf6, 0x57, 0x2a, 0x23, - 0xb8, 0xbb, 0xa7, 0xfb, 0xc8, 0xec, 0x93, 0xf3, 0x2b, 0x80, 0xc5, 0xcf, 0x71, 0x48, 0x03, 0xac, - 0xb8, 0xf8, 0x84, 0x4a, 0xc5, 0x05, 0xf5, 0x71, 0x68, 0xc0, 0x25, 0xfa, 0x16, 0xc0, 0x6b, 0x7e, - 0x2f, 0xea, 0x85, 0x58, 0xd1, 0x3e, 0xb1, 0x72, 0x3d, 0x81, 0x15, 0xe5, 0x05, 0x50, 0x99, 0x58, - 0xbe, 0x7c, 0xe7, 0x86, 0xed, 0xd2, 0xaa, 0xf6, 0x6b, 0xd0, 0x6d, 0x5a, 0x50, 0x93, 0x53, 0xd6, - 0xf8, 0x40, 0x5b, 0xf2, 0xf3, 0x9f, 0xe5, 0x77, 0x5e, 0xcc, 0x12, 0xfd, 0x8e, 0x7c, 0x7c, 0xb2, - 0xbf, 0x02, 0xdc, 0x85, 0x21, 0xac, 0x21, 0xe3, 0x6a, 0x50, 0xf4, 0x36, 0x9c, 0x13, 0x64, 0x9b, - 0x08, 0xc2, 0x7c, 0xe2, 0xf9, 0xbc, 0xc7, 0x54, 0xb2, 0xdf, 0x57, 0xdc, 0xd9, 0x34, 0xdc, 0xd4, - 0x51, 0xe7, 0x27, 0x00, 0xaf, 0xa5, 0xc2, 0x9a, 0x3d, 0x21, 0x08, 0x53, 0x03, 0x55, 0x31, 0x9c, - 0x32, 0x4a, 0xe4, 0x98, 0x45, 0x0c, 0x60, 0xd0, 0x22, 0xcc, 0xc5, 0x44, 0x50, 0x6e, 0xba, 0x33, - 0xeb, 0xda, 0x95, 0xf3, 0x08, 0xc0, 0x52, 0xca, 0x72, 0xdd, 0xb7, 0x9a, 0x49, 0xd0, 0xe4, 0x51, - 0x44, 0xa5, 0xa4, 0x9c, 0xa1, 0x3e, 0x84, 0x7e, 0xba, 0x1a, 0x33, 0xdf, 0x11, 0x24, 0xe7, 0x3b, - 0x00, 0xaf, 0xa7, 0xd4, 0xee, 0xf6, 0x94, 0x54, 0x98, 0x05, 0x94, 0x75, 0x5e, 0x9b, 0x89, 0xce, - 0x0f, 0x00, 0xce, 0xa7, 0x8c, 0xb6, 0x42, 0x2c, 0xbb, 0x1b, 0x7d, 0xc2, 0x14, 0xba, 0x05, 0xdf, - 0xec, 0x0f, 0xc2, 0x9e, 0xb5, 0x19, 0x24, 0x36, 0xcf, 0xa5, 0xf1, 0xcd, 0x24, 0x8c, 0xbe, 0x84, - 0xd3, 0xdb, 0x02, 0xfb, 0xfa, 0x04, 0xd8, 0x39, 0xf1, 0x72, 0x13, 0x29, 0xad, 0xa6, 0xed, 0xca, - 0x9f, 0x43, 0x4e, 0xa2, 0xaf, 0xe1, 0xe2, 0x90, 0x9d, 0xd4, 0x09, 0x8f, 0x24, 0x19, 0x6b, 0xdb, - 0xbb, 0xd5, 0x0b, 0xc6, 0x76, 0xf5, 0x9c, 0x92, 0x8d, 0x19, 0x4d, 0xd9, 0x78, 0x93, 0xef, 0x9f, - 0x03, 0x59, 0xcf, 0xea, 0xf3, 0xef, 0x3c, 0x00, 0x70, 0xea, 0x63, 0x42, 0x36, 0x39, 0x0f, 0xd1, - 0x37, 0x70, 0x76, 0x38, 0x8e, 0x63, 0xce, 0xc3, 0x31, 0xef, 0xd9, 0x70, 0xf8, 0x6b, 0x78, 0xe7, - 0xe1, 0x25, 0x58, 0x6c, 0x8e, 0x46, 0xb6, 0x62, 0xc2, 0x02, 0x33, 0xe9, 0x70, 0x88, 0xf2, 0x70, - 0x52, 0x51, 0x15, 0x12, 0x73, 0x49, 0xb8, 0x66, 0x81, 0x2a, 0xf0, 0x72, 0x40, 0xa4, 0x2f, 0x68, - 0x3c, 0xdc, 0x2e, 0x77, 0x34, 0x84, 0x6e, 0xc0, 0x19, 0x41, 0x7c, 0x1a, 0x53, 0xc2, 0x94, 0x99, - 0xc1, 0xee, 0x30, 0x80, 0xba, 0x30, 0x87, 0xa3, 0x64, 0x42, 0x64, 0x13, 0xad, 0x4b, 0xe7, 0x6a, - 0x4d, 0x84, 0xbe, 0x6f, 0x85, 0x2e, 0xbf, 0x80, 0xd0, 0x11, 0x95, 0xb6, 0x7e, 0xfd, 0xf6, 0x83, - 0xbd, 0x72, 0x46, 0x7b, 0xfe, 0xf7, 0x5e, 0x39, 0xf3, 0xcb, 0xc1, 0x6a, 0xd1, 0x02, 0x75, 0x78, - 0x7f, 0x04, 0x87, 0x29, 0x4d, 0x13, 0x38, 0xcf, 0x01, 0x5c, 0x68, 0x91, 0x90, 0x74, 0x92, 0x6d, - 0x53, 0x58, 0x28, 0xca, 0x3a, 0x9f, 0xb2, 0xed, 0x64, 0xb8, 0xc5, 0x82, 0xf4, 0x29, 0xd7, 0x57, - 0xcc, 0x68, 0x1f, 0xcf, 0x0e, 0xc2, 0xb6, 0x8d, 0x5d, 0x38, 0x29, 0x15, 0xbe, 0x47, 0x5e, 0x49, - 0x0f, 0x9b, 0x52, 0xa8, 0x05, 0x73, 0x5d, 0x42, 0x3b, 0x5d, 0xe3, 0x64, 0xb6, 0x71, 0xfb, 0x9f, - 0xc3, 0xf2, 0x9c, 0x2f, 0x88, 0x1e, 0xbb, 0xcc, 0x33, 0xa9, 0x1f, 0x4f, 0xf6, 0x57, 0xce, 0xc6, - 0xac, 0x15, 0x66, 0xe1, 0xfc, 0x01, 0xe0, 0x92, 0x15, 0x47, 0x39, 0x4b, 0x65, 0xda, 0xcb, 0x6c, - 0x03, 0x5e, 0x1d, 0x9e, 0x05, 0x7d, 0x9b, 0x11, 0x29, 0xed, 0x97, 0x41, 0xe1, 0xd9, 0xc1, 0x6a, - 0xde, 0xb2, 0x5a, 0x37, 0x99, 0x2d, 0x25, 0xf4, 0xbc, 0x19, 0x1e, 0x6e, 0x1b, 0x47, 0x0c, 0xe6, - 0xd2, 0xbb, 0x7e, 0x9c, 0x5d, 0x6c, 0x51, 0xea, 0xd3, 0x76, 0x7f, 0x81, 0xf3, 0x1b, 0x80, 0x6f, - 0xfd, 0x7f, 0x23, 0x7f, 0x41, 0x55, 0xb7, 0x45, 0x62, 0x2e, 0xa9, 0x1a, 0x53, 0x4f, 0x2f, 0x8e, - 0xf4, 0xb4, 0x4e, 0xd9, 0x15, 0x2a, 0xc0, 0xa9, 0xc0, 0x00, 0x17, 0x26, 0x93, 0xc4, 0x60, 0x59, - 0xbf, 0x39, 0xe0, 0x7e, 0x71, 0x5f, 0x36, 0xee, 0x3e, 0x3e, 0x2a, 0x81, 0x27, 0x47, 0x25, 0xf0, - 0xf4, 0xa8, 0x04, 0xfe, 0x3a, 0x2a, 0x81, 0xef, 0x8f, 0x4b, 0x99, 0xa7, 0xc7, 0xa5, 0xcc, 0xef, - 0xc7, 0xa5, 0xcc, 0x57, 0x6b, 0x17, 0x7a, 0x77, 0xe6, 0xd3, 0x22, 0xb1, 0xb2, 0x9d, 0x4b, 0xbe, - 0x09, 0xdf, 0xfb, 0x37, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x9e, 0xb6, 0x03, 0xc6, 0x0a, 0x00, 0x00, + // 1044 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0x41, 0x4f, 0x1b, 0x47, + 0x14, 0xf6, 0x04, 0x30, 0x30, 0x69, 0xa0, 0x19, 0x0c, 0x31, 0x26, 0xb2, 0xd1, 0x4a, 0x4d, 0x09, + 0x0d, 0xa6, 0x24, 0xaa, 0x54, 0x59, 0x55, 0x25, 0x6c, 0x53, 0x35, 0xa7, 0xa0, 0x25, 0x6a, 0xab, + 0x5e, 0x56, 0xe3, 0xdd, 0xc1, 0x1e, 0xb1, 0x3b, 0xb3, 0x9d, 0x19, 0x1b, 0x52, 0xa9, 0xf7, 0x28, + 0x87, 0xb6, 0x47, 0xd4, 0x13, 0x6a, 0x2f, 0x51, 0xa5, 0x4a, 0x1c, 0xf8, 0x11, 0x51, 0x4f, 0x51, + 0x0e, 0x6d, 0x15, 0x55, 0xb4, 0x82, 0x03, 0x55, 0x7f, 0x45, 0x35, 0x3b, 0xe3, 0xb5, 0x21, 0x94, + 0xa6, 0x49, 0x50, 0x2e, 0xe0, 0xf7, 0xde, 0xee, 0xfb, 0xbe, 0xef, 0xcd, 0x7b, 0x6f, 0x16, 0x96, + 0x7d, 0x2e, 0x23, 0x2e, 0x17, 0x03, 0x2a, 0x95, 0xa0, 0x8d, 0xb6, 0xa2, 0x9c, 0x2d, 0x76, 0x96, + 0x1a, 0x44, 0xe1, 0xa5, 0x63, 0xce, 0x72, 0x2c, 0xb8, 0xe2, 0x68, 0xc6, 0x3c, 0x5f, 0x3e, 0x16, + 0xb2, 0xcf, 0x17, 0x72, 0x4d, 0xde, 0xe4, 0xc9, 0x73, 0x8b, 0xfa, 0x97, 0x79, 0xa5, 0x50, 0xb4, + 0x10, 0x0d, 0x2c, 0x49, 0x9a, 0xda, 0xe7, 0xd4, 0xa6, 0x2c, 0x4c, 0x9b, 0xb8, 0x67, 0x5e, 0xb4, + 0xf9, 0x4d, 0xe8, 0x32, 0x8e, 0x28, 0xe3, 0x8b, 0xc9, 0x5f, 0xe3, 0x72, 0x76, 0x07, 0x60, 0x76, + 0x15, 0x0b, 0x1c, 0x49, 0x84, 0xe1, 0x25, 0x9f, 0x47, 0x51, 0x9b, 0x51, 0x75, 0xcf, 0x53, 0x78, + 0x2b, 0x0f, 0x66, 0xc1, 0xdc, 0x68, 0xf5, 0x83, 0x47, 0xfb, 0xa5, 0xcc, 0xd3, 0xfd, 0xd2, 0xb5, + 0x26, 0x55, 0xad, 0x76, 0xa3, 0xec, 0xf3, 0xc8, 0x66, 0xb5, 0xff, 0x16, 0x64, 0xb0, 0xb1, 0xa8, + 0xee, 0xc5, 0x44, 0x96, 0xeb, 0xc4, 0x7f, 0xb2, 0xb7, 0x00, 0x2d, 0x68, 0x9d, 0xf8, 0xee, 0x1b, + 0x69, 0xca, 0xbb, 0x78, 0x0b, 0xc5, 0x30, 0xa7, 0x69, 0x6b, 0x6e, 0x31, 0x97, 0x44, 0x78, 0x82, + 0x6c, 0x62, 0x11, 0xe4, 0x2f, 0x24, 0x48, 0x1f, 0xbe, 0x0c, 0x52, 0x1e, 0xb8, 0x48, 0xe7, 0x5e, + 0xb5, 0xa9, 0xdd, 0x24, 0x33, 0x12, 0x70, 0xb2, 0xc1, 0x59, 0x5b, 0x3e, 0x03, 0x39, 0xf0, 0x4a, + 0x20, 0x27, 0x92, 0xe4, 0x27, 0x30, 0x6f, 0xc2, 0xc9, 0x4d, 0xaa, 0x5a, 0x81, 0xc0, 0x9b, 0x1e, + 0x0e, 0x02, 0xe1, 0x11, 0x86, 0x1b, 0x21, 0x09, 0xf2, 0x83, 0xb3, 0x60, 0x6e, 0xc4, 0x9d, 0xe8, + 0x06, 0x97, 0x83, 0x40, 0xac, 0x98, 0x50, 0xe5, 0xfa, 0xf6, 0x4e, 0x29, 0xf3, 0xe0, 0x68, 0x77, + 0x7e, 0xb6, 0x0f, 0x77, 0xeb, 0x78, 0x1f, 0x99, 0x73, 0x72, 0x7e, 0x01, 0xb0, 0xf0, 0x09, 0x0e, + 0x69, 0x80, 0x15, 0x17, 0x1f, 0x53, 0xa9, 0xb8, 0xa0, 0x3e, 0x0e, 0x0d, 0xb8, 0x44, 0x5f, 0x03, + 0x78, 0xc5, 0x6f, 0x47, 0xed, 0x10, 0x2b, 0xda, 0x21, 0x56, 0xae, 0x27, 0xb0, 0xa2, 0x3c, 0x0f, + 0x66, 0x07, 0xe6, 0x2e, 0xde, 0xbc, 0x6a, 0xbb, 0xb4, 0xac, 0xeb, 0xd5, 0xed, 0x36, 0x2d, 0xa8, + 0xc6, 0x29, 0xab, 0xbe, 0xaf, 0x4b, 0xf2, 0xe3, 0x1f, 0xa5, 0x77, 0x9e, 0xaf, 0x24, 0xfa, 0x1d, + 0xf9, 0xf0, 0x68, 0x77, 0x1e, 0xb8, 0x93, 0x3d, 0x58, 0x43, 0xc6, 0xd5, 0xa0, 0xe8, 0x6d, 0x38, + 0x2e, 0xc8, 0x3a, 0x11, 0x84, 0xf9, 0xc4, 0xf3, 0x79, 0x9b, 0xa9, 0xe4, 0xbc, 0x2f, 0xb9, 0x63, + 0xa9, 0xbb, 0xa6, 0xbd, 0xce, 0x0f, 0x00, 0x5e, 0x49, 0x85, 0xd5, 0xda, 0x42, 0x10, 0xa6, 0xba, + 0xaa, 0x62, 0x38, 0x6c, 0x94, 0xc8, 0x73, 0x16, 0xd1, 0x85, 0x41, 0x53, 0x30, 0x1b, 0x13, 0x41, + 0xb9, 0xe9, 0xce, 0x41, 0xd7, 0x5a, 0xce, 0x36, 0x80, 0xc5, 0x94, 0xe5, 0xb2, 0x6f, 0x35, 0x93, + 0xa0, 0xc6, 0xa3, 0x88, 0x4a, 0x49, 0x39, 0x43, 0x1d, 0x08, 0xfd, 0xd4, 0x3a, 0x67, 0xbe, 0x7d, + 0x48, 0xce, 0x37, 0x00, 0xce, 0xa4, 0xd4, 0xee, 0xb4, 0x95, 0x54, 0x98, 0x05, 0x94, 0x35, 0x5f, + 0x5b, 0x11, 0x9d, 0xef, 0x00, 0x9c, 0x48, 0x19, 0xad, 0x85, 0x58, 0xb6, 0x56, 0x3a, 0x84, 0x29, + 0x74, 0x1d, 0xbe, 0xd9, 0xe9, 0xba, 0x3d, 0x5b, 0x66, 0x90, 0x94, 0x79, 0x3c, 0xf5, 0xaf, 0x26, + 0x6e, 0xf4, 0x19, 0x1c, 0x59, 0x17, 0xd8, 0xd7, 0x13, 0x60, 0xf7, 0xc4, 0xcb, 0x6d, 0xa4, 0x34, + 0x9b, 0x2e, 0x57, 0xee, 0x14, 0x72, 0x12, 0x7d, 0x01, 0xa7, 0x7a, 0xec, 0xa4, 0x0e, 0x78, 0x24, + 0x89, 0xd8, 0xb2, 0xbd, 0x5b, 0x3e, 0x63, 0x6d, 0x97, 0x4f, 0x49, 0x59, 0x1d, 0xd5, 0x94, 0x4d, + 0x6d, 0x72, 0x9d, 0x53, 0x20, 0x2b, 0x83, 0x7a, 0xfe, 0x9d, 0xfb, 0x00, 0x0e, 0x7f, 0x44, 0xc8, + 0x2a, 0xe7, 0x21, 0xfa, 0x0a, 0x8e, 0xf5, 0xd6, 0x71, 0xcc, 0x79, 0x78, 0xce, 0x67, 0xd6, 0x5b, + 0xfe, 0x1a, 0xde, 0xf9, 0x09, 0xc0, 0xe9, 0xbb, 0x7c, 0x83, 0x30, 0xfa, 0x25, 0x59, 0x6b, 0x61, + 0x41, 0x5c, 0xe2, 0x73, 0x11, 0xd8, 0x15, 0x37, 0x03, 0x47, 0x45, 0x62, 0x7b, 0xb4, 0x7b, 0x70, + 0x23, 0xc6, 0x71, 0x3b, 0x40, 0x14, 0x66, 0xd3, 0xbd, 0xfe, 0xdf, 0x8c, 0x6f, 0xbd, 0x00, 0x63, + 0xd7, 0x02, 0x54, 0x46, 0xee, 0xef, 0x94, 0x32, 0xdb, 0x3b, 0x25, 0xe0, 0x3c, 0xb8, 0x00, 0x0b, + 0xb5, 0x7e, 0x05, 0x6b, 0x31, 0x61, 0x81, 0xd9, 0xcc, 0x38, 0x44, 0x39, 0x38, 0xa4, 0xa8, 0x0a, + 0x89, 0xb9, 0xd4, 0x5c, 0x63, 0xa0, 0x59, 0x78, 0x31, 0x20, 0xd2, 0x17, 0x34, 0xee, 0xb5, 0x97, + 0xdb, 0xef, 0x42, 0x57, 0x13, 0xa1, 0x34, 0xa6, 0x84, 0x29, 0x73, 0x67, 0xb8, 0x3d, 0x07, 0x6a, + 0xc1, 0x2c, 0x8e, 0x92, 0x8d, 0x36, 0x98, 0x28, 0x9d, 0x3e, 0x55, 0x69, 0x22, 0xf3, 0x3d, 0x2b, + 0x73, 0xee, 0x39, 0x64, 0xf6, 0x9d, 0x8a, 0xcd, 0x5f, 0xb9, 0x61, 0x85, 0x66, 0xfe, 0xda, 0x29, + 0x65, 0x7e, 0xde, 0x5b, 0x28, 0x58, 0xa0, 0x26, 0xef, 0xf4, 0xe1, 0x30, 0xa5, 0x69, 0x02, 0xe7, + 0x29, 0x80, 0x93, 0x75, 0x12, 0x92, 0x66, 0xd2, 0x66, 0x0a, 0x0b, 0x45, 0x59, 0xf3, 0x36, 0x5b, + 0x4f, 0x96, 0x71, 0x2c, 0x48, 0x87, 0x72, 0x7d, 0x25, 0xf6, 0xcf, 0xdd, 0x58, 0xd7, 0x6d, 0xc7, + 0xce, 0x85, 0x43, 0x52, 0xe1, 0x0d, 0xf2, 0x4a, 0x66, 0xce, 0xa4, 0x42, 0x75, 0x98, 0x6d, 0x11, + 0xda, 0x6c, 0x99, 0x4a, 0x0e, 0x56, 0x6f, 0xfc, 0xbd, 0x5f, 0x1a, 0xf7, 0x05, 0xd1, 0xd7, 0x04, + 0xf3, 0x4c, 0xe8, 0xfb, 0xa3, 0xdd, 0xf9, 0x93, 0x3e, 0x5b, 0x0a, 0x63, 0x38, 0xbf, 0x03, 0x38, + 0x6d, 0xc5, 0x51, 0xce, 0x52, 0x99, 0xb6, 0x33, 0x57, 0xe0, 0xe5, 0xde, 0xec, 0xea, 0xdb, 0x97, + 0x48, 0x69, 0xbf, 0x64, 0xf2, 0x4f, 0xf6, 0x16, 0x72, 0x96, 0xd5, 0xb2, 0x89, 0xac, 0x29, 0xa1, + 0xf7, 0x63, 0x6f, 0x19, 0x59, 0x3f, 0x62, 0xff, 0xab, 0x87, 0x5f, 0x7c, 0xea, 0x9e, 0x6d, 0xe4, + 0x5f, 0x01, 0x7c, 0xeb, 0xdf, 0x1b, 0xf9, 0x53, 0xaa, 0x5a, 0x75, 0x12, 0x73, 0x49, 0xd5, 0x39, + 0xf5, 0xf4, 0x54, 0x5f, 0x4f, 0xeb, 0x90, 0xb5, 0x50, 0x1e, 0x0e, 0x07, 0x06, 0x38, 0x3f, 0x94, + 0x04, 0xba, 0x66, 0xe5, 0x5a, 0x97, 0xfb, 0xd9, 0x7d, 0x59, 0xbd, 0xf3, 0xf0, 0xa0, 0x08, 0x1e, + 0x1d, 0x14, 0xc1, 0xe3, 0x83, 0x22, 0xf8, 0xf3, 0xa0, 0x08, 0xbe, 0x3d, 0x2c, 0x66, 0x1e, 0x1f, + 0x16, 0x33, 0xbf, 0x1d, 0x16, 0x33, 0x9f, 0x2f, 0x9d, 0x59, 0xbb, 0x13, 0x9f, 0x42, 0x49, 0x29, + 0x1b, 0xd9, 0xe4, 0x1b, 0xf6, 0xd6, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7c, 0x1c, 0x82, 0xe5, + 0x76, 0x0b, 0x00, 0x00, } func (this *Params) Equal(that interface{}) bool { @@ -944,6 +988,38 @@ func (this *FeePool) Equal(that interface{}) bool { } return true } +func (this *TokenizeShareRecordReward) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*TokenizeShareRecordReward) + if !ok { + that2, ok := that.(TokenizeShareRecordReward) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.RecordId != that1.RecordId { + return false + } + if len(this.Reward) != len(that1.Reward) { + return false + } + for i := range this.Reward { + if !this.Reward[i].Equal(&that1.Reward[i]) { + return false + } + } + return true +} func (this *DelegatorStartingInfo) Equal(that interface{}) bool { if that == nil { return this == nil @@ -1375,6 +1451,48 @@ func (m *FeePool) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *TokenizeShareRecordReward) 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 *TokenizeShareRecordReward) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenizeShareRecordReward) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Reward) > 0 { + for iNdEx := len(m.Reward) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Reward[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintDistribution(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if m.RecordId != 0 { + i = encodeVarintDistribution(dAtA, i, uint64(m.RecordId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *CommunityPoolSpendProposal) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1717,6 +1835,24 @@ func (m *FeePool) Size() (n int) { return n } +func (m *TokenizeShareRecordReward) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RecordId != 0 { + n += 1 + sovDistribution(uint64(m.RecordId)) + } + if len(m.Reward) > 0 { + for _, e := range m.Reward { + l = e.Size() + n += 1 + l + sovDistribution(uint64(l)) + } + } + return n +} + func (m *CommunityPoolSpendProposal) Size() (n int) { if m == nil { return 0 @@ -2632,6 +2768,109 @@ func (m *FeePool) Unmarshal(dAtA []byte) error { } return nil } +func (m *TokenizeShareRecordReward) 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 ErrIntOverflowDistribution + } + 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: TokenizeShareRecordReward: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TokenizeShareRecordReward: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RecordId", wireType) + } + m.RecordId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDistribution + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.RecordId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reward", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDistribution + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthDistribution + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthDistribution + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reward = append(m.Reward, types.DecCoin{}) + if err := m.Reward[len(m.Reward)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipDistribution(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthDistribution + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *CommunityPoolSpendProposal) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/distribution/types/query.pb.go b/x/distribution/types/query.pb.go index 65fd996eba15..0b8c1a1ace93 100644 --- a/x/distribution/types/query.pb.go +++ b/x/distribution/types/query.pb.go @@ -952,6 +952,103 @@ func (m *QueryCommunityPoolResponse) GetPool() github_com_cosmos_cosmos_sdk_type return nil } +// QueryTokenizeShareRecordRewardRequest is the request type for the Query/TokenizeShareRecordReward RPC +// method. +type QueryTokenizeShareRecordRewardRequest struct { + OwnerAddress string `protobuf:"bytes,1,opt,name=owner_address,json=ownerAddress,proto3" json:"owner_address,omitempty" yaml:"owner_address"` +} + +func (m *QueryTokenizeShareRecordRewardRequest) Reset() { *m = QueryTokenizeShareRecordRewardRequest{} } +func (m *QueryTokenizeShareRecordRewardRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTokenizeShareRecordRewardRequest) ProtoMessage() {} +func (*QueryTokenizeShareRecordRewardRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_5efd02cbc06efdc9, []int{20} +} +func (m *QueryTokenizeShareRecordRewardRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenizeShareRecordRewardRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenizeShareRecordRewardRequest.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 *QueryTokenizeShareRecordRewardRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenizeShareRecordRewardRequest.Merge(m, src) +} +func (m *QueryTokenizeShareRecordRewardRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenizeShareRecordRewardRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenizeShareRecordRewardRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTokenizeShareRecordRewardRequest proto.InternalMessageInfo + +// QueryTokenizeShareRecordRewardResponse is the response type for the Query/TokenizeShareRecordReward +// RPC method. +type QueryTokenizeShareRecordRewardResponse struct { + // rewards defines all the rewards accrued by a delegator. + Rewards []TokenizeShareRecordReward `protobuf:"bytes,1,rep,name=rewards,proto3" json:"rewards"` + // total defines the sum of all the rewards. + Total github_com_cosmos_cosmos_sdk_types.DecCoins `protobuf:"bytes,2,rep,name=total,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.DecCoins" json:"total"` +} + +func (m *QueryTokenizeShareRecordRewardResponse) Reset() { + *m = QueryTokenizeShareRecordRewardResponse{} +} +func (m *QueryTokenizeShareRecordRewardResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTokenizeShareRecordRewardResponse) ProtoMessage() {} +func (*QueryTokenizeShareRecordRewardResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5efd02cbc06efdc9, []int{21} +} +func (m *QueryTokenizeShareRecordRewardResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenizeShareRecordRewardResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenizeShareRecordRewardResponse.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 *QueryTokenizeShareRecordRewardResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenizeShareRecordRewardResponse.Merge(m, src) +} +func (m *QueryTokenizeShareRecordRewardResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenizeShareRecordRewardResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenizeShareRecordRewardResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTokenizeShareRecordRewardResponse proto.InternalMessageInfo + +func (m *QueryTokenizeShareRecordRewardResponse) GetRewards() []TokenizeShareRecordReward { + if m != nil { + return m.Rewards + } + return nil +} + +func (m *QueryTokenizeShareRecordRewardResponse) GetTotal() github_com_cosmos_cosmos_sdk_types.DecCoins { + if m != nil { + return m.Total + } + return nil +} + func init() { proto.RegisterType((*QueryParamsRequest)(nil), "cosmos.distribution.v1beta1.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "cosmos.distribution.v1beta1.QueryParamsResponse") @@ -973,6 +1070,8 @@ func init() { proto.RegisterType((*QueryDelegatorWithdrawAddressResponse)(nil), "cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse") proto.RegisterType((*QueryCommunityPoolRequest)(nil), "cosmos.distribution.v1beta1.QueryCommunityPoolRequest") proto.RegisterType((*QueryCommunityPoolResponse)(nil), "cosmos.distribution.v1beta1.QueryCommunityPoolResponse") + proto.RegisterType((*QueryTokenizeShareRecordRewardRequest)(nil), "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardRequest") + proto.RegisterType((*QueryTokenizeShareRecordRewardResponse)(nil), "cosmos.distribution.v1beta1.QueryTokenizeShareRecordRewardResponse") } func init() { @@ -980,86 +1079,94 @@ func init() { } var fileDescriptor_5efd02cbc06efdc9 = []byte{ - // 1257 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x4f, 0x6c, 0x1b, 0xc5, - 0x17, 0xf6, 0x38, 0x69, 0xfa, 0xcb, 0xeb, 0xaf, 0x24, 0x99, 0x46, 0xc8, 0xd9, 0x04, 0x3b, 0xda, - 0xd0, 0x26, 0x6a, 0x14, 0x6f, 0x93, 0x48, 0xa5, 0x34, 0x54, 0x10, 0x3b, 0x09, 0x45, 0xad, 0xfa, - 0xc7, 0x2d, 0x44, 0x80, 0x2a, 0x6b, 0xed, 0xdd, 0xac, 0x17, 0xec, 0x1d, 0x67, 0x67, 0x9d, 0x10, - 0x55, 0xbd, 0x14, 0x21, 0x15, 0x4e, 0x08, 0x2e, 0x3d, 0xe6, 0x88, 0x38, 0x71, 0x00, 0x71, 0xe4, - 0xc2, 0xa1, 0xc7, 0x0a, 0x24, 0xc4, 0x09, 0x50, 0x02, 0xa2, 0x1c, 0x90, 0xb8, 0x71, 0x45, 0x9e, - 0x99, 0xb5, 0x77, 0xe3, 0xf5, 0xfa, 0x5f, 0x7c, 0x49, 0x56, 0x6f, 0xe6, 0x7d, 0xef, 0x7d, 0xef, - 0xcd, 0x9b, 0xf9, 0x12, 0x98, 0xcd, 0x13, 0x5a, 0x22, 0x54, 0xd1, 0x4c, 0xea, 0xd8, 0x66, 0xae, - 0xe2, 0x98, 0xc4, 0x52, 0x76, 0x16, 0x73, 0xba, 0xa3, 0x2e, 0x2a, 0xdb, 0x15, 0xdd, 0xde, 0x4b, - 0x96, 0x6d, 0xe2, 0x10, 0x3c, 0xc9, 0x37, 0x26, 0xbd, 0x1b, 0x93, 0x62, 0xa3, 0x74, 0x5e, 0xa0, - 0xe4, 0x54, 0xaa, 0x73, 0xaf, 0x1a, 0x46, 0x59, 0x35, 0x4c, 0x4b, 0x65, 0xbb, 0x19, 0x90, 0x34, - 0x6e, 0x10, 0x83, 0xb0, 0x4f, 0xa5, 0xfa, 0x25, 0xac, 0x53, 0x06, 0x21, 0x46, 0x51, 0x57, 0xd4, - 0xb2, 0xa9, 0xa8, 0x96, 0x45, 0x1c, 0xe6, 0x42, 0xc5, 0x6a, 0xdc, 0x8b, 0xef, 0x22, 0xe7, 0x89, - 0xe9, 0x62, 0x26, 0xc3, 0x58, 0xf8, 0x32, 0xe6, 0xfb, 0x27, 0xf8, 0xfe, 0x2c, 0x4f, 0x43, 0x30, - 0xe3, 0x4b, 0x63, 0x6a, 0xc9, 0xb4, 0x88, 0xc2, 0x7e, 0x72, 0x93, 0x3c, 0x0e, 0xf8, 0x76, 0x95, - 0xd3, 0x2d, 0xd5, 0x56, 0x4b, 0x34, 0xa3, 0x6f, 0x57, 0x74, 0xea, 0xc8, 0xf7, 0xe0, 0x8c, 0xcf, - 0x4a, 0xcb, 0xc4, 0xa2, 0x3a, 0xde, 0x80, 0xa1, 0x32, 0xb3, 0xc4, 0xd0, 0x34, 0x9a, 0x3b, 0xb5, - 0x34, 0x93, 0x0c, 0x29, 0x5c, 0x92, 0x3b, 0xa7, 0x86, 0x9f, 0xfc, 0x92, 0x88, 0x7c, 0xf1, 0xe7, - 0x57, 0xe7, 0x51, 0x46, 0x78, 0xcb, 0x16, 0x9c, 0x65, 0xf0, 0x6f, 0xa9, 0x45, 0x53, 0x53, 0x1d, - 0x62, 0xaf, 0x79, 0xfc, 0xdf, 0xb0, 0xb6, 0x88, 0xc8, 0x03, 0xaf, 0xc3, 0xd8, 0x8e, 0xbb, 0x27, - 0xab, 0x6a, 0x9a, 0xad, 0x53, 0x1e, 0x7b, 0x38, 0x15, 0xfb, 0xe1, 0xeb, 0x85, 0x71, 0x11, 0x7e, - 0x95, 0xaf, 0xdc, 0x71, 0x6c, 0xd3, 0x32, 0x32, 0xa3, 0x35, 0x17, 0x61, 0x97, 0xff, 0x88, 0xc2, - 0xb9, 0x56, 0x01, 0x05, 0xc5, 0x34, 0x8c, 0x92, 0xb2, 0x6e, 0x77, 0x14, 0x70, 0xc4, 0xf5, 0x10, - 0x66, 0xfc, 0x10, 0xc1, 0x18, 0xd5, 0x8b, 0x5b, 0xd9, 0x1c, 0xb1, 0xb4, 0xac, 0xad, 0xef, 0xaa, - 0xb6, 0x46, 0x63, 0xd1, 0xe9, 0x81, 0xb9, 0x53, 0x4b, 0x53, 0x6e, 0xcd, 0xaa, 0xfd, 0xae, 0xd5, - 0x6a, 0x4d, 0xcf, 0xa7, 0x89, 0x69, 0xa5, 0x2e, 0x55, 0x8b, 0xf5, 0xe5, 0xaf, 0x89, 0x79, 0xc3, - 0x74, 0x0a, 0x95, 0x5c, 0x32, 0x4f, 0x4a, 0xa2, 0x85, 0xe2, 0xd7, 0x02, 0xd5, 0xde, 0x57, 0x9c, - 0xbd, 0xb2, 0x4e, 0x5d, 0x1f, 0xca, 0x6b, 0x3b, 0x52, 0x0d, 0x98, 0x22, 0x96, 0x96, 0xe1, 0xe1, - 0xf0, 0x36, 0x40, 0x9e, 0x94, 0x4a, 0x26, 0xa5, 0x26, 0xb1, 0x62, 0x03, 0x6d, 0x04, 0x5f, 0xee, - 0x22, 0x78, 0xc6, 0x13, 0x44, 0x2e, 0xc3, 0xac, 0xbf, 0xcc, 0x37, 0x2b, 0x0e, 0x75, 0x54, 0x4b, - 0xab, 0x56, 0x89, 0xa7, 0x75, 0xcc, 0x9d, 0xfd, 0x18, 0xc1, 0x5c, 0xeb, 0x90, 0xa2, 0xb7, 0xf7, - 0xe0, 0xa4, 0xdb, 0x0b, 0x7e, 0x7e, 0x2f, 0x85, 0x9e, 0xdf, 0x10, 0x48, 0xef, 0xa1, 0x76, 0x31, - 0xe5, 0x02, 0x24, 0xfc, 0xa9, 0xa4, 0x6b, 0x95, 0x39, 0x66, 0xd6, 0x9f, 0x20, 0x98, 0x6e, 0x1e, - 0x4a, 0xb0, 0xdd, 0xf2, 0xf5, 0x9f, 0x13, 0x5e, 0x69, 0x8f, 0xf0, 0x6a, 0x3e, 0x5f, 0x29, 0x55, - 0x8a, 0xaa, 0xa3, 0x6b, 0x75, 0x60, 0x2f, 0x67, 0x6f, 0xd3, 0x3f, 0x8a, 0xc2, 0x94, 0x3f, 0x99, - 0x3b, 0x45, 0x95, 0x16, 0xf4, 0x63, 0x6e, 0x35, 0x9e, 0x85, 0x11, 0xea, 0xa8, 0xb6, 0x63, 0x5a, - 0x46, 0xb6, 0xa0, 0x9b, 0x46, 0xc1, 0x89, 0x45, 0xa7, 0xd1, 0xdc, 0x60, 0xe6, 0x39, 0xd7, 0x7c, - 0x95, 0x59, 0xf1, 0x0c, 0x9c, 0xd6, 0x59, 0xb3, 0xdc, 0x6d, 0x03, 0x6c, 0xdb, 0xff, 0xb9, 0x51, - 0x6c, 0xda, 0x00, 0xa8, 0xdf, 0xde, 0xb1, 0x41, 0x56, 0x9d, 0x73, 0xbe, 0xe9, 0xe0, 0x0f, 0x44, - 0xfd, 0x32, 0x33, 0x74, 0x41, 0x28, 0xe3, 0xf1, 0xbc, 0xfc, 0xbf, 0x47, 0xfb, 0x89, 0xc8, 0xe3, - 0xfd, 0x04, 0x92, 0xbf, 0x43, 0xf0, 0x42, 0x93, 0x3a, 0x88, 0x8e, 0xbc, 0x09, 0x27, 0x29, 0x37, - 0xc5, 0x10, 0x1b, 0xc7, 0x0b, 0xed, 0xb5, 0x83, 0xe1, 0xac, 0xef, 0xe8, 0x96, 0xe3, 0x3b, 0x77, - 0x02, 0x0b, 0xbf, 0xee, 0xa3, 0x12, 0x65, 0x54, 0x66, 0x5b, 0x52, 0xe1, 0x39, 0x79, 0xb9, 0xc8, - 0xdf, 0xba, 0x0c, 0xd6, 0xf4, 0xa2, 0x6e, 0x30, 0x5b, 0xe3, 0xd4, 0x6a, 0x7c, 0xad, 0x93, 0x56, - 0xd6, 0x5c, 0xdc, 0x56, 0x06, 0x9e, 0x88, 0x68, 0xa7, 0x27, 0x82, 0xd7, 0xfe, 0xd9, 0x7e, 0x22, - 0x22, 0x7f, 0x86, 0x20, 0xde, 0x2c, 0x73, 0x51, 0xfc, 0xb2, 0x77, 0xf8, 0xfb, 0x79, 0x11, 0xd7, - 0xee, 0x83, 0x0a, 0xc8, 0x47, 0x72, 0xba, 0x4b, 0x1c, 0xb5, 0xd8, 0x97, 0x92, 0x7a, 0x6a, 0xf1, - 0x0f, 0x82, 0x99, 0xd0, 0xb8, 0xa2, 0x20, 0xef, 0x1e, 0x2d, 0xc8, 0xc5, 0xd0, 0xd3, 0x58, 0x47, - 0x5b, 0x73, 0x63, 0x73, 0xc4, 0xa0, 0xbb, 0x10, 0x17, 0xe1, 0x84, 0x53, 0x0d, 0xda, 0xe7, 0x47, - 0x8f, 0x07, 0x91, 0x6d, 0x71, 0xf3, 0xd6, 0x32, 0xab, 0x8d, 0x4e, 0xff, 0xca, 0x7c, 0x5d, 0x5c, - 0xc1, 0x81, 0x31, 0x45, 0x89, 0xe3, 0x00, 0xb5, 0x43, 0xcb, 0xab, 0x3c, 0x9c, 0xf1, 0x58, 0x3c, - 0x68, 0xbb, 0xf0, 0xa2, 0x1f, 0x6d, 0xd3, 0x74, 0x0a, 0x9a, 0xad, 0xee, 0x8a, 0xc0, 0x7d, 0xa3, - 0xb1, 0x23, 0xa4, 0x58, 0xf3, 0xc0, 0x75, 0x61, 0xb4, 0x2b, 0x96, 0xda, 0x17, 0x46, 0xbb, 0x7e, - 0x30, 0x4f, 0xdc, 0x49, 0x98, 0x60, 0x71, 0xab, 0xef, 0x4b, 0xc5, 0x32, 0x9d, 0xbd, 0x5b, 0x84, - 0x14, 0x5d, 0xf9, 0xf9, 0x08, 0x81, 0x14, 0xb4, 0x2a, 0x52, 0x79, 0x0f, 0x06, 0xcb, 0x84, 0x14, - 0xfb, 0x3c, 0xc7, 0x2c, 0xc6, 0xd2, 0xf7, 0x63, 0x70, 0x82, 0xa5, 0x82, 0x1f, 0x23, 0x18, 0xe2, - 0x92, 0x16, 0x2b, 0xa1, 0x93, 0xd2, 0xa8, 0xa7, 0xa5, 0x0b, 0xed, 0x3b, 0x70, 0x8e, 0xf2, 0xfc, - 0xc3, 0x1f, 0x7f, 0xff, 0x3c, 0x7a, 0x16, 0xcf, 0x28, 0x61, 0xf2, 0x9f, 0xeb, 0x69, 0xfc, 0x17, - 0x82, 0x89, 0xa6, 0xd2, 0x16, 0xa7, 0x5a, 0x07, 0x6f, 0x25, 0xc4, 0xa5, 0x74, 0x4f, 0x18, 0x82, - 0x53, 0x9a, 0x71, 0xba, 0x82, 0x57, 0x42, 0x39, 0xd5, 0xe7, 0x43, 0xb9, 0xdf, 0xf0, 0x4a, 0x3c, - 0xc0, 0x1f, 0x46, 0x61, 0x32, 0x44, 0x99, 0xe1, 0xb5, 0x0e, 0x32, 0x6d, 0x2a, 0x4f, 0xa5, 0xf5, - 0x1e, 0x51, 0x04, 0xe3, 0x4d, 0xc6, 0xf8, 0x36, 0xbe, 0xd9, 0x03, 0x63, 0x85, 0xd4, 0xf1, 0xdd, - 0xbf, 0x25, 0xf0, 0x01, 0x82, 0x33, 0x01, 0xe2, 0x0f, 0xbf, 0xd2, 0x41, 0xde, 0x0d, 0xf2, 0x54, - 0xba, 0xd2, 0xa5, 0xb7, 0x60, 0x7b, 0x83, 0xb1, 0xbd, 0x8a, 0x37, 0x7a, 0x61, 0x5b, 0x57, 0x96, - 0xf8, 0x27, 0x04, 0xa3, 0x47, 0xc5, 0x14, 0x7e, 0xb9, 0x83, 0x1c, 0xfd, 0x42, 0x54, 0xba, 0xdc, - 0x8d, 0xab, 0xe0, 0x76, 0x8d, 0x71, 0x5b, 0xc7, 0xe9, 0x5e, 0xb8, 0xb9, 0x8a, 0xed, 0x6f, 0x04, - 0x63, 0x0d, 0x4a, 0x05, 0xb7, 0x91, 0x5e, 0x33, 0x61, 0x26, 0xad, 0x74, 0xe5, 0x2b, 0xb8, 0x65, - 0x19, 0xb7, 0xb7, 0xf1, 0x66, 0x28, 0xb7, 0xda, 0x23, 0x42, 0x95, 0xfb, 0x0d, 0x6f, 0xd0, 0x03, - 0x45, 0x9c, 0xcc, 0xc0, 0x99, 0x7d, 0x86, 0xe0, 0xf9, 0x60, 0x35, 0x82, 0x5f, 0xed, 0x24, 0xf1, - 0x00, 0xfd, 0x24, 0xbd, 0xd6, 0x3d, 0x40, 0x47, 0xad, 0x6d, 0x8f, 0x3e, 0x1b, 0xcc, 0x00, 0x49, - 0xd0, 0xce, 0x60, 0x36, 0x57, 0x2f, 0xed, 0x0c, 0x66, 0x88, 0x0e, 0x69, 0x73, 0x30, 0x5b, 0x30, - 0xac, 0x9f, 0x6d, 0xfc, 0x2f, 0x82, 0x58, 0x33, 0xc1, 0x80, 0x57, 0x3b, 0xc8, 0x35, 0x58, 0xe5, - 0x48, 0xa9, 0x5e, 0x20, 0x04, 0xe7, 0xbb, 0x8c, 0xf3, 0x0d, 0x7c, 0xbd, 0x17, 0xce, 0x47, 0x15, - 0x0f, 0xfe, 0x06, 0xc1, 0x69, 0x9f, 0x28, 0xc1, 0x17, 0x5b, 0xe7, 0x1a, 0xa4, 0x71, 0xa4, 0x97, - 0x3a, 0xf6, 0x13, 0xc4, 0x96, 0x19, 0xb1, 0x05, 0x3c, 0x1f, 0x4a, 0x2c, 0xef, 0xfa, 0x66, 0xab, - 0x32, 0x26, 0x75, 0xed, 0xc9, 0x41, 0x1c, 0x3d, 0x3d, 0x88, 0xa3, 0xdf, 0x0e, 0xe2, 0xe8, 0xd3, - 0xc3, 0x78, 0xe4, 0xe9, 0x61, 0x3c, 0xf2, 0xf3, 0x61, 0x3c, 0xf2, 0xce, 0x62, 0xa8, 0x30, 0xfa, - 0xc0, 0x8f, 0xce, 0x74, 0x52, 0x6e, 0x88, 0xfd, 0xeb, 0x70, 0xf9, 0xbf, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x58, 0xdf, 0x9a, 0x20, 0x60, 0x15, 0x00, 0x00, + // 1381 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x4d, 0x6c, 0x1b, 0x45, + 0x14, 0xf6, 0xb8, 0x69, 0x4b, 0xa7, 0x2d, 0x49, 0x26, 0x11, 0x72, 0x36, 0xc1, 0x8e, 0x36, 0xb4, + 0x89, 0x1a, 0xc5, 0xdb, 0x24, 0x52, 0x29, 0x09, 0x11, 0xc4, 0x4e, 0x42, 0xa1, 0x51, 0x7f, 0x9c, + 0xd0, 0x08, 0x50, 0x65, 0xad, 0xbd, 0x93, 0xf5, 0x52, 0x7b, 0xc7, 0xd9, 0x5d, 0xc7, 0x84, 0x28, + 0x97, 0x22, 0xa4, 0xc2, 0x09, 0xc1, 0xa5, 0xc7, 0x1c, 0x11, 0x27, 0x0e, 0x20, 0x8e, 0xbd, 0xf6, + 0x58, 0x81, 0x84, 0x38, 0x15, 0x94, 0x80, 0x68, 0x0f, 0x48, 0x88, 0x0b, 0x1c, 0x91, 0x67, 0x66, + 0xed, 0xdd, 0xd8, 0x5e, 0xef, 0xda, 0xf1, 0x25, 0xd9, 0xcc, 0xcc, 0xfb, 0xde, 0xfb, 0xde, 0x9b, + 0x37, 0xf3, 0x4d, 0xe0, 0x78, 0x96, 0x98, 0x05, 0x62, 0x4a, 0x8a, 0x66, 0x5a, 0x86, 0x96, 0x29, + 0x59, 0x1a, 0xd1, 0xa5, 0xed, 0xe9, 0x0c, 0xb6, 0xe4, 0x69, 0x69, 0xab, 0x84, 0x8d, 0x9d, 0x78, + 0xd1, 0x20, 0x16, 0x41, 0xc3, 0x6c, 0x61, 0xdc, 0xb9, 0x30, 0xce, 0x17, 0x0a, 0x97, 0x38, 0x4a, + 0x46, 0x36, 0x31, 0xb3, 0xaa, 0x62, 0x14, 0x65, 0x55, 0xd3, 0x65, 0xba, 0x9a, 0x02, 0x09, 0x83, + 0x2a, 0x51, 0x09, 0xfd, 0x94, 0x2a, 0x5f, 0x7c, 0x74, 0x44, 0x25, 0x44, 0xcd, 0x63, 0x49, 0x2e, + 0x6a, 0x92, 0xac, 0xeb, 0xc4, 0xa2, 0x26, 0x26, 0x9f, 0x8d, 0x3a, 0xf1, 0x6d, 0xe4, 0x2c, 0xd1, + 0x6c, 0xcc, 0xb8, 0x17, 0x0b, 0x57, 0xc4, 0x6c, 0xfd, 0x10, 0x5b, 0x9f, 0x66, 0x61, 0x70, 0x66, + 0x6c, 0xaa, 0x5f, 0x2e, 0x68, 0x3a, 0x91, 0xe8, 0x4f, 0x36, 0x24, 0x0e, 0x42, 0x74, 0xbb, 0xc2, + 0xe9, 0x96, 0x6c, 0xc8, 0x05, 0x33, 0x85, 0xb7, 0x4a, 0xd8, 0xb4, 0xc4, 0xbb, 0x70, 0xc0, 0x35, + 0x6a, 0x16, 0x89, 0x6e, 0x62, 0xb4, 0x02, 0x4f, 0x15, 0xe9, 0x48, 0x04, 0x8c, 0x82, 0x89, 0xb3, + 0x33, 0x63, 0x71, 0x8f, 0xc4, 0xc5, 0x99, 0x71, 0xe2, 0xcc, 0xe3, 0xa7, 0xb1, 0xd0, 0xd7, 0x7f, + 0x7e, 0x7b, 0x09, 0xa4, 0xb8, 0xb5, 0xa8, 0xc3, 0x0b, 0x14, 0xfe, 0x8e, 0x9c, 0xd7, 0x14, 0xd9, + 0x22, 0xc6, 0x92, 0xc3, 0xfe, 0x6d, 0x7d, 0x93, 0xf0, 0x38, 0xd0, 0x32, 0xec, 0xdf, 0xb6, 0xd7, + 0xa4, 0x65, 0x45, 0x31, 0xb0, 0xc9, 0x7c, 0x9f, 0x49, 0x44, 0x7e, 0xfc, 0x6e, 0x6a, 0x90, 0xbb, + 0x5f, 0x64, 0x33, 0x6b, 0x96, 0xa1, 0xe9, 0x6a, 0xaa, 0xaf, 0x6a, 0xc2, 0xc7, 0xc5, 0x3f, 0xc2, + 0xf0, 0x62, 0x2b, 0x87, 0x9c, 0x62, 0x12, 0xf6, 0x91, 0x22, 0x36, 0x02, 0x39, 0xec, 0xb5, 0x2d, + 0xf8, 0x30, 0xba, 0x0f, 0x60, 0xbf, 0x89, 0xf3, 0x9b, 0xe9, 0x0c, 0xd1, 0x95, 0xb4, 0x81, 0xcb, + 0xb2, 0xa1, 0x98, 0x91, 0xf0, 0xe8, 0x89, 0x89, 0xb3, 0x33, 0x23, 0x76, 0xce, 0x2a, 0xf5, 0xae, + 0xe6, 0x6a, 0x09, 0x67, 0x93, 0x44, 0xd3, 0x13, 0x57, 0x2b, 0xc9, 0xfa, 0xe6, 0xd7, 0xd8, 0xa4, + 0xaa, 0x59, 0xb9, 0x52, 0x26, 0x9e, 0x25, 0x05, 0x5e, 0x42, 0xfe, 0x6b, 0xca, 0x54, 0xee, 0x49, + 0xd6, 0x4e, 0x11, 0x9b, 0xb6, 0x8d, 0xc9, 0x72, 0xdb, 0x5b, 0x71, 0x98, 0x20, 0xba, 0x92, 0x62, + 0xee, 0xd0, 0x16, 0x84, 0x59, 0x52, 0x28, 0x68, 0xa6, 0xa9, 0x11, 0x3d, 0x72, 0xc2, 0x87, 0xf3, + 0xd9, 0x36, 0x9c, 0xa7, 0x1c, 0x4e, 0xc4, 0x22, 0x1c, 0x77, 0xa7, 0xf9, 0x66, 0xc9, 0x32, 0x2d, + 0x59, 0x57, 0x2a, 0x59, 0x62, 0x61, 0x1d, 0x73, 0x65, 0x3f, 0x03, 0x70, 0xa2, 0xb5, 0x4b, 0x5e, + 0xdb, 0xbb, 0xf0, 0xb4, 0x5d, 0x0b, 0xb6, 0x7f, 0xaf, 0x7a, 0xee, 0x5f, 0x0f, 0x48, 0xe7, 0xa6, + 0xb6, 0x31, 0xc5, 0x1c, 0x8c, 0xb9, 0x43, 0x49, 0x56, 0x33, 0x73, 0xcc, 0xac, 0x3f, 0x07, 0x70, + 0xb4, 0xb9, 0x2b, 0xce, 0x76, 0xd3, 0x55, 0x7f, 0x46, 0x78, 0xde, 0x1f, 0xe1, 0xc5, 0x6c, 0xb6, + 0x54, 0x28, 0xe5, 0x65, 0x0b, 0x2b, 0x35, 0x60, 0x27, 0x67, 0x67, 0xd1, 0x3f, 0x0d, 0xc3, 0x11, + 0x77, 0x30, 0x6b, 0x79, 0xd9, 0xcc, 0xe1, 0x63, 0x2e, 0x35, 0x1a, 0x87, 0xbd, 0xa6, 0x25, 0x1b, + 0x96, 0xa6, 0xab, 0xe9, 0x1c, 0xd6, 0xd4, 0x9c, 0x15, 0x09, 0x8f, 0x82, 0x89, 0x9e, 0xd4, 0x8b, + 0xf6, 0xf0, 0x35, 0x3a, 0x8a, 0xc6, 0xe0, 0x79, 0x4c, 0x8b, 0x65, 0x2f, 0x3b, 0x41, 0x97, 0x9d, + 0x63, 0x83, 0x7c, 0xd1, 0x0a, 0x84, 0xb5, 0xd3, 0x3b, 0xd2, 0x43, 0xb3, 0x73, 0xd1, 0xd5, 0x1d, + 0xec, 0x82, 0xa8, 0x1d, 0x66, 0x2a, 0xe6, 0x84, 0x52, 0x0e, 0xcb, 0xb9, 0x17, 0x1e, 0xec, 0xc7, + 0x42, 0x0f, 0xf7, 0x63, 0x40, 0x7c, 0x04, 0xe0, 0xcb, 0x4d, 0xf2, 0xc0, 0x2b, 0xf2, 0x2e, 0x3c, + 0x6d, 0xb2, 0xa1, 0x08, 0xa0, 0xed, 0x78, 0xd9, 0x5f, 0x39, 0x28, 0xce, 0xf2, 0x36, 0xd6, 0x2d, + 0xd7, 0xbe, 0xe3, 0x58, 0xe8, 0x2d, 0x17, 0x95, 0x30, 0xa5, 0x32, 0xde, 0x92, 0x0a, 0x8b, 0xc9, + 0xc9, 0x45, 0xfc, 0xc1, 0x66, 0xb0, 0x84, 0xf3, 0x58, 0xa5, 0x63, 0xf5, 0x5d, 0xab, 0xb0, 0xb9, + 0x20, 0xa5, 0xac, 0x9a, 0xd8, 0xa5, 0x6c, 0xb8, 0x23, 0xc2, 0x41, 0x77, 0x04, 0xcb, 0xfd, 0xb3, + 0xfd, 0x58, 0x48, 0xfc, 0x12, 0xc0, 0x68, 0xb3, 0xc8, 0x79, 0xf2, 0x8b, 0xce, 0xe6, 0xef, 0xe6, + 0x41, 0x5c, 0x3d, 0x0f, 0x4a, 0x50, 0x3c, 0x12, 0xd3, 0x3a, 0xb1, 0xe4, 0x7c, 0x57, 0x52, 0xea, + 0xc8, 0xc5, 0xdf, 0x00, 0x8e, 0x79, 0xfa, 0xe5, 0x09, 0xf9, 0xe0, 0x68, 0x42, 0xae, 0x78, 0xee, + 0xc6, 0x1a, 0xda, 0x92, 0xed, 0x9b, 0x21, 0x36, 0x3a, 0x0b, 0x51, 0x1e, 0x9e, 0xb4, 0x2a, 0x4e, + 0xbb, 0x7c, 0xe9, 0x31, 0x27, 0xa2, 0xc1, 0x4f, 0xde, 0x6a, 0x64, 0xd5, 0xd6, 0xe9, 0x5e, 0x9a, + 0x57, 0xf9, 0x11, 0xdc, 0xd0, 0x27, 0x4f, 0x71, 0x14, 0xc2, 0xea, 0xa6, 0x65, 0x59, 0x3e, 0x93, + 0x72, 0x8c, 0x38, 0xd0, 0xca, 0xf0, 0x15, 0x37, 0xda, 0x86, 0x66, 0xe5, 0x14, 0x43, 0x2e, 0x73, + 0xc7, 0x5d, 0xa3, 0xb1, 0xcd, 0xa5, 0x58, 0x73, 0xc7, 0x35, 0x61, 0x54, 0xe6, 0x53, 0xfe, 0x85, + 0x51, 0xd9, 0x0d, 0xe6, 0xf0, 0x3b, 0x0c, 0x87, 0xa8, 0xdf, 0xca, 0xfd, 0x52, 0xd2, 0x35, 0x6b, + 0xe7, 0x16, 0x21, 0x79, 0x5b, 0x7e, 0x3e, 0x00, 0x50, 0x68, 0x34, 0xcb, 0x43, 0xf9, 0x10, 0xf6, + 0x14, 0x09, 0xc9, 0x77, 0xb9, 0x8f, 0xa9, 0x0f, 0xb1, 0xc8, 0xf3, 0xb3, 0x4e, 0xee, 0x61, 0x5d, + 0xfb, 0x18, 0xaf, 0xe5, 0x64, 0x03, 0xa7, 0x70, 0x96, 0x18, 0x5c, 0x68, 0xd9, 0x95, 0x59, 0x80, + 0xe7, 0x49, 0x59, 0xc7, 0x75, 0x55, 0xf9, 0xe7, 0x69, 0x6c, 0x70, 0x47, 0x2e, 0xe4, 0xe7, 0x44, + 0xd7, 0xb4, 0x98, 0x3a, 0x47, 0xff, 0xae, 0xcf, 0xcc, 0x73, 0xc0, 0xc5, 0xaa, 0x87, 0x4b, 0x9e, + 0x88, 0x3b, 0xc1, 0x5a, 0xb8, 0x29, 0x60, 0xa2, 0xa7, 0x92, 0xa5, 0x5a, 0xf7, 0xaa, 0x41, 0xba, + 0xb7, 0x2d, 0xd5, 0xc8, 0xf0, 0x67, 0x1e, 0x0d, 0xc0, 0x93, 0x94, 0x2b, 0x7a, 0x08, 0xe0, 0x29, + 0xf6, 0x60, 0x40, 0x92, 0x27, 0x89, 0xfa, 0xd7, 0x8a, 0x70, 0xd9, 0xbf, 0x01, 0x4b, 0x9c, 0x38, + 0x79, 0xff, 0xa7, 0xdf, 0xbf, 0x0a, 0x5f, 0x40, 0x63, 0x92, 0xd7, 0xe3, 0x8a, 0xbd, 0x56, 0xd0, + 0x73, 0x00, 0x87, 0x9a, 0x3e, 0x1c, 0x50, 0xa2, 0xb5, 0xf3, 0x56, 0xcf, 0x1c, 0x21, 0xd9, 0x11, + 0x06, 0xe7, 0x94, 0xa4, 0x9c, 0x16, 0xd0, 0xbc, 0x27, 0xa7, 0xda, 0xe9, 0x23, 0xed, 0xd6, 0xdd, + 0xc1, 0x7b, 0xe8, 0x93, 0x30, 0x1c, 0xf6, 0xd0, 0xbd, 0x68, 0x29, 0x40, 0xa4, 0x4d, 0xc5, 0xbf, + 0xb0, 0xdc, 0x21, 0x0a, 0x67, 0xbc, 0x41, 0x19, 0xdf, 0x46, 0x37, 0x3b, 0x60, 0x2c, 0x91, 0x1a, + 0xbe, 0xfd, 0x52, 0x43, 0x07, 0x00, 0x0e, 0x34, 0x90, 0xd6, 0xe8, 0xf5, 0x00, 0x71, 0xd7, 0x89, + 0x7f, 0x61, 0xa1, 0x4d, 0x6b, 0xce, 0xf6, 0x06, 0x65, 0x7b, 0x0d, 0xad, 0x74, 0xc2, 0xb6, 0xa6, + 0xdb, 0xd1, 0xcf, 0x00, 0xf6, 0x1d, 0x95, 0xaa, 0xe8, 0xb5, 0x00, 0x31, 0xba, 0x65, 0xbe, 0x30, + 0xd7, 0x8e, 0x29, 0xe7, 0x76, 0x9d, 0x72, 0x5b, 0x46, 0xc9, 0x4e, 0xb8, 0xd9, 0x7a, 0xf8, 0x2f, + 0x00, 0xfb, 0xeb, 0x74, 0x20, 0xf2, 0x11, 0x5e, 0x33, 0xd9, 0x2b, 0xcc, 0xb7, 0x65, 0xcb, 0xb9, + 0xa5, 0x29, 0xb7, 0xf7, 0xd0, 0x86, 0x27, 0xb7, 0xea, 0x15, 0x6d, 0x4a, 0xbb, 0x75, 0x37, 0xfc, + 0x9e, 0xc4, 0x77, 0x66, 0xc3, 0x9e, 0x7d, 0x06, 0xe0, 0x4b, 0x8d, 0xb5, 0x1e, 0x7a, 0x23, 0x48, + 0xe0, 0x0d, 0xd4, 0xa9, 0xf0, 0x66, 0xfb, 0x00, 0x81, 0x4a, 0xeb, 0x8f, 0x3e, 0x6d, 0xcc, 0x06, + 0x82, 0xcb, 0x4f, 0x63, 0x36, 0xd7, 0x86, 0x7e, 0x1a, 0xd3, 0x43, 0xe5, 0xf9, 0x6c, 0xcc, 0x16, + 0x0c, 0x6b, 0x7b, 0x1b, 0xfd, 0x0b, 0x60, 0xa4, 0x99, 0x1c, 0x43, 0x8b, 0x01, 0x62, 0x6d, 0xac, + 0x21, 0x85, 0x44, 0x27, 0x10, 0x9c, 0xf3, 0x3a, 0xe5, 0x7c, 0x03, 0xad, 0x76, 0xc2, 0xf9, 0xa8, + 0x9e, 0x44, 0xdf, 0x03, 0x78, 0xde, 0x25, 0xf9, 0xd0, 0x95, 0xd6, 0xb1, 0x36, 0x52, 0x90, 0xc2, + 0xab, 0x81, 0xed, 0x38, 0xb1, 0x59, 0x4a, 0x6c, 0x0a, 0x4d, 0x7a, 0x12, 0xcb, 0xda, 0xb6, 0xe9, + 0x8a, 0x48, 0x44, 0xff, 0x01, 0x38, 0xd4, 0x54, 0x5c, 0xf9, 0x51, 0x08, 0xad, 0xd4, 0xa5, 0x1f, + 0x85, 0xd0, 0x52, 0x2e, 0x8a, 0x29, 0xca, 0x6d, 0x15, 0xbd, 0xe3, 0xc9, 0x6d, 0xd7, 0xa5, 0x53, + 0xf7, 0x24, 0x8b, 0xe3, 0xa6, 0xcd, 0x0a, 0x70, 0xda, 0xa0, 0xc8, 0xf6, 0x55, 0x99, 0xb8, 0xfe, + 0xf8, 0x20, 0x0a, 0x9e, 0x1c, 0x44, 0xc1, 0x6f, 0x07, 0x51, 0xf0, 0xc5, 0x61, 0x34, 0xf4, 0xe4, + 0x30, 0x1a, 0xfa, 0xe5, 0x30, 0x1a, 0x7a, 0x7f, 0xda, 0x53, 0x0f, 0x7e, 0xe4, 0x76, 0x4e, 0xe5, + 0x61, 0xe6, 0x14, 0xfd, 0x9f, 0xf4, 0xec, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd1, 0x94, 0xd7, + 0x10, 0xb9, 0x17, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1095,6 +1202,8 @@ type QueryClient interface { DelegatorWithdrawAddress(ctx context.Context, in *QueryDelegatorWithdrawAddressRequest, opts ...grpc.CallOption) (*QueryDelegatorWithdrawAddressResponse, error) // CommunityPool queries the community pool coins. CommunityPool(ctx context.Context, in *QueryCommunityPoolRequest, opts ...grpc.CallOption) (*QueryCommunityPoolResponse, error) + // TokenizeShareRecordReward queries the tokenize share record rewards + TokenizeShareRecordReward(ctx context.Context, in *QueryTokenizeShareRecordRewardRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordRewardResponse, error) } type queryClient struct { @@ -1195,6 +1304,15 @@ func (c *queryClient) CommunityPool(ctx context.Context, in *QueryCommunityPoolR return out, nil } +func (c *queryClient) TokenizeShareRecordReward(ctx context.Context, in *QueryTokenizeShareRecordRewardRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordRewardResponse, error) { + out := new(QueryTokenizeShareRecordRewardResponse) + err := c.cc.Invoke(ctx, "/cosmos.distribution.v1beta1.Query/TokenizeShareRecordReward", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryServer is the server API for Query service. type QueryServer interface { // Params queries params of the distribution module. @@ -1218,6 +1336,8 @@ type QueryServer interface { DelegatorWithdrawAddress(context.Context, *QueryDelegatorWithdrawAddressRequest) (*QueryDelegatorWithdrawAddressResponse, error) // CommunityPool queries the community pool coins. CommunityPool(context.Context, *QueryCommunityPoolRequest) (*QueryCommunityPoolResponse, error) + // TokenizeShareRecordReward queries the tokenize share record rewards + TokenizeShareRecordReward(context.Context, *QueryTokenizeShareRecordRewardRequest) (*QueryTokenizeShareRecordRewardResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. @@ -1254,6 +1374,9 @@ func (*UnimplementedQueryServer) DelegatorWithdrawAddress(ctx context.Context, r func (*UnimplementedQueryServer) CommunityPool(ctx context.Context, req *QueryCommunityPoolRequest) (*QueryCommunityPoolResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CommunityPool not implemented") } +func (*UnimplementedQueryServer) TokenizeShareRecordReward(ctx context.Context, req *QueryTokenizeShareRecordRewardRequest) (*QueryTokenizeShareRecordRewardResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareRecordReward not implemented") +} func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) @@ -1439,6 +1562,24 @@ func _Query_CommunityPool_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _Query_TokenizeShareRecordReward_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenizeShareRecordRewardRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TokenizeShareRecordReward(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.distribution.v1beta1.Query/TokenizeShareRecordReward", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenizeShareRecordReward(ctx, req.(*QueryTokenizeShareRecordRewardRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Query_serviceDesc = grpc.ServiceDesc{ ServiceName: "cosmos.distribution.v1beta1.Query", HandlerType: (*QueryServer)(nil), @@ -1483,6 +1624,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "CommunityPool", Handler: _Query_CommunityPool_Handler, }, + { + MethodName: "TokenizeShareRecordReward", + Handler: _Query_TokenizeShareRecordReward_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "cosmos/distribution/v1beta1/query.proto", @@ -2196,6 +2341,87 @@ func (m *QueryCommunityPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *QueryTokenizeShareRecordRewardRequest) 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 *QueryTokenizeShareRecordRewardRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenizeShareRecordRewardRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.OwnerAddress) > 0 { + i -= len(m.OwnerAddress) + copy(dAtA[i:], m.OwnerAddress) + i = encodeVarintQuery(dAtA, i, uint64(len(m.OwnerAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryTokenizeShareRecordRewardResponse) 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 *QueryTokenizeShareRecordRewardResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenizeShareRecordRewardResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Total) > 0 { + for iNdEx := len(m.Total) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Total[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.Rewards) > 0 { + for iNdEx := len(m.Rewards) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rewards[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { offset -= sovQuery(v) base := offset @@ -2499,6 +2725,40 @@ func (m *QueryCommunityPoolResponse) Size() (n int) { return n } +func (m *QueryTokenizeShareRecordRewardRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.OwnerAddress) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryTokenizeShareRecordRewardResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Rewards) > 0 { + for _, e := range m.Rewards { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if len(m.Total) > 0 { + for _, e := range m.Total { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + func sovQuery(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -4336,6 +4596,206 @@ func (m *QueryCommunityPoolResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QueryTokenizeShareRecordRewardRequest) 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 ErrIntOverflowQuery + } + 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: QueryTokenizeShareRecordRewardRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTokenizeShareRecordRewardRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OwnerAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OwnerAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTokenizeShareRecordRewardResponse) 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 ErrIntOverflowQuery + } + 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: QueryTokenizeShareRecordRewardResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTokenizeShareRecordRewardResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rewards", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rewards = append(m.Rewards, TokenizeShareRecordReward{}) + if err := m.Rewards[len(m.Rewards)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Total", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Total = append(m.Total, types.DecCoin{}) + if err := m.Total[len(m.Total)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipQuery(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/distribution/types/query.pb.gw.go b/x/distribution/types/query.pb.gw.go index 9cf7f680118e..7dec9a7ed004 100644 --- a/x/distribution/types/query.pb.gw.go +++ b/x/distribution/types/query.pb.gw.go @@ -541,6 +541,60 @@ func local_request_Query_CommunityPool_0(ctx context.Context, marshaler runtime. } +func request_Query_TokenizeShareRecordReward_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenizeShareRecordRewardRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["owner_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner_address") + } + + protoReq.OwnerAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner_address", err) + } + + msg, err := client.TokenizeShareRecordReward(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TokenizeShareRecordReward_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenizeShareRecordRewardRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["owner_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner_address") + } + + protoReq.OwnerAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner_address", err) + } + + msg, err := server.TokenizeShareRecordReward(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterQueryHandlerServer registers the http handlers for service Query to "mux". // UnaryRPC :call QueryServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -777,6 +831,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_TokenizeShareRecordReward_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_TokenizeShareRecordReward_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TokenizeShareRecordReward_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1018,6 +1095,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_TokenizeShareRecordReward_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TokenizeShareRecordReward_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TokenizeShareRecordReward_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1041,6 +1138,8 @@ var ( pattern_Query_DelegatorWithdrawAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"cosmos", "distribution", "v1beta1", "delegators", "delegator_address", "withdraw_address"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_CommunityPool_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "distribution", "v1beta1", "community_pool"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_TokenizeShareRecordReward_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"cosmos", "distribution", "v1beta1", "owner_address", "tokenize_share_record_rewards"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( @@ -1063,4 +1162,6 @@ var ( forward_Query_DelegatorWithdrawAddress_0 = runtime.ForwardResponseMessage forward_Query_CommunityPool_0 = runtime.ForwardResponseMessage + + forward_Query_TokenizeShareRecordReward_0 = runtime.ForwardResponseMessage ) diff --git a/x/distribution/types/tx.pb.go b/x/distribution/types/tx.pb.go index d17fda875cae..96e297f04ff5 100644 --- a/x/distribution/types/tx.pb.go +++ b/x/distribution/types/tx.pb.go @@ -528,6 +528,168 @@ func (m *MsgCommunityPoolSpend) GetAmount() github_com_cosmos_cosmos_sdk_types.C return nil } +// MsgWithdrawTokenizeShareRecordReward withdraws tokenize share rewards for a specific record +type MsgWithdrawTokenizeShareRecordReward struct { + OwnerAddress string `protobuf:"bytes,1,opt,name=owner_address,json=ownerAddress,proto3" json:"owner_address,omitempty" yaml:"owner_address"` + RecordId uint64 `protobuf:"varint,2,opt,name=record_id,json=recordId,proto3" json:"record_id,omitempty"` +} + +func (m *MsgWithdrawTokenizeShareRecordReward) Reset() { *m = MsgWithdrawTokenizeShareRecordReward{} } +func (m *MsgWithdrawTokenizeShareRecordReward) String() string { return proto.CompactTextString(m) } +func (*MsgWithdrawTokenizeShareRecordReward) ProtoMessage() {} +func (*MsgWithdrawTokenizeShareRecordReward) Descriptor() ([]byte, []int) { + return fileDescriptor_ed4f433d965e58ca, []int{11} +} +func (m *MsgWithdrawTokenizeShareRecordReward) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgWithdrawTokenizeShareRecordReward) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgWithdrawTokenizeShareRecordReward.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 *MsgWithdrawTokenizeShareRecordReward) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgWithdrawTokenizeShareRecordReward.Merge(m, src) +} +func (m *MsgWithdrawTokenizeShareRecordReward) XXX_Size() int { + return m.Size() +} +func (m *MsgWithdrawTokenizeShareRecordReward) XXX_DiscardUnknown() { + xxx_messageInfo_MsgWithdrawTokenizeShareRecordReward.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgWithdrawTokenizeShareRecordReward proto.InternalMessageInfo + +// MsgWithdrawTokenizeShareRecordReward defines the Msg/WithdrawTokenizeShareRecordReward response type. +type MsgWithdrawTokenizeShareRecordRewardResponse struct { +} + +func (m *MsgWithdrawTokenizeShareRecordRewardResponse) Reset() { + *m = MsgWithdrawTokenizeShareRecordRewardResponse{} +} +func (m *MsgWithdrawTokenizeShareRecordRewardResponse) String() string { + return proto.CompactTextString(m) +} +func (*MsgWithdrawTokenizeShareRecordRewardResponse) ProtoMessage() {} +func (*MsgWithdrawTokenizeShareRecordRewardResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_ed4f433d965e58ca, []int{12} +} +func (m *MsgWithdrawTokenizeShareRecordRewardResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgWithdrawTokenizeShareRecordRewardResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgWithdrawTokenizeShareRecordRewardResponse.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 *MsgWithdrawTokenizeShareRecordRewardResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgWithdrawTokenizeShareRecordRewardResponse.Merge(m, src) +} +func (m *MsgWithdrawTokenizeShareRecordRewardResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgWithdrawTokenizeShareRecordRewardResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgWithdrawTokenizeShareRecordRewardResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgWithdrawTokenizeShareRecordRewardResponse proto.InternalMessageInfo + +// MsgWithdrawAllTokenizeShareRecordReward withdraws tokenize share rewards or all +// records owned by the designated owner +type MsgWithdrawAllTokenizeShareRecordReward struct { + OwnerAddress string `protobuf:"bytes,1,opt,name=owner_address,json=ownerAddress,proto3" json:"owner_address,omitempty" yaml:"owner_address"` +} + +func (m *MsgWithdrawAllTokenizeShareRecordReward) Reset() { + *m = MsgWithdrawAllTokenizeShareRecordReward{} +} +func (m *MsgWithdrawAllTokenizeShareRecordReward) String() string { return proto.CompactTextString(m) } +func (*MsgWithdrawAllTokenizeShareRecordReward) ProtoMessage() {} +func (*MsgWithdrawAllTokenizeShareRecordReward) Descriptor() ([]byte, []int) { + return fileDescriptor_ed4f433d965e58ca, []int{13} +} +func (m *MsgWithdrawAllTokenizeShareRecordReward) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgWithdrawAllTokenizeShareRecordReward) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgWithdrawAllTokenizeShareRecordReward.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 *MsgWithdrawAllTokenizeShareRecordReward) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgWithdrawAllTokenizeShareRecordReward.Merge(m, src) +} +func (m *MsgWithdrawAllTokenizeShareRecordReward) XXX_Size() int { + return m.Size() +} +func (m *MsgWithdrawAllTokenizeShareRecordReward) XXX_DiscardUnknown() { + xxx_messageInfo_MsgWithdrawAllTokenizeShareRecordReward.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgWithdrawAllTokenizeShareRecordReward proto.InternalMessageInfo + +// MsgWithdrawAllTokenizeShareRecordRewardResponse defines the Msg/WithdrawTokenizeShareRecordReward response type. +type MsgWithdrawAllTokenizeShareRecordRewardResponse struct { +} + +func (m *MsgWithdrawAllTokenizeShareRecordRewardResponse) Reset() { + *m = MsgWithdrawAllTokenizeShareRecordRewardResponse{} +} +func (m *MsgWithdrawAllTokenizeShareRecordRewardResponse) String() string { + return proto.CompactTextString(m) +} +func (*MsgWithdrawAllTokenizeShareRecordRewardResponse) ProtoMessage() {} +func (*MsgWithdrawAllTokenizeShareRecordRewardResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_ed4f433d965e58ca, []int{14} +} +func (m *MsgWithdrawAllTokenizeShareRecordRewardResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgWithdrawAllTokenizeShareRecordRewardResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgWithdrawAllTokenizeShareRecordRewardResponse.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 *MsgWithdrawAllTokenizeShareRecordRewardResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgWithdrawAllTokenizeShareRecordRewardResponse.Merge(m, src) +} +func (m *MsgWithdrawAllTokenizeShareRecordRewardResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgWithdrawAllTokenizeShareRecordRewardResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgWithdrawAllTokenizeShareRecordRewardResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgWithdrawAllTokenizeShareRecordRewardResponse proto.InternalMessageInfo + // MsgCommunityPoolSpendResponse defines the response to executing a // MsgCommunityPoolSpend message. // @@ -539,7 +701,7 @@ func (m *MsgCommunityPoolSpendResponse) Reset() { *m = MsgCommunityPoolS func (m *MsgCommunityPoolSpendResponse) String() string { return proto.CompactTextString(m) } func (*MsgCommunityPoolSpendResponse) ProtoMessage() {} func (*MsgCommunityPoolSpendResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ed4f433d965e58ca, []int{11} + return fileDescriptor_ed4f433d965e58ca, []int{15} } func (m *MsgCommunityPoolSpendResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -580,6 +742,10 @@ func init() { proto.RegisterType((*MsgUpdateParams)(nil), "cosmos.distribution.v1beta1.MsgUpdateParams") proto.RegisterType((*MsgUpdateParamsResponse)(nil), "cosmos.distribution.v1beta1.MsgUpdateParamsResponse") proto.RegisterType((*MsgCommunityPoolSpend)(nil), "cosmos.distribution.v1beta1.MsgCommunityPoolSpend") + proto.RegisterType((*MsgWithdrawTokenizeShareRecordReward)(nil), "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordReward") + proto.RegisterType((*MsgWithdrawTokenizeShareRecordRewardResponse)(nil), "cosmos.distribution.v1beta1.MsgWithdrawTokenizeShareRecordRewardResponse") + proto.RegisterType((*MsgWithdrawAllTokenizeShareRecordReward)(nil), "cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordReward") + proto.RegisterType((*MsgWithdrawAllTokenizeShareRecordRewardResponse)(nil), "cosmos.distribution.v1beta1.MsgWithdrawAllTokenizeShareRecordRewardResponse") proto.RegisterType((*MsgCommunityPoolSpendResponse)(nil), "cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse") } @@ -588,59 +754,69 @@ func init() { } var fileDescriptor_ed4f433d965e58ca = []byte{ - // 829 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xcd, 0x6b, 0x13, 0x4f, - 0x18, 0xce, 0xb4, 0xfc, 0x02, 0x99, 0xfe, 0xa0, 0x4d, 0xa8, 0xb4, 0xdd, 0xd6, 0x4d, 0xd9, 0x4a, - 0x2d, 0xc5, 0xee, 0x92, 0xf8, 0x45, 0xe3, 0x41, 0x4c, 0x6c, 0xc1, 0x43, 0xb0, 0xa4, 0xa8, 0xe0, - 0xa5, 0x6c, 0xb2, 0xeb, 0x66, 0xb0, 0xbb, 0xb3, 0xec, 0x4c, 0x9a, 0xe6, 0xa6, 0xe2, 0x41, 0x3c, - 0x88, 0xd4, 0x3f, 0xc0, 0x1e, 0x8b, 0x17, 0x7b, 0xf0, 0x8f, 0x28, 0x82, 0x50, 0x3c, 0x79, 0x52, - 0x49, 0x0f, 0x15, 0xbc, 0xea, 0x5d, 0xf6, 0x33, 0xbb, 0xd9, 0x4d, 0xd6, 0xd4, 0xaf, 0x4b, 0x5b, - 0x66, 0xde, 0xe7, 0xd9, 0xe7, 0x79, 0xe6, 0x9d, 0x77, 0x0a, 0xcf, 0xd4, 0x30, 0x51, 0x31, 0x11, - 0x24, 0x44, 0xa8, 0x81, 0xaa, 0x0d, 0x8a, 0xb0, 0x26, 0x6c, 0xe5, 0xaa, 0x32, 0x15, 0x73, 0x02, - 0xdd, 0xe6, 0x75, 0x03, 0x53, 0x9c, 0x99, 0xb6, 0xab, 0x78, 0x7f, 0x15, 0xef, 0x54, 0x31, 0xe3, - 0x0a, 0x56, 0xb0, 0x55, 0x27, 0x98, 0x7f, 0xd9, 0x10, 0x86, 0x75, 0x88, 0xab, 0x22, 0x91, 0x3d, - 0xc2, 0x1a, 0x46, 0x9a, 0xb3, 0x3f, 0x65, 0xef, 0x6f, 0xd8, 0x40, 0x87, 0xdf, 0xde, 0x9a, 0x70, - 0xa0, 0x2a, 0x51, 0x84, 0xad, 0x9c, 0xf9, 0xcb, 0xd9, 0x48, 0x8b, 0x2a, 0xd2, 0xb0, 0x60, 0xfd, - 0x74, 0x96, 0xf8, 0x7e, 0xfa, 0x03, 0x72, 0xad, 0x7a, 0xee, 0x2b, 0x80, 0xa7, 0xca, 0x44, 0x59, - 0x97, 0xe9, 0x1d, 0x44, 0xeb, 0x92, 0x21, 0x36, 0xaf, 0x49, 0x92, 0x21, 0x13, 0x92, 0x59, 0x81, - 0x69, 0x49, 0xde, 0x94, 0x15, 0x91, 0x62, 0x63, 0x43, 0xb4, 0x17, 0x27, 0xc1, 0x2c, 0x58, 0x48, - 0x15, 0x27, 0xdf, 0xbf, 0x59, 0x1a, 0x77, 0x24, 0x3a, 0xe5, 0xeb, 0xd4, 0x40, 0x9a, 0x52, 0x19, - 0xf3, 0x20, 0x2e, 0x4d, 0x09, 0x8e, 0x35, 0x1d, 0x66, 0x8f, 0x65, 0x28, 0x86, 0x65, 0xb4, 0x19, - 0xd4, 0x52, 0x58, 0x7d, 0xb2, 0x9b, 0x4d, 0x7c, 0xd9, 0xcd, 0x26, 0x1e, 0x1d, 0xef, 0x2f, 0x86, - 0x65, 0x3d, 0x3d, 0xde, 0x5f, 0x9c, 0xb3, 0x99, 0x96, 0x88, 0x74, 0x5f, 0x28, 0x13, 0xa5, 0x8c, - 0x25, 0x74, 0xaf, 0xd5, 0xe5, 0x89, 0xcb, 0xc2, 0xd3, 0x91, 0x66, 0x2b, 0x32, 0xd1, 0xb1, 0x46, - 0x64, 0xee, 0x3b, 0x80, 0x4c, 0x99, 0x28, 0xee, 0xf6, 0x75, 0xf7, 0x4b, 0x15, 0xb9, 0x29, 0x1a, - 0xd2, 0xef, 0xca, 0x64, 0x05, 0xa6, 0xb7, 0xc4, 0x4d, 0x24, 0x05, 0x68, 0xe2, 0x42, 0x19, 0xf3, - 0x20, 0x6e, 0x2a, 0x37, 0xe2, 0x53, 0x99, 0x0f, 0xa6, 0xd2, 0xe5, 0x0b, 0x61, 0xcd, 0x36, 0xc6, - 0x3d, 0x03, 0x90, 0xeb, 0xed, 0xdb, 0x8d, 0x27, 0x53, 0x87, 0x49, 0x51, 0xc5, 0x0d, 0x8d, 0x4e, - 0x82, 0xd9, 0xe1, 0x85, 0x91, 0xfc, 0x94, 0xd3, 0x6e, 0xbc, 0xd9, 0xd5, 0xee, 0x05, 0xe0, 0x4b, - 0x18, 0x69, 0xc5, 0x8b, 0x07, 0x1f, 0xb3, 0x89, 0x57, 0x9f, 0xb2, 0x0b, 0x0a, 0xa2, 0xf5, 0x46, - 0x95, 0xaf, 0x61, 0xd5, 0xe9, 0x6a, 0xc1, 0xa7, 0x89, 0xb6, 0x74, 0x99, 0x58, 0x00, 0xb2, 0x77, - 0xbc, 0xbf, 0x08, 0x2a, 0x0e, 0x3f, 0xf7, 0x1a, 0x40, 0xd6, 0x27, 0xe8, 0xb6, 0xeb, 0xbd, 0x84, - 0x55, 0x15, 0x11, 0x82, 0xb0, 0x16, 0x9d, 0x22, 0x18, 0x38, 0xc5, 0x60, 0x6f, 0x85, 0x18, 0x23, - 0x7a, 0xcb, 0x27, 0xaa, 0x23, 0x87, 0xdb, 0x01, 0x70, 0xbe, 0xbf, 0xe2, 0x7f, 0x10, 0xe3, 0x37, - 0x00, 0xc7, 0xcb, 0x44, 0x59, 0x6d, 0x68, 0x92, 0xa9, 0xa3, 0xa1, 0x21, 0xda, 0x5a, 0xc3, 0x78, - 0xf3, 0xef, 0x49, 0xc8, 0x5c, 0x82, 0x29, 0x49, 0xd6, 0x31, 0x41, 0x14, 0x1b, 0xb1, 0x4d, 0xde, - 0x29, 0x2d, 0x14, 0xfc, 0xe7, 0xd2, 0x59, 0x37, 0xcf, 0x23, 0x1b, 0x3c, 0x8f, 0x90, 0x3b, 0x8e, - 0x85, 0x33, 0x51, 0xeb, 0xde, 0x35, 0x7f, 0x07, 0xe0, 0x68, 0x99, 0x28, 0xb7, 0x74, 0x49, 0xa4, - 0xf2, 0x9a, 0x68, 0x88, 0x2a, 0x31, 0x75, 0x8a, 0x0d, 0x5a, 0xc7, 0x06, 0xa2, 0xad, 0xd8, 0x36, - 0xea, 0x94, 0x66, 0x56, 0x61, 0x52, 0xb7, 0x18, 0x2c, 0x73, 0x23, 0xf9, 0x39, 0xbe, 0xcf, 0xe3, - 0xc0, 0xdb, 0x1f, 0x2b, 0xa6, 0xcc, 0x4c, 0x9d, 0x9c, 0x6c, 0x74, 0xa1, 0x60, 0xf9, 0xf4, 0x78, - 0x4d, 0x9f, 0x67, 0x7d, 0x3e, 0x03, 0x03, 0xbd, 0x4b, 0x3b, 0x37, 0x05, 0x27, 0xba, 0x96, 0x3c, - 0xab, 0x3b, 0x43, 0xd6, 0x80, 0x0f, 0xe4, 0xb0, 0xae, 0xcb, 0x9a, 0x74, 0x62, 0xc3, 0x33, 0x30, - 0x65, 0xc8, 0x35, 0xa4, 0x23, 0x59, 0xa3, 0xf6, 0x81, 0x56, 0x3a, 0x0b, 0xbe, 0xc6, 0x1a, 0xfe, - 0xb3, 0x8d, 0x55, 0x58, 0x0e, 0x07, 0x36, 0xdf, 0x1d, 0x98, 0x10, 0x69, 0xdd, 0x79, 0x07, 0xc2, - 0x1b, 0x6e, 0x6a, 0xf9, 0xb7, 0x49, 0x38, 0x5c, 0x26, 0x4a, 0xe6, 0x31, 0x80, 0x99, 0x88, 0xb7, - 0x31, 0xdf, 0xf7, 0x8c, 0x23, 0x9f, 0x18, 0xa6, 0x30, 0x38, 0xc6, 0x1b, 0x18, 0x2f, 0x00, 0x9c, - 0xe8, 0xf5, 0x26, 0x5d, 0x8e, 0xe3, 0xed, 0x01, 0x64, 0xae, 0x9e, 0x10, 0xe8, 0xa9, 0x7a, 0x09, - 0xe0, 0x74, 0xbf, 0x01, 0x7d, 0xe5, 0x67, 0x3f, 0x10, 0x01, 0x66, 0x4a, 0xbf, 0x00, 0xf6, 0x14, - 0x3e, 0x04, 0x30, 0x1d, 0x9e, 0x7d, 0xb9, 0x38, 0xea, 0x10, 0x84, 0x59, 0x1e, 0x18, 0xe2, 0x69, - 0x30, 0xe0, 0xff, 0x81, 0x39, 0x73, 0x2e, 0x8e, 0xca, 0x5f, 0xcd, 0x5c, 0x18, 0xa4, 0xda, 0xfb, - 0xa6, 0xd9, 0xb6, 0x11, 0x37, 0x3e, 0xb6, 0x6d, 0xc3, 0x98, 0xf8, 0xb6, 0xed, 0x7d, 0x8b, 0x98, - 0xff, 0x1e, 0x98, 0x17, 0xb6, 0x78, 0x73, 0xaf, 0xcd, 0x82, 0x83, 0x36, 0x0b, 0x0e, 0xdb, 0x2c, - 0xf8, 0xdc, 0x66, 0xc1, 0xf3, 0x23, 0x36, 0x71, 0x78, 0xc4, 0x26, 0x3e, 0x1c, 0xb1, 0x89, 0xbb, - 0xb9, 0xbe, 0xb7, 0x7f, 0x3b, 0x38, 0xf8, 0xac, 0x61, 0x50, 0x4d, 0x5a, 0xff, 0xbb, 0x9e, 0xff, - 0x11, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xc9, 0x2e, 0x04, 0xad, 0x0b, 0x00, 0x00, + // 978 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x4d, 0x6f, 0x1b, 0x45, + 0x18, 0xf6, 0x34, 0x10, 0xd5, 0xd3, 0xa2, 0x26, 0xab, 0xa0, 0x24, 0x9b, 0xb2, 0x2e, 0xdb, 0x28, + 0x8d, 0xa2, 0x76, 0x57, 0x0e, 0x5f, 0xea, 0x22, 0x84, 0x12, 0xb7, 0x91, 0x22, 0x61, 0x51, 0xad, + 0xf9, 0x90, 0xb8, 0x44, 0x6b, 0xcf, 0xb0, 0x1e, 0xd5, 0xbb, 0xb3, 0xda, 0x19, 0xc7, 0x35, 0x27, + 0x40, 0x1c, 0x10, 0x42, 0x08, 0x95, 0x1f, 0x40, 0x8f, 0x15, 0x17, 0x82, 0xc4, 0x09, 0xfe, 0x40, + 0x2f, 0x48, 0x15, 0x27, 0x4e, 0x05, 0x39, 0x87, 0x20, 0x71, 0x43, 0x70, 0x47, 0xfb, 0xe9, 0x5d, + 0xef, 0xda, 0x6b, 0xf7, 0x83, 0x5e, 0xf2, 0x31, 0xf3, 0xbe, 0xcf, 0x3c, 0xcf, 0x33, 0xef, 0xbc, + 0xaf, 0x0d, 0xd7, 0x5b, 0x94, 0x59, 0x94, 0xa9, 0x88, 0x30, 0xee, 0x92, 0x66, 0x97, 0x13, 0x6a, + 0xab, 0x87, 0xd5, 0x26, 0xe6, 0x46, 0x55, 0xe5, 0xb7, 0x14, 0xc7, 0xa5, 0x9c, 0x0a, 0x6b, 0x41, + 0x94, 0x92, 0x8c, 0x52, 0xc2, 0x28, 0x71, 0xc9, 0xa4, 0x26, 0xf5, 0xe3, 0x54, 0xef, 0xaf, 0x20, + 0x45, 0x94, 0x42, 0xe0, 0xa6, 0xc1, 0x70, 0x0c, 0xd8, 0xa2, 0xc4, 0x0e, 0xf7, 0x57, 0x83, 0xfd, + 0x83, 0x20, 0x31, 0xc4, 0x0f, 0xb6, 0x96, 0xc3, 0x54, 0x8b, 0x99, 0xea, 0x61, 0xd5, 0xfb, 0x15, + 0x6e, 0x2c, 0x1a, 0x16, 0xb1, 0xa9, 0xea, 0xff, 0x0c, 0x97, 0x94, 0x49, 0xfc, 0x53, 0x74, 0xfd, + 0x78, 0xf9, 0x2f, 0x00, 0x9f, 0xaf, 0x33, 0xb3, 0x81, 0xf9, 0xfb, 0x84, 0xb7, 0x91, 0x6b, 0xf4, + 0x76, 0x10, 0x72, 0x31, 0x63, 0xc2, 0x75, 0xb8, 0x88, 0x70, 0x07, 0x9b, 0x06, 0xa7, 0xee, 0x81, + 0x11, 0x2c, 0xae, 0x80, 0x0b, 0x60, 0xb3, 0xbc, 0xbb, 0xf2, 0xeb, 0x8f, 0x57, 0x96, 0x42, 0x8a, + 0x61, 0x78, 0x83, 0xbb, 0xc4, 0x36, 0xf5, 0x85, 0x38, 0x25, 0x82, 0xa9, 0xc1, 0x85, 0x5e, 0x88, + 0x1c, 0xa3, 0x9c, 0x2a, 0x40, 0x39, 0xd7, 0x4b, 0x73, 0xd1, 0xf6, 0x3e, 0xbf, 0x53, 0x29, 0xfd, + 0x79, 0xa7, 0x52, 0xfa, 0xf4, 0xe4, 0x68, 0x2b, 0x4b, 0xeb, 0x8b, 0x93, 0xa3, 0xad, 0x8b, 0x01, + 0xd2, 0x15, 0x86, 0x6e, 0xaa, 0x75, 0x66, 0xd6, 0x29, 0x22, 0x1f, 0xf6, 0x47, 0x34, 0xc9, 0x15, + 0xf8, 0x42, 0xae, 0x58, 0x1d, 0x33, 0x87, 0xda, 0x0c, 0xcb, 0xff, 0x02, 0x28, 0xd6, 0x99, 0x19, + 0x6d, 0x5f, 0x8b, 0x4e, 0xd2, 0x71, 0xcf, 0x70, 0xd1, 0xe3, 0xf2, 0xe4, 0x3a, 0x5c, 0x3c, 0x34, + 0x3a, 0x04, 0xa5, 0x60, 0x8a, 0x4c, 0x59, 0x88, 0x53, 0x22, 0x57, 0xf6, 0x8b, 0x5d, 0xd9, 0x48, + 0xbb, 0x32, 0xa2, 0x8b, 0x50, 0x3b, 0x10, 0x26, 0x7f, 0x05, 0xa0, 0x3c, 0x5e, 0x77, 0x64, 0x8f, + 0xd0, 0x86, 0xf3, 0x86, 0x45, 0xbb, 0x36, 0x5f, 0x01, 0x17, 0xe6, 0x36, 0xcf, 0x6c, 0xaf, 0x86, + 0xe5, 0xa6, 0x78, 0x55, 0x1d, 0x3d, 0x00, 0xa5, 0x46, 0x89, 0xbd, 0xfb, 0xca, 0xbd, 0x07, 0x95, + 0xd2, 0x77, 0xbf, 0x57, 0x36, 0x4d, 0xc2, 0xdb, 0xdd, 0xa6, 0xd2, 0xa2, 0x56, 0x58, 0xd5, 0x6a, + 0x82, 0x13, 0xef, 0x3b, 0x98, 0xf9, 0x09, 0xec, 0xee, 0xc9, 0xd1, 0x16, 0xd0, 0x43, 0x7c, 0xf9, + 0x7b, 0x00, 0xa5, 0x04, 0xa1, 0xf7, 0x22, 0xed, 0x35, 0x6a, 0x59, 0x84, 0x31, 0x42, 0xed, 0x7c, + 0x17, 0xc1, 0xcc, 0x2e, 0xa6, 0x6b, 0x2b, 0x83, 0x98, 0x53, 0x5b, 0x09, 0x52, 0x43, 0x3a, 0xf2, + 0x6d, 0x00, 0x37, 0x26, 0x33, 0x7e, 0x0a, 0x36, 0xfe, 0x03, 0xe0, 0x52, 0x9d, 0x99, 0x7b, 0x5d, + 0x1b, 0x79, 0x3c, 0xba, 0x36, 0xe1, 0xfd, 0x1b, 0x94, 0x76, 0xfe, 0x3f, 0x0a, 0xc2, 0xab, 0xb0, + 0x8c, 0xb0, 0x43, 0x19, 0xe1, 0xd4, 0x2d, 0x2c, 0xf2, 0x61, 0xa8, 0xa6, 0x25, 0xef, 0x65, 0xb8, + 0xee, 0xdd, 0x47, 0x25, 0x7d, 0x1f, 0x19, 0x75, 0xb2, 0x04, 0xcf, 0xe7, 0xad, 0xc7, 0xcf, 0xfc, + 0x17, 0x00, 0xcf, 0xd5, 0x99, 0xf9, 0xae, 0x83, 0x0c, 0x8e, 0x6f, 0x18, 0xae, 0x61, 0x31, 0x8f, + 0xa7, 0xd1, 0xe5, 0x6d, 0xea, 0x12, 0xde, 0x2f, 0x2c, 0xa3, 0x61, 0xa8, 0xb0, 0x07, 0xe7, 0x1d, + 0x1f, 0xc1, 0x17, 0x77, 0x66, 0xfb, 0xa2, 0x32, 0x61, 0x38, 0x28, 0xc1, 0x61, 0xbb, 0x65, 0xcf, + 0xd3, 0xd0, 0xa7, 0x20, 0x5b, 0xd3, 0x7c, 0x9d, 0x31, 0xae, 0xa7, 0xf3, 0x52, 0x42, 0x67, 0xaa, + 0xa1, 0x8f, 0x70, 0x97, 0x57, 0xe1, 0xf2, 0xc8, 0x52, 0x2c, 0xf5, 0xf6, 0x29, 0xbf, 0xc1, 0xa7, + 0x7c, 0x68, 0x38, 0xd8, 0x46, 0x0f, 0x2d, 0xf8, 0x3c, 0x2c, 0xbb, 0xb8, 0x45, 0x1c, 0x82, 0x6d, + 0x1e, 0x5c, 0xa8, 0x3e, 0x5c, 0x48, 0x14, 0xd6, 0xdc, 0x93, 0x2d, 0x2c, 0xed, 0x6a, 0xd6, 0xb0, + 0x8d, 0x51, 0xc3, 0xd4, 0x5c, 0xe9, 0xf2, 0x97, 0x00, 0xae, 0x27, 0xde, 0xea, 0x3b, 0xf4, 0x26, + 0xb6, 0xc9, 0x47, 0xb8, 0xd1, 0x36, 0x5c, 0xac, 0xe3, 0x16, 0xf5, 0x5a, 0x9e, 0xdf, 0xf0, 0xdf, + 0x80, 0xcf, 0xd1, 0x9e, 0x8d, 0x33, 0xfd, 0xe5, 0xef, 0x07, 0x95, 0xa5, 0xbe, 0x61, 0x75, 0x34, + 0x39, 0xb5, 0x2d, 0xeb, 0x67, 0xfd, 0xff, 0xa3, 0x46, 0xbf, 0xe6, 0x5b, 0x45, 0x5d, 0x74, 0x40, + 0x90, 0x6f, 0xd5, 0x33, 0xfa, 0xe9, 0x60, 0x61, 0x1f, 0x69, 0xa7, 0xa3, 0x02, 0x97, 0x15, 0x78, + 0x79, 0x1a, 0x36, 0xf1, 0x9d, 0xba, 0xf0, 0x52, 0x22, 0x7e, 0xa7, 0xd3, 0x79, 0x52, 0x02, 0x12, + 0x1c, 0xab, 0x50, 0x9d, 0xf2, 0xcc, 0x98, 0x66, 0x30, 0x6d, 0xb3, 0xf6, 0x47, 0x01, 0xdb, 0x3f, + 0x97, 0xe1, 0x5c, 0x9d, 0x99, 0xc2, 0x67, 0x00, 0x0a, 0x39, 0x9f, 0x40, 0xb6, 0x27, 0xbe, 0xa4, + 0xdc, 0x41, 0x2e, 0x6a, 0xb3, 0xe7, 0xc4, 0x6d, 0xf9, 0x1b, 0x00, 0x97, 0xc7, 0x4d, 0xfe, 0xd7, + 0x8a, 0x70, 0xc7, 0x24, 0x8a, 0x6f, 0x3e, 0x64, 0x62, 0xcc, 0xea, 0x5b, 0x00, 0xd7, 0x26, 0x8d, + 0xc1, 0xd7, 0xa7, 0x3d, 0x20, 0x27, 0x59, 0xac, 0x3d, 0x42, 0x72, 0xcc, 0xf0, 0x13, 0x00, 0x17, + 0xb3, 0x13, 0xa6, 0x5a, 0x04, 0x9d, 0x49, 0x11, 0xaf, 0xce, 0x9c, 0x12, 0x73, 0x70, 0xe1, 0xd9, + 0x54, 0x37, 0xbf, 0x5c, 0x04, 0x95, 0x8c, 0x16, 0x5f, 0x9e, 0x25, 0x3a, 0x3e, 0xd3, 0x2b, 0xdb, + 0x9c, 0xbe, 0x5a, 0x58, 0xb6, 0xd9, 0x9c, 0xe2, 0xb2, 0x1d, 0xff, 0x8a, 0x84, 0x1f, 0x00, 0x7c, + 0xb1, 0xb8, 0x93, 0xed, 0x4c, 0x7b, 0xd3, 0x63, 0x21, 0xc4, 0xfd, 0x47, 0x86, 0x88, 0x39, 0xff, + 0x04, 0xe0, 0xfa, 0x54, 0xfd, 0xeb, 0xda, 0xb4, 0x67, 0x4e, 0x42, 0x11, 0xdf, 0x7a, 0x1c, 0x28, + 0x11, 0x79, 0xf1, 0xd9, 0x8f, 0xbd, 0x39, 0xb4, 0xfb, 0xf6, 0xdd, 0x81, 0x04, 0xee, 0x0d, 0x24, + 0x70, 0x7f, 0x20, 0x81, 0x3f, 0x06, 0x12, 0xf8, 0xfa, 0x58, 0x2a, 0xdd, 0x3f, 0x96, 0x4a, 0xbf, + 0x1d, 0x4b, 0xa5, 0x0f, 0xaa, 0x13, 0x87, 0xda, 0xad, 0xf4, 0x3c, 0xf7, 0x67, 0x5c, 0x73, 0xde, + 0xff, 0x4a, 0xf6, 0xd2, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa8, 0xa7, 0x9f, 0x2b, 0x84, 0x0e, + 0x00, 0x00, } func (this *MsgSetWithdrawAddressResponse) Equal(that interface{}) bool { @@ -826,6 +1002,48 @@ func (this *MsgCommunityPoolSpend) Equal(that interface{}) bool { } return true } +func (this *MsgWithdrawTokenizeShareRecordRewardResponse) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*MsgWithdrawTokenizeShareRecordRewardResponse) + if !ok { + that2, ok := that.(MsgWithdrawTokenizeShareRecordRewardResponse) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + return true +} +func (this *MsgWithdrawAllTokenizeShareRecordRewardResponse) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*MsgWithdrawAllTokenizeShareRecordRewardResponse) + if !ok { + that2, ok := that.(MsgWithdrawAllTokenizeShareRecordRewardResponse) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + return true +} func (this *MsgCommunityPoolSpendResponse) Equal(that interface{}) bool { if that == nil { return this == nil @@ -884,6 +1102,10 @@ type MsgClient interface { // // Since: cosmos-sdk 0.47 CommunityPoolSpend(ctx context.Context, in *MsgCommunityPoolSpend, opts ...grpc.CallOption) (*MsgCommunityPoolSpendResponse, error) + // WithdrawTokenizeShareRecordReward defines a method to withdraw reward for an owning TokenizeShareRecord + WithdrawTokenizeShareRecordReward(ctx context.Context, in *MsgWithdrawTokenizeShareRecordReward, opts ...grpc.CallOption) (*MsgWithdrawTokenizeShareRecordRewardResponse, error) + // WithdrawAllTokenizeShareRecordReward defines a method to withdraw reward for all owning TokenizeShareRecord + WithdrawAllTokenizeShareRecordReward(ctx context.Context, in *MsgWithdrawAllTokenizeShareRecordReward, opts ...grpc.CallOption) (*MsgWithdrawAllTokenizeShareRecordRewardResponse, error) } type msgClient struct { @@ -948,6 +1170,24 @@ func (c *msgClient) CommunityPoolSpend(ctx context.Context, in *MsgCommunityPool return out, nil } +func (c *msgClient) WithdrawTokenizeShareRecordReward(ctx context.Context, in *MsgWithdrawTokenizeShareRecordReward, opts ...grpc.CallOption) (*MsgWithdrawTokenizeShareRecordRewardResponse, error) { + out := new(MsgWithdrawTokenizeShareRecordRewardResponse) + err := c.cc.Invoke(ctx, "/cosmos.distribution.v1beta1.Msg/WithdrawTokenizeShareRecordReward", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) WithdrawAllTokenizeShareRecordReward(ctx context.Context, in *MsgWithdrawAllTokenizeShareRecordReward, opts ...grpc.CallOption) (*MsgWithdrawAllTokenizeShareRecordRewardResponse, error) { + out := new(MsgWithdrawAllTokenizeShareRecordRewardResponse) + err := c.cc.Invoke(ctx, "/cosmos.distribution.v1beta1.Msg/WithdrawAllTokenizeShareRecordReward", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { // SetWithdrawAddress defines a method to change the withdraw address @@ -974,6 +1214,10 @@ type MsgServer interface { // // Since: cosmos-sdk 0.47 CommunityPoolSpend(context.Context, *MsgCommunityPoolSpend) (*MsgCommunityPoolSpendResponse, error) + // WithdrawTokenizeShareRecordReward defines a method to withdraw reward for an owning TokenizeShareRecord + WithdrawTokenizeShareRecordReward(context.Context, *MsgWithdrawTokenizeShareRecordReward) (*MsgWithdrawTokenizeShareRecordRewardResponse, error) + // WithdrawAllTokenizeShareRecordReward defines a method to withdraw reward for all owning TokenizeShareRecord + WithdrawAllTokenizeShareRecordReward(context.Context, *MsgWithdrawAllTokenizeShareRecordReward) (*MsgWithdrawAllTokenizeShareRecordRewardResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -998,6 +1242,12 @@ func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateP func (*UnimplementedMsgServer) CommunityPoolSpend(ctx context.Context, req *MsgCommunityPoolSpend) (*MsgCommunityPoolSpendResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CommunityPoolSpend not implemented") } +func (*UnimplementedMsgServer) WithdrawTokenizeShareRecordReward(ctx context.Context, req *MsgWithdrawTokenizeShareRecordReward) (*MsgWithdrawTokenizeShareRecordRewardResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WithdrawTokenizeShareRecordReward not implemented") +} +func (*UnimplementedMsgServer) WithdrawAllTokenizeShareRecordReward(ctx context.Context, req *MsgWithdrawAllTokenizeShareRecordReward) (*MsgWithdrawAllTokenizeShareRecordRewardResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WithdrawAllTokenizeShareRecordReward not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -1111,6 +1361,42 @@ func _Msg_CommunityPoolSpend_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _Msg_WithdrawTokenizeShareRecordReward_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgWithdrawTokenizeShareRecordReward) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).WithdrawTokenizeShareRecordReward(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.distribution.v1beta1.Msg/WithdrawTokenizeShareRecordReward", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).WithdrawTokenizeShareRecordReward(ctx, req.(*MsgWithdrawTokenizeShareRecordReward)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_WithdrawAllTokenizeShareRecordReward_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgWithdrawAllTokenizeShareRecordReward) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).WithdrawAllTokenizeShareRecordReward(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.distribution.v1beta1.Msg/WithdrawAllTokenizeShareRecordReward", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).WithdrawAllTokenizeShareRecordReward(ctx, req.(*MsgWithdrawAllTokenizeShareRecordReward)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "cosmos.distribution.v1beta1.Msg", HandlerType: (*MsgServer)(nil), @@ -1139,6 +1425,14 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "CommunityPoolSpend", Handler: _Msg_CommunityPoolSpend_Handler, }, + { + MethodName: "WithdrawTokenizeShareRecordReward", + Handler: _Msg_WithdrawTokenizeShareRecordReward_Handler, + }, + { + MethodName: "WithdrawAllTokenizeShareRecordReward", + Handler: _Msg_WithdrawAllTokenizeShareRecordReward_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "cosmos/distribution/v1beta1/tx.proto", @@ -1526,7 +1820,7 @@ func (m *MsgCommunityPoolSpend) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgCommunityPoolSpendResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgWithdrawTokenizeShareRecordReward) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1536,76 +1830,187 @@ func (m *MsgCommunityPoolSpendResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgCommunityPoolSpendResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgWithdrawTokenizeShareRecordReward) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgCommunityPoolSpendResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgWithdrawTokenizeShareRecordReward) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if m.RecordId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.RecordId)) + i-- + dAtA[i] = 0x10 + } + if len(m.OwnerAddress) > 0 { + i -= len(m.OwnerAddress) + copy(dAtA[i:], m.OwnerAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.OwnerAddress))) + i-- + dAtA[i] = 0xa + } return len(dAtA) - i, nil } -func encodeVarintTx(dAtA []byte, offset int, v uint64) int { - offset -= sovTx(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ +func (m *MsgWithdrawTokenizeShareRecordRewardResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - dAtA[offset] = uint8(v) - return base + return dAtA[:n], nil } -func (m *MsgSetWithdrawAddress) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.DelegatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.WithdrawAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n + +func (m *MsgWithdrawTokenizeShareRecordRewardResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgSetWithdrawAddressResponse) Size() (n int) { - if m == nil { - return 0 - } +func (m *MsgWithdrawTokenizeShareRecordRewardResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - return n + return len(dAtA) - i, nil } -func (m *MsgWithdrawDelegatorReward) Size() (n int) { - if m == nil { - return 0 +func (m *MsgWithdrawAllTokenizeShareRecordReward) 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 *MsgWithdrawAllTokenizeShareRecordReward) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgWithdrawAllTokenizeShareRecordReward) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.DelegatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.ValidatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if len(m.OwnerAddress) > 0 { + i -= len(m.OwnerAddress) + copy(dAtA[i:], m.OwnerAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.OwnerAddress))) + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *MsgWithdrawDelegatorRewardResponse) Size() (n int) { - if m == nil { - return 0 +func (m *MsgWithdrawAllTokenizeShareRecordRewardResponse) 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 *MsgWithdrawAllTokenizeShareRecordRewardResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgWithdrawAllTokenizeShareRecordRewardResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgCommunityPoolSpendResponse) 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 *MsgCommunityPoolSpendResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCommunityPoolSpendResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgSetWithdrawAddress) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.WithdrawAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgSetWithdrawAddressResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgWithdrawDelegatorReward) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgWithdrawDelegatorRewardResponse) Size() (n int) { + if m == nil { + return 0 } var l int _ = l @@ -1721,6 +2126,53 @@ func (m *MsgCommunityPoolSpend) Size() (n int) { return n } +func (m *MsgWithdrawTokenizeShareRecordReward) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.OwnerAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.RecordId != 0 { + n += 1 + sovTx(uint64(m.RecordId)) + } + return n +} + +func (m *MsgWithdrawTokenizeShareRecordRewardResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgWithdrawAllTokenizeShareRecordReward) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.OwnerAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgWithdrawAllTokenizeShareRecordRewardResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgCommunityPoolSpendResponse) Size() (n int) { if m == nil { return 0 @@ -2743,6 +3195,289 @@ func (m *MsgCommunityPoolSpend) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgWithdrawTokenizeShareRecordReward) 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: MsgWithdrawTokenizeShareRecordReward: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgWithdrawTokenizeShareRecordReward: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OwnerAddress", 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.OwnerAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RecordId", wireType) + } + m.RecordId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.RecordId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 *MsgWithdrawTokenizeShareRecordRewardResponse) 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: MsgWithdrawTokenizeShareRecordRewardResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgWithdrawTokenizeShareRecordRewardResponse: 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 *MsgWithdrawAllTokenizeShareRecordReward) 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: MsgWithdrawAllTokenizeShareRecordReward: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgWithdrawAllTokenizeShareRecordReward: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OwnerAddress", 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.OwnerAddress = 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 *MsgWithdrawAllTokenizeShareRecordRewardResponse) 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: MsgWithdrawAllTokenizeShareRecordRewardResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgWithdrawAllTokenizeShareRecordRewardResponse: 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 *MsgCommunityPoolSpendResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/genutil/gentx_test.go b/x/genutil/gentx_test.go index 6df2bd578f4d..d68f33e90391 100644 --- a/x/genutil/gentx_test.go +++ b/x/genutil/gentx_test.go @@ -7,8 +7,6 @@ import ( "testing" "time" - "cosmossdk.io/math" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/cosmos/cosmos-sdk/testutil" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" @@ -62,12 +60,11 @@ func (suite *GenTxTestSuite) SetupTest() { var err error amount := sdk.NewInt64Coin(sdk.DefaultBondDenom, 50) - one := math.OneInt() suite.msg1, err = stakingtypes.NewMsgCreateValidator( - sdk.ValAddress(pk1.Address()), pk1, amount, desc, comm, one) + sdk.ValAddress(pk1.Address()), pk1, amount, desc, comm) suite.NoError(err) suite.msg2, err = stakingtypes.NewMsgCreateValidator( - sdk.ValAddress(pk2.Address()), pk1, amount, desc, comm, one) + sdk.ValAddress(pk2.Address()), pk1, amount, desc, comm) suite.NoError(err) } diff --git a/x/genutil/types/genesis_state_test.go b/x/genutil/types/genesis_state_test.go index a589f5a4f953..f114d7c5a38e 100644 --- a/x/genutil/types/genesis_state_test.go +++ b/x/genutil/types/genesis_state_test.go @@ -4,7 +4,6 @@ import ( "encoding/json" "testing" - "cosmossdk.io/math" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -41,11 +40,11 @@ func TestValidateGenesisMultipleMessages(t *testing.T) { comm := stakingtypes.CommissionRates{} msg1, err := stakingtypes.NewMsgCreateValidator(sdk.ValAddress(pk1.Address()), pk1, - sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm, math.OneInt()) + sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm) require.NoError(t, err) msg2, err := stakingtypes.NewMsgCreateValidator(sdk.ValAddress(pk2.Address()), pk2, - sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm, math.OneInt()) + sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm) require.NoError(t, err) txConfig := moduletestutil.MakeTestEncodingConfig(staking.AppModuleBasic{}, genutil.AppModuleBasic{}).TxConfig @@ -62,7 +61,7 @@ func TestValidateGenesisMultipleMessages(t *testing.T) { func TestValidateGenesisBadMessage(t *testing.T) { desc := stakingtypes.NewDescription("testname", "", "", "", "") - msg1 := stakingtypes.NewMsgEditValidator(sdk.ValAddress(pk1.Address()), desc, nil, nil) + msg1 := stakingtypes.NewMsgEditValidator(sdk.ValAddress(pk1.Address()), desc, nil) txConfig := moduletestutil.MakeTestEncodingConfig(staking.AppModuleBasic{}, genutil.AppModuleBasic{}).TxConfig txBuilder := txConfig.NewTxBuilder() diff --git a/x/gov/abci_test.go b/x/gov/abci_test.go index c480acd31d5b..084aed370fa4 100644 --- a/x/gov/abci_test.go +++ b/x/gov/abci_test.go @@ -4,7 +4,6 @@ import ( "testing" "time" - "cosmossdk.io/math" abci "github.com/cometbft/cometbft/abci/types" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/stretchr/testify/require" @@ -391,7 +390,7 @@ func createValidators(t *testing.T, stakingMsgSvr stakingtypes.MsgServer, ctx sd valTokens := sdk.TokensFromConsensusPower(powerAmt[i], sdk.DefaultPowerReduction) valCreateMsg, err := stakingtypes.NewMsgCreateValidator( addrs[i], pubkeys[i], sdk.NewCoin(sdk.DefaultBondDenom, valTokens), - TestDescription, TestCommissionRates, math.OneInt(), + TestDescription, TestCommissionRates, ) require.NoError(t, err) res, err := stakingMsgSvr.CreateValidator(sdk.WrapSDKContext(ctx), valCreateMsg) diff --git a/x/slashing/app_test.go b/x/slashing/app_test.go index 9f5b47aedb17..dcb3aaf2200e 100644 --- a/x/slashing/app_test.go +++ b/x/slashing/app_test.go @@ -72,7 +72,7 @@ func TestSlashingMsgs(t *testing.T) { commission := stakingtypes.NewCommissionRates(math.LegacyZeroDec(), math.LegacyZeroDec(), math.LegacyZeroDec()) createValidatorMsg, err := stakingtypes.NewMsgCreateValidator( - sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commission, math.OneInt(), + sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commission, ) require.NoError(t, err) diff --git a/x/staking/README.md b/x/staking/README.md index e369c6c175b4..acc51ee8f0f4 100644 --- a/x/staking/README.md +++ b/x/staking/README.md @@ -1560,7 +1560,7 @@ simd tx staking --help ##### create-validator -The command `create-validator` allows users to create new validator initialized with a self-delegation to it. +The command `create-validator` allows users to create new validator. Usage: @@ -1581,7 +1581,6 @@ simd tx staking create-validator \ --commission-rate="0.10" \ --commission-max-rate="0.20" \ --commission-max-change-rate="0.01" \ - --min-self-delegation="1" \ --gas="auto" \ --gas-adjustment="1.2" \ --gas-prices="0.025stake" \ diff --git a/x/staking/app_test.go b/x/staking/app_test.go index fb5305a39992..126d9c3793c8 100644 --- a/x/staking/app_test.go +++ b/x/staking/app_test.go @@ -63,7 +63,7 @@ func TestStakingMsgs(t *testing.T) { // create validator description := types.NewDescription("foo_moniker", "", "", "", "") createValidatorMsg, err := types.NewMsgCreateValidator( - sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commissionRates, math.OneInt(), + sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commissionRates, ) require.NoError(t, err) @@ -87,7 +87,7 @@ func TestStakingMsgs(t *testing.T) { // edit the validator description = types.NewDescription("bar_moniker", "", "", "", "") - editValidatorMsg := types.NewMsgEditValidator(sdk.ValAddress(addr1), description, nil, nil) + editValidatorMsg := types.NewMsgEditValidator(sdk.ValAddress(addr1), description, nil) header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simtestutil.SignCheckDeliver(t, txConfig, app.BaseApp, header, []sdk.Msg{editValidatorMsg}, "", []uint64{0}, []uint64{1}, true, true, priv1) diff --git a/x/staking/client/cli/flags.go b/x/staking/client/cli/flags.go index 2bdc93168b6a..14dfda8e6be7 100644 --- a/x/staking/client/cli/flags.go +++ b/x/staking/client/cli/flags.go @@ -26,8 +26,6 @@ const ( FlagCommissionMaxRate = "commission-max-rate" FlagCommissionMaxChangeRate = "commission-max-change-rate" - FlagMinSelfDelegation = "min-self-delegation" - FlagGenesisFormat = "genesis-format" FlagNodeID = "node-id" FlagIP = "ip" @@ -60,13 +58,6 @@ func FlagSetCommissionCreate() *flag.FlagSet { return fs } -// FlagSetMinSelfDelegation Returns the FlagSet used for minimum set delegation. -func FlagSetMinSelfDelegation() *flag.FlagSet { - fs := flag.NewFlagSet("", flag.ContinueOnError) - fs.String(FlagMinSelfDelegation, "", "The minimum self delegation required on the validator") - return fs -} - // FlagSetAmount Returns the FlagSet for amount related operations. func FlagSetAmount() *flag.FlagSet { fs := flag.NewFlagSet("", flag.ContinueOnError) diff --git a/x/staking/client/cli/tx.go b/x/staking/client/cli/tx.go index d3592e91fc5e..ceebbe40a54b 100644 --- a/x/staking/client/cli/tx.go +++ b/x/staking/client/cli/tx.go @@ -6,8 +6,6 @@ import ( "strconv" "strings" - "cosmossdk.io/math" - "github.com/spf13/cobra" flag "github.com/spf13/pflag" @@ -28,7 +26,6 @@ var ( defaultCommissionRate = "0.1" defaultCommissionMaxRate = "0.2" defaultCommissionMaxChangeRate = "0.01" - defaultMinSelfDelegation = "1" ) // NewTxCmd returns a root CLI command handler for all x/staking transaction commands. @@ -57,7 +54,7 @@ func NewTxCmd() *cobra.Command { func NewCreateValidatorCmd() *cobra.Command { cmd := &cobra.Command{ Use: "create-validator", - Short: "create new validator initialized with a self-delegation to it", + Short: "create new validator", RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientTxContext(cmd) if err != nil { @@ -82,7 +79,6 @@ func NewCreateValidatorCmd() *cobra.Command { cmd.Flags().AddFlagSet(FlagSetAmount()) cmd.Flags().AddFlagSet(flagSetDescriptionCreate()) cmd.Flags().AddFlagSet(FlagSetCommissionCreate()) - cmd.Flags().AddFlagSet(FlagSetMinSelfDelegation()) cmd.Flags().String(FlagIP, "", fmt.Sprintf("The node's public IP. It takes effect only when used in combination with --%s", flags.FlagGenerateOnly)) cmd.Flags().String(FlagNodeID, "", "The node's ID") @@ -126,19 +122,7 @@ func NewEditValidatorCmd() *cobra.Command { newRate = &rate } - var newMinSelfDelegation *math.Int - - minSelfDelegationString, _ := cmd.Flags().GetString(FlagMinSelfDelegation) - if minSelfDelegationString != "" { - msb, ok := sdk.NewIntFromString(minSelfDelegationString) - if !ok { - return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "minimum self delegation must be a positive integer") - } - - newMinSelfDelegation = &msb - } - - msg := types.NewMsgEditValidator(sdk.ValAddress(valAddr), description, newRate, newMinSelfDelegation) + msg := types.NewMsgEditValidator(sdk.ValAddress(valAddr), description, newRate) return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, @@ -146,7 +130,6 @@ func NewEditValidatorCmd() *cobra.Command { cmd.Flags().AddFlagSet(flagSetDescriptionEdit()) cmd.Flags().AddFlagSet(flagSetCommissionUpdate()) - cmd.Flags().AddFlagSet(FlagSetMinSelfDelegation()) flags.AddTxFlagsToCmd(cmd) return cmd @@ -381,16 +364,8 @@ func newBuildCreateValidatorMsg(clientCtx client.Context, txf tx.Factory, fs *fl return txf, nil, err } - // get the initial validator min self delegation - msbStr, _ := fs.GetString(FlagMinSelfDelegation) - - minSelfDelegation, ok := sdk.NewIntFromString(msbStr) - if !ok { - return txf, nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "minimum self delegation must be a positive integer") - } - msg, err := types.NewMsgCreateValidator( - sdk.ValAddress(valAddr), pk, amount, description, commissionRates, minSelfDelegation, + sdk.ValAddress(valAddr), pk, amount, description, commissionRates, ) if err != nil { return txf, nil, err @@ -426,7 +401,6 @@ func CreateValidatorMsgFlagSet(ipDefault string) (fs *flag.FlagSet, defaultsDesc fsCreateValidator.String(FlagDetails, "", "The validator's (optional) details") fsCreateValidator.String(FlagIdentity, "", "The (optional) identity signature (ex. UPort or Keybase)") fsCreateValidator.AddFlagSet(FlagSetCommissionCreate()) - fsCreateValidator.AddFlagSet(FlagSetMinSelfDelegation()) fsCreateValidator.AddFlagSet(FlagSetAmount()) fsCreateValidator.AddFlagSet(FlagSetPublicKey()) @@ -435,10 +409,8 @@ func CreateValidatorMsgFlagSet(ipDefault string) (fs *flag.FlagSet, defaultsDesc commission rate: %s commission max rate: %s commission max change rate: %s - minimum self delegation: %s `, defaultAmount, defaultCommissionRate, - defaultCommissionMaxRate, defaultCommissionMaxChangeRate, - defaultMinSelfDelegation) + defaultCommissionMaxRate, defaultCommissionMaxChangeRate) return fsCreateValidator, defaultsDesc } @@ -453,7 +425,6 @@ type TxCreateValidatorConfig struct { CommissionRate string CommissionMaxRate string CommissionMaxChangeRate string - MinSelfDelegation string PubKey cryptotypes.PubKey @@ -522,11 +493,6 @@ func PrepareConfigForTxCreateValidator(flagSet *flag.FlagSet, moniker, nodeID, c return c, err } - c.MinSelfDelegation, err = flagSet.GetString(FlagMinSelfDelegation) - if err != nil { - return c, err - } - c.IP = ip c.P2PPort = p2pPort c.Website = website @@ -557,10 +523,6 @@ func PrepareConfigForTxCreateValidator(flagSet *flag.FlagSet, moniker, nodeID, c c.CommissionMaxChangeRate = defaultCommissionMaxChangeRate } - if c.MinSelfDelegation == "" { - c.MinSelfDelegation = defaultMinSelfDelegation - } - return c, nil } @@ -590,21 +552,12 @@ func BuildCreateValidatorMsg(clientCtx client.Context, config TxCreateValidatorC return txBldr, nil, err } - // get the initial validator min self delegation - msbStr := config.MinSelfDelegation - minSelfDelegation, ok := sdk.NewIntFromString(msbStr) - - if !ok { - return txBldr, nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "minimum self delegation must be a positive integer") - } - msg, err := types.NewMsgCreateValidator( sdk.ValAddress(valAddr), config.PubKey, amount, description, commissionRates, - minSelfDelegation, ) if err != nil { return txBldr, msg, err diff --git a/x/staking/client/cli/tx_test.go b/x/staking/client/cli/tx_test.go index 3a47554496d8..e0810b4f0ecb 100644 --- a/x/staking/client/cli/tx_test.go +++ b/x/staking/client/cli/tx_test.go @@ -80,7 +80,7 @@ func (s *CLITestSuite) TestPrepareConfigForTxCreateValidator() { privKey := ed25519.GenPrivKey() valPubKey := privKey.PubKey() moniker := "DefaultMoniker" - mkTxValCfg := func(amount, commission, commissionMax, commissionMaxChange, minSelfDelegation string) cli.TxCreateValidatorConfig { + mkTxValCfg := func(amount, commission, commissionMax, commissionMaxChange string) cli.TxCreateValidatorConfig { return cli.TxCreateValidatorConfig{ IP: ip, ChainID: chainID, @@ -92,7 +92,6 @@ func (s *CLITestSuite) TestPrepareConfigForTxCreateValidator() { CommissionRate: commission, CommissionMaxRate: commissionMax, CommissionMaxChangeRate: commissionMaxChange, - MinSelfDelegation: minSelfDelegation, } } @@ -104,42 +103,35 @@ func (s *CLITestSuite) TestPrepareConfigForTxCreateValidator() { { name: "all defaults", fsModify: func(fs *pflag.FlagSet) {}, - expectedCfg: mkTxValCfg(cli.DefaultTokens.String()+sdk.DefaultBondDenom, "0.1", "0.2", "0.01", "1"), + expectedCfg: mkTxValCfg(cli.DefaultTokens.String()+sdk.DefaultBondDenom, "0.1", "0.2", "0.01"), }, { name: "Custom amount", fsModify: func(fs *pflag.FlagSet) { fs.Set(cli.FlagAmount, "2000stake") }, - expectedCfg: mkTxValCfg("2000stake", "0.1", "0.2", "0.01", "1"), + expectedCfg: mkTxValCfg("2000stake", "0.1", "0.2", "0.01"), }, { name: "Custom commission rate", fsModify: func(fs *pflag.FlagSet) { fs.Set(cli.FlagCommissionRate, "0.54") }, - expectedCfg: mkTxValCfg(cli.DefaultTokens.String()+sdk.DefaultBondDenom, "0.54", "0.2", "0.01", "1"), + expectedCfg: mkTxValCfg(cli.DefaultTokens.String()+sdk.DefaultBondDenom, "0.54", "0.2", "0.01"), }, { name: "Custom commission max rate", fsModify: func(fs *pflag.FlagSet) { fs.Set(cli.FlagCommissionMaxRate, "0.89") }, - expectedCfg: mkTxValCfg(cli.DefaultTokens.String()+sdk.DefaultBondDenom, "0.1", "0.89", "0.01", "1"), + expectedCfg: mkTxValCfg(cli.DefaultTokens.String()+sdk.DefaultBondDenom, "0.1", "0.89", "0.01"), }, { name: "Custom commission max change rate", fsModify: func(fs *pflag.FlagSet) { fs.Set(cli.FlagCommissionMaxChangeRate, "0.55") }, - expectedCfg: mkTxValCfg(cli.DefaultTokens.String()+sdk.DefaultBondDenom, "0.1", "0.2", "0.55", "1"), - }, - { - name: "Custom min self delegations", - fsModify: func(fs *pflag.FlagSet) { - fs.Set(cli.FlagMinSelfDelegation, "0.33") - }, - expectedCfg: mkTxValCfg(cli.DefaultTokens.String()+sdk.DefaultBondDenom, "0.1", "0.2", "0.01", "0.33"), + expectedCfg: mkTxValCfg(cli.DefaultTokens.String()+sdk.DefaultBondDenom, "0.1", "0.2", "0.55"), }, } @@ -185,7 +177,6 @@ func (s *CLITestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=0.5", cli.FlagCommissionRate), fmt.Sprintf("--%s=1.0", cli.FlagCommissionMaxRate), fmt.Sprintf("--%s=0.1", cli.FlagCommissionMaxChangeRate), - fmt.Sprintf("--%s=1", cli.FlagMinSelfDelegation), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.addrs[0]), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), @@ -204,7 +195,6 @@ func (s *CLITestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=0.5", cli.FlagCommissionRate), fmt.Sprintf("--%s=1.0", cli.FlagCommissionMaxRate), fmt.Sprintf("--%s=0.1", cli.FlagCommissionMaxChangeRate), - fmt.Sprintf("--%s=1", cli.FlagMinSelfDelegation), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.addrs[0]), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), @@ -224,7 +214,6 @@ func (s *CLITestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=0.5", cli.FlagCommissionRate), fmt.Sprintf("--%s=1.0", cli.FlagCommissionMaxRate), fmt.Sprintf("--%s=0.1", cli.FlagCommissionMaxChangeRate), - fmt.Sprintf("--%s=1", cli.FlagMinSelfDelegation), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.addrs[0]), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), @@ -245,7 +234,6 @@ func (s *CLITestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=0.5", cli.FlagCommissionRate), fmt.Sprintf("--%s=1.0", cli.FlagCommissionMaxRate), fmt.Sprintf("--%s=0.1", cli.FlagCommissionMaxChangeRate), - fmt.Sprintf("--%s=1", cli.FlagMinSelfDelegation), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.addrs[0]), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), diff --git a/x/staking/keeper/grpc_query.go b/x/staking/keeper/grpc_query.go index 2ff23e2f4cf0..87bb4539723b 100644 --- a/x/staking/keeper/grpc_query.go +++ b/x/staking/keeper/grpc_query.go @@ -4,6 +4,7 @@ import ( "context" "strings" + "cosmossdk.io/math" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -611,3 +612,77 @@ func RedelegationsToRedelegationResponses(ctx sdk.Context, k *Keeper, redels typ return resp, nil } + +// Query for individual tokenize share record information by share by id +func (k Querier) TokenizeShareRecordById(c context.Context, req *types.QueryTokenizeShareRecordByIdRequest) (*types.QueryTokenizeShareRecordByIdResponse, error) { //nolint:revive // fixing this would require changing the .proto files, so we might as well leave it alone + record := types.TokenizeShareRecord{} + // TODO add LSM logic + return &types.QueryTokenizeShareRecordByIdResponse{ + Record: record, + }, nil +} + +// Query for individual tokenize share record information by share denom +func (k Querier) TokenizeShareRecordByDenom(c context.Context, req *types.QueryTokenizeShareRecordByDenomRequest) (*types.QueryTokenizeShareRecordByDenomResponse, error) { + record := types.TokenizeShareRecord{} + // TODO add LSM logic + return &types.QueryTokenizeShareRecordByDenomResponse{ + Record: record, + }, nil +} + +// Query tokenize share records by address +func (k Querier) TokenizeShareRecordsOwned(c context.Context, req *types.QueryTokenizeShareRecordsOwnedRequest) (*types.QueryTokenizeShareRecordsOwnedResponse, error) { + records := []types.TokenizeShareRecord{} + // TODO add LSM logic + return &types.QueryTokenizeShareRecordsOwnedResponse{ + Records: records, + }, nil +} + +// Query for all tokenize share records +func (k Querier) AllTokenizeShareRecords(c context.Context, req *types.QueryAllTokenizeShareRecordsRequest) (*types.QueryAllTokenizeShareRecordsResponse, error) { + records := []types.TokenizeShareRecord{} + // TODO add LSM logic + return &types.QueryAllTokenizeShareRecordsResponse{ + Records: records, + Pagination: nil, + }, nil +} + +// Query for last tokenize share record id +func (k Querier) LastTokenizeShareRecordId(c context.Context, req *types.QueryLastTokenizeShareRecordIdRequest) (*types.QueryLastTokenizeShareRecordIdResponse, error) { //nolint:revive // fixing this would require changing the .proto files, so we might as well leave it alone + // TODO add LSM logic + return &types.QueryLastTokenizeShareRecordIdResponse{ + Id: 0, + }, nil +} + +// Query for total tokenized staked assets +func (k Querier) TotalTokenizeSharedAssets(c context.Context, req *types.QueryTotalTokenizeSharedAssetsRequest) (*types.QueryTotalTokenizeSharedAssetsResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + totalTokenizeShared := math.Int{} + // TODO add LSM logic + return &types.QueryTotalTokenizeSharedAssetsResponse{ + Value: sdk.NewCoin(k.BondDenom(ctx), totalTokenizeShared), + }, nil +} + +// Query for total tokenized staked tokens +// Liquid staked tokens are either tokenized delegations or delegations +// owned by a module account +func (k Querier) TotalLiquidStaked(c context.Context, req *types.QueryTotalLiquidStaked) (*types.QueryTotalLiquidStakedResponse, error) { + // TODO add LSM logic + return &types.QueryTotalLiquidStakedResponse{ + Tokens: "", + }, nil +} + +// Query status of an account's tokenize share lock +func (k Querier) TokenizeShareLockInfo(c context.Context, req *types.QueryTokenizeShareLockInfo) (*types.QueryTokenizeShareLockInfoResponse, error) { + // TODO add LSM logic + return &types.QueryTokenizeShareLockInfoResponse{ + Status: "", + ExpirationTime: "", + }, nil +} diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index cb82c5672f65..93615bcb137d 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -105,10 +105,11 @@ func (k msgServer) CreateValidator(goCtx context.Context, msg *types.MsgCreateVa return nil, err } - validator.MinSelfDelegation = msg.MinSelfDelegation - k.SetValidator(ctx, validator) - k.SetValidatorByConsAddr(ctx, validator) + err = k.SetValidatorByConsAddr(ctx, validator) + if err != nil { + return nil, err + } k.SetNewValidatorByPowerIndex(ctx, validator) // call the after-creation hook @@ -170,25 +171,12 @@ func (k msgServer) EditValidator(goCtx context.Context, msg *types.MsgEditValida validator.Commission = commission } - if msg.MinSelfDelegation != nil { - if !msg.MinSelfDelegation.GT(validator.MinSelfDelegation) { - return nil, types.ErrMinSelfDelegationDecreased - } - - if msg.MinSelfDelegation.GT(validator.Tokens) { - return nil, types.ErrSelfDelegationBelowMinimum - } - - validator.MinSelfDelegation = *msg.MinSelfDelegation - } - k.SetValidator(ctx, validator) ctx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( types.EventTypeEditValidator, sdk.NewAttribute(types.AttributeKeyCommissionRate, validator.Commission.String()), - sdk.NewAttribute(types.AttributeKeyMinSelfDelegation, validator.MinSelfDelegation.String()), ), }) @@ -491,3 +479,58 @@ func (ms msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdatePara return &types.MsgUpdateParamsResponse{}, nil } + +// UnbondValidator defines a method for performing the status transition for +// a validator from bonded to unbonding +// This allows a validator to stop their services and jail themselves without +// experiencing a slash +func (k msgServer) UnbondValidator(goCtx context.Context, msg *types.MsgUnbondValidator) (*types.MsgUnbondValidatorResponse, error) { + // TODO add LSM logic + return &types.MsgUnbondValidatorResponse{}, nil +} + +// Tokenizes shares associated with a delegation by creating a tokenize share record +// and returning tokens with a denom of the format {validatorAddress}/{recordId} +func (k msgServer) TokenizeShares(goCtx context.Context, msg *types.MsgTokenizeShares) (*types.MsgTokenizeSharesResponse, error) { + shareToken := sdk.Coin{} + // TODO add LSM logic + return &types.MsgTokenizeSharesResponse{ + Amount: shareToken, + }, nil +} + +// Converts tokenized shares back into a native delegation +func (k msgServer) RedeemTokensForShares(goCtx context.Context, msg *types.MsgRedeemTokensForShares) (*types.MsgRedeemTokensForSharesResponse, error) { + returnCoin := sdk.Coin{} + // TODO add LSM logic + return &types.MsgRedeemTokensForSharesResponse{ + Amount: returnCoin, + }, nil +} + +// Transfers the ownership of rewards associated with a tokenize share record +func (k msgServer) TransferTokenizeShareRecord(goCtx context.Context, msg *types.MsgTransferTokenizeShareRecord) (*types.MsgTransferTokenizeShareRecordResponse, error) { + // TODO add LSM logic + return &types.MsgTransferTokenizeShareRecordResponse{}, nil +} + +// DisableTokenizeShares prevents an address from tokenizing any of their delegations +func (k msgServer) DisableTokenizeShares(goCtx context.Context, msg *types.MsgDisableTokenizeShares) (*types.MsgDisableTokenizeSharesResponse, error) { + // TODO add LSM logic + return &types.MsgDisableTokenizeSharesResponse{}, nil +} + +// EnableTokenizeShares begins the countdown after which tokenizing shares by the +// sender address is re-allowed, which will complete after the unbonding period +func (k msgServer) EnableTokenizeShares(goCtx context.Context, msg *types.MsgEnableTokenizeShares) (*types.MsgEnableTokenizeSharesResponse, error) { + completionTime := time.Time{} + // TODO add LSM logic + return &types.MsgEnableTokenizeSharesResponse{CompletionTime: completionTime}, nil +} + +// Designates a delegation as a validator bond +// This enables the validator to receive more liquid staking delegations +func (k msgServer) ValidatorBond(goCtx context.Context, msg *types.MsgValidatorBond) (*types.MsgValidatorBondResponse, error) { + // TODO add LSM logic + return &types.MsgValidatorBondResponse{}, nil +} diff --git a/x/staking/simulation/operations.go b/x/staking/simulation/operations.go index edea79a6f6c6..15ad194a09a5 100644 --- a/x/staking/simulation/operations.go +++ b/x/staking/simulation/operations.go @@ -4,7 +4,6 @@ import ( "fmt" "math/rand" - "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/testutil" @@ -169,7 +168,7 @@ func SimulateMsgCreateValidator(ak types.AccountKeeper, bk types.BankKeeper, k * simtypes.RandomDecAmount(r, maxCommission), ) - msg, err := types.NewMsgCreateValidator(address, simAccount.ConsKey.PubKey(), selfDelegation, description, commission, math.OneInt()) + msg, err := types.NewMsgCreateValidator(address, simAccount.ConsKey.PubKey(), selfDelegation, description, commission) if err != nil { return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to create CreateValidator message"), nil, err } @@ -229,7 +228,7 @@ func SimulateMsgEditValidator(ak types.AccountKeeper, bk types.BankKeeper, k *ke simtypes.RandStringOfLength(r, 10), ) - msg := types.NewMsgEditValidator(address, description, &newCommissionRate, nil) + msg := types.NewMsgEditValidator(address, description, &newCommissionRate) txCtx := simulation.OperationInput{ R: r, diff --git a/x/staking/testutil/helpers.go b/x/staking/testutil/helpers.go index 7aeb9934b6c4..ccd01da285bc 100644 --- a/x/staking/testutil/helpers.go +++ b/x/staking/testutil/helpers.go @@ -51,7 +51,7 @@ func (sh *Helper) CreateValidatorWithValPower(addr sdk.ValAddress, pk cryptotype // CreateValidatorMsg returns a message used to create validator in this service. func (sh *Helper) CreateValidatorMsg(addr sdk.ValAddress, pk cryptotypes.PubKey, stakeAmount math.Int) *stakingtypes.MsgCreateValidator { coin := sdk.NewCoin(sh.Denom, stakeAmount) - msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission, math.OneInt()) + msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission) require.NoError(sh.t, err) return msg } @@ -62,7 +62,7 @@ func (sh *Helper) CreateValidatorWithMsg(ctx context.Context, msg *stakingtypes. } func (sh *Helper) createValidator(addr sdk.ValAddress, pk cryptotypes.PubKey, coin sdk.Coin, ok bool) { - msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission, math.OneInt()) + msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission) require.NoError(sh.t, err) res, err := sh.msgSrvr.CreateValidator(sdk.WrapSDKContext(sh.Ctx), msg) if ok { diff --git a/x/staking/types/events.go b/x/staking/types/events.go index 2004e0d4c1ff..5195955feae7 100644 --- a/x/staking/types/events.go +++ b/x/staking/types/events.go @@ -11,13 +11,12 @@ const ( EventTypeCancelUnbondingDelegation = "cancel_unbonding_delegation" EventTypeRedelegate = "redelegate" - AttributeKeyValidator = "validator" - AttributeKeyCommissionRate = "commission_rate" - AttributeKeyMinSelfDelegation = "min_self_delegation" - AttributeKeySrcValidator = "source_validator" - AttributeKeyDstValidator = "destination_validator" - AttributeKeyDelegator = "delegator" - AttributeKeyCreationHeight = "creation_height" - AttributeKeyCompletionTime = "completion_time" - AttributeKeyNewShares = "new_shares" + AttributeKeyValidator = "validator" + AttributeKeyCommissionRate = "commission_rate" + AttributeKeySrcValidator = "source_validator" + AttributeKeyDstValidator = "destination_validator" + AttributeKeyDelegator = "delegator" + AttributeKeyCreationHeight = "creation_height" + AttributeKeyCompletionTime = "completion_time" + AttributeKeyNewShares = "new_shares" ) diff --git a/x/staking/types/genesis.pb.go b/x/staking/types/genesis.pb.go index 4bf94371329b..2d87b53bfa19 100644 --- a/x/staking/types/genesis.pb.go +++ b/x/staking/types/genesis.pb.go @@ -10,15 +10,19 @@ import ( _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" + time "time" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf +var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -45,6 +49,14 @@ type GenesisState struct { // redelegations defines the redelegations active at genesis. Redelegations []Redelegation `protobuf:"bytes,7,rep,name=redelegations,proto3" json:"redelegations"` Exported bool `protobuf:"varint,8,opt,name=exported,proto3" json:"exported,omitempty"` + // store tokenize share records to provide reward to record owners + TokenizeShareRecords []TokenizeShareRecord `protobuf:"bytes,9,rep,name=tokenize_share_records,json=tokenizeShareRecords,proto3" json:"tokenize_share_records"` + // last tokenize share record id, used for next share record id calculation + LastTokenizeShareRecordId uint64 `protobuf:"varint,10,opt,name=last_tokenize_share_record_id,json=lastTokenizeShareRecordId,proto3" json:"last_tokenize_share_record_id,omitempty"` + // total number of liquid staked tokens at genesis + TotalLiquidStakedTokens github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,11,opt,name=total_liquid_staked_tokens,json=totalLiquidStakedTokens,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"total_liquid_staked_tokens" yaml:"total_liquid_staked_tokens"` + // tokenize shares locks at genesis + TokenizeShareLocks []TokenizeShareLock `protobuf:"bytes,12,rep,name=tokenize_share_locks,json=tokenizeShareLocks,proto3" json:"tokenize_share_locks"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -129,6 +141,91 @@ func (m *GenesisState) GetExported() bool { return false } +func (m *GenesisState) GetTokenizeShareRecords() []TokenizeShareRecord { + if m != nil { + return m.TokenizeShareRecords + } + return nil +} + +func (m *GenesisState) GetLastTokenizeShareRecordId() uint64 { + if m != nil { + return m.LastTokenizeShareRecordId + } + return 0 +} + +func (m *GenesisState) GetTokenizeShareLocks() []TokenizeShareLock { + if m != nil { + return m.TokenizeShareLocks + } + return nil +} + +// TokenizeSharesLock required for specifying account locks at genesis +type TokenizeShareLock struct { + // Address of the account that is locked + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + // Status of the lock (LOCKED or LOCK_EXPIRING) + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + // Completion time if the lock is expiring + CompletionTime time.Time `protobuf:"bytes,3,opt,name=completion_time,json=completionTime,proto3,stdtime" json:"completion_time" yaml:"completion_time"` +} + +func (m *TokenizeShareLock) Reset() { *m = TokenizeShareLock{} } +func (m *TokenizeShareLock) String() string { return proto.CompactTextString(m) } +func (*TokenizeShareLock) ProtoMessage() {} +func (*TokenizeShareLock) Descriptor() ([]byte, []int) { + return fileDescriptor_9b3dec8894f2831b, []int{1} +} +func (m *TokenizeShareLock) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenizeShareLock) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TokenizeShareLock.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 *TokenizeShareLock) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenizeShareLock.Merge(m, src) +} +func (m *TokenizeShareLock) XXX_Size() int { + return m.Size() +} +func (m *TokenizeShareLock) XXX_DiscardUnknown() { + xxx_messageInfo_TokenizeShareLock.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenizeShareLock proto.InternalMessageInfo + +func (m *TokenizeShareLock) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *TokenizeShareLock) GetStatus() string { + if m != nil { + return m.Status + } + return "" +} + +func (m *TokenizeShareLock) GetCompletionTime() time.Time { + if m != nil { + return m.CompletionTime + } + return time.Time{} +} + // LastValidatorPower required for validator set update logic. type LastValidatorPower struct { // address is the address of the validator. @@ -141,7 +238,7 @@ func (m *LastValidatorPower) Reset() { *m = LastValidatorPower{} } func (m *LastValidatorPower) String() string { return proto.CompactTextString(m) } func (*LastValidatorPower) ProtoMessage() {} func (*LastValidatorPower) Descriptor() ([]byte, []int) { - return fileDescriptor_9b3dec8894f2831b, []int{1} + return fileDescriptor_9b3dec8894f2831b, []int{2} } func (m *LastValidatorPower) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -172,6 +269,7 @@ var xxx_messageInfo_LastValidatorPower proto.InternalMessageInfo func init() { proto.RegisterType((*GenesisState)(nil), "cosmos.staking.v1beta1.GenesisState") + proto.RegisterType((*TokenizeShareLock)(nil), "cosmos.staking.v1beta1.TokenizeShareLock") proto.RegisterType((*LastValidatorPower)(nil), "cosmos.staking.v1beta1.LastValidatorPower") } @@ -180,39 +278,54 @@ func init() { } var fileDescriptor_9b3dec8894f2831b = []byte{ - // 503 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0x31, 0x6f, 0xd3, 0x40, - 0x1c, 0xc5, 0x6d, 0x42, 0xd2, 0xf4, 0x52, 0x10, 0x1c, 0x29, 0x32, 0x19, 0x9c, 0x10, 0x55, 0x28, - 0x2a, 0xd4, 0x56, 0xd3, 0x8d, 0xad, 0x11, 0x02, 0x21, 0x55, 0xa2, 0x72, 0x29, 0x03, 0x12, 0x8a, - 0x2e, 0xf5, 0xc9, 0x3d, 0xc5, 0xb9, 0xb3, 0x7c, 0xff, 0x94, 0xf2, 0x0d, 0x18, 0x99, 0x99, 0x3a, - 0x32, 0x32, 0xf0, 0x21, 0x3a, 0x56, 0x4c, 0x88, 0xa1, 0x42, 0xc9, 0x00, 0x1f, 0x03, 0xf9, 0xce, - 0x31, 0x87, 0x52, 0x77, 0x49, 0x7c, 0xfe, 0xbf, 0xf7, 0x7b, 0x4f, 0xf2, 0xff, 0xd0, 0xc6, 0x91, - 0x90, 0x13, 0x21, 0x7d, 0x09, 0x64, 0xcc, 0x78, 0xe4, 0x9f, 0x6c, 0x8f, 0x28, 0x90, 0x6d, 0x3f, - 0xa2, 0x9c, 0x4a, 0x26, 0xbd, 0x24, 0x15, 0x20, 0xf0, 0x7d, 0xad, 0xf2, 0x72, 0x95, 0x97, 0xab, - 0x5a, 0xcd, 0x48, 0x44, 0x42, 0x49, 0xfc, 0xec, 0x49, 0xab, 0x5b, 0x65, 0xcc, 0x85, 0x5b, 0xab, - 0x1e, 0x68, 0xd5, 0x50, 0xdb, 0xf3, 0x00, 0x3d, 0xba, 0x4b, 0x26, 0x8c, 0x0b, 0x5f, 0xfd, 0xea, - 0x57, 0xdd, 0xcf, 0x55, 0xb4, 0xf6, 0x42, 0x77, 0x3a, 0x00, 0x02, 0x14, 0xef, 0xa2, 0x5a, 0x42, - 0x52, 0x32, 0x91, 0x8e, 0xdd, 0xb1, 0x7b, 0x8d, 0xbe, 0xeb, 0x5d, 0xdd, 0xd1, 0xdb, 0x57, 0xaa, - 0xc1, 0xea, 0xf9, 0x65, 0xdb, 0xfa, 0xf2, 0xfb, 0xeb, 0xa6, 0x1d, 0xe4, 0x46, 0xfc, 0x0e, 0xdd, - 0x89, 0x89, 0x84, 0x21, 0x08, 0x20, 0xf1, 0x30, 0x11, 0xef, 0x69, 0xea, 0xdc, 0xe8, 0xd8, 0xbd, - 0xb5, 0xc1, 0x4e, 0x26, 0xfe, 0x79, 0xd9, 0x7e, 0x14, 0x31, 0x38, 0x9e, 0x8e, 0xbc, 0x23, 0x31, - 0xc9, 0x1b, 0xe6, 0x7f, 0x5b, 0x32, 0x1c, 0xfb, 0xf0, 0x21, 0xa1, 0xd2, 0x7b, 0xc9, 0x41, 0x63, - 0x6f, 0x67, 0xb0, 0xd7, 0x19, 0x6b, 0x3f, 0x43, 0x61, 0x86, 0xd6, 0x15, 0xfe, 0x84, 0xc4, 0x2c, - 0x24, 0x20, 0x52, 0x1d, 0x21, 0x9d, 0x4a, 0xa7, 0xd2, 0x6b, 0xf4, 0x37, 0xcb, 0x0a, 0xef, 0x11, - 0x09, 0x6f, 0x16, 0x1e, 0x85, 0x32, 0xcb, 0xdf, 0x8b, 0x97, 0xc6, 0x12, 0xef, 0x21, 0x54, 0xa4, - 0x48, 0xe7, 0xa6, 0xe2, 0x3f, 0x2c, 0xe3, 0x17, 0x66, 0x13, 0x6b, 0xf8, 0xf1, 0x2b, 0xd4, 0x08, - 0x69, 0x4c, 0x23, 0x02, 0x4c, 0x70, 0xe9, 0x54, 0x15, 0xae, 0x5b, 0x86, 0x7b, 0x56, 0x48, 0x4d, - 0x9e, 0x49, 0xc0, 0x63, 0xb4, 0x3e, 0xe5, 0x23, 0xc1, 0x43, 0xc6, 0xa3, 0xa1, 0x89, 0xae, 0x29, - 0xf4, 0xe3, 0x32, 0xf4, 0xe1, 0xc2, 0x74, 0x75, 0x46, 0x73, 0xba, 0x3c, 0x97, 0xf8, 0x10, 0xdd, - 0x4a, 0xa9, 0x19, 0xb2, 0xa2, 0x42, 0x36, 0xca, 0x42, 0x02, 0x43, 0x6c, 0xd2, 0xff, 0xa7, 0xe0, - 0x16, 0xaa, 0xd3, 0xd3, 0x44, 0xa4, 0x40, 0x43, 0xa7, 0xde, 0xb1, 0x7b, 0xf5, 0xa0, 0x38, 0x77, - 0x8f, 0x11, 0x5e, 0xfe, 0x68, 0xb8, 0x8f, 0x56, 0x48, 0x18, 0xa6, 0x54, 0xea, 0x15, 0x5d, 0x1d, - 0x38, 0xdf, 0xbf, 0x6d, 0x35, 0xf3, 0x16, 0xbb, 0x7a, 0x72, 0x00, 0x29, 0xe3, 0x51, 0xb0, 0x10, - 0xe2, 0x26, 0xaa, 0xfe, 0xdb, 0xc3, 0x4a, 0xa0, 0x0f, 0x4f, 0xeb, 0x1f, 0xcf, 0xda, 0xd6, 0x9f, - 0xb3, 0xb6, 0x35, 0x78, 0x7e, 0x3e, 0x73, 0xed, 0x8b, 0x99, 0x6b, 0xff, 0x9a, 0xb9, 0xf6, 0xa7, - 0xb9, 0x6b, 0x5d, 0xcc, 0x5d, 0xeb, 0xc7, 0xdc, 0xb5, 0xde, 0x3e, 0xb9, 0x76, 0x55, 0x4f, 0x8b, - 0xcb, 0xa8, 0x96, 0x76, 0x54, 0x53, 0xb7, 0x6a, 0xe7, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe5, - 0x05, 0x1a, 0xb6, 0xff, 0x03, 0x00, 0x00, + // 742 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0x41, 0x4f, 0x13, 0x4d, + 0x18, 0xc7, 0xbb, 0x6f, 0xa1, 0xb4, 0x53, 0x5e, 0xde, 0x97, 0xb1, 0xd4, 0xa5, 0x89, 0xdd, 0xb2, + 0x21, 0xa6, 0xa2, 0xec, 0x06, 0xb8, 0x71, 0x92, 0xc6, 0x68, 0x48, 0x9a, 0x48, 0xb6, 0xe0, 0xc1, + 0xc4, 0x6c, 0xa6, 0xdd, 0x71, 0x99, 0x74, 0x77, 0xa7, 0xee, 0x4c, 0x11, 0xfc, 0x04, 0x1e, 0xf9, + 0x08, 0x1c, 0x3d, 0x19, 0x0f, 0xde, 0xfc, 0x02, 0x1c, 0x89, 0x27, 0xe3, 0xa1, 0x1a, 0x38, 0xe8, + 0x99, 0x4f, 0x60, 0x76, 0x66, 0x5b, 0xd6, 0x96, 0x25, 0x7a, 0x69, 0x3b, 0xf3, 0xfc, 0xff, 0xbf, + 0xe7, 0x79, 0xa6, 0x4f, 0x1e, 0xb0, 0xdc, 0xa1, 0xcc, 0xa7, 0xcc, 0x64, 0x1c, 0x75, 0x49, 0xe0, + 0x9a, 0x07, 0x6b, 0x6d, 0xcc, 0xd1, 0x9a, 0xe9, 0xe2, 0x00, 0x33, 0xc2, 0x8c, 0x5e, 0x48, 0x39, + 0x85, 0x65, 0xa9, 0x32, 0x62, 0x95, 0x11, 0xab, 0x2a, 0x25, 0x97, 0xba, 0x54, 0x48, 0xcc, 0xe8, + 0x97, 0x54, 0x57, 0xd2, 0x98, 0x43, 0xb7, 0x54, 0x2d, 0x4a, 0x95, 0x2d, 0xed, 0x71, 0x02, 0x19, + 0x9a, 0x47, 0x3e, 0x09, 0xa8, 0x29, 0x3e, 0xe3, 0x2b, 0xcd, 0xa5, 0xd4, 0xf5, 0xb0, 0x29, 0x4e, + 0xed, 0xfe, 0x4b, 0x93, 0x13, 0x1f, 0x33, 0x8e, 0xfc, 0x9e, 0x14, 0xe8, 0x9f, 0xf2, 0x60, 0xf6, + 0x89, 0x2c, 0xba, 0xc5, 0x11, 0xc7, 0x70, 0x0b, 0xe4, 0x7a, 0x28, 0x44, 0x3e, 0x53, 0x95, 0x9a, + 0x52, 0x2f, 0xae, 0x57, 0x8d, 0xeb, 0x9b, 0x30, 0x76, 0x84, 0xaa, 0x51, 0x38, 0x1d, 0x68, 0x99, + 0x77, 0x3f, 0x3e, 0xac, 0x28, 0x56, 0x6c, 0x84, 0x2f, 0xc0, 0xff, 0x1e, 0x62, 0xdc, 0xe6, 0x94, + 0x23, 0xcf, 0xee, 0xd1, 0xd7, 0x38, 0x54, 0xff, 0xa9, 0x29, 0xf5, 0xd9, 0xc6, 0x46, 0x24, 0xfe, + 0x3a, 0xd0, 0xee, 0xba, 0x84, 0xef, 0xf7, 0xdb, 0x46, 0x87, 0xfa, 0x71, 0x0b, 0xf1, 0xd7, 0x2a, + 0x73, 0xba, 0x26, 0x3f, 0xea, 0x61, 0x66, 0x6c, 0x07, 0x5c, 0x62, 0xe7, 0x22, 0xd8, 0x6e, 0xc4, + 0xda, 0x89, 0x50, 0x90, 0x80, 0x05, 0x81, 0x3f, 0x40, 0x1e, 0x71, 0x10, 0xa7, 0xa1, 0x4c, 0xc1, + 0xd4, 0x6c, 0x2d, 0x5b, 0x2f, 0xae, 0xaf, 0xa4, 0x15, 0xdc, 0x44, 0x8c, 0x3f, 0x1b, 0x7a, 0x04, + 0x2a, 0x59, 0xfc, 0x2d, 0x6f, 0x22, 0xcc, 0x60, 0x13, 0x80, 0x51, 0x16, 0xa6, 0x4e, 0x09, 0xfe, + 0x52, 0x1a, 0x7f, 0x64, 0x4e, 0x62, 0x13, 0x7e, 0xf8, 0x14, 0x14, 0x1d, 0xec, 0x61, 0x17, 0x71, + 0x42, 0x03, 0xa6, 0x4e, 0x0b, 0x9c, 0x9e, 0x86, 0x7b, 0x34, 0x92, 0x26, 0x79, 0x49, 0x02, 0xec, + 0x82, 0x85, 0x7e, 0xd0, 0xa6, 0x81, 0x43, 0x02, 0xd7, 0x4e, 0xa2, 0x73, 0x02, 0x7d, 0x3f, 0x0d, + 0xbd, 0x37, 0x34, 0x5d, 0x9f, 0xa3, 0xd4, 0x9f, 0x8c, 0x33, 0xb8, 0x07, 0xfe, 0x0d, 0x71, 0x32, + 0xc9, 0x8c, 0x48, 0xb2, 0x9c, 0x96, 0xc4, 0x4a, 0x88, 0x93, 0xf4, 0xdf, 0x29, 0xb0, 0x02, 0xf2, + 0xf8, 0xb0, 0x47, 0x43, 0x8e, 0x1d, 0x35, 0x5f, 0x53, 0xea, 0x79, 0x6b, 0x74, 0x86, 0x2e, 0x28, + 0x73, 0xda, 0xc5, 0x01, 0x79, 0x83, 0x6d, 0xb6, 0x8f, 0x42, 0x6c, 0x87, 0xb8, 0x43, 0x43, 0x87, + 0xa9, 0x85, 0x9b, 0x1b, 0xdc, 0x8d, 0x5d, 0xad, 0xc8, 0x64, 0x09, 0x4f, 0x63, 0x2a, 0x2a, 0xc1, + 0x2a, 0xf1, 0xc9, 0x10, 0x83, 0x0f, 0xc1, 0x9d, 0x78, 0x62, 0xaf, 0xc9, 0x66, 0x13, 0x47, 0x05, + 0x35, 0xa5, 0x3e, 0x65, 0x2d, 0xca, 0x49, 0x9c, 0x00, 0x6c, 0x3b, 0xf0, 0x58, 0x01, 0x15, 0x39, + 0xef, 0x1e, 0x79, 0xd5, 0x27, 0x8e, 0x1d, 0x95, 0x84, 0x1d, 0x49, 0x64, 0x6a, 0x51, 0x8c, 0x7f, + 0xeb, 0xef, 0xc6, 0xff, 0x72, 0xa0, 0x2d, 0x1d, 0x21, 0xdf, 0xdb, 0xd4, 0xd3, 0xc9, 0xba, 0x75, + 0x5b, 0x04, 0x9b, 0x22, 0xd6, 0x12, 0x21, 0x51, 0x21, 0x83, 0x08, 0x94, 0xc6, 0xfa, 0xf1, 0x68, + 0xa7, 0xcb, 0xd4, 0x59, 0xf1, 0x76, 0xf7, 0xfe, 0xe8, 0xed, 0x9a, 0xb4, 0xd3, 0x8d, 0x5f, 0x0e, + 0xf2, 0xf1, 0x00, 0xd3, 0xdf, 0x2b, 0x60, 0x7e, 0x42, 0x0f, 0x55, 0x30, 0x83, 0x1c, 0x27, 0xc4, + 0x4c, 0xee, 0x90, 0x82, 0x35, 0x3c, 0xc2, 0x32, 0xc8, 0x31, 0x8e, 0x78, 0x9f, 0x89, 0x7d, 0x50, + 0xb0, 0xe2, 0x13, 0x74, 0xc1, 0x7f, 0x1d, 0xea, 0xf7, 0x3c, 0x1c, 0xcd, 0x84, 0x1d, 0xed, 0x28, + 0x35, 0x2b, 0xb6, 0x4f, 0xc5, 0x90, 0x0b, 0xcc, 0x18, 0x2e, 0x30, 0x63, 0x77, 0xb8, 0xc0, 0x1a, + 0x7a, 0x54, 0xd6, 0xe5, 0x40, 0x2b, 0xcb, 0x37, 0x1a, 0x03, 0xe8, 0xc7, 0xdf, 0x34, 0xc5, 0x9a, + 0xbb, 0xba, 0x8d, 0x8c, 0xfa, 0x3e, 0x80, 0x93, 0x6b, 0x00, 0xae, 0x8f, 0x15, 0xdc, 0x50, 0x3f, + 0x7f, 0x5c, 0x2d, 0xc5, 0xef, 0xb3, 0x25, 0x23, 0x2d, 0x1e, 0x92, 0xc0, 0xbd, 0x6a, 0xa5, 0x04, + 0xa6, 0xaf, 0x36, 0x5b, 0xd6, 0x92, 0x87, 0xcd, 0xfc, 0xdb, 0x13, 0x2d, 0xf3, 0xf3, 0x44, 0xcb, + 0x34, 0x1e, 0x9f, 0x9e, 0x57, 0x95, 0xb3, 0xf3, 0xaa, 0xf2, 0xfd, 0xbc, 0xaa, 0x1c, 0x5f, 0x54, + 0x33, 0x67, 0x17, 0xd5, 0xcc, 0x97, 0x8b, 0x6a, 0xe6, 0xf9, 0x83, 0x1b, 0xff, 0xfd, 0xc3, 0xd1, + 0xfe, 0x17, 0x73, 0xd0, 0xce, 0x89, 0xce, 0x37, 0x7e, 0x05, 0x00, 0x00, 0xff, 0xff, 0x53, 0x57, + 0x5e, 0x82, 0x72, 0x06, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -235,6 +348,49 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.TokenizeShareLocks) > 0 { + for iNdEx := len(m.TokenizeShareLocks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenizeShareLocks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x62 + } + } + { + size := m.TotalLiquidStakedTokens.Size() + i -= size + if _, err := m.TotalLiquidStakedTokens.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + if m.LastTokenizeShareRecordId != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.LastTokenizeShareRecordId)) + i-- + dAtA[i] = 0x50 + } + if len(m.TokenizeShareRecords) > 0 { + for iNdEx := len(m.TokenizeShareRecords) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenizeShareRecords[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + } if m.Exported { i-- if m.Exported { @@ -338,6 +494,51 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *TokenizeShareLock) 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 *TokenizeShareLock) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenizeShareLock) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CompletionTime):]) + if err2 != nil { + return 0, err2 + } + i -= n2 + i = encodeVarintGenesis(dAtA, i, uint64(n2)) + i-- + dAtA[i] = 0x1a + if len(m.Status) > 0 { + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *LastValidatorPower) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -427,6 +628,42 @@ func (m *GenesisState) Size() (n int) { if m.Exported { n += 2 } + if len(m.TokenizeShareRecords) > 0 { + for _, e := range m.TokenizeShareRecords { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if m.LastTokenizeShareRecordId != 0 { + n += 1 + sovGenesis(uint64(m.LastTokenizeShareRecordId)) + } + l = m.TotalLiquidStakedTokens.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.TokenizeShareLocks) > 0 { + for _, e := range m.TokenizeShareLocks { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func (m *TokenizeShareLock) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.Status) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CompletionTime) + n += 1 + l + sovGenesis(uint64(l)) return n } @@ -737,6 +974,273 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { } } m.Exported = bool(v != 0) + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenizeShareRecords", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokenizeShareRecords = append(m.TokenizeShareRecords, TokenizeShareRecord{}) + if err := m.TokenizeShareRecords[len(m.TokenizeShareRecords)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTokenizeShareRecordId", wireType) + } + m.LastTokenizeShareRecordId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LastTokenizeShareRecordId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TotalLiquidStakedTokens", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TotalLiquidStakedTokens.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenizeShareLocks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokenizeShareLocks = append(m.TokenizeShareLocks, TokenizeShareLock{}) + if err := m.TokenizeShareLocks[len(m.TokenizeShareLocks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TokenizeShareLock) 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 ErrIntOverflowGenesis + } + 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: TokenizeShareLock: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TokenizeShareLock: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 ErrIntOverflowGenesis + } + 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 ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + 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 ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CompletionTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) diff --git a/x/staking/types/msg.go b/x/staking/types/msg.go index a8539bd21884..553f49bf8570 100644 --- a/x/staking/types/msg.go +++ b/x/staking/types/msg.go @@ -35,7 +35,7 @@ var ( // Delegator address and validator address are the same. func NewMsgCreateValidator( valAddr sdk.ValAddress, pubKey cryptotypes.PubKey, //nolint:interfacer - selfDelegation sdk.Coin, description Description, commission CommissionRates, minSelfDelegation math.Int, + selfDelegation sdk.Coin, description Description, commission CommissionRates, ) (*MsgCreateValidator, error) { var pkAny *codectypes.Any if pubKey != nil { @@ -45,13 +45,12 @@ func NewMsgCreateValidator( } } return &MsgCreateValidator{ - Description: description, - DelegatorAddress: sdk.AccAddress(valAddr).String(), - ValidatorAddress: valAddr.String(), - Pubkey: pkAny, - Value: selfDelegation, - Commission: commission, - MinSelfDelegation: minSelfDelegation, + Description: description, + DelegatorAddress: sdk.AccAddress(valAddr).String(), + ValidatorAddress: valAddr.String(), + Pubkey: pkAny, + Value: selfDelegation, + Commission: commission, }, nil } @@ -120,17 +119,6 @@ func (msg MsgCreateValidator) ValidateBasic() error { return err } - if !msg.MinSelfDelegation.IsPositive() { - return sdkerrors.Wrap( - sdkerrors.ErrInvalidRequest, - "minimum self delegation must be a positive integer", - ) - } - - if msg.Value.Amount.LT(msg.MinSelfDelegation) { - return ErrSelfDelegationBelowMinimum - } - return nil } @@ -143,12 +131,11 @@ func (msg MsgCreateValidator) UnpackInterfaces(unpacker codectypes.AnyUnpacker) // NewMsgEditValidator creates a new MsgEditValidator instance // //nolint:interfacer -func NewMsgEditValidator(valAddr sdk.ValAddress, description Description, newRate *sdk.Dec, newMinSelfDelegation *math.Int) *MsgEditValidator { +func NewMsgEditValidator(valAddr sdk.ValAddress, description Description, newRate *sdk.Dec) *MsgEditValidator { return &MsgEditValidator{ - Description: description, - CommissionRate: newRate, - ValidatorAddress: valAddr.String(), - MinSelfDelegation: newMinSelfDelegation, + Description: description, + CommissionRate: newRate, + ValidatorAddress: valAddr.String(), } } @@ -180,13 +167,6 @@ func (msg MsgEditValidator) ValidateBasic() error { return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "empty description") } - if msg.MinSelfDelegation != nil && !msg.MinSelfDelegation.IsPositive() { - return sdkerrors.Wrap( - sdkerrors.ErrInvalidRequest, - "minimum self delegation must be a positive integer", - ) - } - if msg.CommissionRate != nil { if msg.CommissionRate.GT(math.LegacyOneDec()) || msg.CommissionRate.IsNegative() { return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "commission rate must be between 0 and 1 (inclusive)") diff --git a/x/staking/types/msg_test.go b/x/staking/types/msg_test.go index 428e25c95594..a32fd2d7905d 100644 --- a/x/staking/types/msg_test.go +++ b/x/staking/types/msg_test.go @@ -42,7 +42,7 @@ func TestMsgDecode(t *testing.T) { // now let's try to serialize the whole message commission1 := types.NewCommissionRates(math.LegacyZeroDec(), math.LegacyZeroDec(), math.LegacyZeroDec()) - msg, err := types.NewMsgCreateValidator(valAddr1, pk1, coinPos, types.Description{}, commission1, math.OneInt()) + msg, err := types.NewMsgCreateValidator(valAddr1, pk1, coinPos, types.Description{}, commission1) require.NoError(t, err) msgSerialized, err := cdc.MarshalInterface(msg) require.NoError(t, err) @@ -84,7 +84,7 @@ func TestMsgCreateValidator(t *testing.T) { for _, tc := range tests { description := types.NewDescription(tc.moniker, tc.identity, tc.website, tc.securityContact, tc.details) - msg, err := types.NewMsgCreateValidator(tc.validatorAddr, tc.pubkey, tc.bond, description, tc.CommissionRates, tc.minSelfDelegation) + msg, err := types.NewMsgCreateValidator(tc.validatorAddr, tc.pubkey, tc.bond, description, tc.CommissionRates) require.NoError(t, err) if tc.expectPass { require.Nil(t, msg.ValidateBasic(), "test: %v", tc.name) @@ -113,7 +113,7 @@ func TestMsgEditValidator(t *testing.T) { description := types.NewDescription(tc.moniker, tc.identity, tc.website, tc.securityContact, tc.details) newRate := math.LegacyZeroDec() - msg := types.NewMsgEditValidator(tc.validatorAddr, description, &newRate, &tc.minSelfDelegation) + msg := types.NewMsgEditValidator(tc.validatorAddr, description, &newRate) if tc.expectPass { require.Nil(t, msg.ValidateBasic(), "test: %v", tc.name) } else { diff --git a/x/staking/types/query.pb.go b/x/staking/types/query.pb.go index 9509670a3425..66d49049a253 100644 --- a/x/staking/types/query.pb.go +++ b/x/staking/types/query.pb.go @@ -7,6 +7,7 @@ import ( context "context" fmt "fmt" _ "github.com/cosmos/cosmos-proto" + types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" @@ -1391,2311 +1392,5190 @@ func (m *QueryParamsResponse) GetParams() Params { return Params{} } -func init() { - proto.RegisterType((*QueryValidatorsRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorsRequest") - proto.RegisterType((*QueryValidatorsResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorsResponse") - proto.RegisterType((*QueryValidatorRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorRequest") - proto.RegisterType((*QueryValidatorResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorResponse") - proto.RegisterType((*QueryValidatorDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorDelegationsRequest") - proto.RegisterType((*QueryValidatorDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorDelegationsResponse") - proto.RegisterType((*QueryValidatorUnbondingDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsRequest") - proto.RegisterType((*QueryValidatorUnbondingDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse") - proto.RegisterType((*QueryDelegationRequest)(nil), "cosmos.staking.v1beta1.QueryDelegationRequest") - proto.RegisterType((*QueryDelegationResponse)(nil), "cosmos.staking.v1beta1.QueryDelegationResponse") - proto.RegisterType((*QueryUnbondingDelegationRequest)(nil), "cosmos.staking.v1beta1.QueryUnbondingDelegationRequest") - proto.RegisterType((*QueryUnbondingDelegationResponse)(nil), "cosmos.staking.v1beta1.QueryUnbondingDelegationResponse") - proto.RegisterType((*QueryDelegatorDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorDelegationsRequest") - proto.RegisterType((*QueryDelegatorDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse") - proto.RegisterType((*QueryDelegatorUnbondingDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsRequest") - proto.RegisterType((*QueryDelegatorUnbondingDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse") - proto.RegisterType((*QueryRedelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryRedelegationsRequest") - proto.RegisterType((*QueryRedelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryRedelegationsResponse") - proto.RegisterType((*QueryDelegatorValidatorsRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorsRequest") - proto.RegisterType((*QueryDelegatorValidatorsResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse") - proto.RegisterType((*QueryDelegatorValidatorRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorRequest") - proto.RegisterType((*QueryDelegatorValidatorResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorResponse") - proto.RegisterType((*QueryHistoricalInfoRequest)(nil), "cosmos.staking.v1beta1.QueryHistoricalInfoRequest") - proto.RegisterType((*QueryHistoricalInfoResponse)(nil), "cosmos.staking.v1beta1.QueryHistoricalInfoResponse") - proto.RegisterType((*QueryPoolRequest)(nil), "cosmos.staking.v1beta1.QueryPoolRequest") - proto.RegisterType((*QueryPoolResponse)(nil), "cosmos.staking.v1beta1.QueryPoolResponse") - proto.RegisterType((*QueryParamsRequest)(nil), "cosmos.staking.v1beta1.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "cosmos.staking.v1beta1.QueryParamsResponse") +// QueryTokenizeShareRecordByIdRequest is request type for the +// Query/QueryTokenizeShareRecordById RPC method. +type QueryTokenizeShareRecordByIdRequest struct { + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` } -func init() { - proto.RegisterFile("cosmos/staking/v1beta1/query.proto", fileDescriptor_f270127f442bbcd8) +func (m *QueryTokenizeShareRecordByIdRequest) Reset() { *m = QueryTokenizeShareRecordByIdRequest{} } +func (m *QueryTokenizeShareRecordByIdRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTokenizeShareRecordByIdRequest) ProtoMessage() {} +func (*QueryTokenizeShareRecordByIdRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{28} } - -var fileDescriptor_f270127f442bbcd8 = []byte{ - // 1373 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xdb, 0x6f, 0x14, 0x65, - 0x1b, 0xdf, 0xb7, 0xf4, 0x6b, 0xbe, 0x3e, 0x04, 0x02, 0xef, 0x2e, 0xb5, 0x0c, 0xb8, 0xbb, 0x4c, - 0x08, 0xf6, 0x40, 0x77, 0x6c, 0x8b, 0x50, 0x31, 0x0a, 0x5b, 0x09, 0x8a, 0x10, 0x2c, 0x6b, 0x6c, - 0xf0, 0x94, 0x66, 0xda, 0x19, 0x66, 0x27, 0x6c, 0x67, 0x96, 0x79, 0xa7, 0x0d, 0xa4, 0x69, 0x4c, - 0xbc, 0x30, 0x5c, 0x19, 0x13, 0xef, 0x0d, 0x17, 0x5e, 0x18, 0xc5, 0xa4, 0x17, 0x98, 0xe8, 0x0d, - 0x97, 0x86, 0x0b, 0x63, 0x88, 0x06, 0xa3, 0x37, 0x68, 0x5a, 0x13, 0xbd, 0xf1, 0x3f, 0x30, 0xc6, - 0xec, 0xcc, 0x33, 0xa7, 0xce, 0x71, 0xb7, 0xdb, 0xa4, 0xdc, 0xc0, 0xee, 0x3b, 0xcf, 0xe1, 0xf7, - 0x7b, 0x0e, 0xef, 0x3c, 0xcf, 0x16, 0xf8, 0x05, 0x9d, 0x2d, 0xea, 0x4c, 0x60, 0xa6, 0x78, 0x5d, - 0xd5, 0x14, 0x61, 0x79, 0x7c, 0x5e, 0x36, 0xc5, 0x71, 0xe1, 0xc6, 0x92, 0x6c, 0xdc, 0xaa, 0x34, - 0x0d, 0xdd, 0xd4, 0xe9, 0x80, 0x2d, 0x53, 0x41, 0x99, 0x0a, 0xca, 0x70, 0x23, 0xa8, 0x3b, 0x2f, - 0x32, 0xd9, 0x56, 0x70, 0xd5, 0x9b, 0xa2, 0xa2, 0x6a, 0xa2, 0xa9, 0xea, 0x9a, 0x6d, 0x83, 0x2b, - 0x28, 0xba, 0xa2, 0x5b, 0x1f, 0x85, 0xd6, 0x27, 0x3c, 0x3d, 0xac, 0xe8, 0xba, 0xd2, 0x90, 0x05, - 0xb1, 0xa9, 0x0a, 0xa2, 0xa6, 0xe9, 0xa6, 0xa5, 0xc2, 0xf0, 0xe9, 0xd1, 0x18, 0x6c, 0x0e, 0x0e, - 0x5b, 0xea, 0xa0, 0x2d, 0x35, 0x67, 0x1b, 0x47, 0xa8, 0xf6, 0xa3, 0x43, 0x68, 0xc0, 0xc1, 0xe6, - 0x67, 0xc5, 0xed, 0x17, 0x17, 0x55, 0x4d, 0x17, 0xac, 0x7f, 0xed, 0x23, 0xfe, 0x26, 0x0c, 0x5c, - 0x69, 0x49, 0xcc, 0x8a, 0x0d, 0x55, 0x12, 0x4d, 0xdd, 0x60, 0x35, 0xf9, 0xc6, 0x92, 0xcc, 0x4c, - 0x3a, 0x00, 0x7d, 0xcc, 0x14, 0xcd, 0x25, 0x36, 0x48, 0xca, 0x64, 0xa8, 0xbf, 0x86, 0xdf, 0xe8, - 0x79, 0x00, 0x8f, 0xea, 0x60, 0x4f, 0x99, 0x0c, 0xed, 0x9e, 0x38, 0x56, 0x41, 0x10, 0xad, 0xb8, - 0x54, 0x6c, 0x97, 0x08, 0xbd, 0x32, 0x23, 0x2a, 0x32, 0xda, 0xac, 0xf9, 0x34, 0xf9, 0x35, 0x02, - 0x4f, 0x85, 0x5c, 0xb3, 0xa6, 0xae, 0x31, 0x99, 0x5e, 0x02, 0x58, 0x76, 0x4f, 0x07, 0x49, 0x79, - 0xd7, 0xd0, 0xee, 0x89, 0x23, 0x95, 0xe8, 0x9c, 0x54, 0x5c, 0xfd, 0xe9, 0xfe, 0x07, 0x8f, 0x4b, - 0xb9, 0xcf, 0xff, 0x5c, 0x1b, 0x21, 0x35, 0x9f, 0x3e, 0x7d, 0x25, 0x02, 0xf1, 0x33, 0xa9, 0x88, - 0x6d, 0x28, 0x01, 0xc8, 0x57, 0xe1, 0x40, 0x10, 0xb1, 0x13, 0xab, 0x33, 0xb0, 0xd7, 0xf5, 0x37, - 0x27, 0x4a, 0x92, 0x61, 0xc7, 0x6c, 0x7a, 0xf0, 0xc7, 0x7b, 0x63, 0x05, 0x74, 0x54, 0x95, 0x24, - 0x43, 0x66, 0xec, 0x0d, 0xd3, 0x50, 0x35, 0xa5, 0xb6, 0xc7, 0x95, 0x6f, 0x9d, 0xf3, 0xd2, 0xe6, - 0x34, 0xb8, 0xa1, 0x78, 0x0d, 0xfa, 0x5d, 0x51, 0xcb, 0x6a, 0xbb, 0x91, 0xf0, 0xd4, 0xf9, 0x2f, - 0x09, 0x94, 0x83, 0x6e, 0xce, 0xc9, 0x0d, 0x59, 0xb1, 0x2b, 0xb0, 0x5b, 0x5c, 0xba, 0x56, 0x20, - 0x7f, 0x13, 0x38, 0x92, 0x80, 0x16, 0xe3, 0xf3, 0x3e, 0x14, 0x24, 0xf7, 0x78, 0xce, 0xc0, 0x63, - 0xa7, 0x68, 0x46, 0xe2, 0x42, 0xe5, 0x99, 0x72, 0x2c, 0x4d, 0x97, 0x5b, 0x31, 0xfb, 0xe2, 0xb7, - 0x52, 0x3e, 0xfc, 0x8c, 0xd9, 0xa1, 0xcc, 0x4b, 0xe1, 0x27, 0xdd, 0xab, 0xae, 0x7b, 0x04, 0x86, - 0x83, 0x7c, 0xdf, 0xd4, 0xe6, 0x75, 0x4d, 0x52, 0x35, 0x65, 0x27, 0xa7, 0xe9, 0x31, 0x81, 0x91, - 0x2c, 0xb0, 0x31, 0x5f, 0x0a, 0xe4, 0x97, 0x9c, 0xe7, 0xa1, 0x74, 0x8d, 0xc6, 0xa5, 0x2b, 0xc2, - 0xa4, 0xbf, 0xc6, 0xa9, 0x6b, 0x72, 0x1b, 0xf2, 0xf2, 0x19, 0xc1, 0xe6, 0xf4, 0xd7, 0x85, 0x9b, - 0x04, 0x2c, 0x89, 0xcc, 0x49, 0x70, 0xe5, 0xad, 0x24, 0x84, 0xb3, 0xd8, 0xd3, 0x56, 0x16, 0x4f, - 0xff, 0xff, 0xf6, 0x9d, 0x52, 0xee, 0xaf, 0x3b, 0xa5, 0x1c, 0xbf, 0x8c, 0xd7, 0x69, 0xb8, 0x7a, - 0xe9, 0x3b, 0x90, 0x8f, 0xe8, 0x11, 0xbc, 0x4d, 0xda, 0x68, 0x91, 0x1a, 0x0d, 0x37, 0x00, 0xff, - 0x15, 0x81, 0x92, 0xe5, 0x38, 0x22, 0x47, 0x3b, 0x31, 0x4e, 0x06, 0xde, 0x81, 0x91, 0x70, 0x31, - 0x60, 0x97, 0xa1, 0xcf, 0xae, 0x28, 0x8c, 0x51, 0xa7, 0x75, 0x89, 0x56, 0xf8, 0xaf, 0x9d, 0x8b, - 0xf7, 0x9c, 0xc3, 0x2a, 0xba, 0xa3, 0xb7, 0x16, 0xa4, 0x2e, 0x75, 0xb4, 0x2f, 0x56, 0x3f, 0x3b, - 0x57, 0x70, 0x34, 0x6e, 0x8c, 0x56, 0xbd, 0x6b, 0x57, 0xb0, 0x2f, 0x74, 0xdb, 0x7b, 0xd7, 0xde, - 0x77, 0xee, 0x5a, 0x97, 0x58, 0xca, 0x5d, 0xbb, 0xd3, 0x32, 0xe3, 0xde, 0xba, 0x29, 0x04, 0x9e, - 0xd8, 0x5b, 0xf7, 0x7e, 0x0f, 0x1c, 0xb4, 0x08, 0xd6, 0x64, 0x69, 0x5b, 0x32, 0x42, 0x99, 0xb1, - 0x30, 0xd7, 0xe6, 0xa5, 0xb2, 0x8f, 0x19, 0x0b, 0xb3, 0x9b, 0xde, 0xa2, 0x54, 0x62, 0xe6, 0x66, - 0x3b, 0xbb, 0xd2, 0xec, 0x48, 0xcc, 0x9c, 0x4d, 0x78, 0x1b, 0xf7, 0x76, 0xa1, 0x42, 0x1e, 0x11, - 0xe0, 0xa2, 0x02, 0x88, 0x15, 0xa1, 0xc1, 0x80, 0x21, 0x27, 0xb4, 0xed, 0xf1, 0xb8, 0xa2, 0xf0, - 0x9b, 0x8b, 0x6a, 0xdc, 0x03, 0x86, 0xbc, 0xdd, 0x63, 0x52, 0x29, 0x58, 0xf9, 0xe1, 0xdd, 0x65, - 0x07, 0x36, 0xec, 0xb7, 0xa1, 0x57, 0xc0, 0x93, 0xb3, 0xf7, 0xdc, 0x25, 0x50, 0x8c, 0xc1, 0xbe, - 0x13, 0xdf, 0xf0, 0x8b, 0xb1, 0x05, 0xb2, 0x2d, 0x5b, 0xd5, 0x09, 0xec, 0xb3, 0x57, 0x55, 0x66, - 0xea, 0x86, 0xba, 0x20, 0x36, 0x2e, 0x68, 0xd7, 0x74, 0xdf, 0x1a, 0x5d, 0x97, 0x55, 0xa5, 0x6e, - 0x5a, 0x6e, 0x76, 0xd5, 0xf0, 0x1b, 0xff, 0x16, 0x1c, 0x8a, 0xd4, 0x42, 0x80, 0xa7, 0xa1, 0xb7, - 0xae, 0x32, 0x13, 0xb1, 0x1d, 0x8b, 0xc3, 0xb6, 0x49, 0xdb, 0xd2, 0xe1, 0x29, 0xec, 0xb3, 0x4c, - 0xcf, 0xe8, 0x7a, 0x03, 0x61, 0xf0, 0x33, 0xb0, 0xdf, 0x77, 0x86, 0x4e, 0x5e, 0x80, 0xde, 0xa6, - 0xae, 0x37, 0xd0, 0xc9, 0xe1, 0x38, 0x27, 0x2d, 0x1d, 0x3f, 0x77, 0x4b, 0x89, 0x2f, 0x00, 0xb5, - 0x2d, 0x8a, 0x86, 0xb8, 0xe8, 0x74, 0x1e, 0x7f, 0x15, 0xf2, 0x81, 0x53, 0xf4, 0x54, 0x85, 0xbe, - 0xa6, 0x75, 0x82, 0xbe, 0x8a, 0xb1, 0xbe, 0x2c, 0xa9, 0xc0, 0x0c, 0x65, 0x2b, 0x4e, 0xac, 0x0d, - 0xc0, 0xff, 0x2c, 0xd3, 0xf4, 0x53, 0x02, 0xe0, 0x35, 0x0f, 0xad, 0xc4, 0xd9, 0x8a, 0xfe, 0x61, - 0x83, 0x13, 0x32, 0xcb, 0xe3, 0x84, 0x2b, 0xdc, 0x6e, 0x01, 0xf9, 0xe0, 0xa7, 0x3f, 0x3e, 0xe9, - 0x39, 0x4a, 0x79, 0x21, 0xe6, 0x27, 0x1a, 0x5f, 0xe3, 0xdd, 0x25, 0xd0, 0xef, 0xda, 0xa1, 0x63, - 0xd9, 0xfc, 0x39, 0xf0, 0x2a, 0x59, 0xc5, 0x11, 0xdd, 0x59, 0x0f, 0xdd, 0x73, 0x74, 0x32, 0x1d, - 0x9d, 0xb0, 0x12, 0xec, 0xb3, 0x55, 0xfa, 0x2b, 0x81, 0x42, 0xd4, 0x8e, 0x4d, 0xa7, 0xb2, 0x41, - 0x09, 0x4f, 0x4c, 0xdc, 0xf3, 0x1d, 0x68, 0x22, 0x9f, 0x4b, 0x1e, 0x9f, 0x2a, 0x3d, 0xd3, 0x01, - 0x1f, 0xc1, 0xf7, 0xba, 0xa3, 0xff, 0x12, 0x78, 0x3a, 0x71, 0x31, 0xa5, 0xd5, 0x6c, 0x50, 0x13, - 0xe6, 0x43, 0x6e, 0x7a, 0x2b, 0x26, 0x90, 0xf6, 0xac, 0x47, 0xfb, 0x22, 0xbd, 0xd0, 0x09, 0x6d, - 0x6f, 0xc0, 0xf3, 0x07, 0xe0, 0x7b, 0x02, 0xe0, 0xf9, 0x4b, 0x69, 0x96, 0xd0, 0xe6, 0x96, 0xd2, - 0x2c, 0xe1, 0x11, 0x9e, 0x7f, 0xcf, 0xe3, 0x51, 0xa3, 0x33, 0x5b, 0x4c, 0x9f, 0xb0, 0x12, 0x7c, - 0xa9, 0xac, 0xd2, 0x7f, 0x08, 0xe4, 0x23, 0xe2, 0x48, 0x4f, 0x25, 0xe2, 0x8c, 0x5f, 0x4d, 0xb9, - 0xa9, 0xf6, 0x15, 0x91, 0xa9, 0xe1, 0x31, 0x55, 0xa8, 0xdc, 0x6d, 0xa6, 0x91, 0xe9, 0xa4, 0x3f, - 0x10, 0x28, 0x44, 0xed, 0x62, 0x29, 0xad, 0x9a, 0xb0, 0x76, 0xa6, 0xb4, 0x6a, 0xd2, 0xe2, 0xc7, - 0x57, 0xbd, 0x08, 0x9c, 0xa4, 0x27, 0xe2, 0x22, 0x90, 0x98, 0xcf, 0x56, 0x7f, 0x26, 0xae, 0x30, - 0x29, 0xfd, 0x99, 0x65, 0x7f, 0x4b, 0xe9, 0xcf, 0x4c, 0x1b, 0x54, 0xc6, 0xfe, 0x74, 0xe9, 0x65, - 0x4c, 0x28, 0xa3, 0xdf, 0x11, 0xd8, 0x13, 0x98, 0xd0, 0xe9, 0x78, 0x22, 0xda, 0xa8, 0x75, 0x88, - 0x9b, 0x68, 0x47, 0x05, 0x09, 0x5d, 0xf6, 0x08, 0xbd, 0x4c, 0xab, 0x9d, 0x10, 0x32, 0x02, 0xb0, - 0x1f, 0x11, 0xc8, 0x47, 0xcc, 0xb6, 0x29, 0x9d, 0x19, 0x3f, 0xc4, 0x73, 0x53, 0xed, 0x2b, 0x22, - 0xb5, 0x8b, 0x1e, 0xb5, 0xb3, 0xf4, 0xa5, 0x4e, 0xa8, 0xf9, 0x5e, 0xe6, 0x1b, 0x04, 0x68, 0xd8, - 0x19, 0x3d, 0xd9, 0x26, 0x3a, 0x87, 0xd5, 0xa9, 0xb6, 0xf5, 0x90, 0xd4, 0xbb, 0x1e, 0xa9, 0x2b, - 0xf4, 0xf5, 0xad, 0x91, 0x0a, 0xcf, 0x00, 0xdf, 0x10, 0xd8, 0x1b, 0x1c, 0x26, 0x69, 0x72, 0x51, - 0x45, 0x4e, 0xbb, 0xdc, 0x64, 0x5b, 0x3a, 0xc8, 0xec, 0x45, 0x8f, 0xd9, 0x04, 0x7d, 0x36, 0x8e, - 0x59, 0xdd, 0x55, 0x9e, 0x53, 0xb5, 0x6b, 0xba, 0xb0, 0x62, 0x0f, 0xd2, 0xab, 0xf4, 0x43, 0x02, - 0xbd, 0xad, 0x11, 0x95, 0x0e, 0x25, 0x3a, 0xf7, 0x4d, 0xc3, 0xdc, 0x70, 0x06, 0x49, 0x04, 0x37, - 0xec, 0x81, 0x2b, 0xd2, 0xc3, 0x71, 0xe0, 0x5a, 0x13, 0x31, 0xfd, 0x88, 0x40, 0x9f, 0x3d, 0xbf, - 0xd2, 0x91, 0x64, 0x07, 0xfe, 0x91, 0x99, 0x1b, 0xcd, 0x24, 0x8b, 0x70, 0x46, 0x3d, 0x38, 0x65, - 0x5a, 0x8c, 0x85, 0x63, 0x4f, 0xd1, 0xe7, 0x1f, 0xac, 0x17, 0xc9, 0xc3, 0xf5, 0x22, 0xf9, 0x7d, - 0xbd, 0x48, 0x3e, 0xde, 0x28, 0xe6, 0x1e, 0x6e, 0x14, 0x73, 0xbf, 0x6c, 0x14, 0x73, 0x6f, 0x1f, - 0x57, 0x54, 0xb3, 0xbe, 0x34, 0x5f, 0x59, 0xd0, 0x17, 0x1d, 0x1b, 0xf6, 0x7f, 0x63, 0x4c, 0xba, - 0x2e, 0xdc, 0x74, 0x0d, 0x9a, 0xb7, 0x9a, 0x32, 0x9b, 0xef, 0xb3, 0xfe, 0x56, 0x38, 0xf9, 0x5f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x04, 0xb1, 0x80, 0x02, 0x3a, 0x1d, 0x00, 0x00, +func (m *QueryTokenizeShareRecordByIdRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenizeShareRecordByIdRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenizeShareRecordByIdRequest.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 *QueryTokenizeShareRecordByIdRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenizeShareRecordByIdRequest.Merge(m, src) +} +func (m *QueryTokenizeShareRecordByIdRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenizeShareRecordByIdRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenizeShareRecordByIdRequest.DiscardUnknown(m) } -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +var xxx_messageInfo_QueryTokenizeShareRecordByIdRequest proto.InternalMessageInfo -// QueryClient is the client API for Query service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type QueryClient interface { - // Validators queries all validators that match the given status. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - Validators(ctx context.Context, in *QueryValidatorsRequest, opts ...grpc.CallOption) (*QueryValidatorsResponse, error) - // Validator queries validator info for given validator address. - Validator(ctx context.Context, in *QueryValidatorRequest, opts ...grpc.CallOption) (*QueryValidatorResponse, error) - // ValidatorDelegations queries delegate info for given validator. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - ValidatorDelegations(ctx context.Context, in *QueryValidatorDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorDelegationsResponse, error) - // ValidatorUnbondingDelegations queries unbonding delegations of a validator. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - ValidatorUnbondingDelegations(ctx context.Context, in *QueryValidatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorUnbondingDelegationsResponse, error) - // Delegation queries delegate info for given validator delegator pair. - Delegation(ctx context.Context, in *QueryDelegationRequest, opts ...grpc.CallOption) (*QueryDelegationResponse, error) - // UnbondingDelegation queries unbonding info for given validator delegator - // pair. - UnbondingDelegation(ctx context.Context, in *QueryUnbondingDelegationRequest, opts ...grpc.CallOption) (*QueryUnbondingDelegationResponse, error) - // DelegatorDelegations queries all delegations of a given delegator address. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - DelegatorDelegations(ctx context.Context, in *QueryDelegatorDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorDelegationsResponse, error) - // DelegatorUnbondingDelegations queries all unbonding delegations of a given - // delegator address. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - DelegatorUnbondingDelegations(ctx context.Context, in *QueryDelegatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorUnbondingDelegationsResponse, error) - // Redelegations queries redelegations of given address. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - Redelegations(ctx context.Context, in *QueryRedelegationsRequest, opts ...grpc.CallOption) (*QueryRedelegationsResponse, error) - // DelegatorValidators queries all validators info for given delegator - // address. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - DelegatorValidators(ctx context.Context, in *QueryDelegatorValidatorsRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorsResponse, error) - // DelegatorValidator queries validator info for given delegator validator - // pair. - DelegatorValidator(ctx context.Context, in *QueryDelegatorValidatorRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorResponse, error) - // HistoricalInfo queries the historical info for given height. - HistoricalInfo(ctx context.Context, in *QueryHistoricalInfoRequest, opts ...grpc.CallOption) (*QueryHistoricalInfoResponse, error) - // Pool queries the pool info. - Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) - // Parameters queries the staking parameters. - Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) +func (m *QueryTokenizeShareRecordByIdRequest) GetId() uint64 { + if m != nil { + return m.Id + } + return 0 } -type queryClient struct { - cc grpc1.ClientConn +// QueryTokenizeShareRecordByIdRequest is response type for the +// Query/QueryTokenizeShareRecordById RPC method. +type QueryTokenizeShareRecordByIdResponse struct { + Record TokenizeShareRecord `protobuf:"bytes,1,opt,name=record,proto3" json:"record"` } -func NewQueryClient(cc grpc1.ClientConn) QueryClient { - return &queryClient{cc} +func (m *QueryTokenizeShareRecordByIdResponse) Reset() { *m = QueryTokenizeShareRecordByIdResponse{} } +func (m *QueryTokenizeShareRecordByIdResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTokenizeShareRecordByIdResponse) ProtoMessage() {} +func (*QueryTokenizeShareRecordByIdResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{29} } - -func (c *queryClient) Validators(ctx context.Context, in *QueryValidatorsRequest, opts ...grpc.CallOption) (*QueryValidatorsResponse, error) { - out := new(QueryValidatorsResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Validators", in, out, opts...) - if err != nil { - return nil, err +func (m *QueryTokenizeShareRecordByIdResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenizeShareRecordByIdResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenizeShareRecordByIdResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *QueryTokenizeShareRecordByIdResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenizeShareRecordByIdResponse.Merge(m, src) +} +func (m *QueryTokenizeShareRecordByIdResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenizeShareRecordByIdResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenizeShareRecordByIdResponse.DiscardUnknown(m) } -func (c *queryClient) Validator(ctx context.Context, in *QueryValidatorRequest, opts ...grpc.CallOption) (*QueryValidatorResponse, error) { - out := new(QueryValidatorResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Validator", in, out, opts...) - if err != nil { - return nil, err +var xxx_messageInfo_QueryTokenizeShareRecordByIdResponse proto.InternalMessageInfo + +func (m *QueryTokenizeShareRecordByIdResponse) GetRecord() TokenizeShareRecord { + if m != nil { + return m.Record } - return out, nil + return TokenizeShareRecord{} } -func (c *queryClient) ValidatorDelegations(ctx context.Context, in *QueryValidatorDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorDelegationsResponse, error) { - out := new(QueryValidatorDelegationsResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/ValidatorDelegations", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +// QueryTokenizeShareRecordByDenomRequest is request type for the +// Query/QueryTokenizeShareRecordByDenom RPC method. +type QueryTokenizeShareRecordByDenomRequest struct { + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` } -func (c *queryClient) ValidatorUnbondingDelegations(ctx context.Context, in *QueryValidatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorUnbondingDelegationsResponse, error) { - out := new(QueryValidatorUnbondingDelegationsResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/ValidatorUnbondingDelegations", in, out, opts...) - if err != nil { - return nil, err +func (m *QueryTokenizeShareRecordByDenomRequest) Reset() { + *m = QueryTokenizeShareRecordByDenomRequest{} +} +func (m *QueryTokenizeShareRecordByDenomRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTokenizeShareRecordByDenomRequest) ProtoMessage() {} +func (*QueryTokenizeShareRecordByDenomRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{30} +} +func (m *QueryTokenizeShareRecordByDenomRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenizeShareRecordByDenomRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenizeShareRecordByDenomRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *QueryTokenizeShareRecordByDenomRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenizeShareRecordByDenomRequest.Merge(m, src) +} +func (m *QueryTokenizeShareRecordByDenomRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenizeShareRecordByDenomRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenizeShareRecordByDenomRequest.DiscardUnknown(m) } -func (c *queryClient) Delegation(ctx context.Context, in *QueryDelegationRequest, opts ...grpc.CallOption) (*QueryDelegationResponse, error) { - out := new(QueryDelegationResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Delegation", in, out, opts...) - if err != nil { - return nil, err +var xxx_messageInfo_QueryTokenizeShareRecordByDenomRequest proto.InternalMessageInfo + +func (m *QueryTokenizeShareRecordByDenomRequest) GetDenom() string { + if m != nil { + return m.Denom } - return out, nil + return "" } -func (c *queryClient) UnbondingDelegation(ctx context.Context, in *QueryUnbondingDelegationRequest, opts ...grpc.CallOption) (*QueryUnbondingDelegationResponse, error) { - out := new(QueryUnbondingDelegationResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/UnbondingDelegation", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +// QueryTokenizeShareRecordByDenomResponse is response type for the +// Query/QueryTokenizeShareRecordByDenom RPC method. +type QueryTokenizeShareRecordByDenomResponse struct { + Record TokenizeShareRecord `protobuf:"bytes,1,opt,name=record,proto3" json:"record"` } -func (c *queryClient) DelegatorDelegations(ctx context.Context, in *QueryDelegatorDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorDelegationsResponse, error) { - out := new(QueryDelegatorDelegationsResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorDelegations", in, out, opts...) - if err != nil { - return nil, err +func (m *QueryTokenizeShareRecordByDenomResponse) Reset() { + *m = QueryTokenizeShareRecordByDenomResponse{} +} +func (m *QueryTokenizeShareRecordByDenomResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTokenizeShareRecordByDenomResponse) ProtoMessage() {} +func (*QueryTokenizeShareRecordByDenomResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{31} +} +func (m *QueryTokenizeShareRecordByDenomResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenizeShareRecordByDenomResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenizeShareRecordByDenomResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *QueryTokenizeShareRecordByDenomResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenizeShareRecordByDenomResponse.Merge(m, src) +} +func (m *QueryTokenizeShareRecordByDenomResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenizeShareRecordByDenomResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenizeShareRecordByDenomResponse.DiscardUnknown(m) } -func (c *queryClient) DelegatorUnbondingDelegations(ctx context.Context, in *QueryDelegatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorUnbondingDelegationsResponse, error) { - out := new(QueryDelegatorUnbondingDelegationsResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations", in, out, opts...) - if err != nil { - return nil, err +var xxx_messageInfo_QueryTokenizeShareRecordByDenomResponse proto.InternalMessageInfo + +func (m *QueryTokenizeShareRecordByDenomResponse) GetRecord() TokenizeShareRecord { + if m != nil { + return m.Record } - return out, nil + return TokenizeShareRecord{} } -func (c *queryClient) Redelegations(ctx context.Context, in *QueryRedelegationsRequest, opts ...grpc.CallOption) (*QueryRedelegationsResponse, error) { - out := new(QueryRedelegationsResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Redelegations", in, out, opts...) - if err != nil { - return nil, err +// QueryTokenizeShareRecordsOwnedRequest is request type for the +// Query/QueryTokenizeShareRecordsOwned RPC method. +type QueryTokenizeShareRecordsOwnedRequest struct { + Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` +} + +func (m *QueryTokenizeShareRecordsOwnedRequest) Reset() { *m = QueryTokenizeShareRecordsOwnedRequest{} } +func (m *QueryTokenizeShareRecordsOwnedRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTokenizeShareRecordsOwnedRequest) ProtoMessage() {} +func (*QueryTokenizeShareRecordsOwnedRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{32} +} +func (m *QueryTokenizeShareRecordsOwnedRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenizeShareRecordsOwnedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenizeShareRecordsOwnedRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *QueryTokenizeShareRecordsOwnedRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenizeShareRecordsOwnedRequest.Merge(m, src) +} +func (m *QueryTokenizeShareRecordsOwnedRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenizeShareRecordsOwnedRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenizeShareRecordsOwnedRequest.DiscardUnknown(m) } -func (c *queryClient) DelegatorValidators(ctx context.Context, in *QueryDelegatorValidatorsRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorsResponse, error) { - out := new(QueryDelegatorValidatorsResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorValidators", in, out, opts...) - if err != nil { - return nil, err +var xxx_messageInfo_QueryTokenizeShareRecordsOwnedRequest proto.InternalMessageInfo + +func (m *QueryTokenizeShareRecordsOwnedRequest) GetOwner() string { + if m != nil { + return m.Owner } - return out, nil + return "" } -func (c *queryClient) DelegatorValidator(ctx context.Context, in *QueryDelegatorValidatorRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorResponse, error) { - out := new(QueryDelegatorValidatorResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorValidator", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +// QueryTokenizeShareRecordsOwnedResponse is response type for the +// Query/QueryTokenizeShareRecordsOwned RPC method. +type QueryTokenizeShareRecordsOwnedResponse struct { + Records []TokenizeShareRecord `protobuf:"bytes,1,rep,name=records,proto3" json:"records"` } -func (c *queryClient) HistoricalInfo(ctx context.Context, in *QueryHistoricalInfoRequest, opts ...grpc.CallOption) (*QueryHistoricalInfoResponse, error) { - out := new(QueryHistoricalInfoResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/HistoricalInfo", in, out, opts...) - if err != nil { - return nil, err +func (m *QueryTokenizeShareRecordsOwnedResponse) Reset() { + *m = QueryTokenizeShareRecordsOwnedResponse{} +} +func (m *QueryTokenizeShareRecordsOwnedResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTokenizeShareRecordsOwnedResponse) ProtoMessage() {} +func (*QueryTokenizeShareRecordsOwnedResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{33} +} +func (m *QueryTokenizeShareRecordsOwnedResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenizeShareRecordsOwnedResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenizeShareRecordsOwnedResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *QueryTokenizeShareRecordsOwnedResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenizeShareRecordsOwnedResponse.Merge(m, src) +} +func (m *QueryTokenizeShareRecordsOwnedResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenizeShareRecordsOwnedResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenizeShareRecordsOwnedResponse.DiscardUnknown(m) } -func (c *queryClient) Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) { - out := new(QueryPoolResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Pool", in, out, opts...) - if err != nil { - return nil, err +var xxx_messageInfo_QueryTokenizeShareRecordsOwnedResponse proto.InternalMessageInfo + +func (m *QueryTokenizeShareRecordsOwnedResponse) GetRecords() []TokenizeShareRecord { + if m != nil { + return m.Records } - return out, nil + return nil } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { - out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Params", in, out, opts...) - if err != nil { - return nil, err +// QueryAllTokenizeShareRecordsRequest is request type for the +// Query/QueryAllTokenizeShareRecords RPC method. +type QueryAllTokenizeShareRecordsRequest struct { + // pagination defines an optional pagination for the request. + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllTokenizeShareRecordsRequest) Reset() { *m = QueryAllTokenizeShareRecordsRequest{} } +func (m *QueryAllTokenizeShareRecordsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllTokenizeShareRecordsRequest) ProtoMessage() {} +func (*QueryAllTokenizeShareRecordsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{34} +} +func (m *QueryAllTokenizeShareRecordsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllTokenizeShareRecordsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllTokenizeShareRecordsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *QueryAllTokenizeShareRecordsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllTokenizeShareRecordsRequest.Merge(m, src) +} +func (m *QueryAllTokenizeShareRecordsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllTokenizeShareRecordsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllTokenizeShareRecordsRequest.DiscardUnknown(m) } -// QueryServer is the server API for Query service. -type QueryServer interface { - // Validators queries all validators that match the given status. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - Validators(context.Context, *QueryValidatorsRequest) (*QueryValidatorsResponse, error) - // Validator queries validator info for given validator address. - Validator(context.Context, *QueryValidatorRequest) (*QueryValidatorResponse, error) - // ValidatorDelegations queries delegate info for given validator. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - ValidatorDelegations(context.Context, *QueryValidatorDelegationsRequest) (*QueryValidatorDelegationsResponse, error) - // ValidatorUnbondingDelegations queries unbonding delegations of a validator. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - ValidatorUnbondingDelegations(context.Context, *QueryValidatorUnbondingDelegationsRequest) (*QueryValidatorUnbondingDelegationsResponse, error) - // Delegation queries delegate info for given validator delegator pair. - Delegation(context.Context, *QueryDelegationRequest) (*QueryDelegationResponse, error) - // UnbondingDelegation queries unbonding info for given validator delegator - // pair. - UnbondingDelegation(context.Context, *QueryUnbondingDelegationRequest) (*QueryUnbondingDelegationResponse, error) - // DelegatorDelegations queries all delegations of a given delegator address. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - DelegatorDelegations(context.Context, *QueryDelegatorDelegationsRequest) (*QueryDelegatorDelegationsResponse, error) - // DelegatorUnbondingDelegations queries all unbonding delegations of a given - // delegator address. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - DelegatorUnbondingDelegations(context.Context, *QueryDelegatorUnbondingDelegationsRequest) (*QueryDelegatorUnbondingDelegationsResponse, error) - // Redelegations queries redelegations of given address. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - Redelegations(context.Context, *QueryRedelegationsRequest) (*QueryRedelegationsResponse, error) - // DelegatorValidators queries all validators info for given delegator - // address. - // - // When called from another module, this query might consume a high amount of - // gas if the pagination field is incorrectly set. - DelegatorValidators(context.Context, *QueryDelegatorValidatorsRequest) (*QueryDelegatorValidatorsResponse, error) - // DelegatorValidator queries validator info for given delegator validator - // pair. - DelegatorValidator(context.Context, *QueryDelegatorValidatorRequest) (*QueryDelegatorValidatorResponse, error) - // HistoricalInfo queries the historical info for given height. - HistoricalInfo(context.Context, *QueryHistoricalInfoRequest) (*QueryHistoricalInfoResponse, error) - // Pool queries the pool info. - Pool(context.Context, *QueryPoolRequest) (*QueryPoolResponse, error) - // Parameters queries the staking parameters. - Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) +var xxx_messageInfo_QueryAllTokenizeShareRecordsRequest proto.InternalMessageInfo + +func (m *QueryAllTokenizeShareRecordsRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil } -// UnimplementedQueryServer can be embedded to have forward compatible implementations. -type UnimplementedQueryServer struct { +// QueryAllTokenizeShareRecordsResponse is response type for the +// Query/QueryAllTokenizeShareRecords RPC method. +type QueryAllTokenizeShareRecordsResponse struct { + Records []TokenizeShareRecord `protobuf:"bytes,1,rep,name=records,proto3" json:"records"` + // pagination defines the pagination in the response. + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (*UnimplementedQueryServer) Validators(ctx context.Context, req *QueryValidatorsRequest) (*QueryValidatorsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Validators not implemented") +func (m *QueryAllTokenizeShareRecordsResponse) Reset() { *m = QueryAllTokenizeShareRecordsResponse{} } +func (m *QueryAllTokenizeShareRecordsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllTokenizeShareRecordsResponse) ProtoMessage() {} +func (*QueryAllTokenizeShareRecordsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{35} } -func (*UnimplementedQueryServer) Validator(ctx context.Context, req *QueryValidatorRequest) (*QueryValidatorResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Validator not implemented") +func (m *QueryAllTokenizeShareRecordsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } -func (*UnimplementedQueryServer) ValidatorDelegations(ctx context.Context, req *QueryValidatorDelegationsRequest) (*QueryValidatorDelegationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ValidatorDelegations not implemented") +func (m *QueryAllTokenizeShareRecordsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllTokenizeShareRecordsResponse.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 (*UnimplementedQueryServer) ValidatorUnbondingDelegations(ctx context.Context, req *QueryValidatorUnbondingDelegationsRequest) (*QueryValidatorUnbondingDelegationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ValidatorUnbondingDelegations not implemented") +func (m *QueryAllTokenizeShareRecordsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllTokenizeShareRecordsResponse.Merge(m, src) } -func (*UnimplementedQueryServer) Delegation(ctx context.Context, req *QueryDelegationRequest) (*QueryDelegationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delegation not implemented") +func (m *QueryAllTokenizeShareRecordsResponse) XXX_Size() int { + return m.Size() } -func (*UnimplementedQueryServer) UnbondingDelegation(ctx context.Context, req *QueryUnbondingDelegationRequest) (*QueryUnbondingDelegationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UnbondingDelegation not implemented") +func (m *QueryAllTokenizeShareRecordsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllTokenizeShareRecordsResponse.DiscardUnknown(m) } -func (*UnimplementedQueryServer) DelegatorDelegations(ctx context.Context, req *QueryDelegatorDelegationsRequest) (*QueryDelegatorDelegationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DelegatorDelegations not implemented") + +var xxx_messageInfo_QueryAllTokenizeShareRecordsResponse proto.InternalMessageInfo + +func (m *QueryAllTokenizeShareRecordsResponse) GetRecords() []TokenizeShareRecord { + if m != nil { + return m.Records + } + return nil } -func (*UnimplementedQueryServer) DelegatorUnbondingDelegations(ctx context.Context, req *QueryDelegatorUnbondingDelegationsRequest) (*QueryDelegatorUnbondingDelegationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DelegatorUnbondingDelegations not implemented") + +func (m *QueryAllTokenizeShareRecordsResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil } -func (*UnimplementedQueryServer) Redelegations(ctx context.Context, req *QueryRedelegationsRequest) (*QueryRedelegationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Redelegations not implemented") + +// QueryLastTokenizeShareRecordIdRequest is request type for the +// Query/QueryLastTokenizeShareRecordId RPC method. +type QueryLastTokenizeShareRecordIdRequest struct { } -func (*UnimplementedQueryServer) DelegatorValidators(ctx context.Context, req *QueryDelegatorValidatorsRequest) (*QueryDelegatorValidatorsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DelegatorValidators not implemented") + +func (m *QueryLastTokenizeShareRecordIdRequest) Reset() { *m = QueryLastTokenizeShareRecordIdRequest{} } +func (m *QueryLastTokenizeShareRecordIdRequest) String() string { return proto.CompactTextString(m) } +func (*QueryLastTokenizeShareRecordIdRequest) ProtoMessage() {} +func (*QueryLastTokenizeShareRecordIdRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{36} } -func (*UnimplementedQueryServer) DelegatorValidator(ctx context.Context, req *QueryDelegatorValidatorRequest) (*QueryDelegatorValidatorResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DelegatorValidator not implemented") +func (m *QueryLastTokenizeShareRecordIdRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } -func (*UnimplementedQueryServer) HistoricalInfo(ctx context.Context, req *QueryHistoricalInfoRequest) (*QueryHistoricalInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method HistoricalInfo not implemented") +func (m *QueryLastTokenizeShareRecordIdRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryLastTokenizeShareRecordIdRequest.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 (*UnimplementedQueryServer) Pool(ctx context.Context, req *QueryPoolRequest) (*QueryPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Pool not implemented") +func (m *QueryLastTokenizeShareRecordIdRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryLastTokenizeShareRecordIdRequest.Merge(m, src) } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +func (m *QueryLastTokenizeShareRecordIdRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryLastTokenizeShareRecordIdRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryLastTokenizeShareRecordIdRequest.DiscardUnknown(m) } -func RegisterQueryServer(s grpc1.Server, srv QueryServer) { - s.RegisterService(&_Query_serviceDesc, srv) +var xxx_messageInfo_QueryLastTokenizeShareRecordIdRequest proto.InternalMessageInfo + +// QueryLastTokenizeShareRecordIdResponse is response type for the +// Query/QueryLastTokenizeShareRecordId RPC method. +type QueryLastTokenizeShareRecordIdResponse struct { + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` } -func _Query_Validators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryValidatorsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Validators(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/Validators", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Validators(ctx, req.(*QueryValidatorsRequest)) +func (m *QueryLastTokenizeShareRecordIdResponse) Reset() { + *m = QueryLastTokenizeShareRecordIdResponse{} +} +func (m *QueryLastTokenizeShareRecordIdResponse) String() string { return proto.CompactTextString(m) } +func (*QueryLastTokenizeShareRecordIdResponse) ProtoMessage() {} +func (*QueryLastTokenizeShareRecordIdResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{37} +} +func (m *QueryLastTokenizeShareRecordIdResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryLastTokenizeShareRecordIdResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryLastTokenizeShareRecordIdResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return interceptor(ctx, in, info, handler) +} +func (m *QueryLastTokenizeShareRecordIdResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryLastTokenizeShareRecordIdResponse.Merge(m, src) +} +func (m *QueryLastTokenizeShareRecordIdResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryLastTokenizeShareRecordIdResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryLastTokenizeShareRecordIdResponse.DiscardUnknown(m) } -func _Query_Validator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryValidatorRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Validator(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/Validator", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Validator(ctx, req.(*QueryValidatorRequest)) +var xxx_messageInfo_QueryLastTokenizeShareRecordIdResponse proto.InternalMessageInfo + +func (m *QueryLastTokenizeShareRecordIdResponse) GetId() uint64 { + if m != nil { + return m.Id } - return interceptor(ctx, in, info, handler) + return 0 } -func _Query_ValidatorDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryValidatorDelegationsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).ValidatorDelegations(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/ValidatorDelegations", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ValidatorDelegations(ctx, req.(*QueryValidatorDelegationsRequest)) - } - return interceptor(ctx, in, info, handler) +// QueryTotalTokenizeSharedAssetsRequest is request type for the +// Query/QueryTotalTokenizeSharedAssets RPC method. +type QueryTotalTokenizeSharedAssetsRequest struct { } -func _Query_ValidatorUnbondingDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryValidatorUnbondingDelegationsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).ValidatorUnbondingDelegations(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/ValidatorUnbondingDelegations", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ValidatorUnbondingDelegations(ctx, req.(*QueryValidatorUnbondingDelegationsRequest)) +func (m *QueryTotalTokenizeSharedAssetsRequest) Reset() { *m = QueryTotalTokenizeSharedAssetsRequest{} } +func (m *QueryTotalTokenizeSharedAssetsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTotalTokenizeSharedAssetsRequest) ProtoMessage() {} +func (*QueryTotalTokenizeSharedAssetsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{38} +} +func (m *QueryTotalTokenizeSharedAssetsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalTokenizeSharedAssetsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalTokenizeSharedAssetsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return interceptor(ctx, in, info, handler) +} +func (m *QueryTotalTokenizeSharedAssetsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalTokenizeSharedAssetsRequest.Merge(m, src) +} +func (m *QueryTotalTokenizeSharedAssetsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalTokenizeSharedAssetsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalTokenizeSharedAssetsRequest.DiscardUnknown(m) } -func _Query_Delegation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryDelegationRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Delegation(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/Delegation", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Delegation(ctx, req.(*QueryDelegationRequest)) - } - return interceptor(ctx, in, info, handler) +var xxx_messageInfo_QueryTotalTokenizeSharedAssetsRequest proto.InternalMessageInfo + +// QueryTotalTokenizeSharedAssetsResponse is response type for the +// Query/QueryTotalTokenizeSharedAssets RPC method. +type QueryTotalTokenizeSharedAssetsResponse struct { + Value types.Coin `protobuf:"bytes,1,opt,name=value,proto3" json:"value"` } -func _Query_UnbondingDelegation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryUnbondingDelegationRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).UnbondingDelegation(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/UnbondingDelegation", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).UnbondingDelegation(ctx, req.(*QueryUnbondingDelegationRequest)) +func (m *QueryTotalTokenizeSharedAssetsResponse) Reset() { + *m = QueryTotalTokenizeSharedAssetsResponse{} +} +func (m *QueryTotalTokenizeSharedAssetsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTotalTokenizeSharedAssetsResponse) ProtoMessage() {} +func (*QueryTotalTokenizeSharedAssetsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{39} +} +func (m *QueryTotalTokenizeSharedAssetsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalTokenizeSharedAssetsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalTokenizeSharedAssetsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return interceptor(ctx, in, info, handler) +} +func (m *QueryTotalTokenizeSharedAssetsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalTokenizeSharedAssetsResponse.Merge(m, src) +} +func (m *QueryTotalTokenizeSharedAssetsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalTokenizeSharedAssetsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalTokenizeSharedAssetsResponse.DiscardUnknown(m) } -func _Query_DelegatorDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryDelegatorDelegationsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).DelegatorDelegations(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorDelegations", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).DelegatorDelegations(ctx, req.(*QueryDelegatorDelegationsRequest)) +var xxx_messageInfo_QueryTotalTokenizeSharedAssetsResponse proto.InternalMessageInfo + +func (m *QueryTotalTokenizeSharedAssetsResponse) GetValue() types.Coin { + if m != nil { + return m.Value } - return interceptor(ctx, in, info, handler) + return types.Coin{} } -func _Query_DelegatorUnbondingDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryDelegatorUnbondingDelegationsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).DelegatorUnbondingDelegations(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).DelegatorUnbondingDelegations(ctx, req.(*QueryDelegatorUnbondingDelegationsRequest)) - } - return interceptor(ctx, in, info, handler) +// QueryTotalLiquidStakedRequest is request type for the +// Query/QueryQueryTotalLiquidStaked RPC method. +type QueryTotalLiquidStaked struct { } -func _Query_Redelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryRedelegationsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Redelegations(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/Redelegations", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Redelegations(ctx, req.(*QueryRedelegationsRequest)) +func (m *QueryTotalLiquidStaked) Reset() { *m = QueryTotalLiquidStaked{} } +func (m *QueryTotalLiquidStaked) String() string { return proto.CompactTextString(m) } +func (*QueryTotalLiquidStaked) ProtoMessage() {} +func (*QueryTotalLiquidStaked) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{40} +} +func (m *QueryTotalLiquidStaked) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalLiquidStaked) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalLiquidStaked.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return interceptor(ctx, in, info, handler) +} +func (m *QueryTotalLiquidStaked) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalLiquidStaked.Merge(m, src) +} +func (m *QueryTotalLiquidStaked) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalLiquidStaked) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalLiquidStaked.DiscardUnknown(m) } -func _Query_DelegatorValidators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryDelegatorValidatorsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).DelegatorValidators(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorValidators", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).DelegatorValidators(ctx, req.(*QueryDelegatorValidatorsRequest)) - } - return interceptor(ctx, in, info, handler) +var xxx_messageInfo_QueryTotalLiquidStaked proto.InternalMessageInfo + +// QueryTotalLiquidStakedResponse is response type for the +// Query/QueryQueryTotalLiquidStaked RPC method. +type QueryTotalLiquidStakedResponse struct { + Tokens string `protobuf:"bytes,1,opt,name=tokens,proto3" json:"tokens,omitempty"` } -func _Query_DelegatorValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryDelegatorValidatorRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).DelegatorValidator(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorValidator", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).DelegatorValidator(ctx, req.(*QueryDelegatorValidatorRequest)) +func (m *QueryTotalLiquidStakedResponse) Reset() { *m = QueryTotalLiquidStakedResponse{} } +func (m *QueryTotalLiquidStakedResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTotalLiquidStakedResponse) ProtoMessage() {} +func (*QueryTotalLiquidStakedResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{41} +} +func (m *QueryTotalLiquidStakedResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalLiquidStakedResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalLiquidStakedResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return interceptor(ctx, in, info, handler) +} +func (m *QueryTotalLiquidStakedResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalLiquidStakedResponse.Merge(m, src) +} +func (m *QueryTotalLiquidStakedResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalLiquidStakedResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalLiquidStakedResponse.DiscardUnknown(m) } -func _Query_HistoricalInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryHistoricalInfoRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).HistoricalInfo(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/HistoricalInfo", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).HistoricalInfo(ctx, req.(*QueryHistoricalInfoRequest)) +var xxx_messageInfo_QueryTotalLiquidStakedResponse proto.InternalMessageInfo + +func (m *QueryTotalLiquidStakedResponse) GetTokens() string { + if m != nil { + return m.Tokens } - return interceptor(ctx, in, info, handler) + return "" } -func _Query_Pool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Pool(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/Pool", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Pool(ctx, req.(*QueryPoolRequest)) - } - return interceptor(ctx, in, info, handler) +// QueryTokenizeShareLockInfo queries the tokenize share lock information +// associated with given account +type QueryTokenizeShareLockInfo struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Params(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Query/Params", +func (m *QueryTokenizeShareLockInfo) Reset() { *m = QueryTokenizeShareLockInfo{} } +func (m *QueryTokenizeShareLockInfo) String() string { return proto.CompactTextString(m) } +func (*QueryTokenizeShareLockInfo) ProtoMessage() {} +func (*QueryTokenizeShareLockInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{42} +} +func (m *QueryTokenizeShareLockInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenizeShareLockInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenizeShareLockInfo.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) +} +func (m *QueryTokenizeShareLockInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenizeShareLockInfo.Merge(m, src) +} +func (m *QueryTokenizeShareLockInfo) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenizeShareLockInfo) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenizeShareLockInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTokenizeShareLockInfo proto.InternalMessageInfo + +func (m *QueryTokenizeShareLockInfo) GetAddress() string { + if m != nil { + return m.Address } - return interceptor(ctx, in, info, handler) + return "" } -var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "cosmos.staking.v1beta1.Query", - HandlerType: (*QueryServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Validators", - Handler: _Query_Validators_Handler, - }, - { - MethodName: "Validator", - Handler: _Query_Validator_Handler, - }, - { - MethodName: "ValidatorDelegations", - Handler: _Query_ValidatorDelegations_Handler, - }, - { - MethodName: "ValidatorUnbondingDelegations", - Handler: _Query_ValidatorUnbondingDelegations_Handler, - }, - { - MethodName: "Delegation", - Handler: _Query_Delegation_Handler, - }, - { - MethodName: "UnbondingDelegation", - Handler: _Query_UnbondingDelegation_Handler, - }, - { - MethodName: "DelegatorDelegations", - Handler: _Query_DelegatorDelegations_Handler, - }, - { - MethodName: "DelegatorUnbondingDelegations", - Handler: _Query_DelegatorUnbondingDelegations_Handler, - }, - { - MethodName: "Redelegations", - Handler: _Query_Redelegations_Handler, - }, - { - MethodName: "DelegatorValidators", - Handler: _Query_DelegatorValidators_Handler, - }, - { - MethodName: "DelegatorValidator", - Handler: _Query_DelegatorValidator_Handler, - }, - { - MethodName: "HistoricalInfo", - Handler: _Query_HistoricalInfo_Handler, - }, - { - MethodName: "Pool", - Handler: _Query_Pool_Handler, - }, - { - MethodName: "Params", - Handler: _Query_Params_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "cosmos/staking/v1beta1/query.proto", +// QueryTokenizeShareLockInfoResponse is the response from the +// QueryTokenizeShareLockInfo query +type QueryTokenizeShareLockInfoResponse struct { + Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + ExpirationTime string `protobuf:"bytes,2,opt,name=expiration_time,json=expirationTime,proto3" json:"expiration_time,omitempty"` } -func (m *QueryValidatorsRequest) 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 *QueryTokenizeShareLockInfoResponse) Reset() { *m = QueryTokenizeShareLockInfoResponse{} } +func (m *QueryTokenizeShareLockInfoResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTokenizeShareLockInfoResponse) ProtoMessage() {} +func (*QueryTokenizeShareLockInfoResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f270127f442bbcd8, []int{43} } - -func (m *QueryValidatorsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (m *QueryTokenizeShareLockInfoResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } - -func (m *QueryValidatorsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) +func (m *QueryTokenizeShareLockInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenizeShareLockInfoResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - i-- - dAtA[i] = 0x12 - } - if len(m.Status) > 0 { - i -= len(m.Status) - copy(dAtA[i:], m.Status) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Status))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryValidatorsResponse) 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 b[:n], nil } - return dAtA[:n], nil } - -func (m *QueryValidatorsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (m *QueryTokenizeShareLockInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenizeShareLockInfoResponse.Merge(m, src) } - -func (m *QueryValidatorsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Validators) > 0 { - for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil +func (m *QueryTokenizeShareLockInfoResponse) XXX_Size() int { + return m.Size() } - -func (m *QueryValidatorRequest) 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 *QueryTokenizeShareLockInfoResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenizeShareLockInfoResponse.DiscardUnknown(m) } -func (m *QueryValidatorRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} +var xxx_messageInfo_QueryTokenizeShareLockInfoResponse proto.InternalMessageInfo -func (m *QueryValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ValidatorAddr) > 0 { - i -= len(m.ValidatorAddr) - copy(dAtA[i:], m.ValidatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr))) - i-- - dAtA[i] = 0xa +func (m *QueryTokenizeShareLockInfoResponse) GetStatus() string { + if m != nil { + return m.Status } - return len(dAtA) - i, nil + return "" } -func (m *QueryValidatorResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryTokenizeShareLockInfoResponse) GetExpirationTime() string { + if m != nil { + return m.ExpirationTime } - return dAtA[:n], nil -} - -func (m *QueryValidatorResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return "" } -func (m *QueryValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil +func init() { + proto.RegisterType((*QueryValidatorsRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorsRequest") + proto.RegisterType((*QueryValidatorsResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorsResponse") + proto.RegisterType((*QueryValidatorRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorRequest") + proto.RegisterType((*QueryValidatorResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorResponse") + proto.RegisterType((*QueryValidatorDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorDelegationsRequest") + proto.RegisterType((*QueryValidatorDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorDelegationsResponse") + proto.RegisterType((*QueryValidatorUnbondingDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsRequest") + proto.RegisterType((*QueryValidatorUnbondingDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse") + proto.RegisterType((*QueryDelegationRequest)(nil), "cosmos.staking.v1beta1.QueryDelegationRequest") + proto.RegisterType((*QueryDelegationResponse)(nil), "cosmos.staking.v1beta1.QueryDelegationResponse") + proto.RegisterType((*QueryUnbondingDelegationRequest)(nil), "cosmos.staking.v1beta1.QueryUnbondingDelegationRequest") + proto.RegisterType((*QueryUnbondingDelegationResponse)(nil), "cosmos.staking.v1beta1.QueryUnbondingDelegationResponse") + proto.RegisterType((*QueryDelegatorDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorDelegationsRequest") + proto.RegisterType((*QueryDelegatorDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse") + proto.RegisterType((*QueryDelegatorUnbondingDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsRequest") + proto.RegisterType((*QueryDelegatorUnbondingDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse") + proto.RegisterType((*QueryRedelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryRedelegationsRequest") + proto.RegisterType((*QueryRedelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryRedelegationsResponse") + proto.RegisterType((*QueryDelegatorValidatorsRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorsRequest") + proto.RegisterType((*QueryDelegatorValidatorsResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse") + proto.RegisterType((*QueryDelegatorValidatorRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorRequest") + proto.RegisterType((*QueryDelegatorValidatorResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorResponse") + proto.RegisterType((*QueryHistoricalInfoRequest)(nil), "cosmos.staking.v1beta1.QueryHistoricalInfoRequest") + proto.RegisterType((*QueryHistoricalInfoResponse)(nil), "cosmos.staking.v1beta1.QueryHistoricalInfoResponse") + proto.RegisterType((*QueryPoolRequest)(nil), "cosmos.staking.v1beta1.QueryPoolRequest") + proto.RegisterType((*QueryPoolResponse)(nil), "cosmos.staking.v1beta1.QueryPoolResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "cosmos.staking.v1beta1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "cosmos.staking.v1beta1.QueryParamsResponse") + proto.RegisterType((*QueryTokenizeShareRecordByIdRequest)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest") + proto.RegisterType((*QueryTokenizeShareRecordByIdResponse)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse") + proto.RegisterType((*QueryTokenizeShareRecordByDenomRequest)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest") + proto.RegisterType((*QueryTokenizeShareRecordByDenomResponse)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse") + proto.RegisterType((*QueryTokenizeShareRecordsOwnedRequest)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest") + proto.RegisterType((*QueryTokenizeShareRecordsOwnedResponse)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse") + proto.RegisterType((*QueryAllTokenizeShareRecordsRequest)(nil), "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest") + proto.RegisterType((*QueryAllTokenizeShareRecordsResponse)(nil), "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse") + proto.RegisterType((*QueryLastTokenizeShareRecordIdRequest)(nil), "cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest") + proto.RegisterType((*QueryLastTokenizeShareRecordIdResponse)(nil), "cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse") + proto.RegisterType((*QueryTotalTokenizeSharedAssetsRequest)(nil), "cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest") + proto.RegisterType((*QueryTotalTokenizeSharedAssetsResponse)(nil), "cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse") + proto.RegisterType((*QueryTotalLiquidStaked)(nil), "cosmos.staking.v1beta1.QueryTotalLiquidStaked") + proto.RegisterType((*QueryTotalLiquidStakedResponse)(nil), "cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse") + proto.RegisterType((*QueryTokenizeShareLockInfo)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareLockInfo") + proto.RegisterType((*QueryTokenizeShareLockInfoResponse)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse") } -func (m *QueryValidatorDelegationsRequest) 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 init() { + proto.RegisterFile("cosmos/staking/v1beta1/query.proto", fileDescriptor_f270127f442bbcd8) } -func (m *QueryValidatorDelegationsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +var fileDescriptor_f270127f442bbcd8 = []byte{ + // 1979 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0xdd, 0x6f, 0x1c, 0x57, + 0x15, 0xf7, 0x75, 0x1c, 0x97, 0x9c, 0xaa, 0xa1, 0xb9, 0x76, 0x1c, 0x7b, 0x1a, 0xd6, 0xee, 0x34, + 0xc4, 0x8e, 0x5d, 0xef, 0x34, 0x76, 0xed, 0x18, 0x27, 0x76, 0xba, 0x4e, 0x14, 0x30, 0xb1, 0x5a, + 0x77, 0x53, 0xac, 0xf2, 0xa5, 0xd5, 0x78, 0x67, 0xba, 0x1e, 0x79, 0x77, 0xee, 0x7a, 0x66, 0xd6, + 0x8d, 0xb1, 0x2c, 0x24, 0x1e, 0x50, 0x9f, 0x10, 0x12, 0xef, 0xa8, 0x0f, 0x3c, 0x20, 0x28, 0x52, + 0x1e, 0x8a, 0x04, 0x12, 0xea, 0x23, 0xaa, 0x04, 0x42, 0x15, 0xa8, 0x55, 0xe1, 0xa1, 0x45, 0x31, + 0x08, 0x5e, 0xf8, 0x0f, 0x10, 0x42, 0x33, 0x73, 0xe6, 0xcb, 0x33, 0x77, 0x66, 0x67, 0xbd, 0x96, + 0x9c, 0x97, 0x64, 0xe7, 0xce, 0x3d, 0xe7, 0xfc, 0x7e, 0xe7, 0xe3, 0xce, 0x3d, 0x47, 0x06, 0xb1, + 0xca, 0xcc, 0x06, 0x33, 0x25, 0xd3, 0x92, 0xb7, 0x35, 0xbd, 0x26, 0xed, 0x5e, 0xdf, 0x54, 0x2d, + 0xf9, 0xba, 0xb4, 0xd3, 0x52, 0x8d, 0xbd, 0x62, 0xd3, 0x60, 0x16, 0xa3, 0x43, 0xee, 0x9e, 0x22, + 0xee, 0x29, 0xe2, 0x1e, 0x61, 0x12, 0x65, 0x37, 0x65, 0x53, 0x75, 0x05, 0x7c, 0xf1, 0xa6, 0x5c, + 0xd3, 0x74, 0xd9, 0xd2, 0x98, 0xee, 0xea, 0x10, 0x06, 0x6b, 0xac, 0xc6, 0x9c, 0x9f, 0x92, 0xfd, + 0x0b, 0x57, 0x2f, 0xd7, 0x18, 0xab, 0xd5, 0x55, 0x49, 0x6e, 0x6a, 0x92, 0xac, 0xeb, 0xcc, 0x72, + 0x44, 0x4c, 0x7c, 0x7b, 0x85, 0x83, 0xcd, 0xc3, 0xe1, 0xee, 0x2a, 0x84, 0x51, 0x78, 0x5b, 0xaa, + 0x4c, 0xf3, 0x2c, 0x8f, 0xb8, 0xef, 0x2b, 0xae, 0x71, 0xa4, 0xe2, 0xbe, 0x7a, 0x0e, 0x45, 0x3d, + 0xec, 0x61, 0xd6, 0xc2, 0x05, 0xb9, 0xa1, 0xe9, 0x4c, 0x72, 0xfe, 0x75, 0x97, 0xc4, 0x87, 0x30, + 0xf4, 0xba, 0xbd, 0x63, 0x43, 0xae, 0x6b, 0x8a, 0x6c, 0x31, 0xc3, 0x2c, 0xab, 0x3b, 0x2d, 0xd5, + 0xb4, 0xe8, 0x10, 0xf4, 0x9b, 0x96, 0x6c, 0xb5, 0xcc, 0x61, 0x32, 0x46, 0x26, 0xce, 0x95, 0xf1, + 0x89, 0xde, 0x03, 0x08, 0x5c, 0x31, 0xdc, 0x3b, 0x46, 0x26, 0x9e, 0x9e, 0xb9, 0x5a, 0x44, 0x10, + 0x36, 0xe2, 0xa2, 0x6b, 0x12, 0x71, 0x17, 0xd7, 0xe5, 0x9a, 0x8a, 0x3a, 0xcb, 0x21, 0x49, 0xf1, + 0x11, 0x81, 0x4b, 0x31, 0xd3, 0x66, 0x93, 0xe9, 0xa6, 0x4a, 0xd7, 0x00, 0x76, 0xfd, 0xd5, 0x61, + 0x32, 0x76, 0x66, 0xe2, 0xe9, 0x99, 0xe7, 0x8b, 0xc9, 0x31, 0x2b, 0xfa, 0xf2, 0x2b, 0xe7, 0x3e, + 0xfc, 0x6c, 0xb4, 0xe7, 0xe7, 0xff, 0x7a, 0x34, 0x49, 0xca, 0x21, 0x79, 0xfa, 0xd5, 0x04, 0xc4, + 0xe3, 0x99, 0x88, 0x5d, 0x28, 0x11, 0xc8, 0x6f, 0xc2, 0xc5, 0x28, 0x62, 0xcf, 0x57, 0xb7, 0xe1, + 0xbc, 0x6f, 0xaf, 0x22, 0x2b, 0x8a, 0xe1, 0xfa, 0x6c, 0x65, 0xf8, 0xcf, 0xef, 0x4f, 0x0f, 0xa2, + 0xa1, 0x92, 0xa2, 0x18, 0xaa, 0x69, 0x3e, 0xb0, 0x0c, 0x4d, 0xaf, 0x95, 0x9f, 0xf1, 0xf7, 0xdb, + 0xeb, 0xa2, 0x72, 0x34, 0x0c, 0xbe, 0x2b, 0xbe, 0x0e, 0xe7, 0xfc, 0xad, 0x8e, 0xd6, 0xbc, 0x9e, + 0x08, 0xc4, 0xc5, 0x5f, 0x12, 0x18, 0x8b, 0x9a, 0xb9, 0xab, 0xd6, 0xd5, 0x9a, 0x9b, 0xa1, 0xdd, + 0xe2, 0xd2, 0xb5, 0x04, 0xf9, 0x0f, 0x81, 0xe7, 0x53, 0xd0, 0xa2, 0x7f, 0xbe, 0x0f, 0x83, 0x8a, + 0xbf, 0x5c, 0x31, 0x70, 0xd9, 0x4b, 0x9a, 0x49, 0x9e, 0xab, 0x02, 0x55, 0x9e, 0xa6, 0x95, 0x31, + 0xdb, 0x67, 0xbf, 0xf8, 0x7c, 0x74, 0x20, 0xfe, 0xce, 0x74, 0x5d, 0x39, 0xa0, 0xc4, 0xdf, 0x74, + 0x2f, 0xbb, 0xde, 0x27, 0x70, 0x2d, 0xca, 0xf7, 0x1b, 0xfa, 0x26, 0xd3, 0x15, 0x4d, 0xaf, 0x9d, + 0xe6, 0x30, 0x7d, 0x46, 0x60, 0xb2, 0x1d, 0xd8, 0x18, 0xaf, 0x1a, 0x0c, 0xb4, 0xbc, 0xf7, 0xb1, + 0x70, 0x4d, 0xf1, 0xc2, 0x95, 0xa0, 0x32, 0x9c, 0xe3, 0xd4, 0x57, 0x79, 0x02, 0x71, 0xf9, 0x19, + 0xc1, 0xe2, 0x0c, 0xe7, 0x85, 0x1f, 0x04, 0x4c, 0x89, 0xb6, 0x83, 0xe0, 0xef, 0x77, 0x82, 0x10, + 0x8f, 0x62, 0x6f, 0xae, 0x28, 0x2e, 0x7e, 0xe1, 0x9d, 0x77, 0x47, 0x7b, 0xfe, 0xfd, 0xee, 0x68, + 0x8f, 0xb8, 0x8b, 0xc7, 0x69, 0x3c, 0x7b, 0xe9, 0xb7, 0x61, 0x20, 0xa1, 0x46, 0xf0, 0x34, 0xc9, + 0x51, 0x22, 0x65, 0x1a, 0x2f, 0x00, 0xf1, 0x57, 0x04, 0x46, 0x1d, 0xc3, 0x09, 0x31, 0x3a, 0x8d, + 0x7e, 0x32, 0xf0, 0x0c, 0x4c, 0x84, 0x8b, 0x0e, 0x7b, 0x15, 0xfa, 0xdd, 0x8c, 0x42, 0x1f, 0x75, + 0x9a, 0x97, 0xa8, 0x45, 0xfc, 0xb5, 0x77, 0xf0, 0xde, 0xf5, 0x58, 0x25, 0x57, 0xf4, 0xf1, 0x9c, + 0xd4, 0xa5, 0x8a, 0x0e, 0xf9, 0xea, 0x13, 0xef, 0x08, 0x4e, 0xc6, 0x8d, 0xde, 0xda, 0xea, 0xda, + 0x11, 0x1c, 0x72, 0xdd, 0xc9, 0x9e, 0xb5, 0x1f, 0x78, 0x67, 0xad, 0x4f, 0x2c, 0xe3, 0xac, 0x3d, + 0x6d, 0x91, 0xf1, 0x4f, 0xdd, 0x0c, 0x02, 0x4f, 0xec, 0xa9, 0xfb, 0x41, 0x2f, 0x8c, 0x38, 0x04, + 0xcb, 0xaa, 0x72, 0x22, 0x11, 0xa1, 0xa6, 0x51, 0xad, 0xe4, 0x3c, 0x54, 0x9e, 0x35, 0x8d, 0xea, + 0xc6, 0x91, 0xaf, 0x28, 0x55, 0x4c, 0xeb, 0xa8, 0x9e, 0x33, 0x59, 0x7a, 0x14, 0xd3, 0xda, 0x48, + 0xf9, 0x1a, 0xf7, 0x75, 0x21, 0x43, 0x3e, 0x26, 0x20, 0x24, 0x39, 0x10, 0x33, 0x42, 0x87, 0x21, + 0x43, 0x4d, 0x29, 0xdb, 0x17, 0x79, 0x49, 0x11, 0x56, 0x97, 0x54, 0xb8, 0x17, 0x0d, 0xf5, 0xa4, + 0xaf, 0x49, 0xa3, 0xd1, 0xcc, 0x8f, 0xf7, 0x2e, 0xa7, 0xb0, 0x60, 0x7f, 0x1b, 0xfb, 0x04, 0x3c, + 0x39, 0x7d, 0xcf, 0x7b, 0x04, 0x0a, 0x1c, 0xec, 0xa7, 0xf1, 0x0b, 0xdf, 0xe0, 0x26, 0xc8, 0x89, + 0x74, 0x55, 0x2f, 0x63, 0x9d, 0x7d, 0x4d, 0x33, 0x2d, 0x66, 0x68, 0x55, 0xb9, 0xbe, 0xaa, 0xbf, + 0xc5, 0x42, 0x6d, 0xf4, 0x96, 0xaa, 0xd5, 0xb6, 0x2c, 0xc7, 0xcc, 0x99, 0x32, 0x3e, 0x89, 0xdf, + 0x84, 0xe7, 0x12, 0xa5, 0x10, 0xe0, 0x22, 0xf4, 0x6d, 0x69, 0xa6, 0x85, 0xd8, 0xae, 0xf2, 0xb0, + 0x1d, 0x91, 0x76, 0x64, 0x44, 0x0a, 0xcf, 0x3a, 0xaa, 0xd7, 0x19, 0xab, 0x23, 0x0c, 0x71, 0x1d, + 0x2e, 0x84, 0xd6, 0xd0, 0xc8, 0x4d, 0xe8, 0x6b, 0x32, 0x56, 0x47, 0x23, 0x97, 0x79, 0x46, 0x6c, + 0x99, 0x30, 0x77, 0x47, 0x48, 0x1c, 0x04, 0xea, 0x6a, 0x94, 0x0d, 0xb9, 0xe1, 0x55, 0x9e, 0xf8, + 0x26, 0x0c, 0x44, 0x56, 0xd1, 0x52, 0x09, 0xfa, 0x9b, 0xce, 0x0a, 0xda, 0x2a, 0x70, 0x6d, 0x39, + 0xbb, 0x22, 0x77, 0x28, 0x57, 0x50, 0x9c, 0x83, 0x17, 0x1c, 0xcd, 0x6f, 0xb0, 0x6d, 0x55, 0xd7, + 0xbe, 0xa7, 0x3e, 0xd8, 0x92, 0x0d, 0xb5, 0xac, 0x56, 0x99, 0xa1, 0xac, 0xec, 0xad, 0x2a, 0x9e, + 0xbf, 0xcf, 0x43, 0xaf, 0xe6, 0x5e, 0xdb, 0xfa, 0xca, 0xbd, 0x9a, 0x22, 0xee, 0xc0, 0x95, 0x74, + 0x31, 0x44, 0xb8, 0x0a, 0xfd, 0x86, 0xb3, 0x9a, 0x75, 0xe5, 0x4b, 0x52, 0xd4, 0x67, 0xc3, 0x2d, + 0xa3, 0x02, 0x71, 0x19, 0xae, 0xf2, 0x4d, 0xde, 0x55, 0x75, 0xd6, 0xf0, 0xc0, 0x0e, 0xc2, 0x59, + 0xc5, 0x7e, 0xc6, 0x11, 0x8b, 0xfb, 0x20, 0x5a, 0x30, 0x9e, 0x29, 0xdf, 0x7d, 0xd4, 0x4b, 0xf0, + 0x65, 0x9e, 0x55, 0xf3, 0xb5, 0xb7, 0x75, 0x55, 0x09, 0x81, 0x66, 0x6f, 0xeb, 0xaa, 0xe1, 0x81, + 0x76, 0x1e, 0xc4, 0x16, 0x9f, 0xb4, 0x27, 0x8e, 0x98, 0xef, 0xc3, 0x53, 0xae, 0xc9, 0xcc, 0xfb, + 0x07, 0x1f, 0xb4, 0xa7, 0x41, 0x6c, 0x60, 0x56, 0x94, 0xea, 0xf5, 0x24, 0xcb, 0x1e, 0xe6, 0xe8, + 0x79, 0x4e, 0x3a, 0x6e, 0x76, 0x7f, 0x47, 0x30, 0x9d, 0xb8, 0xf6, 0x4e, 0x80, 0x64, 0xf7, 0x0e, + 0xf2, 0x71, 0x8c, 0xf1, 0x9a, 0x6c, 0x5a, 0x09, 0x76, 0xfd, 0x2a, 0x12, 0x17, 0x30, 0x9a, 0x29, + 0x1b, 0x91, 0xe8, 0xd1, 0x7a, 0x1b, 0xf7, 0xd3, 0xc8, 0x92, 0xa3, 0x2e, 0x52, 0x4a, 0xa6, 0xa9, + 0x5a, 0xfe, 0x49, 0x51, 0xf1, 0x13, 0x86, 0xbb, 0x11, 0x4d, 0xcc, 0xc1, 0xd9, 0x5d, 0xb9, 0xde, + 0xf2, 0x1a, 0xd6, 0x91, 0x08, 0x73, 0x8f, 0xf3, 0x1d, 0xa6, 0xe9, 0xe8, 0x37, 0x77, 0xb7, 0x38, + 0x8c, 0x6d, 0xbb, 0x63, 0x60, 0x4d, 0xdb, 0x69, 0x69, 0xca, 0x03, 0x4b, 0xde, 0x56, 0x15, 0x71, + 0x01, 0x3f, 0x67, 0xb1, 0x37, 0xbe, 0xc9, 0x21, 0xe8, 0xb7, 0x6c, 0x48, 0xfe, 0xf0, 0xd3, 0x7d, + 0x12, 0xe7, 0xf1, 0xac, 0x8f, 0xe0, 0x5d, 0x63, 0xd5, 0x6d, 0xfb, 0xf8, 0xa5, 0xc3, 0xf0, 0x94, + 0xec, 0x7e, 0xa2, 0x50, 0xcc, 0x7b, 0x14, 0x55, 0x10, 0xf9, 0x72, 0x61, 0xab, 0x89, 0x23, 0xd7, + 0x71, 0xf8, 0xa2, 0xfa, 0xb0, 0xa9, 0x19, 0xee, 0x4d, 0xcd, 0xd2, 0x1a, 0xaa, 0xfb, 0x71, 0x2c, + 0x9f, 0x0f, 0x96, 0xdf, 0xd0, 0x1a, 0xea, 0xcc, 0xdf, 0x5e, 0x80, 0xb3, 0x8e, 0x1d, 0xfa, 0x53, + 0x02, 0x10, 0x5c, 0x30, 0x68, 0x91, 0x97, 0x7d, 0xc9, 0xc3, 0x5f, 0x41, 0x6a, 0x7b, 0x3f, 0x4e, + 0x01, 0xa4, 0x77, 0xec, 0xc3, 0xfa, 0x07, 0x7f, 0xf9, 0xc7, 0x4f, 0x7a, 0xaf, 0x50, 0x51, 0xe2, + 0x8c, 0xb9, 0x43, 0x97, 0x93, 0xf7, 0x08, 0x9c, 0xf3, 0xf5, 0xd0, 0xe9, 0xf6, 0xec, 0x79, 0xf0, + 0x8a, 0xed, 0x6e, 0x47, 0x74, 0xaf, 0x04, 0xe8, 0xe6, 0xe8, 0x6c, 0x36, 0x3a, 0x69, 0x3f, 0x7a, + 0x17, 0x39, 0xa0, 0x7f, 0x25, 0x30, 0x98, 0x34, 0x87, 0xa4, 0x0b, 0xed, 0x41, 0x89, 0x77, 0x95, + 0xc2, 0x57, 0x3a, 0x90, 0x44, 0x3e, 0x6b, 0x01, 0x9f, 0x12, 0xbd, 0xdd, 0x01, 0x1f, 0x29, 0xd4, + 0x12, 0xd0, 0xff, 0x11, 0xf8, 0x52, 0xea, 0xf0, 0x8e, 0x96, 0xda, 0x83, 0x9a, 0xd2, 0x43, 0x0b, + 0x2b, 0xc7, 0x51, 0x81, 0xb4, 0x37, 0x02, 0xda, 0xf7, 0xe9, 0x6a, 0x27, 0xb4, 0x83, 0x26, 0x38, + 0xec, 0x80, 0x3f, 0x12, 0x80, 0xc0, 0x5e, 0x46, 0xb1, 0xc4, 0xa6, 0x5b, 0x19, 0xc5, 0x12, 0x1f, + 0x73, 0x88, 0xdf, 0x0d, 0x78, 0x94, 0xe9, 0xfa, 0x31, 0xc3, 0x27, 0xed, 0x47, 0x2f, 0xde, 0x07, + 0xf4, 0xbf, 0x04, 0x06, 0x12, 0xfc, 0x48, 0x6f, 0xa4, 0xe2, 0xe4, 0x8f, 0xef, 0x84, 0x85, 0xfc, + 0x82, 0xc8, 0xd4, 0x08, 0x98, 0xd6, 0xa8, 0xda, 0x6d, 0xa6, 0x89, 0xe1, 0xa4, 0x7f, 0x22, 0x30, + 0x98, 0x34, 0xaf, 0xca, 0x28, 0xd5, 0x94, 0xd1, 0x5c, 0x46, 0xa9, 0xa6, 0x0d, 0xc7, 0xc4, 0x52, + 0xe0, 0x81, 0x79, 0xfa, 0x32, 0xcf, 0x03, 0xa9, 0xf1, 0xb4, 0xeb, 0x33, 0x75, 0xcc, 0x93, 0x51, + 0x9f, 0xed, 0xcc, 0xb8, 0x32, 0xea, 0xb3, 0xad, 0x29, 0x53, 0x9b, 0xf5, 0xe9, 0xd3, 0x6b, 0x33, + 0xa0, 0x26, 0xfd, 0x3d, 0x81, 0x67, 0x22, 0x53, 0x0c, 0x7a, 0x3d, 0x15, 0x6d, 0xd2, 0xc8, 0x48, + 0x98, 0xc9, 0x23, 0x82, 0x84, 0x5e, 0x0d, 0x08, 0xdd, 0xa1, 0xa5, 0x4e, 0x08, 0x19, 0x11, 0xd8, + 0x1f, 0x13, 0x18, 0x48, 0xe8, 0xff, 0x33, 0x2a, 0x93, 0x3f, 0xe8, 0x10, 0x16, 0xf2, 0x0b, 0x22, + 0xb5, 0xfb, 0x01, 0xb5, 0x57, 0xe8, 0x72, 0x27, 0xd4, 0x42, 0x1f, 0xf3, 0x43, 0x02, 0x34, 0x6e, + 0x8c, 0xce, 0xe7, 0x44, 0xe7, 0xb1, 0xba, 0x91, 0x5b, 0x0e, 0x49, 0x7d, 0x27, 0x20, 0xf5, 0x3a, + 0x7d, 0xed, 0x78, 0xa4, 0xe2, 0x77, 0x80, 0x4f, 0x08, 0x5c, 0xe2, 0xb4, 0x91, 0xf4, 0x66, 0x2a, + 0xe4, 0xf4, 0x9e, 0x55, 0xb8, 0xd5, 0x99, 0xb0, 0x77, 0xb9, 0x71, 0xf8, 0x2e, 0xd2, 0x05, 0x1e, + 0x5f, 0x0b, 0x15, 0x54, 0x4c, 0x5b, 0x43, 0xc5, 0xed, 0x2a, 0x2a, 0x9b, 0x7b, 0x15, 0x4d, 0x91, + 0xf6, 0x35, 0xe5, 0x80, 0xfe, 0x93, 0x80, 0xc0, 0x6f, 0x36, 0xe9, 0x72, 0x7e, 0x78, 0xe1, 0x2e, + 0x57, 0xb8, 0xdd, 0xb1, 0x3c, 0x32, 0xbc, 0x97, 0x95, 0xa6, 0x5c, 0x86, 0x4e, 0x43, 0x6d, 0x47, + 0x59, 0x67, 0x8d, 0x03, 0xfa, 0x39, 0x81, 0x11, 0x6e, 0x7f, 0x4a, 0x97, 0xf2, 0xc2, 0x8c, 0xb4, + 0xc5, 0xc2, 0x72, 0xa7, 0xe2, 0x48, 0xf2, 0x8e, 0x43, 0x72, 0x89, 0xde, 0xcc, 0x47, 0xd2, 0xee, + 0xbe, 0x15, 0x69, 0xdf, 0x69, 0xc2, 0x0f, 0xec, 0x9b, 0xcc, 0x25, 0x4e, 0x6b, 0x9a, 0x91, 0xa2, + 0xe9, 0x0d, 0x74, 0x46, 0x8a, 0x66, 0x74, 0xc3, 0xe2, 0xbc, 0xc3, 0xed, 0x25, 0x5a, 0xcc, 0xc5, + 0xcd, 0xb4, 0x6f, 0xdd, 0x23, 0xdc, 0x16, 0x34, 0x23, 0x60, 0x59, 0x3d, 0x6e, 0x46, 0xc0, 0x32, + 0x3b, 0x5f, 0x71, 0xc9, 0x21, 0x75, 0x83, 0xce, 0xf1, 0x48, 0xd5, 0x65, 0xd3, 0xaa, 0x24, 0x47, + 0x4d, 0x53, 0xe8, 0xa7, 0x4e, 0x32, 0x72, 0x7a, 0xdf, 0xcc, 0x64, 0x4c, 0x6f, 0xae, 0x33, 0x93, + 0x31, 0xa3, 0xe5, 0x16, 0x6f, 0x65, 0x5d, 0x58, 0x2c, 0x5b, 0xc5, 0x11, 0x72, 0x4a, 0x45, 0x76, + 0xc1, 0x3f, 0x22, 0x70, 0x21, 0xd6, 0x5b, 0x67, 0x5c, 0xab, 0x63, 0xfb, 0x85, 0xf9, 0x7c, 0xfb, + 0x7d, 0xec, 0xb3, 0x0e, 0xf6, 0x69, 0x3a, 0x95, 0x8e, 0xbd, 0xee, 0xc8, 0x56, 0x4c, 0x17, 0xdc, + 0x1f, 0x08, 0x5c, 0x4c, 0x6e, 0xea, 0x67, 0xda, 0xaf, 0x6b, 0x4f, 0x46, 0x58, 0xcc, 0x2f, 0xe3, + 0xc3, 0x5f, 0x71, 0xe0, 0xdf, 0xa2, 0x8b, 0x6d, 0xd6, 0x4a, 0x9d, 0x55, 0xb7, 0x2b, 0x9a, 0xfe, + 0x16, 0x93, 0xf6, 0x71, 0xda, 0x70, 0x40, 0x7f, 0x43, 0xe0, 0x7c, 0x74, 0x34, 0x9c, 0x41, 0x23, + 0x71, 0x76, 0x2d, 0xcc, 0xe6, 0x92, 0xf1, 0xca, 0x22, 0xf8, 0x06, 0xcf, 0xd0, 0x97, 0x78, 0x24, + 0xb6, 0x7c, 0x61, 0xc4, 0xee, 0x8e, 0xc5, 0x0f, 0xe8, 0x0f, 0x09, 0xf4, 0xad, 0x33, 0x56, 0xa7, + 0x13, 0xa9, 0xc6, 0x43, 0xb3, 0x6d, 0xe1, 0x5a, 0x1b, 0x3b, 0x11, 0xdc, 0xb5, 0x00, 0x5c, 0x81, + 0x5e, 0xe6, 0x81, 0x6b, 0xda, 0xf6, 0x7f, 0x44, 0xa0, 0xdf, 0x9d, 0x46, 0xd3, 0xc9, 0x74, 0x03, + 0xe1, 0x01, 0xb8, 0x30, 0xd5, 0xd6, 0x5e, 0x84, 0x33, 0x15, 0xc0, 0x19, 0xa3, 0x05, 0x2e, 0x1c, + 0x77, 0x26, 0x7e, 0xef, 0xc3, 0xc7, 0x05, 0xf2, 0xd1, 0xe3, 0x02, 0xf9, 0xfb, 0xe3, 0x02, 0xf9, + 0xf1, 0x61, 0xa1, 0xe7, 0xa3, 0xc3, 0x42, 0xcf, 0xa7, 0x87, 0x85, 0x9e, 0x6f, 0xbd, 0x58, 0xd3, + 0xac, 0xad, 0xd6, 0x66, 0xb1, 0xca, 0x1a, 0x9e, 0x0e, 0xf7, 0xbf, 0x69, 0x53, 0xd9, 0x96, 0x1e, + 0xfa, 0x0a, 0xad, 0xbd, 0xa6, 0x6a, 0x6e, 0xf6, 0x3b, 0x7f, 0xf9, 0x37, 0xfb, 0xff, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xa3, 0x5e, 0x01, 0x81, 0x28, 0x29, 0x00, 0x00, } -func (m *QueryValidatorDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.ValidatorAddr) > 0 { - i -= len(m.ValidatorAddr) - copy(dAtA[i:], m.ValidatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Validators queries all validators that match the given status. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + Validators(ctx context.Context, in *QueryValidatorsRequest, opts ...grpc.CallOption) (*QueryValidatorsResponse, error) + // Validator queries validator info for given validator address. + Validator(ctx context.Context, in *QueryValidatorRequest, opts ...grpc.CallOption) (*QueryValidatorResponse, error) + // ValidatorDelegations queries delegate info for given validator. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + ValidatorDelegations(ctx context.Context, in *QueryValidatorDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorDelegationsResponse, error) + // ValidatorUnbondingDelegations queries unbonding delegations of a validator. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + ValidatorUnbondingDelegations(ctx context.Context, in *QueryValidatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorUnbondingDelegationsResponse, error) + // Delegation queries delegate info for given validator delegator pair. + Delegation(ctx context.Context, in *QueryDelegationRequest, opts ...grpc.CallOption) (*QueryDelegationResponse, error) + // UnbondingDelegation queries unbonding info for given validator delegator + // pair. + UnbondingDelegation(ctx context.Context, in *QueryUnbondingDelegationRequest, opts ...grpc.CallOption) (*QueryUnbondingDelegationResponse, error) + // DelegatorDelegations queries all delegations of a given delegator address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + DelegatorDelegations(ctx context.Context, in *QueryDelegatorDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorDelegationsResponse, error) + // DelegatorUnbondingDelegations queries all unbonding delegations of a given + // delegator address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + DelegatorUnbondingDelegations(ctx context.Context, in *QueryDelegatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorUnbondingDelegationsResponse, error) + // Redelegations queries redelegations of given address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + Redelegations(ctx context.Context, in *QueryRedelegationsRequest, opts ...grpc.CallOption) (*QueryRedelegationsResponse, error) + // DelegatorValidators queries all validators info for given delegator + // address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + DelegatorValidators(ctx context.Context, in *QueryDelegatorValidatorsRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorsResponse, error) + // DelegatorValidator queries validator info for given delegator validator + // pair. + DelegatorValidator(ctx context.Context, in *QueryDelegatorValidatorRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorResponse, error) + // Query for individual tokenize share record information by share by id + TokenizeShareRecordById(ctx context.Context, in *QueryTokenizeShareRecordByIdRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordByIdResponse, error) + // Query for individual tokenize share record information by share denom + TokenizeShareRecordByDenom(ctx context.Context, in *QueryTokenizeShareRecordByDenomRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordByDenomResponse, error) + // Query tokenize share records by address + TokenizeShareRecordsOwned(ctx context.Context, in *QueryTokenizeShareRecordsOwnedRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordsOwnedResponse, error) + // Query for all tokenize share records + AllTokenizeShareRecords(ctx context.Context, in *QueryAllTokenizeShareRecordsRequest, opts ...grpc.CallOption) (*QueryAllTokenizeShareRecordsResponse, error) + // Query for last tokenize share record id + LastTokenizeShareRecordId(ctx context.Context, in *QueryLastTokenizeShareRecordIdRequest, opts ...grpc.CallOption) (*QueryLastTokenizeShareRecordIdResponse, error) + // Query for total tokenized staked assets + TotalTokenizeSharedAssets(ctx context.Context, in *QueryTotalTokenizeSharedAssetsRequest, opts ...grpc.CallOption) (*QueryTotalTokenizeSharedAssetsResponse, error) + // Query for total liquid staked (including tokenized shares or owned by an liquid staking provider) + TotalLiquidStaked(ctx context.Context, in *QueryTotalLiquidStaked, opts ...grpc.CallOption) (*QueryTotalLiquidStakedResponse, error) + // Query tokenize share locks + TokenizeShareLockInfo(ctx context.Context, in *QueryTokenizeShareLockInfo, opts ...grpc.CallOption) (*QueryTokenizeShareLockInfoResponse, error) + // HistoricalInfo queries the historical info for given height. + HistoricalInfo(ctx context.Context, in *QueryHistoricalInfoRequest, opts ...grpc.CallOption) (*QueryHistoricalInfoResponse, error) + // Pool queries the pool info. + Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) + // Parameters queries the staking parameters. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) } -func (m *QueryValidatorDelegationsResponse) 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 +type queryClient struct { + cc grpc1.ClientConn } -func (m *QueryValidatorDelegationsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} } -func (m *QueryValidatorDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.DelegationResponses) > 0 { - for iNdEx := len(m.DelegationResponses) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.DelegationResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } +func (c *queryClient) Validators(ctx context.Context, in *QueryValidatorsRequest, opts ...grpc.CallOption) (*QueryValidatorsResponse, error) { + out := new(QueryValidatorsResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Validators", in, out, opts...) + if err != nil { + return nil, err } - return len(dAtA) - i, nil + return out, nil } -func (m *QueryValidatorUnbondingDelegationsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) Validator(ctx context.Context, in *QueryValidatorRequest, opts ...grpc.CallOption) (*QueryValidatorResponse, error) { + out := new(QueryValidatorResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Validator", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil + return out, nil } -func (m *QueryValidatorUnbondingDelegationsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) ValidatorDelegations(ctx context.Context, in *QueryValidatorDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorDelegationsResponse, error) { + out := new(QueryValidatorDelegationsResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/ValidatorDelegations", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryValidatorUnbondingDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.ValidatorAddr) > 0 { - i -= len(m.ValidatorAddr) - copy(dAtA[i:], m.ValidatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr))) - i-- - dAtA[i] = 0xa +func (c *queryClient) ValidatorUnbondingDelegations(ctx context.Context, in *QueryValidatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorUnbondingDelegationsResponse, error) { + out := new(QueryValidatorUnbondingDelegationsResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/ValidatorUnbondingDelegations", in, out, opts...) + if err != nil { + return nil, err } - return len(dAtA) - i, nil + return out, nil } -func (m *QueryValidatorUnbondingDelegationsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) Delegation(ctx context.Context, in *QueryDelegationRequest, opts ...grpc.CallOption) (*QueryDelegationResponse, error) { + out := new(QueryDelegationResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Delegation", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil + return out, nil } -func (m *QueryValidatorUnbondingDelegationsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) UnbondingDelegation(ctx context.Context, in *QueryUnbondingDelegationRequest, opts ...grpc.CallOption) (*QueryUnbondingDelegationResponse, error) { + out := new(QueryUnbondingDelegationResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/UnbondingDelegation", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryValidatorUnbondingDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.UnbondingResponses) > 0 { - for iNdEx := len(m.UnbondingResponses) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.UnbondingResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } +func (c *queryClient) DelegatorDelegations(ctx context.Context, in *QueryDelegatorDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorDelegationsResponse, error) { + out := new(QueryDelegatorDelegationsResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorDelegations", in, out, opts...) + if err != nil { + return nil, err } - return len(dAtA) - i, nil + return out, nil } -func (m *QueryDelegationRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) DelegatorUnbondingDelegations(ctx context.Context, in *QueryDelegatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorUnbondingDelegationsResponse, error) { + out := new(QueryDelegatorUnbondingDelegationsResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil + return out, nil } -func (m *QueryDelegationRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryDelegationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ValidatorAddr) > 0 { - i -= len(m.ValidatorAddr) - copy(dAtA[i:], m.ValidatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr))) - i-- - dAtA[i] = 0x12 - } - if len(m.DelegatorAddr) > 0 { - i -= len(m.DelegatorAddr) - copy(dAtA[i:], m.DelegatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) - i-- - dAtA[i] = 0xa +func (c *queryClient) Redelegations(ctx context.Context, in *QueryRedelegationsRequest, opts ...grpc.CallOption) (*QueryRedelegationsResponse, error) { + out := new(QueryRedelegationsResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Redelegations", in, out, opts...) + if err != nil { + return nil, err } - return len(dAtA) - i, nil + return out, nil } -func (m *QueryDelegationResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) DelegatorValidators(ctx context.Context, in *QueryDelegatorValidatorsRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorsResponse, error) { + out := new(QueryDelegatorValidatorsResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorValidators", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryDelegationResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return out, nil } -func (m *QueryDelegationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.DelegationResponse != nil { - { - size, err := m.DelegationResponse.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa +func (c *queryClient) DelegatorValidator(ctx context.Context, in *QueryDelegatorValidatorRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorResponse, error) { + out := new(QueryDelegatorValidatorResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorValidator", in, out, opts...) + if err != nil { + return nil, err } - return len(dAtA) - i, nil + return out, nil } -func (m *QueryUnbondingDelegationRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) TokenizeShareRecordById(ctx context.Context, in *QueryTokenizeShareRecordByIdRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordByIdResponse, error) { + out := new(QueryTokenizeShareRecordByIdResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/TokenizeShareRecordById", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryUnbondingDelegationRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return out, nil } -func (m *QueryUnbondingDelegationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ValidatorAddr) > 0 { - i -= len(m.ValidatorAddr) - copy(dAtA[i:], m.ValidatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr))) - i-- - dAtA[i] = 0x12 - } - if len(m.DelegatorAddr) > 0 { - i -= len(m.DelegatorAddr) - copy(dAtA[i:], m.DelegatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) - i-- - dAtA[i] = 0xa +func (c *queryClient) TokenizeShareRecordByDenom(ctx context.Context, in *QueryTokenizeShareRecordByDenomRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordByDenomResponse, error) { + out := new(QueryTokenizeShareRecordByDenomResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/TokenizeShareRecordByDenom", in, out, opts...) + if err != nil { + return nil, err } - return len(dAtA) - i, nil + return out, nil } -func (m *QueryUnbondingDelegationResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) TokenizeShareRecordsOwned(ctx context.Context, in *QueryTokenizeShareRecordsOwnedRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordsOwnedResponse, error) { + out := new(QueryTokenizeShareRecordsOwnedResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/TokenizeShareRecordsOwned", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryUnbondingDelegationResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return out, nil } -func (m *QueryUnbondingDelegationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Unbond.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) +func (c *queryClient) AllTokenizeShareRecords(ctx context.Context, in *QueryAllTokenizeShareRecordsRequest, opts ...grpc.CallOption) (*QueryAllTokenizeShareRecordsResponse, error) { + out := new(QueryAllTokenizeShareRecordsResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/AllTokenizeShareRecords", in, out, opts...) + if err != nil { + return nil, err } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil + return out, nil } -func (m *QueryDelegatorDelegationsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) LastTokenizeShareRecordId(ctx context.Context, in *QueryLastTokenizeShareRecordIdRequest, opts ...grpc.CallOption) (*QueryLastTokenizeShareRecordIdResponse, error) { + out := new(QueryLastTokenizeShareRecordIdResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/LastTokenizeShareRecordId", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryDelegatorDelegationsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return out, nil } -func (m *QueryDelegatorDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.DelegatorAddr) > 0 { - i -= len(m.DelegatorAddr) - copy(dAtA[i:], m.DelegatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) - i-- - dAtA[i] = 0xa +func (c *queryClient) TotalTokenizeSharedAssets(ctx context.Context, in *QueryTotalTokenizeSharedAssetsRequest, opts ...grpc.CallOption) (*QueryTotalTokenizeSharedAssetsResponse, error) { + out := new(QueryTotalTokenizeSharedAssetsResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/TotalTokenizeSharedAssets", in, out, opts...) + if err != nil { + return nil, err } - return len(dAtA) - i, nil + return out, nil } -func (m *QueryDelegatorDelegationsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) TotalLiquidStaked(ctx context.Context, in *QueryTotalLiquidStaked, opts ...grpc.CallOption) (*QueryTotalLiquidStakedResponse, error) { + out := new(QueryTotalLiquidStakedResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/TotalLiquidStaked", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil + return out, nil } -func (m *QueryDelegatorDelegationsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) TokenizeShareLockInfo(ctx context.Context, in *QueryTokenizeShareLockInfo, opts ...grpc.CallOption) (*QueryTokenizeShareLockInfoResponse, error) { + out := new(QueryTokenizeShareLockInfoResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/TokenizeShareLockInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryDelegatorDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.DelegationResponses) > 0 { - for iNdEx := len(m.DelegationResponses) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.DelegationResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } +func (c *queryClient) HistoricalInfo(ctx context.Context, in *QueryHistoricalInfoRequest, opts ...grpc.CallOption) (*QueryHistoricalInfoResponse, error) { + out := new(QueryHistoricalInfoResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/HistoricalInfo", in, out, opts...) + if err != nil { + return nil, err } - return len(dAtA) - i, nil + return out, nil } -func (m *QueryDelegatorUnbondingDelegationsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) { + out := new(QueryPoolResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Pool", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil + return out, nil } -func (m *QueryDelegatorUnbondingDelegationsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryDelegatorUnbondingDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.DelegatorAddr) > 0 { - i -= len(m.DelegatorAddr) - copy(dAtA[i:], m.DelegatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil +// QueryServer is the server API for Query service. +type QueryServer interface { + // Validators queries all validators that match the given status. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + Validators(context.Context, *QueryValidatorsRequest) (*QueryValidatorsResponse, error) + // Validator queries validator info for given validator address. + Validator(context.Context, *QueryValidatorRequest) (*QueryValidatorResponse, error) + // ValidatorDelegations queries delegate info for given validator. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + ValidatorDelegations(context.Context, *QueryValidatorDelegationsRequest) (*QueryValidatorDelegationsResponse, error) + // ValidatorUnbondingDelegations queries unbonding delegations of a validator. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + ValidatorUnbondingDelegations(context.Context, *QueryValidatorUnbondingDelegationsRequest) (*QueryValidatorUnbondingDelegationsResponse, error) + // Delegation queries delegate info for given validator delegator pair. + Delegation(context.Context, *QueryDelegationRequest) (*QueryDelegationResponse, error) + // UnbondingDelegation queries unbonding info for given validator delegator + // pair. + UnbondingDelegation(context.Context, *QueryUnbondingDelegationRequest) (*QueryUnbondingDelegationResponse, error) + // DelegatorDelegations queries all delegations of a given delegator address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + DelegatorDelegations(context.Context, *QueryDelegatorDelegationsRequest) (*QueryDelegatorDelegationsResponse, error) + // DelegatorUnbondingDelegations queries all unbonding delegations of a given + // delegator address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + DelegatorUnbondingDelegations(context.Context, *QueryDelegatorUnbondingDelegationsRequest) (*QueryDelegatorUnbondingDelegationsResponse, error) + // Redelegations queries redelegations of given address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + Redelegations(context.Context, *QueryRedelegationsRequest) (*QueryRedelegationsResponse, error) + // DelegatorValidators queries all validators info for given delegator + // address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + DelegatorValidators(context.Context, *QueryDelegatorValidatorsRequest) (*QueryDelegatorValidatorsResponse, error) + // DelegatorValidator queries validator info for given delegator validator + // pair. + DelegatorValidator(context.Context, *QueryDelegatorValidatorRequest) (*QueryDelegatorValidatorResponse, error) + // Query for individual tokenize share record information by share by id + TokenizeShareRecordById(context.Context, *QueryTokenizeShareRecordByIdRequest) (*QueryTokenizeShareRecordByIdResponse, error) + // Query for individual tokenize share record information by share denom + TokenizeShareRecordByDenom(context.Context, *QueryTokenizeShareRecordByDenomRequest) (*QueryTokenizeShareRecordByDenomResponse, error) + // Query tokenize share records by address + TokenizeShareRecordsOwned(context.Context, *QueryTokenizeShareRecordsOwnedRequest) (*QueryTokenizeShareRecordsOwnedResponse, error) + // Query for all tokenize share records + AllTokenizeShareRecords(context.Context, *QueryAllTokenizeShareRecordsRequest) (*QueryAllTokenizeShareRecordsResponse, error) + // Query for last tokenize share record id + LastTokenizeShareRecordId(context.Context, *QueryLastTokenizeShareRecordIdRequest) (*QueryLastTokenizeShareRecordIdResponse, error) + // Query for total tokenized staked assets + TotalTokenizeSharedAssets(context.Context, *QueryTotalTokenizeSharedAssetsRequest) (*QueryTotalTokenizeSharedAssetsResponse, error) + // Query for total liquid staked (including tokenized shares or owned by an liquid staking provider) + TotalLiquidStaked(context.Context, *QueryTotalLiquidStaked) (*QueryTotalLiquidStakedResponse, error) + // Query tokenize share locks + TokenizeShareLockInfo(context.Context, *QueryTokenizeShareLockInfo) (*QueryTokenizeShareLockInfoResponse, error) + // HistoricalInfo queries the historical info for given height. + HistoricalInfo(context.Context, *QueryHistoricalInfoRequest) (*QueryHistoricalInfoResponse, error) + // Pool queries the pool info. + Pool(context.Context, *QueryPoolRequest) (*QueryPoolResponse, error) + // Parameters queries the staking parameters. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) } -func (m *QueryDelegatorUnbondingDelegationsResponse) 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 +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { } -func (m *QueryDelegatorUnbondingDelegationsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (*UnimplementedQueryServer) Validators(ctx context.Context, req *QueryValidatorsRequest) (*QueryValidatorsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Validators not implemented") } - -func (m *QueryDelegatorUnbondingDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.UnbondingResponses) > 0 { - for iNdEx := len(m.UnbondingResponses) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.UnbondingResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil +func (*UnimplementedQueryServer) Validator(ctx context.Context, req *QueryValidatorRequest) (*QueryValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Validator not implemented") } - -func (m *QueryRedelegationsRequest) 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 (*UnimplementedQueryServer) ValidatorDelegations(ctx context.Context, req *QueryValidatorDelegationsRequest) (*QueryValidatorDelegationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ValidatorDelegations not implemented") +} +func (*UnimplementedQueryServer) ValidatorUnbondingDelegations(ctx context.Context, req *QueryValidatorUnbondingDelegationsRequest) (*QueryValidatorUnbondingDelegationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ValidatorUnbondingDelegations not implemented") +} +func (*UnimplementedQueryServer) Delegation(ctx context.Context, req *QueryDelegationRequest) (*QueryDelegationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delegation not implemented") +} +func (*UnimplementedQueryServer) UnbondingDelegation(ctx context.Context, req *QueryUnbondingDelegationRequest) (*QueryUnbondingDelegationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UnbondingDelegation not implemented") +} +func (*UnimplementedQueryServer) DelegatorDelegations(ctx context.Context, req *QueryDelegatorDelegationsRequest) (*QueryDelegatorDelegationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DelegatorDelegations not implemented") +} +func (*UnimplementedQueryServer) DelegatorUnbondingDelegations(ctx context.Context, req *QueryDelegatorUnbondingDelegationsRequest) (*QueryDelegatorUnbondingDelegationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DelegatorUnbondingDelegations not implemented") +} +func (*UnimplementedQueryServer) Redelegations(ctx context.Context, req *QueryRedelegationsRequest) (*QueryRedelegationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Redelegations not implemented") +} +func (*UnimplementedQueryServer) DelegatorValidators(ctx context.Context, req *QueryDelegatorValidatorsRequest) (*QueryDelegatorValidatorsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DelegatorValidators not implemented") +} +func (*UnimplementedQueryServer) DelegatorValidator(ctx context.Context, req *QueryDelegatorValidatorRequest) (*QueryDelegatorValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DelegatorValidator not implemented") +} +func (*UnimplementedQueryServer) TokenizeShareRecordById(ctx context.Context, req *QueryTokenizeShareRecordByIdRequest) (*QueryTokenizeShareRecordByIdResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareRecordById not implemented") +} +func (*UnimplementedQueryServer) TokenizeShareRecordByDenom(ctx context.Context, req *QueryTokenizeShareRecordByDenomRequest) (*QueryTokenizeShareRecordByDenomResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareRecordByDenom not implemented") +} +func (*UnimplementedQueryServer) TokenizeShareRecordsOwned(ctx context.Context, req *QueryTokenizeShareRecordsOwnedRequest) (*QueryTokenizeShareRecordsOwnedResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareRecordsOwned not implemented") +} +func (*UnimplementedQueryServer) AllTokenizeShareRecords(ctx context.Context, req *QueryAllTokenizeShareRecordsRequest) (*QueryAllTokenizeShareRecordsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllTokenizeShareRecords not implemented") +} +func (*UnimplementedQueryServer) LastTokenizeShareRecordId(ctx context.Context, req *QueryLastTokenizeShareRecordIdRequest) (*QueryLastTokenizeShareRecordIdResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LastTokenizeShareRecordId not implemented") +} +func (*UnimplementedQueryServer) TotalTokenizeSharedAssets(ctx context.Context, req *QueryTotalTokenizeSharedAssetsRequest) (*QueryTotalTokenizeSharedAssetsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalTokenizeSharedAssets not implemented") +} +func (*UnimplementedQueryServer) TotalLiquidStaked(ctx context.Context, req *QueryTotalLiquidStaked) (*QueryTotalLiquidStakedResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalLiquidStaked not implemented") +} +func (*UnimplementedQueryServer) TokenizeShareLockInfo(ctx context.Context, req *QueryTokenizeShareLockInfo) (*QueryTokenizeShareLockInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareLockInfo not implemented") +} +func (*UnimplementedQueryServer) HistoricalInfo(ctx context.Context, req *QueryHistoricalInfoRequest) (*QueryHistoricalInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method HistoricalInfo not implemented") +} +func (*UnimplementedQueryServer) Pool(ctx context.Context, req *QueryPoolRequest) (*QueryPoolResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Pool not implemented") +} +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (m *QueryRedelegationsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) } -func (m *QueryRedelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 +func _Query_Validators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryValidatorsRequest) + if err := dec(in); err != nil { + return nil, err } - if len(m.DstValidatorAddr) > 0 { - i -= len(m.DstValidatorAddr) - copy(dAtA[i:], m.DstValidatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.DstValidatorAddr))) - i-- - dAtA[i] = 0x1a + if interceptor == nil { + return srv.(QueryServer).Validators(ctx, in) } - if len(m.SrcValidatorAddr) > 0 { - i -= len(m.SrcValidatorAddr) - copy(dAtA[i:], m.SrcValidatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.SrcValidatorAddr))) - i-- - dAtA[i] = 0x12 + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/Validators", } - if len(m.DelegatorAddr) > 0 { - i -= len(m.DelegatorAddr) - copy(dAtA[i:], m.DelegatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) - i-- - dAtA[i] = 0xa + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Validators(ctx, req.(*QueryValidatorsRequest)) } - return len(dAtA) - i, nil + return interceptor(ctx, in, info, handler) } -func (m *QueryRedelegationsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_Validator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryValidatorRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil + if interceptor == nil { + return srv.(QueryServer).Validator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/Validator", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Validator(ctx, req.(*QueryValidatorRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryRedelegationsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func _Query_ValidatorDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryValidatorDelegationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ValidatorDelegations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/ValidatorDelegations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ValidatorDelegations(ctx, req.(*QueryValidatorDelegationsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryRedelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 +func _Query_ValidatorUnbondingDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryValidatorUnbondingDelegationsRequest) + if err := dec(in); err != nil { + return nil, err } - if len(m.RedelegationResponses) > 0 { - for iNdEx := len(m.RedelegationResponses) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.RedelegationResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } + if interceptor == nil { + return srv.(QueryServer).ValidatorUnbondingDelegations(ctx, in) } - return len(dAtA) - i, nil + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/ValidatorUnbondingDelegations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ValidatorUnbondingDelegations(ctx, req.(*QueryValidatorUnbondingDelegationsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryDelegatorValidatorsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_Delegation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryDelegationRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryDelegatorValidatorsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryDelegatorValidatorsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 + if interceptor == nil { + return srv.(QueryServer).Delegation(ctx, in) } - if len(m.DelegatorAddr) > 0 { - i -= len(m.DelegatorAddr) - copy(dAtA[i:], m.DelegatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) - i-- - dAtA[i] = 0xa + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/Delegation", } - return len(dAtA) - i, nil + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Delegation(ctx, req.(*QueryDelegationRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryDelegatorValidatorsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_UnbondingDelegation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryUnbondingDelegationRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryDelegatorValidatorsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryDelegatorValidatorsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 + if interceptor == nil { + return srv.(QueryServer).UnbondingDelegation(ctx, in) } - if len(m.Validators) > 0 { - for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/UnbondingDelegation", } - return len(dAtA) - i, nil + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).UnbondingDelegation(ctx, req.(*QueryUnbondingDelegationRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryDelegatorValidatorRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_DelegatorDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryDelegatorDelegationsRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil + if interceptor == nil { + return srv.(QueryServer).DelegatorDelegations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorDelegations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).DelegatorDelegations(ctx, req.(*QueryDelegatorDelegationsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryDelegatorValidatorRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func _Query_DelegatorUnbondingDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryDelegatorUnbondingDelegationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).DelegatorUnbondingDelegations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).DelegatorUnbondingDelegations(ctx, req.(*QueryDelegatorUnbondingDelegationsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryDelegatorValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ValidatorAddr) > 0 { - i -= len(m.ValidatorAddr) - copy(dAtA[i:], m.ValidatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr))) - i-- - dAtA[i] = 0x12 +func _Query_Redelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryRedelegationsRequest) + if err := dec(in); err != nil { + return nil, err } - if len(m.DelegatorAddr) > 0 { - i -= len(m.DelegatorAddr) - copy(dAtA[i:], m.DelegatorAddr) - i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) - i-- - dAtA[i] = 0xa + if interceptor == nil { + return srv.(QueryServer).Redelegations(ctx, in) } - return len(dAtA) - i, nil + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/Redelegations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Redelegations(ctx, req.(*QueryRedelegationsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryDelegatorValidatorResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_DelegatorValidators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryDelegatorValidatorsRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil + if interceptor == nil { + return srv.(QueryServer).DelegatorValidators(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorValidators", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).DelegatorValidators(ctx, req.(*QueryDelegatorValidatorsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryDelegatorValidatorResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func _Query_DelegatorValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryDelegatorValidatorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).DelegatorValidator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorValidator", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).DelegatorValidator(ctx, req.(*QueryDelegatorValidatorRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryDelegatorValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) +func _Query_TokenizeShareRecordById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenizeShareRecordByIdRequest) + if err := dec(in); err != nil { + return nil, err } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil + if interceptor == nil { + return srv.(QueryServer).TokenizeShareRecordById(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/TokenizeShareRecordById", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenizeShareRecordById(ctx, req.(*QueryTokenizeShareRecordByIdRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryHistoricalInfoRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_TokenizeShareRecordByDenom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenizeShareRecordByDenomRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryHistoricalInfoRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryHistoricalInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Height != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.Height)) - i-- - dAtA[i] = 0x8 + if interceptor == nil { + return srv.(QueryServer).TokenizeShareRecordByDenom(ctx, in) } - return len(dAtA) - i, nil + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/TokenizeShareRecordByDenom", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenizeShareRecordByDenom(ctx, req.(*QueryTokenizeShareRecordByDenomRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryHistoricalInfoResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_TokenizeShareRecordsOwned_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenizeShareRecordsOwnedRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryHistoricalInfoResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryHistoricalInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Hist != nil { - { - size, err := m.Hist.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + if interceptor == nil { + return srv.(QueryServer).TokenizeShareRecordsOwned(ctx, in) } - return len(dAtA) - i, nil + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/TokenizeShareRecordsOwned", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenizeShareRecordsOwned(ctx, req.(*QueryTokenizeShareRecordsOwnedRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryPoolRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_AllTokenizeShareRecords_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllTokenizeShareRecordsRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryPoolRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil + if interceptor == nil { + return srv.(QueryServer).AllTokenizeShareRecords(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/AllTokenizeShareRecords", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AllTokenizeShareRecords(ctx, req.(*QueryAllTokenizeShareRecordsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryPoolResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_LastTokenizeShareRecordId_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryLastTokenizeShareRecordIdRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryPoolResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Pool.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if interceptor == nil { + return srv.(QueryServer).LastTokenizeShareRecordId(ctx, in) } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/LastTokenizeShareRecordId", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).LastTokenizeShareRecordId(ctx, req.(*QueryLastTokenizeShareRecordIdRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_TotalTokenizeSharedAssets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalTokenizeSharedAssetsRequest) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil + if interceptor == nil { + return srv.(QueryServer).TotalTokenizeSharedAssets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/TotalTokenizeSharedAssets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalTokenizeSharedAssets(ctx, req.(*QueryTotalTokenizeSharedAssetsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { +func _Query_TotalLiquidStaked_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalLiquidStaked) + if err := dec(in); err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if interceptor == nil { + return srv.(QueryServer).TotalLiquidStaked(ctx, in) } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/TotalLiquidStaked", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalLiquidStaked(ctx, req.(*QueryTotalLiquidStaked)) + } + return interceptor(ctx, in, info, handler) } -func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { - offset -= sovQuery(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ +func _Query_TokenizeShareLockInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenizeShareLockInfo) + if err := dec(in); err != nil { + return nil, err } - dAtA[offset] = uint8(v) - return base -} -func (m *QueryValidatorsRequest) Size() (n int) { - if m == nil { - return 0 + if interceptor == nil { + return srv.(QueryServer).TokenizeShareLockInfo(ctx, in) } - var l int - _ = l - l = len(m.Status) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/TokenizeShareLockInfo", } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenizeShareLockInfo(ctx, req.(*QueryTokenizeShareLockInfo)) } - return n + return interceptor(ctx, in, info, handler) } -func (m *QueryValidatorsResponse) Size() (n int) { - if m == nil { - return 0 +func _Query_HistoricalInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryHistoricalInfoRequest) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - if len(m.Validators) > 0 { - for _, e := range m.Validators { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + if interceptor == nil { + return srv.(QueryServer).HistoricalInfo(ctx, in) } - return n -} - -func (m *QueryValidatorRequest) Size() (n int) { - if m == nil { - return 0 + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/HistoricalInfo", } - var l int - _ = l - l = len(m.ValidatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).HistoricalInfo(ctx, req.(*QueryHistoricalInfoRequest)) } - return n + return interceptor(ctx, in, info, handler) } -func (m *QueryValidatorResponse) Size() (n int) { - if m == nil { - return 0 +func _Query_Pool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPoolRequest) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - l = m.Validator.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryValidatorDelegationsRequest) Size() (n int) { - if m == nil { - return 0 + if interceptor == nil { + return srv.(QueryServer).Pool(ctx, in) } - var l int - _ = l - l = len(m.ValidatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/Pool", } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Pool(ctx, req.(*QueryPoolRequest)) } - return n + return interceptor(ctx, in, info, handler) } -func (m *QueryValidatorDelegationsResponse) Size() (n int) { - if m == nil { - return 0 +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - if len(m.DelegationResponses) > 0 { - for _, e := range m.DelegationResponses { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Query/Params", } - return n + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *QueryValidatorUnbondingDelegationsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ValidatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "cosmos.staking.v1beta1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Validators", + Handler: _Query_Validators_Handler, + }, + { + MethodName: "Validator", + Handler: _Query_Validator_Handler, + }, + { + MethodName: "ValidatorDelegations", + Handler: _Query_ValidatorDelegations_Handler, + }, + { + MethodName: "ValidatorUnbondingDelegations", + Handler: _Query_ValidatorUnbondingDelegations_Handler, + }, + { + MethodName: "Delegation", + Handler: _Query_Delegation_Handler, + }, + { + MethodName: "UnbondingDelegation", + Handler: _Query_UnbondingDelegation_Handler, + }, + { + MethodName: "DelegatorDelegations", + Handler: _Query_DelegatorDelegations_Handler, + }, + { + MethodName: "DelegatorUnbondingDelegations", + Handler: _Query_DelegatorUnbondingDelegations_Handler, + }, + { + MethodName: "Redelegations", + Handler: _Query_Redelegations_Handler, + }, + { + MethodName: "DelegatorValidators", + Handler: _Query_DelegatorValidators_Handler, + }, + { + MethodName: "DelegatorValidator", + Handler: _Query_DelegatorValidator_Handler, + }, + { + MethodName: "TokenizeShareRecordById", + Handler: _Query_TokenizeShareRecordById_Handler, + }, + { + MethodName: "TokenizeShareRecordByDenom", + Handler: _Query_TokenizeShareRecordByDenom_Handler, + }, + { + MethodName: "TokenizeShareRecordsOwned", + Handler: _Query_TokenizeShareRecordsOwned_Handler, + }, + { + MethodName: "AllTokenizeShareRecords", + Handler: _Query_AllTokenizeShareRecords_Handler, + }, + { + MethodName: "LastTokenizeShareRecordId", + Handler: _Query_LastTokenizeShareRecordId_Handler, + }, + { + MethodName: "TotalTokenizeSharedAssets", + Handler: _Query_TotalTokenizeSharedAssets_Handler, + }, + { + MethodName: "TotalLiquidStaked", + Handler: _Query_TotalLiquidStaked_Handler, + }, + { + MethodName: "TokenizeShareLockInfo", + Handler: _Query_TokenizeShareLockInfo_Handler, + }, + { + MethodName: "HistoricalInfo", + Handler: _Query_HistoricalInfo_Handler, + }, + { + MethodName: "Pool", + Handler: _Query_Pool_Handler, + }, + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "cosmos/staking/v1beta1/query.proto", } -func (m *QueryValidatorUnbondingDelegationsResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QueryValidatorsRequest) 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 *QueryValidatorsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryValidatorsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.UnbondingResponses) > 0 { - for _, e := range m.UnbondingResponses { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + if len(m.Status) > 0 { + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryDelegationRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.DelegatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.ValidatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) +func (m *QueryValidatorsResponse) 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 n + return dAtA[:n], nil } -func (m *QueryDelegationResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.DelegationResponse != nil { - l = m.DelegationResponse.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n +func (m *QueryValidatorsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryUnbondingDelegationRequest) Size() (n int) { - if m == nil { - return 0 - } +func (m *QueryValidatorsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.DelegatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - l = len(m.ValidatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + if len(m.Validators) > 0 { + for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } - return n + return len(dAtA) - i, nil } -func (m *QueryUnbondingDelegationResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QueryValidatorRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - var l int - _ = l - l = m.Unbond.Size() - n += 1 + l + sovQuery(uint64(l)) - return n + return dAtA[:n], nil } -func (m *QueryDelegatorDelegationsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.DelegatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n +func (m *QueryValidatorRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryDelegatorDelegationsResponse) Size() (n int) { - if m == nil { - return 0 - } +func (m *QueryValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.DelegationResponses) > 0 { - for _, e := range m.DelegationResponses { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + if len(m.ValidatorAddr) > 0 { + i -= len(m.ValidatorAddr) + copy(dAtA[i:], m.ValidatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr))) + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryDelegatorUnbondingDelegationsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.DelegatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) +func (m *QueryValidatorResponse) 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 n + return dAtA[:n], nil } -func (m *QueryDelegatorUnbondingDelegationsResponse) Size() (n int) { - if m == nil { - return 0 - } +func (m *QueryValidatorResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.UnbondingResponses) > 0 { - for _, e := range m.UnbondingResponses { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) + { + size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *QueryRedelegationsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.DelegatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.SrcValidatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.DstValidatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) +func (m *QueryValidatorDelegationsRequest) 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 n + return dAtA[:n], nil } -func (m *QueryRedelegationsResponse) Size() (n int) { - if m == nil { - return 0 - } +func (m *QueryValidatorDelegationsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryValidatorDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.RedelegationResponses) > 0 { - for _, e := range m.RedelegationResponses { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + if len(m.ValidatorAddr) > 0 { + i -= len(m.ValidatorAddr) + copy(dAtA[i:], m.ValidatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr))) + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryDelegatorValidatorsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.DelegatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) +func (m *QueryValidatorDelegationsResponse) 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 n + return dAtA[:n], nil } -func (m *QueryDelegatorValidatorsResponse) Size() (n int) { - if m == nil { - return 0 - } +func (m *QueryValidatorDelegationsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryValidatorDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Validators) > 0 { - for _, e := range m.Validators { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.DelegationResponses) > 0 { + for iNdEx := len(m.DelegationResponses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DelegationResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } } + return len(dAtA) - i, nil +} + +func (m *QueryValidatorUnbondingDelegationsRequest) 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 *QueryValidatorUnbondingDelegationsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryValidatorUnbondingDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - return n + if len(m.ValidatorAddr) > 0 { + i -= len(m.ValidatorAddr) + copy(dAtA[i:], m.ValidatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } -func (m *QueryDelegatorValidatorRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QueryValidatorUnbondingDelegationsResponse) 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 *QueryValidatorUnbondingDelegationsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryValidatorUnbondingDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.DelegatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - l = len(m.ValidatorAddr) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + if len(m.UnbondingResponses) > 0 { + for iNdEx := len(m.UnbondingResponses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.UnbondingResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } - return n + return len(dAtA) - i, nil } -func (m *QueryDelegatorValidatorResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QueryDelegationRequest) 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 *QueryDelegationRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDelegationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.Validator.Size() - n += 1 + l + sovQuery(uint64(l)) - return n + if len(m.ValidatorAddr) > 0 { + i -= len(m.ValidatorAddr) + copy(dAtA[i:], m.ValidatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr))) + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddr) > 0 { + i -= len(m.DelegatorAddr) + copy(dAtA[i:], m.DelegatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } -func (m *QueryHistoricalInfoRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QueryDelegationResponse) 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 *QueryDelegationResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDelegationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.Height != 0 { - n += 1 + sovQuery(uint64(m.Height)) + if m.DelegationResponse != nil { + { + size, err := m.DelegationResponse.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *QueryHistoricalInfoResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QueryUnbondingDelegationRequest) 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 *QueryUnbondingDelegationRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryUnbondingDelegationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.Hist != nil { - l = m.Hist.Size() - n += 1 + l + sovQuery(uint64(l)) + if len(m.ValidatorAddr) > 0 { + i -= len(m.ValidatorAddr) + copy(dAtA[i:], m.ValidatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr))) + i-- + dAtA[i] = 0x12 } - return n + if len(m.DelegatorAddr) > 0 { + i -= len(m.DelegatorAddr) + copy(dAtA[i:], m.DelegatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } -func (m *QueryPoolRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QueryUnbondingDelegationResponse) 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 *QueryUnbondingDelegationResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryUnbondingDelegationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Unbond.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryDelegatorDelegationsRequest) 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 *QueryDelegatorDelegationsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDelegatorDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddr) > 0 { + i -= len(m.DelegatorAddr) + copy(dAtA[i:], m.DelegatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDelegatorDelegationsResponse) 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 *QueryDelegatorDelegationsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDelegatorDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.DelegationResponses) > 0 { + for iNdEx := len(m.DelegationResponses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DelegationResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryDelegatorUnbondingDelegationsRequest) 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 *QueryDelegatorUnbondingDelegationsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDelegatorUnbondingDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddr) > 0 { + i -= len(m.DelegatorAddr) + copy(dAtA[i:], m.DelegatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDelegatorUnbondingDelegationsResponse) 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 *QueryDelegatorUnbondingDelegationsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDelegatorUnbondingDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.UnbondingResponses) > 0 { + for iNdEx := len(m.UnbondingResponses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.UnbondingResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryRedelegationsRequest) 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 *QueryRedelegationsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryRedelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if len(m.DstValidatorAddr) > 0 { + i -= len(m.DstValidatorAddr) + copy(dAtA[i:], m.DstValidatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.DstValidatorAddr))) + i-- + dAtA[i] = 0x1a + } + if len(m.SrcValidatorAddr) > 0 { + i -= len(m.SrcValidatorAddr) + copy(dAtA[i:], m.SrcValidatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SrcValidatorAddr))) + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddr) > 0 { + i -= len(m.DelegatorAddr) + copy(dAtA[i:], m.DelegatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryRedelegationsResponse) 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 *QueryRedelegationsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryRedelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.RedelegationResponses) > 0 { + for iNdEx := len(m.RedelegationResponses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.RedelegationResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryDelegatorValidatorsRequest) 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 *QueryDelegatorValidatorsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDelegatorValidatorsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddr) > 0 { + i -= len(m.DelegatorAddr) + copy(dAtA[i:], m.DelegatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDelegatorValidatorsResponse) 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 *QueryDelegatorValidatorsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDelegatorValidatorsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Validators) > 0 { + for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryDelegatorValidatorRequest) 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 *QueryDelegatorValidatorRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDelegatorValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ValidatorAddr) > 0 { + i -= len(m.ValidatorAddr) + copy(dAtA[i:], m.ValidatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr))) + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddr) > 0 { + i -= len(m.DelegatorAddr) + copy(dAtA[i:], m.DelegatorAddr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDelegatorValidatorResponse) 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 *QueryDelegatorValidatorResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDelegatorValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryHistoricalInfoRequest) 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 *QueryHistoricalInfoRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryHistoricalInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Height != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Height)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryHistoricalInfoResponse) 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 *QueryHistoricalInfoResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryHistoricalInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Hist != nil { + { + size, err := m.Hist.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryPoolRequest) 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 *QueryPoolRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryPoolResponse) 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 *QueryPoolResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Pool.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryParamsRequest) 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 *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) 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 *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryTokenizeShareRecordByIdRequest) 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 *QueryTokenizeShareRecordByIdRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenizeShareRecordByIdRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Id != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Id)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryTokenizeShareRecordByIdResponse) 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 *QueryTokenizeShareRecordByIdResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenizeShareRecordByIdResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Record.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryTokenizeShareRecordByDenomRequest) 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 *QueryTokenizeShareRecordByDenomRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenizeShareRecordByDenomRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryTokenizeShareRecordByDenomResponse) 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 *QueryTokenizeShareRecordByDenomResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenizeShareRecordByDenomResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Record.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryTokenizeShareRecordsOwnedRequest) 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 *QueryTokenizeShareRecordsOwnedRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenizeShareRecordsOwnedRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryTokenizeShareRecordsOwnedResponse) 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 *QueryTokenizeShareRecordsOwnedResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenizeShareRecordsOwnedResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Records) > 0 { + for iNdEx := len(m.Records) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Records[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryAllTokenizeShareRecordsRequest) 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 *QueryAllTokenizeShareRecordsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllTokenizeShareRecordsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAllTokenizeShareRecordsResponse) 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 *QueryAllTokenizeShareRecordsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllTokenizeShareRecordsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Records) > 0 { + for iNdEx := len(m.Records) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Records[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryLastTokenizeShareRecordIdRequest) 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 *QueryLastTokenizeShareRecordIdRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryLastTokenizeShareRecordIdRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryLastTokenizeShareRecordIdResponse) 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 *QueryLastTokenizeShareRecordIdResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryLastTokenizeShareRecordIdResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Id != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Id)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryTotalTokenizeSharedAssetsRequest) 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 *QueryTotalTokenizeSharedAssetsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalTokenizeSharedAssetsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryTotalTokenizeSharedAssetsResponse) 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 *QueryTotalTokenizeSharedAssetsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalTokenizeSharedAssetsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Value.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryTotalLiquidStaked) 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 *QueryTotalLiquidStaked) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalLiquidStaked) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryTotalLiquidStakedResponse) 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 *QueryTotalLiquidStakedResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalLiquidStakedResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Tokens) > 0 { + i -= len(m.Tokens) + copy(dAtA[i:], m.Tokens) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Tokens))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryTokenizeShareLockInfo) 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 *QueryTokenizeShareLockInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenizeShareLockInfo) 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 = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryTokenizeShareLockInfoResponse) 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 *QueryTokenizeShareLockInfoResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenizeShareLockInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ExpirationTime) > 0 { + i -= len(m.ExpirationTime) + copy(dAtA[i:], m.ExpirationTime) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ExpirationTime))) + i-- + dAtA[i] = 0x12 + } + if len(m.Status) > 0 { + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryValidatorsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Status) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryValidatorsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Validators) > 0 { + for _, e := range m.Validators { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryValidatorRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ValidatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryValidatorResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Validator.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryValidatorDelegationsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ValidatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryValidatorDelegationsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.DelegationResponses) > 0 { + for _, e := range m.DelegationResponses { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryValidatorUnbondingDelegationsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ValidatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryValidatorUnbondingDelegationsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.UnbondingResponses) > 0 { + for _, e := range m.UnbondingResponses { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDelegationRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ValidatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDelegationResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.DelegationResponse != nil { + l = m.DelegationResponse.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryUnbondingDelegationRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ValidatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryUnbondingDelegationResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Unbond.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryDelegatorDelegationsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDelegatorDelegationsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.DelegationResponses) > 0 { + for _, e := range m.DelegationResponses { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDelegatorUnbondingDelegationsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDelegatorUnbondingDelegationsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.UnbondingResponses) > 0 { + for _, e := range m.UnbondingResponses { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryRedelegationsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.SrcValidatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.DstValidatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryRedelegationsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.RedelegationResponses) > 0 { + for _, e := range m.RedelegationResponses { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDelegatorValidatorsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDelegatorValidatorsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Validators) > 0 { + for _, e := range m.Validators { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDelegatorValidatorRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ValidatorAddr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDelegatorValidatorResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Validator.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryHistoricalInfoRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Height != 0 { + n += 1 + sovQuery(uint64(m.Height)) + } + return n +} + +func (m *QueryHistoricalInfoResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Hist != nil { + l = m.Hist.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryPoolRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryPoolResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Pool.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryTokenizeShareRecordByIdRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Id != 0 { + n += 1 + sovQuery(uint64(m.Id)) + } + return n +} + +func (m *QueryTokenizeShareRecordByIdResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Record.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryTokenizeShareRecordByDenomRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryTokenizeShareRecordByDenomResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Record.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryTokenizeShareRecordsOwnedRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryTokenizeShareRecordsOwnedResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Records) > 0 { + for _, e := range m.Records { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryAllTokenizeShareRecordsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllTokenizeShareRecordsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Records) > 0 { + for _, e := range m.Records { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryLastTokenizeShareRecordIdRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryLastTokenizeShareRecordIdResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Id != 0 { + n += 1 + sovQuery(uint64(m.Id)) + } + return n +} + +func (m *QueryTotalTokenizeSharedAssetsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryTotalTokenizeSharedAssetsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Value.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryTotalLiquidStaked) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryTotalLiquidStakedResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Tokens) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryTokenizeShareLockInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryTokenizeShareLockInfoResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Status) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ExpirationTime) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryValidatorsRequest) 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 ErrIntOverflowQuery + } + 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: QueryValidatorsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryValidatorsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryValidatorsResponse) 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 ErrIntOverflowQuery + } + 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: QueryValidatorsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryValidatorsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validators = append(m.Validators, Validator{}) + if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryValidatorRequest) 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 ErrIntOverflowQuery + } + 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: QueryValidatorRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorAddr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryValidatorResponse) 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 ErrIntOverflowQuery + } + 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: QueryValidatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryValidatorDelegationsRequest) 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 ErrIntOverflowQuery + } + 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: QueryValidatorDelegationsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryValidatorDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorAddr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryValidatorDelegationsResponse) 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 ErrIntOverflowQuery + } + 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: QueryValidatorDelegationsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryValidatorDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegationResponses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DelegationResponses = append(m.DelegationResponses, DelegationResponse{}) + if err := m.DelegationResponses[len(m.DelegationResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryValidatorUnbondingDelegationsRequest) 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 ErrIntOverflowQuery + } + 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: QueryValidatorUnbondingDelegationsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorAddr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryValidatorUnbondingDelegationsResponse) 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 ErrIntOverflowQuery + } + 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: QueryValidatorUnbondingDelegationsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingResponses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UnbondingResponses = append(m.UnbondingResponses, UnbondingDelegation{}) + if err := m.UnbondingResponses[len(m.UnbondingResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryDelegationRequest) 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 ErrIntOverflowQuery + } + 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: QueryDelegationRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDelegationRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DelegatorAddr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorAddr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } - var l int - _ = l - return n -} -func (m *QueryPoolResponse) Size() (n int) { - if m == nil { - return 0 + if iNdEx > l { + return io.ErrUnexpectedEOF } - var l int - _ = l - l = m.Pool.Size() - n += 1 + l + sovQuery(uint64(l)) - return n + return nil } - -func (m *QueryParamsRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QueryDelegationResponse) 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 ErrIntOverflowQuery + } + 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: QueryDelegationResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDelegationResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegationResponse", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DelegationResponse == nil { + m.DelegationResponse = &DelegationResponse{} + } + if err := m.DelegationResponse.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } - var l int - _ = l - return n -} -func (m *QueryParamsResponse) Size() (n int) { - if m == nil { - return 0 + if iNdEx > l { + return io.ErrUnexpectedEOF } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + return nil } -func (m *QueryValidatorsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryUnbondingDelegationRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3718,15 +6598,15 @@ func (m *QueryValidatorsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryValidatorsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryUnbondingDelegationRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryValidatorsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryUnbondingDelegationRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -3754,13 +6634,13 @@ func (m *QueryValidatorsRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Status = string(dAtA[iNdEx:postIndex]) + m.DelegatorAddr = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -3770,27 +6650,23 @@ func (m *QueryValidatorsRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ValidatorAddr = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -3813,7 +6689,7 @@ func (m *QueryValidatorsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryValidatorsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryUnbondingDelegationResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3836,15 +6712,15 @@ func (m *QueryValidatorsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryValidatorsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryUnbondingDelegationResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryValidatorsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryUnbondingDelegationResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Unbond", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3871,10 +6747,91 @@ func (m *QueryValidatorsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Validators = append(m.Validators, Validator{}) - if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Unbond.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { return err } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryDelegatorDelegationsRequest) 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 ErrIntOverflowQuery + } + 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: QueryDelegatorDelegationsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDelegatorDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DelegatorAddr = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { @@ -3906,7 +6863,7 @@ func (m *QueryValidatorsResponse) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Pagination == nil { - m.Pagination = &query.PageResponse{} + m.Pagination = &query.PageRequest{} } if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -3933,7 +6890,7 @@ func (m *QueryValidatorsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryValidatorRequest) Unmarshal(dAtA []byte) error { +func (m *QueryDelegatorDelegationsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3956,17 +6913,17 @@ func (m *QueryValidatorRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryValidatorRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryDelegatorDelegationsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryDelegatorDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DelegationResponses", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -3976,77 +6933,29 @@ func (m *QueryValidatorRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.ValidatorAddr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { + m.DelegationResponses = append(m.DelegationResponses, DelegationResponse{}) + if err := m.DelegationResponses[len(m.DelegationResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryValidatorResponse) 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 ErrIntOverflowQuery - } - 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: QueryValidatorResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4073,7 +6982,10 @@ func (m *QueryValidatorResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4098,7 +7010,7 @@ func (m *QueryValidatorResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryValidatorDelegationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryDelegatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4121,15 +7033,15 @@ func (m *QueryValidatorDelegationsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryValidatorDelegationsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryValidatorDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -4157,7 +7069,7 @@ func (m *QueryValidatorDelegationsRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ValidatorAddr = string(dAtA[iNdEx:postIndex]) + m.DelegatorAddr = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { @@ -4216,7 +7128,7 @@ func (m *QueryValidatorDelegationsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryValidatorDelegationsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryDelegatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4239,15 +7151,15 @@ func (m *QueryValidatorDelegationsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryValidatorDelegationsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryValidatorDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegationResponses", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingResponses", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4274,8 +7186,8 @@ func (m *QueryValidatorDelegationsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.DelegationResponses = append(m.DelegationResponses, DelegationResponse{}) - if err := m.DelegationResponses[len(m.DelegationResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.UnbondingResponses = append(m.UnbondingResponses, UnbondingDelegation{}) + if err := m.UnbondingResponses[len(m.UnbondingResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4336,7 +7248,7 @@ func (m *QueryValidatorDelegationsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryValidatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryRedelegationsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4359,15 +7271,15 @@ func (m *QueryValidatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryRedelegationsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryRedelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -4395,9 +7307,73 @@ func (m *QueryValidatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error if postIndex > l { return io.ErrUnexpectedEOF } - m.ValidatorAddr = string(dAtA[iNdEx:postIndex]) + m.DelegatorAddr = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SrcValidatorAddr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SrcValidatorAddr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DstValidatorAddr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DstValidatorAddr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } @@ -4454,7 +7430,7 @@ func (m *QueryValidatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error } return nil } -func (m *QueryValidatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryRedelegationsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4477,15 +7453,15 @@ func (m *QueryValidatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryRedelegationsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryRedelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UnbondingResponses", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RedelegationResponses", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4512,8 +7488,8 @@ func (m *QueryValidatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro if postIndex > l { return io.ErrUnexpectedEOF } - m.UnbondingResponses = append(m.UnbondingResponses, UnbondingDelegation{}) - if err := m.UnbondingResponses[len(m.UnbondingResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.RedelegationResponses = append(m.RedelegationResponses, RedelegationResponse{}) + if err := m.RedelegationResponses[len(m.RedelegationResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4574,7 +7550,7 @@ func (m *QueryValidatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro } return nil } -func (m *QueryDelegationRequest) Unmarshal(dAtA []byte) error { +func (m *QueryDelegatorValidatorsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4597,10 +7573,10 @@ func (m *QueryDelegationRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryDelegationRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryDelegatorValidatorsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryDelegationRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryDelegatorValidatorsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4637,9 +7613,9 @@ func (m *QueryDelegationRequest) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -4649,23 +7625,27 @@ func (m *QueryDelegationRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.ValidatorAddr = string(dAtA[iNdEx:postIndex]) + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -4688,7 +7668,7 @@ func (m *QueryDelegationRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryDelegationResponse) Unmarshal(dAtA []byte) error { +func (m *QueryDelegatorValidatorsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4711,15 +7691,49 @@ func (m *QueryDelegationResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryDelegationResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryDelegatorValidatorsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryDelegationResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryDelegatorValidatorsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegationResponse", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validators = append(m.Validators, Validator{}) + if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4746,10 +7760,10 @@ func (m *QueryDelegationResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.DelegationResponse == nil { - m.DelegationResponse = &DelegationResponse{} + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} } - if err := m.DelegationResponse.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4774,7 +7788,7 @@ func (m *QueryDelegationResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryUnbondingDelegationRequest) Unmarshal(dAtA []byte) error { +func (m *QueryDelegatorValidatorRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4797,10 +7811,10 @@ func (m *QueryUnbondingDelegationRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryUnbondingDelegationRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryDelegatorValidatorRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryUnbondingDelegationRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryDelegatorValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4888,7 +7902,7 @@ func (m *QueryUnbondingDelegationRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryUnbondingDelegationResponse) Unmarshal(dAtA []byte) error { +func (m *QueryDelegatorValidatorResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4911,15 +7925,15 @@ func (m *QueryUnbondingDelegationResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryUnbondingDelegationResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryDelegatorValidatorResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryUnbondingDelegationResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryDelegatorValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Unbond", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4946,7 +7960,7 @@ func (m *QueryUnbondingDelegationResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Unbond.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4971,7 +7985,7 @@ func (m *QueryUnbondingDelegationResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryDelegatorDelegationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryHistoricalInfoRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4994,17 +8008,17 @@ func (m *QueryDelegatorDelegationsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryDelegatorDelegationsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryHistoricalInfoRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryDelegatorDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryHistoricalInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) } - var stringLen uint64 + m.Height = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5014,27 +8028,64 @@ func (m *QueryDelegatorDelegationsRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.Height |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err } - postIndex := iNdEx + intStringLen - if postIndex < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.DelegatorAddr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryHistoricalInfoResponse) 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 ErrIntOverflowQuery + } + 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: QueryHistoricalInfoResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryHistoricalInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Hist", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5061,10 +8112,10 @@ func (m *QueryDelegatorDelegationsRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} + if m.Hist == nil { + m.Hist = &HistoricalInfo{} } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Hist.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5089,7 +8140,7 @@ func (m *QueryDelegatorDelegationsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryDelegatorDelegationsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5112,49 +8163,65 @@ func (m *QueryDelegatorDelegationsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryDelegatorDelegationsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPoolRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryDelegatorDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegationResponses", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err } - if msglen < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF } - if postIndex > l { + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPoolResponse) 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 ErrIntOverflowQuery + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.DelegationResponses = append(m.DelegationResponses, DelegationResponse{}) - if err := m.DelegationResponses[len(m.DelegationResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break } - iNdEx = postIndex - case 2: + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryPoolResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pool", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5181,10 +8248,7 @@ func (m *QueryDelegatorDelegationsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Pool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5209,7 +8273,7 @@ func (m *QueryDelegatorDelegationsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryDelegatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5232,47 +8296,65 @@ func (m *QueryDelegatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err } - intStringLen := int(stringLen) - if intStringLen < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF } - if postIndex > l { + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) 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 ErrIntOverflowQuery + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.DelegatorAddr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: + 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: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5299,10 +8381,7 @@ func (m *QueryDelegatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5327,7 +8406,7 @@ func (m *QueryDelegatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error } return nil } -func (m *QueryDelegatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryTokenizeShareRecordByIdRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5350,17 +8429,17 @@ func (m *QueryDelegatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryTokenizeShareRecordByIdRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryTokenizeShareRecordByIdRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UnbondingResponses", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) } - var msglen int + m.Id = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5370,29 +8449,64 @@ func (m *QueryDelegatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.Id |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthQuery + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err } - postIndex := iNdEx + msglen - if postIndex < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.UnbondingResponses = append(m.UnbondingResponses, UnbondingDelegation{}) - if err := m.UnbondingResponses[len(m.UnbondingResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTokenizeShareRecordByIdResponse) 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 ErrIntOverflowQuery } - iNdEx = postIndex - case 2: + 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: QueryTokenizeShareRecordByIdResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTokenizeShareRecordByIdResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Record", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5419,10 +8533,7 @@ func (m *QueryDelegatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Record.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5447,7 +8558,7 @@ func (m *QueryDelegatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro } return nil } -func (m *QueryRedelegationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryTokenizeShareRecordByDenomRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5470,15 +8581,15 @@ func (m *QueryRedelegationsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryRedelegationsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryTokenizeShareRecordByDenomRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryRedelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryTokenizeShareRecordByDenomRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5506,75 +8617,61 @@ func (m *QueryRedelegationsRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.DelegatorAddr = string(dAtA[iNdEx:postIndex]) + m.Denom = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SrcValidatorAddr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - 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 ErrInvalidLengthQuery + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err } - postIndex := iNdEx + intStringLen - if postIndex < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.SrcValidatorAddr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DstValidatorAddr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - 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 ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTokenizeShareRecordByDenomResponse) 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 ErrIntOverflowQuery } - if postIndex > l { + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.DstValidatorAddr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: + 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: QueryTokenizeShareRecordByDenomResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTokenizeShareRecordByDenomResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Record", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5601,10 +8698,7 @@ func (m *QueryRedelegationsRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Record.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5629,7 +8723,7 @@ func (m *QueryRedelegationsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryRedelegationsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryTokenizeShareRecordsOwnedRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5652,17 +8746,17 @@ func (m *QueryRedelegationsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryRedelegationsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryTokenizeShareRecordsOwnedRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryRedelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryTokenizeShareRecordsOwnedRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RedelegationResponses", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -5672,29 +8766,77 @@ func (m *QueryRedelegationsResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.RedelegationResponses = append(m.RedelegationResponses, RedelegationResponse{}) - if err := m.RedelegationResponses[len(m.RedelegationResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { return err } - iNdEx = postIndex - case 2: + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTokenizeShareRecordsOwnedResponse) 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 ErrIntOverflowQuery + } + 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: QueryTokenizeShareRecordsOwnedResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTokenizeShareRecordsOwnedResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Records", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5721,10 +8863,8 @@ func (m *QueryRedelegationsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Records = append(m.Records, TokenizeShareRecord{}) + if err := m.Records[len(m.Records)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5749,7 +8889,7 @@ func (m *QueryRedelegationsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryDelegatorValidatorsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllTokenizeShareRecordsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5772,45 +8912,13 @@ func (m *QueryDelegatorValidatorsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryDelegatorValidatorsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllTokenizeShareRecordsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryDelegatorValidatorsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllTokenizeShareRecordsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - 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 ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DelegatorAddr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } @@ -5867,7 +8975,7 @@ func (m *QueryDelegatorValidatorsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryDelegatorValidatorsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllTokenizeShareRecordsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5890,15 +8998,15 @@ func (m *QueryDelegatorValidatorsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryDelegatorValidatorsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllTokenizeShareRecordsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryDelegatorValidatorsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllTokenizeShareRecordsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Records", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5925,8 +9033,8 @@ func (m *QueryDelegatorValidatorsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Validators = append(m.Validators, Validator{}) - if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Records = append(m.Records, TokenizeShareRecord{}) + if err := m.Records[len(m.Records)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5987,7 +9095,7 @@ func (m *QueryDelegatorValidatorsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryDelegatorValidatorRequest) Unmarshal(dAtA []byte) error { +func (m *QueryLastTokenizeShareRecordIdRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6010,76 +9118,12 @@ func (m *QueryDelegatorValidatorRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryDelegatorValidatorRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryLastTokenizeShareRecordIdRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryDelegatorValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryLastTokenizeShareRecordIdRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - 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 ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DelegatorAddr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - 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 ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ValidatorAddr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -6101,7 +9145,7 @@ func (m *QueryDelegatorValidatorRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryDelegatorValidatorResponse) Unmarshal(dAtA []byte) error { +func (m *QueryLastTokenizeShareRecordIdResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6124,17 +9168,17 @@ func (m *QueryDelegatorValidatorResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryDelegatorValidatorResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryLastTokenizeShareRecordIdResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryDelegatorValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryLastTokenizeShareRecordIdResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) } - var msglen int + m.Id = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -6144,25 +9188,11 @@ func (m *QueryDelegatorValidatorResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.Id |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -6184,7 +9214,7 @@ func (m *QueryDelegatorValidatorResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryHistoricalInfoRequest) Unmarshal(dAtA []byte) error { +func (m *QueryTotalTokenizeSharedAssetsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6207,31 +9237,12 @@ func (m *QueryHistoricalInfoRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryHistoricalInfoRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryTotalTokenizeSharedAssetsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryHistoricalInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryTotalTokenizeSharedAssetsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) - } - m.Height = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Height |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -6253,7 +9264,7 @@ func (m *QueryHistoricalInfoRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryHistoricalInfoResponse) Unmarshal(dAtA []byte) error { +func (m *QueryTotalTokenizeSharedAssetsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6276,15 +9287,15 @@ func (m *QueryHistoricalInfoResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryHistoricalInfoResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryTotalTokenizeSharedAssetsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryHistoricalInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryTotalTokenizeSharedAssetsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Hist", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -6311,10 +9322,7 @@ func (m *QueryHistoricalInfoResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Hist == nil { - m.Hist = &HistoricalInfo{} - } - if err := m.Hist.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -6339,7 +9347,7 @@ func (m *QueryHistoricalInfoResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error { +func (m *QueryTotalLiquidStaked) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6362,10 +9370,10 @@ func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPoolRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryTotalLiquidStaked: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryTotalLiquidStaked: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -6389,7 +9397,7 @@ func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error { +func (m *QueryTotalLiquidStakedResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6412,17 +9420,17 @@ func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPoolResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryTotalLiquidStakedResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryTotalLiquidStakedResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pool", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Tokens", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -6432,24 +9440,23 @@ func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Pool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Tokens = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -6472,7 +9479,7 @@ func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryTokenizeShareLockInfo) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6495,12 +9502,44 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryTokenizeShareLockInfo: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryTokenizeShareLockInfo: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + 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 ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -6522,7 +9561,7 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryTokenizeShareLockInfoResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6545,17 +9584,17 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryTokenizeShareLockInfoResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryTokenizeShareLockInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -6565,24 +9604,55 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.Status = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpirationTime", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF } + m.ExpirationTime = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/x/staking/types/query.pb.gw.go b/x/staking/types/query.pb.gw.go index 7ed30880ddff..c51a7eeb9a6d 100644 --- a/x/staking/types/query.pb.gw.go +++ b/x/staking/types/query.pb.gw.go @@ -783,6 +783,312 @@ func local_request_Query_DelegatorValidator_0(ctx context.Context, marshaler run } +func request_Query_TokenizeShareRecordById_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenizeShareRecordByIdRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.TokenizeShareRecordById(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TokenizeShareRecordById_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenizeShareRecordByIdRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.TokenizeShareRecordById(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_TokenizeShareRecordByDenom_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenizeShareRecordByDenomRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + msg, err := client.TokenizeShareRecordByDenom(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TokenizeShareRecordByDenom_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenizeShareRecordByDenomRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + msg, err := server.TokenizeShareRecordByDenom(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_TokenizeShareRecordsOwned_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenizeShareRecordsOwnedRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["owner"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") + } + + protoReq.Owner, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + msg, err := client.TokenizeShareRecordsOwned(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TokenizeShareRecordsOwned_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenizeShareRecordsOwnedRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["owner"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") + } + + protoReq.Owner, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + msg, err := server.TokenizeShareRecordsOwned(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_AllTokenizeShareRecords_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_AllTokenizeShareRecords_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllTokenizeShareRecordsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllTokenizeShareRecords_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AllTokenizeShareRecords(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_AllTokenizeShareRecords_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllTokenizeShareRecordsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllTokenizeShareRecords_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.AllTokenizeShareRecords(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_LastTokenizeShareRecordId_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryLastTokenizeShareRecordIdRequest + var metadata runtime.ServerMetadata + + msg, err := client.LastTokenizeShareRecordId(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_LastTokenizeShareRecordId_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryLastTokenizeShareRecordIdRequest + var metadata runtime.ServerMetadata + + msg, err := server.LastTokenizeShareRecordId(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_TotalTokenizeSharedAssets_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTotalTokenizeSharedAssetsRequest + var metadata runtime.ServerMetadata + + msg, err := client.TotalTokenizeSharedAssets(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TotalTokenizeSharedAssets_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTotalTokenizeSharedAssetsRequest + var metadata runtime.ServerMetadata + + msg, err := server.TotalTokenizeSharedAssets(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_TotalLiquidStaked_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTotalLiquidStaked + var metadata runtime.ServerMetadata + + msg, err := client.TotalLiquidStaked(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TotalLiquidStaked_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTotalLiquidStaked + var metadata runtime.ServerMetadata + + msg, err := server.TotalLiquidStaked(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_TokenizeShareLockInfo_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenizeShareLockInfo + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + msg, err := client.TokenizeShareLockInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TokenizeShareLockInfo_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenizeShareLockInfo + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + msg, err := server.TokenizeShareLockInfo(ctx, &protoReq) + return msg, metadata, err + +} + func request_Query_HistoricalInfo_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryHistoricalInfoRequest var metadata runtime.ServerMetadata @@ -853,33 +1159,217 @@ func local_request_Query_Pool_0(ctx context.Context, marshaler runtime.Marshaler msg, err := server.Pool(ctx, &protoReq) return msg, metadata, err -} +} + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Validators_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Validators_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Validators_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Validator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Validator_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Validator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ValidatorDelegations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_ValidatorDelegations_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ValidatorDelegations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ValidatorUnbondingDelegations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_ValidatorUnbondingDelegations_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ValidatorUnbondingDelegations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Delegation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Delegation_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Delegation_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UnbondingDelegation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_UnbondingDelegation_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_UnbondingDelegation_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) -func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest - var metadata runtime.ServerMetadata + }) - msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err + mux.Handle("GET", pattern_Query_DelegatorDelegations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_DelegatorDelegations_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } -} + forward_Query_DelegatorDelegations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) -func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest - var metadata runtime.ServerMetadata + }) - msg, err := server.Params(ctx, &protoReq) - return msg, metadata, err + mux.Handle("GET", pattern_Query_DelegatorUnbondingDelegations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_DelegatorUnbondingDelegations_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } -} + forward_Query_DelegatorUnbondingDelegations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) -// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". -// UnaryRPC :call QueryServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. -func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + }) - mux.Handle("GET", pattern_Query_Validators_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Redelegations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -890,7 +1380,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Validators_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_Redelegations_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -898,11 +1388,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Validators_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Redelegations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Validator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_DelegatorValidators_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -913,7 +1403,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Validator_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_DelegatorValidators_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -921,11 +1411,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Validator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_DelegatorValidators_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ValidatorDelegations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_DelegatorValidator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -936,7 +1426,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ValidatorDelegations_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_DelegatorValidator_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -944,11 +1434,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ValidatorDelegations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_DelegatorValidator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ValidatorUnbondingDelegations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_TokenizeShareRecordById_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -959,7 +1449,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ValidatorUnbondingDelegations_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_TokenizeShareRecordById_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -967,11 +1457,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ValidatorUnbondingDelegations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_TokenizeShareRecordById_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Delegation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_TokenizeShareRecordByDenom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -982,7 +1472,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Delegation_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_TokenizeShareRecordByDenom_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -990,11 +1480,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Delegation_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_TokenizeShareRecordByDenom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_UnbondingDelegation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_TokenizeShareRecordsOwned_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1005,7 +1495,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_UnbondingDelegation_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_TokenizeShareRecordsOwned_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1013,11 +1503,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_UnbondingDelegation_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_TokenizeShareRecordsOwned_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_DelegatorDelegations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllTokenizeShareRecords_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1028,7 +1518,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_DelegatorDelegations_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AllTokenizeShareRecords_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1036,11 +1526,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_DelegatorDelegations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllTokenizeShareRecords_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_DelegatorUnbondingDelegations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_LastTokenizeShareRecordId_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1051,7 +1541,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_DelegatorUnbondingDelegations_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_LastTokenizeShareRecordId_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1059,11 +1549,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_DelegatorUnbondingDelegations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_LastTokenizeShareRecordId_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Redelegations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_TotalTokenizeSharedAssets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1074,7 +1564,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Redelegations_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_TotalTokenizeSharedAssets_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1082,11 +1572,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Redelegations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_TotalTokenizeSharedAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_DelegatorValidators_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_TotalLiquidStaked_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1097,7 +1587,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_DelegatorValidators_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_TotalLiquidStaked_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1105,11 +1595,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_DelegatorValidators_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_TotalLiquidStaked_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_DelegatorValidator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_TokenizeShareLockInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1120,7 +1610,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_DelegatorValidator_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_TokenizeShareLockInfo_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1128,7 +1618,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_DelegatorValidator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_TokenizeShareLockInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1462,6 +1952,166 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_TokenizeShareRecordById_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TokenizeShareRecordById_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TokenizeShareRecordById_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TokenizeShareRecordByDenom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TokenizeShareRecordByDenom_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TokenizeShareRecordByDenom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TokenizeShareRecordsOwned_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TokenizeShareRecordsOwned_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TokenizeShareRecordsOwned_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AllTokenizeShareRecords_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_AllTokenizeShareRecords_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_AllTokenizeShareRecords_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_LastTokenizeShareRecordId_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_LastTokenizeShareRecordId_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_LastTokenizeShareRecordId_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TotalTokenizeSharedAssets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TotalTokenizeSharedAssets_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TotalTokenizeSharedAssets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TotalLiquidStaked_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TotalLiquidStaked_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TotalLiquidStaked_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TokenizeShareLockInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TokenizeShareLockInfo_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TokenizeShareLockInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_HistoricalInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1548,6 +2198,22 @@ var ( pattern_Query_DelegatorValidator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"cosmos", "staking", "v1beta1", "delegators", "delegator_addr", "validators", "validator_addr"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_TokenizeShareRecordById_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"cosmos", "staking", "v1beta1", "tokenize_share_record_by_id", "id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_TokenizeShareRecordByDenom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"cosmos", "staking", "v1beta1", "tokenize_share_record_by_denom", "denom"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_TokenizeShareRecordsOwned_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"cosmos", "staking", "v1beta1", "tokenize_share_record_owned", "owner"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AllTokenizeShareRecords_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "staking", "v1beta1", "tokenize_share_records"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_LastTokenizeShareRecordId_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "staking", "v1beta1", "last_tokenize_share_record_id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_TotalTokenizeSharedAssets_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "staking", "v1beta1", "total_tokenize_shared_assets"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_TotalLiquidStaked_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "staking", "v1beta1", "total_liquid_staked"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_TokenizeShareLockInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"cosmos", "staking", "v1beta1", "tokenize_share_lock_info", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_HistoricalInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"cosmos", "staking", "v1beta1", "historical_info", "height"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_Pool_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "staking", "v1beta1", "pool"}, "", runtime.AssumeColonVerbOpt(false))) @@ -1578,6 +2244,22 @@ var ( forward_Query_DelegatorValidator_0 = runtime.ForwardResponseMessage + forward_Query_TokenizeShareRecordById_0 = runtime.ForwardResponseMessage + + forward_Query_TokenizeShareRecordByDenom_0 = runtime.ForwardResponseMessage + + forward_Query_TokenizeShareRecordsOwned_0 = runtime.ForwardResponseMessage + + forward_Query_AllTokenizeShareRecords_0 = runtime.ForwardResponseMessage + + forward_Query_LastTokenizeShareRecordId_0 = runtime.ForwardResponseMessage + + forward_Query_TotalTokenizeSharedAssets_0 = runtime.ForwardResponseMessage + + forward_Query_TotalLiquidStaked_0 = runtime.ForwardResponseMessage + + forward_Query_TokenizeShareLockInfo_0 = runtime.ForwardResponseMessage + forward_Query_HistoricalInfo_0 = runtime.ForwardResponseMessage forward_Query_Pool_0 = runtime.ForwardResponseMessage diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 0510eb691dfc..615b04376614 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -110,6 +110,43 @@ func (Infraction) EnumDescriptor() ([]byte, []int) { return fileDescriptor_64c30c6cf92913c9, []int{1} } +// TokenizeShareLockStatus indicates whether the address is able to tokenize shares +type TokenizeShareLockStatus int32 + +const ( + // UNSPECIFIED defines an empty tokenize share lock status + TOKENIZE_SHARE_LOCK_STATUS_UNSPECIFIED TokenizeShareLockStatus = 0 + // LOCKED indicates the account is locked and cannot tokenize shares + TOKENIZE_SHARE_LOCK_STATUS_LOCKED TokenizeShareLockStatus = 1 + // UNLOCKED indicates the account is unlocked and can tokenize shares + TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED TokenizeShareLockStatus = 2 + // LOCK_EXPIRING indicates the account is unable to tokenize shares, but + // will be able to tokenize shortly (after 1 unbonding period) + TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING TokenizeShareLockStatus = 3 +) + +var TokenizeShareLockStatus_name = map[int32]string{ + 0: "TOKENIZE_SHARE_LOCK_STATUS_UNSPECIFIED", + 1: "TOKENIZE_SHARE_LOCK_STATUS_LOCKED", + 2: "TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED", + 3: "TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING", +} + +var TokenizeShareLockStatus_value = map[string]int32{ + "TOKENIZE_SHARE_LOCK_STATUS_UNSPECIFIED": 0, + "TOKENIZE_SHARE_LOCK_STATUS_LOCKED": 1, + "TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED": 2, + "TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING": 3, +} + +func (x TokenizeShareLockStatus) String() string { + return proto.EnumName(TokenizeShareLockStatus_name, int32(x)) +} + +func (TokenizeShareLockStatus) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{2} +} + // HistoricalInfo contains header and validator information for a given block. // It is stored as part of staking module's state, which persists the `n` most // recent HistoricalInfo @@ -366,14 +403,16 @@ type Validator struct { UnbondingTime time.Time `protobuf:"bytes,9,opt,name=unbonding_time,json=unbondingTime,proto3,stdtime" json:"unbonding_time"` // commission defines the commission parameters. Commission Commission `protobuf:"bytes,10,opt,name=commission,proto3" json:"commission"` - // min_self_delegation is the validator's self declared minimum self delegation. - // - // Since: cosmos-sdk 0.46 - MinSelfDelegation github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,11,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation"` + // Deprecated: This field has been deprecated with LSM in favor of the validator bond + MinSelfDelegation github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,11,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation"` // Deprecated: Do not use. // strictly positive if this validator's unbonding has been stopped by external modules UnbondingOnHoldRefCount int64 `protobuf:"varint,12,opt,name=unbonding_on_hold_ref_count,json=unbondingOnHoldRefCount,proto3" json:"unbonding_on_hold_ref_count,omitempty"` // list of unbonding ids, each uniquely identifing an unbonding of this validator UnbondingIds []uint64 `protobuf:"varint,13,rep,packed,name=unbonding_ids,json=unbondingIds,proto3" json:"unbonding_ids,omitempty"` + // Number of shares self bonded from the validator + ValidatorBondShares github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,14,opt,name=validator_bond_shares,json=validatorBondShares,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"validator_bond_shares" yaml:"validator_bond_shares"` + // Number of shares either tokenized or owned by a liquid staking provider + LiquidShares github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,15,opt,name=liquid_shares,json=liquidShares,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"liquid_shares" yaml:"liquid_shares"` } func (m *Validator) Reset() { *m = Validator{} } @@ -634,6 +673,8 @@ type Delegation struct { ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` // shares define the delegation shares received. Shares github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=shares,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"shares"` + // has this delegation been marked as a validator self bond. + ValidatorBond bool `protobuf:"varint,4,opt,name=validator_bond,json=validatorBond,proto3" json:"validator_bond,omitempty"` } func (m *Delegation) Reset() { *m = Delegation{} } @@ -922,6 +963,15 @@ type Params struct { BondDenom string `protobuf:"bytes,5,opt,name=bond_denom,json=bondDenom,proto3" json:"bond_denom,omitempty"` // min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators MinCommissionRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,6,opt,name=min_commission_rate,json=minCommissionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"min_commission_rate" yaml:"min_commission_rate"` + // validator_bond_factor is required as a safety check for tokenizing shares and + // delegations from liquid staking providers + ValidatorBondFactor github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,7,opt,name=validator_bond_factor,json=validatorBondFactor,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"validator_bond_factor" yaml:"validator_bond_factor"` + // global_liquid_staking_cap represents a cap on the portion of stake that + // comes from liquid staking providers + GlobalLiquidStakingCap github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,8,opt,name=global_liquid_staking_cap,json=globalLiquidStakingCap,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"global_liquid_staking_cap" yaml:"global_liquid_staking_cap"` + // validator_liquid_staking_cap represents a cap on the portion of stake that + // comes from liquid staking providers for a specific validator + ValidatorLiquidStakingCap github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,9,opt,name=validator_liquid_staking_cap,json=validatorLiquidStakingCap,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"validator_liquid_staking_cap" yaml:"validator_liquid_staking_cap"` } func (m *Params) Reset() { *m = Params{} } @@ -1233,9 +1283,125 @@ func (m *ValidatorUpdates) GetUpdates() []types3.ValidatorUpdate { return nil } +// TokenizeShareRecord represents a tokenized delegation +type TokenizeShareRecord struct { + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + ModuleAccount string `protobuf:"bytes,3,opt,name=module_account,json=moduleAccount,proto3" json:"module_account,omitempty"` + Validator string `protobuf:"bytes,4,opt,name=validator,proto3" json:"validator,omitempty"` +} + +func (m *TokenizeShareRecord) Reset() { *m = TokenizeShareRecord{} } +func (m *TokenizeShareRecord) String() string { return proto.CompactTextString(m) } +func (*TokenizeShareRecord) ProtoMessage() {} +func (*TokenizeShareRecord) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{21} +} +func (m *TokenizeShareRecord) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenizeShareRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TokenizeShareRecord.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 *TokenizeShareRecord) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenizeShareRecord.Merge(m, src) +} +func (m *TokenizeShareRecord) XXX_Size() int { + return m.Size() +} +func (m *TokenizeShareRecord) XXX_DiscardUnknown() { + xxx_messageInfo_TokenizeShareRecord.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenizeShareRecord proto.InternalMessageInfo + +func (m *TokenizeShareRecord) GetId() uint64 { + if m != nil { + return m.Id + } + return 0 +} + +func (m *TokenizeShareRecord) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *TokenizeShareRecord) GetModuleAccount() string { + if m != nil { + return m.ModuleAccount + } + return "" +} + +func (m *TokenizeShareRecord) GetValidator() string { + if m != nil { + return m.Validator + } + return "" +} + +// PendingTokenizeShareAuthorizations stores a list of addresses that have their +// tokenize share enablement in progress +type PendingTokenizeShareAuthorizations struct { + Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` +} + +func (m *PendingTokenizeShareAuthorizations) Reset() { *m = PendingTokenizeShareAuthorizations{} } +func (m *PendingTokenizeShareAuthorizations) String() string { return proto.CompactTextString(m) } +func (*PendingTokenizeShareAuthorizations) ProtoMessage() {} +func (*PendingTokenizeShareAuthorizations) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{22} +} +func (m *PendingTokenizeShareAuthorizations) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PendingTokenizeShareAuthorizations) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PendingTokenizeShareAuthorizations.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 *PendingTokenizeShareAuthorizations) XXX_Merge(src proto.Message) { + xxx_messageInfo_PendingTokenizeShareAuthorizations.Merge(m, src) +} +func (m *PendingTokenizeShareAuthorizations) XXX_Size() int { + return m.Size() +} +func (m *PendingTokenizeShareAuthorizations) XXX_DiscardUnknown() { + xxx_messageInfo_PendingTokenizeShareAuthorizations.DiscardUnknown(m) +} + +var xxx_messageInfo_PendingTokenizeShareAuthorizations proto.InternalMessageInfo + +func (m *PendingTokenizeShareAuthorizations) GetAddresses() []string { + if m != nil { + return m.Addresses + } + return nil +} + func init() { proto.RegisterEnum("cosmos.staking.v1beta1.BondStatus", BondStatus_name, BondStatus_value) proto.RegisterEnum("cosmos.staking.v1beta1.Infraction", Infraction_name, Infraction_value) + proto.RegisterEnum("cosmos.staking.v1beta1.TokenizeShareLockStatus", TokenizeShareLockStatus_name, TokenizeShareLockStatus_value) proto.RegisterType((*HistoricalInfo)(nil), "cosmos.staking.v1beta1.HistoricalInfo") proto.RegisterType((*CommissionRates)(nil), "cosmos.staking.v1beta1.CommissionRates") proto.RegisterType((*Commission)(nil), "cosmos.staking.v1beta1.Commission") @@ -1257,6 +1423,8 @@ func init() { proto.RegisterType((*RedelegationResponse)(nil), "cosmos.staking.v1beta1.RedelegationResponse") proto.RegisterType((*Pool)(nil), "cosmos.staking.v1beta1.Pool") proto.RegisterType((*ValidatorUpdates)(nil), "cosmos.staking.v1beta1.ValidatorUpdates") + proto.RegisterType((*TokenizeShareRecord)(nil), "cosmos.staking.v1beta1.TokenizeShareRecord") + proto.RegisterType((*PendingTokenizeShareAuthorizations)(nil), "cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations") } func init() { @@ -1264,126 +1432,147 @@ func init() { } var fileDescriptor_64c30c6cf92913c9 = []byte{ - // 1890 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4f, 0x6c, 0x63, 0x47, - 0x19, 0xf7, 0xb3, 0x5d, 0x27, 0xf9, 0x9c, 0xc4, 0xce, 0xec, 0x76, 0xd7, 0xeb, 0x85, 0xd8, 0x75, - 0x4b, 0x9b, 0xae, 0xba, 0x0e, 0x1b, 0x24, 0x0e, 0xa1, 0x02, 0xad, 0xe3, 0x6c, 0xd7, 0x65, 0x9b, - 0x58, 0xcf, 0x49, 0x4a, 0x41, 0xe8, 0x69, 0xfc, 0xde, 0xc4, 0x19, 0x62, 0xcf, 0xb3, 0xde, 0x8c, - 0xb7, 0xb1, 0xc4, 0x01, 0x71, 0x5a, 0xe5, 0x80, 0x2a, 0x71, 0xa0, 0x97, 0x95, 0x56, 0x82, 0x03, - 0x87, 0x22, 0xf5, 0x50, 0x71, 0xe1, 0x80, 0x38, 0x20, 0x15, 0x2e, 0xac, 0x7a, 0x42, 0x08, 0x05, - 0xb4, 0x7b, 0x28, 0xe2, 0x84, 0xb8, 0x83, 0xd0, 0xcc, 0x9b, 0xf7, 0xc7, 0x76, 0xb2, 0x9b, 0xac, - 0x42, 0x55, 0xa9, 0x97, 0xc4, 0x33, 0xf3, 0x7d, 0xbf, 0x37, 0xdf, 0xef, 0xfb, 0x33, 0xf3, 0x0d, - 0xbc, 0x64, 0xbb, 0xbc, 0xe7, 0xf2, 0x65, 0x2e, 0xf0, 0x3e, 0x65, 0x9d, 0xe5, 0xbb, 0x37, 0xda, - 0x44, 0xe0, 0x1b, 0xc1, 0xb8, 0xda, 0xf7, 0x5c, 0xe1, 0xa2, 0x4b, 0xbe, 0x54, 0x35, 0x98, 0xd5, - 0x52, 0xc5, 0x8b, 0x1d, 0xb7, 0xe3, 0x2a, 0x91, 0x65, 0xf9, 0xcb, 0x97, 0x2e, 0x5e, 0xe9, 0xb8, - 0x6e, 0xa7, 0x4b, 0x96, 0xd5, 0xa8, 0x3d, 0xd8, 0x5d, 0xc6, 0x6c, 0xa8, 0x97, 0x16, 0xc7, 0x97, - 0x9c, 0x81, 0x87, 0x05, 0x75, 0x99, 0x5e, 0x2f, 0x8d, 0xaf, 0x0b, 0xda, 0x23, 0x5c, 0xe0, 0x5e, - 0x3f, 0xc0, 0xf6, 0x77, 0x62, 0xf9, 0x1f, 0xd5, 0xdb, 0xd2, 0xd8, 0xda, 0x94, 0x36, 0xe6, 0x24, - 0xb4, 0xc3, 0x76, 0x69, 0x80, 0xbd, 0x80, 0x7b, 0x94, 0xb9, 0xcb, 0xea, 0xaf, 0x9e, 0xfa, 0x92, - 0x20, 0xcc, 0x21, 0x5e, 0x8f, 0x32, 0xb1, 0x2c, 0x86, 0x7d, 0xc2, 0xfd, 0xbf, 0x7a, 0xf5, 0x6a, - 0x6c, 0x15, 0xb7, 0x6d, 0x1a, 0x5f, 0xac, 0xfc, 0xd4, 0x80, 0xf9, 0xdb, 0x94, 0x0b, 0xd7, 0xa3, - 0x36, 0xee, 0x36, 0xd8, 0xae, 0x8b, 0xbe, 0x01, 0x99, 0x3d, 0x82, 0x1d, 0xe2, 0x15, 0x8c, 0xb2, - 0xb1, 0x94, 0x5d, 0x29, 0x54, 0x23, 0x80, 0xaa, 0xaf, 0x7b, 0x5b, 0xad, 0xd7, 0x66, 0x3e, 0x3e, - 0x2a, 0x25, 0x7e, 0xf9, 0xe9, 0x87, 0xd7, 0x0c, 0x53, 0xab, 0xa0, 0x3a, 0x64, 0xee, 0xe2, 0x2e, - 0x27, 0xa2, 0x90, 0x2c, 0xa7, 0x96, 0xb2, 0x2b, 0x2f, 0x54, 0x8f, 0xe7, 0xbc, 0xba, 0x83, 0xbb, - 0xd4, 0xc1, 0xc2, 0x1d, 0x45, 0xf1, 0x75, 0x2b, 0x1f, 0x24, 0x21, 0xb7, 0xe6, 0xf6, 0x7a, 0x94, - 0x73, 0xea, 0x32, 0x13, 0x0b, 0xc2, 0x51, 0x13, 0xd2, 0x1e, 0x16, 0x44, 0x6d, 0x6a, 0xa6, 0xf6, - 0xba, 0x54, 0xfa, 0xcb, 0x51, 0xe9, 0xe5, 0x0e, 0x15, 0x7b, 0x83, 0x76, 0xd5, 0x76, 0x7b, 0x9a, - 0x46, 0xfd, 0xef, 0x3a, 0x77, 0xf6, 0xb5, 0xa5, 0x75, 0x62, 0x7f, 0xf2, 0xd1, 0x75, 0xd0, 0x1b, - 0xa9, 0x13, 0xdb, 0x54, 0x48, 0xe8, 0x6d, 0x98, 0xee, 0xe1, 0x03, 0x4b, 0xa1, 0x26, 0xcf, 0x01, - 0x75, 0xaa, 0x87, 0x0f, 0xe4, 0x5e, 0x91, 0x03, 0x39, 0x09, 0x6c, 0xef, 0x61, 0xd6, 0x21, 0x3e, - 0x7e, 0xea, 0x1c, 0xf0, 0xe7, 0x7a, 0xf8, 0x60, 0x4d, 0x61, 0xca, 0xaf, 0xac, 0x4e, 0xbf, 0xff, - 0xa0, 0x94, 0xf8, 0xc7, 0x83, 0x92, 0x51, 0xf9, 0xbd, 0x01, 0x10, 0xd1, 0x85, 0x30, 0xe4, 0xed, - 0x70, 0xa4, 0x3e, 0xcf, 0xb5, 0x2b, 0x5f, 0x39, 0xc9, 0x1b, 0x63, 0x64, 0xd7, 0xe6, 0xe4, 0x46, - 0x1f, 0x1e, 0x95, 0x0c, 0xdf, 0x2f, 0x39, 0x7b, 0xcc, 0x19, 0x6f, 0x42, 0x76, 0xd0, 0x77, 0xb0, - 0x20, 0x96, 0x8c, 0x6c, 0xc5, 0x5e, 0x76, 0xa5, 0x58, 0xf5, 0xc3, 0xbe, 0x1a, 0x84, 0x7d, 0x75, - 0x2b, 0x08, 0x7b, 0x1f, 0xf0, 0xbd, 0xbf, 0x05, 0x80, 0xe0, 0x6b, 0xcb, 0xf5, 0x98, 0x1d, 0x1f, - 0x18, 0x90, 0xad, 0x13, 0x6e, 0x7b, 0xb4, 0x2f, 0x93, 0x09, 0x15, 0x60, 0xaa, 0xe7, 0x32, 0xba, - 0xaf, 0x43, 0x71, 0xc6, 0x0c, 0x86, 0xa8, 0x08, 0xd3, 0xd4, 0x21, 0x4c, 0x50, 0x31, 0xf4, 0x5d, - 0x67, 0x86, 0x63, 0xa9, 0xf5, 0x2e, 0x69, 0x73, 0x1a, 0xb0, 0x6e, 0x06, 0x43, 0xf4, 0x2a, 0xe4, - 0x39, 0xb1, 0x07, 0x1e, 0x15, 0x43, 0xcb, 0x76, 0x99, 0xc0, 0xb6, 0x28, 0xa4, 0x95, 0x48, 0x2e, - 0x98, 0x5f, 0xf3, 0xa7, 0x25, 0x88, 0x43, 0x04, 0xa6, 0x5d, 0x5e, 0x78, 0xce, 0x07, 0xd1, 0xc3, - 0xd8, 0x76, 0x7f, 0x33, 0x05, 0x33, 0x61, 0x18, 0xa3, 0x35, 0xc8, 0xbb, 0x7d, 0xe2, 0xc9, 0xdf, - 0x16, 0x76, 0x1c, 0x8f, 0x70, 0xae, 0x63, 0xb5, 0xf0, 0xc9, 0x47, 0xd7, 0x2f, 0x6a, 0xe2, 0x6f, - 0xfa, 0x2b, 0x2d, 0xe1, 0x51, 0xd6, 0x31, 0x73, 0x81, 0x86, 0x9e, 0x46, 0xef, 0x48, 0xd7, 0x31, - 0x4e, 0x18, 0x1f, 0x70, 0xab, 0x3f, 0x68, 0xef, 0x93, 0xa1, 0x26, 0xf7, 0xe2, 0x04, 0xb9, 0x37, - 0xd9, 0xb0, 0x56, 0xf8, 0x63, 0x04, 0x6d, 0x7b, 0xc3, 0xbe, 0x70, 0xab, 0xcd, 0x41, 0xfb, 0xdb, - 0x64, 0x28, 0x5d, 0xa6, 0x71, 0x9a, 0x0a, 0x06, 0x5d, 0x82, 0xcc, 0x0f, 0x30, 0xed, 0x12, 0x47, - 0xb1, 0x32, 0x6d, 0xea, 0x11, 0x5a, 0x85, 0x0c, 0x17, 0x58, 0x0c, 0xb8, 0xa2, 0x62, 0x7e, 0xa5, - 0x72, 0x52, 0x8c, 0xd4, 0x5c, 0xe6, 0xb4, 0x94, 0xa4, 0xa9, 0x35, 0xd0, 0x16, 0x64, 0x84, 0xbb, - 0x4f, 0x98, 0x26, 0xe9, 0x4c, 0xf1, 0xdd, 0x60, 0x22, 0x16, 0xdf, 0x0d, 0x26, 0x4c, 0x8d, 0x85, - 0x3a, 0x90, 0x77, 0x48, 0x97, 0x74, 0x14, 0x95, 0x7c, 0x0f, 0x7b, 0x84, 0x17, 0x32, 0xe7, 0x90, - 0x3f, 0xb9, 0x10, 0xb5, 0xa5, 0x40, 0x51, 0x13, 0xb2, 0x4e, 0x14, 0x6e, 0x85, 0x29, 0x45, 0xf4, - 0x8b, 0x27, 0xd9, 0x1f, 0x8b, 0xcc, 0x78, 0xcd, 0x8a, 0x43, 0xc8, 0x08, 0x1b, 0xb0, 0xb6, 0xcb, - 0x1c, 0xca, 0x3a, 0xd6, 0x1e, 0xa1, 0x9d, 0x3d, 0x51, 0x98, 0x2e, 0x1b, 0x4b, 0x29, 0x33, 0x17, - 0xce, 0xdf, 0x56, 0xd3, 0xa8, 0x09, 0xf3, 0x91, 0xa8, 0xca, 0xa2, 0x99, 0xb3, 0x66, 0xd1, 0x5c, - 0x08, 0x20, 0x45, 0xd0, 0x5b, 0x00, 0x51, 0x9e, 0x16, 0x40, 0xa1, 0x55, 0x9e, 0x9e, 0xf1, 0x71, - 0x63, 0x62, 0x00, 0xa8, 0x0b, 0x17, 0x7a, 0x94, 0x59, 0x9c, 0x74, 0x77, 0x2d, 0xcd, 0x9c, 0xc4, - 0xcd, 0x9e, 0x83, 0xa7, 0x17, 0x7a, 0x94, 0xb5, 0x48, 0x77, 0xb7, 0x1e, 0xc2, 0xa2, 0xd7, 0xe1, - 0x6a, 0x44, 0x87, 0xcb, 0xac, 0x3d, 0xb7, 0xeb, 0x58, 0x1e, 0xd9, 0xb5, 0x6c, 0x77, 0xc0, 0x44, - 0x61, 0x56, 0x91, 0x78, 0x39, 0x14, 0xd9, 0x64, 0xb7, 0xdd, 0xae, 0x63, 0x92, 0xdd, 0x35, 0xb9, - 0x8c, 0x5e, 0x84, 0x88, 0x0b, 0x8b, 0x3a, 0xbc, 0x30, 0x57, 0x4e, 0x2d, 0xa5, 0xcd, 0xd9, 0x70, - 0xb2, 0xe1, 0xf0, 0xd5, 0xd9, 0x7b, 0x0f, 0x4a, 0x09, 0x9d, 0xbd, 0x89, 0x4a, 0x13, 0x66, 0x77, - 0x70, 0x57, 0x27, 0x1e, 0xe1, 0xe8, 0xeb, 0x30, 0x83, 0x83, 0x41, 0xc1, 0x28, 0xa7, 0x9e, 0x98, - 0xb8, 0x91, 0xa8, 0x5f, 0x0f, 0x7e, 0xf4, 0xd7, 0xb2, 0x51, 0xf9, 0x85, 0x01, 0x99, 0xfa, 0x4e, - 0x13, 0x53, 0x0f, 0xad, 0xc3, 0x42, 0x14, 0xc2, 0xa7, 0xad, 0x06, 0x51, 0xd4, 0x07, 0xe5, 0x60, - 0x1d, 0x16, 0xee, 0x06, 0x05, 0x26, 0x84, 0x49, 0x3e, 0x0d, 0x26, 0x54, 0xd1, 0xf3, 0x63, 0x86, - 0xbf, 0x09, 0x53, 0xfe, 0x2e, 0x39, 0xfa, 0x16, 0x3c, 0xd7, 0x97, 0x3f, 0x94, 0xbd, 0xd9, 0x95, - 0xc5, 0x13, 0x43, 0x5f, 0xc9, 0xc7, 0x03, 0xc5, 0xd7, 0xab, 0xfc, 0xc7, 0x00, 0xa8, 0xef, 0xec, - 0x6c, 0x79, 0xb4, 0xdf, 0x25, 0xe2, 0xbc, 0xcc, 0xbe, 0x03, 0xcf, 0x47, 0x66, 0x73, 0xcf, 0x3e, - 0xb5, 0xe9, 0x17, 0x42, 0xb5, 0x96, 0x67, 0x1f, 0x8b, 0xe6, 0x70, 0x11, 0xa2, 0xa5, 0x4e, 0x8d, - 0x56, 0xe7, 0xe2, 0x78, 0x2e, 0xbf, 0x03, 0xd9, 0xc8, 0x7c, 0x8e, 0x1a, 0x30, 0x2d, 0xf4, 0x6f, - 0x4d, 0x69, 0xe5, 0x64, 0x4a, 0x03, 0xb5, 0x38, 0xad, 0xa1, 0x7a, 0xe5, 0xbf, 0x92, 0xd9, 0x28, - 0x3d, 0x3e, 0x57, 0x01, 0x25, 0xeb, 0xbe, 0xae, 0xcb, 0xe7, 0x71, 0xaf, 0xd1, 0x58, 0x63, 0xd4, - 0xde, 0x4b, 0xc2, 0x85, 0xed, 0x20, 0x7d, 0x3f, 0xb7, 0x4c, 0x6c, 0xc3, 0x14, 0x61, 0xc2, 0xa3, - 0x8a, 0x0a, 0xe9, 0xf0, 0xaf, 0x9e, 0xe4, 0xf0, 0x63, 0x6c, 0x59, 0x67, 0xc2, 0x1b, 0xc6, 0xdd, - 0x1f, 0x60, 0x8d, 0x51, 0xf1, 0xbb, 0x14, 0x14, 0x4e, 0x52, 0x47, 0xaf, 0x40, 0xce, 0xf6, 0x88, - 0x9a, 0x08, 0x4e, 0x1c, 0x43, 0x15, 0xcb, 0xf9, 0x60, 0x5a, 0x1f, 0x38, 0x26, 0xc8, 0x6b, 0x9c, - 0x8c, 0x2e, 0x29, 0xfa, 0x6c, 0xf7, 0xb6, 0xf9, 0x08, 0x41, 0x1d, 0x39, 0x04, 0x72, 0x94, 0x51, - 0x41, 0x71, 0xd7, 0x6a, 0xe3, 0x2e, 0x66, 0xf6, 0xb3, 0xdc, 0x74, 0x27, 0xcf, 0x87, 0x79, 0x0d, - 0x5a, 0xf3, 0x31, 0xd1, 0x0e, 0x4c, 0x05, 0xf0, 0xe9, 0x73, 0x80, 0x0f, 0xc0, 0xd0, 0x0b, 0x30, - 0x1b, 0x3f, 0x36, 0xd4, 0x2d, 0x26, 0x6d, 0x66, 0x63, 0xa7, 0xc6, 0xd3, 0xce, 0xa5, 0xcc, 0x13, - 0xcf, 0xa5, 0xd8, 0x65, 0xf1, 0xb7, 0x29, 0x58, 0x30, 0x89, 0xf3, 0x05, 0x74, 0xde, 0xf7, 0x00, - 0xfc, 0x04, 0x97, 0xc5, 0xf7, 0x19, 0xfc, 0x37, 0x59, 0x30, 0x66, 0x7c, 0xbc, 0x3a, 0x17, 0x9f, - 0xa5, 0x07, 0xff, 0x94, 0x84, 0xd9, 0xb8, 0x07, 0xbf, 0x00, 0xa7, 0x1d, 0xda, 0x88, 0xca, 0x5b, - 0x5a, 0x95, 0xb7, 0x57, 0x4f, 0x2a, 0x6f, 0x13, 0xb1, 0x7d, 0x8a, 0xba, 0xf6, 0xb3, 0x14, 0x64, - 0x9a, 0xd8, 0xc3, 0x3d, 0x8e, 0x36, 0x27, 0x6e, 0xc3, 0x7e, 0xc7, 0x7a, 0x65, 0x22, 0xbc, 0xeb, - 0xfa, 0xa9, 0xc5, 0x8f, 0xee, 0xf7, 0x4f, 0xba, 0x0c, 0x7f, 0x05, 0xe6, 0x65, 0x0f, 0x1e, 0x1a, - 0xe5, 0xd3, 0x39, 0xa7, 0x9a, 0xe8, 0xb0, 0x69, 0xe3, 0xa8, 0x04, 0x59, 0x29, 0x16, 0xd5, 0x70, - 0x29, 0x03, 0x3d, 0x7c, 0xb0, 0xee, 0xcf, 0xa0, 0xeb, 0x80, 0xf6, 0xc2, 0xf7, 0x11, 0x2b, 0x22, - 0x43, 0xca, 0x2d, 0x44, 0x2b, 0x81, 0xf8, 0x97, 0x01, 0xe4, 0x2e, 0x2c, 0x87, 0x30, 0xb7, 0xa7, - 0x5b, 0xc7, 0x19, 0x39, 0x53, 0x97, 0x13, 0xe8, 0x87, 0xfe, 0x9d, 0x7a, 0xac, 0x3d, 0xd7, 0xdd, - 0xcd, 0x9d, 0xb3, 0x25, 0xc5, 0xbf, 0x8f, 0x4a, 0xc5, 0x21, 0xee, 0x75, 0x57, 0x2b, 0xc7, 0x40, - 0x56, 0xd4, 0x1d, 0x7b, 0xb4, 0xad, 0x5f, 0x5d, 0x0a, 0x62, 0xf9, 0xf0, 0xd3, 0x0f, 0xaf, 0x5d, - 0x8d, 0x61, 0x1e, 0x84, 0x0f, 0x67, 0xbe, 0x3b, 0x2a, 0xbf, 0x32, 0x00, 0x45, 0x07, 0x8d, 0x49, - 0x78, 0x5f, 0x76, 0x93, 0xb2, 0xc3, 0x88, 0x75, 0x02, 0xc6, 0x93, 0x3b, 0x8c, 0x48, 0x7f, 0xa4, - 0xc3, 0x88, 0x25, 0xd0, 0x37, 0xa3, 0xb2, 0x9e, 0xd4, 0xde, 0xd6, 0x58, 0x6d, 0xcc, 0x49, 0xac, - 0x55, 0xa1, 0x23, 0x10, 0x81, 0x52, 0x98, 0x9b, 0x89, 0xca, 0x91, 0x01, 0x57, 0x26, 0x22, 0x30, - 0xdc, 0xb6, 0x0d, 0xc8, 0x8b, 0x2d, 0x2a, 0x2f, 0x0e, 0xf5, 0xf6, 0x9f, 0x2d, 0xa0, 0x17, 0xbc, - 0x89, 0x52, 0xfe, 0x7f, 0x3a, 0xa3, 0x56, 0xd3, 0xaa, 0xf8, 0xfc, 0xc1, 0x80, 0x8b, 0xf1, 0x1d, - 0x85, 0xb6, 0xb5, 0x60, 0x36, 0xbe, 0x17, 0x6d, 0xd5, 0x4b, 0xa7, 0xb1, 0x2a, 0x6e, 0xd0, 0x08, - 0x88, 0xb4, 0x25, 0x88, 0x74, 0xff, 0x19, 0xef, 0xc6, 0xa9, 0x59, 0x0a, 0x36, 0x76, 0x6c, 0xfa, - 0xa7, 0x95, 0xb3, 0x7e, 0x92, 0x84, 0x74, 0xd3, 0x75, 0xbb, 0xe8, 0xc7, 0x06, 0x2c, 0x30, 0x57, - 0x58, 0x32, 0x3f, 0x88, 0x63, 0xe9, 0xa7, 0x04, 0xbf, 0x82, 0xee, 0x9c, 0x8d, 0xbd, 0x7f, 0x1e, - 0x95, 0x26, 0xa1, 0x46, 0x29, 0xd5, 0x4f, 0x59, 0xcc, 0x15, 0x35, 0x25, 0xb4, 0xe5, 0xbf, 0x36, - 0xbc, 0x0b, 0x73, 0xa3, 0xdf, 0xf7, 0xcb, 0xae, 0x79, 0xe6, 0xef, 0xcf, 0x3d, 0xf5, 0xdb, 0xb3, - 0xed, 0xd8, 0x87, 0x57, 0xa7, 0xa5, 0x63, 0xff, 0x25, 0x9d, 0xfb, 0x0e, 0xe4, 0xc3, 0x92, 0xb4, - 0xad, 0x1e, 0xc6, 0xe4, 0xfd, 0x74, 0xca, 0x7f, 0x23, 0x0b, 0x3a, 0x89, 0x72, 0xfc, 0x19, 0x16, - 0xb7, 0x6d, 0x5a, 0x1d, 0xd3, 0x19, 0x61, 0x5c, 0xeb, 0x5e, 0xfb, 0xb5, 0x01, 0x10, 0x3d, 0xdc, - 0xa0, 0xd7, 0xe0, 0x72, 0x6d, 0x73, 0xa3, 0x6e, 0xb5, 0xb6, 0x6e, 0x6e, 0x6d, 0xb7, 0xac, 0xed, - 0x8d, 0x56, 0x73, 0x7d, 0xad, 0x71, 0xab, 0xb1, 0x5e, 0xcf, 0x27, 0x8a, 0xb9, 0xc3, 0xfb, 0xe5, - 0xec, 0x36, 0xe3, 0x7d, 0x62, 0xd3, 0x5d, 0x4a, 0x1c, 0xf4, 0x32, 0x5c, 0x1c, 0x95, 0x96, 0xa3, - 0xf5, 0x7a, 0xde, 0x28, 0xce, 0x1e, 0xde, 0x2f, 0x4f, 0xfb, 0x57, 0x52, 0xe2, 0xa0, 0x25, 0x78, - 0x7e, 0x52, 0xae, 0xb1, 0xf1, 0x46, 0x3e, 0x59, 0x9c, 0x3b, 0xbc, 0x5f, 0x9e, 0x09, 0xef, 0xae, - 0xa8, 0x02, 0x28, 0x2e, 0xa9, 0xf1, 0x52, 0x45, 0x38, 0xbc, 0x5f, 0xce, 0xf8, 0x6e, 0x29, 0xa6, - 0xef, 0xfd, 0x7c, 0x31, 0x71, 0xed, 0xfb, 0x00, 0x0d, 0xb6, 0xeb, 0x61, 0x5b, 0x05, 0x64, 0x11, - 0x2e, 0x35, 0x36, 0x6e, 0x99, 0x37, 0xd7, 0xb6, 0x1a, 0x9b, 0x1b, 0xa3, 0xdb, 0x1e, 0x5b, 0xab, - 0x6f, 0x6e, 0xd7, 0xee, 0xac, 0x5b, 0xad, 0xc6, 0x1b, 0x1b, 0x79, 0x03, 0x5d, 0x86, 0x0b, 0x23, - 0x6b, 0x6f, 0x6f, 0x6c, 0x35, 0xde, 0x5a, 0xcf, 0x27, 0x6b, 0xb7, 0x3e, 0x7e, 0xb4, 0x68, 0x3c, - 0x7c, 0xb4, 0x68, 0xfc, 0xfd, 0xd1, 0xa2, 0xf1, 0xde, 0xe3, 0xc5, 0xc4, 0xc3, 0xc7, 0x8b, 0x89, - 0x3f, 0x3f, 0x5e, 0x4c, 0x7c, 0xf7, 0xb5, 0x27, 0x3a, 0x3c, 0xaa, 0x94, 0xca, 0xf5, 0xed, 0x8c, - 0x3a, 0x97, 0xbe, 0xf6, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x85, 0x15, 0x6b, 0xa2, 0x81, 0x18, - 0x00, 0x00, + // 2227 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x4d, 0x6c, 0x1b, 0xc7, + 0xf5, 0xd7, 0x52, 0x0c, 0x25, 0x3e, 0x8a, 0xa2, 0x34, 0x56, 0x6c, 0x9a, 0xf1, 0x5f, 0xa2, 0xe9, + 0xd8, 0x56, 0x04, 0x9b, 0xfa, 0xdb, 0x05, 0x7a, 0x50, 0x83, 0x14, 0xa2, 0x48, 0xc7, 0x8c, 0x15, + 0x89, 0x58, 0x4a, 0xca, 0x47, 0x51, 0x2c, 0x86, 0xbb, 0x23, 0x6a, 0x2a, 0x72, 0x97, 0xdd, 0x19, + 0xda, 0x62, 0xd0, 0x43, 0xd1, 0x43, 0x61, 0x18, 0x68, 0x11, 0xa0, 0x40, 0x91, 0x8b, 0x01, 0x03, + 0x6d, 0x81, 0x1e, 0x52, 0x34, 0x87, 0xa0, 0xd7, 0xa2, 0x87, 0x00, 0x49, 0x2f, 0x35, 0x72, 0x2a, + 0x8a, 0x42, 0x2d, 0xec, 0x43, 0x8a, 0x9e, 0x8a, 0xde, 0x0b, 0x14, 0x3b, 0x33, 0xfb, 0x41, 0x8a, + 0x92, 0x25, 0x57, 0x2d, 0x02, 0xe4, 0x42, 0xed, 0xcc, 0xbc, 0xf9, 0xcd, 0x9b, 0xdf, 0xbc, 0xf7, + 0x66, 0xde, 0x13, 0xbc, 0x6c, 0x3a, 0xac, 0xed, 0xb0, 0x45, 0xc6, 0xf1, 0x2e, 0xb5, 0x9b, 0x8b, + 0x77, 0x6f, 0x34, 0x08, 0xc7, 0x37, 0xfc, 0x76, 0xb1, 0xe3, 0x3a, 0xdc, 0x41, 0x67, 0xa5, 0x54, + 0xd1, 0xef, 0x55, 0x52, 0xb9, 0x99, 0xa6, 0xd3, 0x74, 0x84, 0xc8, 0xa2, 0xf7, 0x25, 0xa5, 0x73, + 0xe7, 0x9b, 0x8e, 0xd3, 0x6c, 0x91, 0x45, 0xd1, 0x6a, 0x74, 0xb7, 0x17, 0xb1, 0xdd, 0x53, 0x43, + 0xb3, 0x83, 0x43, 0x56, 0xd7, 0xc5, 0x9c, 0x3a, 0xb6, 0x1a, 0x9f, 0x1b, 0x1c, 0xe7, 0xb4, 0x4d, + 0x18, 0xc7, 0xed, 0x8e, 0x8f, 0x2d, 0x35, 0x31, 0xe4, 0xa2, 0x4a, 0x2d, 0x85, 0xad, 0xb6, 0xd2, + 0xc0, 0x8c, 0x04, 0xfb, 0x30, 0x1d, 0xea, 0x63, 0x4f, 0xe3, 0x36, 0xb5, 0x9d, 0x45, 0xf1, 0xab, + 0xba, 0x2e, 0x70, 0x62, 0x5b, 0xc4, 0x6d, 0x53, 0x9b, 0x2f, 0xf2, 0x5e, 0x87, 0x30, 0xf9, 0xab, + 0x46, 0x5f, 0x8a, 0x8c, 0xe2, 0x86, 0x49, 0xa3, 0x83, 0x85, 0x9f, 0x68, 0x30, 0x79, 0x9b, 0x32, + 0xee, 0xb8, 0xd4, 0xc4, 0xad, 0xaa, 0xbd, 0xed, 0xa0, 0x6f, 0x40, 0x62, 0x87, 0x60, 0x8b, 0xb8, + 0x59, 0x2d, 0xaf, 0xcd, 0xa7, 0x6e, 0x66, 0x8b, 0x21, 0x40, 0x51, 0xce, 0xbd, 0x2d, 0xc6, 0x4b, + 0xc9, 0x4f, 0xf7, 0xe7, 0x46, 0x7e, 0xf9, 0xc5, 0x47, 0x0b, 0x9a, 0xae, 0xa6, 0xa0, 0x32, 0x24, + 0xee, 0xe2, 0x16, 0x23, 0x3c, 0x1b, 0xcb, 0x8f, 0xce, 0xa7, 0x6e, 0x5e, 0x2c, 0x0e, 0xe7, 0xbc, + 0xb8, 0x85, 0x5b, 0xd4, 0xc2, 0xdc, 0xe9, 0x47, 0x91, 0x73, 0x0b, 0x1f, 0xc6, 0x20, 0xb3, 0xe2, + 0xb4, 0xdb, 0x94, 0x31, 0xea, 0xd8, 0x3a, 0xe6, 0x84, 0xa1, 0x1a, 0xc4, 0x5d, 0xcc, 0x89, 0x50, + 0x2a, 0x59, 0x7a, 0xd5, 0x9b, 0xf4, 0xa7, 0xfd, 0xb9, 0x2b, 0x4d, 0xca, 0x77, 0xba, 0x8d, 0xa2, + 0xe9, 0xb4, 0x15, 0x8d, 0xea, 0xcf, 0x75, 0x66, 0xed, 0xaa, 0x9d, 0x96, 0x89, 0xf9, 0xf9, 0xc7, + 0xd7, 0x41, 0x29, 0x52, 0x26, 0xa6, 0x2e, 0x90, 0xd0, 0x5b, 0x30, 0xde, 0xc6, 0x7b, 0x86, 0x40, + 0x8d, 0x9d, 0x02, 0xea, 0x58, 0x1b, 0xef, 0x79, 0xba, 0x22, 0x0b, 0x32, 0x1e, 0xb0, 0xb9, 0x83, + 0xed, 0x26, 0x91, 0xf8, 0xa3, 0xa7, 0x80, 0x9f, 0x6e, 0xe3, 0xbd, 0x15, 0x81, 0xe9, 0xad, 0xb2, + 0x34, 0xfe, 0xc1, 0xa3, 0xb9, 0x91, 0xbf, 0x3d, 0x9a, 0xd3, 0x0a, 0x9f, 0x68, 0x00, 0x21, 0x5d, + 0x08, 0xc3, 0x94, 0x19, 0xb4, 0xc4, 0xf2, 0x4c, 0x1d, 0xe5, 0xd5, 0xc3, 0x4e, 0x63, 0x80, 0xec, + 0x52, 0xda, 0x53, 0xf4, 0xf1, 0xfe, 0x9c, 0x26, 0xcf, 0x25, 0x63, 0x0e, 0x1c, 0xc6, 0x1b, 0x90, + 0xea, 0x76, 0x2c, 0xcc, 0x89, 0xe1, 0x59, 0xb6, 0x60, 0x2f, 0x75, 0x33, 0x57, 0x94, 0x66, 0x5f, + 0xf4, 0xcd, 0xbe, 0xb8, 0xe1, 0x9b, 0xbd, 0x04, 0x7c, 0xff, 0x2f, 0x3e, 0x20, 0xc8, 0xd9, 0xde, + 0x78, 0x64, 0x1f, 0x1f, 0x6a, 0x90, 0x2a, 0x13, 0x66, 0xba, 0xb4, 0xe3, 0x39, 0x13, 0xca, 0xc2, + 0x58, 0xdb, 0xb1, 0xe9, 0xae, 0x32, 0xc5, 0xa4, 0xee, 0x37, 0x51, 0x0e, 0xc6, 0xa9, 0x45, 0x6c, + 0x4e, 0x79, 0x4f, 0x1e, 0x9d, 0x1e, 0xb4, 0xbd, 0x59, 0xf7, 0x48, 0x83, 0x51, 0x9f, 0x75, 0xdd, + 0x6f, 0xa2, 0x57, 0x60, 0x8a, 0x11, 0xb3, 0xeb, 0x52, 0xde, 0x33, 0x4c, 0xc7, 0xe6, 0xd8, 0xe4, + 0xd9, 0xb8, 0x10, 0xc9, 0xf8, 0xfd, 0x2b, 0xb2, 0xdb, 0x03, 0xb1, 0x08, 0xc7, 0xb4, 0xc5, 0xb2, + 0x2f, 0x48, 0x10, 0xd5, 0x8c, 0xa8, 0xfb, 0xeb, 0x24, 0x24, 0x03, 0x33, 0x46, 0x2b, 0x30, 0xe5, + 0x74, 0x88, 0xeb, 0x7d, 0x1b, 0xd8, 0xb2, 0x5c, 0xc2, 0x98, 0xb2, 0xd5, 0xec, 0xe7, 0x1f, 0x5f, + 0x9f, 0x51, 0xc4, 0x2f, 0xcb, 0x91, 0x3a, 0x77, 0xa9, 0xdd, 0xd4, 0x33, 0xfe, 0x0c, 0xd5, 0x8d, + 0xde, 0xf1, 0x8e, 0xce, 0x66, 0xc4, 0x66, 0x5d, 0x66, 0x74, 0xba, 0x8d, 0x5d, 0xd2, 0x53, 0xe4, + 0xce, 0x1c, 0x20, 0x77, 0xd9, 0xee, 0x95, 0xb2, 0xbf, 0x0f, 0xa1, 0x4d, 0xb7, 0xd7, 0xe1, 0x4e, + 0xb1, 0xd6, 0x6d, 0xdc, 0x21, 0x3d, 0xef, 0xc8, 0x14, 0x4e, 0x4d, 0xc0, 0xa0, 0xb3, 0x90, 0xf8, + 0x0e, 0xa6, 0x2d, 0x62, 0x09, 0x56, 0xc6, 0x75, 0xd5, 0x42, 0x4b, 0x90, 0x60, 0x1c, 0xf3, 0x2e, + 0x13, 0x54, 0x4c, 0xde, 0x2c, 0x1c, 0x66, 0x23, 0x25, 0xc7, 0xb6, 0xea, 0x42, 0x52, 0x57, 0x33, + 0xd0, 0x06, 0x24, 0xb8, 0xb3, 0x4b, 0x6c, 0x45, 0xd2, 0x89, 0xec, 0xbb, 0x6a, 0xf3, 0x88, 0x7d, + 0x57, 0x6d, 0xae, 0x2b, 0x2c, 0xd4, 0x84, 0x29, 0x8b, 0xb4, 0x48, 0x53, 0x50, 0xc9, 0x76, 0xb0, + 0x4b, 0x58, 0x36, 0x71, 0x0a, 0xfe, 0x93, 0x09, 0x50, 0xeb, 0x02, 0x14, 0xd5, 0x20, 0x65, 0x85, + 0xe6, 0x96, 0x1d, 0x13, 0x44, 0x5f, 0x3a, 0x6c, 0xff, 0x11, 0xcb, 0x8c, 0xc6, 0xac, 0x28, 0x84, + 0x67, 0x61, 0x5d, 0xbb, 0xe1, 0xd8, 0x16, 0xb5, 0x9b, 0xc6, 0x0e, 0xa1, 0xcd, 0x1d, 0x9e, 0x1d, + 0xcf, 0x6b, 0xf3, 0xa3, 0x7a, 0x26, 0xe8, 0xbf, 0x2d, 0xba, 0x51, 0x0d, 0x26, 0x43, 0x51, 0xe1, + 0x45, 0xc9, 0x93, 0x7a, 0x51, 0x3a, 0x00, 0xf0, 0x44, 0xd0, 0x9b, 0x00, 0xa1, 0x9f, 0x66, 0x41, + 0xa0, 0x15, 0x9e, 0xed, 0xf1, 0xd1, 0xcd, 0x44, 0x00, 0x90, 0x0d, 0x67, 0xda, 0xd4, 0x36, 0x18, + 0x69, 0x6d, 0x1b, 0x8a, 0x39, 0x0f, 0x37, 0x25, 0x4e, 0xe2, 0xb5, 0xff, 0xe4, 0xa4, 0xb3, 0x9a, + 0x3e, 0xdd, 0xa6, 0x76, 0x9d, 0xb4, 0xb6, 0xcb, 0x01, 0x30, 0x7a, 0x15, 0x5e, 0x0a, 0x09, 0x71, + 0x6c, 0x63, 0xc7, 0x69, 0x59, 0x86, 0x4b, 0xb6, 0x0d, 0xd3, 0xe9, 0xda, 0x3c, 0x3b, 0x21, 0x68, + 0x3c, 0x17, 0x88, 0xac, 0xdb, 0xb7, 0x9d, 0x96, 0xa5, 0x93, 0xed, 0x15, 0x6f, 0x18, 0x5d, 0x82, + 0x90, 0x0d, 0x83, 0x5a, 0x2c, 0x9b, 0xce, 0x8f, 0xce, 0xc7, 0xf5, 0x89, 0xa0, 0xb3, 0x6a, 0x31, + 0xf4, 0x03, 0x0d, 0x5e, 0xbc, 0xeb, 0x7b, 0xac, 0xe1, 0x0d, 0xf8, 0xf6, 0x35, 0x29, 0x76, 0xb5, + 0x76, 0x32, 0xfb, 0xfa, 0xe7, 0xfe, 0xdc, 0x85, 0x1e, 0x6e, 0xb7, 0x96, 0x0a, 0x43, 0x41, 0x0b, + 0xfa, 0x99, 0xa0, 0x5f, 0x38, 0x8f, 0xb4, 0xba, 0x5d, 0x48, 0xb7, 0xe8, 0x77, 0xbb, 0x34, 0x58, + 0x3b, 0x23, 0xd6, 0xbe, 0x75, 0xe2, 0xb5, 0x67, 0xe4, 0xda, 0x7d, 0x60, 0x05, 0x7d, 0x42, 0xb6, + 0xe5, 0x62, 0x4b, 0x13, 0xf7, 0x1f, 0xcd, 0x8d, 0xa8, 0x88, 0x35, 0x52, 0xa8, 0xc1, 0xc4, 0x16, + 0x6e, 0xa9, 0x60, 0x43, 0x18, 0xfa, 0x3a, 0x24, 0xb1, 0xdf, 0xc8, 0x6a, 0xf9, 0xd1, 0x23, 0x83, + 0x55, 0x28, 0x2a, 0x63, 0xe0, 0xf7, 0xff, 0x9c, 0xd7, 0x0a, 0x3f, 0xd7, 0x20, 0x51, 0xde, 0xaa, + 0x61, 0xea, 0xa2, 0x0a, 0x4c, 0x87, 0x6e, 0x7b, 0xdc, 0x08, 0x18, 0x7a, 0xba, 0x1f, 0x02, 0x2b, + 0x30, 0x1d, 0xb2, 0xe9, 0xc3, 0xc4, 0x9e, 0x05, 0x13, 0x4c, 0x51, 0xfd, 0x03, 0x1b, 0x7f, 0x03, + 0xc6, 0xa4, 0x96, 0x0c, 0x7d, 0x13, 0x5e, 0xe8, 0x78, 0x1f, 0x62, 0xbf, 0xa9, 0x9b, 0xb3, 0x87, + 0xba, 0xbb, 0x90, 0x8f, 0x3a, 0x87, 0x9c, 0x57, 0xf8, 0x97, 0x06, 0x50, 0xde, 0xda, 0xda, 0x70, + 0x69, 0xa7, 0x45, 0xf8, 0x69, 0x6d, 0x7b, 0x35, 0x6a, 0x99, 0xcc, 0x35, 0x8f, 0xbd, 0xf5, 0xd0, + 0xc6, 0xea, 0xae, 0x39, 0x14, 0xcd, 0x62, 0x3c, 0x40, 0x1b, 0x3d, 0x36, 0x5a, 0x99, 0xf1, 0xe1, + 0x5c, 0xbe, 0x0d, 0xa9, 0x70, 0xfb, 0x0c, 0x55, 0x61, 0x9c, 0xab, 0x6f, 0x45, 0x69, 0xe1, 0x70, + 0x4a, 0xfd, 0x69, 0x51, 0x5a, 0x83, 0xe9, 0x85, 0x5f, 0xc4, 0x00, 0x22, 0x01, 0xe1, 0x4b, 0x65, + 0x50, 0xde, 0x5d, 0xa7, 0xfc, 0xf5, 0x34, 0xde, 0x72, 0x0a, 0x0b, 0x5d, 0x86, 0xc9, 0xfe, 0xd8, + 0x21, 0x6e, 0xe1, 0x71, 0x3d, 0xdd, 0x17, 0x39, 0x06, 0x4e, 0xe0, 0x7e, 0x0c, 0xce, 0x6c, 0xfa, + 0x71, 0xed, 0x4b, 0x4b, 0xd8, 0x26, 0x8c, 0x11, 0x9b, 0xbb, 0x54, 0x30, 0xe6, 0xd9, 0xc5, 0xff, + 0x1f, 0x66, 0x17, 0x43, 0xf6, 0x52, 0xb1, 0xb9, 0xdb, 0x8b, 0x5a, 0x89, 0x8f, 0x35, 0x40, 0xc5, + 0xef, 0x46, 0x21, 0x7b, 0xd8, 0x74, 0x74, 0x15, 0x32, 0xa6, 0x4b, 0x44, 0x87, 0x7f, 0x19, 0x6b, + 0xe2, 0x16, 0x99, 0xf4, 0xbb, 0xd5, 0x5d, 0xac, 0x83, 0xf7, 0xc2, 0xf5, 0x8c, 0xd0, 0x13, 0x7d, + 0xbe, 0x27, 0xed, 0x64, 0x88, 0x20, 0x6e, 0x63, 0x02, 0x19, 0x6a, 0x53, 0x4e, 0x71, 0xcb, 0x68, + 0xe0, 0x16, 0xb6, 0xcd, 0xe7, 0x49, 0x02, 0x0e, 0x3e, 0x92, 0x26, 0x15, 0x68, 0x49, 0x62, 0xa2, + 0x2d, 0x18, 0xf3, 0xe1, 0xe3, 0xa7, 0x00, 0xef, 0x83, 0xa1, 0x8b, 0x30, 0x11, 0xbd, 0x4f, 0xc5, + 0x03, 0x2f, 0xae, 0xa7, 0x22, 0xd7, 0xe9, 0xb3, 0x2e, 0xec, 0xc4, 0x91, 0x17, 0x76, 0xe4, 0x1d, + 0xfd, 0xdb, 0x51, 0x98, 0xd6, 0x89, 0xf5, 0x15, 0x3c, 0xbc, 0x6f, 0x01, 0xc8, 0x38, 0xe0, 0xc5, + 0xe8, 0xe7, 0x38, 0xbf, 0x83, 0x71, 0x25, 0x29, 0xf1, 0xca, 0x8c, 0xff, 0x2f, 0x4f, 0xf0, 0x0f, + 0x31, 0x98, 0x88, 0x9e, 0xe0, 0x57, 0xe0, 0x52, 0x44, 0x6b, 0x61, 0x78, 0x8b, 0x8b, 0xf0, 0xf6, + 0xca, 0x61, 0xe1, 0xed, 0x80, 0x6d, 0x1f, 0x23, 0xae, 0x7d, 0x92, 0x80, 0x44, 0x0d, 0xbb, 0xb8, + 0xcd, 0xd0, 0xfa, 0x81, 0x44, 0x41, 0x26, 0xf3, 0xe7, 0x0f, 0x98, 0x77, 0x59, 0x55, 0xa1, 0xa4, + 0x75, 0x7f, 0x70, 0x58, 0x9e, 0x70, 0x19, 0x26, 0xdb, 0x78, 0xcf, 0x08, 0x36, 0x25, 0xe9, 0x4c, + 0x8b, 0xfa, 0x42, 0x90, 0xcf, 0x32, 0x34, 0x07, 0x29, 0x4f, 0x2c, 0x8c, 0xe1, 0x9e, 0x0c, 0xb4, + 0xf1, 0x5e, 0x45, 0xf6, 0xa0, 0xeb, 0x80, 0x76, 0x82, 0xd2, 0x91, 0x11, 0x92, 0xe1, 0xc9, 0x4d, + 0x87, 0x23, 0xbe, 0xf8, 0xff, 0x01, 0x88, 0xc7, 0xb1, 0x45, 0x6c, 0xa7, 0xad, 0xb2, 0xea, 0xa4, + 0xd7, 0x53, 0xf6, 0x3a, 0xd0, 0xf7, 0x64, 0xba, 0x31, 0x50, 0xb9, 0x50, 0x89, 0xdf, 0xea, 0x89, + 0x1f, 0xc7, 0x39, 0xf9, 0x38, 0x1e, 0x02, 0x59, 0x10, 0xc9, 0x47, 0x7f, 0xc5, 0x63, 0x58, 0x66, + 0xb0, 0x8d, 0x4d, 0xee, 0xb8, 0x22, 0x2b, 0x3c, 0xbd, 0xcc, 0x40, 0x82, 0x0e, 0x66, 0x06, 0xb7, + 0x44, 0x2f, 0xfa, 0x91, 0x06, 0xe7, 0x9b, 0x2d, 0xa7, 0x81, 0x5b, 0x86, 0xff, 0xa8, 0x97, 0xa6, + 0x64, 0x98, 0xb8, 0x23, 0xf2, 0xc8, 0x64, 0x49, 0x3f, 0xb1, 0x22, 0x79, 0xa9, 0xc8, 0xa1, 0xc0, + 0x05, 0xfd, 0xac, 0x1c, 0x5b, 0x95, 0x89, 0x83, 0x1c, 0x59, 0xc1, 0x1d, 0xf4, 0x53, 0x0d, 0x2e, + 0x84, 0xfa, 0x0f, 0x51, 0x29, 0x29, 0x54, 0xda, 0x3c, 0xb1, 0x4a, 0x97, 0x06, 0xb9, 0x19, 0xa6, + 0xd5, 0xf9, 0x60, 0x78, 0x50, 0xb1, 0xa5, 0x79, 0x3f, 0xf2, 0x3c, 0xf8, 0xe2, 0xa3, 0x85, 0x97, + 0x22, 0x8b, 0xec, 0x05, 0x15, 0x60, 0xe9, 0x3c, 0x85, 0x5f, 0x69, 0x80, 0xc2, 0x67, 0x81, 0x4e, + 0x58, 0xc7, 0xb1, 0x99, 0x48, 0x95, 0x23, 0x29, 0xad, 0x76, 0x74, 0xaa, 0x1c, 0xce, 0xef, 0x4b, + 0x95, 0x23, 0xe1, 0xee, 0xb5, 0xf0, 0x12, 0x8e, 0x29, 0xdf, 0x54, 0x58, 0x0d, 0xcc, 0x48, 0x24, + 0xe7, 0xa6, 0x7d, 0x10, 0xfe, 0xa4, 0x20, 0x92, 0x8e, 0x14, 0xf6, 0x35, 0x38, 0x7f, 0x20, 0x5e, + 0x04, 0x6a, 0x9b, 0x80, 0xdc, 0xc8, 0xa0, 0xf0, 0xb9, 0x9e, 0x52, 0xff, 0xf9, 0xc2, 0xcf, 0xb4, + 0x7b, 0xe0, 0xe2, 0xfd, 0x2f, 0xbd, 0x28, 0x96, 0xe2, 0xe2, 0xaa, 0xf8, 0x4c, 0x83, 0x99, 0xa8, + 0x46, 0xc1, 0xde, 0xea, 0x30, 0x11, 0xd5, 0x45, 0xed, 0xea, 0xe5, 0xe3, 0xec, 0x2a, 0xba, 0xa1, + 0x3e, 0x10, 0x6f, 0x2f, 0x7e, 0x5c, 0x92, 0xf5, 0xe8, 0x1b, 0xc7, 0x66, 0xc9, 0x57, 0x6c, 0x68, + 0xb0, 0x8e, 0x8b, 0xc3, 0xfa, 0x71, 0x0c, 0xe2, 0x35, 0xc7, 0x69, 0x79, 0xd1, 0x63, 0xda, 0x76, + 0xb8, 0x70, 0x71, 0x62, 0x19, 0xaa, 0x26, 0x26, 0xef, 0xbb, 0xad, 0x93, 0xb1, 0xf7, 0xf7, 0xfd, + 0xb9, 0x83, 0x50, 0xfd, 0x94, 0xaa, 0x9a, 0xac, 0xed, 0xf0, 0x92, 0x10, 0xda, 0x90, 0x65, 0xb3, + 0x7b, 0x90, 0xee, 0x5f, 0x3f, 0x76, 0xe2, 0x80, 0x21, 0xd7, 0x4f, 0x3f, 0x73, 0xed, 0x89, 0x46, + 0x64, 0xe1, 0xa5, 0x71, 0xef, 0x60, 0xff, 0xe1, 0x1d, 0xee, 0x3b, 0x30, 0x15, 0x5c, 0x20, 0x9b, + 0xa2, 0xc2, 0xeb, 0x65, 0x13, 0x63, 0xb2, 0xd8, 0xeb, 0xa7, 0x87, 0xf9, 0xe8, 0xff, 0x13, 0x70, + 0xc3, 0xa4, 0xc5, 0x81, 0x39, 0x7d, 0x8c, 0xab, 0xb9, 0x85, 0x1f, 0x6a, 0x70, 0x46, 0xac, 0x47, + 0xdf, 0x23, 0xa2, 0xb6, 0xa1, 0x13, 0xd3, 0x71, 0x2d, 0x34, 0x09, 0x31, 0x6a, 0x09, 0xaa, 0xe3, + 0x7a, 0x8c, 0x5a, 0x68, 0x06, 0x5e, 0x70, 0xee, 0xd9, 0xc4, 0x55, 0x65, 0x61, 0xd9, 0x10, 0x57, + 0x9e, 0x63, 0x75, 0x5b, 0xc4, 0xc0, 0xa6, 0x7c, 0xdb, 0xc8, 0xd2, 0x70, 0x5a, 0xf6, 0x2e, 0xcb, + 0x4e, 0x74, 0x01, 0x92, 0x41, 0xd0, 0x51, 0x95, 0xe1, 0xb0, 0x43, 0x19, 0x70, 0x09, 0x0a, 0x35, + 0x22, 0x2f, 0xd3, 0xa8, 0x3a, 0xcb, 0x5d, 0xbe, 0xe3, 0xb8, 0xf4, 0x3d, 0x61, 0x40, 0xcc, 0x43, + 0x1a, 0xa8, 0xac, 0x44, 0xea, 0x27, 0x0b, 0xbf, 0xd1, 0x00, 0xc2, 0x72, 0x2a, 0xba, 0x06, 0xe7, + 0x4a, 0xeb, 0x6b, 0x65, 0xa3, 0xbe, 0xb1, 0xbc, 0xb1, 0x59, 0x37, 0x36, 0xd7, 0xea, 0xb5, 0xca, + 0x4a, 0xf5, 0x56, 0xb5, 0x52, 0x9e, 0x1a, 0xc9, 0x65, 0x1e, 0x3c, 0xcc, 0xa7, 0x36, 0x6d, 0xd6, + 0x21, 0x26, 0xdd, 0xa6, 0xc4, 0x42, 0x57, 0x60, 0xa6, 0x5f, 0xda, 0x6b, 0x55, 0xca, 0x53, 0x5a, + 0x6e, 0xe2, 0xc1, 0xc3, 0xfc, 0xb8, 0xcc, 0x86, 0x88, 0x85, 0xe6, 0xe1, 0xc5, 0x83, 0x72, 0xd5, + 0xb5, 0xd7, 0xa7, 0x62, 0xb9, 0xf4, 0x83, 0x87, 0xf9, 0x64, 0x90, 0x36, 0xa1, 0x02, 0xa0, 0xa8, + 0xa4, 0xc2, 0x1b, 0xcd, 0xc1, 0x83, 0x87, 0xf9, 0x84, 0xb4, 0xb1, 0x5c, 0xfc, 0xfe, 0xcf, 0x66, + 0x47, 0x16, 0xbe, 0x0d, 0x50, 0xb5, 0xb7, 0x5d, 0x6c, 0x0a, 0xef, 0xca, 0xc1, 0xd9, 0xea, 0xda, + 0x2d, 0x7d, 0x79, 0x65, 0xa3, 0xba, 0xbe, 0xd6, 0xaf, 0xf6, 0xc0, 0x58, 0x79, 0x7d, 0xb3, 0xb4, + 0x5a, 0x31, 0xea, 0xd5, 0xd7, 0xd7, 0xa6, 0x34, 0x74, 0x0e, 0xce, 0xf4, 0x8d, 0xbd, 0xb5, 0xb6, + 0x51, 0x7d, 0xb3, 0x32, 0x15, 0x5b, 0xf8, 0x4c, 0x83, 0x73, 0x7d, 0xac, 0xae, 0x3a, 0xe6, 0xae, + 0x22, 0x69, 0x01, 0xae, 0x6c, 0xac, 0xdf, 0xa9, 0xac, 0x55, 0xdf, 0xad, 0x18, 0xf5, 0xdb, 0xcb, + 0x7a, 0xc5, 0x58, 0x5d, 0x5f, 0xb9, 0x33, 0x94, 0x33, 0x74, 0x19, 0x2e, 0x1e, 0x21, 0xeb, 0x7d, + 0x7b, 0x7c, 0xa1, 0xab, 0x70, 0xe9, 0x48, 0x48, 0x25, 0x18, 0x43, 0xd7, 0x60, 0xfe, 0x19, 0x78, + 0x46, 0xe5, 0xed, 0x5a, 0x55, 0xf7, 0xd8, 0x1d, 0x95, 0x54, 0x95, 0x6e, 0x7d, 0xfa, 0x64, 0x56, + 0x7b, 0xfc, 0x64, 0x56, 0xfb, 0xeb, 0x93, 0x59, 0xed, 0xfd, 0xa7, 0xb3, 0x23, 0x8f, 0x9f, 0xce, + 0x8e, 0xfc, 0xf1, 0xe9, 0xec, 0xc8, 0xbb, 0xd7, 0x8e, 0xf4, 0xc4, 0xf0, 0x0a, 0x13, 0x3e, 0xd9, + 0x48, 0x88, 0xe7, 0xdd, 0xd7, 0xfe, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x29, 0x93, 0x5f, 0x4a, 0xe3, + 0x1c, 0x00, 0x00, } func (this *Pool) Description() (desc *github_com_cosmos_gogoproto_protoc_gen_gogo_descriptor.FileDescriptorSet) { @@ -1392,690 +1581,710 @@ func (this *Pool) Description() (desc *github_com_cosmos_gogoproto_protoc_gen_go func StakingDescription() (desc *github_com_cosmos_gogoproto_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_cosmos_gogoproto_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 10916 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x7b, 0x90, 0x1c, 0xc7, - 0x79, 0xdf, 0xed, 0xe3, 0xf6, 0xf1, 0xed, 0x6b, 0xae, 0xef, 0x00, 0x1c, 0x16, 0xe4, 0xdd, 0x71, - 0x28, 0x12, 0x0f, 0x92, 0x07, 0x12, 0x24, 0x40, 0xf2, 0x20, 0x8a, 0xde, 0xdd, 0x5b, 0x1c, 0x16, - 0xb8, 0x97, 0x66, 0xf7, 0xc0, 0x87, 0x63, 0x8d, 0xe7, 0x66, 0xfb, 0xee, 0x86, 0xd8, 0x9d, 0x59, - 0xcd, 0xcc, 0x02, 0x77, 0x2c, 0x57, 0x8a, 0xb6, 0x62, 0x47, 0x46, 0x1c, 0x47, 0x8e, 0x53, 0x36, - 0xfd, 0x80, 0x23, 0xf9, 0x29, 0x3b, 0x76, 0xe2, 0x87, 0x22, 0xcb, 0x51, 0xc5, 0xb1, 0x53, 0x71, - 0x22, 0xbb, 0x52, 0x89, 0xec, 0x4a, 0x25, 0x2e, 0x97, 0xc3, 0xd8, 0x94, 0x2b, 0x52, 0x24, 0x39, - 0xb6, 0x15, 0xba, 0x92, 0x94, 0xca, 0x4e, 0xaa, 0x5f, 0xf3, 0xd8, 0xc7, 0xed, 0x1e, 0x44, 0x32, - 0x4a, 0xe9, 0x1f, 0x60, 0xa7, 0xfb, 0xfb, 0x7e, 0xd3, 0xfd, 0xf5, 0xd7, 0x5f, 0x7f, 0xdf, 0xd7, - 0x3d, 0x7d, 0xf0, 0xc7, 0x65, 0x58, 0xd8, 0xb5, 0xac, 0xdd, 0x16, 0x3e, 0xdf, 0xb1, 0x2d, 0xd7, - 0xda, 0xee, 0xee, 0x9c, 0x6f, 0x62, 0x47, 0xb7, 0x8d, 0x8e, 0x6b, 0xd9, 0x8b, 0xb4, 0x0c, 0x15, - 0x18, 0xc5, 0xa2, 0xa0, 0x90, 0xd7, 0x60, 0xea, 0x8a, 0xd1, 0xc2, 0xcb, 0x1e, 0x61, 0x1d, 0xbb, - 0xe8, 0x19, 0x88, 0xef, 0x18, 0x2d, 0x3c, 0x1b, 0x59, 0x88, 0x9d, 0xc9, 0x5c, 0x78, 0xcf, 0x62, - 0x0f, 0xd3, 0x62, 0x98, 0x63, 0x93, 0x14, 0x2b, 0x94, 0x43, 0xfe, 0xeb, 0x38, 0x4c, 0x0f, 0xa8, - 0x45, 0x08, 0xe2, 0xa6, 0xd6, 0x26, 0x88, 0x91, 0x33, 0x69, 0x85, 0xfe, 0x46, 0xb3, 0x90, 0xec, - 0x68, 0xfa, 0x4d, 0x6d, 0x17, 0xcf, 0x46, 0x69, 0xb1, 0x78, 0x44, 0x73, 0x00, 0x4d, 0xdc, 0xc1, - 0x66, 0x13, 0x9b, 0xfa, 0xc1, 0x6c, 0x6c, 0x21, 0x76, 0x26, 0xad, 0x04, 0x4a, 0xd0, 0x23, 0x30, - 0xd5, 0xe9, 0x6e, 0xb7, 0x0c, 0x5d, 0x0d, 0x90, 0xc1, 0x42, 0xec, 0xcc, 0xa4, 0x22, 0xb1, 0x8a, - 0x65, 0x9f, 0xf8, 0x34, 0x14, 0x6e, 0x63, 0xed, 0x66, 0x90, 0x34, 0x43, 0x49, 0xf3, 0xa4, 0x38, - 0x40, 0x58, 0x81, 0x6c, 0x1b, 0x3b, 0x8e, 0xb6, 0x8b, 0x55, 0xf7, 0xa0, 0x83, 0x67, 0xe3, 0xb4, - 0xf7, 0x0b, 0x7d, 0xbd, 0xef, 0xed, 0x79, 0x86, 0x73, 0x35, 0x0e, 0x3a, 0x18, 0x95, 0x20, 0x8d, - 0xcd, 0x6e, 0x9b, 0x21, 0x4c, 0x0e, 0x91, 0x5f, 0xd5, 0xec, 0xb6, 0x7b, 0x51, 0x52, 0x84, 0x8d, - 0x43, 0x24, 0x1d, 0x6c, 0xdf, 0x32, 0x74, 0x3c, 0x9b, 0xa0, 0x00, 0xa7, 0xfb, 0x00, 0xea, 0xac, - 0xbe, 0x17, 0x43, 0xf0, 0xa1, 0x0a, 0xa4, 0xf1, 0xbe, 0x8b, 0x4d, 0xc7, 0xb0, 0xcc, 0xd9, 0x24, - 0x05, 0x79, 0x68, 0xc0, 0x28, 0xe2, 0x56, 0xb3, 0x17, 0xc2, 0xe7, 0x43, 0x97, 0x20, 0x69, 0x75, - 0x5c, 0xc3, 0x32, 0x9d, 0xd9, 0xd4, 0x42, 0xe4, 0x4c, 0xe6, 0xc2, 0x7d, 0x03, 0x15, 0x61, 0x83, - 0xd1, 0x28, 0x82, 0x18, 0xd5, 0x40, 0x72, 0xac, 0xae, 0xad, 0x63, 0x55, 0xb7, 0x9a, 0x58, 0x35, - 0xcc, 0x1d, 0x6b, 0x36, 0x4d, 0x01, 0xe6, 0xfb, 0x3b, 0x42, 0x09, 0x2b, 0x56, 0x13, 0xd7, 0xcc, - 0x1d, 0x4b, 0xc9, 0x3b, 0xa1, 0x67, 0x74, 0x1c, 0x12, 0xce, 0x81, 0xe9, 0x6a, 0xfb, 0xb3, 0x59, - 0xaa, 0x21, 0xfc, 0x89, 0xa8, 0x0e, 0x6e, 0x1a, 0xe4, 0x75, 0xb3, 0x39, 0xa6, 0x3a, 0xfc, 0x51, - 0xfe, 0xb5, 0x04, 0x14, 0xc6, 0x51, 0xbe, 0xcb, 0x30, 0xb9, 0x43, 0xfa, 0x3f, 0x1b, 0x3d, 0x8a, - 0x74, 0x18, 0x4f, 0x58, 0xbc, 0x89, 0x7b, 0x14, 0x6f, 0x09, 0x32, 0x26, 0x76, 0x5c, 0xdc, 0x64, - 0xba, 0x12, 0x1b, 0x53, 0xdb, 0x80, 0x31, 0xf5, 0x2b, 0x5b, 0xfc, 0x9e, 0x94, 0xed, 0x45, 0x28, - 0x78, 0x4d, 0x52, 0x6d, 0xcd, 0xdc, 0x15, 0x5a, 0x7b, 0x7e, 0x54, 0x4b, 0x16, 0xab, 0x82, 0x4f, - 0x21, 0x6c, 0x4a, 0x1e, 0x87, 0x9e, 0xd1, 0x32, 0x80, 0x65, 0x62, 0x6b, 0x47, 0x6d, 0x62, 0xbd, - 0x35, 0x9b, 0x1a, 0x22, 0xa5, 0x0d, 0x42, 0xd2, 0x27, 0x25, 0x8b, 0x95, 0xea, 0x2d, 0xf4, 0xac, - 0xaf, 0x84, 0xc9, 0x21, 0x3a, 0xb4, 0xc6, 0xa6, 0x5f, 0x9f, 0x1e, 0x6e, 0x41, 0xde, 0xc6, 0x64, - 0x46, 0xe0, 0x26, 0xef, 0x59, 0x9a, 0x36, 0x62, 0x71, 0x64, 0xcf, 0x14, 0xce, 0xc6, 0x3a, 0x96, - 0xb3, 0x83, 0x8f, 0xe8, 0x41, 0xf0, 0x0a, 0x54, 0xaa, 0x56, 0x40, 0xed, 0x53, 0x56, 0x14, 0xae, - 0x6b, 0x6d, 0x5c, 0x7c, 0x15, 0xf2, 0x61, 0xf1, 0xa0, 0x19, 0x98, 0x74, 0x5c, 0xcd, 0x76, 0xa9, - 0x16, 0x4e, 0x2a, 0xec, 0x01, 0x49, 0x10, 0xc3, 0x66, 0x93, 0xda, 0xbf, 0x49, 0x85, 0xfc, 0x44, - 0xdf, 0xe4, 0x77, 0x38, 0x46, 0x3b, 0xfc, 0x70, 0xff, 0x88, 0x86, 0x90, 0x7b, 0xfb, 0x5d, 0x7c, - 0x1a, 0x72, 0xa1, 0x0e, 0x8c, 0xfb, 0x6a, 0xf9, 0xdb, 0xe0, 0xd8, 0x40, 0x68, 0xf4, 0x22, 0xcc, - 0x74, 0x4d, 0xc3, 0x74, 0xb1, 0xdd, 0xb1, 0x31, 0xd1, 0x58, 0xf6, 0xaa, 0xd9, 0xcf, 0x27, 0x87, - 0xe8, 0xdc, 0x56, 0x90, 0x9a, 0xa1, 0x28, 0xd3, 0xdd, 0xfe, 0xc2, 0x73, 0xe9, 0xd4, 0x17, 0x92, - 0xd2, 0x6b, 0xaf, 0xbd, 0xf6, 0x5a, 0x54, 0xfe, 0xcd, 0x04, 0xcc, 0x0c, 0x9a, 0x33, 0x03, 0xa7, - 0xef, 0x71, 0x48, 0x98, 0xdd, 0xf6, 0x36, 0xb6, 0xa9, 0x90, 0x26, 0x15, 0xfe, 0x84, 0x4a, 0x30, - 0xd9, 0xd2, 0xb6, 0x71, 0x6b, 0x36, 0xbe, 0x10, 0x39, 0x93, 0xbf, 0xf0, 0xc8, 0x58, 0xb3, 0x72, - 0x71, 0x95, 0xb0, 0x28, 0x8c, 0x13, 0xbd, 0x0f, 0xe2, 0xdc, 0x78, 0x13, 0x84, 0x73, 0xe3, 0x21, - 0x90, 0xb9, 0xa4, 0x50, 0x3e, 0x74, 0x0a, 0xd2, 0xe4, 0x7f, 0xa6, 0x1b, 0x09, 0xda, 0xe6, 0x14, - 0x29, 0x20, 0x7a, 0x81, 0x8a, 0x90, 0xa2, 0xd3, 0xa4, 0x89, 0xc5, 0xa2, 0xe7, 0x3d, 0x13, 0xc5, - 0x6a, 0xe2, 0x1d, 0xad, 0xdb, 0x72, 0xd5, 0x5b, 0x5a, 0xab, 0x8b, 0xa9, 0xc2, 0xa7, 0x95, 0x2c, - 0x2f, 0xbc, 0x41, 0xca, 0xd0, 0x3c, 0x64, 0xd8, 0xac, 0x32, 0xcc, 0x26, 0xde, 0xa7, 0x76, 0x75, - 0x52, 0x61, 0x13, 0xad, 0x46, 0x4a, 0xc8, 0xeb, 0x5f, 0x71, 0x2c, 0x53, 0xa8, 0x26, 0x7d, 0x05, - 0x29, 0xa0, 0xaf, 0x7f, 0xba, 0xd7, 0xa4, 0xdf, 0x3f, 0xb8, 0x7b, 0x7d, 0x73, 0xe9, 0x34, 0x14, - 0x28, 0xc5, 0x93, 0x7c, 0xe8, 0xb5, 0xd6, 0xec, 0xd4, 0x42, 0xe4, 0x4c, 0x4a, 0xc9, 0xb3, 0xe2, - 0x0d, 0x5e, 0x2a, 0x7f, 0x32, 0x0a, 0x71, 0x6a, 0x58, 0x0a, 0x90, 0x69, 0xbc, 0xb4, 0x59, 0x55, - 0x97, 0x37, 0xb6, 0xca, 0xab, 0x55, 0x29, 0x82, 0xf2, 0x00, 0xb4, 0xe0, 0xca, 0xea, 0x46, 0xa9, - 0x21, 0x45, 0xbd, 0xe7, 0xda, 0x7a, 0xe3, 0xd2, 0x53, 0x52, 0xcc, 0x63, 0xd8, 0x62, 0x05, 0xf1, - 0x20, 0xc1, 0x93, 0x17, 0xa4, 0x49, 0x24, 0x41, 0x96, 0x01, 0xd4, 0x5e, 0xac, 0x2e, 0x5f, 0x7a, - 0x4a, 0x4a, 0x84, 0x4b, 0x9e, 0xbc, 0x20, 0x25, 0x51, 0x0e, 0xd2, 0xb4, 0xa4, 0xbc, 0xb1, 0xb1, - 0x2a, 0xa5, 0x3c, 0xcc, 0x7a, 0x43, 0xa9, 0xad, 0xaf, 0x48, 0x69, 0x0f, 0x73, 0x45, 0xd9, 0xd8, - 0xda, 0x94, 0xc0, 0x43, 0x58, 0xab, 0xd6, 0xeb, 0xa5, 0x95, 0xaa, 0x94, 0xf1, 0x28, 0xca, 0x2f, - 0x35, 0xaa, 0x75, 0x29, 0x1b, 0x6a, 0xd6, 0x93, 0x17, 0xa4, 0x9c, 0xf7, 0x8a, 0xea, 0xfa, 0xd6, - 0x9a, 0x94, 0x47, 0x53, 0x90, 0x63, 0xaf, 0x10, 0x8d, 0x28, 0xf4, 0x14, 0x5d, 0x7a, 0x4a, 0x92, - 0xfc, 0x86, 0x30, 0x94, 0xa9, 0x50, 0xc1, 0xa5, 0xa7, 0x24, 0x24, 0x57, 0x60, 0x92, 0xaa, 0x21, - 0x42, 0x90, 0x5f, 0x2d, 0x95, 0xab, 0xab, 0xea, 0xc6, 0x66, 0xa3, 0xb6, 0xb1, 0x5e, 0x5a, 0x95, - 0x22, 0x7e, 0x99, 0x52, 0x7d, 0xff, 0x56, 0x4d, 0xa9, 0x2e, 0x4b, 0xd1, 0x60, 0xd9, 0x66, 0xb5, - 0xd4, 0xa8, 0x2e, 0x4b, 0x31, 0x59, 0x87, 0x99, 0x41, 0x06, 0x75, 0xe0, 0x14, 0x0a, 0xe8, 0x42, - 0x74, 0x88, 0x2e, 0x50, 0xac, 0x5e, 0x5d, 0x90, 0x3f, 0x17, 0x85, 0xe9, 0x01, 0x8b, 0xca, 0xc0, - 0x97, 0x3c, 0x0f, 0x93, 0x4c, 0x97, 0xd9, 0x32, 0x7b, 0x76, 0xe0, 0xea, 0x44, 0x35, 0xbb, 0x6f, - 0xa9, 0xa5, 0x7c, 0x41, 0x27, 0x24, 0x36, 0xc4, 0x09, 0x21, 0x10, 0x7d, 0x0a, 0xfb, 0x2d, 0x7d, - 0xc6, 0x9f, 0xad, 0x8f, 0x97, 0xc6, 0x59, 0x1f, 0x69, 0xd9, 0xd1, 0x16, 0x81, 0xc9, 0x01, 0x8b, - 0xc0, 0x65, 0x98, 0xea, 0x03, 0x1a, 0xdb, 0x18, 0x7f, 0x28, 0x02, 0xb3, 0xc3, 0x84, 0x33, 0xc2, - 0x24, 0x46, 0x43, 0x26, 0xf1, 0x72, 0xaf, 0x04, 0x1f, 0x18, 0x3e, 0x08, 0x7d, 0x63, 0xfd, 0x33, - 0x11, 0x38, 0x3e, 0xd8, 0xd9, 0x1c, 0xd8, 0x86, 0xf7, 0x41, 0xa2, 0x8d, 0xdd, 0x3d, 0x4b, 0xb8, - 0x55, 0x0f, 0x0f, 0x58, 0xac, 0x49, 0x75, 0xef, 0x60, 0x73, 0xae, 0xe0, 0x6a, 0x1f, 0x1b, 0xe6, - 0x31, 0xb2, 0xd6, 0xf4, 0xb5, 0xf4, 0xbb, 0xa3, 0x70, 0x6c, 0x20, 0xf8, 0xc0, 0x86, 0xde, 0x0f, - 0x60, 0x98, 0x9d, 0xae, 0xcb, 0x5c, 0x27, 0x66, 0x89, 0xd3, 0xb4, 0x84, 0x1a, 0x2f, 0x62, 0x65, - 0xbb, 0xae, 0x57, 0x1f, 0xa3, 0xf5, 0xc0, 0x8a, 0x28, 0xc1, 0x33, 0x7e, 0x43, 0xe3, 0xb4, 0xa1, - 0x73, 0x43, 0x7a, 0xda, 0xa7, 0x98, 0x8f, 0x83, 0xa4, 0xb7, 0x0c, 0x6c, 0xba, 0xaa, 0xe3, 0xda, - 0x58, 0x6b, 0x1b, 0xe6, 0x2e, 0x5d, 0x6a, 0x52, 0x4b, 0x93, 0x3b, 0x5a, 0xcb, 0xc1, 0x4a, 0x81, - 0x55, 0xd7, 0x45, 0x2d, 0xe1, 0xa0, 0x0a, 0x64, 0x07, 0x38, 0x12, 0x21, 0x0e, 0x56, 0xed, 0x71, - 0xc8, 0xdf, 0x97, 0x86, 0x4c, 0xc0, 0x35, 0x47, 0x0f, 0x40, 0xf6, 0x15, 0xed, 0x96, 0xa6, 0x8a, - 0x70, 0x8b, 0x49, 0x22, 0x43, 0xca, 0x36, 0x79, 0xc8, 0xf5, 0x38, 0xcc, 0x50, 0x12, 0xab, 0xeb, - 0x62, 0x5b, 0xd5, 0x5b, 0x9a, 0xe3, 0x50, 0xa1, 0xa5, 0x28, 0x29, 0x22, 0x75, 0x1b, 0xa4, 0xaa, - 0x22, 0x6a, 0xd0, 0x45, 0x98, 0xa6, 0x1c, 0xed, 0x6e, 0xcb, 0x35, 0x3a, 0x2d, 0xac, 0x92, 0x00, - 0xd0, 0xa1, 0x4b, 0x8e, 0xd7, 0xb2, 0x29, 0x42, 0xb1, 0xc6, 0x09, 0x48, 0x8b, 0x1c, 0xb4, 0x0c, - 0xf7, 0x53, 0xb6, 0x5d, 0x6c, 0x62, 0x5b, 0x73, 0xb1, 0x8a, 0x3f, 0xd8, 0xd5, 0x5a, 0x8e, 0xaa, - 0x99, 0x4d, 0x75, 0x4f, 0x73, 0xf6, 0x66, 0x67, 0x08, 0x40, 0x39, 0x3a, 0x1b, 0x51, 0x4e, 0x12, - 0xc2, 0x15, 0x4e, 0x57, 0xa5, 0x64, 0x25, 0xb3, 0x79, 0x55, 0x73, 0xf6, 0xd0, 0x12, 0x1c, 0xa7, - 0x28, 0x8e, 0x6b, 0x1b, 0xe6, 0xae, 0xaa, 0xef, 0x61, 0xfd, 0xa6, 0xda, 0x75, 0x77, 0x9e, 0x99, - 0x3d, 0x15, 0x7c, 0x3f, 0x6d, 0x61, 0x9d, 0xd2, 0x54, 0x08, 0xc9, 0x96, 0xbb, 0xf3, 0x0c, 0xaa, - 0x43, 0x96, 0x0c, 0x46, 0xdb, 0x78, 0x15, 0xab, 0x3b, 0x96, 0x4d, 0xd7, 0xd0, 0xfc, 0x00, 0xd3, - 0x14, 0x90, 0xe0, 0xe2, 0x06, 0x67, 0x58, 0xb3, 0x9a, 0x78, 0x69, 0xb2, 0xbe, 0x59, 0xad, 0x2e, - 0x2b, 0x19, 0x81, 0x72, 0xc5, 0xb2, 0x89, 0x42, 0xed, 0x5a, 0x9e, 0x80, 0x33, 0x4c, 0xa1, 0x76, - 0x2d, 0x21, 0xde, 0x8b, 0x30, 0xad, 0xeb, 0xac, 0xcf, 0x86, 0xae, 0xf2, 0x30, 0xcd, 0x99, 0x95, - 0x42, 0xc2, 0xd2, 0xf5, 0x15, 0x46, 0xc0, 0x75, 0xdc, 0x41, 0xcf, 0xc2, 0x31, 0x5f, 0x58, 0x41, - 0xc6, 0xa9, 0xbe, 0x5e, 0xf6, 0xb2, 0x5e, 0x84, 0xe9, 0xce, 0x41, 0x3f, 0x23, 0x0a, 0xbd, 0xb1, - 0x73, 0xd0, 0xcb, 0xf6, 0x34, 0xcc, 0x74, 0xf6, 0x3a, 0xfd, 0x7c, 0xe7, 0x82, 0x7c, 0xa8, 0xb3, - 0xd7, 0xe9, 0x65, 0x7c, 0x88, 0xc6, 0xec, 0x36, 0xd6, 0x35, 0x17, 0x37, 0x67, 0x4f, 0x04, 0xc9, - 0x03, 0x15, 0x68, 0x11, 0x24, 0x5d, 0x57, 0xb1, 0xa9, 0x6d, 0xb7, 0xb0, 0xaa, 0xd9, 0xd8, 0xd4, - 0x9c, 0xd9, 0x79, 0x4a, 0x1c, 0x77, 0xed, 0x2e, 0x56, 0xf2, 0xba, 0x5e, 0xa5, 0x95, 0x25, 0x5a, - 0x87, 0xce, 0xc1, 0x94, 0xb5, 0xfd, 0x8a, 0xce, 0x34, 0x52, 0xed, 0xd8, 0x78, 0xc7, 0xd8, 0x9f, - 0x7d, 0x0f, 0x15, 0x6f, 0x81, 0x54, 0x50, 0x7d, 0xdc, 0xa4, 0xc5, 0xe8, 0x2c, 0x48, 0xba, 0xb3, - 0xa7, 0xd9, 0x1d, 0x6a, 0x92, 0x9d, 0x8e, 0xa6, 0xe3, 0xd9, 0x87, 0x18, 0x29, 0x2b, 0x5f, 0x17, - 0xc5, 0x64, 0x46, 0x38, 0xb7, 0x8d, 0x1d, 0x57, 0x20, 0x9e, 0x66, 0x33, 0x82, 0x96, 0x71, 0xb4, - 0x33, 0x20, 0x11, 0x49, 0x84, 0x5e, 0x7c, 0x86, 0x92, 0xe5, 0x3b, 0x7b, 0x9d, 0xe0, 0x7b, 0x1f, - 0x84, 0x1c, 0xa1, 0xf4, 0x5f, 0x7a, 0x96, 0x39, 0x6e, 0x9d, 0xbd, 0xc0, 0x1b, 0x9f, 0x82, 0xe3, - 0x84, 0xa8, 0x8d, 0x5d, 0xad, 0xa9, 0xb9, 0x5a, 0x80, 0xfa, 0x51, 0x4a, 0x4d, 0xc4, 0xbe, 0xc6, - 0x2b, 0x43, 0xed, 0xb4, 0xbb, 0xdb, 0x07, 0x9e, 0x62, 0x3d, 0xc6, 0xda, 0x49, 0xca, 0x84, 0x6a, - 0xbd, 0x63, 0xce, 0xb9, 0xbc, 0x04, 0xd9, 0xa0, 0xde, 0xa3, 0x34, 0x30, 0xcd, 0x97, 0x22, 0xc4, - 0x09, 0xaa, 0x6c, 0x2c, 0x13, 0xf7, 0xe5, 0xe5, 0xaa, 0x14, 0x25, 0x6e, 0xd4, 0x6a, 0xad, 0x51, - 0x55, 0x95, 0xad, 0xf5, 0x46, 0x6d, 0xad, 0x2a, 0xc5, 0x02, 0x8e, 0xfd, 0xb5, 0x78, 0xea, 0x61, - 0xe9, 0xb4, 0xfc, 0xe9, 0x18, 0xe4, 0xc3, 0x91, 0x1a, 0x7a, 0x2f, 0x9c, 0x10, 0x09, 0x17, 0x07, - 0xbb, 0xea, 0x6d, 0xc3, 0xa6, 0x13, 0xb2, 0xad, 0xb1, 0xc5, 0xd1, 0xd3, 0x9f, 0x19, 0x4e, 0x55, - 0xc7, 0xee, 0x0b, 0x86, 0x4d, 0xa6, 0x5b, 0x5b, 0x73, 0xd1, 0x2a, 0xcc, 0x9b, 0x96, 0xea, 0xb8, - 0x9a, 0xd9, 0xd4, 0xec, 0xa6, 0xea, 0xa7, 0xba, 0x54, 0x4d, 0xd7, 0xb1, 0xe3, 0x58, 0x6c, 0x21, - 0xf4, 0x50, 0xee, 0x33, 0xad, 0x3a, 0x27, 0xf6, 0x57, 0x88, 0x12, 0x27, 0xed, 0x51, 0xdf, 0xd8, - 0x30, 0xf5, 0x3d, 0x05, 0xe9, 0xb6, 0xd6, 0x51, 0xb1, 0xe9, 0xda, 0x07, 0xd4, 0x3f, 0x4f, 0x29, - 0xa9, 0xb6, 0xd6, 0xa9, 0x92, 0x67, 0x74, 0x03, 0x1e, 0xf6, 0x49, 0xd5, 0x16, 0xde, 0xd5, 0xf4, - 0x03, 0x95, 0x3a, 0xe3, 0x34, 0x6d, 0xa0, 0xea, 0x96, 0xb9, 0xd3, 0x32, 0x74, 0xd7, 0xa1, 0xf6, - 0x81, 0xd9, 0x38, 0xd9, 0xe7, 0x58, 0xa5, 0x0c, 0xd7, 0x1c, 0xcb, 0xa4, 0x3e, 0x78, 0x45, 0x50, - 0xbf, 0x2b, 0xe1, 0xd7, 0xb5, 0x78, 0x2a, 0x2e, 0x4d, 0x5e, 0x8b, 0xa7, 0x26, 0xa5, 0xc4, 0xb5, - 0x78, 0x2a, 0x21, 0x25, 0xaf, 0xc5, 0x53, 0x29, 0x29, 0x7d, 0x2d, 0x9e, 0x4a, 0x4b, 0x20, 0xff, - 0x6a, 0x0a, 0xb2, 0xc1, 0xc8, 0x80, 0x04, 0x5a, 0x3a, 0x5d, 0x1b, 0x23, 0xd4, 0x7a, 0x3e, 0x78, - 0x68, 0x1c, 0xb1, 0x58, 0x21, 0x8b, 0xe6, 0x52, 0x82, 0xb9, 0xe1, 0x0a, 0xe3, 0x24, 0x0e, 0x0b, - 0x51, 0x6b, 0xcc, 0xdc, 0x9e, 0x94, 0xc2, 0x9f, 0xd0, 0x0a, 0x24, 0x5e, 0x71, 0x28, 0x76, 0x82, - 0x62, 0xbf, 0xe7, 0x70, 0xec, 0x6b, 0x75, 0x0a, 0x9e, 0xbe, 0x56, 0x57, 0xd7, 0x37, 0x94, 0xb5, - 0xd2, 0xaa, 0xc2, 0xd9, 0xd1, 0x49, 0x88, 0xb7, 0xb4, 0x57, 0x0f, 0xc2, 0xcb, 0x2b, 0x2d, 0x42, - 0x8b, 0x50, 0xe8, 0x9a, 0xb7, 0xb0, 0x6d, 0xec, 0x18, 0x64, 0xa8, 0x08, 0x55, 0x21, 0x48, 0x95, - 0xf7, 0x6b, 0x57, 0x09, 0xfd, 0x98, 0xea, 0x71, 0x12, 0xe2, 0xb7, 0xb1, 0x76, 0x33, 0xbc, 0x08, - 0xd2, 0x22, 0x74, 0x06, 0xb2, 0x4d, 0xbc, 0xdd, 0xdd, 0x55, 0x6d, 0xdc, 0xd4, 0x74, 0x37, 0x6c, - 0xfa, 0x33, 0xb4, 0x4a, 0xa1, 0x35, 0xe8, 0x3a, 0xa4, 0xc9, 0x18, 0x99, 0x74, 0x8c, 0xa7, 0xa8, - 0x08, 0x1e, 0x3b, 0x5c, 0x04, 0x7c, 0x88, 0x05, 0x93, 0xe2, 0xf3, 0xa3, 0x2b, 0x90, 0x70, 0x35, - 0x7b, 0x17, 0xbb, 0xd4, 0xf2, 0xe7, 0x07, 0x24, 0x3f, 0x06, 0x20, 0x35, 0x28, 0x07, 0x8d, 0x69, - 0x39, 0xf7, 0x3b, 0x68, 0x65, 0xce, 0xc3, 0x24, 0x55, 0x0f, 0x04, 0xc0, 0x15, 0x44, 0x9a, 0x40, - 0x29, 0x88, 0x57, 0x36, 0x14, 0x62, 0x69, 0x24, 0xc8, 0xb2, 0x52, 0x75, 0xb3, 0x56, 0xad, 0x54, - 0xa5, 0xa8, 0x7c, 0x11, 0x12, 0x6c, 0xcc, 0x89, 0x15, 0xf2, 0x46, 0x5d, 0x9a, 0xe0, 0x8f, 0x1c, - 0x23, 0x22, 0x6a, 0xb7, 0xd6, 0xca, 0x55, 0x45, 0x8a, 0xca, 0x5b, 0x50, 0xe8, 0x91, 0x13, 0x3a, - 0x06, 0x53, 0x4a, 0xb5, 0x51, 0x5d, 0x27, 0x71, 0x96, 0xba, 0xb5, 0x7e, 0x7d, 0x7d, 0xe3, 0x85, - 0x75, 0x69, 0x22, 0x5c, 0x2c, 0x4c, 0x5a, 0x04, 0xcd, 0x80, 0xe4, 0x17, 0xd7, 0x37, 0xb6, 0x14, - 0xda, 0x9a, 0xef, 0x89, 0x82, 0xd4, 0x2b, 0x35, 0x74, 0x02, 0xa6, 0x1b, 0x25, 0x65, 0xa5, 0xda, - 0x50, 0x59, 0xec, 0xe8, 0x41, 0xcf, 0x80, 0x14, 0xac, 0xb8, 0x52, 0xa3, 0xa1, 0xf1, 0x3c, 0x9c, - 0x0a, 0x96, 0x56, 0x5f, 0x6c, 0x54, 0xd7, 0xeb, 0xf4, 0xe5, 0xa5, 0xf5, 0x15, 0x62, 0x5f, 0x7b, - 0xf0, 0x44, 0xb4, 0x1a, 0x23, 0x4d, 0x0d, 0xe3, 0x55, 0x57, 0x97, 0xa5, 0x78, 0x6f, 0xf1, 0xc6, - 0x7a, 0x75, 0xe3, 0x8a, 0x34, 0xd9, 0xfb, 0x76, 0x1a, 0xc1, 0x26, 0x50, 0x11, 0x8e, 0xf7, 0x96, - 0xaa, 0xd5, 0xf5, 0x86, 0xf2, 0x92, 0x94, 0xec, 0x7d, 0x71, 0xbd, 0xaa, 0xdc, 0xa8, 0x55, 0xaa, - 0x52, 0x0a, 0x1d, 0x07, 0x14, 0x6e, 0x51, 0xe3, 0xea, 0xc6, 0xb2, 0x94, 0xee, 0xb3, 0x28, 0xb2, - 0x03, 0xd9, 0x60, 0x18, 0xf9, 0xee, 0xe4, 0x92, 0x5e, 0x8f, 0x42, 0x26, 0x10, 0x16, 0x12, 0x7f, - 0x5e, 0x6b, 0xb5, 0xac, 0xdb, 0xaa, 0xd6, 0x32, 0x34, 0x87, 0xdb, 0x1b, 0xa0, 0x45, 0x25, 0x52, - 0x32, 0xee, 0xfc, 0x1e, 0xdf, 0xc2, 0x27, 0xbe, 0x1e, 0x2d, 0xfc, 0xa4, 0x94, 0x90, 0x7f, 0x2c, - 0x02, 0x52, 0x6f, 0xbc, 0xd7, 0xd3, 0xfd, 0xc8, 0xb0, 0xee, 0xbf, 0x2b, 0x63, 0xf7, 0xa3, 0x11, - 0xc8, 0x87, 0x83, 0xbc, 0x9e, 0xe6, 0x3d, 0xf0, 0xff, 0xb4, 0x79, 0x7f, 0x14, 0x85, 0x5c, 0x28, - 0xb4, 0x1b, 0xb7, 0x75, 0x1f, 0x84, 0x29, 0xa3, 0x89, 0xdb, 0x1d, 0xcb, 0xc5, 0xa6, 0x7e, 0xa0, - 0xb6, 0xf0, 0x2d, 0xdc, 0x9a, 0x95, 0xa9, 0x51, 0x3e, 0x7f, 0x78, 0xf0, 0xb8, 0x58, 0xf3, 0xf9, - 0x56, 0x09, 0xdb, 0xd2, 0x74, 0x6d, 0xb9, 0xba, 0xb6, 0xb9, 0xd1, 0xa8, 0xae, 0x57, 0x5e, 0x12, - 0xd6, 0x45, 0x91, 0x8c, 0x1e, 0xb2, 0x77, 0xd0, 0x68, 0x6f, 0x82, 0xd4, 0xdb, 0x28, 0x62, 0x2b, - 0x06, 0x34, 0x4b, 0x9a, 0x40, 0xd3, 0x50, 0x58, 0xdf, 0x50, 0xeb, 0xb5, 0xe5, 0xaa, 0x5a, 0xbd, - 0x72, 0xa5, 0x5a, 0x69, 0xd4, 0x59, 0x3a, 0xd0, 0xa3, 0x6e, 0x48, 0xd1, 0xa0, 0x88, 0x7f, 0x38, - 0x06, 0xd3, 0x03, 0x5a, 0x82, 0x4a, 0x3c, 0x90, 0x67, 0xb9, 0x85, 0xc7, 0xc6, 0x69, 0xfd, 0x22, - 0x71, 0xa5, 0x37, 0x35, 0xdb, 0xe5, 0x71, 0xff, 0x59, 0x20, 0x52, 0x32, 0x5d, 0xb2, 0xb2, 0xdb, - 0x3c, 0xcd, 0xca, 0xa2, 0xfb, 0x82, 0x5f, 0xce, 0x32, 0xad, 0x8f, 0x02, 0xea, 0x58, 0x8e, 0xe1, - 0x1a, 0xb7, 0xb0, 0x6a, 0x98, 0x22, 0x27, 0x4b, 0xa2, 0xfd, 0xb8, 0x22, 0x89, 0x9a, 0x9a, 0xe9, - 0x7a, 0xd4, 0x26, 0xde, 0xd5, 0x7a, 0xa8, 0x89, 0xe7, 0x11, 0x53, 0x24, 0x51, 0xe3, 0x51, 0x3f, - 0x00, 0xd9, 0xa6, 0xd5, 0x25, 0x21, 0x10, 0xa3, 0x23, 0xd6, 0x22, 0xa2, 0x64, 0x58, 0x99, 0x47, - 0xc2, 0x83, 0x5b, 0x3f, 0x19, 0x9c, 0x55, 0x32, 0xac, 0x8c, 0x91, 0x9c, 0x86, 0x82, 0xb6, 0xbb, - 0x6b, 0x13, 0x70, 0x01, 0xc4, 0xc2, 0xf5, 0xbc, 0x57, 0x4c, 0x09, 0x8b, 0xd7, 0x20, 0x25, 0xe4, - 0x40, 0x3c, 0x58, 0x22, 0x09, 0xb5, 0xc3, 0x72, 0x50, 0xd1, 0x33, 0x69, 0x25, 0x65, 0x8a, 0xca, - 0x07, 0x20, 0x6b, 0x38, 0xaa, 0xbf, 0xb7, 0x15, 0x5d, 0x88, 0x9e, 0x49, 0x29, 0x19, 0xc3, 0xf1, - 0xf6, 0x05, 0xe4, 0x9f, 0x89, 0x42, 0x3e, 0xbc, 0x6b, 0x87, 0x96, 0x21, 0xd5, 0xb2, 0x74, 0x8d, - 0xaa, 0x16, 0xdb, 0x32, 0x3e, 0x33, 0x62, 0xa3, 0x6f, 0x71, 0x95, 0xd3, 0x2b, 0x1e, 0x67, 0xf1, - 0xdf, 0x45, 0x20, 0x25, 0x8a, 0xd1, 0x71, 0x88, 0x77, 0x34, 0x77, 0x8f, 0xc2, 0x4d, 0x96, 0xa3, - 0x52, 0x44, 0xa1, 0xcf, 0xa4, 0xdc, 0xe9, 0x68, 0x26, 0x55, 0x01, 0x5e, 0x4e, 0x9e, 0xc9, 0xb8, - 0xb6, 0xb0, 0xd6, 0xa4, 0xb9, 0x00, 0xab, 0xdd, 0xc6, 0xa6, 0xeb, 0x88, 0x71, 0xe5, 0xe5, 0x15, - 0x5e, 0x8c, 0x1e, 0x81, 0x29, 0xd7, 0xd6, 0x8c, 0x56, 0x88, 0x36, 0x4e, 0x69, 0x25, 0x51, 0xe1, - 0x11, 0x2f, 0xc1, 0x49, 0x81, 0xdb, 0xc4, 0xae, 0xa6, 0xef, 0xe1, 0xa6, 0xcf, 0x94, 0xa0, 0x39, - 0xbf, 0x13, 0x9c, 0x60, 0x99, 0xd7, 0x0b, 0x5e, 0xf9, 0xb3, 0x51, 0x98, 0x12, 0xd9, 0x8b, 0xa6, - 0x27, 0xac, 0x35, 0x00, 0xcd, 0x34, 0x2d, 0x37, 0x28, 0xae, 0x7e, 0x55, 0xee, 0xe3, 0x5b, 0x2c, - 0x79, 0x4c, 0x4a, 0x00, 0xa0, 0xf8, 0xa5, 0x08, 0x80, 0x5f, 0x35, 0x54, 0x6e, 0xf3, 0x90, 0xe1, - 0x7b, 0xb2, 0x74, 0x63, 0x9f, 0x25, 0xbc, 0x80, 0x15, 0x5d, 0x31, 0x5a, 0x34, 0x2d, 0xb9, 0x8d, - 0x77, 0x0d, 0x93, 0xef, 0xa7, 0xb0, 0x07, 0x91, 0x96, 0x8c, 0xfb, 0xdb, 0x53, 0x0a, 0xa4, 0x1c, - 0xdc, 0xd6, 0x4c, 0xd7, 0xd0, 0xf9, 0x0e, 0xc9, 0xa5, 0x23, 0x35, 0x7e, 0xb1, 0xce, 0xb9, 0x15, - 0x0f, 0x47, 0x3e, 0x03, 0x29, 0x51, 0x4a, 0x1c, 0xbf, 0xf5, 0x8d, 0xf5, 0xaa, 0x34, 0x81, 0x92, - 0x10, 0xab, 0x57, 0x1b, 0x52, 0x84, 0x84, 0x9d, 0xa5, 0xd5, 0x5a, 0xa9, 0x2e, 0x45, 0xcb, 0x7f, - 0x13, 0xa6, 0x75, 0xab, 0xdd, 0xfb, 0xc2, 0xb2, 0xd4, 0x93, 0xf2, 0x73, 0xae, 0x46, 0x5e, 0x7e, - 0x8c, 0x13, 0xed, 0x5a, 0x2d, 0xcd, 0xdc, 0x5d, 0xb4, 0xec, 0x5d, 0xff, 0x58, 0x04, 0x89, 0x0e, - 0x9c, 0xc0, 0xe1, 0x88, 0xce, 0xf6, 0xff, 0x8a, 0x44, 0x7e, 0x3c, 0x1a, 0x5b, 0xd9, 0x2c, 0xff, - 0x5c, 0xb4, 0xb8, 0xc2, 0x18, 0x37, 0x45, 0x77, 0x14, 0xbc, 0xd3, 0xc2, 0x3a, 0x69, 0x3c, 0xfc, - 0xe9, 0x23, 0x30, 0xb3, 0x6b, 0xed, 0x5a, 0x14, 0xe9, 0x3c, 0xf9, 0xc5, 0xcf, 0x55, 0xa4, 0xbd, - 0xd2, 0xe2, 0xc8, 0x43, 0x18, 0x4b, 0xeb, 0x30, 0xcd, 0x89, 0x55, 0xba, 0x7d, 0xcb, 0x92, 0x0b, - 0xe8, 0xd0, 0xcc, 0xf6, 0xec, 0x2f, 0xfd, 0x09, 0xf5, 0x4a, 0x94, 0x29, 0xce, 0x4a, 0xea, 0x58, - 0xfe, 0x61, 0x49, 0x81, 0x63, 0x21, 0x3c, 0x66, 0x23, 0xb0, 0x3d, 0x02, 0xf1, 0xb7, 0x38, 0xe2, - 0x74, 0x00, 0xb1, 0xce, 0x59, 0x97, 0x2a, 0x90, 0x3b, 0x0a, 0xd6, 0xbf, 0xe6, 0x58, 0x59, 0x1c, - 0x04, 0x59, 0x81, 0x02, 0x05, 0xd1, 0xbb, 0x8e, 0x6b, 0xb5, 0xa9, 0x01, 0x3e, 0x1c, 0xe6, 0xdf, - 0xfc, 0x09, 0x9b, 0xb4, 0x79, 0xc2, 0x56, 0xf1, 0xb8, 0x96, 0x96, 0x80, 0xee, 0x58, 0x37, 0xb1, - 0xde, 0x1a, 0x81, 0xf0, 0x19, 0xde, 0x10, 0x8f, 0x7e, 0xe9, 0x06, 0xcc, 0x90, 0xdf, 0xd4, 0x3e, - 0x06, 0x5b, 0x32, 0x3a, 0x0d, 0x3e, 0xfb, 0xbb, 0x1f, 0x62, 0x76, 0x61, 0xda, 0x03, 0x08, 0xb4, - 0x29, 0x30, 0x8a, 0xbb, 0xd8, 0x75, 0xb1, 0xed, 0xa8, 0x5a, 0x6b, 0x50, 0xf3, 0x02, 0x79, 0xc4, - 0xd9, 0x1f, 0xfa, 0x72, 0x78, 0x14, 0x57, 0x18, 0x67, 0xa9, 0xd5, 0x5a, 0xda, 0x82, 0x13, 0x03, - 0xb4, 0x62, 0x0c, 0xcc, 0x1f, 0xe6, 0x98, 0x33, 0x7d, 0x9a, 0x41, 0x60, 0x37, 0x41, 0x94, 0x7b, - 0x63, 0x39, 0x06, 0xe6, 0x8f, 0x70, 0x4c, 0xc4, 0x79, 0xc5, 0x90, 0x12, 0xc4, 0x6b, 0x30, 0x75, - 0x0b, 0xdb, 0xdb, 0x96, 0xc3, 0x73, 0xb7, 0x63, 0xc0, 0xfd, 0x28, 0x87, 0x2b, 0x70, 0x46, 0x9a, - 0xcc, 0x25, 0x58, 0xcf, 0x42, 0x6a, 0x47, 0xd3, 0xf1, 0x18, 0x10, 0x77, 0x39, 0x44, 0x92, 0xd0, - 0x13, 0xd6, 0x12, 0x64, 0x77, 0x2d, 0xbe, 0x44, 0x8e, 0x66, 0xff, 0x31, 0xce, 0x9e, 0x11, 0x3c, - 0x1c, 0xa2, 0x63, 0x75, 0xba, 0x2d, 0xb2, 0x7e, 0x8e, 0x86, 0xf8, 0x87, 0x02, 0x42, 0xf0, 0x70, - 0x88, 0x23, 0x88, 0xf5, 0xa3, 0x02, 0xc2, 0x09, 0xc8, 0xf3, 0x79, 0xc8, 0x58, 0x66, 0xeb, 0xc0, - 0x32, 0xc7, 0x69, 0xc4, 0xc7, 0x38, 0x02, 0x70, 0x16, 0x02, 0x70, 0x19, 0xd2, 0xe3, 0x0e, 0xc4, - 0x4f, 0x7d, 0x59, 0x4c, 0x0f, 0x31, 0x02, 0x2b, 0x50, 0x10, 0x06, 0xca, 0xb0, 0xcc, 0x31, 0x20, - 0x7e, 0x9a, 0x43, 0xe4, 0x03, 0x6c, 0xbc, 0x1b, 0x2e, 0x76, 0xdc, 0x5d, 0x3c, 0x0e, 0xc8, 0xcf, - 0x88, 0x6e, 0x70, 0x16, 0x2e, 0xca, 0x6d, 0x6c, 0xea, 0x7b, 0xe3, 0x21, 0x7c, 0x5c, 0x88, 0x52, - 0xf0, 0x10, 0x88, 0x0a, 0xe4, 0xda, 0x9a, 0xed, 0xec, 0x69, 0xad, 0xb1, 0x86, 0xe3, 0x67, 0x39, - 0x46, 0xd6, 0x63, 0xe2, 0x12, 0xe9, 0x9a, 0x47, 0x81, 0xf9, 0x39, 0x21, 0x91, 0x00, 0x1b, 0x9f, - 0x7a, 0x8e, 0x4b, 0x13, 0xdd, 0x47, 0x41, 0xfb, 0x47, 0x62, 0xea, 0x31, 0xde, 0xb5, 0x20, 0xe2, - 0x65, 0x48, 0x3b, 0xc6, 0xab, 0x63, 0xc1, 0xfc, 0xbc, 0x18, 0x69, 0xca, 0x40, 0x98, 0x5f, 0x82, - 0x93, 0x03, 0x97, 0x89, 0x31, 0xc0, 0x7e, 0x81, 0x83, 0x1d, 0x1f, 0xb0, 0x54, 0x70, 0x93, 0x70, - 0x54, 0xc8, 0x7f, 0x2c, 0x4c, 0x02, 0xee, 0xc1, 0xda, 0x24, 0x41, 0x8b, 0xa3, 0xed, 0x1c, 0x4d, - 0x6a, 0xff, 0x44, 0x48, 0x8d, 0xf1, 0x86, 0xa4, 0xd6, 0x80, 0xe3, 0x1c, 0xf1, 0x68, 0xe3, 0xfa, - 0x8b, 0xc2, 0xb0, 0x32, 0xee, 0xad, 0xf0, 0xe8, 0x7e, 0x33, 0x14, 0x3d, 0x71, 0x0a, 0xef, 0xd8, - 0x51, 0xdb, 0x5a, 0x67, 0x0c, 0xe4, 0x5f, 0xe2, 0xc8, 0xc2, 0xe2, 0x7b, 0xee, 0xb5, 0xb3, 0xa6, - 0x75, 0x08, 0xf8, 0x8b, 0x30, 0x2b, 0xc0, 0xbb, 0xa6, 0x8d, 0x75, 0x6b, 0xd7, 0x34, 0x5e, 0xc5, - 0xcd, 0x31, 0xa0, 0x7f, 0xb9, 0x67, 0xa8, 0xb6, 0x02, 0xec, 0x04, 0xb9, 0x06, 0x92, 0xe7, 0xab, - 0xa8, 0x46, 0xbb, 0x63, 0xd9, 0xee, 0x08, 0xc4, 0x5f, 0x11, 0x23, 0xe5, 0xf1, 0xd5, 0x28, 0xdb, - 0x52, 0x15, 0xd8, 0xe9, 0x8f, 0x71, 0x55, 0xf2, 0x13, 0x1c, 0x28, 0xe7, 0x73, 0x71, 0xc3, 0xa1, - 0x5b, 0xed, 0x8e, 0x66, 0x8f, 0x63, 0xff, 0xfe, 0xa9, 0x30, 0x1c, 0x9c, 0x85, 0x1b, 0x0e, 0xe2, - 0xd1, 0x91, 0xd5, 0x7e, 0x0c, 0x84, 0x4f, 0x0a, 0xc3, 0x21, 0x78, 0x38, 0x84, 0x70, 0x18, 0xc6, - 0x80, 0xf8, 0x55, 0x01, 0x21, 0x78, 0x08, 0xc4, 0xfb, 0xfd, 0x85, 0xd6, 0xc6, 0xbb, 0x86, 0xe3, - 0xda, 0xcc, 0x25, 0x3f, 0x1c, 0xea, 0x53, 0x5f, 0x0e, 0x3b, 0x61, 0x4a, 0x80, 0x95, 0x58, 0x22, - 0xbe, 0xf5, 0x41, 0x43, 0xb6, 0xd1, 0x0d, 0xfb, 0x35, 0x61, 0x89, 0x02, 0x6c, 0xa4, 0x6d, 0x01, - 0x0f, 0x91, 0x88, 0x5d, 0x27, 0x81, 0xca, 0x18, 0x70, 0xff, 0xac, 0xa7, 0x71, 0x75, 0xc1, 0x4b, - 0x30, 0x03, 0xfe, 0x4f, 0xd7, 0xbc, 0x89, 0x0f, 0xc6, 0xd2, 0xce, 0x4f, 0xf7, 0xf8, 0x3f, 0x5b, - 0x8c, 0x93, 0xd9, 0x90, 0x42, 0x8f, 0x3f, 0x85, 0x46, 0x9d, 0xf5, 0x9b, 0xfd, 0xf6, 0xb7, 0x78, - 0x7f, 0xc3, 0xee, 0xd4, 0xd2, 0x2a, 0x51, 0xf2, 0xb0, 0xd3, 0x33, 0x1a, 0xec, 0x43, 0x6f, 0x79, - 0x7a, 0x1e, 0xf2, 0x79, 0x96, 0xae, 0x40, 0x2e, 0xe4, 0xf0, 0x8c, 0x86, 0xfa, 0x5b, 0x1c, 0x2a, - 0x1b, 0xf4, 0x77, 0x96, 0x2e, 0x42, 0x9c, 0x38, 0x2f, 0xa3, 0xd9, 0xbf, 0x93, 0xb3, 0x53, 0xf2, - 0xa5, 0xe7, 0x20, 0x25, 0x9c, 0x96, 0xd1, 0xac, 0xdf, 0xc5, 0x59, 0x3d, 0x16, 0xc2, 0x2e, 0x1c, - 0x96, 0xd1, 0xec, 0x7f, 0x5b, 0xb0, 0x0b, 0x16, 0xc2, 0x3e, 0xbe, 0x08, 0x7f, 0xe3, 0xef, 0xc4, - 0xf9, 0xa2, 0x23, 0x64, 0x77, 0x19, 0x92, 0xdc, 0x53, 0x19, 0xcd, 0xfd, 0xdd, 0xfc, 0xe5, 0x82, - 0x63, 0xe9, 0x69, 0x98, 0x1c, 0x53, 0xe0, 0x7f, 0x97, 0xb3, 0x32, 0xfa, 0xa5, 0x0a, 0x64, 0x02, - 0xde, 0xc9, 0x68, 0xf6, 0xef, 0xe5, 0xec, 0x41, 0x2e, 0xd2, 0x74, 0xee, 0x9d, 0x8c, 0x06, 0xf8, - 0x7b, 0xa2, 0xe9, 0x9c, 0x83, 0x88, 0x4d, 0x38, 0x26, 0xa3, 0xb9, 0x3f, 0x22, 0xa4, 0x2e, 0x58, - 0x96, 0x9e, 0x87, 0xb4, 0xb7, 0xd8, 0x8c, 0xe6, 0xff, 0x3e, 0xce, 0xef, 0xf3, 0x10, 0x09, 0x04, - 0x16, 0xbb, 0xd1, 0x10, 0x7f, 0x5f, 0x48, 0x20, 0xc0, 0x45, 0xa6, 0x51, 0xaf, 0x03, 0x33, 0x1a, - 0xe9, 0xfb, 0xc5, 0x34, 0xea, 0xf1, 0x5f, 0xc8, 0x68, 0x52, 0x9b, 0x3f, 0x1a, 0xe2, 0x1f, 0x88, - 0xd1, 0xa4, 0xf4, 0xa4, 0x19, 0xbd, 0x1e, 0xc1, 0x68, 0x8c, 0x1f, 0x14, 0xcd, 0xe8, 0x71, 0x08, - 0x96, 0x36, 0x01, 0xf5, 0x7b, 0x03, 0xa3, 0xf1, 0x5e, 0xe7, 0x78, 0x53, 0x7d, 0xce, 0xc0, 0xd2, - 0x0b, 0x70, 0x7c, 0xb0, 0x27, 0x30, 0x1a, 0xf5, 0x87, 0xde, 0xea, 0x89, 0xdd, 0x82, 0x8e, 0xc0, - 0x52, 0xc3, 0x5f, 0x52, 0x82, 0x5e, 0xc0, 0x68, 0xd8, 0x1f, 0x7e, 0x2b, 0x6c, 0xb8, 0x83, 0x4e, - 0xc0, 0x52, 0x09, 0xc0, 0x5f, 0x80, 0x47, 0x63, 0xfd, 0x28, 0xc7, 0x0a, 0x30, 0x91, 0xa9, 0xc1, - 0xd7, 0xdf, 0xd1, 0xfc, 0x77, 0xc5, 0xd4, 0xe0, 0x1c, 0x64, 0x6a, 0x88, 0xa5, 0x77, 0x34, 0xf7, - 0x8f, 0x89, 0xa9, 0x21, 0x58, 0x88, 0x66, 0x07, 0x56, 0xb7, 0xd1, 0x08, 0x1f, 0x13, 0x9a, 0x1d, - 0xe0, 0x5a, 0x5a, 0x87, 0xa9, 0xbe, 0x05, 0x71, 0x34, 0xd4, 0x8f, 0x73, 0x28, 0xa9, 0x77, 0x3d, - 0x0c, 0x2e, 0x5e, 0x7c, 0x31, 0x1c, 0x8d, 0xf6, 0x13, 0x3d, 0x8b, 0x17, 0x5f, 0x0b, 0x97, 0x2e, - 0x43, 0xca, 0xec, 0xb6, 0x5a, 0x64, 0xf2, 0xa0, 0xc3, 0xcf, 0xe7, 0xce, 0xfe, 0xb7, 0xaf, 0x72, - 0xe9, 0x08, 0x86, 0xa5, 0x8b, 0x30, 0x89, 0xdb, 0xdb, 0xb8, 0x39, 0x8a, 0xf3, 0x8b, 0x5f, 0x15, - 0x06, 0x93, 0x50, 0x2f, 0x3d, 0x0f, 0xc0, 0x52, 0x23, 0x74, 0xe3, 0x7c, 0x04, 0xef, 0x97, 0xbe, - 0xca, 0x0f, 0xc4, 0xf9, 0x2c, 0x3e, 0x00, 0x3b, 0x5e, 0x77, 0x38, 0xc0, 0x97, 0xc3, 0x00, 0x74, - 0x44, 0x9e, 0x85, 0xe4, 0x2b, 0x8e, 0x65, 0xba, 0xda, 0xee, 0x28, 0xee, 0x3f, 0xe5, 0xdc, 0x82, - 0x9e, 0x08, 0xac, 0x6d, 0xd9, 0xd8, 0xd5, 0x76, 0x9d, 0x51, 0xbc, 0xff, 0x9d, 0xf3, 0x7a, 0x0c, - 0x84, 0x59, 0xd7, 0x1c, 0x77, 0x9c, 0x7e, 0xff, 0x99, 0x60, 0x16, 0x0c, 0xa4, 0xd1, 0xe4, 0xf7, - 0x4d, 0x7c, 0x30, 0x8a, 0xf7, 0xcf, 0x45, 0xa3, 0x39, 0xfd, 0xd2, 0x73, 0x90, 0x26, 0x3f, 0xd9, - 0x29, 0xd7, 0x11, 0xcc, 0x7f, 0xc1, 0x99, 0x7d, 0x0e, 0xf2, 0x66, 0xc7, 0x6d, 0xba, 0xc6, 0x68, - 0x61, 0x7f, 0x85, 0x8f, 0xb4, 0xa0, 0x5f, 0x2a, 0x41, 0xc6, 0x71, 0x9b, 0xcd, 0x2e, 0xf7, 0x4f, - 0x47, 0xb0, 0xff, 0x8f, 0xaf, 0x7a, 0x29, 0x0b, 0x8f, 0x87, 0x8c, 0xf6, 0xed, 0x9b, 0x6e, 0xc7, - 0xa2, 0xfb, 0x2d, 0xa3, 0x10, 0xde, 0xe2, 0x08, 0x01, 0x96, 0xa5, 0x0a, 0x64, 0x49, 0x5f, 0x6c, - 0xdc, 0xc1, 0x74, 0x73, 0x6c, 0x04, 0xc4, 0x5f, 0x72, 0x01, 0x84, 0x98, 0xca, 0xdf, 0xfa, 0x99, - 0x37, 0xe7, 0x22, 0x9f, 0x7d, 0x73, 0x2e, 0xf2, 0x47, 0x6f, 0xce, 0x45, 0x3e, 0xf2, 0xb9, 0xb9, - 0x89, 0xcf, 0x7e, 0x6e, 0x6e, 0xe2, 0xf7, 0x3f, 0x37, 0x37, 0x31, 0x38, 0x4b, 0x0c, 0x2b, 0xd6, - 0x8a, 0xc5, 0xf2, 0xc3, 0x2f, 0x3f, 0xb4, 0x6b, 0xb8, 0x7b, 0xdd, 0xed, 0x45, 0xdd, 0x6a, 0x9f, - 0xd7, 0x2d, 0xa7, 0x6d, 0x39, 0xe7, 0xc3, 0x79, 0x5d, 0xfa, 0x0b, 0xfe, 0x2a, 0x42, 0x62, 0xe6, - 0x70, 0x3a, 0x57, 0x33, 0x0f, 0x86, 0x7d, 0x4c, 0x77, 0x09, 0x62, 0x25, 0xf3, 0x00, 0x9d, 0x64, - 0x06, 0x4e, 0xed, 0xda, 0x2d, 0x7e, 0xd4, 0x32, 0x49, 0x9e, 0xb7, 0xec, 0x16, 0x9a, 0xf1, 0xcf, - 0x43, 0x47, 0xce, 0x64, 0xf9, 0x21, 0xe7, 0xf2, 0xf7, 0x46, 0x8e, 0xd6, 0x93, 0x54, 0xc9, 0x3c, - 0xa0, 0x1d, 0xd9, 0x8c, 0xbc, 0xfc, 0xe8, 0xc8, 0x3c, 0xf7, 0x4d, 0xd3, 0xba, 0x6d, 0x92, 0x66, - 0x77, 0xb6, 0x45, 0x8e, 0x7b, 0xae, 0x37, 0xc7, 0xfd, 0x02, 0x6e, 0xb5, 0xae, 0x13, 0xba, 0x06, - 0x61, 0xd9, 0x4e, 0xb0, 0x53, 0xfd, 0xf0, 0xfd, 0x51, 0x98, 0xeb, 0x4b, 0x67, 0x73, 0x25, 0x18, - 0x26, 0x84, 0x25, 0x48, 0x2d, 0x0b, 0xdd, 0x9a, 0x85, 0xa4, 0x83, 0x75, 0xcb, 0x6c, 0x3a, 0x54, - 0x10, 0x31, 0x45, 0x3c, 0x12, 0x41, 0x98, 0x9a, 0x69, 0x39, 0xfc, 0xb0, 0x32, 0x7b, 0x28, 0xff, - 0xc8, 0x11, 0x05, 0x91, 0x13, 0x6f, 0x12, 0xd2, 0x78, 0x62, 0x4c, 0x69, 0x88, 0x4e, 0x84, 0x32, - 0xff, 0xe3, 0x4a, 0xe5, 0x07, 0xa3, 0x30, 0xdf, 0x2b, 0x15, 0x32, 0xb3, 0x1c, 0x57, 0x6b, 0x77, - 0x86, 0x89, 0xe5, 0x32, 0xa4, 0x1b, 0x82, 0xe6, 0xc8, 0x72, 0xb9, 0x7b, 0x44, 0xb9, 0xe4, 0xbd, - 0x57, 0x09, 0xc1, 0x5c, 0x18, 0x53, 0x30, 0x5e, 0x3f, 0xee, 0x49, 0x32, 0xff, 0x3b, 0x01, 0x27, - 0xd9, 0x74, 0x52, 0xd9, 0x54, 0x62, 0x0f, 0x5c, 0x26, 0xd9, 0x60, 0xd5, 0xe8, 0x7d, 0x12, 0xf9, - 0x3a, 0x4c, 0xd7, 0x88, 0xb5, 0x20, 0x51, 0x90, 0xbf, 0xc3, 0x33, 0xf0, 0x3c, 0xf7, 0x42, 0xc8, - 0xe1, 0xe7, 0xfb, 0x5b, 0xc1, 0x22, 0xf9, 0xdb, 0x23, 0x20, 0xd5, 0x75, 0xad, 0xa5, 0xd9, 0x5f, - 0x2b, 0x14, 0x7a, 0x1a, 0x80, 0x1d, 0xf7, 0xf0, 0x3e, 0xdc, 0xcb, 0x5f, 0x98, 0x5d, 0x0c, 0x76, - 0x6e, 0x91, 0xbd, 0x89, 0x9e, 0xa0, 0x4a, 0x53, 0x5a, 0xf2, 0xf3, 0xdc, 0x8b, 0x00, 0x7e, 0x05, - 0x3a, 0x05, 0x27, 0xea, 0x95, 0xd2, 0x6a, 0x49, 0x11, 0x87, 0x84, 0xea, 0x9b, 0xd5, 0x4a, 0xed, - 0x4a, 0xad, 0xba, 0x2c, 0x4d, 0xa0, 0xe3, 0x80, 0x82, 0x95, 0xde, 0xa1, 0xa6, 0x63, 0x30, 0x15, - 0x2c, 0x67, 0x5f, 0xa9, 0x44, 0x89, 0xa7, 0x68, 0xb4, 0x3b, 0x2d, 0x4c, 0x77, 0x1e, 0x55, 0x43, - 0x48, 0x6d, 0xb4, 0x13, 0xf2, 0xdb, 0xff, 0x91, 0x7d, 0xb9, 0x30, 0xed, 0xb3, 0x7b, 0x32, 0x5f, - 0x5a, 0x85, 0x29, 0x4d, 0xd7, 0x71, 0x27, 0x04, 0x39, 0xc2, 0x54, 0x13, 0x40, 0xba, 0x97, 0xca, - 0x39, 0x7d, 0xb4, 0xa7, 0x21, 0xe1, 0xd0, 0xde, 0x8f, 0x82, 0xf8, 0x1d, 0x0e, 0xc1, 0xc9, 0x97, - 0x4c, 0x98, 0x22, 0x9e, 0x9f, 0x66, 0xe3, 0x40, 0x33, 0x0e, 0xcf, 0x33, 0xfc, 0xf3, 0x5f, 0x79, - 0x9c, 0xee, 0xac, 0x3e, 0x10, 0x1e, 0x96, 0x01, 0xea, 0xa4, 0x48, 0x1c, 0xdb, 0x6f, 0x28, 0x86, - 0xbc, 0x78, 0x1f, 0x6f, 0xf0, 0xe1, 0x2f, 0xfb, 0x75, 0xfe, 0xb2, 0xb9, 0x41, 0x3a, 0x10, 0x78, - 0x53, 0x8e, 0xa3, 0xb2, 0x8a, 0x72, 0x75, 0xd8, 0x9c, 0x7e, 0xf9, 0x91, 0xfe, 0xd5, 0x89, 0xfd, - 0xf7, 0x18, 0x45, 0xbe, 0x1c, 0x7c, 0x8d, 0x37, 0xf7, 0xfe, 0x20, 0x06, 0x53, 0x5a, 0xdb, 0x30, - 0xad, 0xf3, 0xf4, 0x5f, 0x3e, 0xe7, 0x26, 0xe9, 0xc3, 0x18, 0x9b, 0x92, 0x97, 0xd8, 0x54, 0x18, - 0xad, 0x31, 0x7f, 0xf1, 0x3d, 0x3f, 0x3d, 0xe9, 0x4f, 0x97, 0xa5, 0x35, 0x90, 0xc4, 0x21, 0x5e, - 0x6c, 0xea, 0x56, 0x73, 0xac, 0x2c, 0xc5, 0x57, 0x04, 0x86, 0xc8, 0x6f, 0x55, 0x39, 0xeb, 0xd2, - 0x7b, 0x21, 0xe5, 0xc1, 0x8c, 0xf2, 0x4c, 0x04, 0x88, 0xc7, 0x41, 0xfc, 0x12, 0x36, 0x33, 0xc7, - 0xf1, 0x42, 0xdf, 0x12, 0xfc, 0x6c, 0x86, 0xae, 0x93, 0xde, 0xac, 0x40, 0xbe, 0x69, 0x99, 0xae, - 0x6a, 0xb5, 0x0d, 0x17, 0xb7, 0x3b, 0xee, 0x48, 0xbf, 0xee, 0x2f, 0x19, 0x48, 0x4a, 0xc9, 0x11, - 0xbe, 0x0d, 0xc1, 0x76, 0x4f, 0x83, 0xeb, 0x34, 0x6f, 0x72, 0x5b, 0xec, 0xee, 0xb3, 0x41, 0xf4, - 0x06, 0xf7, 0xcf, 0x62, 0x30, 0xc7, 0x89, 0xb7, 0x35, 0x07, 0x9f, 0xbf, 0xf5, 0xc4, 0x36, 0x76, - 0xb5, 0x27, 0xce, 0xeb, 0x96, 0x21, 0x16, 0xe2, 0x69, 0x6e, 0x6b, 0x49, 0xfd, 0x22, 0xaf, 0x2f, - 0x0e, 0xdc, 0xad, 0x2e, 0x0e, 0xb7, 0xd1, 0xc5, 0x7e, 0x15, 0x92, 0x5f, 0x86, 0x78, 0xc5, 0x32, - 0x4c, 0xb2, 0x34, 0x35, 0xb1, 0x69, 0xb5, 0xb9, 0xb5, 0x64, 0x0f, 0xe8, 0x12, 0x24, 0xb4, 0xb6, - 0xd5, 0x35, 0x5d, 0x66, 0x29, 0xcb, 0x73, 0x9f, 0x79, 0x63, 0x7e, 0xe2, 0x0f, 0xde, 0x98, 0x8f, - 0xd5, 0x4c, 0xf7, 0xf7, 0x3e, 0xf1, 0x18, 0x70, 0xf4, 0x9a, 0xe9, 0x7e, 0xfc, 0xf3, 0xbf, 0x78, - 0x2e, 0xa2, 0x70, 0xea, 0xa5, 0xf8, 0x17, 0x3e, 0x3a, 0x1f, 0x91, 0x5f, 0x84, 0xe4, 0x32, 0xd6, - 0x0f, 0x81, 0x7f, 0xa2, 0x07, 0xfe, 0xa4, 0x80, 0x5f, 0xc6, 0x7a, 0x00, 0x7e, 0x19, 0xeb, 0x3d, - 0xc8, 0x4f, 0x43, 0xaa, 0x66, 0xba, 0xec, 0x0b, 0xa0, 0x47, 0x20, 0x66, 0x98, 0xec, 0x50, 0x79, - 0x00, 0xa1, 0xaf, 0x81, 0x0a, 0xa1, 0x22, 0x8c, 0xcb, 0x58, 0xf7, 0x18, 0x9b, 0x58, 0xef, 0x65, - 0xec, 0x7f, 0x35, 0xa1, 0x2a, 0x2f, 0xff, 0xfe, 0x1f, 0xcf, 0x4d, 0xbc, 0xf6, 0xe6, 0xdc, 0xc4, - 0xd0, 0xa1, 0x97, 0x47, 0x0f, 0xbd, 0x37, 0xe2, 0x3f, 0x1d, 0x87, 0xfb, 0xe9, 0x87, 0xa1, 0x76, - 0xdb, 0x30, 0xdd, 0xf3, 0xba, 0x7d, 0xd0, 0x71, 0x2d, 0x32, 0x7f, 0xad, 0x1d, 0x3e, 0xe0, 0x53, - 0x7e, 0xf5, 0x22, 0xab, 0x1e, 0x3c, 0xdc, 0xf2, 0x0e, 0x4c, 0x6e, 0x12, 0x3e, 0x22, 0x62, 0xd7, - 0x72, 0xb5, 0x16, 0x77, 0x3a, 0xd8, 0x03, 0x29, 0x65, 0x1f, 0x93, 0x46, 0x59, 0xa9, 0x21, 0xbe, - 0x23, 0x6d, 0x61, 0x6d, 0x87, 0x7d, 0x93, 0x13, 0xa3, 0xde, 0x6a, 0x8a, 0x14, 0xd0, 0xcf, 0x6f, - 0x66, 0x60, 0x52, 0xeb, 0xb2, 0x73, 0x33, 0x31, 0xe2, 0xc6, 0xd2, 0x07, 0xf9, 0x3a, 0x24, 0xf9, - 0xf6, 0x39, 0x92, 0x20, 0x76, 0x13, 0x1f, 0xd0, 0xf7, 0x64, 0x15, 0xf2, 0x13, 0x2d, 0xc2, 0x24, - 0x6d, 0x3c, 0xff, 0xd8, 0x70, 0x76, 0xb1, 0xaf, 0xf5, 0x8b, 0xb4, 0x91, 0x0a, 0x23, 0x93, 0xaf, - 0x41, 0x6a, 0xd9, 0x22, 0x5a, 0x18, 0x46, 0x4b, 0x33, 0x34, 0xda, 0xe6, 0x4e, 0x97, 0x6b, 0x85, - 0xc2, 0x1e, 0xd0, 0x71, 0x48, 0xb0, 0x6f, 0xb4, 0xf8, 0xd9, 0x1f, 0xfe, 0x24, 0x57, 0x20, 0x49, - 0xb1, 0x37, 0x3a, 0x64, 0xc5, 0xf7, 0x8e, 0xad, 0xa7, 0xf9, 0x17, 0xbb, 0x1c, 0x3e, 0xea, 0x37, - 0x16, 0x41, 0xbc, 0xa9, 0xb9, 0x1a, 0xef, 0x37, 0xfd, 0x2d, 0xbf, 0x0f, 0x52, 0x1c, 0xc4, 0x41, - 0x17, 0x20, 0x66, 0x75, 0x1c, 0x7e, 0x7a, 0xa7, 0x38, 0xac, 0x2b, 0x1b, 0x9d, 0x72, 0x9c, 0xe8, - 0x8c, 0x42, 0x88, 0xcb, 0xeb, 0x43, 0xd5, 0xe2, 0xa9, 0x90, 0x5a, 0xb4, 0xb1, 0xbb, 0xbd, 0xe3, - 0xfa, 0x3f, 0xd8, 0x70, 0xf6, 0xa9, 0x82, 0xa7, 0x28, 0x77, 0xa3, 0x30, 0x17, 0xa8, 0xbd, 0x85, - 0x6d, 0xc7, 0xb0, 0x4c, 0xa6, 0x4d, 0x5c, 0x53, 0x50, 0xa0, 0x81, 0xbc, 0x7e, 0x88, 0xaa, 0x3c, - 0x07, 0xb1, 0x52, 0xa7, 0x83, 0x8a, 0x90, 0xa2, 0xcf, 0xba, 0xc5, 0x74, 0x25, 0xae, 0x78, 0xcf, - 0xa4, 0xce, 0xb1, 0x76, 0xdc, 0xdb, 0x9a, 0xed, 0x7d, 0xc2, 0x2c, 0x9e, 0xe5, 0x67, 0x21, 0x5d, - 0xb1, 0x4c, 0x07, 0x9b, 0x4e, 0x97, 0xba, 0xb2, 0xdb, 0x2d, 0x4b, 0xbf, 0xc9, 0x11, 0xd8, 0x03, - 0x11, 0xb6, 0xd6, 0xe9, 0x50, 0xce, 0xb8, 0x42, 0x7e, 0xb2, 0xf9, 0x5a, 0xde, 0x18, 0x2a, 0x9e, - 0x8b, 0x47, 0x13, 0x0f, 0xef, 0xa0, 0xef, 0x93, 0x46, 0xe0, 0xbe, 0xfe, 0x89, 0x74, 0x13, 0x1f, - 0x38, 0x47, 0x9d, 0x47, 0x2f, 0x42, 0x7a, 0x93, 0xde, 0x2e, 0x72, 0x1d, 0x1f, 0xa0, 0x22, 0x24, - 0x71, 0xf3, 0xc2, 0xc5, 0x8b, 0x4f, 0x3c, 0xcb, 0xb4, 0xfc, 0xea, 0x84, 0x22, 0x0a, 0xd0, 0x1c, - 0xa4, 0x1d, 0xac, 0x77, 0x2e, 0x5c, 0xbc, 0x74, 0xf3, 0x09, 0xa6, 0x56, 0x57, 0x27, 0x14, 0xbf, - 0x68, 0x29, 0x45, 0x7a, 0xfc, 0x85, 0x8f, 0xcd, 0x47, 0xca, 0x93, 0x10, 0x73, 0xba, 0xed, 0x77, - 0x4c, 0x37, 0x7e, 0x60, 0x12, 0x16, 0x02, 0xb5, 0x6c, 0x71, 0xb9, 0xa5, 0xb5, 0x8c, 0xa6, 0xe6, - 0xdf, 0x09, 0x23, 0x05, 0xfa, 0x4f, 0x29, 0x86, 0xac, 0x1a, 0x87, 0x4a, 0x51, 0xfe, 0xe5, 0x08, - 0x64, 0x6f, 0x08, 0xe4, 0x3a, 0x76, 0xd1, 0x65, 0x00, 0xef, 0x4d, 0x62, 0xaa, 0x9c, 0x5a, 0xec, - 0x7d, 0xd7, 0xa2, 0xc7, 0xa3, 0x04, 0xc8, 0xd1, 0xd3, 0x54, 0x01, 0x3b, 0x96, 0xc3, 0x3f, 0x67, - 0x1d, 0xc1, 0xea, 0x11, 0xa3, 0x47, 0x01, 0x51, 0xab, 0xa6, 0xde, 0xb2, 0x5c, 0xc3, 0xdc, 0x55, - 0x3b, 0xd6, 0x6d, 0x7e, 0x49, 0x40, 0x4c, 0x91, 0x68, 0xcd, 0x0d, 0x5a, 0xb1, 0x49, 0xca, 0x49, - 0xa3, 0xd3, 0x1e, 0x0a, 0x89, 0xca, 0xb4, 0x66, 0xd3, 0xc6, 0x8e, 0xc3, 0x0d, 0x97, 0x78, 0x44, - 0x97, 0x21, 0xd9, 0xe9, 0x6e, 0xab, 0xc2, 0x4a, 0x64, 0x2e, 0xdc, 0x37, 0x68, 0xce, 0x0b, 0xdd, - 0xe0, 0xb3, 0x3e, 0xd1, 0xe9, 0x6e, 0x13, 0x4d, 0x79, 0x00, 0xb2, 0x03, 0x1a, 0x93, 0xb9, 0xe5, - 0xb7, 0x83, 0x5e, 0x68, 0xc3, 0x7b, 0xa0, 0x76, 0x6c, 0xc3, 0xb2, 0x0d, 0xf7, 0x80, 0x9e, 0xba, - 0x8b, 0x29, 0x92, 0xa8, 0xd8, 0xe4, 0xe5, 0xf2, 0x4d, 0x28, 0xd4, 0xa9, 0xb7, 0xee, 0xb7, 0xfc, - 0xa2, 0xdf, 0xbe, 0xc8, 0xe8, 0xf6, 0x0d, 0x6d, 0x59, 0xb4, 0xaf, 0x65, 0xe5, 0xb5, 0xa1, 0x9a, - 0xf9, 0xe4, 0xd1, 0x34, 0x33, 0xbc, 0xba, 0x7d, 0xe9, 0x64, 0x68, 0x52, 0x72, 0xaf, 0x27, 0x60, - 0xb2, 0xc6, 0x55, 0xca, 0x51, 0x81, 0x78, 0xf1, 0xf0, 0x45, 0xb4, 0x38, 0xc2, 0x74, 0x16, 0x47, - 0x4e, 0x1f, 0xf9, 0x59, 0xc8, 0x6d, 0x6a, 0xb6, 0x5b, 0xc7, 0xee, 0x55, 0xac, 0x35, 0xb1, 0x1d, - 0x5e, 0x65, 0x73, 0x62, 0x95, 0x45, 0x10, 0xa7, 0x4b, 0x29, 0x5b, 0x65, 0xe8, 0x6f, 0x79, 0x0f, - 0xe2, 0xf4, 0xd8, 0xad, 0xb7, 0x02, 0x73, 0x0e, 0xb6, 0x02, 0x13, 0xfb, 0x79, 0xe0, 0x62, 0x47, - 0xe4, 0x8a, 0xe8, 0x03, 0x7a, 0x4a, 0xac, 0xa3, 0xb1, 0xc3, 0xd7, 0x51, 0xae, 0x84, 0x7c, 0x35, - 0x6d, 0x41, 0xb2, 0x4c, 0xcc, 0x6f, 0x6d, 0xd9, 0x6b, 0x48, 0xc4, 0x6f, 0x08, 0x5a, 0x83, 0x42, - 0x47, 0xb3, 0x5d, 0xfa, 0x19, 0xde, 0x1e, 0xed, 0x05, 0xd7, 0xf3, 0xf9, 0xfe, 0x59, 0x17, 0xea, - 0x2c, 0x7f, 0x4b, 0xae, 0x13, 0x2c, 0x94, 0xff, 0x6b, 0x1c, 0x12, 0x5c, 0x18, 0xcf, 0x41, 0x92, - 0x8b, 0x95, 0x6b, 0xe6, 0xfd, 0x8b, 0xfd, 0x8b, 0xd1, 0xa2, 0xb7, 0x68, 0x70, 0x3c, 0xc1, 0x83, - 0x1e, 0x86, 0x94, 0xbe, 0xa7, 0x19, 0xa6, 0x6a, 0x34, 0xb9, 0x03, 0x98, 0x79, 0xf3, 0x8d, 0xf9, - 0x64, 0x85, 0x94, 0xd5, 0x96, 0x95, 0x24, 0xad, 0xac, 0x35, 0xc9, 0xca, 0xbf, 0x87, 0x8d, 0xdd, - 0x3d, 0x97, 0xcf, 0x2e, 0xfe, 0x84, 0x9e, 0x81, 0x38, 0x51, 0x08, 0xfe, 0x91, 0x76, 0xb1, 0xcf, - 0x97, 0xf7, 0xf2, 0x24, 0xe5, 0x14, 0x79, 0xf1, 0x47, 0xfe, 0xcb, 0x7c, 0x44, 0xa1, 0x1c, 0xa8, - 0x02, 0xb9, 0x96, 0xe6, 0xb8, 0x2a, 0x5d, 0xb5, 0xc8, 0xeb, 0x27, 0x29, 0xc4, 0xc9, 0x7e, 0x81, - 0x70, 0xc1, 0xf2, 0xa6, 0x67, 0x08, 0x17, 0x2b, 0x6a, 0xa2, 0x33, 0x20, 0x51, 0x10, 0xdd, 0x6a, - 0xb7, 0x0d, 0x97, 0xf9, 0x52, 0x09, 0x2a, 0xf7, 0x3c, 0x29, 0xaf, 0xd0, 0x62, 0xea, 0x51, 0x9d, - 0x82, 0x34, 0xfd, 0x2c, 0x94, 0x92, 0xb0, 0xb3, 0xde, 0x29, 0x52, 0x40, 0x2b, 0x4f, 0x43, 0xc1, - 0xb7, 0x8d, 0x8c, 0x24, 0xc5, 0x50, 0xfc, 0x62, 0x4a, 0xf8, 0x38, 0xcc, 0x98, 0x78, 0x9f, 0x9e, - 0x3e, 0x0f, 0x51, 0xa7, 0x29, 0x35, 0x22, 0x75, 0x37, 0xc2, 0x1c, 0x0f, 0x41, 0x5e, 0x17, 0xc2, - 0x67, 0xb4, 0x40, 0x69, 0x73, 0x5e, 0x29, 0x25, 0x3b, 0x09, 0x29, 0xad, 0xd3, 0x61, 0x04, 0x19, - 0x6e, 0x1b, 0x3b, 0x1d, 0x5a, 0x75, 0x0e, 0xa6, 0x68, 0x1f, 0x6d, 0xec, 0x74, 0x5b, 0x2e, 0x07, - 0xc9, 0x52, 0x9a, 0x02, 0xa9, 0x50, 0x58, 0x39, 0xa5, 0x7d, 0x10, 0x72, 0xf8, 0x96, 0xd1, 0xc4, - 0xa6, 0x8e, 0x19, 0x5d, 0x8e, 0xd2, 0x65, 0x45, 0x21, 0x25, 0x3a, 0x0b, 0x9e, 0xcd, 0x53, 0x85, - 0x3d, 0xce, 0x33, 0x3c, 0x51, 0x5e, 0x62, 0xc5, 0xf2, 0x2c, 0xc4, 0x97, 0x35, 0x57, 0x23, 0x4e, - 0x85, 0xbb, 0xcf, 0x16, 0x99, 0xac, 0x42, 0x7e, 0xca, 0x5f, 0x88, 0x42, 0xfc, 0x86, 0xe5, 0x62, - 0xf4, 0x64, 0xc0, 0xe1, 0xcb, 0x0f, 0xd2, 0xe7, 0xba, 0xb1, 0x6b, 0xe2, 0xe6, 0x9a, 0xb3, 0x1b, - 0xb8, 0xc3, 0xc5, 0x57, 0xa7, 0x68, 0x48, 0x9d, 0x66, 0x60, 0xd2, 0xb6, 0xba, 0x66, 0x53, 0x9c, - 0x92, 0xa6, 0x0f, 0xa8, 0x0a, 0x29, 0x4f, 0x4b, 0xe2, 0xa3, 0xb4, 0xa4, 0x40, 0xb4, 0x84, 0xe8, - 0x30, 0x2f, 0x50, 0x92, 0xdb, 0x5c, 0x59, 0xca, 0x90, 0xf6, 0x8c, 0x17, 0xd7, 0xb6, 0xf1, 0x14, - 0xd6, 0x67, 0x23, 0x0b, 0x89, 0x37, 0xf6, 0x9e, 0xf0, 0x98, 0xc6, 0x49, 0x5e, 0x05, 0x97, 0x5e, - 0x48, 0xad, 0xf8, 0x7d, 0x32, 0x49, 0xda, 0x2f, 0x5f, 0xad, 0xd8, 0x9d, 0x32, 0xf7, 0x41, 0xda, - 0x31, 0x76, 0x4d, 0xcd, 0xed, 0xda, 0x98, 0x6b, 0x9e, 0x5f, 0x20, 0xff, 0x46, 0x04, 0x12, 0x4c, - 0x93, 0x03, 0x72, 0x8b, 0x0c, 0x96, 0x5b, 0x74, 0x98, 0xdc, 0x62, 0xf7, 0x2e, 0xb7, 0x12, 0x80, - 0xd7, 0x18, 0x87, 0x5f, 0xf3, 0x31, 0xc0, 0x5b, 0x60, 0x4d, 0xac, 0x1b, 0xbb, 0x7c, 0xa2, 0x06, - 0x98, 0xe4, 0xff, 0x1c, 0x21, 0x8e, 0x2b, 0xaf, 0x47, 0x25, 0xc8, 0x89, 0x76, 0xa9, 0x3b, 0x2d, - 0x6d, 0x97, 0xeb, 0xce, 0xfd, 0x43, 0x1b, 0x77, 0xa5, 0xa5, 0xed, 0x2a, 0x19, 0xde, 0x1e, 0xf2, - 0x30, 0x78, 0x1c, 0xa2, 0x43, 0xc6, 0x21, 0x34, 0xf0, 0xb1, 0x7b, 0x1b, 0xf8, 0xd0, 0x10, 0xc5, - 0x7b, 0x87, 0xe8, 0x57, 0xa2, 0x34, 0x78, 0xe9, 0x58, 0x8e, 0xd6, 0x7a, 0x37, 0x66, 0xc4, 0x29, - 0x48, 0x77, 0xac, 0x96, 0xca, 0x6a, 0xd8, 0xd7, 0x03, 0xa9, 0x8e, 0xd5, 0x52, 0xfa, 0x86, 0x7d, - 0xf2, 0x6d, 0x9a, 0x2e, 0x89, 0xb7, 0x41, 0x6a, 0xc9, 0x5e, 0xa9, 0xd9, 0x90, 0x65, 0xa2, 0xe0, - 0x6b, 0xd9, 0xe3, 0x44, 0x06, 0x74, 0x71, 0x8c, 0xf4, 0xaf, 0xbd, 0xac, 0xd9, 0x8c, 0x52, 0xe1, - 0x74, 0x84, 0x83, 0x99, 0xfe, 0x41, 0x51, 0x6f, 0x50, 0x2d, 0x15, 0x4e, 0x27, 0xff, 0x40, 0x04, - 0x60, 0x95, 0x48, 0x96, 0xf6, 0x97, 0xac, 0x42, 0x0e, 0x6d, 0x82, 0x1a, 0x7a, 0xf3, 0xdc, 0xb0, - 0x41, 0xe3, 0xef, 0xcf, 0x3a, 0xc1, 0x76, 0x57, 0x20, 0xe7, 0x2b, 0xa3, 0x83, 0x45, 0x63, 0xe6, - 0x0e, 0xf1, 0xa8, 0xeb, 0xd8, 0x55, 0xb2, 0xb7, 0x02, 0x4f, 0xf2, 0xbf, 0x8c, 0x40, 0x9a, 0xb6, - 0x69, 0x0d, 0xbb, 0x5a, 0x68, 0x0c, 0x23, 0xf7, 0x3e, 0x86, 0xf7, 0x03, 0x30, 0x18, 0xc7, 0x78, - 0x15, 0x73, 0xcd, 0x4a, 0xd3, 0x92, 0xba, 0xf1, 0x2a, 0x46, 0x97, 0x3c, 0x81, 0xc7, 0x0e, 0x17, - 0xb8, 0xf0, 0xb8, 0xb9, 0xd8, 0x4f, 0x40, 0x92, 0x5e, 0x8b, 0xb7, 0xef, 0x70, 0x27, 0x3a, 0x61, - 0x76, 0xdb, 0x8d, 0x7d, 0x47, 0x7e, 0x05, 0x92, 0x8d, 0x7d, 0x96, 0x0b, 0x39, 0x05, 0x69, 0xdb, - 0xb2, 0xf8, 0x9a, 0xcc, 0x7c, 0xa1, 0x14, 0x29, 0xa0, 0x4b, 0x90, 0x88, 0xff, 0xa3, 0x7e, 0xfc, - 0xef, 0x27, 0x30, 0x62, 0x63, 0x25, 0x30, 0xce, 0xfd, 0xa7, 0x08, 0x64, 0x02, 0xf6, 0x01, 0x3d, - 0x01, 0xc7, 0xca, 0xab, 0x1b, 0x95, 0xeb, 0x6a, 0x6d, 0x59, 0xbd, 0xb2, 0x5a, 0x5a, 0xf1, 0x3f, - 0x90, 0x2b, 0x1e, 0xbf, 0x73, 0x77, 0x01, 0x05, 0x68, 0xb7, 0x4c, 0xba, 0x19, 0x83, 0xce, 0xc3, - 0x4c, 0x98, 0xa5, 0x54, 0xae, 0x57, 0xd7, 0x1b, 0x52, 0xa4, 0x78, 0xec, 0xce, 0xdd, 0x85, 0xa9, - 0x00, 0x47, 0x69, 0xdb, 0xc1, 0xa6, 0xdb, 0xcf, 0x50, 0xd9, 0x58, 0x5b, 0xab, 0x35, 0xa4, 0x68, - 0x1f, 0x03, 0x37, 0xd8, 0x67, 0x61, 0x2a, 0xcc, 0xb0, 0x5e, 0x5b, 0x95, 0x62, 0x45, 0x74, 0xe7, - 0xee, 0x42, 0x3e, 0x40, 0xbd, 0x6e, 0xb4, 0x8a, 0xa9, 0x0f, 0xff, 0xc4, 0xdc, 0xc4, 0xc7, 0x7f, - 0x72, 0x2e, 0x42, 0x7a, 0x96, 0x0b, 0xd9, 0x08, 0xf4, 0x28, 0x9c, 0xa8, 0xd7, 0x56, 0xd6, 0xab, - 0xcb, 0xea, 0x5a, 0x7d, 0xa5, 0xe7, 0x9b, 0xe7, 0x62, 0xe1, 0xce, 0xdd, 0x85, 0x0c, 0xef, 0xd2, - 0x30, 0xea, 0x4d, 0xa5, 0x7a, 0x63, 0xa3, 0x51, 0x95, 0x22, 0x8c, 0x7a, 0xd3, 0xc6, 0xb7, 0x2c, - 0x97, 0xdd, 0xa8, 0xf9, 0x38, 0x9c, 0x1c, 0x40, 0xed, 0x75, 0x6c, 0xea, 0xce, 0xdd, 0x85, 0xdc, - 0xa6, 0x8d, 0xd9, 0xfc, 0xa1, 0x1c, 0x8b, 0x30, 0xdb, 0xcf, 0xb1, 0xb1, 0xb9, 0x51, 0x2f, 0xad, - 0x4a, 0x0b, 0x45, 0xe9, 0xce, 0xdd, 0x85, 0xac, 0x30, 0x86, 0x84, 0xde, 0xef, 0xd9, 0x3b, 0x15, - 0xed, 0x7c, 0x57, 0x32, 0x94, 0xcb, 0x63, 0x71, 0x44, 0x47, 0xb3, 0xb5, 0xf6, 0x51, 0xc3, 0x9d, - 0x11, 0xbb, 0xb1, 0xf2, 0x6b, 0x51, 0x28, 0x78, 0xce, 0xf4, 0x26, 0x7d, 0x03, 0x7a, 0x32, 0x98, - 0x87, 0xc9, 0x0c, 0x5d, 0xc6, 0x18, 0xb5, 0x48, 0xd3, 0xbc, 0x17, 0x52, 0xc2, 0x29, 0xe3, 0xe6, - 0x62, 0xa1, 0x9f, 0xaf, 0xca, 0x29, 0x38, 0xab, 0xc7, 0x81, 0x9e, 0x87, 0xb4, 0x67, 0x3c, 0xbc, - 0x5b, 0xa7, 0x86, 0x5b, 0x1b, 0xce, 0xef, 0xf3, 0xa0, 0x67, 0xfd, 0xb0, 0x21, 0x3e, 0x2c, 0x10, - 0xb9, 0xc1, 0x08, 0x38, 0xb3, 0xa0, 0x97, 0x6b, 0x7c, 0xda, 0xf1, 0xde, 0xd3, 0x1b, 0x3b, 0xf6, - 0x55, 0x16, 0x49, 0x31, 0xaf, 0x24, 0xd5, 0xd6, 0xf6, 0xcb, 0x34, 0x98, 0x3a, 0x01, 0x49, 0x52, - 0xb9, 0xcb, 0xbf, 0x09, 0x8f, 0x29, 0x89, 0xb6, 0xb6, 0xbf, 0xa2, 0x39, 0xd7, 0xe2, 0xa9, 0x98, - 0x14, 0x97, 0x7f, 0x36, 0x02, 0xf9, 0x70, 0x1f, 0xd1, 0x23, 0x80, 0x08, 0x87, 0xb6, 0x8b, 0x55, - 0x62, 0x62, 0xa8, 0xb0, 0x04, 0x6e, 0xa1, 0xad, 0xed, 0x97, 0x76, 0xf1, 0x7a, 0xb7, 0x4d, 0x1b, - 0xe0, 0xa0, 0x35, 0x90, 0x04, 0xb1, 0x18, 0x27, 0x2e, 0xcc, 0x93, 0xfd, 0x77, 0x50, 0x72, 0x02, - 0xb6, 0x50, 0xbd, 0x4e, 0x16, 0xaa, 0x3c, 0xc3, 0xf3, 0x76, 0xd3, 0x43, 0x5d, 0x89, 0x85, 0xbb, - 0x22, 0x3f, 0x0f, 0x85, 0x1e, 0x79, 0x22, 0x19, 0x72, 0x3c, 0x2b, 0x40, 0x77, 0x2a, 0x99, 0x7f, - 0x9c, 0x56, 0x32, 0x2c, 0xfa, 0xa7, 0x3b, 0xb7, 0x4b, 0xa9, 0x4f, 0x7d, 0x74, 0x3e, 0x42, 0x13, - 0xe6, 0x8f, 0x40, 0x2e, 0x24, 0x51, 0x91, 0xa9, 0x8b, 0xf8, 0x99, 0x3a, 0x9f, 0xf8, 0x65, 0xc8, - 0x12, 0x43, 0x89, 0x9b, 0x9c, 0xf6, 0x61, 0x28, 0x30, 0x43, 0xde, 0x2b, 0x6b, 0xe6, 0x49, 0xad, - 0x09, 0x81, 0xcb, 0xc2, 0xb5, 0x0a, 0x8b, 0x3d, 0x23, 0xa8, 0x56, 0x34, 0xa7, 0xfc, 0xfe, 0x8f, - 0xbf, 0x39, 0x17, 0x79, 0x67, 0x26, 0xe2, 0xef, 0xbe, 0x1f, 0x4e, 0x05, 0x2a, 0xb5, 0x6d, 0xdd, - 0x08, 0x65, 0x1d, 0x0a, 0x01, 0x25, 0x23, 0x95, 0xa3, 0xb2, 0x07, 0x87, 0xe6, 0x30, 0x0e, 0x4f, - 0x98, 0x15, 0x0f, 0xb7, 0x08, 0xa3, 0x13, 0x1b, 0x83, 0x73, 0x94, 0xff, 0x27, 0x05, 0x49, 0x05, - 0x7f, 0xb0, 0x8b, 0x1d, 0x17, 0x5d, 0x80, 0x38, 0xd6, 0xf7, 0xac, 0x41, 0x29, 0x21, 0xd2, 0xb9, - 0x45, 0x4e, 0x57, 0xd5, 0xf7, 0xac, 0xab, 0x13, 0x0a, 0xa5, 0x45, 0x17, 0x61, 0x72, 0xa7, 0xd5, - 0xe5, 0x79, 0x8a, 0x1e, 0x63, 0x11, 0x64, 0xba, 0x42, 0x88, 0xae, 0x4e, 0x28, 0x8c, 0x9a, 0xbc, - 0x8a, 0xde, 0xf3, 0x1b, 0x3b, 0xfc, 0x55, 0x35, 0x73, 0x87, 0xbe, 0x8a, 0xd0, 0xa2, 0x32, 0x80, - 0x61, 0x1a, 0xae, 0x4a, 0x63, 0x78, 0xee, 0x09, 0x3e, 0x30, 0x9c, 0xd3, 0x70, 0x69, 0xd4, 0x7f, - 0x75, 0x42, 0x49, 0x1b, 0xe2, 0x81, 0x34, 0xf7, 0x83, 0x5d, 0x6c, 0x1f, 0x70, 0x07, 0x70, 0x68, - 0x73, 0xdf, 0x4f, 0x88, 0x48, 0x73, 0x29, 0x35, 0xaa, 0x42, 0x86, 0x7e, 0xe0, 0xca, 0xe6, 0x2f, - 0xbf, 0x59, 0x56, 0x1e, 0xc6, 0x5c, 0x26, 0xa4, 0x74, 0x4a, 0x5f, 0x9d, 0x50, 0x60, 0xdb, 0x7b, - 0x22, 0x46, 0x92, 0xdd, 0x3c, 0xe6, 0xee, 0xf3, 0xfb, 0x34, 0xe7, 0x87, 0x61, 0xd0, 0xeb, 0xc7, - 0x1a, 0xfb, 0x57, 0x27, 0x94, 0xa4, 0xce, 0x7e, 0x92, 0xfe, 0x37, 0x71, 0xcb, 0xb8, 0x85, 0x6d, - 0xc2, 0x9f, 0x3e, 0xbc, 0xff, 0xcb, 0x8c, 0x92, 0x22, 0xa4, 0x9b, 0xe2, 0x81, 0x18, 0x5a, 0x6c, - 0x36, 0x79, 0x37, 0xa0, 0xdf, 0x4e, 0x87, 0xc6, 0xd9, 0x6c, 0x8a, 0x4e, 0xa4, 0x30, 0xff, 0x8d, - 0x9e, 0xf1, 0x3c, 0xd4, 0x4c, 0xbf, 0x53, 0x18, 0xea, 0x00, 0xcb, 0x55, 0x4c, 0x08, 0x4f, 0x15, - 0xad, 0x43, 0xbe, 0x65, 0x38, 0xae, 0xea, 0x98, 0x5a, 0xc7, 0xd9, 0xb3, 0x5c, 0x87, 0x06, 0xfd, - 0x99, 0x0b, 0x0f, 0x0d, 0x43, 0x58, 0x35, 0x1c, 0xb7, 0x2e, 0x88, 0xaf, 0x4e, 0x28, 0xb9, 0x56, - 0xb0, 0x80, 0xe0, 0x59, 0x3b, 0x3b, 0xd8, 0xf6, 0x00, 0x69, 0x72, 0xe0, 0x10, 0xbc, 0x0d, 0x42, - 0x2d, 0xf8, 0x09, 0x9e, 0x15, 0x2c, 0x40, 0xdf, 0x0c, 0xd3, 0x2d, 0x4b, 0x6b, 0x7a, 0x70, 0xaa, - 0xbe, 0xd7, 0x35, 0x6f, 0xd2, 0x4c, 0x42, 0xe6, 0xc2, 0xd9, 0xa1, 0x8d, 0xb4, 0xb4, 0xa6, 0x80, - 0xa8, 0x10, 0x86, 0xab, 0x13, 0xca, 0x54, 0xab, 0xb7, 0x10, 0x7d, 0x00, 0x66, 0xb4, 0x4e, 0xa7, - 0x75, 0xd0, 0x8b, 0x5e, 0xa0, 0xe8, 0xe7, 0x86, 0xa1, 0x97, 0x08, 0x4f, 0x2f, 0x3c, 0xd2, 0xfa, - 0x4a, 0x51, 0x03, 0xa4, 0x8e, 0x8d, 0xe9, 0x37, 0x31, 0x1d, 0xee, 0xaa, 0xd0, 0x1b, 0x83, 0x32, - 0x17, 0x4e, 0x0f, 0xc3, 0xde, 0x64, 0xf4, 0xc2, 0xb3, 0xb9, 0x3a, 0xa1, 0x14, 0x3a, 0xe1, 0x22, - 0x86, 0x6a, 0xe9, 0x98, 0x5e, 0x68, 0xc6, 0x51, 0xa7, 0x46, 0xa1, 0x52, 0xfa, 0x30, 0x6a, 0xa8, - 0xa8, 0x9c, 0xe4, 0x67, 0xda, 0xf8, 0x85, 0x2f, 0xa7, 0x21, 0x13, 0x30, 0x2c, 0x68, 0x16, 0x92, - 0x7c, 0x8f, 0x5f, 0x9c, 0x85, 0xe3, 0x8f, 0x72, 0x1e, 0xb2, 0x41, 0x63, 0x22, 0x7f, 0x24, 0xe2, - 0x71, 0xd2, 0x2f, 0xe5, 0x67, 0xc3, 0xa9, 0xc3, 0xb4, 0x9f, 0x15, 0x7c, 0x50, 0xac, 0x22, 0xa2, - 0x9e, 0xed, 0x26, 0x65, 0x69, 0x21, 0x5f, 0xc4, 0xd0, 0x3c, 0x64, 0x3a, 0x17, 0x3a, 0x1e, 0x49, - 0x8c, 0x92, 0x40, 0xe7, 0x42, 0x47, 0x10, 0x3c, 0x00, 0x59, 0xd2, 0x53, 0x35, 0xe8, 0x68, 0xa4, - 0x95, 0x0c, 0x29, 0xe3, 0x24, 0xf2, 0xbf, 0x8d, 0x82, 0xd4, 0x6b, 0x80, 0xbc, 0x9c, 0x62, 0xe4, - 0xc8, 0x39, 0xc5, 0x93, 0xbd, 0xd9, 0x4c, 0x3f, 0x81, 0xb9, 0x0a, 0x92, 0x9f, 0x87, 0x63, 0x0b, - 0xc1, 0x70, 0xc7, 0xa9, 0xc7, 0xc3, 0x53, 0x0a, 0x7a, 0x8f, 0xcb, 0x77, 0x25, 0xb4, 0xf7, 0x22, - 0x2e, 0xb2, 0xef, 0x1d, 0x62, 0xcf, 0x5f, 0xd8, 0xea, 0x34, 0x35, 0x17, 0x8b, 0xbc, 0x48, 0x60, - 0x1b, 0xe6, 0x61, 0x28, 0x68, 0x9d, 0x8e, 0xea, 0xb8, 0x9a, 0x8b, 0xf9, 0xb2, 0x3e, 0xc9, 0xd2, - 0x83, 0x5a, 0xa7, 0x53, 0x27, 0xa5, 0x6c, 0x59, 0x7f, 0x08, 0xf2, 0xc4, 0x26, 0x1b, 0x5a, 0x4b, - 0xe5, 0x59, 0x82, 0x04, 0x5b, 0xfd, 0x79, 0xe9, 0x55, 0x5a, 0x28, 0x37, 0xbd, 0x11, 0xa7, 0xf6, - 0xd8, 0x0b, 0xb3, 0x22, 0x81, 0x30, 0x0b, 0xf1, 0x1b, 0x0c, 0x98, 0x7c, 0xc4, 0xad, 0x0f, 0x83, - 0xb3, 0xbb, 0x33, 0x34, 0x24, 0xbb, 0xc5, 0x12, 0x1e, 0x29, 0x85, 0x3d, 0xc8, 0x1f, 0x8a, 0xc2, - 0x54, 0x9f, 0xe5, 0x1e, 0x98, 0xf6, 0xf6, 0xe3, 0xcb, 0xe8, 0x91, 0xe2, 0xcb, 0xeb, 0xe1, 0xb4, - 0x6e, 0x60, 0xe5, 0x3b, 0xd5, 0x27, 0x64, 0x66, 0x37, 0x89, 0x42, 0x73, 0x90, 0x40, 0xe6, 0x97, - 0xaa, 0xf9, 0x16, 0xcc, 0x6c, 0x1f, 0xbc, 0xaa, 0x99, 0xae, 0x61, 0x62, 0xb5, 0x6f, 0xd4, 0xfa, - 0x97, 0xd2, 0x35, 0xc3, 0xd9, 0xc6, 0x7b, 0xda, 0x2d, 0xc3, 0x12, 0xcd, 0x9a, 0xf6, 0xf8, 0xfd, - 0xe4, 0xae, 0xac, 0x40, 0x3e, 0xbc, 0xf4, 0xa0, 0x3c, 0x44, 0xdd, 0x7d, 0xde, 0xff, 0xa8, 0xbb, - 0x8f, 0x1e, 0xe7, 0x79, 0xa0, 0x28, 0xcd, 0x03, 0xf5, 0xbf, 0x88, 0xf3, 0xf9, 0x49, 0x20, 0x59, - 0xf6, 0x66, 0x83, 0xb7, 0x1c, 0xf5, 0xa2, 0xca, 0x67, 0xa1, 0xd0, 0xb3, 0xde, 0x0c, 0xcb, 0x0a, - 0xca, 0x05, 0xc8, 0x85, 0x16, 0x17, 0xf9, 0x38, 0xcc, 0x0c, 0x5a, 0x2b, 0xe4, 0x3d, 0xaf, 0x3c, - 0x64, 0xf3, 0xd1, 0x45, 0x48, 0x79, 0x8b, 0xc5, 0x80, 0x2c, 0x04, 0xed, 0x85, 0x20, 0x56, 0x3c, - 0xd2, 0x50, 0x32, 0x3b, 0x1a, 0x4a, 0x66, 0xcb, 0xdf, 0x0a, 0xb3, 0xc3, 0x16, 0x82, 0x9e, 0x6e, - 0xc4, 0x3d, 0x2d, 0x3c, 0x0e, 0x09, 0x7e, 0x6b, 0x61, 0x94, 0x6e, 0xdf, 0xf0, 0x27, 0xa2, 0x9d, - 0x6c, 0x51, 0x88, 0xb1, 0x5d, 0x1d, 0xfa, 0x20, 0xab, 0x70, 0x72, 0xe8, 0x62, 0x30, 0x7c, 0x23, - 0x88, 0x01, 0xf1, 0x8d, 0x20, 0x5d, 0x34, 0xc7, 0xa1, 0x7d, 0x15, 0x87, 0x1d, 0xd8, 0x93, 0xfc, - 0x7a, 0x0c, 0x8e, 0x0f, 0x5e, 0x12, 0xd0, 0x02, 0x64, 0x89, 0xdf, 0xed, 0x86, 0x5d, 0x74, 0x68, - 0x6b, 0xfb, 0x0d, 0xee, 0x9f, 0xf3, 0x44, 0x7a, 0xd4, 0x4b, 0xa4, 0xa3, 0x2d, 0x98, 0x6a, 0x59, - 0xba, 0xd6, 0x52, 0x03, 0x1a, 0xcf, 0x95, 0xfd, 0xc1, 0x3e, 0x61, 0x57, 0xd9, 0x5d, 0xe6, 0xcd, - 0x3e, 0xa5, 0x2f, 0x50, 0x8c, 0x55, 0x4f, 0xf3, 0xd1, 0x32, 0x64, 0xda, 0xbe, 0x22, 0x1f, 0x41, - 0xd9, 0x83, 0x6c, 0x81, 0x21, 0x99, 0x1c, 0xb8, 0xed, 0x93, 0x38, 0xb2, 0x89, 0x1e, 0xb6, 0x83, - 0x92, 0x1c, 0xba, 0x83, 0x32, 0x68, 0xbb, 0x22, 0x35, 0x78, 0xbb, 0xe2, 0xc3, 0xc1, 0xa1, 0x09, - 0x2d, 0xa2, 0xfd, 0x3b, 0x18, 0xa8, 0x0e, 0x33, 0x9c, 0xbf, 0x19, 0x92, 0x7d, 0x74, 0x5c, 0x43, - 0x83, 0x04, 0xfb, 0x70, 0xb1, 0xc7, 0xee, 0x4d, 0xec, 0xc2, 0x96, 0xc6, 0x03, 0xb6, 0xf4, 0xff, - 0xb3, 0xa1, 0xf8, 0x0f, 0x69, 0x48, 0x29, 0xd8, 0xe9, 0x90, 0x85, 0x13, 0x95, 0x21, 0x8d, 0xf7, - 0x75, 0xdc, 0x71, 0xfd, 0x6d, 0xca, 0x41, 0xc1, 0x00, 0xa3, 0xae, 0x0a, 0x4a, 0xe2, 0x89, 0x7b, - 0x6c, 0xe8, 0x49, 0x1e, 0x6c, 0x0d, 0x8f, 0x9b, 0x38, 0x7b, 0x30, 0xda, 0xba, 0x24, 0xa2, 0xad, - 0xd8, 0x50, 0xe7, 0x9b, 0x71, 0xf5, 0x84, 0x5b, 0x4f, 0xf2, 0x70, 0x2b, 0x3e, 0xe2, 0x65, 0xa1, - 0x78, 0xab, 0x12, 0x8a, 0xb7, 0x12, 0x23, 0xba, 0x39, 0x24, 0xe0, 0xba, 0x24, 0x02, 0xae, 0xe4, - 0x88, 0x16, 0xf7, 0x44, 0x5c, 0x57, 0xc2, 0x11, 0x57, 0x6a, 0x88, 0x01, 0x11, 0xdc, 0x43, 0x43, - 0xae, 0xe7, 0x02, 0x21, 0x57, 0x7a, 0x68, 0xbc, 0xc3, 0x40, 0x06, 0xc4, 0x5c, 0x95, 0x50, 0xcc, - 0x05, 0x23, 0x64, 0x30, 0x24, 0xe8, 0xfa, 0xa6, 0x60, 0xd0, 0x95, 0x19, 0x1a, 0xb7, 0xf1, 0xf1, - 0x1e, 0x14, 0x75, 0x3d, 0xeb, 0x45, 0x5d, 0xd9, 0xa1, 0x61, 0x23, 0xef, 0x43, 0x6f, 0xd8, 0xb5, - 0xd1, 0x17, 0x76, 0xe5, 0xf8, 0x9f, 0x09, 0x19, 0x06, 0x31, 0x22, 0xee, 0xda, 0xe8, 0x8b, 0xbb, - 0xf2, 0x23, 0x00, 0x47, 0x04, 0x5e, 0x7f, 0x63, 0x70, 0xe0, 0x35, 0x3c, 0x34, 0xe2, 0xcd, 0x1c, - 0x2f, 0xf2, 0x52, 0x87, 0x44, 0x5e, 0x2c, 0x3a, 0x7a, 0x64, 0x28, 0xfc, 0xd8, 0xa1, 0xd7, 0xd6, - 0x80, 0xd0, 0x8b, 0x05, 0x49, 0x67, 0x86, 0x82, 0x8f, 0x11, 0x7b, 0x6d, 0x0d, 0x88, 0xbd, 0xd0, - 0x48, 0xd8, 0xa3, 0x04, 0x5f, 0x93, 0x52, 0x42, 0x3e, 0x4b, 0x5c, 0xdf, 0x1e, 0x3b, 0x45, 0xfc, - 0x07, 0x6c, 0xdb, 0x96, 0x2d, 0x4e, 0xd6, 0xd2, 0x07, 0xf9, 0x0c, 0x71, 0xc6, 0x7d, 0x9b, 0x74, - 0x48, 0xa0, 0x46, 0xfd, 0xb4, 0x80, 0x1d, 0x92, 0x3f, 0x15, 0xf1, 0x79, 0xa9, 0x0f, 0x1b, 0x74, - 0xe4, 0xd3, 0xdc, 0x91, 0x0f, 0x84, 0x6f, 0xd1, 0x70, 0xf8, 0x36, 0x0f, 0x19, 0xe2, 0x7f, 0xf5, - 0x44, 0x66, 0x5a, 0xc7, 0x8b, 0xcc, 0xc4, 0x91, 0x02, 0x16, 0xe4, 0xf1, 0x65, 0x85, 0xed, 0xe4, - 0x14, 0xbc, 0xe3, 0x15, 0x2c, 0xa6, 0x40, 0x8f, 0xc1, 0x74, 0x80, 0xd6, 0xf3, 0xeb, 0x58, 0x98, - 0x22, 0x79, 0xd4, 0x25, 0xee, 0xe0, 0xfd, 0xab, 0x88, 0x2f, 0x21, 0x3f, 0xa4, 0x1b, 0x14, 0x7d, - 0x45, 0xde, 0xa6, 0xe8, 0x2b, 0x7a, 0xcf, 0xd1, 0x57, 0xd0, 0x4f, 0x8d, 0x85, 0xfd, 0xd4, 0xff, - 0x19, 0xf1, 0xc7, 0xc4, 0x8b, 0xa5, 0x74, 0xab, 0x89, 0xb9, 0xe7, 0x48, 0x7f, 0x13, 0xa7, 0xa2, - 0x65, 0xed, 0x72, 0xff, 0x90, 0xfc, 0x24, 0x54, 0xde, 0xc2, 0x91, 0xe6, 0xeb, 0x82, 0xe7, 0x74, - 0x4e, 0x06, 0xcf, 0xff, 0xf2, 0x43, 0xb1, 0x09, 0xff, 0x50, 0xac, 0xf7, 0xed, 0x5a, 0x32, 0xf0, - 0xed, 0x1a, 0x7a, 0x06, 0xd2, 0x34, 0x23, 0xaa, 0x5a, 0x1d, 0xf1, 0x47, 0x65, 0x4e, 0x0d, 0x3f, - 0x10, 0xeb, 0xd0, 0xa3, 0x7a, 0xec, 0x10, 0xad, 0xef, 0x31, 0xa4, 0x43, 0x1e, 0xc3, 0x7d, 0x90, - 0x26, 0xad, 0x67, 0x97, 0xa3, 0x03, 0xff, 0xf0, 0x51, 0x14, 0xc8, 0x1f, 0x00, 0xd4, 0xbf, 0x48, - 0xa0, 0xab, 0x90, 0xc0, 0xb7, 0xe8, 0xa5, 0x7c, 0xec, 0xa0, 0xe1, 0xf1, 0x7e, 0xd7, 0x94, 0x54, - 0x97, 0x67, 0x89, 0x90, 0xbf, 0xf8, 0xc6, 0xbc, 0xc4, 0xa8, 0x1f, 0xf5, 0xce, 0xf9, 0x2b, 0x9c, - 0x5f, 0xfe, 0xc3, 0x28, 0x09, 0x60, 0x42, 0x0b, 0xc8, 0x40, 0xd9, 0x0e, 0xda, 0x22, 0x1c, 0x4f, - 0xde, 0x73, 0x00, 0xbb, 0x9a, 0xa3, 0xde, 0xd6, 0x4c, 0x17, 0x37, 0xb9, 0xd0, 0x03, 0x25, 0xa8, - 0x08, 0x29, 0xf2, 0xd4, 0x75, 0x70, 0x93, 0x87, 0xd1, 0xde, 0x73, 0xa0, 0x9f, 0xc9, 0xaf, 0xad, - 0x9f, 0x61, 0x29, 0xa7, 0x7a, 0xa4, 0x1c, 0x08, 0x2e, 0xd2, 0xc1, 0xe0, 0x82, 0x1d, 0x0c, 0xe6, - 0xe7, 0x13, 0x81, 0xb5, 0x4d, 0x3c, 0xa3, 0x07, 0x21, 0xd7, 0xc6, 0xed, 0x8e, 0x65, 0xb5, 0x54, - 0x66, 0x6e, 0xd8, 0x5f, 0x41, 0xc8, 0xf2, 0xc2, 0x2a, 0xb5, 0x3a, 0xdf, 0x19, 0xf5, 0xe7, 0x9f, - 0x1f, 0x44, 0x7e, 0xc3, 0x09, 0x98, 0x5e, 0x1b, 0xdd, 0xeb, 0x22, 0xa0, 0x7a, 0xf0, 0xd4, 0x48, - 0x97, 0x9a, 0x05, 0xa1, 0xd0, 0xe3, 0xda, 0x0f, 0xff, 0x74, 0x09, 0x2b, 0x76, 0xd0, 0x4b, 0x70, - 0xa2, 0xc7, 0xb6, 0x79, 0xd0, 0xd1, 0x71, 0x4d, 0xdc, 0xb1, 0xb0, 0x89, 0x13, 0xd0, 0xbe, 0xb0, - 0x62, 0x5f, 0xe3, 0xac, 0xab, 0x41, 0x3e, 0xec, 0xf1, 0x0c, 0x1c, 0x7e, 0xfa, 0x57, 0x77, 0x5c, - 0xcd, 0x30, 0xd5, 0x50, 0x3a, 0x28, 0xcb, 0x0a, 0x79, 0x92, 0x69, 0x13, 0x8e, 0x0d, 0xf4, 0x7c, - 0xd0, 0xd3, 0x90, 0xf6, 0x9d, 0x26, 0x26, 0xd5, 0x43, 0xd2, 0x05, 0x3e, 0xad, 0xfc, 0xeb, 0x11, - 0x1f, 0x32, 0x9c, 0x80, 0xa8, 0x42, 0x82, 0x1d, 0x7b, 0xe3, 0x87, 0x69, 0x1e, 0x1b, 0xcf, 0x67, - 0x5a, 0x64, 0x67, 0xe2, 0x14, 0xce, 0x2c, 0x7f, 0x00, 0x12, 0xac, 0x04, 0x65, 0x20, 0xe9, 0xdf, - 0x9b, 0x0b, 0x90, 0x28, 0x55, 0x2a, 0xd5, 0x4d, 0x71, 0x09, 0x66, 0x79, 0x43, 0x69, 0x48, 0x51, - 0x52, 0xac, 0x54, 0xaf, 0x55, 0x2b, 0x0d, 0x29, 0x86, 0xa6, 0x20, 0xc7, 0x7e, 0xab, 0x57, 0x36, - 0x94, 0xb5, 0x52, 0x43, 0x8a, 0x07, 0x8a, 0xea, 0xd5, 0xf5, 0xe5, 0xaa, 0x22, 0x4d, 0xca, 0x4f, - 0xc0, 0xc9, 0xa1, 0x5e, 0x96, 0x9f, 0x5d, 0x88, 0x04, 0xb2, 0x0b, 0xf2, 0xeb, 0x51, 0x28, 0x0e, - 0x77, 0x9d, 0xd0, 0xb5, 0x9e, 0x8e, 0x5f, 0x38, 0x82, 0xdf, 0xd5, 0xd3, 0x7b, 0xf4, 0x10, 0xe4, - 0x6d, 0xbc, 0x83, 0x5d, 0x7d, 0x8f, 0xb9, 0x72, 0x6c, 0xc9, 0xcc, 0x29, 0x39, 0x5e, 0x4a, 0x99, - 0x1c, 0x46, 0xf6, 0x0a, 0xd6, 0x5d, 0x95, 0xd9, 0x22, 0x87, 0xff, 0x61, 0xd0, 0x1c, 0x2b, 0xad, - 0xb3, 0x42, 0xf9, 0x5b, 0x8f, 0x24, 0xcb, 0x34, 0x4c, 0x2a, 0xd5, 0x86, 0xf2, 0x92, 0x14, 0x43, - 0x08, 0xf2, 0xf4, 0xa7, 0x5a, 0x5f, 0x2f, 0x6d, 0xd6, 0xaf, 0x6e, 0x10, 0x59, 0x4e, 0x43, 0x41, - 0xc8, 0x52, 0x14, 0x4e, 0xca, 0x8f, 0xc0, 0x89, 0x21, 0x7e, 0xdf, 0x80, 0x73, 0x88, 0x1f, 0x8b, - 0x04, 0xa9, 0xc3, 0x31, 0xff, 0x06, 0x24, 0x1c, 0x57, 0x73, 0xbb, 0x0e, 0x17, 0xe2, 0xd3, 0xe3, - 0x3a, 0x82, 0x8b, 0xe2, 0x47, 0x9d, 0xb2, 0x2b, 0x1c, 0x46, 0xbe, 0x08, 0xf9, 0x70, 0xcd, 0x70, - 0x19, 0xf8, 0x4a, 0x14, 0x95, 0x5f, 0x02, 0x08, 0xe4, 0x23, 0xbd, 0x13, 0x5d, 0x91, 0xe0, 0x89, - 0xae, 0x8b, 0x30, 0x79, 0xcb, 0x62, 0x36, 0x63, 0xf0, 0xc4, 0xb9, 0x61, 0xb9, 0x38, 0x90, 0x7c, - 0x60, 0xd4, 0xb2, 0x01, 0xa8, 0x3f, 0x27, 0x34, 0xe4, 0x15, 0xcf, 0x85, 0x5f, 0xf1, 0xc0, 0xd0, - 0xec, 0xd2, 0xe0, 0x57, 0xbd, 0x0a, 0x93, 0xd4, 0xda, 0x0c, 0xfc, 0xc4, 0xe7, 0x5b, 0x00, 0x34, - 0xd7, 0xb5, 0x8d, 0xed, 0xae, 0xff, 0x82, 0xf9, 0xc1, 0xd6, 0xaa, 0x24, 0xe8, 0xca, 0xf7, 0x71, - 0xb3, 0x35, 0xe3, 0xb3, 0x06, 0x4c, 0x57, 0x00, 0x50, 0x5e, 0x87, 0x7c, 0x98, 0x77, 0xf0, 0x27, - 0x4b, 0xfe, 0xa7, 0xff, 0x69, 0xe1, 0x3e, 0x79, 0xce, 0x17, 0xbf, 0x8e, 0x83, 0x3e, 0xc8, 0x77, - 0x22, 0x90, 0x6a, 0xec, 0x73, 0x3d, 0x3e, 0xe4, 0x50, 0xa5, 0xff, 0xdd, 0x96, 0x97, 0x2c, 0x64, - 0xf9, 0xd8, 0x98, 0x97, 0xe5, 0xfd, 0x26, 0x6f, 0xa6, 0xc6, 0xc7, 0x8d, 0x76, 0x45, 0xb6, 0x9b, - 0x5b, 0xa7, 0xcb, 0xe3, 0x7d, 0x23, 0x31, 0x03, 0x93, 0xc1, 0xef, 0x1b, 0xd8, 0x83, 0xdc, 0x0c, - 0x1c, 0x4b, 0x60, 0xcb, 0x46, 0xf0, 0x63, 0x8a, 0xc8, 0x91, 0x3f, 0xa6, 0xf0, 0xde, 0x12, 0x0d, - 0xbe, 0xe5, 0x16, 0xa4, 0x84, 0x52, 0xa0, 0xf7, 0x05, 0xcf, 0x9e, 0x88, 0x3d, 0x9a, 0xa1, 0x8b, - 0x27, 0x87, 0x0f, 0x1c, 0x3d, 0x39, 0x07, 0x53, 0xfc, 0xc8, 0x9d, 0x1f, 0x57, 0xf0, 0xbf, 0x18, - 0x50, 0x60, 0x15, 0xab, 0x22, 0xa8, 0x90, 0x7f, 0x2a, 0x02, 0x52, 0xaf, 0x56, 0xbe, 0x9b, 0x0d, - 0x20, 0x46, 0x91, 0x68, 0x7f, 0xe0, 0xca, 0x6e, 0x36, 0xf2, 0x39, 0x52, 0xea, 0x5f, 0xda, 0xfd, - 0xa1, 0x28, 0x64, 0x02, 0x39, 0x3d, 0xf4, 0x54, 0xe8, 0x08, 0xe8, 0xc2, 0x61, 0xf9, 0xbf, 0xc0, - 0x19, 0xd0, 0x50, 0xc7, 0xa2, 0x47, 0xef, 0xd8, 0xdb, 0x7f, 0x48, 0x7f, 0xf0, 0xd7, 0x3e, 0x93, - 0x43, 0xbe, 0xf6, 0xf9, 0x8e, 0x08, 0xa4, 0xbc, 0xa5, 0xfb, 0xa8, 0xd9, 0xfc, 0xe3, 0x90, 0xe0, - 0xab, 0x13, 0x4b, 0xe7, 0xf3, 0xa7, 0x81, 0xb9, 0xd0, 0x22, 0xa4, 0xc4, 0xdf, 0x79, 0xe2, 0x81, - 0xa8, 0xf7, 0x7c, 0xee, 0x59, 0xc8, 0x04, 0x36, 0x56, 0x88, 0x9d, 0x58, 0xaf, 0xbe, 0x20, 0x4d, - 0x14, 0x93, 0x77, 0xee, 0x2e, 0xc4, 0xd6, 0xf1, 0x6d, 0x32, 0xc3, 0x94, 0x6a, 0xe5, 0x6a, 0xb5, - 0x72, 0x5d, 0x8a, 0x14, 0x33, 0x77, 0xee, 0x2e, 0x24, 0x15, 0x4c, 0xd3, 0x57, 0xe7, 0xae, 0x43, - 0xa1, 0x67, 0x60, 0xc2, 0xf6, 0x1d, 0x41, 0x7e, 0x79, 0x6b, 0x73, 0xb5, 0x56, 0x29, 0x35, 0xaa, - 0x2a, 0x3b, 0x4e, 0x87, 0x4e, 0xc0, 0xf4, 0x6a, 0x6d, 0xe5, 0x6a, 0x43, 0xad, 0xac, 0xd6, 0xaa, - 0xeb, 0x0d, 0xb5, 0xd4, 0x68, 0x94, 0x2a, 0xd7, 0xa5, 0xe8, 0x85, 0xaf, 0x02, 0x14, 0x4a, 0xe5, - 0x4a, 0x8d, 0xac, 0xcf, 0x06, 0xbf, 0x75, 0xbd, 0x02, 0x71, 0x9a, 0x0a, 0x38, 0xf4, 0xa8, 0x48, - 0xf1, 0xf0, 0xdc, 0x26, 0xba, 0x02, 0x93, 0x34, 0x4b, 0x80, 0x0e, 0x3f, 0x3b, 0x52, 0x1c, 0x91, - 0xec, 0x24, 0x8d, 0xa1, 0xd3, 0xe9, 0xd0, 0xc3, 0x24, 0xc5, 0xc3, 0x73, 0x9f, 0x48, 0x81, 0xb4, - 0x1f, 0x65, 0x8c, 0x3e, 0x5c, 0x51, 0x1c, 0xc3, 0x3a, 0xa2, 0x55, 0x48, 0x8a, 0xc0, 0x70, 0xd4, - 0x71, 0x8f, 0xe2, 0xc8, 0xe4, 0x24, 0x11, 0x17, 0x0b, 0xe0, 0x0f, 0x3f, 0xbb, 0x52, 0x1c, 0x91, - 0x69, 0x45, 0x35, 0xef, 0x10, 0xfe, 0x88, 0x23, 0x1c, 0xc5, 0x51, 0xc9, 0x46, 0x22, 0x34, 0x3f, - 0x35, 0x32, 0xfa, 0x44, 0x4e, 0x71, 0x8c, 0x24, 0x32, 0xda, 0x02, 0x08, 0x84, 0xeb, 0x63, 0x1c, - 0xb5, 0x29, 0x8e, 0x93, 0x1c, 0x46, 0x1b, 0x90, 0xf2, 0xa2, 0xa7, 0x91, 0x07, 0x5f, 0x8a, 0xa3, - 0xb3, 0xb4, 0xe8, 0x03, 0x90, 0x0b, 0x47, 0x0d, 0xe3, 0x1d, 0x67, 0x29, 0x8e, 0x99, 0x7e, 0x25, - 0xf8, 0xe1, 0x10, 0x62, 0xbc, 0xe3, 0x2d, 0xc5, 0x31, 0xb3, 0xb1, 0xe8, 0x15, 0x98, 0xea, 0x77, - 0xf1, 0xc7, 0x3f, 0xed, 0x52, 0x3c, 0x42, 0x7e, 0x16, 0xb5, 0x01, 0x0d, 0x08, 0x0d, 0x8e, 0x70, - 0xf8, 0xa5, 0x78, 0x94, 0x74, 0x2d, 0x6a, 0x42, 0xa1, 0xd7, 0xdf, 0x1e, 0xf7, 0x30, 0x4c, 0x71, - 0xec, 0xd4, 0x2d, 0x7b, 0x4b, 0xd8, 0x4f, 0x1f, 0xf7, 0x70, 0x4c, 0x71, 0xec, 0x4c, 0x6e, 0xb9, - 0x34, 0xf4, 0x7c, 0xe3, 0xe9, 0x43, 0xcf, 0x37, 0xfa, 0x27, 0x16, 0xbd, 0x33, 0x8d, 0xdf, 0xfe, - 0x04, 0xbc, 0x87, 0x5f, 0x26, 0xe0, 0xb8, 0xda, 0x4d, 0xc3, 0xdc, 0xf5, 0x6e, 0x87, 0xe0, 0xcf, - 0xfc, 0x70, 0xe3, 0x71, 0x7e, 0x61, 0x81, 0x28, 0x1d, 0x71, 0x47, 0xc4, 0xd0, 0x7b, 0xaf, 0x46, - 0x1d, 0x42, 0x1e, 0x7d, 0x74, 0xf1, 0x90, 0xfb, 0x27, 0x46, 0xdc, 0x72, 0x31, 0xe0, 0x7e, 0x8a, - 0x11, 0x87, 0x30, 0x0f, 0x3b, 0xef, 0x29, 0x7f, 0x7f, 0x04, 0xf2, 0x57, 0x0d, 0xc7, 0xb5, 0x6c, - 0x43, 0xd7, 0x5a, 0x74, 0xc5, 0xb8, 0x3c, 0xee, 0x47, 0x1e, 0xe5, 0x34, 0x71, 0x46, 0xf8, 0xa5, - 0x16, 0xfc, 0x60, 0xc8, 0x32, 0x24, 0x6e, 0x69, 0x2d, 0xf6, 0x89, 0x45, 0xf0, 0xfa, 0x99, 0x5e, - 0x99, 0x07, 0xbc, 0xa4, 0x20, 0x0a, 0xe3, 0x95, 0x7f, 0x9e, 0x1e, 0xe2, 0x6e, 0xb7, 0x0d, 0x87, - 0xfd, 0x25, 0x76, 0x17, 0x3b, 0x68, 0x13, 0xe2, 0xb6, 0xe6, 0xf2, 0xa0, 0xa6, 0xfc, 0x5e, 0x7e, - 0x15, 0xc5, 0xc3, 0xa3, 0x2f, 0x94, 0x58, 0xec, 0xbf, 0xad, 0x82, 0x22, 0xa1, 0x17, 0x20, 0xd5, - 0xd6, 0xf6, 0x55, 0x8a, 0x1a, 0x7d, 0x1b, 0x50, 0x93, 0x6d, 0x6d, 0x9f, 0xb4, 0x95, 0xcc, 0x20, - 0x02, 0xac, 0xef, 0x69, 0xe6, 0x2e, 0x66, 0xf8, 0xb1, 0xb7, 0x01, 0x3f, 0xd7, 0xd6, 0xf6, 0x2b, - 0x14, 0x93, 0xbc, 0x65, 0x29, 0xf5, 0xfa, 0x47, 0xe7, 0x27, 0xe8, 0x59, 0xe4, 0xdf, 0x8a, 0xf0, - 0xf8, 0x95, 0x8a, 0x0b, 0x69, 0x20, 0xe9, 0xde, 0x13, 0x7d, 0xbd, 0xc8, 0xe5, 0x9f, 0x1e, 0x36, - 0x1a, 0x3d, 0xc2, 0x2e, 0xe7, 0x48, 0x43, 0x3f, 0xfb, 0xc6, 0x7c, 0x84, 0x8d, 0x4b, 0x41, 0xef, - 0x19, 0x8c, 0x6b, 0x90, 0x61, 0x29, 0x34, 0x95, 0xfa, 0xad, 0xd1, 0x91, 0x7e, 0x6b, 0x4e, 0xf8, - 0xad, 0x0c, 0x10, 0x18, 0x37, 0xa9, 0x0f, 0xf4, 0xe3, 0xe7, 0x23, 0x90, 0x59, 0x0e, 0x5c, 0x33, - 0x35, 0x0b, 0xc9, 0xb6, 0x65, 0x1a, 0x37, 0xb1, 0xed, 0x6d, 0xc8, 0xb0, 0x47, 0xe2, 0x5f, 0xb2, - 0xbf, 0x56, 0xe4, 0x1e, 0x88, 0x2b, 0x18, 0xc4, 0x33, 0xe1, 0xba, 0x8d, 0xb7, 0x1d, 0x43, 0x48, - 0x5d, 0x11, 0x8f, 0xe8, 0x2c, 0x48, 0x0e, 0xd6, 0xbb, 0xb6, 0xe1, 0x1e, 0xa8, 0xba, 0x65, 0xba, - 0x9a, 0xee, 0xf2, 0xb4, 0x69, 0x41, 0x94, 0x57, 0x58, 0x31, 0x01, 0x69, 0x62, 0x57, 0x33, 0x5a, - 0xec, 0xbc, 0x57, 0x5a, 0x11, 0x8f, 0x81, 0xe6, 0x7e, 0x3a, 0x19, 0x8c, 0x0b, 0x2b, 0x20, 0x59, - 0x1d, 0x6c, 0x87, 0xbe, 0x77, 0x63, 0xba, 0x3a, 0xfb, 0x7b, 0x9f, 0x78, 0x6c, 0x86, 0x0b, 0x9e, - 0xef, 0xbe, 0xb3, 0x9b, 0x95, 0x95, 0x82, 0xe0, 0x10, 0x1f, 0xc2, 0xbd, 0x14, 0xda, 0x86, 0xe9, - 0x6e, 0xfb, 0xdf, 0xdb, 0xcf, 0xf4, 0x09, 0xb7, 0x64, 0x1e, 0x94, 0x67, 0x7f, 0xc7, 0x87, 0xf6, - 0xe3, 0xc6, 0xeb, 0xf8, 0x20, 0xb8, 0x27, 0x43, 0x61, 0x88, 0xfb, 0xfe, 0x8a, 0x66, 0xb4, 0xc4, - 0x1f, 0x77, 0x53, 0xf8, 0x13, 0x5a, 0xf2, 0x72, 0x30, 0x71, 0x1a, 0x0b, 0xc9, 0xc3, 0x74, 0xa4, - 0x6c, 0x99, 0xcd, 0x70, 0xba, 0x05, 0x35, 0x20, 0xe1, 0x5a, 0x37, 0xb1, 0xc9, 0x85, 0x74, 0x24, - 0xfd, 0xee, 0xbf, 0x7c, 0x86, 0x63, 0xa1, 0x5d, 0x90, 0x9a, 0xb8, 0x85, 0x77, 0xd9, 0xd7, 0x5a, - 0x7b, 0x9a, 0x8d, 0xd9, 0x17, 0x9c, 0x5f, 0xeb, 0xfc, 0x29, 0x78, 0xa8, 0x75, 0x0a, 0x8a, 0x36, - 0xc3, 0x17, 0x9d, 0x25, 0xf9, 0x96, 0xfc, 0x90, 0xfe, 0x07, 0x34, 0x33, 0x68, 0xb3, 0x42, 0x17, - 0xa3, 0x9d, 0x05, 0xa9, 0x6b, 0x6e, 0x5b, 0x26, 0xfd, 0x7b, 0x49, 0x3c, 0xba, 0x4a, 0xb1, 0x6d, - 0x3b, 0xaf, 0x9c, 0x6f, 0xdb, 0x6d, 0x42, 0xde, 0x27, 0xa5, 0xb3, 0x28, 0x7d, 0xd4, 0x59, 0x94, - 0xf3, 0x00, 0x08, 0x09, 0x5a, 0x03, 0xf0, 0xe7, 0xa9, 0xb7, 0xb5, 0x3f, 0x72, 0xc6, 0x07, 0x3b, - 0x13, 0x00, 0x40, 0x2d, 0x98, 0x6e, 0x1b, 0xa6, 0xea, 0xe0, 0xd6, 0x8e, 0xca, 0x25, 0x47, 0x70, - 0x33, 0x6f, 0xc3, 0x48, 0x4f, 0xb5, 0x0d, 0xb3, 0x8e, 0x5b, 0x3b, 0xcb, 0x1e, 0x2c, 0x7a, 0x2f, - 0x9c, 0xf2, 0xc5, 0x61, 0x99, 0xea, 0x9e, 0xd5, 0x6a, 0xaa, 0x36, 0xde, 0x51, 0x75, 0x7a, 0xf7, - 0x51, 0x96, 0x0a, 0xf1, 0x84, 0x47, 0xb2, 0x61, 0x5e, 0xb5, 0x5a, 0x4d, 0x05, 0xef, 0x54, 0x48, - 0x35, 0x7a, 0x10, 0x7c, 0x59, 0xa8, 0x46, 0xd3, 0x99, 0xcd, 0x2d, 0xc4, 0xce, 0xc4, 0x95, 0xac, - 0x57, 0x58, 0x6b, 0x3a, 0x4b, 0xd9, 0x0f, 0x7f, 0x74, 0x7e, 0x82, 0xcf, 0xde, 0x09, 0x79, 0x93, - 0xde, 0xd6, 0xc1, 0x27, 0x1e, 0x76, 0xd0, 0x25, 0x48, 0x6b, 0xe2, 0x81, 0x7d, 0x27, 0x72, 0xc8, - 0xc4, 0xf5, 0x49, 0x99, 0x3d, 0x78, 0xed, 0x0f, 0x17, 0x22, 0xf2, 0x4f, 0x46, 0x20, 0xb1, 0x7c, - 0x63, 0x53, 0x33, 0x6c, 0x54, 0x85, 0x29, 0x5f, 0x85, 0xc7, 0xb5, 0x06, 0xbe, 0xd6, 0x0b, 0x73, - 0x50, 0x1d, 0xf6, 0x11, 0xed, 0xa1, 0x30, 0xbd, 0x9f, 0xd7, 0xf6, 0x74, 0xfc, 0x1a, 0x24, 0x59, - 0x2b, 0x1d, 0xf4, 0x3c, 0x4c, 0x76, 0xc8, 0x0f, 0xbe, 0x19, 0x30, 0x37, 0x54, 0xf5, 0x29, 0x7d, - 0x50, 0x51, 0x18, 0x9f, 0xfc, 0x57, 0x11, 0x80, 0xe5, 0x1b, 0x37, 0x1a, 0xb6, 0xd1, 0x69, 0x61, - 0xf7, 0xed, 0xea, 0xf6, 0x2a, 0x1c, 0x0b, 0x7c, 0xae, 0x69, 0xeb, 0x63, 0x77, 0x7d, 0xda, 0xff, - 0x60, 0xd3, 0xd6, 0x07, 0xa2, 0x35, 0x1d, 0xd7, 0x43, 0x8b, 0x8d, 0x8d, 0xb6, 0xec, 0xb8, 0x83, - 0x65, 0xf9, 0x22, 0x64, 0xfc, 0xee, 0x3b, 0xa8, 0x06, 0x29, 0x97, 0xff, 0xe6, 0x22, 0x95, 0x87, - 0x8b, 0x54, 0xb0, 0x05, 0xc5, 0xea, 0xb1, 0xcb, 0x7f, 0x4d, 0x24, 0xeb, 0x4f, 0x8f, 0xaf, 0x2b, - 0x85, 0x22, 0x76, 0x9f, 0xdb, 0xe5, 0xb7, 0xc3, 0xaf, 0xe1, 0x58, 0x3d, 0xa2, 0xfd, 0x70, 0x14, - 0xa6, 0xb7, 0xc4, 0xf4, 0xfd, 0xba, 0x95, 0xc4, 0x16, 0x24, 0xb1, 0xe9, 0xda, 0x06, 0x16, 0x3b, - 0x80, 0x8f, 0x0f, 0x1b, 0xf0, 0x01, 0x7d, 0xa1, 0x7f, 0x34, 0x3b, 0x38, 0xfc, 0x02, 0xab, 0x47, - 0x14, 0xbf, 0x19, 0x83, 0xd9, 0x61, 0xec, 0xe8, 0x34, 0x14, 0x74, 0x1b, 0xd3, 0x02, 0x35, 0x94, - 0x25, 0xcf, 0x8b, 0x62, 0xbe, 0xe0, 0x28, 0x40, 0xdc, 0x38, 0xa2, 0x5d, 0x84, 0xf4, 0xde, 0xfc, - 0xb6, 0xbc, 0x8f, 0x40, 0x97, 0x1c, 0x0c, 0x05, 0x71, 0xec, 0x7d, 0x5b, 0x6b, 0x69, 0xa6, 0x7e, - 0x2f, 0x9e, 0x6e, 0xff, 0xfa, 0x20, 0xce, 0xd2, 0x97, 0x19, 0x26, 0xba, 0x01, 0x49, 0x01, 0x1f, - 0x7f, 0x1b, 0xe0, 0x05, 0x18, 0x7a, 0x00, 0xb2, 0xc1, 0x65, 0x83, 0x7a, 0x31, 0x71, 0x25, 0x13, - 0x58, 0x35, 0x46, 0xad, 0x4b, 0x89, 0x43, 0xd7, 0xa5, 0x80, 0xb3, 0xf8, 0x2f, 0x62, 0x30, 0xa5, - 0xe0, 0xe6, 0x37, 0xe0, 0xe0, 0x7d, 0x33, 0x00, 0x9b, 0xe0, 0xc4, 0xf8, 0xde, 0xc3, 0xf8, 0xf5, - 0x1b, 0x8c, 0x34, 0xc3, 0x5b, 0x76, 0xdc, 0x77, 0x73, 0x04, 0xff, 0x7d, 0x14, 0xb2, 0xc1, 0x11, - 0xfc, 0x06, 0x58, 0xed, 0xd0, 0xba, 0x6f, 0xde, 0xd8, 0x01, 0xf5, 0xb3, 0xc3, 0xcc, 0x5b, 0x9f, - 0x6e, 0x8f, 0x61, 0xd7, 0x7e, 0x30, 0x06, 0x09, 0x7e, 0x62, 0x6c, 0xa3, 0xcf, 0x1b, 0x8e, 0x8c, - 0xfa, 0x4c, 0x38, 0x27, 0x3e, 0x13, 0x1e, 0xe8, 0x0c, 0x3f, 0x04, 0x79, 0x12, 0x83, 0x87, 0x8e, - 0xa1, 0x45, 0xce, 0xe4, 0x68, 0x10, 0xed, 0x1f, 0x9a, 0x46, 0xf3, 0x90, 0x21, 0x64, 0xbe, 0x0d, - 0x27, 0x34, 0xd0, 0xd6, 0xf6, 0xab, 0xac, 0x04, 0x3d, 0x06, 0x68, 0xcf, 0xcb, 0x8f, 0xa8, 0xbe, - 0x30, 0x08, 0xdd, 0x94, 0x5f, 0x23, 0xc8, 0xef, 0x07, 0x20, 0xad, 0x50, 0xd9, 0x45, 0x9e, 0xfc, - 0x76, 0x55, 0x52, 0xb2, 0x4c, 0x2f, 0xf3, 0xfc, 0x36, 0xe6, 0x53, 0xf7, 0x84, 0xe7, 0x3c, 0xba, - 0x59, 0x3d, 0xda, 0xa4, 0xf8, 0xca, 0x1b, 0xf3, 0xc5, 0x03, 0xad, 0xdd, 0x5a, 0x92, 0x07, 0x40, - 0xca, 0xd4, 0xc7, 0x0e, 0x87, 0xf5, 0x4b, 0x67, 0x84, 0x2e, 0xdf, 0xf9, 0xfc, 0x2f, 0x9e, 0x3b, - 0x15, 0xc0, 0xdc, 0xf7, 0x12, 0x67, 0x6c, 0x38, 0xe4, 0x5f, 0x88, 0x00, 0xf2, 0x17, 0x1a, 0xef, - 0x98, 0xf8, 0x1a, 0x3d, 0x3c, 0x2c, 0x22, 0x81, 0xc8, 0xe1, 0x11, 0x86, 0xcf, 0x1f, 0x8a, 0x30, - 0x02, 0x13, 0xe8, 0x7d, 0xbe, 0x59, 0x17, 0x1f, 0x85, 0x0f, 0xb8, 0xc2, 0x75, 0xb1, 0x62, 0x19, - 0x21, 0x08, 0xc1, 0xe4, 0xcd, 0xcd, 0x09, 0xf9, 0x8d, 0x08, 0x9c, 0xec, 0xd3, 0x40, 0xaf, 0xd9, - 0x3a, 0x20, 0x3b, 0x50, 0x49, 0x47, 0x51, 0x6c, 0xbd, 0xde, 0x9b, 0x42, 0x4f, 0xd9, 0x7d, 0xa6, - 0xfc, 0x1d, 0x5a, 0xa3, 0xf8, 0x65, 0xae, 0xbf, 0x1d, 0x81, 0x99, 0x60, 0x8b, 0xbc, 0xbe, 0xd5, - 0x21, 0x1b, 0x6c, 0x0b, 0xef, 0xd5, 0x7b, 0xc6, 0xe9, 0x55, 0xb0, 0x43, 0x21, 0x10, 0xd2, 0x17, - 0xa1, 0xe9, 0x2c, 0x8d, 0xf7, 0xc4, 0xd8, 0x52, 0xf2, 0xb6, 0x28, 0x06, 0x4d, 0xff, 0x38, 0x1d, - 0xac, 0xef, 0x8d, 0x42, 0x7c, 0xd3, 0xb2, 0x5a, 0xe8, 0x3b, 0x22, 0x30, 0x65, 0x5a, 0xae, 0x4a, - 0xe6, 0x07, 0x6e, 0xaa, 0x3c, 0x95, 0xc0, 0x2c, 0xe8, 0x8d, 0xa3, 0x49, 0xef, 0x8b, 0x6f, 0xcc, - 0xf7, 0x43, 0x0d, 0xba, 0x7d, 0xb7, 0x60, 0x5a, 0x6e, 0x99, 0x12, 0x35, 0x58, 0xb6, 0xe1, 0x36, - 0xe4, 0xc2, 0xef, 0x67, 0x66, 0x57, 0x39, 0xf2, 0xfb, 0x73, 0x23, 0xdf, 0x9d, 0xdd, 0x0e, 0xbc, - 0x98, 0xdd, 0x81, 0xf9, 0xe7, 0x64, 0x70, 0x5f, 0x02, 0xe9, 0x46, 0xef, 0xa1, 0xb5, 0x2a, 0x24, - 0x8f, 0x7a, 0xfe, 0x2d, 0x28, 0x71, 0xce, 0x7b, 0xee, 0x93, 0x11, 0x00, 0x3f, 0x71, 0x83, 0x1e, - 0x85, 0x13, 0xe5, 0x8d, 0xf5, 0x65, 0xb5, 0xde, 0x28, 0x35, 0xb6, 0xea, 0xe1, 0x1b, 0xd7, 0xc5, - 0x35, 0x25, 0x4e, 0x07, 0xeb, 0xc6, 0x8e, 0x81, 0x9b, 0xe8, 0x61, 0x98, 0x09, 0x53, 0x93, 0xa7, - 0xea, 0xb2, 0x14, 0x29, 0x66, 0xef, 0xdc, 0x5d, 0x48, 0x31, 0x97, 0x14, 0x37, 0xd1, 0x19, 0x38, - 0xd6, 0x4f, 0x57, 0x5b, 0x5f, 0x91, 0xa2, 0xc5, 0xdc, 0x9d, 0xbb, 0x0b, 0x69, 0xcf, 0x77, 0x45, - 0x32, 0xa0, 0x20, 0x25, 0xc7, 0x8b, 0x15, 0xe1, 0xce, 0xdd, 0x85, 0x04, 0x1b, 0x96, 0x62, 0xfc, - 0xc3, 0x3f, 0x31, 0x37, 0x71, 0xee, 0x5b, 0x00, 0x6a, 0xe6, 0x8e, 0xad, 0xd1, 0x3f, 0x3b, 0x8c, - 0x8a, 0x70, 0xbc, 0xb6, 0x7e, 0x45, 0x29, 0x55, 0x1a, 0xb5, 0x8d, 0xf5, 0x9e, 0x8b, 0xe2, 0xc3, - 0x75, 0xcb, 0x1b, 0x5b, 0xe5, 0xd5, 0xaa, 0x5a, 0xaf, 0xad, 0xac, 0xb3, 0xcd, 0xdf, 0x50, 0xdd, - 0x0b, 0xeb, 0x8d, 0xda, 0x5a, 0x55, 0x8a, 0x96, 0xaf, 0x0c, 0xdd, 0x7e, 0x78, 0xf4, 0xd0, 0x01, - 0xf7, 0x2d, 0x65, 0x68, 0x0f, 0xe2, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xa7, 0x67, 0x40, 0xb3, - 0x7c, 0x9a, 0x00, 0x00, + // 11244 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0xbd, 0x79, 0x90, 0x24, 0x57, + 0x5a, 0x18, 0xde, 0x75, 0x57, 0x7d, 0x75, 0x65, 0xbf, 0x6e, 0xcd, 0xf4, 0xd4, 0x48, 0xdd, 0xad, + 0xd4, 0x4a, 0x73, 0x48, 0xea, 0x91, 0x46, 0x9a, 0x91, 0xd4, 0xb3, 0xbb, 0xa2, 0xaa, 0xba, 0x66, + 0xa6, 0x66, 0xfa, 0xda, 0xac, 0xea, 0xd1, 0xc1, 0x8f, 0x4d, 0xb2, 0xb3, 0x5e, 0x57, 0xa7, 0xa6, + 0x2a, 0xb3, 0x36, 0x33, 0x6b, 0xa6, 0x5b, 0x41, 0xfc, 0x42, 0xb0, 0x06, 0x2f, 0x63, 0xc0, 0x8b, + 0x71, 0xc0, 0x72, 0x0c, 0xde, 0xe5, 0x5c, 0x30, 0x98, 0xd3, 0x1c, 0x26, 0x8c, 0xc1, 0x61, 0x6c, + 0x20, 0x1c, 0xf6, 0x42, 0x38, 0x6c, 0x82, 0xc0, 0x32, 0xec, 0x12, 0x66, 0x0d, 0x8b, 0x39, 0xbc, + 0x84, 0xed, 0xd8, 0xc0, 0x76, 0xbc, 0x2b, 0x8f, 0x3a, 0xba, 0xaa, 0x67, 0xa5, 0x35, 0x8e, 0xfd, + 0x67, 0xa6, 0xde, 0x7b, 0xdf, 0xf7, 0xbd, 0xf7, 0xbe, 0xf7, 0xbd, 0xef, 0x7a, 0x2f, 0x5f, 0xc3, + 0x1f, 0x54, 0x60, 0xb9, 0x6d, 0x59, 0xed, 0x0e, 0xbe, 0xd0, 0xb3, 0x2d, 0xd7, 0xda, 0xed, 0xef, + 0x5d, 0x68, 0x61, 0x47, 0xb7, 0x8d, 0x9e, 0x6b, 0xd9, 0x2b, 0xb4, 0x0e, 0x15, 0x19, 0xc4, 0x8a, + 0x80, 0x90, 0x37, 0x60, 0xf6, 0xaa, 0xd1, 0xc1, 0x6b, 0x1e, 0x60, 0x03, 0xbb, 0xe8, 0x45, 0x88, + 0xef, 0x19, 0x1d, 0xbc, 0x10, 0x59, 0x8e, 0x9d, 0xcd, 0x5e, 0x7c, 0xcf, 0xca, 0x00, 0xd2, 0x4a, + 0x18, 0x63, 0x9b, 0x54, 0x2b, 0x14, 0x43, 0xfe, 0x5f, 0x71, 0x98, 0x1b, 0xd1, 0x8a, 0x10, 0xc4, + 0x4d, 0xad, 0x4b, 0x28, 0x46, 0xce, 0x66, 0x14, 0xfa, 0x1b, 0x2d, 0x40, 0xaa, 0xa7, 0xe9, 0xb7, + 0xb5, 0x36, 0x5e, 0x88, 0xd2, 0x6a, 0x51, 0x44, 0x8b, 0x00, 0x2d, 0xdc, 0xc3, 0x66, 0x0b, 0x9b, + 0xfa, 0xe1, 0x42, 0x6c, 0x39, 0x76, 0x36, 0xa3, 0x04, 0x6a, 0xd0, 0x93, 0x30, 0xdb, 0xeb, 0xef, + 0x76, 0x0c, 0x5d, 0x0d, 0x80, 0xc1, 0x72, 0xec, 0x6c, 0x42, 0x91, 0x58, 0xc3, 0x9a, 0x0f, 0x7c, + 0x06, 0x8a, 0x77, 0xb1, 0x76, 0x3b, 0x08, 0x9a, 0xa5, 0xa0, 0x05, 0x52, 0x1d, 0x00, 0xac, 0x42, + 0xae, 0x8b, 0x1d, 0x47, 0x6b, 0x63, 0xd5, 0x3d, 0xec, 0xe1, 0x85, 0x38, 0x9d, 0xfd, 0xf2, 0xd0, + 0xec, 0x07, 0x67, 0x9e, 0xe5, 0x58, 0xcd, 0xc3, 0x1e, 0x46, 0x65, 0xc8, 0x60, 0xb3, 0xdf, 0x65, + 0x14, 0x12, 0x63, 0xf8, 0x57, 0x33, 0xfb, 0xdd, 0x41, 0x2a, 0x69, 0x82, 0xc6, 0x49, 0xa4, 0x1c, + 0x6c, 0xdf, 0x31, 0x74, 0xbc, 0x90, 0xa4, 0x04, 0xce, 0x0c, 0x11, 0x68, 0xb0, 0xf6, 0x41, 0x1a, + 0x02, 0x0f, 0x55, 0x21, 0x83, 0x0f, 0x5c, 0x6c, 0x3a, 0x86, 0x65, 0x2e, 0xa4, 0x28, 0x91, 0xc7, + 0x47, 0xac, 0x22, 0xee, 0xb4, 0x06, 0x49, 0xf8, 0x78, 0xe8, 0x32, 0xa4, 0xac, 0x9e, 0x6b, 0x58, + 0xa6, 0xb3, 0x90, 0x5e, 0x8e, 0x9c, 0xcd, 0x5e, 0x7c, 0x78, 0xa4, 0x20, 0x6c, 0x31, 0x18, 0x45, + 0x00, 0xa3, 0x3a, 0x48, 0x8e, 0xd5, 0xb7, 0x75, 0xac, 0xea, 0x56, 0x0b, 0xab, 0x86, 0xb9, 0x67, + 0x2d, 0x64, 0x28, 0x81, 0xa5, 0xe1, 0x89, 0x50, 0xc0, 0xaa, 0xd5, 0xc2, 0x75, 0x73, 0xcf, 0x52, + 0x0a, 0x4e, 0xa8, 0x8c, 0x4e, 0x40, 0xd2, 0x39, 0x34, 0x5d, 0xed, 0x60, 0x21, 0x47, 0x25, 0x84, + 0x97, 0x88, 0xe8, 0xe0, 0x96, 0x41, 0xba, 0x5b, 0xc8, 0x33, 0xd1, 0xe1, 0x45, 0xf9, 0x17, 0x93, + 0x50, 0x9c, 0x46, 0xf8, 0xae, 0x40, 0x62, 0x8f, 0xcc, 0x7f, 0x21, 0x7a, 0x1c, 0xee, 0x30, 0x9c, + 0x30, 0x7b, 0x93, 0x0f, 0xc8, 0xde, 0x32, 0x64, 0x4d, 0xec, 0xb8, 0xb8, 0xc5, 0x64, 0x25, 0x36, + 0xa5, 0xb4, 0x01, 0x43, 0x1a, 0x16, 0xb6, 0xf8, 0x03, 0x09, 0xdb, 0xab, 0x50, 0xf4, 0x86, 0xa4, + 0xda, 0x9a, 0xd9, 0x16, 0x52, 0x7b, 0x61, 0xd2, 0x48, 0x56, 0x6a, 0x02, 0x4f, 0x21, 0x68, 0x4a, + 0x01, 0x87, 0xca, 0x68, 0x0d, 0xc0, 0x32, 0xb1, 0xb5, 0xa7, 0xb6, 0xb0, 0xde, 0x59, 0x48, 0x8f, + 0xe1, 0xd2, 0x16, 0x01, 0x19, 0xe2, 0x92, 0xc5, 0x6a, 0xf5, 0x0e, 0x7a, 0xc9, 0x17, 0xc2, 0xd4, + 0x18, 0x19, 0xda, 0x60, 0xdb, 0x6f, 0x48, 0x0e, 0x77, 0xa0, 0x60, 0x63, 0xb2, 0x23, 0x70, 0x8b, + 0xcf, 0x2c, 0x43, 0x07, 0xb1, 0x32, 0x71, 0x66, 0x0a, 0x47, 0x63, 0x13, 0xcb, 0xdb, 0xc1, 0x22, + 0x7a, 0x0c, 0xbc, 0x0a, 0x95, 0x8a, 0x15, 0x50, 0xfd, 0x94, 0x13, 0x95, 0x9b, 0x5a, 0x17, 0x97, + 0xde, 0x84, 0x42, 0x98, 0x3d, 0x68, 0x1e, 0x12, 0x8e, 0xab, 0xd9, 0x2e, 0x95, 0xc2, 0x84, 0xc2, + 0x0a, 0x48, 0x82, 0x18, 0x36, 0x5b, 0x54, 0xff, 0x25, 0x14, 0xf2, 0x13, 0x7d, 0x85, 0x3f, 0xe1, + 0x18, 0x9d, 0xf0, 0x13, 0xc3, 0x2b, 0x1a, 0xa2, 0x3c, 0x38, 0xef, 0xd2, 0x0b, 0x90, 0x0f, 0x4d, + 0x60, 0xda, 0xae, 0xe5, 0xaf, 0x81, 0x87, 0x46, 0x92, 0x46, 0xaf, 0xc2, 0x7c, 0xdf, 0x34, 0x4c, + 0x17, 0xdb, 0x3d, 0x1b, 0x13, 0x89, 0x65, 0x5d, 0x2d, 0xfc, 0x51, 0x6a, 0x8c, 0xcc, 0xed, 0x04, + 0xa1, 0x19, 0x15, 0x65, 0xae, 0x3f, 0x5c, 0x79, 0x3e, 0x93, 0xfe, 0x6c, 0x4a, 0x7a, 0xeb, 0xad, + 0xb7, 0xde, 0x8a, 0xca, 0xbf, 0x9a, 0x84, 0xf9, 0x51, 0x7b, 0x66, 0xe4, 0xf6, 0x3d, 0x01, 0x49, + 0xb3, 0xdf, 0xdd, 0xc5, 0x36, 0x65, 0x52, 0x42, 0xe1, 0x25, 0x54, 0x86, 0x44, 0x47, 0xdb, 0xc5, + 0x9d, 0x85, 0xf8, 0x72, 0xe4, 0x6c, 0xe1, 0xe2, 0x93, 0x53, 0xed, 0xca, 0x95, 0x75, 0x82, 0xa2, + 0x30, 0x4c, 0xf4, 0x7e, 0x88, 0x73, 0xe5, 0x4d, 0x28, 0x9c, 0x9f, 0x8e, 0x02, 0xd9, 0x4b, 0x0a, + 0xc5, 0x43, 0xa7, 0x21, 0x43, 0xfe, 0x67, 0xb2, 0x91, 0xa4, 0x63, 0x4e, 0x93, 0x0a, 0x22, 0x17, + 0xa8, 0x04, 0x69, 0xba, 0x4d, 0x5a, 0x58, 0x18, 0x3d, 0xaf, 0x4c, 0x04, 0xab, 0x85, 0xf7, 0xb4, + 0x7e, 0xc7, 0x55, 0xef, 0x68, 0x9d, 0x3e, 0xa6, 0x02, 0x9f, 0x51, 0x72, 0xbc, 0xf2, 0x16, 0xa9, + 0x43, 0x4b, 0x90, 0x65, 0xbb, 0xca, 0x30, 0x5b, 0xf8, 0x80, 0xea, 0xd5, 0x84, 0xc2, 0x36, 0x5a, + 0x9d, 0xd4, 0x90, 0xee, 0xdf, 0x70, 0x2c, 0x53, 0x88, 0x26, 0xed, 0x82, 0x54, 0xd0, 0xee, 0x5f, + 0x18, 0x54, 0xe9, 0x8f, 0x8c, 0x9e, 0xde, 0xd0, 0x5e, 0x3a, 0x03, 0x45, 0x0a, 0xf1, 0x1c, 0x5f, + 0x7a, 0xad, 0xb3, 0x30, 0xbb, 0x1c, 0x39, 0x9b, 0x56, 0x0a, 0xac, 0x7a, 0x8b, 0xd7, 0xca, 0x3f, + 0x17, 0x85, 0x38, 0x55, 0x2c, 0x45, 0xc8, 0x36, 0x5f, 0xdb, 0xae, 0xa9, 0x6b, 0x5b, 0x3b, 0x95, + 0xf5, 0x9a, 0x14, 0x41, 0x05, 0x00, 0x5a, 0x71, 0x75, 0x7d, 0xab, 0xdc, 0x94, 0xa2, 0x5e, 0xb9, + 0xbe, 0xd9, 0xbc, 0xfc, 0xbc, 0x14, 0xf3, 0x10, 0x76, 0x58, 0x45, 0x3c, 0x08, 0xf0, 0xdc, 0x45, + 0x29, 0x81, 0x24, 0xc8, 0x31, 0x02, 0xf5, 0x57, 0x6b, 0x6b, 0x97, 0x9f, 0x97, 0x92, 0xe1, 0x9a, + 0xe7, 0x2e, 0x4a, 0x29, 0x94, 0x87, 0x0c, 0xad, 0xa9, 0x6c, 0x6d, 0xad, 0x4b, 0x69, 0x8f, 0x66, + 0xa3, 0xa9, 0xd4, 0x37, 0xaf, 0x49, 0x19, 0x8f, 0xe6, 0x35, 0x65, 0x6b, 0x67, 0x5b, 0x02, 0x8f, + 0xc2, 0x46, 0xad, 0xd1, 0x28, 0x5f, 0xab, 0x49, 0x59, 0x0f, 0xa2, 0xf2, 0x5a, 0xb3, 0xd6, 0x90, + 0x72, 0xa1, 0x61, 0x3d, 0x77, 0x51, 0xca, 0x7b, 0x5d, 0xd4, 0x36, 0x77, 0x36, 0xa4, 0x02, 0x9a, + 0x85, 0x3c, 0xeb, 0x42, 0x0c, 0xa2, 0x38, 0x50, 0x75, 0xf9, 0x79, 0x49, 0xf2, 0x07, 0xc2, 0xa8, + 0xcc, 0x86, 0x2a, 0x2e, 0x3f, 0x2f, 0x21, 0xb9, 0x0a, 0x09, 0x2a, 0x86, 0x08, 0x41, 0x61, 0xbd, + 0x5c, 0xa9, 0xad, 0xab, 0x5b, 0xdb, 0xcd, 0xfa, 0xd6, 0x66, 0x79, 0x5d, 0x8a, 0xf8, 0x75, 0x4a, + 0xed, 0x03, 0x3b, 0x75, 0xa5, 0xb6, 0x26, 0x45, 0x83, 0x75, 0xdb, 0xb5, 0x72, 0xb3, 0xb6, 0x26, + 0xc5, 0x64, 0x1d, 0xe6, 0x47, 0x29, 0xd4, 0x91, 0x5b, 0x28, 0x20, 0x0b, 0xd1, 0x31, 0xb2, 0x40, + 0x69, 0x0d, 0xca, 0x82, 0xfc, 0x99, 0x28, 0xcc, 0x8d, 0x30, 0x2a, 0x23, 0x3b, 0x79, 0x19, 0x12, + 0x4c, 0x96, 0x99, 0x99, 0x3d, 0x37, 0xd2, 0x3a, 0x51, 0xc9, 0x1e, 0x32, 0xb5, 0x14, 0x2f, 0xe8, + 0x84, 0xc4, 0xc6, 0x38, 0x21, 0x84, 0xc4, 0x90, 0xc0, 0x7e, 0xd5, 0x90, 0xf2, 0x67, 0xf6, 0xf1, + 0xf2, 0x34, 0xf6, 0x91, 0xd6, 0x1d, 0xcf, 0x08, 0x24, 0x46, 0x18, 0x81, 0x2b, 0x30, 0x3b, 0x44, + 0x68, 0x6a, 0x65, 0xfc, 0xe1, 0x08, 0x2c, 0x8c, 0x63, 0xce, 0x04, 0x95, 0x18, 0x0d, 0xa9, 0xc4, + 0x2b, 0x83, 0x1c, 0x7c, 0x74, 0xfc, 0x22, 0x0c, 0xad, 0xf5, 0x0f, 0x47, 0xe0, 0xc4, 0x68, 0x67, + 0x73, 0xe4, 0x18, 0xde, 0x0f, 0xc9, 0x2e, 0x76, 0xf7, 0x2d, 0xe1, 0x56, 0x3d, 0x31, 0xc2, 0x58, + 0x93, 0xe6, 0xc1, 0xc5, 0xe6, 0x58, 0x41, 0x6b, 0x1f, 0x1b, 0xe7, 0x31, 0xb2, 0xd1, 0x0c, 0x8d, + 0xf4, 0x1b, 0xa3, 0xf0, 0xd0, 0x48, 0xe2, 0x23, 0x07, 0xfa, 0x08, 0x80, 0x61, 0xf6, 0xfa, 0x2e, + 0x73, 0x9d, 0x98, 0x26, 0xce, 0xd0, 0x1a, 0xaa, 0xbc, 0x88, 0x96, 0xed, 0xbb, 0x5e, 0x7b, 0x8c, + 0xb6, 0x03, 0xab, 0xa2, 0x00, 0x2f, 0xfa, 0x03, 0x8d, 0xd3, 0x81, 0x2e, 0x8e, 0x99, 0xe9, 0x90, + 0x60, 0x3e, 0x03, 0x92, 0xde, 0x31, 0xb0, 0xe9, 0xaa, 0x8e, 0x6b, 0x63, 0xad, 0x6b, 0x98, 0x6d, + 0x6a, 0x6a, 0xd2, 0xab, 0x89, 0x3d, 0xad, 0xe3, 0x60, 0xa5, 0xc8, 0x9a, 0x1b, 0xa2, 0x95, 0x60, + 0x50, 0x01, 0xb2, 0x03, 0x18, 0xc9, 0x10, 0x06, 0x6b, 0xf6, 0x30, 0xe4, 0x6f, 0xcd, 0x40, 0x36, + 0xe0, 0x9a, 0xa3, 0x47, 0x21, 0xf7, 0x86, 0x76, 0x47, 0x53, 0x45, 0xb8, 0xc5, 0x38, 0x91, 0x25, + 0x75, 0xdb, 0x3c, 0xe4, 0x7a, 0x06, 0xe6, 0x29, 0x88, 0xd5, 0x77, 0xb1, 0xad, 0xea, 0x1d, 0xcd, + 0x71, 0x28, 0xd3, 0xd2, 0x14, 0x14, 0x91, 0xb6, 0x2d, 0xd2, 0x54, 0x15, 0x2d, 0xe8, 0x12, 0xcc, + 0x51, 0x8c, 0x6e, 0xbf, 0xe3, 0x1a, 0xbd, 0x0e, 0x56, 0x49, 0x00, 0xe8, 0x50, 0x93, 0xe3, 0x8d, + 0x6c, 0x96, 0x40, 0x6c, 0x70, 0x00, 0x32, 0x22, 0x07, 0xad, 0xc1, 0x23, 0x14, 0xad, 0x8d, 0x4d, + 0x6c, 0x6b, 0x2e, 0x56, 0xf1, 0x87, 0xfa, 0x5a, 0xc7, 0x51, 0x35, 0xb3, 0xa5, 0xee, 0x6b, 0xce, + 0xfe, 0xc2, 0x3c, 0x21, 0x50, 0x89, 0x2e, 0x44, 0x94, 0x53, 0x04, 0xf0, 0x1a, 0x87, 0xab, 0x51, + 0xb0, 0xb2, 0xd9, 0xba, 0xae, 0x39, 0xfb, 0x68, 0x15, 0x4e, 0x50, 0x2a, 0x8e, 0x6b, 0x1b, 0x66, + 0x5b, 0xd5, 0xf7, 0xb1, 0x7e, 0x5b, 0xed, 0xbb, 0x7b, 0x2f, 0x2e, 0x9c, 0x0e, 0xf6, 0x4f, 0x47, + 0xd8, 0xa0, 0x30, 0x55, 0x02, 0xb2, 0xe3, 0xee, 0xbd, 0x88, 0x1a, 0x90, 0x23, 0x8b, 0xd1, 0x35, + 0xde, 0xc4, 0xea, 0x9e, 0x65, 0x53, 0x1b, 0x5a, 0x18, 0xa1, 0x9a, 0x02, 0x1c, 0x5c, 0xd9, 0xe2, + 0x08, 0x1b, 0x56, 0x0b, 0xaf, 0x26, 0x1a, 0xdb, 0xb5, 0xda, 0x9a, 0x92, 0x15, 0x54, 0xae, 0x5a, + 0x36, 0x11, 0xa8, 0xb6, 0xe5, 0x31, 0x38, 0xcb, 0x04, 0xaa, 0x6d, 0x09, 0xf6, 0x5e, 0x82, 0x39, + 0x5d, 0x67, 0x73, 0x36, 0x74, 0x95, 0x87, 0x69, 0xce, 0x82, 0x14, 0x62, 0x96, 0xae, 0x5f, 0x63, + 0x00, 0x5c, 0xc6, 0x1d, 0xf4, 0x12, 0x3c, 0xe4, 0x33, 0x2b, 0x88, 0x38, 0x3b, 0x34, 0xcb, 0x41, + 0xd4, 0x4b, 0x30, 0xd7, 0x3b, 0x1c, 0x46, 0x44, 0xa1, 0x1e, 0x7b, 0x87, 0x83, 0x68, 0x2f, 0xc0, + 0x7c, 0x6f, 0xbf, 0x37, 0x8c, 0x77, 0x3e, 0x88, 0x87, 0x7a, 0xfb, 0xbd, 0x41, 0xc4, 0xc7, 0x69, + 0xcc, 0x6e, 0x63, 0x5d, 0x73, 0x71, 0x6b, 0xe1, 0x64, 0x10, 0x3c, 0xd0, 0x80, 0x56, 0x40, 0xd2, + 0x75, 0x15, 0x9b, 0xda, 0x6e, 0x07, 0xab, 0x9a, 0x8d, 0x4d, 0xcd, 0x59, 0x58, 0xa2, 0xc0, 0x71, + 0xd7, 0xee, 0x63, 0xa5, 0xa0, 0xeb, 0x35, 0xda, 0x58, 0xa6, 0x6d, 0xe8, 0x3c, 0xcc, 0x5a, 0xbb, + 0x6f, 0xe8, 0x4c, 0x22, 0xd5, 0x9e, 0x8d, 0xf7, 0x8c, 0x83, 0x85, 0xf7, 0x50, 0xf6, 0x16, 0x49, + 0x03, 0x95, 0xc7, 0x6d, 0x5a, 0x8d, 0xce, 0x81, 0xa4, 0x3b, 0xfb, 0x9a, 0xdd, 0xa3, 0x2a, 0xd9, + 0xe9, 0x69, 0x3a, 0x5e, 0x78, 0x9c, 0x81, 0xb2, 0xfa, 0x4d, 0x51, 0x4d, 0x76, 0x84, 0x73, 0xd7, + 0xd8, 0x73, 0x05, 0xc5, 0x33, 0x6c, 0x47, 0xd0, 0x3a, 0x4e, 0xed, 0x2c, 0x48, 0x84, 0x13, 0xa1, + 0x8e, 0xcf, 0x52, 0xb0, 0x42, 0x6f, 0xbf, 0x17, 0xec, 0xf7, 0x31, 0xc8, 0x13, 0x48, 0xbf, 0xd3, + 0x73, 0xcc, 0x71, 0xeb, 0xed, 0x07, 0x7a, 0x7c, 0x1e, 0x4e, 0x10, 0xa0, 0x2e, 0x76, 0xb5, 0x96, + 0xe6, 0x6a, 0x01, 0xe8, 0xa7, 0x28, 0x34, 0x61, 0xfb, 0x06, 0x6f, 0x0c, 0x8d, 0xd3, 0xee, 0xef, + 0x1e, 0x7a, 0x82, 0xf5, 0x34, 0x1b, 0x27, 0xa9, 0x13, 0xa2, 0xf5, 0xae, 0x39, 0xe7, 0xf2, 0x2a, + 0xe4, 0x82, 0x72, 0x8f, 0x32, 0xc0, 0x24, 0x5f, 0x8a, 0x10, 0x27, 0xa8, 0xba, 0xb5, 0x46, 0xdc, + 0x97, 0xd7, 0x6b, 0x52, 0x94, 0xb8, 0x51, 0xeb, 0xf5, 0x66, 0x4d, 0x55, 0x76, 0x36, 0x9b, 0xf5, + 0x8d, 0x9a, 0x14, 0x0b, 0x38, 0xf6, 0x37, 0xe2, 0xe9, 0x27, 0xa4, 0x33, 0xf2, 0x2f, 0xc5, 0xa0, + 0x10, 0x8e, 0xd4, 0xd0, 0x7b, 0xe1, 0xa4, 0x48, 0xb8, 0x38, 0xd8, 0x55, 0xef, 0x1a, 0x36, 0xdd, + 0x90, 0x5d, 0x8d, 0x19, 0x47, 0x4f, 0x7e, 0xe6, 0x39, 0x54, 0x03, 0xbb, 0xaf, 0x18, 0x36, 0xd9, + 0x6e, 0x5d, 0xcd, 0x45, 0xeb, 0xb0, 0x64, 0x5a, 0xaa, 0xe3, 0x6a, 0x66, 0x4b, 0xb3, 0x5b, 0xaa, + 0x9f, 0xea, 0x52, 0x35, 0x5d, 0xc7, 0x8e, 0x63, 0x31, 0x43, 0xe8, 0x51, 0x79, 0xd8, 0xb4, 0x1a, + 0x1c, 0xd8, 0xb7, 0x10, 0x65, 0x0e, 0x3a, 0x20, 0xbe, 0xb1, 0x71, 0xe2, 0x7b, 0x1a, 0x32, 0x5d, + 0xad, 0xa7, 0x62, 0xd3, 0xb5, 0x0f, 0xa9, 0x7f, 0x9e, 0x56, 0xd2, 0x5d, 0xad, 0x57, 0x23, 0x65, + 0x74, 0x0b, 0x9e, 0xf0, 0x41, 0xd5, 0x0e, 0x6e, 0x6b, 0xfa, 0xa1, 0x4a, 0x9d, 0x71, 0x9a, 0x36, + 0x50, 0x75, 0xcb, 0xdc, 0xeb, 0x18, 0xba, 0xeb, 0x50, 0xfd, 0xc0, 0x74, 0x9c, 0xec, 0x63, 0xac, + 0x53, 0x84, 0x1b, 0x8e, 0x65, 0x52, 0x1f, 0xbc, 0x2a, 0xa0, 0xbf, 0x24, 0xe1, 0xd7, 0x8d, 0x78, + 0x3a, 0x2e, 0x25, 0x6e, 0xc4, 0xd3, 0x09, 0x29, 0x79, 0x23, 0x9e, 0x4e, 0x4a, 0xa9, 0x1b, 0xf1, + 0x74, 0x5a, 0xca, 0xdc, 0x88, 0xa7, 0x33, 0x12, 0xc8, 0x3f, 0x9f, 0x86, 0x5c, 0x30, 0x32, 0x20, + 0x81, 0x96, 0x4e, 0x6d, 0x63, 0x84, 0x6a, 0xcf, 0xc7, 0x8e, 0x8c, 0x23, 0x56, 0xaa, 0xc4, 0x68, + 0xae, 0x26, 0x99, 0x1b, 0xae, 0x30, 0x4c, 0xe2, 0xb0, 0x10, 0xb1, 0xc6, 0xcc, 0xed, 0x49, 0x2b, + 0xbc, 0x84, 0xae, 0x41, 0xf2, 0x0d, 0x87, 0xd2, 0x4e, 0x52, 0xda, 0xef, 0x39, 0x9a, 0xf6, 0x8d, + 0x06, 0x25, 0x9e, 0xb9, 0xd1, 0x50, 0x37, 0xb7, 0x94, 0x8d, 0xf2, 0xba, 0xc2, 0xd1, 0xd1, 0x29, + 0x88, 0x77, 0xb4, 0x37, 0x0f, 0xc3, 0xe6, 0x95, 0x56, 0xa1, 0x15, 0x28, 0xf6, 0xcd, 0x3b, 0xd8, + 0x36, 0xf6, 0x0c, 0xb2, 0x54, 0x04, 0xaa, 0x18, 0x84, 0x2a, 0xf8, 0xad, 0xeb, 0x04, 0x7e, 0x4a, + 0xf1, 0x38, 0x05, 0xf1, 0xbb, 0x58, 0xbb, 0x1d, 0x36, 0x82, 0xb4, 0x0a, 0x9d, 0x85, 0x5c, 0x0b, + 0xef, 0xf6, 0xdb, 0xaa, 0x8d, 0x5b, 0x9a, 0xee, 0x86, 0x55, 0x7f, 0x96, 0x36, 0x29, 0xb4, 0x05, + 0xdd, 0x84, 0x0c, 0x59, 0x23, 0x93, 0xae, 0xf1, 0x2c, 0x65, 0xc1, 0xd3, 0x47, 0xb3, 0x80, 0x2f, + 0xb1, 0x40, 0x52, 0x7c, 0x7c, 0x74, 0x15, 0x92, 0xae, 0x66, 0xb7, 0xb1, 0x4b, 0x35, 0x7f, 0x61, + 0x44, 0xf2, 0x63, 0x04, 0xa5, 0x26, 0xc5, 0xa0, 0x31, 0x2d, 0xc7, 0x7e, 0x17, 0xb5, 0xcc, 0x05, + 0x48, 0x50, 0xf1, 0x40, 0x00, 0x5c, 0x40, 0xa4, 0x19, 0x94, 0x86, 0x78, 0x75, 0x4b, 0x21, 0x9a, + 0x46, 0x82, 0x1c, 0xab, 0x55, 0xb7, 0xeb, 0xb5, 0x6a, 0x4d, 0x8a, 0xca, 0x97, 0x20, 0xc9, 0xd6, + 0x9c, 0x68, 0x21, 0x6f, 0xd5, 0xa5, 0x19, 0x5e, 0xe4, 0x34, 0x22, 0xa2, 0x75, 0x67, 0xa3, 0x52, + 0x53, 0xa4, 0xa8, 0xbc, 0x03, 0xc5, 0x01, 0x3e, 0xa1, 0x87, 0x60, 0x56, 0xa9, 0x35, 0x6b, 0x9b, + 0x24, 0xce, 0x52, 0x77, 0x36, 0x6f, 0x6e, 0x6e, 0xbd, 0xb2, 0x29, 0xcd, 0x84, 0xab, 0x85, 0x4a, + 0x8b, 0xa0, 0x79, 0x90, 0xfc, 0xea, 0xc6, 0xd6, 0x8e, 0x42, 0x47, 0xf3, 0x4d, 0x51, 0x90, 0x06, + 0xb9, 0x86, 0x4e, 0xc2, 0x5c, 0xb3, 0xac, 0x5c, 0xab, 0x35, 0x55, 0x16, 0x3b, 0x7a, 0xa4, 0xe7, + 0x41, 0x0a, 0x36, 0x5c, 0xad, 0xd3, 0xd0, 0x78, 0x09, 0x4e, 0x07, 0x6b, 0x6b, 0xaf, 0x36, 0x6b, + 0x9b, 0x0d, 0xda, 0x79, 0x79, 0xf3, 0x1a, 0xd1, 0xaf, 0x03, 0xf4, 0x44, 0xb4, 0x1a, 0x23, 0x43, + 0x0d, 0xd3, 0xab, 0xad, 0xaf, 0x49, 0xf1, 0xc1, 0xea, 0xad, 0xcd, 0xda, 0xd6, 0x55, 0x29, 0x31, + 0xd8, 0x3b, 0x8d, 0x60, 0x93, 0xa8, 0x04, 0x27, 0x06, 0x6b, 0xd5, 0xda, 0x66, 0x53, 0x79, 0x4d, + 0x4a, 0x0d, 0x76, 0xdc, 0xa8, 0x29, 0xb7, 0xea, 0xd5, 0x9a, 0x94, 0x46, 0x27, 0x00, 0x85, 0x47, + 0xd4, 0xbc, 0xbe, 0xb5, 0x26, 0x65, 0x86, 0x34, 0x8a, 0xec, 0x40, 0x2e, 0x18, 0x46, 0x7e, 0x69, + 0x72, 0x49, 0x1f, 0x8b, 0x42, 0x36, 0x10, 0x16, 0x12, 0x7f, 0x5e, 0xeb, 0x74, 0xac, 0xbb, 0xaa, + 0xd6, 0x31, 0x34, 0x87, 0xeb, 0x1b, 0xa0, 0x55, 0x65, 0x52, 0x33, 0xed, 0xfe, 0x9e, 0x5e, 0xc3, + 0x27, 0xff, 0x26, 0x6a, 0xf8, 0x84, 0x94, 0x94, 0xbf, 0x37, 0x02, 0xd2, 0x60, 0xbc, 0x37, 0x30, + 0xfd, 0xc8, 0xb8, 0xe9, 0x7f, 0x49, 0xd6, 0xee, 0x7b, 0x22, 0x50, 0x08, 0x07, 0x79, 0x03, 0xc3, + 0x7b, 0xf4, 0xff, 0xea, 0xf0, 0x7e, 0x3f, 0x0a, 0xf9, 0x50, 0x68, 0x37, 0xed, 0xe8, 0x3e, 0x04, + 0xb3, 0x46, 0x0b, 0x77, 0x7b, 0x96, 0x8b, 0x4d, 0xfd, 0x50, 0xed, 0xe0, 0x3b, 0xb8, 0xb3, 0x20, + 0x53, 0xa5, 0x7c, 0xe1, 0xe8, 0xe0, 0x71, 0xa5, 0xee, 0xe3, 0xad, 0x13, 0xb4, 0xd5, 0xb9, 0xfa, + 0x5a, 0x6d, 0x63, 0x7b, 0xab, 0x59, 0xdb, 0xac, 0xbe, 0x26, 0xb4, 0x8b, 0x22, 0x19, 0x03, 0x60, + 0xef, 0xa2, 0xd2, 0xde, 0x06, 0x69, 0x70, 0x50, 0x44, 0x57, 0x8c, 0x18, 0x96, 0x34, 0x83, 0xe6, + 0xa0, 0xb8, 0xb9, 0xa5, 0x36, 0xea, 0x6b, 0x35, 0xb5, 0x76, 0xf5, 0x6a, 0xad, 0xda, 0x6c, 0xb0, + 0x74, 0xa0, 0x07, 0xdd, 0x94, 0xa2, 0x41, 0x16, 0x7f, 0x57, 0x0c, 0xe6, 0x46, 0x8c, 0x04, 0x95, + 0x79, 0x20, 0xcf, 0x72, 0x0b, 0x4f, 0x4f, 0x33, 0xfa, 0x15, 0xe2, 0x4a, 0x6f, 0x6b, 0xb6, 0xcb, + 0xe3, 0xfe, 0x73, 0x40, 0xb8, 0x64, 0xba, 0xc4, 0xb2, 0xdb, 0x3c, 0xcd, 0xca, 0xa2, 0xfb, 0xa2, + 0x5f, 0xcf, 0x32, 0xad, 0x4f, 0x01, 0xea, 0x59, 0x8e, 0xe1, 0x1a, 0x77, 0xb0, 0x6a, 0x98, 0x22, + 0x27, 0x4b, 0xa2, 0xfd, 0xb8, 0x22, 0x89, 0x96, 0xba, 0xe9, 0x7a, 0xd0, 0x26, 0x6e, 0x6b, 0x03, + 0xd0, 0xc4, 0xf3, 0x88, 0x29, 0x92, 0x68, 0xf1, 0xa0, 0x1f, 0x85, 0x5c, 0xcb, 0xea, 0x93, 0x10, + 0x88, 0xc1, 0x11, 0x6d, 0x11, 0x51, 0xb2, 0xac, 0xce, 0x03, 0xe1, 0xc1, 0xad, 0x9f, 0x0c, 0xce, + 0x29, 0x59, 0x56, 0xc7, 0x40, 0xce, 0x40, 0x51, 0x6b, 0xb7, 0x6d, 0x42, 0x5c, 0x10, 0x62, 0xe1, + 0x7a, 0xc1, 0xab, 0xa6, 0x80, 0xa5, 0x1b, 0x90, 0x16, 0x7c, 0x20, 0x1e, 0x2c, 0xe1, 0x84, 0xda, + 0x63, 0x39, 0xa8, 0xe8, 0xd9, 0x8c, 0x92, 0x36, 0x45, 0xe3, 0xa3, 0x90, 0x33, 0x1c, 0xd5, 0x3f, + 0xdb, 0x8a, 0x2e, 0x47, 0xcf, 0xa6, 0x95, 0xac, 0xe1, 0x78, 0xe7, 0x02, 0xf2, 0x0f, 0x47, 0xa1, + 0x10, 0x3e, 0xb5, 0x43, 0x6b, 0x90, 0xee, 0x58, 0xba, 0x46, 0x45, 0x8b, 0x1d, 0x19, 0x9f, 0x9d, + 0x70, 0xd0, 0xb7, 0xb2, 0xce, 0xe1, 0x15, 0x0f, 0xb3, 0xf4, 0x6f, 0x22, 0x90, 0x16, 0xd5, 0xe8, + 0x04, 0xc4, 0x7b, 0x9a, 0xbb, 0x4f, 0xc9, 0x25, 0x2a, 0x51, 0x29, 0xa2, 0xd0, 0x32, 0xa9, 0x77, + 0x7a, 0x9a, 0x49, 0x45, 0x80, 0xd7, 0x93, 0x32, 0x59, 0xd7, 0x0e, 0xd6, 0x5a, 0x34, 0x17, 0x60, + 0x75, 0xbb, 0xd8, 0x74, 0x1d, 0xb1, 0xae, 0xbc, 0xbe, 0xca, 0xab, 0xd1, 0x93, 0x30, 0xeb, 0xda, + 0x9a, 0xd1, 0x09, 0xc1, 0xc6, 0x29, 0xac, 0x24, 0x1a, 0x3c, 0xe0, 0x55, 0x38, 0x25, 0xe8, 0xb6, + 0xb0, 0xab, 0xe9, 0xfb, 0xb8, 0xe5, 0x23, 0x25, 0x69, 0xce, 0xef, 0x24, 0x07, 0x58, 0xe3, 0xed, + 0x02, 0x57, 0xfe, 0x54, 0x14, 0x66, 0x45, 0xf6, 0xa2, 0xe5, 0x31, 0x6b, 0x03, 0x40, 0x33, 0x4d, + 0xcb, 0x0d, 0xb2, 0x6b, 0x58, 0x94, 0x87, 0xf0, 0x56, 0xca, 0x1e, 0x92, 0x12, 0x20, 0x50, 0xfa, + 0x93, 0x08, 0x80, 0xdf, 0x34, 0x96, 0x6f, 0x4b, 0x90, 0xe5, 0x67, 0xb2, 0xf4, 0x60, 0x9f, 0x25, + 0xbc, 0x80, 0x55, 0x5d, 0x35, 0x3a, 0x34, 0x2d, 0xb9, 0x8b, 0xdb, 0x86, 0xc9, 0xcf, 0x53, 0x58, + 0x41, 0xa4, 0x25, 0xe3, 0xfe, 0xf1, 0x94, 0x02, 0x69, 0x07, 0x77, 0x35, 0xd3, 0x35, 0x74, 0x7e, + 0x42, 0x72, 0xf9, 0x58, 0x83, 0x5f, 0x69, 0x70, 0x6c, 0xc5, 0xa3, 0x23, 0x9f, 0x85, 0xb4, 0xa8, + 0x25, 0x8e, 0xdf, 0xe6, 0xd6, 0x66, 0x4d, 0x9a, 0x41, 0x29, 0x88, 0x35, 0x6a, 0x4d, 0x29, 0x42, + 0xc2, 0xce, 0xf2, 0x7a, 0xbd, 0xdc, 0x90, 0xa2, 0x95, 0xff, 0x1f, 0xe6, 0x74, 0xab, 0x3b, 0xd8, + 0x61, 0x45, 0x1a, 0x48, 0xf9, 0x39, 0xd7, 0x23, 0xaf, 0x3f, 0xcd, 0x81, 0xda, 0x56, 0x47, 0x33, + 0xdb, 0x2b, 0x96, 0xdd, 0xf6, 0xaf, 0x45, 0x90, 0xe8, 0xc0, 0x09, 0x5c, 0x8e, 0xe8, 0xed, 0xfe, + 0x8f, 0x48, 0xe4, 0xfb, 0xa2, 0xb1, 0x6b, 0xdb, 0x95, 0x1f, 0x8d, 0x96, 0xae, 0x31, 0xc4, 0x6d, + 0x31, 0x1d, 0x05, 0xef, 0x75, 0xb0, 0x4e, 0x06, 0x0f, 0x7f, 0xfa, 0x24, 0xcc, 0xb7, 0xad, 0xb6, + 0x45, 0x29, 0x5d, 0x20, 0xbf, 0xf8, 0xbd, 0x8a, 0x8c, 0x57, 0x5b, 0x9a, 0x78, 0x09, 0x63, 0x75, + 0x13, 0xe6, 0x38, 0xb0, 0x4a, 0x8f, 0x6f, 0x59, 0x72, 0x01, 0x1d, 0x99, 0xd9, 0x5e, 0xf8, 0xa9, + 0x3f, 0xa4, 0x5e, 0x89, 0x32, 0xcb, 0x51, 0x49, 0x1b, 0xcb, 0x3f, 0xac, 0x2a, 0xf0, 0x50, 0x88, + 0x1e, 0xd3, 0x11, 0xd8, 0x9e, 0x40, 0xf1, 0xd7, 0x38, 0xc5, 0xb9, 0x00, 0xc5, 0x06, 0x47, 0x5d, + 0xad, 0x42, 0xfe, 0x38, 0xb4, 0xfe, 0x25, 0xa7, 0x95, 0xc3, 0x41, 0x22, 0xd7, 0xa0, 0x48, 0x89, + 0xe8, 0x7d, 0xc7, 0xb5, 0xba, 0x54, 0x01, 0x1f, 0x4d, 0xe6, 0x5f, 0xfd, 0x21, 0xdb, 0xb4, 0x05, + 0x82, 0x56, 0xf5, 0xb0, 0x56, 0x57, 0x81, 0x9e, 0x58, 0xb7, 0xb0, 0xde, 0x99, 0x40, 0xe1, 0xd7, + 0xf9, 0x40, 0x3c, 0xf8, 0xd5, 0x5b, 0x30, 0x4f, 0x7e, 0x53, 0xfd, 0x18, 0x1c, 0xc9, 0xe4, 0x34, + 0xf8, 0xc2, 0x6f, 0x7d, 0x98, 0xe9, 0x85, 0x39, 0x8f, 0x40, 0x60, 0x4c, 0x81, 0x55, 0x6c, 0x63, + 0xd7, 0xc5, 0xb6, 0xa3, 0x6a, 0x9d, 0x51, 0xc3, 0x0b, 0xe4, 0x11, 0x17, 0xbe, 0xf3, 0x73, 0xe1, + 0x55, 0xbc, 0xc6, 0x30, 0xcb, 0x9d, 0xce, 0xea, 0x0e, 0x9c, 0x1c, 0x21, 0x15, 0x53, 0xd0, 0xfc, + 0x2e, 0x4e, 0x73, 0x7e, 0x48, 0x32, 0x08, 0xd9, 0x6d, 0x10, 0xf5, 0xde, 0x5a, 0x4e, 0x41, 0xf3, + 0xbb, 0x39, 0x4d, 0xc4, 0x71, 0xc5, 0x92, 0x12, 0x8a, 0x37, 0x60, 0xf6, 0x0e, 0xb6, 0x77, 0x2d, + 0x87, 0xe7, 0x6e, 0xa7, 0x20, 0xf7, 0x3d, 0x9c, 0x5c, 0x91, 0x23, 0xd2, 0x64, 0x2e, 0xa1, 0xf5, + 0x12, 0xa4, 0xf7, 0x34, 0x1d, 0x4f, 0x41, 0xe2, 0x3e, 0x27, 0x91, 0x22, 0xf0, 0x04, 0xb5, 0x0c, + 0xb9, 0xb6, 0xc5, 0x4d, 0xe4, 0x64, 0xf4, 0xef, 0xe5, 0xe8, 0x59, 0x81, 0xc3, 0x49, 0xf4, 0xac, + 0x5e, 0xbf, 0x43, 0xec, 0xe7, 0x64, 0x12, 0xff, 0x40, 0x90, 0x10, 0x38, 0x9c, 0xc4, 0x31, 0xd8, + 0xfa, 0x71, 0x41, 0xc2, 0x09, 0xf0, 0xf3, 0x65, 0xc8, 0x5a, 0x66, 0xe7, 0xd0, 0x32, 0xa7, 0x19, + 0xc4, 0x27, 0x38, 0x05, 0xe0, 0x28, 0x84, 0xc0, 0x15, 0xc8, 0x4c, 0xbb, 0x10, 0x3f, 0xf8, 0x39, + 0xb1, 0x3d, 0xc4, 0x0a, 0x5c, 0x83, 0xa2, 0x50, 0x50, 0x86, 0x65, 0x4e, 0x41, 0xe2, 0x87, 0x38, + 0x89, 0x42, 0x00, 0x8d, 0x4f, 0xc3, 0xc5, 0x8e, 0xdb, 0xc6, 0xd3, 0x10, 0xf9, 0x61, 0x31, 0x0d, + 0x8e, 0xc2, 0x59, 0xb9, 0x8b, 0x4d, 0x7d, 0x7f, 0x3a, 0x0a, 0x9f, 0x14, 0xac, 0x14, 0x38, 0x84, + 0x44, 0x15, 0xf2, 0x5d, 0xcd, 0x76, 0xf6, 0xb5, 0xce, 0x54, 0xcb, 0xf1, 0x23, 0x9c, 0x46, 0xce, + 0x43, 0xe2, 0x1c, 0xe9, 0x9b, 0xc7, 0x21, 0xf3, 0xa3, 0x82, 0x23, 0x01, 0x34, 0xbe, 0xf5, 0x1c, + 0x97, 0x26, 0xba, 0x8f, 0x43, 0xed, 0x1f, 0x8a, 0xad, 0xc7, 0x70, 0x37, 0x82, 0x14, 0xaf, 0x40, + 0xc6, 0x31, 0xde, 0x9c, 0x8a, 0xcc, 0x8f, 0x89, 0x95, 0xa6, 0x08, 0x04, 0xf9, 0x35, 0x38, 0x35, + 0xd2, 0x4c, 0x4c, 0x41, 0xec, 0xc7, 0x39, 0xb1, 0x13, 0x23, 0x4c, 0x05, 0x57, 0x09, 0xc7, 0x25, + 0xf9, 0x8f, 0x84, 0x4a, 0xc0, 0x03, 0xb4, 0xb6, 0x49, 0xd0, 0xe2, 0x68, 0x7b, 0xc7, 0xe3, 0xda, + 0x4f, 0x08, 0xae, 0x31, 0xdc, 0x10, 0xd7, 0x9a, 0x70, 0x82, 0x53, 0x3c, 0xde, 0xba, 0xfe, 0xa4, + 0x50, 0xac, 0x0c, 0x7b, 0x27, 0xbc, 0xba, 0x5f, 0x09, 0x25, 0x8f, 0x9d, 0xc2, 0x3b, 0x76, 0xd4, + 0xae, 0xd6, 0x9b, 0x82, 0xf2, 0x4f, 0x71, 0xca, 0x42, 0xe3, 0x7b, 0xee, 0xb5, 0xb3, 0xa1, 0xf5, + 0x08, 0xf1, 0x57, 0x61, 0x41, 0x10, 0xef, 0x9b, 0x36, 0xd6, 0xad, 0xb6, 0x69, 0xbc, 0x89, 0x5b, + 0x53, 0x90, 0xfe, 0xe9, 0x81, 0xa5, 0xda, 0x09, 0xa0, 0x13, 0xca, 0x75, 0x90, 0x3c, 0x5f, 0x45, + 0x35, 0xba, 0x3d, 0xcb, 0x76, 0x27, 0x50, 0xfc, 0x19, 0xb1, 0x52, 0x1e, 0x5e, 0x9d, 0xa2, 0xad, + 0xd6, 0x80, 0xdd, 0xfe, 0x98, 0x56, 0x24, 0x7f, 0x96, 0x13, 0xca, 0xfb, 0x58, 0x5c, 0x71, 0xe8, + 0x56, 0xb7, 0xa7, 0xd9, 0xd3, 0xe8, 0xbf, 0x7f, 0x2c, 0x14, 0x07, 0x47, 0xe1, 0x8a, 0x83, 0x78, + 0x74, 0xc4, 0xda, 0x4f, 0x41, 0xe1, 0xe7, 0x84, 0xe2, 0x10, 0x38, 0x9c, 0x84, 0x70, 0x18, 0xa6, + 0x20, 0xf1, 0xf3, 0x82, 0x84, 0xc0, 0x21, 0x24, 0x3e, 0xe0, 0x1b, 0x5a, 0x1b, 0xb7, 0x0d, 0xc7, + 0xb5, 0x99, 0x4b, 0x7e, 0x34, 0xa9, 0x5f, 0xf8, 0x5c, 0xd8, 0x09, 0x53, 0x02, 0xa8, 0x44, 0x13, + 0xf1, 0xa3, 0x0f, 0x1a, 0xb2, 0x4d, 0x1e, 0xd8, 0x2f, 0x0a, 0x4d, 0x14, 0x40, 0x23, 0x63, 0x0b, + 0x78, 0x88, 0x84, 0xed, 0x3a, 0x09, 0x54, 0xa6, 0x20, 0xf7, 0x4f, 0x06, 0x06, 0xd7, 0x10, 0xb8, + 0x84, 0x66, 0xc0, 0xff, 0xe9, 0x9b, 0xb7, 0xf1, 0xe1, 0x54, 0xd2, 0xf9, 0x4b, 0x03, 0xfe, 0xcf, + 0x0e, 0xc3, 0x64, 0x3a, 0xa4, 0x38, 0xe0, 0x4f, 0xa1, 0x49, 0x77, 0xfd, 0x16, 0xbe, 0xf6, 0xf3, + 0x7c, 0xbe, 0x61, 0x77, 0x6a, 0x75, 0x9d, 0x08, 0x79, 0xd8, 0xe9, 0x99, 0x4c, 0xec, 0xc3, 0x9f, + 0xf7, 0xe4, 0x3c, 0xe4, 0xf3, 0xac, 0x5e, 0x85, 0x7c, 0xc8, 0xe1, 0x99, 0x4c, 0xea, 0x6f, 0x71, + 0x52, 0xb9, 0xa0, 0xbf, 0xb3, 0x7a, 0x09, 0xe2, 0xc4, 0x79, 0x99, 0x8c, 0xfe, 0xf5, 0x1c, 0x9d, + 0x82, 0xaf, 0xbe, 0x0f, 0xd2, 0xc2, 0x69, 0x99, 0x8c, 0xfa, 0x0d, 0x1c, 0xd5, 0x43, 0x21, 0xe8, + 0xc2, 0x61, 0x99, 0x8c, 0xfe, 0xb7, 0x05, 0xba, 0x40, 0x21, 0xe8, 0xd3, 0xb3, 0xf0, 0x57, 0xfe, + 0x4e, 0x9c, 0x1b, 0x1d, 0xc1, 0xbb, 0x2b, 0x90, 0xe2, 0x9e, 0xca, 0x64, 0xec, 0x6f, 0xe4, 0x9d, + 0x0b, 0x8c, 0xd5, 0x17, 0x20, 0x31, 0x25, 0xc3, 0xbf, 0x99, 0xa3, 0x32, 0xf8, 0xd5, 0x2a, 0x64, + 0x03, 0xde, 0xc9, 0x64, 0xf4, 0x6f, 0xe1, 0xe8, 0x41, 0x2c, 0x32, 0x74, 0xee, 0x9d, 0x4c, 0x26, + 0xf0, 0x77, 0xc5, 0xd0, 0x39, 0x06, 0x61, 0x9b, 0x70, 0x4c, 0x26, 0x63, 0x7f, 0x54, 0x70, 0x5d, + 0xa0, 0xac, 0xbe, 0x0c, 0x19, 0xcf, 0xd8, 0x4c, 0xc6, 0xff, 0x56, 0x8e, 0xef, 0xe3, 0x10, 0x0e, + 0x04, 0x8c, 0xdd, 0x64, 0x12, 0x7f, 0x4f, 0x70, 0x20, 0x80, 0x45, 0xb6, 0xd1, 0xa0, 0x03, 0x33, + 0x99, 0xd2, 0xb7, 0x89, 0x6d, 0x34, 0xe0, 0xbf, 0x90, 0xd5, 0xa4, 0x3a, 0x7f, 0x32, 0x89, 0xbf, + 0x2f, 0x56, 0x93, 0xc2, 0x93, 0x61, 0x0c, 0x7a, 0x04, 0x93, 0x69, 0x7c, 0x87, 0x18, 0xc6, 0x80, + 0x43, 0xb0, 0xba, 0x0d, 0x68, 0xd8, 0x1b, 0x98, 0x4c, 0xef, 0x63, 0x9c, 0xde, 0xec, 0x90, 0x33, + 0xb0, 0xfa, 0x0a, 0x9c, 0x18, 0xed, 0x09, 0x4c, 0xa6, 0xfa, 0x9d, 0x9f, 0x1f, 0x88, 0xdd, 0x82, + 0x8e, 0xc0, 0x6a, 0xd3, 0x37, 0x29, 0x41, 0x2f, 0x60, 0x32, 0xd9, 0xef, 0xfa, 0x7c, 0x58, 0x71, + 0x07, 0x9d, 0x80, 0xd5, 0x32, 0x80, 0x6f, 0x80, 0x27, 0xd3, 0xfa, 0x1e, 0x4e, 0x2b, 0x80, 0x44, + 0xb6, 0x06, 0xb7, 0xbf, 0x93, 0xf1, 0xef, 0x8b, 0xad, 0xc1, 0x31, 0xc8, 0xd6, 0x10, 0xa6, 0x77, + 0x32, 0xf6, 0xf7, 0x8a, 0xad, 0x21, 0x50, 0x88, 0x64, 0x07, 0xac, 0xdb, 0x64, 0x0a, 0x9f, 0x10, + 0x92, 0x1d, 0xc0, 0x5a, 0xdd, 0x84, 0xd9, 0x21, 0x83, 0x38, 0x99, 0xd4, 0xf7, 0x71, 0x52, 0xd2, + 0xa0, 0x3d, 0x0c, 0x1a, 0x2f, 0x6e, 0x0c, 0x27, 0x53, 0xfb, 0xfe, 0x01, 0xe3, 0xc5, 0x6d, 0xe1, + 0xea, 0x15, 0x48, 0x9b, 0xfd, 0x4e, 0x87, 0x6c, 0x1e, 0x74, 0xf4, 0xfd, 0xdc, 0x85, 0xff, 0xf2, + 0x05, 0xce, 0x1d, 0x81, 0xb0, 0x7a, 0x09, 0x12, 0xb8, 0xbb, 0x8b, 0x5b, 0x93, 0x30, 0xff, 0xf8, + 0x0b, 0x42, 0x61, 0x12, 0xe8, 0xd5, 0x97, 0x01, 0x58, 0x6a, 0x84, 0x1e, 0x9c, 0x4f, 0xc0, 0xfd, + 0x93, 0x2f, 0xf0, 0x0b, 0x71, 0x3e, 0x8a, 0x4f, 0x80, 0x5d, 0xaf, 0x3b, 0x9a, 0xc0, 0xe7, 0xc2, + 0x04, 0xe8, 0x8a, 0xbc, 0x04, 0xa9, 0x37, 0x1c, 0xcb, 0x74, 0xb5, 0xf6, 0x24, 0xec, 0x3f, 0xe5, + 0xd8, 0x02, 0x9e, 0x30, 0xac, 0x6b, 0xd9, 0xd8, 0xd5, 0xda, 0xce, 0x24, 0xdc, 0xff, 0xca, 0x71, + 0x3d, 0x04, 0x82, 0xac, 0x6b, 0x8e, 0x3b, 0xcd, 0xbc, 0xff, 0x4c, 0x20, 0x0b, 0x04, 0x32, 0x68, + 0xf2, 0xfb, 0x36, 0x3e, 0x9c, 0x84, 0xfb, 0xe7, 0x62, 0xd0, 0x1c, 0x7e, 0xf5, 0x7d, 0x90, 0x21, + 0x3f, 0xd9, 0x2d, 0xd7, 0x09, 0xc8, 0x7f, 0xc1, 0x91, 0x7d, 0x0c, 0xd2, 0xb3, 0xe3, 0xb6, 0x5c, + 0x63, 0x32, 0xb3, 0xff, 0x92, 0xaf, 0xb4, 0x80, 0x5f, 0x2d, 0x43, 0xd6, 0x71, 0x5b, 0xad, 0x3e, + 0xf7, 0x4f, 0x27, 0xa0, 0xff, 0xb7, 0x2f, 0x78, 0x29, 0x0b, 0x0f, 0x87, 0xac, 0xf6, 0xdd, 0xdb, + 0x6e, 0xcf, 0xa2, 0xe7, 0x2d, 0x93, 0x28, 0x7c, 0x9e, 0x53, 0x08, 0xa0, 0xac, 0x56, 0x21, 0x47, + 0xe6, 0x62, 0xe3, 0x1e, 0xa6, 0x87, 0x63, 0x13, 0x48, 0xfc, 0x15, 0x67, 0x40, 0x08, 0xa9, 0xf2, + 0xd5, 0xbf, 0xfe, 0xe9, 0xc5, 0xc8, 0xa7, 0x3e, 0xbd, 0x18, 0xf9, 0xfd, 0x4f, 0x2f, 0x46, 0x3e, + 0xfa, 0x99, 0xc5, 0x99, 0x4f, 0x7d, 0x66, 0x71, 0xe6, 0x77, 0x3e, 0xb3, 0x38, 0x33, 0x3a, 0x4b, + 0x0c, 0xd7, 0xac, 0x6b, 0x16, 0xcb, 0x0f, 0xbf, 0xfe, 0x78, 0xdb, 0x70, 0xf7, 0xfb, 0xbb, 0x2b, + 0xba, 0xd5, 0xbd, 0xa0, 0x5b, 0x4e, 0xd7, 0x72, 0x2e, 0x84, 0xf3, 0xba, 0xf4, 0x17, 0xfc, 0x75, + 0x84, 0xc4, 0xcc, 0xe1, 0x74, 0xae, 0x66, 0x1e, 0x8e, 0xfb, 0x98, 0xee, 0x32, 0xc4, 0xca, 0xe6, + 0x21, 0x3a, 0xc5, 0x14, 0x9c, 0xda, 0xb7, 0x3b, 0xfc, 0xaa, 0x65, 0x8a, 0x94, 0x77, 0xec, 0x0e, + 0x9a, 0xf7, 0xef, 0x43, 0x47, 0xce, 0xe6, 0xf8, 0x25, 0xe7, 0xca, 0xb7, 0x44, 0x8e, 0x37, 0x93, + 0x74, 0xd9, 0x3c, 0xa4, 0x13, 0xd9, 0x8e, 0xbc, 0xfe, 0xd4, 0xc4, 0x3c, 0xf7, 0x6d, 0xd3, 0xba, + 0x6b, 0x92, 0x61, 0xf7, 0x76, 0x45, 0x8e, 0x7b, 0x71, 0x30, 0xc7, 0xfd, 0x0a, 0xee, 0x74, 0x6e, + 0x12, 0xb8, 0x26, 0x41, 0xd9, 0x4d, 0xb2, 0x5b, 0xfd, 0xf0, 0x6d, 0x51, 0x58, 0x1c, 0x4a, 0x67, + 0x73, 0x21, 0x18, 0xc7, 0x84, 0x55, 0x48, 0xaf, 0x09, 0xd9, 0x5a, 0x80, 0x94, 0x83, 0x75, 0xcb, + 0x6c, 0x39, 0x94, 0x11, 0x31, 0x45, 0x14, 0x09, 0x23, 0x4c, 0xcd, 0xb4, 0x1c, 0x7e, 0x59, 0x99, + 0x15, 0x2a, 0xdf, 0x7d, 0x4c, 0x46, 0xe4, 0x45, 0x4f, 0x82, 0x1b, 0xcf, 0x4e, 0xc9, 0x0d, 0x31, + 0x89, 0x50, 0xe6, 0x7f, 0x5a, 0xae, 0x7c, 0x47, 0x14, 0x96, 0x06, 0xb9, 0x42, 0x76, 0x96, 0xe3, + 0x6a, 0xdd, 0xde, 0x38, 0xb6, 0x5c, 0x81, 0x4c, 0x53, 0xc0, 0x1c, 0x9b, 0x2f, 0xf7, 0x8f, 0xc9, + 0x97, 0x82, 0xd7, 0x95, 0x60, 0xcc, 0xc5, 0x29, 0x19, 0xe3, 0xcd, 0xe3, 0x81, 0x38, 0xf3, 0x3f, + 0x93, 0x70, 0x8a, 0x6d, 0x27, 0x95, 0x6d, 0x25, 0x56, 0xe0, 0x3c, 0xc9, 0x05, 0x9b, 0x26, 0x9f, + 0x93, 0xc8, 0x37, 0x61, 0xae, 0x4e, 0xb4, 0x05, 0x89, 0x82, 0xfc, 0x13, 0x9e, 0x91, 0xf7, 0xb9, + 0x97, 0x43, 0x0e, 0x3f, 0x3f, 0xdf, 0x0a, 0x56, 0xc9, 0x5f, 0x1b, 0x01, 0xa9, 0xa1, 0x6b, 0x1d, + 0xcd, 0xfe, 0x62, 0x49, 0xa1, 0x17, 0x00, 0xd8, 0x75, 0x0f, 0xef, 0xc3, 0xbd, 0xc2, 0xc5, 0x85, + 0x95, 0xe0, 0xe4, 0x56, 0x58, 0x4f, 0xf4, 0x06, 0x55, 0x86, 0xc2, 0x92, 0x9f, 0xe7, 0x5f, 0x05, + 0xf0, 0x1b, 0xd0, 0x69, 0x38, 0xd9, 0xa8, 0x96, 0xd7, 0xcb, 0x8a, 0xb8, 0x24, 0xd4, 0xd8, 0xae, + 0x55, 0xeb, 0x57, 0xeb, 0xb5, 0x35, 0x69, 0x06, 0x9d, 0x00, 0x14, 0x6c, 0xf4, 0x2e, 0x35, 0x3d, + 0x04, 0xb3, 0xc1, 0x7a, 0xf6, 0x95, 0x4a, 0x94, 0x78, 0x8a, 0x46, 0xb7, 0xd7, 0xc1, 0xf4, 0xe4, + 0x51, 0x35, 0x04, 0xd7, 0x26, 0x3b, 0x21, 0xbf, 0xf1, 0xef, 0xd9, 0x97, 0x0b, 0x73, 0x3e, 0xba, + 0xc7, 0xf3, 0xd5, 0x75, 0x98, 0xd5, 0x74, 0x1d, 0xf7, 0x42, 0x24, 0x27, 0xa8, 0x6a, 0x42, 0x90, + 0x9e, 0xa5, 0x72, 0x4c, 0x9f, 0xda, 0x0b, 0x90, 0x74, 0xe8, 0xec, 0x27, 0x91, 0xf8, 0x4d, 0x4e, + 0x82, 0x83, 0xaf, 0x9a, 0x30, 0x4b, 0x3c, 0x3f, 0xcd, 0xc6, 0x81, 0x61, 0x1c, 0x9d, 0x67, 0xf8, + 0xa7, 0x3f, 0xf3, 0x0c, 0x3d, 0x59, 0x7d, 0x34, 0xbc, 0x2c, 0x23, 0xc4, 0x49, 0x91, 0x38, 0x6d, + 0x7f, 0xa0, 0x18, 0x0a, 0xa2, 0x3f, 0x3e, 0xe0, 0xa3, 0x3b, 0xfb, 0x65, 0xde, 0xd9, 0xe2, 0x28, + 0x19, 0x08, 0xf4, 0x94, 0xe7, 0x54, 0x59, 0x43, 0xa5, 0x36, 0x6e, 0x4f, 0xbf, 0xfe, 0xe4, 0xb0, + 0x75, 0x62, 0xff, 0x3d, 0x4d, 0x29, 0x5f, 0x09, 0x76, 0xe3, 0xed, 0xbd, 0xdf, 0x8d, 0xc1, 0xac, + 0xd6, 0x35, 0x4c, 0xeb, 0x02, 0xfd, 0x97, 0xef, 0xb9, 0x04, 0x2d, 0x4c, 0x71, 0x28, 0x79, 0x99, + 0x6d, 0x85, 0xc9, 0x12, 0xf3, 0x17, 0xdf, 0xf4, 0x43, 0x09, 0x7f, 0xbb, 0xac, 0x6e, 0x80, 0x24, + 0x2e, 0xf1, 0x62, 0x53, 0xb7, 0x5a, 0x53, 0x65, 0x29, 0xfe, 0x52, 0xd0, 0x10, 0xf9, 0xad, 0x1a, + 0x47, 0x5d, 0x7d, 0x2f, 0xa4, 0x3d, 0x32, 0x93, 0x3c, 0x13, 0x41, 0xc4, 0xc3, 0x20, 0x7e, 0x09, + 0xdb, 0x99, 0xd3, 0x78, 0xa1, 0x9f, 0x17, 0xf8, 0x6c, 0x87, 0x6e, 0x92, 0xd9, 0x5c, 0x83, 0x42, + 0xcb, 0x32, 0x5d, 0xd5, 0xea, 0x1a, 0x2e, 0xee, 0xf6, 0xdc, 0x89, 0x7e, 0xdd, 0x5f, 0x31, 0x22, + 0x69, 0x25, 0x4f, 0xf0, 0xb6, 0x04, 0xda, 0x03, 0x2d, 0xae, 0xd3, 0xba, 0xcd, 0x75, 0xb1, 0x7b, + 0xc0, 0x16, 0xd1, 0x5b, 0xdc, 0x3f, 0x8b, 0xc1, 0x22, 0x07, 0xde, 0xd5, 0x1c, 0x7c, 0xe1, 0xce, + 0xb3, 0xbb, 0xd8, 0xd5, 0x9e, 0xbd, 0xa0, 0x5b, 0x86, 0x30, 0xc4, 0x73, 0x5c, 0xd7, 0x92, 0xf6, + 0x15, 0xde, 0x5e, 0x1a, 0x79, 0x5a, 0x5d, 0x1a, 0xaf, 0xa3, 0x4b, 0xc3, 0x22, 0x24, 0xbf, 0x0e, + 0xf1, 0xaa, 0x65, 0x98, 0xc4, 0x34, 0xb5, 0xb0, 0x69, 0x75, 0xb9, 0xb6, 0x64, 0x05, 0x74, 0x19, + 0x92, 0x5a, 0xd7, 0xea, 0x9b, 0x2e, 0xd3, 0x94, 0x95, 0xc5, 0x5f, 0x7f, 0x7b, 0x69, 0xe6, 0x77, + 0xdf, 0x5e, 0x8a, 0xd5, 0x4d, 0xf7, 0xb7, 0x7f, 0xf6, 0x69, 0xe0, 0xd4, 0xeb, 0xa6, 0xfb, 0xc9, + 0x3f, 0xfa, 0xc9, 0xf3, 0x11, 0x85, 0x43, 0xaf, 0xc6, 0x3f, 0xfb, 0xf1, 0xa5, 0x88, 0xfc, 0x2a, + 0xa4, 0xd6, 0xb0, 0x7e, 0x04, 0xf9, 0x67, 0x07, 0xc8, 0x9f, 0x12, 0xe4, 0xd7, 0xb0, 0x1e, 0x20, + 0xbf, 0x86, 0xf5, 0x01, 0xca, 0x2f, 0x40, 0xba, 0x6e, 0xba, 0xec, 0x0b, 0xa0, 0x27, 0x21, 0x66, + 0x98, 0xec, 0x52, 0x79, 0x80, 0xc2, 0xd0, 0x00, 0x15, 0x02, 0x45, 0x10, 0xd7, 0xb0, 0xee, 0x21, + 0xb6, 0xb0, 0x3e, 0x88, 0x38, 0xdc, 0x35, 0x81, 0xaa, 0xac, 0xfd, 0xce, 0x1f, 0x2c, 0xce, 0xbc, + 0xf5, 0xe9, 0xc5, 0x99, 0xb1, 0x4b, 0x2f, 0x4f, 0x5e, 0x7a, 0x6f, 0xc5, 0x7f, 0x28, 0x0e, 0x8f, + 0xd0, 0x0f, 0x43, 0xed, 0xae, 0x61, 0xba, 0x17, 0x74, 0xfb, 0xb0, 0xe7, 0x5a, 0x64, 0xff, 0x5a, + 0x7b, 0x7c, 0xc1, 0x67, 0xfd, 0xe6, 0x15, 0xd6, 0x3c, 0x7a, 0xb9, 0xe5, 0x3d, 0x48, 0x6c, 0x13, + 0x3c, 0xc2, 0x62, 0xd7, 0x72, 0xb5, 0x0e, 0x77, 0x3a, 0x58, 0x81, 0xd4, 0xb2, 0x8f, 0x49, 0xa3, + 0xac, 0xd6, 0x10, 0xdf, 0x91, 0x76, 0xb0, 0xb6, 0xc7, 0xbe, 0xc9, 0x89, 0x51, 0x6f, 0x35, 0x4d, + 0x2a, 0xe8, 0xe7, 0x37, 0xf3, 0x90, 0xd0, 0xfa, 0xec, 0xde, 0x4c, 0x8c, 0xb8, 0xb1, 0xb4, 0x20, + 0xdf, 0x84, 0x14, 0x3f, 0x3e, 0x47, 0x12, 0xc4, 0x6e, 0xe3, 0x43, 0xda, 0x4f, 0x4e, 0x21, 0x3f, + 0xd1, 0x0a, 0x24, 0xe8, 0xe0, 0xf9, 0xc7, 0x86, 0x0b, 0x2b, 0x43, 0xa3, 0x5f, 0xa1, 0x83, 0x54, + 0x18, 0x98, 0x7c, 0x03, 0xd2, 0x6b, 0x16, 0x91, 0xc2, 0x30, 0xb5, 0x0c, 0xa3, 0x46, 0xc7, 0xdc, + 0xeb, 0x73, 0xa9, 0x50, 0x58, 0x01, 0x9d, 0x80, 0x24, 0xfb, 0x46, 0x8b, 0xdf, 0xfd, 0xe1, 0x25, + 0xb9, 0x0a, 0x29, 0x4a, 0x7b, 0xab, 0x47, 0x2c, 0xbe, 0x77, 0x6d, 0x3d, 0xc3, 0xbf, 0xd8, 0xe5, + 0xe4, 0xa3, 0xfe, 0x60, 0x11, 0xc4, 0x5b, 0x9a, 0xab, 0xf1, 0x79, 0xd3, 0xdf, 0xf2, 0xfb, 0x21, + 0xcd, 0x89, 0x38, 0xe8, 0x22, 0xc4, 0xac, 0x9e, 0xc3, 0x6f, 0xef, 0x94, 0xc6, 0x4d, 0x65, 0xab, + 0x57, 0x89, 0x13, 0x99, 0x51, 0x08, 0x70, 0x65, 0x73, 0xac, 0x58, 0x3c, 0x1f, 0x12, 0x8b, 0x2e, + 0x76, 0x77, 0xf7, 0x5c, 0xff, 0x07, 0x5b, 0xce, 0x21, 0x51, 0xf0, 0x04, 0xe5, 0x7e, 0x14, 0x16, + 0x03, 0xad, 0x77, 0xb0, 0xed, 0x18, 0x96, 0xc9, 0xa4, 0x89, 0x4b, 0x0a, 0x0a, 0x0c, 0x90, 0xb7, + 0x8f, 0x11, 0x95, 0xf7, 0x41, 0xac, 0xdc, 0xeb, 0xa1, 0x12, 0xa4, 0x69, 0x59, 0xb7, 0x98, 0xac, + 0xc4, 0x15, 0xaf, 0x4c, 0xda, 0x1c, 0x6b, 0xcf, 0xbd, 0xab, 0xd9, 0xde, 0x27, 0xcc, 0xa2, 0x2c, + 0xbf, 0x04, 0x99, 0xaa, 0x65, 0x3a, 0xd8, 0x74, 0xfa, 0xd4, 0x95, 0xdd, 0xed, 0x58, 0xfa, 0x6d, + 0x4e, 0x81, 0x15, 0x08, 0xb3, 0xb5, 0x5e, 0x8f, 0x62, 0xc6, 0x15, 0xf2, 0x93, 0xed, 0xd7, 0xca, + 0xd6, 0x58, 0xf6, 0x5c, 0x3a, 0x1e, 0x7b, 0xf8, 0x04, 0x7d, 0x9f, 0x34, 0x02, 0x0f, 0x0f, 0x6f, + 0xa4, 0xdb, 0xf8, 0xd0, 0x39, 0xee, 0x3e, 0x7a, 0x15, 0x32, 0xdb, 0xf4, 0x75, 0x91, 0x9b, 0xf8, + 0x10, 0x95, 0x20, 0x85, 0x5b, 0x17, 0x2f, 0x5d, 0x7a, 0xf6, 0x25, 0x26, 0xe5, 0xd7, 0x67, 0x14, + 0x51, 0x81, 0x16, 0x21, 0xe3, 0x60, 0xbd, 0x77, 0xf1, 0xd2, 0xe5, 0xdb, 0xcf, 0x32, 0xb1, 0xba, + 0x3e, 0xa3, 0xf8, 0x55, 0xab, 0x69, 0x32, 0xe3, 0xcf, 0x7e, 0x62, 0x29, 0x52, 0x49, 0x40, 0xcc, + 0xe9, 0x77, 0xdf, 0x35, 0xd9, 0xf8, 0xf6, 0x04, 0x2c, 0x07, 0x5a, 0x99, 0x71, 0xb9, 0xa3, 0x75, + 0x8c, 0x96, 0xe6, 0xbf, 0x09, 0x23, 0x05, 0xe6, 0x4f, 0x21, 0xc6, 0x58, 0x8d, 0x23, 0xb9, 0x28, + 0xff, 0x74, 0x04, 0x72, 0xb7, 0x04, 0xe5, 0x06, 0x76, 0xd1, 0x15, 0x00, 0xaf, 0x27, 0xb1, 0x55, + 0x4e, 0xaf, 0x0c, 0xf6, 0xb5, 0xe2, 0xe1, 0x28, 0x01, 0x70, 0xf4, 0x02, 0x15, 0xc0, 0x9e, 0xe5, + 0xf0, 0xcf, 0x59, 0x27, 0xa0, 0x7a, 0xc0, 0xe8, 0x29, 0x40, 0x54, 0xab, 0xa9, 0x77, 0x2c, 0xd7, + 0x30, 0xdb, 0x6a, 0xcf, 0xba, 0xcb, 0x1f, 0x09, 0x88, 0x29, 0x12, 0x6d, 0xb9, 0x45, 0x1b, 0xb6, + 0x49, 0x3d, 0x19, 0x74, 0xc6, 0xa3, 0x42, 0xa2, 0x32, 0xad, 0xd5, 0xb2, 0xb1, 0xe3, 0x70, 0xc5, + 0x25, 0x8a, 0xe8, 0x0a, 0xa4, 0x7a, 0xfd, 0x5d, 0x55, 0x68, 0x89, 0xec, 0xc5, 0x87, 0x47, 0xed, + 0x79, 0x21, 0x1b, 0x7c, 0xd7, 0x27, 0x7b, 0xfd, 0x5d, 0x22, 0x29, 0x8f, 0x42, 0x6e, 0xc4, 0x60, + 0xb2, 0x77, 0xfc, 0x71, 0xd0, 0x07, 0x6d, 0xf8, 0x0c, 0xd4, 0x9e, 0x6d, 0x58, 0xb6, 0xe1, 0x1e, + 0xd2, 0x5b, 0x77, 0x31, 0x45, 0x12, 0x0d, 0xdb, 0xbc, 0x5e, 0xbe, 0x0d, 0xc5, 0x06, 0xf5, 0xd6, + 0xfd, 0x91, 0x5f, 0xf2, 0xc7, 0x17, 0x99, 0x3c, 0xbe, 0xb1, 0x23, 0x8b, 0x0e, 0x8d, 0xac, 0xb2, + 0x31, 0x56, 0x32, 0x9f, 0x3b, 0x9e, 0x64, 0x86, 0xad, 0xdb, 0x9f, 0x9c, 0x0a, 0x6d, 0x4a, 0xee, + 0xf5, 0x04, 0x54, 0xd6, 0xb4, 0x42, 0x39, 0x29, 0x10, 0x2f, 0x1d, 0x6d, 0x44, 0x4b, 0x13, 0x54, + 0x67, 0x69, 0xe2, 0xf6, 0x91, 0x5f, 0x82, 0xfc, 0xb6, 0x66, 0xbb, 0x0d, 0xec, 0x5e, 0xc7, 0x5a, + 0x0b, 0xdb, 0x61, 0x2b, 0x9b, 0x17, 0x56, 0x16, 0x41, 0x9c, 0x9a, 0x52, 0x66, 0x65, 0xe8, 0x6f, + 0x79, 0x1f, 0xe2, 0xf4, 0xda, 0xad, 0x67, 0x81, 0x39, 0x06, 0xb3, 0xc0, 0x44, 0x7f, 0x1e, 0xba, + 0xd8, 0x11, 0xb9, 0x22, 0x5a, 0x40, 0xcf, 0x0b, 0x3b, 0x1a, 0x3b, 0xda, 0x8e, 0x72, 0x21, 0xe4, + 0xd6, 0xb4, 0x03, 0xa9, 0x0a, 0x51, 0xbf, 0xf5, 0x35, 0x6f, 0x20, 0x11, 0x7f, 0x20, 0x68, 0x03, + 0x8a, 0x3d, 0xcd, 0x76, 0xe9, 0x67, 0x78, 0xfb, 0x74, 0x16, 0x5c, 0xce, 0x97, 0x86, 0x77, 0x5d, + 0x68, 0xb2, 0xbc, 0x97, 0x7c, 0x2f, 0x58, 0x29, 0xff, 0xe7, 0x38, 0x24, 0x39, 0x33, 0xde, 0x07, + 0x29, 0xce, 0x56, 0x2e, 0x99, 0x8f, 0xac, 0x0c, 0x1b, 0xa3, 0x15, 0xcf, 0x68, 0x70, 0x7a, 0x02, + 0x07, 0x3d, 0x01, 0x69, 0x7d, 0x5f, 0x33, 0x4c, 0xd5, 0x68, 0x71, 0x07, 0x30, 0xfb, 0xe9, 0xb7, + 0x97, 0x52, 0x55, 0x52, 0x57, 0x5f, 0x53, 0x52, 0xb4, 0xb1, 0xde, 0x22, 0x96, 0x7f, 0x1f, 0x1b, + 0xed, 0x7d, 0x97, 0xef, 0x2e, 0x5e, 0x42, 0x2f, 0x42, 0x9c, 0x08, 0x04, 0xff, 0x48, 0xbb, 0x34, + 0xe4, 0xcb, 0x7b, 0x79, 0x92, 0x4a, 0x9a, 0x74, 0xfc, 0xd1, 0xff, 0xb4, 0x14, 0x51, 0x28, 0x06, + 0xaa, 0x42, 0xbe, 0xa3, 0x39, 0xae, 0x4a, 0xad, 0x16, 0xe9, 0x3e, 0x41, 0x49, 0x9c, 0x1a, 0x66, + 0x08, 0x67, 0x2c, 0x1f, 0x7a, 0x96, 0x60, 0xb1, 0xaa, 0x16, 0x3a, 0x0b, 0x12, 0x25, 0xa2, 0x5b, + 0xdd, 0xae, 0xe1, 0x32, 0x5f, 0x2a, 0x49, 0xf9, 0x5e, 0x20, 0xf5, 0x55, 0x5a, 0x4d, 0x3d, 0xaa, + 0xd3, 0x90, 0xa1, 0x9f, 0x85, 0x52, 0x10, 0x76, 0xd7, 0x3b, 0x4d, 0x2a, 0x68, 0xe3, 0x19, 0x28, + 0xfa, 0xba, 0x91, 0x81, 0xa4, 0x19, 0x15, 0xbf, 0x9a, 0x02, 0x3e, 0x03, 0xf3, 0x26, 0x3e, 0xa0, + 0xb7, 0xcf, 0x43, 0xd0, 0x19, 0x0a, 0x8d, 0x48, 0xdb, 0xad, 0x30, 0xc6, 0xe3, 0x50, 0xd0, 0x05, + 0xf3, 0x19, 0x2c, 0x50, 0xd8, 0xbc, 0x57, 0x4b, 0xc1, 0x4e, 0x41, 0x5a, 0xeb, 0xf5, 0x18, 0x40, + 0x96, 0xeb, 0xc6, 0x5e, 0x8f, 0x36, 0x9d, 0x87, 0x59, 0x3a, 0x47, 0x1b, 0x3b, 0xfd, 0x8e, 0xcb, + 0x89, 0xe4, 0x28, 0x4c, 0x91, 0x34, 0x28, 0xac, 0x9e, 0xc2, 0x3e, 0x06, 0x79, 0x7c, 0xc7, 0x68, + 0x61, 0x53, 0xc7, 0x0c, 0x2e, 0x4f, 0xe1, 0x72, 0xa2, 0x92, 0x02, 0x9d, 0x03, 0x4f, 0xe7, 0xa9, + 0x42, 0x1f, 0x17, 0x18, 0x3d, 0x51, 0x5f, 0x66, 0xd5, 0xf2, 0x02, 0xc4, 0xd7, 0x34, 0x57, 0x23, + 0x4e, 0x85, 0x7b, 0xc0, 0x8c, 0x4c, 0x4e, 0x21, 0x3f, 0xe5, 0xcf, 0x46, 0x21, 0x7e, 0xcb, 0x72, + 0x31, 0x7a, 0x2e, 0xe0, 0xf0, 0x15, 0x46, 0xc9, 0x73, 0xc3, 0x68, 0x9b, 0xb8, 0xb5, 0xe1, 0xb4, + 0x03, 0x6f, 0xb8, 0xf8, 0xe2, 0x14, 0x0d, 0x89, 0xd3, 0x3c, 0x24, 0x6c, 0xab, 0x6f, 0xb6, 0xc4, + 0x2d, 0x69, 0x5a, 0x40, 0x35, 0x48, 0x7b, 0x52, 0x12, 0x9f, 0x24, 0x25, 0x45, 0x22, 0x25, 0x44, + 0x86, 0x79, 0x85, 0x92, 0xda, 0xe5, 0xc2, 0x52, 0x81, 0x8c, 0xa7, 0xbc, 0xb8, 0xb4, 0x4d, 0x27, + 0xb0, 0x3e, 0x1a, 0x31, 0x24, 0xde, 0xda, 0x7b, 0xcc, 0x63, 0x12, 0x27, 0x79, 0x0d, 0x9c, 0x7b, + 0x21, 0xb1, 0xe2, 0xef, 0xc9, 0xa4, 0xe8, 0xbc, 0x7c, 0xb1, 0x62, 0x6f, 0xca, 0x3c, 0x0c, 0x19, + 0xc7, 0x68, 0x9b, 0x9a, 0xdb, 0xb7, 0x31, 0x97, 0x3c, 0xbf, 0x42, 0xfe, 0x95, 0x08, 0x24, 0x99, + 0x24, 0x07, 0xf8, 0x16, 0x19, 0xcd, 0xb7, 0xe8, 0x38, 0xbe, 0xc5, 0x1e, 0x9c, 0x6f, 0x65, 0x00, + 0x6f, 0x30, 0x0e, 0x7f, 0xe6, 0x63, 0x84, 0xb7, 0xc0, 0x86, 0xd8, 0x30, 0xda, 0x7c, 0xa3, 0x06, + 0x90, 0xe4, 0xff, 0x18, 0x21, 0x8e, 0x2b, 0x6f, 0x47, 0x65, 0xc8, 0x8b, 0x71, 0xa9, 0x7b, 0x1d, + 0xad, 0xcd, 0x65, 0xe7, 0x91, 0xb1, 0x83, 0xbb, 0xda, 0xd1, 0xda, 0x4a, 0x96, 0x8f, 0x87, 0x14, + 0x46, 0xaf, 0x43, 0x74, 0xcc, 0x3a, 0x84, 0x16, 0x3e, 0xf6, 0x60, 0x0b, 0x1f, 0x5a, 0xa2, 0xf8, + 0xe0, 0x12, 0xfd, 0x4c, 0x94, 0x06, 0x2f, 0x3d, 0xcb, 0xd1, 0x3a, 0x5f, 0x8a, 0x1d, 0x71, 0x1a, + 0x32, 0x3d, 0xab, 0xa3, 0xb2, 0x16, 0xf6, 0xf5, 0x40, 0xba, 0x67, 0x75, 0x94, 0xa1, 0x65, 0x4f, + 0xbc, 0x43, 0xdb, 0x25, 0xf9, 0x0e, 0x70, 0x2d, 0x35, 0xc8, 0x35, 0x1b, 0x72, 0x8c, 0x15, 0xdc, + 0x96, 0x3d, 0x43, 0x78, 0x40, 0x8d, 0x63, 0x64, 0xd8, 0xf6, 0xb2, 0x61, 0x33, 0x48, 0x85, 0xc3, + 0x11, 0x0c, 0xa6, 0xfa, 0x47, 0x45, 0xbd, 0x41, 0xb1, 0x54, 0x38, 0x9c, 0xfc, 0xed, 0x11, 0x80, + 0x75, 0xc2, 0x59, 0x3a, 0x5f, 0x62, 0x85, 0x1c, 0x3a, 0x04, 0x35, 0xd4, 0xf3, 0xe2, 0xb8, 0x45, + 0xe3, 0xfd, 0xe7, 0x9c, 0xe0, 0xb8, 0xab, 0x90, 0xf7, 0x85, 0xd1, 0xc1, 0x62, 0x30, 0x8b, 0x47, + 0x78, 0xd4, 0x0d, 0xec, 0x2a, 0xb9, 0x3b, 0x81, 0x92, 0xfc, 0xcf, 0x23, 0x90, 0xa1, 0x63, 0xda, + 0xc0, 0xae, 0x16, 0x5a, 0xc3, 0xc8, 0x83, 0xaf, 0xe1, 0x23, 0x00, 0x8c, 0x8c, 0x63, 0xbc, 0x89, + 0xb9, 0x64, 0x65, 0x68, 0x4d, 0xc3, 0x78, 0x13, 0xa3, 0xcb, 0x1e, 0xc3, 0x63, 0x47, 0x33, 0x5c, + 0x78, 0xdc, 0x9c, 0xed, 0x27, 0x21, 0x45, 0x9f, 0xc5, 0x3b, 0x70, 0xb8, 0x13, 0x9d, 0x34, 0xfb, + 0xdd, 0xe6, 0x81, 0x23, 0xbf, 0x01, 0xa9, 0xe6, 0x01, 0xcb, 0x85, 0x9c, 0x86, 0x8c, 0x6d, 0x59, + 0xdc, 0x26, 0x33, 0x5f, 0x28, 0x4d, 0x2a, 0xa8, 0x09, 0x12, 0xf1, 0x7f, 0xd4, 0x8f, 0xff, 0xfd, + 0x04, 0x46, 0x6c, 0xaa, 0x04, 0xc6, 0xf9, 0xff, 0x10, 0x81, 0x6c, 0x40, 0x3f, 0xa0, 0x67, 0xe1, + 0xa1, 0xca, 0xfa, 0x56, 0xf5, 0xa6, 0x5a, 0x5f, 0x53, 0xaf, 0xae, 0x97, 0xaf, 0xf9, 0x1f, 0xc8, + 0x95, 0x4e, 0xdc, 0xbb, 0xbf, 0x8c, 0x02, 0xb0, 0x3b, 0x26, 0x3d, 0x8c, 0x41, 0x17, 0x60, 0x3e, + 0x8c, 0x52, 0xae, 0x34, 0x6a, 0x9b, 0x4d, 0x29, 0x52, 0x7a, 0xe8, 0xde, 0xfd, 0xe5, 0xd9, 0x00, + 0x46, 0x79, 0xd7, 0xc1, 0xa6, 0x3b, 0x8c, 0x50, 0xdd, 0xda, 0xd8, 0xa8, 0x37, 0xa5, 0xe8, 0x10, + 0x02, 0x57, 0xd8, 0xe7, 0x60, 0x36, 0x8c, 0xb0, 0x59, 0x5f, 0x97, 0x62, 0x25, 0x74, 0xef, 0xfe, + 0x72, 0x21, 0x00, 0xbd, 0x69, 0x74, 0x4a, 0xe9, 0x8f, 0x7c, 0xff, 0xe2, 0xcc, 0x27, 0x7f, 0x60, + 0x31, 0x42, 0x66, 0x96, 0x0f, 0xe9, 0x08, 0xf4, 0x14, 0x9c, 0x6c, 0xd4, 0xaf, 0x6d, 0xd6, 0xd6, + 0xd4, 0x8d, 0xc6, 0xb5, 0x81, 0x6f, 0x9e, 0x4b, 0xc5, 0x7b, 0xf7, 0x97, 0xb3, 0x7c, 0x4a, 0xe3, + 0xa0, 0xb7, 0x95, 0xda, 0xad, 0xad, 0x66, 0x4d, 0x8a, 0x30, 0xe8, 0x6d, 0x1b, 0xdf, 0xb1, 0x5c, + 0xf6, 0xa2, 0xe6, 0x33, 0x70, 0x6a, 0x04, 0xb4, 0x37, 0xb1, 0xd9, 0x7b, 0xf7, 0x97, 0xf3, 0xdb, + 0x36, 0x66, 0xfb, 0x87, 0x62, 0xac, 0xc0, 0xc2, 0x30, 0xc6, 0xd6, 0xf6, 0x56, 0xa3, 0xbc, 0x2e, + 0x2d, 0x97, 0xa4, 0x7b, 0xf7, 0x97, 0x73, 0x42, 0x19, 0x12, 0x78, 0x7f, 0x66, 0xef, 0x56, 0xb4, + 0xf3, 0x0d, 0xa9, 0x50, 0x2e, 0x8f, 0xc5, 0x11, 0x3d, 0xcd, 0xd6, 0xba, 0xc7, 0x0d, 0x77, 0x26, + 0x9c, 0xc6, 0xca, 0x6f, 0x45, 0xa1, 0xe8, 0x39, 0xd3, 0xdb, 0xb4, 0x07, 0xf4, 0x5c, 0x30, 0x0f, + 0x93, 0x1d, 0x6b, 0xc6, 0x18, 0xb4, 0x48, 0xd3, 0xbc, 0x17, 0xd2, 0xc2, 0x29, 0xe3, 0xea, 0x62, + 0x79, 0x18, 0xaf, 0xc6, 0x21, 0x38, 0xaa, 0x87, 0x81, 0x5e, 0x86, 0x8c, 0xa7, 0x3c, 0xbc, 0x57, + 0xa7, 0xc6, 0x6b, 0x1b, 0x8e, 0xef, 0xe3, 0xa0, 0x97, 0xfc, 0xb0, 0x21, 0x3e, 0x2e, 0x10, 0xb9, + 0xc5, 0x00, 0x38, 0xb2, 0x80, 0x97, 0xeb, 0x7c, 0xdb, 0xf1, 0xd9, 0xd3, 0x17, 0x3b, 0x0e, 0x54, + 0x16, 0x49, 0x31, 0xaf, 0x24, 0xdd, 0xd5, 0x0e, 0x2a, 0x34, 0x98, 0x3a, 0x09, 0x29, 0xd2, 0xd8, + 0xe6, 0xdf, 0x84, 0xc7, 0x94, 0x64, 0x57, 0x3b, 0xb8, 0xa6, 0x39, 0x37, 0xe2, 0xe9, 0x98, 0x14, + 0x97, 0x7f, 0x24, 0x02, 0x85, 0xf0, 0x1c, 0xd1, 0x93, 0x80, 0x08, 0x86, 0xd6, 0xc6, 0x2a, 0x51, + 0x31, 0x94, 0x59, 0x82, 0x6e, 0xb1, 0xab, 0x1d, 0x94, 0xdb, 0x78, 0xb3, 0xdf, 0xa5, 0x03, 0x70, + 0xd0, 0x06, 0x48, 0x02, 0x58, 0xac, 0x13, 0x67, 0xe6, 0xa9, 0xe1, 0x37, 0x28, 0x39, 0x00, 0x33, + 0x54, 0x1f, 0x23, 0x86, 0xaa, 0xc0, 0xe8, 0x79, 0xa7, 0xe9, 0xa1, 0xa9, 0xc4, 0xc2, 0x53, 0x91, + 0x5f, 0x86, 0xe2, 0x00, 0x3f, 0x91, 0x0c, 0x79, 0x9e, 0x15, 0xa0, 0x27, 0x95, 0xcc, 0x3f, 0xce, + 0x28, 0x59, 0x16, 0xfd, 0xd3, 0x93, 0xdb, 0xd5, 0xf4, 0x2f, 0x7c, 0x7c, 0x29, 0x42, 0x13, 0xe6, + 0x4f, 0x42, 0x3e, 0xc4, 0x51, 0x91, 0xa9, 0x8b, 0xf8, 0x99, 0x3a, 0x1f, 0xf8, 0x75, 0xc8, 0x11, + 0x45, 0x89, 0x5b, 0x1c, 0xf6, 0x09, 0x28, 0x32, 0x45, 0x3e, 0xc8, 0x6b, 0xe6, 0x49, 0x6d, 0x08, + 0x86, 0xcb, 0xc2, 0xb5, 0x0a, 0xb3, 0x3d, 0x2b, 0xa0, 0xae, 0x69, 0x4e, 0xe5, 0x03, 0x9f, 0xfc, + 0xf4, 0x62, 0xe4, 0xdd, 0xd9, 0x88, 0xbf, 0xf5, 0x01, 0x38, 0x1d, 0x68, 0xd4, 0x76, 0x75, 0x23, + 0x94, 0x75, 0x28, 0x06, 0x84, 0x8c, 0x34, 0x4e, 0xca, 0x1e, 0x1c, 0x99, 0xc3, 0x38, 0x3a, 0x61, + 0x56, 0x3a, 0x5a, 0x23, 0x4c, 0x4e, 0x6c, 0x8c, 0xce, 0x51, 0xfe, 0xef, 0x34, 0xa4, 0x14, 0xfc, + 0xa1, 0x3e, 0x76, 0x5c, 0x74, 0x11, 0xe2, 0x58, 0xdf, 0xb7, 0x46, 0xa5, 0x84, 0xc8, 0xe4, 0x56, + 0x38, 0x5c, 0x4d, 0xdf, 0xb7, 0xae, 0xcf, 0x28, 0x14, 0x16, 0x5d, 0x82, 0xc4, 0x5e, 0xa7, 0xcf, + 0xf3, 0x14, 0x03, 0xca, 0x22, 0x88, 0x74, 0x95, 0x00, 0x5d, 0x9f, 0x51, 0x18, 0x34, 0xe9, 0x8a, + 0xbe, 0xf3, 0x1b, 0x3b, 0xba, 0xab, 0xba, 0xb9, 0x47, 0xbb, 0x22, 0xb0, 0xa8, 0x02, 0x60, 0x98, + 0x86, 0xab, 0xd2, 0x18, 0x9e, 0x7b, 0x82, 0x8f, 0x8e, 0xc7, 0x34, 0x5c, 0x1a, 0xf5, 0x5f, 0x9f, + 0x51, 0x32, 0x86, 0x28, 0x90, 0xe1, 0x7e, 0xa8, 0x8f, 0xed, 0x43, 0xee, 0x00, 0x8e, 0x1d, 0xee, + 0x07, 0x08, 0x10, 0x19, 0x2e, 0x85, 0x46, 0x35, 0xc8, 0xd2, 0x0f, 0x5c, 0xd9, 0xfe, 0xe5, 0x2f, + 0xcb, 0xca, 0xe3, 0x90, 0x2b, 0x04, 0x94, 0x6e, 0xe9, 0xeb, 0x33, 0x0a, 0xec, 0x7a, 0x25, 0xa2, + 0x24, 0xd9, 0xcb, 0x63, 0xee, 0x01, 0x7f, 0x4f, 0x73, 0x69, 0x1c, 0x0d, 0xfa, 0xfc, 0x58, 0xf3, + 0xe0, 0xfa, 0x8c, 0x92, 0xd2, 0xd9, 0x4f, 0x32, 0xff, 0x16, 0xee, 0x18, 0x77, 0xb0, 0x4d, 0xf0, + 0x33, 0x47, 0xcf, 0x7f, 0x8d, 0x41, 0x52, 0x0a, 0x99, 0x96, 0x28, 0x10, 0x45, 0x8b, 0xcd, 0x16, + 0x9f, 0x06, 0x0c, 0xeb, 0xe9, 0xd0, 0x3a, 0x9b, 0x2d, 0x31, 0x89, 0x34, 0xe6, 0xbf, 0xd1, 0x8b, + 0x9e, 0x87, 0x9a, 0x1d, 0x76, 0x0a, 0x43, 0x13, 0x60, 0xb9, 0x8a, 0x19, 0xe1, 0xa9, 0xa2, 0x4d, + 0x28, 0x74, 0x0c, 0xc7, 0x55, 0x1d, 0x53, 0xeb, 0x39, 0xfb, 0x96, 0xeb, 0xd0, 0xa0, 0x3f, 0x7b, + 0xf1, 0xf1, 0x71, 0x14, 0xd6, 0x0d, 0xc7, 0x6d, 0x08, 0xe0, 0xeb, 0x33, 0x4a, 0xbe, 0x13, 0xac, + 0x20, 0xf4, 0xac, 0xbd, 0x3d, 0x6c, 0x7b, 0x04, 0x69, 0x72, 0xe0, 0x08, 0x7a, 0x5b, 0x04, 0x5a, + 0xe0, 0x13, 0x7a, 0x56, 0xb0, 0x02, 0x7d, 0x25, 0xcc, 0x75, 0x2c, 0xad, 0xe5, 0x91, 0x53, 0xf5, + 0xfd, 0xbe, 0x79, 0x9b, 0x66, 0x12, 0xb2, 0x17, 0xcf, 0x8d, 0x1d, 0xa4, 0xa5, 0xb5, 0x04, 0x89, + 0x2a, 0x41, 0xb8, 0x3e, 0xa3, 0xcc, 0x76, 0x06, 0x2b, 0xd1, 0x07, 0x61, 0x5e, 0xeb, 0xf5, 0x3a, + 0x87, 0x83, 0xd4, 0x8b, 0x94, 0xfa, 0xf9, 0x71, 0xd4, 0xcb, 0x04, 0x67, 0x90, 0x3c, 0xd2, 0x86, + 0x6a, 0x51, 0x13, 0xa4, 0x9e, 0x8d, 0xe9, 0x37, 0x31, 0x3d, 0xee, 0xaa, 0xd0, 0x17, 0x83, 0xb2, + 0x17, 0xcf, 0x8c, 0xa3, 0xbd, 0xcd, 0xe0, 0x85, 0x67, 0x73, 0x7d, 0x46, 0x29, 0xf6, 0xc2, 0x55, + 0x8c, 0xaa, 0xa5, 0x63, 0xfa, 0xa0, 0x19, 0xa7, 0x3a, 0x3b, 0x89, 0x2a, 0x85, 0x0f, 0x53, 0x0d, + 0x55, 0x55, 0x52, 0xfc, 0x4e, 0x1b, 0x7f, 0xf0, 0xe5, 0x0c, 0x64, 0x03, 0x8a, 0x05, 0x2d, 0x40, + 0x8a, 0x9f, 0xf1, 0x8b, 0xbb, 0x70, 0xbc, 0x28, 0x17, 0x20, 0x17, 0x54, 0x26, 0xf2, 0x47, 0x23, + 0x1e, 0x26, 0xfd, 0x52, 0x7e, 0x21, 0x9c, 0x3a, 0xcc, 0xf8, 0x59, 0xc1, 0xc7, 0x84, 0x15, 0x11, + 0xed, 0xec, 0x34, 0x29, 0x47, 0x2b, 0xb9, 0x11, 0x43, 0x4b, 0x90, 0xed, 0x5d, 0xec, 0x79, 0x20, + 0x31, 0x0a, 0x02, 0xbd, 0x8b, 0x3d, 0x01, 0xf0, 0x28, 0xe4, 0xc8, 0x4c, 0xd5, 0xa0, 0xa3, 0x91, + 0x51, 0xb2, 0xa4, 0x8e, 0x83, 0xc8, 0xff, 0x3a, 0x0a, 0xd2, 0xa0, 0x02, 0xf2, 0x72, 0x8a, 0x91, + 0x63, 0xe7, 0x14, 0x4f, 0x0d, 0x66, 0x33, 0xfd, 0x04, 0xe6, 0x3a, 0x48, 0x7e, 0x1e, 0x8e, 0x19, + 0x82, 0xf1, 0x8e, 0xd3, 0x80, 0x87, 0xa7, 0x14, 0xf5, 0x01, 0x97, 0xef, 0x6a, 0xe8, 0xec, 0x45, + 0x3c, 0x64, 0x3f, 0xb8, 0xc4, 0x9e, 0xbf, 0xb0, 0xd3, 0x6b, 0x69, 0x2e, 0x16, 0x79, 0x91, 0xc0, + 0x31, 0xcc, 0x13, 0x50, 0xd4, 0x7a, 0x3d, 0xd5, 0x71, 0x35, 0x17, 0x73, 0xb3, 0x9e, 0x60, 0xe9, + 0x41, 0xad, 0xd7, 0x6b, 0x90, 0x5a, 0x66, 0xd6, 0x1f, 0x87, 0x02, 0xd1, 0xc9, 0x86, 0xd6, 0x51, + 0x79, 0x96, 0x20, 0xc9, 0xac, 0x3f, 0xaf, 0xbd, 0x4e, 0x2b, 0xe5, 0x96, 0xb7, 0xe2, 0x54, 0x1f, + 0x7b, 0x61, 0x56, 0x24, 0x10, 0x66, 0x21, 0xfe, 0x82, 0x01, 0xe3, 0x8f, 0x78, 0xf5, 0x61, 0x74, + 0x76, 0x77, 0x9e, 0x86, 0x64, 0x77, 0x58, 0xc2, 0x23, 0xad, 0xb0, 0x82, 0xfc, 0xe1, 0x28, 0xcc, + 0x0e, 0x69, 0xee, 0x91, 0x69, 0x6f, 0x3f, 0xbe, 0x8c, 0x1e, 0x2b, 0xbe, 0xbc, 0x19, 0x4e, 0xeb, + 0x06, 0x2c, 0xdf, 0xe9, 0x21, 0x26, 0x33, 0xbd, 0x49, 0x04, 0x9a, 0x13, 0x09, 0x64, 0x7e, 0xa9, + 0x98, 0xef, 0xc0, 0xfc, 0xee, 0xe1, 0x9b, 0x9a, 0xe9, 0x1a, 0x26, 0x56, 0x87, 0x56, 0x6d, 0xd8, + 0x94, 0x6e, 0x18, 0xce, 0x2e, 0xde, 0xd7, 0xee, 0x18, 0x96, 0x18, 0xd6, 0x9c, 0x87, 0xef, 0x27, + 0x77, 0x65, 0x05, 0x0a, 0x61, 0xd3, 0x83, 0x0a, 0x10, 0x75, 0x0f, 0xf8, 0xfc, 0xa3, 0xee, 0x01, + 0x7a, 0x86, 0xe7, 0x81, 0xa2, 0x34, 0x0f, 0x34, 0xdc, 0x11, 0xc7, 0xf3, 0x93, 0x40, 0xb2, 0xec, + 0xed, 0x06, 0xcf, 0x1c, 0x0d, 0x52, 0x95, 0xcf, 0x41, 0x71, 0xc0, 0xde, 0x8c, 0xcb, 0x0a, 0xca, + 0x45, 0xc8, 0x87, 0x8c, 0x8b, 0x7c, 0x02, 0xe6, 0x47, 0xd9, 0x0a, 0x79, 0xdf, 0xab, 0x0f, 0xe9, + 0x7c, 0x74, 0x09, 0xd2, 0x9e, 0xb1, 0x18, 0x91, 0x85, 0xa0, 0xb3, 0x10, 0xc0, 0x8a, 0x07, 0x1a, + 0x4a, 0x66, 0x47, 0x43, 0xc9, 0x6c, 0xf9, 0xab, 0x61, 0x61, 0x9c, 0x21, 0x18, 0x98, 0x46, 0xdc, + 0x93, 0xc2, 0x13, 0x90, 0xe4, 0xaf, 0x16, 0x46, 0xe9, 0xf1, 0x0d, 0x2f, 0x11, 0xe9, 0x64, 0x46, + 0x21, 0xc6, 0x4e, 0x75, 0x68, 0x41, 0x56, 0xe1, 0xd4, 0x58, 0x63, 0x30, 0xfe, 0x20, 0x88, 0x11, + 0xe2, 0x07, 0x41, 0xba, 0x18, 0x8e, 0x43, 0xe7, 0x2a, 0x2e, 0x3b, 0xb0, 0x92, 0xfc, 0xb1, 0x18, + 0x9c, 0x18, 0x6d, 0x12, 0xd0, 0x32, 0xe4, 0x88, 0xdf, 0xed, 0x86, 0x5d, 0x74, 0xe8, 0x6a, 0x07, + 0x4d, 0xee, 0x9f, 0xf3, 0x44, 0x7a, 0xd4, 0x4b, 0xa4, 0xa3, 0x1d, 0x98, 0xed, 0x58, 0xba, 0xd6, + 0x51, 0x03, 0x12, 0xcf, 0x85, 0xfd, 0xb1, 0x21, 0x66, 0xd7, 0xd8, 0x5b, 0xe6, 0xad, 0x21, 0xa1, + 0x2f, 0x52, 0x1a, 0xeb, 0x9e, 0xe4, 0xa3, 0x35, 0xc8, 0x76, 0x7d, 0x41, 0x3e, 0x86, 0xb0, 0x07, + 0xd1, 0x02, 0x4b, 0x92, 0x18, 0x79, 0xec, 0x93, 0x3c, 0xb6, 0x8a, 0x1e, 0x77, 0x82, 0x92, 0x1a, + 0x7b, 0x82, 0x32, 0xea, 0xb8, 0x22, 0x3d, 0xfa, 0xb8, 0xe2, 0x23, 0xc1, 0xa5, 0x09, 0x19, 0xd1, + 0xe1, 0x13, 0x0c, 0xd4, 0x80, 0x79, 0x8e, 0xdf, 0x0a, 0xf1, 0x3e, 0x3a, 0xad, 0xa2, 0x41, 0x02, + 0x7d, 0x3c, 0xdb, 0x63, 0x0f, 0xc6, 0x76, 0xa1, 0x4b, 0xe3, 0x01, 0x5d, 0xfa, 0xff, 0xd8, 0x52, + 0xfc, 0xbb, 0x0c, 0xa4, 0x15, 0xec, 0xf4, 0x88, 0xe1, 0x44, 0x15, 0xc8, 0xe0, 0x03, 0x1d, 0xf7, + 0x5c, 0xff, 0x98, 0x72, 0x54, 0x30, 0xc0, 0xa0, 0x6b, 0x02, 0x92, 0x78, 0xe2, 0x1e, 0x1a, 0x7a, + 0x8e, 0x07, 0x5b, 0xe3, 0xe3, 0x26, 0x8e, 0x1e, 0x8c, 0xb6, 0x2e, 0x8b, 0x68, 0x2b, 0x36, 0xd6, + 0xf9, 0x66, 0x58, 0x03, 0xe1, 0xd6, 0x73, 0x3c, 0xdc, 0x8a, 0x4f, 0xe8, 0x2c, 0x14, 0x6f, 0x55, + 0x43, 0xf1, 0x56, 0x72, 0xc2, 0x34, 0xc7, 0x04, 0x5c, 0x97, 0x45, 0xc0, 0x95, 0x9a, 0x30, 0xe2, + 0x81, 0x88, 0xeb, 0x6a, 0x38, 0xe2, 0x4a, 0x8f, 0x51, 0x20, 0x02, 0x7b, 0x6c, 0xc8, 0xf5, 0xbe, + 0x40, 0xc8, 0x95, 0x19, 0x1b, 0xef, 0x30, 0x22, 0x23, 0x62, 0xae, 0x6a, 0x28, 0xe6, 0x82, 0x09, + 0x3c, 0x18, 0x13, 0x74, 0x7d, 0x45, 0x30, 0xe8, 0xca, 0x8e, 0x8d, 0xdb, 0xf8, 0x7a, 0x8f, 0x8a, + 0xba, 0x5e, 0xf2, 0xa2, 0xae, 0xdc, 0xd8, 0xb0, 0x91, 0xcf, 0x61, 0x30, 0xec, 0xda, 0x1a, 0x0a, + 0xbb, 0xf2, 0xfc, 0xcf, 0x84, 0x8c, 0x23, 0x31, 0x21, 0xee, 0xda, 0x1a, 0x8a, 0xbb, 0x0a, 0x13, + 0x08, 0x4e, 0x08, 0xbc, 0xfe, 0xbf, 0xd1, 0x81, 0xd7, 0xf8, 0xd0, 0x88, 0x0f, 0x73, 0xba, 0xc8, + 0x4b, 0x1d, 0x13, 0x79, 0xb1, 0xe8, 0xe8, 0xc9, 0xb1, 0xe4, 0xa7, 0x0e, 0xbd, 0x76, 0x46, 0x84, + 0x5e, 0x2c, 0x48, 0x3a, 0x3b, 0x96, 0xf8, 0x14, 0xb1, 0xd7, 0xce, 0x88, 0xd8, 0x0b, 0x4d, 0x24, + 0x7b, 0x9c, 0xe0, 0x2b, 0x21, 0x25, 0xe5, 0x73, 0xc4, 0xf5, 0x1d, 0xd0, 0x53, 0xc4, 0x7f, 0xc0, + 0xb6, 0x6d, 0xd9, 0xe2, 0x66, 0x2d, 0x2d, 0xc8, 0x67, 0x89, 0x33, 0xee, 0xeb, 0xa4, 0x23, 0x02, + 0x35, 0xea, 0xa7, 0x05, 0xf4, 0x90, 0xfc, 0x0b, 0x11, 0x1f, 0x97, 0xfa, 0xb0, 0x41, 0x47, 0x3e, + 0xc3, 0x1d, 0xf9, 0x40, 0xf8, 0x16, 0x0d, 0x87, 0x6f, 0x4b, 0x90, 0x25, 0xfe, 0xd7, 0x40, 0x64, + 0xa6, 0xf5, 0xbc, 0xc8, 0x4c, 0x5c, 0x29, 0x60, 0x41, 0x1e, 0x37, 0x2b, 0xec, 0x24, 0xa7, 0xe8, + 0x5d, 0xaf, 0x60, 0x31, 0x05, 0x7a, 0x1a, 0xe6, 0x02, 0xb0, 0x9e, 0x5f, 0xc7, 0xc2, 0x14, 0xc9, + 0x83, 0x2e, 0x73, 0x07, 0xef, 0x5f, 0x44, 0x7c, 0x0e, 0xf9, 0x21, 0xdd, 0xa8, 0xe8, 0x2b, 0xf2, + 0x0e, 0x45, 0x5f, 0xd1, 0x07, 0x8e, 0xbe, 0x82, 0x7e, 0x6a, 0x2c, 0xec, 0xa7, 0xfe, 0xf7, 0x88, + 0xbf, 0x26, 0x5e, 0x2c, 0xa5, 0x5b, 0x2d, 0xcc, 0x3d, 0x47, 0xfa, 0x9b, 0x38, 0x15, 0x1d, 0xab, + 0xcd, 0xfd, 0x43, 0xf2, 0x93, 0x40, 0x79, 0x86, 0x23, 0xc3, 0xed, 0x82, 0xe7, 0x74, 0x26, 0x82, + 0xf7, 0x7f, 0xf9, 0xa5, 0xd8, 0xa4, 0x7f, 0x29, 0xd6, 0xfb, 0x76, 0x2d, 0x15, 0xf8, 0x76, 0x0d, + 0xbd, 0x08, 0x19, 0x9a, 0x11, 0x55, 0xad, 0x9e, 0xf8, 0xa3, 0x32, 0xa7, 0xc7, 0x5f, 0x88, 0x75, + 0xe8, 0x55, 0x3d, 0x76, 0x89, 0xd6, 0xf7, 0x18, 0x32, 0x21, 0x8f, 0xe1, 0x61, 0xc8, 0x90, 0xd1, + 0xb3, 0xc7, 0xd1, 0x81, 0x7f, 0xf8, 0x28, 0x2a, 0xe4, 0x0f, 0x02, 0x1a, 0x36, 0x12, 0xe8, 0x3a, + 0x24, 0xf1, 0x1d, 0xfa, 0x28, 0x1f, 0xbb, 0x68, 0x78, 0x62, 0xd8, 0x35, 0x25, 0xcd, 0x95, 0x05, + 0xc2, 0xe4, 0x3f, 0x7e, 0x7b, 0x49, 0x62, 0xd0, 0x4f, 0x79, 0xf7, 0xfc, 0x15, 0x8e, 0x2f, 0xff, + 0x5e, 0x94, 0x04, 0x30, 0x21, 0x03, 0x32, 0x92, 0xb7, 0xa3, 0x8e, 0x08, 0xa7, 0xe3, 0xf7, 0x22, + 0x40, 0x5b, 0x73, 0xd4, 0xbb, 0x9a, 0xe9, 0xe2, 0x16, 0x67, 0x7a, 0xa0, 0x06, 0x95, 0x20, 0x4d, + 0x4a, 0x7d, 0x07, 0xb7, 0x78, 0x18, 0xed, 0x95, 0x03, 0xf3, 0x4c, 0x7d, 0x71, 0xf3, 0x0c, 0x73, + 0x39, 0x3d, 0xc0, 0xe5, 0x40, 0x70, 0x91, 0x09, 0x06, 0x17, 0xec, 0x62, 0x30, 0xbf, 0x9f, 0x08, + 0x6c, 0x6c, 0xa2, 0x8c, 0x1e, 0x83, 0x7c, 0x17, 0x77, 0x7b, 0x96, 0xd5, 0x51, 0x99, 0xba, 0x61, + 0x7f, 0x05, 0x21, 0xc7, 0x2b, 0x6b, 0x54, 0xeb, 0x7c, 0x7d, 0xd4, 0xdf, 0x7f, 0x7e, 0x10, 0xf9, + 0x65, 0xc7, 0x60, 0xfa, 0x6c, 0xf4, 0xa0, 0x8b, 0x80, 0x1a, 0xc1, 0x5b, 0x23, 0x7d, 0xaa, 0x16, + 0x84, 0x40, 0x4f, 0xab, 0x3f, 0xfc, 0xdb, 0x25, 0xac, 0xda, 0x41, 0xaf, 0xc1, 0xc9, 0x01, 0xdd, + 0xe6, 0x91, 0x8e, 0x4e, 0xab, 0xe2, 0x1e, 0x0a, 0xab, 0x38, 0x41, 0xda, 0x67, 0x56, 0xec, 0x8b, + 0xdc, 0x75, 0x75, 0x28, 0x84, 0x3d, 0x9e, 0x91, 0xcb, 0x4f, 0xff, 0xea, 0x8e, 0xab, 0x19, 0xa6, + 0x1a, 0x4a, 0x07, 0xe5, 0x58, 0x25, 0x4f, 0x32, 0x6d, 0xc3, 0x43, 0x23, 0x3d, 0x1f, 0xf4, 0x02, + 0x64, 0x7c, 0xa7, 0x89, 0x71, 0xf5, 0x88, 0x74, 0x81, 0x0f, 0x2b, 0xff, 0x72, 0xc4, 0x27, 0x19, + 0x4e, 0x40, 0xd4, 0x20, 0xc9, 0xae, 0xbd, 0xf1, 0xcb, 0x34, 0x4f, 0x4f, 0xe7, 0x33, 0xad, 0xb0, + 0x3b, 0x71, 0x0a, 0x47, 0x96, 0x3f, 0x08, 0x49, 0x56, 0x83, 0xb2, 0x90, 0xf2, 0xdf, 0xcd, 0x05, + 0x48, 0x96, 0xab, 0xd5, 0xda, 0xb6, 0x78, 0x04, 0xb3, 0xb2, 0xa5, 0x34, 0xa5, 0x28, 0xa9, 0x56, + 0x6a, 0x37, 0x6a, 0xd5, 0xa6, 0x14, 0x43, 0xb3, 0x90, 0x67, 0xbf, 0xd5, 0xab, 0x5b, 0xca, 0x46, + 0xb9, 0x29, 0xc5, 0x03, 0x55, 0x8d, 0xda, 0xe6, 0x5a, 0x4d, 0x91, 0x12, 0xf2, 0xb3, 0x70, 0x6a, + 0xac, 0x97, 0xe5, 0x67, 0x17, 0x22, 0x81, 0xec, 0x82, 0xfc, 0xb1, 0x28, 0x94, 0xc6, 0xbb, 0x4e, + 0xe8, 0xc6, 0xc0, 0xc4, 0x2f, 0x1e, 0xc3, 0xef, 0x1a, 0x98, 0x3d, 0x7a, 0x1c, 0x0a, 0x36, 0xde, + 0xc3, 0xae, 0xbe, 0xcf, 0x5c, 0x39, 0x66, 0x32, 0xf3, 0x4a, 0x9e, 0xd7, 0x52, 0x24, 0x87, 0x81, + 0xbd, 0x81, 0x75, 0x57, 0x65, 0xba, 0xc8, 0xe1, 0x7f, 0x18, 0x34, 0xcf, 0x6a, 0x1b, 0xac, 0x52, + 0xfe, 0xea, 0x63, 0xf1, 0x32, 0x03, 0x09, 0xa5, 0xd6, 0x54, 0x5e, 0x93, 0x62, 0x08, 0x41, 0x81, + 0xfe, 0x54, 0x1b, 0x9b, 0xe5, 0xed, 0xc6, 0xf5, 0x2d, 0xc2, 0xcb, 0x39, 0x28, 0x0a, 0x5e, 0x8a, + 0xca, 0x84, 0xfc, 0x24, 0x9c, 0x1c, 0xe3, 0xf7, 0x8d, 0xb8, 0x87, 0xf8, 0x89, 0x48, 0x10, 0x3a, + 0x1c, 0xf3, 0x6f, 0x41, 0xd2, 0x71, 0x35, 0xb7, 0xef, 0x70, 0x26, 0xbe, 0x30, 0xad, 0x23, 0xb8, + 0x22, 0x7e, 0x34, 0x28, 0xba, 0xc2, 0xc9, 0xc8, 0x97, 0xa0, 0x10, 0x6e, 0x19, 0xcf, 0x03, 0x5f, + 0x88, 0xa2, 0xf2, 0x6b, 0x00, 0x81, 0x7c, 0xa4, 0x77, 0xa3, 0x2b, 0x12, 0xbc, 0xd1, 0x75, 0x09, + 0x12, 0x77, 0x2c, 0xa6, 0x33, 0x46, 0x6f, 0x9c, 0x5b, 0x96, 0x8b, 0x03, 0xc9, 0x07, 0x06, 0x2d, + 0x1b, 0x80, 0x86, 0x73, 0x42, 0x63, 0xba, 0x78, 0x5f, 0xb8, 0x8b, 0x47, 0xc7, 0x66, 0x97, 0x46, + 0x77, 0xf5, 0x26, 0x24, 0xa8, 0xb6, 0x19, 0xf9, 0x89, 0xcf, 0x57, 0x01, 0x68, 0xae, 0x6b, 0x1b, + 0xbb, 0x7d, 0xbf, 0x83, 0xa5, 0xd1, 0xda, 0xaa, 0x2c, 0xe0, 0x2a, 0x0f, 0x73, 0xb5, 0x35, 0xef, + 0xa3, 0x06, 0x54, 0x57, 0x80, 0xa0, 0xbc, 0x09, 0x85, 0x30, 0xee, 0xe8, 0x4f, 0x96, 0xfc, 0x4f, + 0xff, 0x33, 0xc2, 0x7d, 0xf2, 0x9c, 0x2f, 0xfe, 0x1c, 0x07, 0x2d, 0xc8, 0xf7, 0x22, 0x90, 0x6e, + 0x1e, 0x70, 0x39, 0x3e, 0xe2, 0x52, 0xa5, 0xff, 0xdd, 0x96, 0x97, 0x2c, 0x64, 0xf9, 0xd8, 0x98, + 0x97, 0xe5, 0xfd, 0x0a, 0x6f, 0xa7, 0xc6, 0xa7, 0x8d, 0x76, 0x45, 0xb6, 0x9b, 0x6b, 0xa7, 0x2b, + 0xd3, 0x7d, 0x23, 0x31, 0x0f, 0x89, 0xe0, 0xf7, 0x0d, 0xac, 0x20, 0xb7, 0x02, 0xd7, 0x12, 0x98, + 0xd9, 0x08, 0x7e, 0x4c, 0x11, 0x39, 0xf6, 0xc7, 0x14, 0x5e, 0x2f, 0xd1, 0x60, 0x2f, 0x77, 0x20, + 0x2d, 0x84, 0x02, 0xbd, 0x3f, 0x78, 0xf7, 0x44, 0x9c, 0xd1, 0x8c, 0x35, 0x9e, 0x9c, 0x7c, 0xe0, + 0xea, 0xc9, 0x79, 0x98, 0xe5, 0x57, 0xee, 0xfc, 0xb8, 0x82, 0xff, 0xc5, 0x80, 0x22, 0x6b, 0x58, + 0x17, 0x41, 0x85, 0xfc, 0x83, 0x11, 0x90, 0x06, 0xa5, 0xf2, 0x4b, 0x39, 0x00, 0xa2, 0x14, 0x89, + 0xf4, 0x07, 0x9e, 0xec, 0x66, 0x2b, 0x9f, 0x27, 0xb5, 0xfe, 0xa3, 0xdd, 0x1f, 0x8e, 0x42, 0x36, + 0x90, 0xd3, 0x43, 0xcf, 0x87, 0xae, 0x80, 0x2e, 0x1f, 0x95, 0xff, 0x0b, 0xdc, 0x01, 0x0d, 0x4d, + 0x2c, 0x7a, 0xfc, 0x89, 0xbd, 0xf3, 0x97, 0xf4, 0x47, 0x7f, 0xed, 0x93, 0x18, 0xf3, 0xb5, 0xcf, + 0xd7, 0x45, 0x20, 0xed, 0x99, 0xee, 0xe3, 0x66, 0xf3, 0x4f, 0x40, 0x92, 0x5b, 0x27, 0x96, 0xce, + 0xe7, 0xa5, 0x91, 0xb9, 0xd0, 0x12, 0xa4, 0xc5, 0xdf, 0x79, 0xe2, 0x81, 0xa8, 0x57, 0x3e, 0xff, + 0x12, 0x64, 0x03, 0x07, 0x2b, 0x44, 0x4f, 0x6c, 0xd6, 0x5e, 0x91, 0x66, 0x4a, 0xa9, 0x7b, 0xf7, + 0x97, 0x63, 0x9b, 0xf8, 0x2e, 0xd9, 0x61, 0x4a, 0xad, 0x7a, 0xbd, 0x56, 0xbd, 0x29, 0x45, 0x4a, + 0xd9, 0x7b, 0xf7, 0x97, 0x53, 0x0a, 0xa6, 0xe9, 0xab, 0xf3, 0x37, 0xa1, 0x38, 0xb0, 0x30, 0x61, + 0xfd, 0x8e, 0xa0, 0xb0, 0xb6, 0xb3, 0xbd, 0x5e, 0xaf, 0x96, 0x9b, 0x35, 0x95, 0x5d, 0xa7, 0x43, + 0x27, 0x61, 0x6e, 0xbd, 0x7e, 0xed, 0x7a, 0x53, 0xad, 0xae, 0xd7, 0x6b, 0x9b, 0x4d, 0xb5, 0xdc, + 0x6c, 0x96, 0xab, 0x37, 0xa5, 0xe8, 0xc5, 0x2f, 0x00, 0x14, 0xcb, 0x95, 0x6a, 0x9d, 0xd8, 0x67, + 0x83, 0xbf, 0xba, 0x5e, 0x85, 0x38, 0x4d, 0x05, 0x1c, 0x79, 0x55, 0xa4, 0x74, 0x74, 0x6e, 0x13, + 0x5d, 0x85, 0x04, 0xcd, 0x12, 0xa0, 0xa3, 0xef, 0x8e, 0x94, 0x26, 0x24, 0x3b, 0xc9, 0x60, 0xe8, + 0x76, 0x3a, 0xf2, 0x32, 0x49, 0xe9, 0xe8, 0xdc, 0x27, 0x52, 0x20, 0xe3, 0x47, 0x19, 0x93, 0x2f, + 0x57, 0x94, 0xa6, 0xd0, 0x8e, 0x68, 0x1d, 0x52, 0x22, 0x30, 0x9c, 0x74, 0xdd, 0xa3, 0x34, 0x31, + 0x39, 0x49, 0xd8, 0xc5, 0x02, 0xf8, 0xa3, 0xef, 0xae, 0x94, 0x26, 0x64, 0x5a, 0x51, 0xdd, 0xbb, + 0x84, 0x3f, 0xe1, 0x0a, 0x47, 0x69, 0x52, 0xb2, 0x91, 0x30, 0xcd, 0x4f, 0x8d, 0x4c, 0xbe, 0x91, + 0x53, 0x9a, 0x22, 0x89, 0x8c, 0x76, 0x00, 0x02, 0xe1, 0xfa, 0x14, 0x57, 0x6d, 0x4a, 0xd3, 0x24, + 0x87, 0xd1, 0x16, 0xa4, 0xbd, 0xe8, 0x69, 0xe2, 0xc5, 0x97, 0xd2, 0xe4, 0x2c, 0x2d, 0xfa, 0x20, + 0xe4, 0xc3, 0x51, 0xc3, 0x74, 0xd7, 0x59, 0x4a, 0x53, 0xa6, 0x5f, 0x09, 0xfd, 0x70, 0x08, 0x31, + 0xdd, 0xf5, 0x96, 0xd2, 0x94, 0xd9, 0x58, 0xf4, 0x06, 0xcc, 0x0e, 0xbb, 0xf8, 0xd3, 0xdf, 0x76, + 0x29, 0x1d, 0x23, 0x3f, 0x8b, 0xba, 0x80, 0x46, 0x84, 0x06, 0xc7, 0xb8, 0xfc, 0x52, 0x3a, 0x4e, + 0xba, 0x16, 0xb5, 0xa0, 0x38, 0xe8, 0x6f, 0x4f, 0x7b, 0x19, 0xa6, 0x34, 0x75, 0xea, 0x96, 0xf5, + 0x12, 0xf6, 0xd3, 0xa7, 0xbd, 0x1c, 0x53, 0x9a, 0x3a, 0x93, 0x5b, 0x29, 0x8f, 0xbd, 0xdf, 0x78, + 0xe6, 0xc8, 0xfb, 0x8d, 0xfe, 0x8d, 0x45, 0xef, 0x4e, 0xe3, 0x67, 0x5e, 0x82, 0xf7, 0xf0, 0xc7, + 0x04, 0x1c, 0x57, 0xbb, 0x6d, 0x98, 0x6d, 0xef, 0x75, 0x08, 0x5e, 0xe6, 0x97, 0x1b, 0x4f, 0xf0, + 0x07, 0x0b, 0x44, 0xed, 0x84, 0x37, 0x22, 0xc6, 0xbe, 0x7b, 0x35, 0xe9, 0x12, 0xf2, 0xe4, 0xab, + 0x8b, 0x47, 0xbc, 0x3f, 0x31, 0xe1, 0x95, 0x8b, 0x11, 0xef, 0x53, 0x4c, 0xb8, 0x84, 0x79, 0xd4, + 0x7d, 0x4f, 0xf9, 0xdb, 0x22, 0x50, 0xb8, 0x6e, 0x38, 0xae, 0x65, 0x1b, 0xba, 0xd6, 0xa1, 0x16, + 0xe3, 0xca, 0xb4, 0x1f, 0x79, 0x54, 0x32, 0xc4, 0x19, 0xe1, 0x8f, 0x5a, 0xf0, 0x8b, 0x21, 0x6b, + 0x90, 0xbc, 0xa3, 0x75, 0xd8, 0x27, 0x16, 0xc1, 0xe7, 0x67, 0x06, 0x79, 0x1e, 0xf0, 0x92, 0x82, + 0x54, 0x18, 0xae, 0xfc, 0x63, 0xf4, 0x12, 0x77, 0xb7, 0x6b, 0x38, 0xec, 0x2f, 0xb1, 0xbb, 0xd8, + 0x41, 0xdb, 0x10, 0xb7, 0x35, 0x97, 0x07, 0x35, 0x95, 0xf7, 0xf2, 0xa7, 0x28, 0x9e, 0x98, 0xfc, + 0xa0, 0xc4, 0xca, 0xf0, 0x6b, 0x15, 0x94, 0x12, 0x7a, 0x05, 0xd2, 0x5d, 0xed, 0x40, 0xa5, 0x54, + 0xa3, 0xef, 0x00, 0xd5, 0x54, 0x57, 0x3b, 0x20, 0x63, 0x25, 0x3b, 0x88, 0x10, 0xd6, 0xf7, 0x35, + 0xb3, 0x8d, 0x19, 0xfd, 0xd8, 0x3b, 0x40, 0x3f, 0xdf, 0xd5, 0x0e, 0xaa, 0x94, 0x26, 0xe9, 0x65, + 0x35, 0xfd, 0xb1, 0x8f, 0x2f, 0xcd, 0xd0, 0xbb, 0xc8, 0xbf, 0x16, 0xe1, 0xf1, 0x2b, 0x65, 0x17, + 0xd2, 0x40, 0xd2, 0xbd, 0x12, 0xed, 0x5e, 0xe4, 0xf2, 0xcf, 0x8c, 0x5b, 0x8d, 0x01, 0x66, 0x57, + 0xf2, 0x64, 0xa0, 0x9f, 0x7a, 0x7b, 0x29, 0xc2, 0xd6, 0xa5, 0xa8, 0x0f, 0x2c, 0xc6, 0x0d, 0xc8, + 0xb2, 0x14, 0x9a, 0x4a, 0xfd, 0xd6, 0xe8, 0x44, 0xbf, 0x35, 0x2f, 0xfc, 0x56, 0x46, 0x10, 0x18, + 0x36, 0x69, 0x0f, 0xcc, 0xe3, 0xc7, 0x22, 0x90, 0x5d, 0x0b, 0x3c, 0x33, 0xb5, 0x00, 0xa9, 0xae, + 0x65, 0x1a, 0xb7, 0xb1, 0xed, 0x1d, 0xc8, 0xb0, 0x22, 0xf1, 0x2f, 0xd9, 0x5f, 0x2b, 0x72, 0x0f, + 0xc5, 0x13, 0x0c, 0xa2, 0x4c, 0xb0, 0xee, 0xe2, 0x5d, 0xc7, 0x10, 0x5c, 0x57, 0x44, 0x11, 0x9d, + 0x03, 0xc9, 0xc1, 0x7a, 0xdf, 0x36, 0xdc, 0x43, 0x55, 0xb7, 0x4c, 0x57, 0xd3, 0x5d, 0x9e, 0x36, + 0x2d, 0x8a, 0xfa, 0x2a, 0xab, 0x26, 0x44, 0x5a, 0xd8, 0xd5, 0x8c, 0x0e, 0xbb, 0xef, 0x95, 0x51, + 0x44, 0x31, 0x30, 0xdc, 0x9f, 0xc8, 0x04, 0xe3, 0xc2, 0x2a, 0x48, 0x56, 0x0f, 0xdb, 0xa1, 0xef, + 0xdd, 0x98, 0xac, 0x2e, 0xfc, 0xf6, 0xcf, 0x3e, 0x3d, 0xcf, 0x19, 0xcf, 0x4f, 0xdf, 0xd9, 0xcb, + 0xca, 0x4a, 0x51, 0x60, 0x88, 0x0f, 0xe1, 0x5e, 0x0b, 0x1d, 0xc3, 0xf4, 0x77, 0xfd, 0xef, 0xed, + 0xe7, 0x87, 0x98, 0x5b, 0x36, 0x0f, 0x2b, 0x0b, 0xbf, 0xe9, 0x93, 0xf6, 0xe3, 0xc6, 0x9b, 0xf8, + 0x30, 0x78, 0x26, 0x43, 0xc9, 0x10, 0xf7, 0xfd, 0x0d, 0xcd, 0xe8, 0x88, 0x3f, 0xee, 0xa6, 0xf0, + 0x12, 0x5a, 0xf5, 0x72, 0x30, 0x71, 0x1a, 0x0b, 0xc9, 0xe3, 0x64, 0xa4, 0x62, 0x99, 0xad, 0x70, + 0xba, 0x05, 0x35, 0x21, 0xe9, 0x5a, 0xb7, 0xb1, 0xc9, 0x99, 0x74, 0x2c, 0xf9, 0x1e, 0x7e, 0x7c, + 0x86, 0xd3, 0x42, 0x6d, 0x90, 0x5a, 0xb8, 0x83, 0xdb, 0xec, 0x6b, 0xad, 0x7d, 0xcd, 0xc6, 0xec, + 0x0b, 0xce, 0x2f, 0x76, 0xff, 0x14, 0x3d, 0xaa, 0x0d, 0x4a, 0x14, 0x6d, 0x87, 0x1f, 0x3a, 0x4b, + 0xf1, 0x23, 0xf9, 0x31, 0xf3, 0x0f, 0x48, 0x66, 0x50, 0x67, 0x85, 0x1e, 0x46, 0x3b, 0x07, 0x52, + 0xdf, 0xdc, 0xb5, 0x4c, 0xfa, 0xf7, 0x92, 0x78, 0x74, 0x95, 0x66, 0xc7, 0x76, 0x5e, 0x3d, 0x3f, + 0xb6, 0xdb, 0x86, 0x82, 0x0f, 0x4a, 0x77, 0x51, 0xe6, 0xb8, 0xbb, 0x28, 0xef, 0x11, 0x20, 0x20, + 0x68, 0x03, 0xc0, 0xdf, 0xa7, 0xde, 0xd1, 0xfe, 0xc4, 0x1d, 0x1f, 0x9c, 0x4c, 0x80, 0x00, 0x32, + 0x61, 0xae, 0x6b, 0x98, 0xaa, 0x83, 0x3b, 0x7b, 0x2a, 0xe7, 0x1c, 0xa1, 0x4b, 0xcf, 0x34, 0x2a, + 0xef, 0xff, 0x62, 0x56, 0x7a, 0x21, 0xa2, 0xcc, 0x76, 0x0d, 0xb3, 0x81, 0x3b, 0x7b, 0x6b, 0x1e, + 0x61, 0xf4, 0x5e, 0x38, 0xed, 0x33, 0xc4, 0x32, 0xd5, 0x7d, 0xab, 0xd3, 0x52, 0x6d, 0xbc, 0xa7, + 0xea, 0xf4, 0xf5, 0xa3, 0x1c, 0x65, 0xe3, 0x49, 0x0f, 0x64, 0xcb, 0xbc, 0x6e, 0x75, 0x5a, 0x0a, + 0xde, 0xab, 0x92, 0x66, 0xf4, 0x18, 0xf8, 0xdc, 0x50, 0x8d, 0x96, 0xb3, 0x90, 0x5f, 0x8e, 0x9d, + 0x8d, 0x2b, 0x39, 0xaf, 0xb2, 0xde, 0x72, 0xd0, 0xd7, 0x45, 0xe0, 0x21, 0xff, 0x7c, 0x81, 0x34, + 0x08, 0xf9, 0x2a, 0xd0, 0x59, 0x6d, 0x1e, 0x4f, 0xbe, 0xfe, 0xf2, 0xed, 0xa5, 0x87, 0x0f, 0xb5, + 0x6e, 0x67, 0x55, 0x1e, 0x49, 0x54, 0x56, 0xe6, 0xbc, 0x7a, 0xba, 0x79, 0x98, 0xd4, 0xdd, 0x86, + 0x7c, 0xc7, 0xf8, 0x50, 0xdf, 0xf0, 0xfa, 0x2e, 0xd2, 0xbe, 0xaf, 0x1e, 0xbb, 0xef, 0x79, 0xd6, + 0x77, 0x88, 0x98, 0xac, 0xe4, 0x58, 0x99, 0x75, 0xb6, 0x9a, 0xfb, 0xc8, 0xc7, 0x97, 0x66, 0xb8, + 0xc6, 0x9a, 0x91, 0xb7, 0xe9, 0x0b, 0x25, 0x5c, 0xd9, 0x60, 0x07, 0x5d, 0x86, 0x8c, 0x26, 0x0a, + 0xec, 0xdb, 0x98, 0x23, 0x94, 0x95, 0x0f, 0xca, 0x74, 0xe0, 0x5b, 0xbf, 0xb7, 0x1c, 0x91, 0x7f, + 0x20, 0x02, 0xc9, 0xb5, 0x5b, 0xdb, 0x9a, 0x61, 0xa3, 0x1a, 0xcc, 0xfa, 0xdb, 0x76, 0x5a, 0x0d, + 0xe8, 0xef, 0x74, 0xa1, 0x02, 0x6b, 0xe3, 0x3e, 0x1c, 0x3e, 0x92, 0xcc, 0xe0, 0x27, 0xc5, 0x03, + 0x13, 0xbf, 0x01, 0x29, 0x36, 0x4a, 0x07, 0xbd, 0x0c, 0x89, 0x1e, 0xf9, 0xc1, 0x0f, 0x40, 0x16, + 0xc7, 0x6e, 0x77, 0x0a, 0x1f, 0xdc, 0x1c, 0x0c, 0x4f, 0xfe, 0xeb, 0x08, 0xc0, 0xda, 0xad, 0x5b, + 0x4d, 0xdb, 0xe8, 0x75, 0xb0, 0xfb, 0x4e, 0x4d, 0x7b, 0x3d, 0x28, 0x99, 0x8e, 0xad, 0x4f, 0x3d, + 0x75, 0x5f, 0xc6, 0x1a, 0xb6, 0x3e, 0x92, 0x5a, 0xcb, 0x71, 0x3d, 0x6a, 0xb1, 0xa9, 0xa9, 0xad, + 0x39, 0xee, 0x68, 0x5e, 0xbe, 0x0a, 0x59, 0x7f, 0xfa, 0x0e, 0xaa, 0x43, 0xda, 0xe5, 0xbf, 0x39, + 0x4b, 0xe5, 0xf1, 0x2c, 0x15, 0x68, 0x41, 0xb6, 0x7a, 0xe8, 0xf2, 0x0f, 0x46, 0x01, 0x02, 0x0a, + 0xe1, 0x6f, 0x94, 0x40, 0x11, 0x5b, 0xc7, 0xf7, 0xeb, 0x3b, 0xe1, 0xcb, 0x71, 0x5a, 0x34, 0x7d, + 0x19, 0xd2, 0x1d, 0xfc, 0x26, 0x77, 0x3e, 0xa4, 0x39, 0x06, 0x56, 0xe0, 0x23, 0x51, 0x98, 0xdb, + 0x11, 0x7a, 0xed, 0x6f, 0x2c, 0xc3, 0x76, 0x20, 0x85, 0x4d, 0xd7, 0x36, 0xb0, 0x38, 0x1c, 0x7d, + 0x66, 0x9c, 0x5c, 0x8c, 0x98, 0x0b, 0xfd, 0x7b, 0xe2, 0x41, 0x29, 0x11, 0xb4, 0x06, 0x58, 0xf1, + 0xab, 0x31, 0x58, 0x18, 0x87, 0x8e, 0xce, 0x40, 0x51, 0xb7, 0x31, 0xad, 0x50, 0x43, 0x07, 0x08, + 0x05, 0x51, 0xcd, 0x6d, 0xb1, 0x02, 0xc4, 0xc3, 0x25, 0x42, 0x48, 0x40, 0x1f, 0xcc, 0xa5, 0x2d, + 0xf8, 0x14, 0xa8, 0x35, 0xc6, 0x50, 0x14, 0x5f, 0x04, 0xec, 0x6a, 0x1d, 0xcd, 0xd4, 0x1f, 0x24, + 0x08, 0x18, 0x76, 0x92, 0xc4, 0x67, 0x06, 0x15, 0x46, 0x13, 0xdd, 0x82, 0x94, 0x20, 0x1f, 0x7f, + 0x07, 0xc8, 0x0b, 0x62, 0xe8, 0x51, 0xc8, 0x05, 0xed, 0x29, 0x75, 0xf0, 0xe2, 0x4a, 0x36, 0x60, + 0x4e, 0x27, 0x19, 0xec, 0xe4, 0x91, 0x06, 0x3b, 0xe0, 0x47, 0xff, 0xb3, 0x18, 0xcc, 0x2a, 0xb8, + 0xf5, 0x65, 0xb8, 0x78, 0x5f, 0x09, 0xc0, 0xf4, 0x00, 0xd1, 0xd1, 0x0f, 0xb0, 0x7e, 0xc3, 0x7a, + 0x25, 0xc3, 0xe8, 0xad, 0x39, 0xee, 0x97, 0x72, 0x05, 0xff, 0x6d, 0x14, 0x72, 0xc1, 0x15, 0xfc, + 0x32, 0x30, 0x8a, 0x68, 0xd3, 0x57, 0x6f, 0xec, 0xee, 0xfe, 0xb9, 0x71, 0xea, 0x6d, 0x48, 0xb6, + 0xa7, 0xd0, 0x6b, 0xbf, 0x96, 0x84, 0x24, 0xbf, 0x4c, 0xb7, 0x35, 0x14, 0x28, 0x44, 0x26, 0x7d, + 0x41, 0x9d, 0x17, 0x5f, 0x50, 0x8f, 0x8c, 0x13, 0x1e, 0x87, 0x42, 0x57, 0x3b, 0x50, 0x43, 0x37, + 0xf4, 0x22, 0x67, 0xf3, 0x34, 0xbf, 0xe0, 0xdf, 0x27, 0x47, 0x4b, 0x90, 0x25, 0x60, 0xbe, 0x0e, + 0x27, 0x30, 0xd0, 0xd5, 0x0e, 0x6a, 0xac, 0x06, 0x3d, 0x0d, 0x68, 0xdf, 0x4b, 0x1d, 0xa9, 0x3e, + 0x33, 0x08, 0xdc, 0xac, 0xdf, 0x22, 0xc0, 0x1f, 0x01, 0xa0, 0xce, 0x31, 0x7b, 0xe3, 0x94, 0x3f, + 0x3c, 0x4b, 0x6a, 0xd6, 0xe8, 0x3b, 0xa7, 0x5f, 0xc3, 0xc2, 0x8d, 0x81, 0xcc, 0x05, 0x0f, 0xfc, + 0xd6, 0x8f, 0xed, 0x1c, 0x97, 0x98, 0x73, 0x3c, 0x82, 0xa4, 0x4c, 0x83, 0x8f, 0x70, 0xc6, 0x63, + 0x54, 0x64, 0xb0, 0xa7, 0xe9, 0xae, 0x65, 0xd3, 0xa8, 0xf0, 0x9d, 0x8b, 0x0c, 0x18, 0xd1, 0xc1, + 0xc8, 0xe0, 0x2a, 0xad, 0x45, 0xdf, 0x1c, 0x81, 0x53, 0xed, 0x8e, 0xb5, 0xab, 0x75, 0x54, 0xe1, + 0xd4, 0x33, 0x51, 0x52, 0x75, 0xad, 0xc7, 0x6e, 0x50, 0x55, 0x94, 0x63, 0x0f, 0x64, 0x99, 0x0d, + 0x64, 0x2c, 0x61, 0x59, 0x39, 0xc1, 0xda, 0xd6, 0x59, 0xe0, 0xc0, 0x5a, 0xaa, 0x5a, 0x0f, 0x7d, + 0x7b, 0x04, 0x1e, 0xf6, 0xc7, 0x3f, 0x62, 0x48, 0xf4, 0x6a, 0x5c, 0x65, 0xe7, 0xd8, 0x43, 0x7a, + 0x6c, 0x90, 0x37, 0xa3, 0x46, 0x75, 0xca, 0x6b, 0x1e, 0x1c, 0xd8, 0xea, 0x59, 0xa1, 0x79, 0xee, + 0xfd, 0xd1, 0x4f, 0x9e, 0x3f, 0x1d, 0xe8, 0xe4, 0xc0, 0xcb, 0x00, 0xb3, 0xcd, 0x23, 0xff, 0x78, + 0x04, 0x90, 0xef, 0x16, 0x78, 0xdf, 0x3b, 0x6c, 0xd0, 0x5b, 0xf0, 0x22, 0xa4, 0x8d, 0x1c, 0x1d, + 0x2a, 0xfb, 0xf8, 0xa1, 0x50, 0x39, 0xa0, 0xee, 0xde, 0xef, 0x1b, 0x61, 0xf1, 0xba, 0xc1, 0x88, + 0xb7, 0x88, 0x57, 0xaa, 0x96, 0x11, 0x22, 0x21, 0x90, 0x3c, 0x4d, 0x3a, 0x23, 0xbf, 0x1d, 0x81, + 0x53, 0x43, 0xfa, 0xc2, 0x1b, 0xb6, 0x0e, 0xc8, 0x0e, 0x34, 0xd2, 0x3d, 0x27, 0xee, 0x10, 0x3c, + 0x98, 0xfa, 0x99, 0xb5, 0x87, 0x0c, 0xef, 0xbb, 0xe4, 0x51, 0xf0, 0x57, 0x89, 0x7f, 0x23, 0x02, + 0xf3, 0xc1, 0x11, 0x79, 0x73, 0x6b, 0x40, 0x2e, 0x38, 0x16, 0x3e, 0xab, 0xf7, 0x4c, 0x33, 0xab, + 0xe0, 0x84, 0x42, 0x44, 0xc8, 0x5c, 0x84, 0x5e, 0x62, 0xf9, 0xe8, 0x67, 0xa7, 0xe6, 0x92, 0x77, + 0xd6, 0x36, 0x4a, 0x59, 0xc7, 0xe9, 0x62, 0x7d, 0x4b, 0x14, 0xe2, 0xdb, 0x96, 0xd5, 0x21, 0xda, + 0x63, 0xd6, 0xb4, 0x5c, 0xba, 0xc5, 0x71, 0x4b, 0xe5, 0x39, 0x31, 0x66, 0xef, 0x6e, 0x1d, 0x8f, + 0x7b, 0x7f, 0xfc, 0xf6, 0xd2, 0x30, 0xa9, 0x51, 0xcf, 0x48, 0x17, 0x4d, 0xcb, 0xad, 0x50, 0xa0, + 0x26, 0x4b, 0x9b, 0xdd, 0x85, 0x7c, 0xb8, 0xff, 0xe8, 0xb1, 0x15, 0x06, 0xeb, 0x3f, 0x3f, 0xb1, + 0xef, 0xdc, 0x6e, 0xa0, 0x63, 0xf6, 0x98, 0xeb, 0x9f, 0x93, 0xc5, 0x7d, 0x0d, 0xa4, 0x5b, 0x83, + 0xb7, 0x2f, 0x6b, 0x90, 0x3a, 0xee, 0x45, 0xce, 0x20, 0xc7, 0x39, 0xae, 0xfc, 0x0d, 0x11, 0x98, + 0xa3, 0xfd, 0x19, 0x6f, 0x62, 0x9a, 0xdb, 0x50, 0xb0, 0x6e, 0xd9, 0x2d, 0x54, 0x80, 0x28, 0x7f, + 0x81, 0x29, 0xae, 0x44, 0x8d, 0x16, 0x9a, 0x87, 0x84, 0x75, 0xd7, 0xe4, 0xd7, 0x63, 0x32, 0x0a, + 0x2b, 0x50, 0x93, 0x67, 0xb5, 0xfa, 0x1d, 0xac, 0x6a, 0x3a, 0xf3, 0x6d, 0x58, 0x6a, 0x38, 0xcf, + 0x6a, 0xcb, 0xac, 0x12, 0x3d, 0x1c, 0xbc, 0xdf, 0xc1, 0x32, 0xc3, 0x7e, 0x05, 0x17, 0xe0, 0x0a, + 0xc8, 0xdb, 0x98, 0x19, 0xd3, 0xe0, 0x70, 0xca, 0x7d, 0x77, 0xdf, 0xb2, 0x8d, 0x37, 0xa9, 0x00, + 0xd1, 0xbb, 0xaf, 0x03, 0x99, 0x95, 0x40, 0xfe, 0xe4, 0xfc, 0xcf, 0x45, 0x00, 0xfc, 0x74, 0x2a, + 0x7a, 0x0a, 0x4e, 0x56, 0xb6, 0x36, 0xd7, 0xd4, 0x46, 0xb3, 0xdc, 0xdc, 0x69, 0x84, 0xff, 0x0e, + 0x82, 0x78, 0x3c, 0xc8, 0xe9, 0x61, 0xdd, 0xd8, 0x33, 0x70, 0x0b, 0x3d, 0x01, 0xf3, 0x61, 0x68, + 0x52, 0xaa, 0xad, 0x49, 0x91, 0x52, 0xee, 0xde, 0xfd, 0xe5, 0x34, 0x8b, 0x86, 0x70, 0x0b, 0x9d, + 0x85, 0x87, 0x86, 0xe1, 0xea, 0x9b, 0xd7, 0xa4, 0x68, 0x29, 0x7f, 0xef, 0xfe, 0x72, 0xc6, 0x0b, + 0x9b, 0x90, 0x0c, 0x28, 0x08, 0xc9, 0xe9, 0xc5, 0x4a, 0x70, 0xef, 0xfe, 0x72, 0x92, 0xc9, 0x58, + 0x29, 0xfe, 0x91, 0xef, 0x5f, 0x9c, 0x39, 0xff, 0x55, 0x00, 0x75, 0x73, 0xcf, 0xd6, 0xe8, 0x1f, + 0x03, 0x47, 0x25, 0x38, 0x51, 0xdf, 0xbc, 0xaa, 0x94, 0xab, 0xcd, 0xfa, 0xd6, 0xe6, 0xc0, 0x9f, + 0x6f, 0x08, 0xb7, 0xad, 0x6d, 0xed, 0x54, 0xd6, 0x6b, 0x6a, 0xa3, 0x7e, 0x6d, 0x93, 0x5d, 0xc9, + 0x08, 0xb5, 0xbd, 0xb2, 0xd9, 0xac, 0x6f, 0xd4, 0xa4, 0xe8, 0xf9, 0xdf, 0x88, 0xc0, 0xc9, 0x10, + 0x57, 0xd7, 0x2d, 0xfd, 0x36, 0x67, 0xd2, 0x79, 0x78, 0xa2, 0xb9, 0x75, 0xb3, 0xb6, 0x59, 0x7f, + 0xbd, 0xa6, 0x36, 0xae, 0x97, 0x95, 0x9a, 0x4a, 0x9f, 0x6d, 0x1a, 0xc5, 0x33, 0xf4, 0x38, 0x3c, + 0x7a, 0x04, 0x2c, 0xf9, 0x4d, 0xf8, 0x85, 0xce, 0xc0, 0x63, 0x47, 0x92, 0xe4, 0x80, 0x51, 0xf4, + 0x14, 0x9c, 0x9d, 0x40, 0x4f, 0xad, 0xbd, 0xba, 0x5d, 0xa7, 0x7f, 0xa1, 0x22, 0xc6, 0x58, 0x55, + 0xb9, 0x3a, 0xf6, 0x80, 0xf3, 0xa9, 0x23, 0x77, 0xa2, 0x6f, 0xc2, 0x42, 0xa7, 0x9c, 0xff, 0x27, + 0x00, 0x00, 0xff, 0xff, 0x7b, 0xb1, 0xfe, 0xb4, 0xde, 0x9e, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -2299,6 +2508,15 @@ func (this *Params) Equal(that interface{}) bool { if !this.MinCommissionRate.Equal(that1.MinCommissionRate) { return false } + if !this.ValidatorBondFactor.Equal(that1.ValidatorBondFactor) { + return false + } + if !this.GlobalLiquidStakingCap.Equal(that1.GlobalLiquidStakingCap) { + return false + } + if !this.ValidatorLiquidStakingCap.Equal(that1.ValidatorLiquidStakingCap) { + return false + } return true } func (this *RedelegationEntryResponse) Equal(that interface{}) bool { @@ -2355,6 +2573,39 @@ func (this *Pool) Equal(that interface{}) bool { } return true } +func (this *TokenizeShareRecord) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*TokenizeShareRecord) + if !ok { + that2, ok := that.(TokenizeShareRecord) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Id != that1.Id { + return false + } + if this.Owner != that1.Owner { + return false + } + if this.ModuleAccount != that1.ModuleAccount { + return false + } + if this.Validator != that1.Validator { + return false + } + return true +} func (m *HistoricalInfo) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2574,6 +2825,26 @@ func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + { + size := m.LiquidShares.Size() + i -= size + if _, err := m.LiquidShares.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x7a + { + size := m.ValidatorBondShares.Size() + i -= size + if _, err := m.ValidatorBondShares.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x72 if len(m.UnbondingIds) > 0 { dAtA5 := make([]byte, len(m.UnbondingIds)*10) var j4 int @@ -2904,6 +3175,16 @@ func (m *Delegation) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ValidatorBond { + i-- + if m.ValidatorBond { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } { size := m.Shares.Size() i -= size @@ -3192,6 +3473,36 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + { + size := m.ValidatorLiquidStakingCap.Size() + i -= size + if _, err := m.ValidatorLiquidStakingCap.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + { + size := m.GlobalLiquidStakingCap.Size() + i -= size + if _, err := m.GlobalLiquidStakingCap.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + { + size := m.ValidatorBondFactor.Size() + i -= size + if _, err := m.ValidatorBondFactor.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a { size := m.MinCommissionRate.Size() i -= size @@ -3448,6 +3759,87 @@ func (m *ValidatorUpdates) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *TokenizeShareRecord) 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 *TokenizeShareRecord) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenizeShareRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Validator) > 0 { + i -= len(m.Validator) + copy(dAtA[i:], m.Validator) + i = encodeVarintStaking(dAtA, i, uint64(len(m.Validator))) + i-- + dAtA[i] = 0x22 + } + if len(m.ModuleAccount) > 0 { + i -= len(m.ModuleAccount) + copy(dAtA[i:], m.ModuleAccount) + i = encodeVarintStaking(dAtA, i, uint64(len(m.ModuleAccount))) + i-- + dAtA[i] = 0x1a + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintStaking(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x12 + } + if m.Id != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.Id)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *PendingTokenizeShareAuthorizations) 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 *PendingTokenizeShareAuthorizations) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PendingTokenizeShareAuthorizations) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Addresses) > 0 { + for iNdEx := len(m.Addresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Addresses[iNdEx]) + copy(dAtA[i:], m.Addresses[iNdEx]) + i = encodeVarintStaking(dAtA, i, uint64(len(m.Addresses[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func encodeVarintStaking(dAtA []byte, offset int, v uint64) int { offset -= sovStaking(v) base := offset @@ -3578,6 +3970,10 @@ func (m *Validator) Size() (n int) { } n += 1 + sovStaking(uint64(l)) + l } + l = m.ValidatorBondShares.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.LiquidShares.Size() + n += 1 + l + sovStaking(uint64(l)) return n } @@ -3680,6 +4076,9 @@ func (m *Delegation) Size() (n int) { } l = m.Shares.Size() n += 1 + l + sovStaking(uint64(l)) + if m.ValidatorBond { + n += 2 + } return n } @@ -3804,6 +4203,12 @@ func (m *Params) Size() (n int) { } l = m.MinCommissionRate.Size() n += 1 + l + sovStaking(uint64(l)) + l = m.ValidatorBondFactor.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.GlobalLiquidStakingCap.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.ValidatorLiquidStakingCap.Size() + n += 1 + l + sovStaking(uint64(l)) return n } @@ -3878,33 +4283,72 @@ func (m *ValidatorUpdates) Size() (n int) { return n } -func sovStaking(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozStaking(x uint64) (n int) { - return sovStaking(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *ValAddresses) String() string { - if this == nil { - return "nil" +func (m *TokenizeShareRecord) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ValAddresses{`, - `Addresses:` + fmt.Sprintf("%v", this.Addresses) + `,`, - `}`, - }, "") - return s -} -func valueToStringStaking(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" + var l int + _ = l + if m.Id != 0 { + n += 1 + sovStaking(uint64(m.Id)) } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *HistoricalInfo) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = len(m.ModuleAccount) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = len(m.Validator) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + return n +} + +func (m *PendingTokenizeShareAuthorizations) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Addresses) > 0 { + for _, s := range m.Addresses { + l = len(s) + n += 1 + l + sovStaking(uint64(l)) + } + } + return n +} + +func sovStaking(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozStaking(x uint64) (n int) { + return sovStaking(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *ValAddresses) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ValAddresses{`, + `Addresses:` + fmt.Sprintf("%v", this.Addresses) + `,`, + `}`, + }, "") + return s +} +func valueToStringStaking(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *HistoricalInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 for iNdEx < l { preIndex := iNdEx var wire uint64 @@ -4948,6 +5392,74 @@ func (m *Validator) Unmarshal(dAtA []byte) error { } else { return fmt.Errorf("proto: wrong wireType = %d for field UnbondingIds", wireType) } + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorBondShares", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ValidatorBondShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LiquidShares", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LiquidShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipStaking(dAtA[iNdEx:]) @@ -5606,6 +6118,26 @@ func (m *Delegation) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorBond", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ValidatorBond = bool(v != 0) default: iNdEx = preIndex skippy, err := skipStaking(dAtA[iNdEx:]) @@ -6556,6 +7088,108 @@ func (m *Params) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorBondFactor", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ValidatorBondFactor.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GlobalLiquidStakingCap", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.GlobalLiquidStakingCap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorLiquidStakingCap", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ValidatorLiquidStakingCap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipStaking(dAtA[iNdEx:]) @@ -7129,6 +7763,253 @@ func (m *ValidatorUpdates) Unmarshal(dAtA []byte) error { } return nil } +func (m *TokenizeShareRecord) 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 ErrIntOverflowStaking + } + 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: TokenizeShareRecord: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TokenizeShareRecord: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + m.Id = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Id |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ModuleAccount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ModuleAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PendingTokenizeShareAuthorizations) 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 ErrIntOverflowStaking + } + 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: PendingTokenizeShareAuthorizations: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PendingTokenizeShareAuthorizations: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Addresses", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Addresses = append(m.Addresses, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipStaking(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/staking/types/tx.pb.go b/x/staking/types/tx.pb.go index 50a9e8f9fcf7..fc44791a3eaa 100644 --- a/x/staking/types/tx.pb.go +++ b/x/staking/types/tx.pb.go @@ -40,9 +40,10 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // MsgCreateValidator defines a SDK message for creating a new validator. type MsgCreateValidator struct { - Description Description `protobuf:"bytes,1,opt,name=description,proto3" json:"description"` - Commission CommissionRates `protobuf:"bytes,2,opt,name=commission,proto3" json:"commission"` - MinSelfDelegation github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation"` + Description Description `protobuf:"bytes,1,opt,name=description,proto3" json:"description"` + Commission CommissionRates `protobuf:"bytes,2,opt,name=commission,proto3" json:"commission"` + // Deprecated: This field has been deprecated with LSM in favor of the validator bond + MinSelfDelegation github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation"` // Deprecated: Do not use. DelegatorAddress string `protobuf:"bytes,4,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty"` ValidatorAddress string `protobuf:"bytes,5,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` Pubkey *types.Any `protobuf:"bytes,6,opt,name=pubkey,proto3" json:"pubkey,omitempty"` @@ -127,8 +128,9 @@ type MsgEditValidator struct { // it's not mandatory to update. If not updated, the deserialized rate will be // zero with no way to distinguish if an update was intended. // REF: #2373 - CommissionRate *github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=commission_rate,json=commissionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"commission_rate,omitempty"` - MinSelfDelegation *github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation,omitempty"` + CommissionRate *github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=commission_rate,json=commissionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"commission_rate,omitempty"` + // Deprecated: This field has been deprecated with LSM in favor of the validator bond + MinSelfDelegation github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation"` // Deprecated: Do not use. } func (m *MsgEditValidator) Reset() { *m = MsgEditValidator{} } @@ -635,1229 +637,3921 @@ func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo -func init() { - proto.RegisterType((*MsgCreateValidator)(nil), "cosmos.staking.v1beta1.MsgCreateValidator") - proto.RegisterType((*MsgCreateValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgCreateValidatorResponse") - proto.RegisterType((*MsgEditValidator)(nil), "cosmos.staking.v1beta1.MsgEditValidator") - proto.RegisterType((*MsgEditValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgEditValidatorResponse") - proto.RegisterType((*MsgDelegate)(nil), "cosmos.staking.v1beta1.MsgDelegate") - proto.RegisterType((*MsgDelegateResponse)(nil), "cosmos.staking.v1beta1.MsgDelegateResponse") - proto.RegisterType((*MsgBeginRedelegate)(nil), "cosmos.staking.v1beta1.MsgBeginRedelegate") - proto.RegisterType((*MsgBeginRedelegateResponse)(nil), "cosmos.staking.v1beta1.MsgBeginRedelegateResponse") - proto.RegisterType((*MsgUndelegate)(nil), "cosmos.staking.v1beta1.MsgUndelegate") - proto.RegisterType((*MsgUndelegateResponse)(nil), "cosmos.staking.v1beta1.MsgUndelegateResponse") - proto.RegisterType((*MsgCancelUnbondingDelegation)(nil), "cosmos.staking.v1beta1.MsgCancelUnbondingDelegation") - proto.RegisterType((*MsgCancelUnbondingDelegationResponse)(nil), "cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse") - proto.RegisterType((*MsgUpdateParams)(nil), "cosmos.staking.v1beta1.MsgUpdateParams") - proto.RegisterType((*MsgUpdateParamsResponse)(nil), "cosmos.staking.v1beta1.MsgUpdateParamsResponse") +// MsgUnbondValidator defines a method for performing the status transition for +// a validator from bonded to unbonded +// This allows a validator to stop their services and jail themselves without +// experiencing a slash +type MsgUnbondValidator struct { + ValidatorAddress string `protobuf:"bytes,1,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"address"` } -func init() { proto.RegisterFile("cosmos/staking/v1beta1/tx.proto", fileDescriptor_0926ef28816b35ab) } - -var fileDescriptor_0926ef28816b35ab = []byte{ - // 1100 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x56, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xf6, 0x3a, 0x89, 0x21, 0x13, 0x92, 0x34, 0x9b, 0xa4, 0xb5, 0x97, 0x62, 0x57, 0xdb, 0xd0, - 0x44, 0x81, 0xac, 0x69, 0x40, 0xfc, 0x30, 0x11, 0x22, 0xae, 0x5b, 0x51, 0xc0, 0x52, 0xb4, 0xa1, - 0x3d, 0x20, 0x24, 0x6b, 0xbc, 0x3b, 0x59, 0xaf, 0xec, 0xdd, 0xd9, 0xee, 0x8c, 0xa3, 0xfa, 0x86, - 0x38, 0x21, 0x2e, 0x54, 0x88, 0x03, 0x17, 0xa4, 0x1e, 0x39, 0xe6, 0xd0, 0x03, 0xff, 0x00, 0x52, - 0xc5, 0xa9, 0xea, 0x09, 0x71, 0x68, 0x51, 0x72, 0x08, 0xff, 0x01, 0x57, 0xb4, 0xbb, 0xb3, 0x3f, - 0x6d, 0xaf, 0x37, 0x55, 0x7b, 0x80, 0x4b, 0xbc, 0x79, 0xf3, 0xbd, 0x6f, 0x66, 0xbe, 0x6f, 0xde, - 0xcc, 0x03, 0x15, 0x05, 0x13, 0x03, 0x93, 0x2a, 0xa1, 0xb0, 0xab, 0x9b, 0x5a, 0xf5, 0xf0, 0x6a, - 0x1b, 0x51, 0x78, 0xb5, 0x4a, 0xef, 0x4a, 0x96, 0x8d, 0x29, 0xe6, 0xcf, 0x7b, 0x00, 0x89, 0x01, - 0x24, 0x06, 0x10, 0x4a, 0x1a, 0xc6, 0x5a, 0x0f, 0x55, 0x5d, 0x54, 0xbb, 0x7f, 0x50, 0x85, 0xe6, - 0xc0, 0x4b, 0x11, 0x2a, 0xc9, 0x21, 0xaa, 0x1b, 0x88, 0x50, 0x68, 0x58, 0x0c, 0xb0, 0xa2, 0x61, - 0x0d, 0xbb, 0x9f, 0x55, 0xe7, 0x8b, 0x45, 0x4b, 0xde, 0x4c, 0x2d, 0x6f, 0x80, 0x4d, 0xeb, 0x0d, - 0x95, 0xd9, 0x2a, 0xdb, 0x90, 0xa0, 0x60, 0x89, 0x0a, 0xd6, 0x4d, 0x36, 0xbe, 0x36, 0x66, 0x17, - 0xfe, 0xa2, 0x3d, 0xd4, 0x05, 0x86, 0x32, 0x88, 0x83, 0x70, 0x7e, 0xd8, 0xc0, 0x12, 0x34, 0x74, - 0x13, 0x57, 0xdd, 0xbf, 0x5e, 0x48, 0xfc, 0x61, 0x06, 0xf0, 0x4d, 0xa2, 0x5d, 0xb3, 0x11, 0xa4, - 0xe8, 0x36, 0xec, 0xe9, 0x2a, 0xa4, 0xd8, 0xe6, 0xf7, 0xc0, 0x9c, 0x8a, 0x88, 0x62, 0xeb, 0x16, - 0xd5, 0xb1, 0x59, 0xe4, 0x2e, 0x71, 0x1b, 0x73, 0xdb, 0x97, 0xa5, 0xd1, 0x1a, 0x49, 0x8d, 0x10, - 0x5a, 0x9f, 0x7d, 0xf8, 0xa4, 0x92, 0xfb, 0xe5, 0xf4, 0x68, 0x93, 0x93, 0xa3, 0x14, 0xbc, 0x0c, - 0x80, 0x82, 0x0d, 0x43, 0x27, 0xc4, 0x21, 0xcc, 0xbb, 0x84, 0xeb, 0xe3, 0x08, 0xaf, 0x05, 0x48, - 0x19, 0x52, 0x44, 0xa2, 0xa4, 0x11, 0x16, 0xbe, 0x07, 0x96, 0x0d, 0xdd, 0x6c, 0x11, 0xd4, 0x3b, - 0x68, 0xa9, 0xa8, 0x87, 0x34, 0xe8, 0xae, 0x76, 0xea, 0x12, 0xb7, 0x31, 0x5b, 0xdf, 0x71, 0x72, - 0xfe, 0x7c, 0x52, 0xb9, 0xa2, 0xe9, 0xb4, 0xd3, 0x6f, 0x4b, 0x0a, 0x36, 0x98, 0xd8, 0xec, 0x67, - 0x8b, 0xa8, 0xdd, 0x2a, 0x1d, 0x58, 0x88, 0x48, 0x37, 0x4d, 0xfa, 0xf8, 0xc1, 0x16, 0x60, 0xab, - 0xb9, 0x69, 0x52, 0x79, 0xc9, 0xd0, 0xcd, 0x7d, 0xd4, 0x3b, 0x68, 0x04, 0xb4, 0xfc, 0x75, 0xb0, - 0xc4, 0x26, 0xc1, 0x76, 0x0b, 0xaa, 0xaa, 0x8d, 0x08, 0x29, 0x4e, 0xbb, 0x73, 0x15, 0x1f, 0x3f, - 0xd8, 0x5a, 0x61, 0xd9, 0xbb, 0xde, 0xc8, 0x3e, 0xb5, 0x75, 0x53, 0x93, 0xcf, 0x05, 0x29, 0x2c, - 0xee, 0xd0, 0x1c, 0xfa, 0x3a, 0x07, 0x34, 0x33, 0x93, 0x68, 0x82, 0x14, 0x9f, 0xe6, 0x06, 0x28, - 0x58, 0xfd, 0x76, 0x17, 0x0d, 0x8a, 0x05, 0x57, 0xcb, 0x15, 0xc9, 0x3b, 0x8d, 0x92, 0x7f, 0x1a, - 0xa5, 0x5d, 0x73, 0x50, 0x2f, 0xfe, 0x1e, 0x32, 0x2a, 0xf6, 0xc0, 0xa2, 0x58, 0xda, 0xeb, 0xb7, - 0x3f, 0x43, 0x03, 0x99, 0x65, 0xf3, 0x35, 0x30, 0x73, 0x08, 0x7b, 0x7d, 0x54, 0x7c, 0xc9, 0xa5, - 0x29, 0xf9, 0x96, 0x38, 0x47, 0x30, 0xe2, 0x87, 0x1e, 0x73, 0xd6, 0x4b, 0xa9, 0xdd, 0xfe, 0xf6, - 0x7e, 0x25, 0xf7, 0xf7, 0xfd, 0x4a, 0xee, 0x9b, 0xd3, 0xa3, 0xcd, 0x61, 0x71, 0xdc, 0xe8, 0xd0, - 0x5e, 0xbf, 0x3b, 0x3d, 0xda, 0x7c, 0x2d, 0xe2, 0xc0, 0xf0, 0xe9, 0x13, 0x2f, 0x02, 0x61, 0x38, - 0x2a, 0x23, 0x62, 0x61, 0x93, 0x20, 0xf1, 0xd7, 0x29, 0x70, 0xae, 0x49, 0xb4, 0xeb, 0xaa, 0x4e, - 0x5f, 0xe4, 0x81, 0x1d, 0xe9, 0x53, 0xfe, 0xcc, 0x3e, 0x41, 0xb0, 0x18, 0x9e, 0xd8, 0x96, 0x0d, - 0x29, 0x62, 0xe7, 0xf3, 0xfd, 0x8c, 0x67, 0xb3, 0x81, 0x94, 0xc8, 0xd9, 0x6c, 0x20, 0x45, 0x5e, - 0x50, 0x62, 0xe5, 0xc1, 0x77, 0x46, 0x97, 0xc1, 0xf4, 0x99, 0xa6, 0xc9, 0x52, 0x02, 0xb5, 0x8f, - 0x62, 0x86, 0x8f, 0xb4, 0xf6, 0xd5, 0xb8, 0xb5, 0x31, 0x97, 0x44, 0x01, 0x14, 0x93, 0xb1, 0xc0, - 0xd6, 0x1f, 0xf3, 0x60, 0xae, 0x49, 0x34, 0x36, 0x1b, 0x1a, 0x5d, 0x6e, 0xdc, 0xf3, 0x29, 0xb7, - 0xb3, 0xdb, 0xb8, 0x03, 0x0a, 0xd0, 0xc0, 0x7d, 0x93, 0xba, 0xee, 0x65, 0xad, 0x13, 0x96, 0x53, - 0xfb, 0x20, 0xbd, 0x50, 0x1c, 0xdd, 0xce, 0xc7, 0x75, 0xf3, 0x65, 0x10, 0x57, 0xc1, 0x72, 0xe4, - 0xdf, 0x40, 0xad, 0x7f, 0xf2, 0xee, 0xbd, 0x5d, 0x47, 0x9a, 0x6e, 0xca, 0x48, 0x7d, 0xce, 0xa2, - 0x7d, 0x0e, 0x56, 0x43, 0xd1, 0x88, 0xad, 0x64, 0x16, 0x6e, 0x39, 0x48, 0xdb, 0xb7, 0x95, 0x91, - 0x6c, 0x2a, 0xa1, 0x01, 0xdb, 0x54, 0x66, 0xb6, 0x06, 0xa1, 0xc3, 0x4e, 0x4c, 0x3f, 0x83, 0x13, - 0x1f, 0x4f, 0x76, 0x22, 0x71, 0x39, 0x25, 0x24, 0x16, 0x2d, 0xf7, 0x72, 0x4a, 0x44, 0x7d, 0x5f, - 0x78, 0xd9, 0x2d, 0x77, 0xab, 0x87, 0x9c, 0x7a, 0x69, 0x39, 0x0d, 0x01, 0xbb, 0x8b, 0x84, 0xa1, - 0xfb, 0xf9, 0x0b, 0xbf, 0x5b, 0xa8, 0xcf, 0x3b, 0xeb, 0xbc, 0xf7, 0xb4, 0xc2, 0x79, 0x6b, 0x5d, - 0x08, 0x19, 0x1c, 0x8c, 0xf8, 0x53, 0x1e, 0xcc, 0x37, 0x89, 0x76, 0xcb, 0x54, 0xff, 0x8f, 0xb5, - 0xf1, 0xe1, 0x64, 0x47, 0x8a, 0x71, 0x47, 0x42, 0x21, 0xc4, 0x2e, 0x58, 0x8d, 0x05, 0x5e, 0xa8, - 0x0f, 0x4f, 0xf3, 0xe0, 0xa2, 0xf3, 0x2e, 0x41, 0x53, 0x41, 0xbd, 0x5b, 0x66, 0x1b, 0x9b, 0xaa, - 0x6e, 0x6a, 0x93, 0x3a, 0x84, 0xff, 0xa6, 0x2d, 0xfc, 0x3a, 0x58, 0x54, 0x9c, 0x07, 0xd8, 0x91, - 0xaf, 0x83, 0x74, 0xad, 0xe3, 0xd5, 0xdb, 0x94, 0xbc, 0xe0, 0x87, 0x3f, 0x71, 0xa3, 0xb5, 0x4f, - 0x27, 0xfb, 0xb7, 0x9e, 0x78, 0xee, 0xc7, 0x09, 0x28, 0x5e, 0x01, 0x6b, 0x69, 0xe3, 0xc1, 0xed, - 0xf7, 0x1b, 0x07, 0x16, 0x1d, 0xdf, 0x2d, 0x15, 0x52, 0xb4, 0x07, 0x6d, 0x68, 0x10, 0xfe, 0x5d, - 0x30, 0x0b, 0xfb, 0xb4, 0x83, 0x6d, 0x9d, 0x0e, 0x26, 0x8a, 0x1e, 0x42, 0xf9, 0x5d, 0x50, 0xb0, - 0x5c, 0x06, 0xd6, 0x94, 0x96, 0xc7, 0x35, 0x0d, 0xde, 0x3c, 0x31, 0xad, 0xbc, 0xc4, 0xda, 0x7b, - 0xce, 0xd6, 0x43, 0x4a, 0x67, 0xcb, 0x6b, 0x91, 0x2d, 0xdf, 0x0d, 0xfa, 0xf5, 0xc4, 0x9a, 0xc5, - 0x12, 0xb8, 0x90, 0x08, 0xf9, 0x5b, 0xdc, 0xfe, 0xb9, 0x00, 0xa6, 0x9a, 0x44, 0xe3, 0xef, 0x80, - 0xc5, 0x64, 0x73, 0xbe, 0x39, 0x6e, 0x85, 0xc3, 0x4d, 0x93, 0xb0, 0x9d, 0x1d, 0x1b, 0xd4, 0x4e, - 0x17, 0xcc, 0xc7, 0x9b, 0xab, 0x8d, 0x14, 0x92, 0x18, 0x52, 0x78, 0x2b, 0x2b, 0x32, 0x98, 0xec, - 0x2b, 0xf0, 0x72, 0xf0, 0xe4, 0x5f, 0x4e, 0xc9, 0xf6, 0x41, 0xc2, 0x1b, 0x19, 0x40, 0x01, 0xfb, - 0x1d, 0xb0, 0x98, 0x7c, 0x22, 0xd3, 0xd4, 0x4b, 0x60, 0x53, 0xd5, 0x1b, 0xf7, 0x02, 0xb4, 0x01, - 0x88, 0xdc, 0xd4, 0xaf, 0xa7, 0x30, 0x84, 0x30, 0x61, 0x2b, 0x13, 0x2c, 0x98, 0xe3, 0x7b, 0x0e, - 0x94, 0xc6, 0x5f, 0x43, 0xef, 0xa4, 0x79, 0x3e, 0x2e, 0x4b, 0xd8, 0x79, 0x96, 0xac, 0x60, 0x45, - 0x1d, 0xf0, 0x4a, 0xac, 0x1a, 0xd7, 0xd3, 0x36, 0x14, 0x01, 0x0a, 0xd5, 0x8c, 0x40, 0x7f, 0x26, - 0x61, 0xe6, 0x6b, 0xa7, 0xf6, 0xea, 0x37, 0x1e, 0x1e, 0x97, 0xb9, 0x47, 0xc7, 0x65, 0xee, 0xaf, - 0xe3, 0x32, 0x77, 0xef, 0xa4, 0x9c, 0x7b, 0x74, 0x52, 0xce, 0xfd, 0x71, 0x52, 0xce, 0x7d, 0xf9, - 0x66, 0x6a, 0xb7, 0x1b, 0x16, 0xa3, 0xdb, 0xf7, 0xb6, 0x0b, 0xee, 0x3b, 0xf0, 0xf6, 0xbf, 0x01, - 0x00, 0x00, 0xff, 0xff, 0xa0, 0x87, 0x6e, 0xf3, 0x21, 0x10, 0x00, 0x00, +func (m *MsgUnbondValidator) Reset() { *m = MsgUnbondValidator{} } +func (m *MsgUnbondValidator) String() string { return proto.CompactTextString(m) } +func (*MsgUnbondValidator) ProtoMessage() {} +func (*MsgUnbondValidator) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{14} +} +func (m *MsgUnbondValidator) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUnbondValidator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUnbondValidator.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 *MsgUnbondValidator) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUnbondValidator.Merge(m, src) +} +func (m *MsgUnbondValidator) XXX_Size() int { + return m.Size() +} +func (m *MsgUnbondValidator) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUnbondValidator.DiscardUnknown(m) } -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +var xxx_messageInfo_MsgUnbondValidator proto.InternalMessageInfo -// MsgClient is the client API for Msg service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type MsgClient interface { - // CreateValidator defines a method for creating a new validator. - CreateValidator(ctx context.Context, in *MsgCreateValidator, opts ...grpc.CallOption) (*MsgCreateValidatorResponse, error) - // EditValidator defines a method for editing an existing validator. - EditValidator(ctx context.Context, in *MsgEditValidator, opts ...grpc.CallOption) (*MsgEditValidatorResponse, error) - // Delegate defines a method for performing a delegation of coins - // from a delegator to a validator. - Delegate(ctx context.Context, in *MsgDelegate, opts ...grpc.CallOption) (*MsgDelegateResponse, error) - // BeginRedelegate defines a method for performing a redelegation - // of coins from a delegator and source validator to a destination validator. - BeginRedelegate(ctx context.Context, in *MsgBeginRedelegate, opts ...grpc.CallOption) (*MsgBeginRedelegateResponse, error) - // Undelegate defines a method for performing an undelegation from a - // delegate and a validator. - Undelegate(ctx context.Context, in *MsgUndelegate, opts ...grpc.CallOption) (*MsgUndelegateResponse, error) - // CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation - // and delegate back to previous validator. - // - // Since: cosmos-sdk 0.46 - CancelUnbondingDelegation(ctx context.Context, in *MsgCancelUnbondingDelegation, opts ...grpc.CallOption) (*MsgCancelUnbondingDelegationResponse, error) - // UpdateParams defines an operation for updating the x/staking module - // parameters. - // Since: cosmos-sdk 0.47 - UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) +func (m *MsgUnbondValidator) GetValidatorAddress() string { + if m != nil { + return m.ValidatorAddress + } + return "" } -type msgClient struct { - cc grpc1.ClientConn +// MsgUnbondValidatorResponse defines the Msg/UnbondValidator response type. +type MsgUnbondValidatorResponse struct { } -func NewMsgClient(cc grpc1.ClientConn) MsgClient { - return &msgClient{cc} +func (m *MsgUnbondValidatorResponse) Reset() { *m = MsgUnbondValidatorResponse{} } +func (m *MsgUnbondValidatorResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUnbondValidatorResponse) ProtoMessage() {} +func (*MsgUnbondValidatorResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{15} } - -func (c *msgClient) CreateValidator(ctx context.Context, in *MsgCreateValidator, opts ...grpc.CallOption) (*MsgCreateValidatorResponse, error) { - out := new(MsgCreateValidatorResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/CreateValidator", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +func (m *MsgUnbondValidatorResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } - -func (c *msgClient) EditValidator(ctx context.Context, in *MsgEditValidator, opts ...grpc.CallOption) (*MsgEditValidatorResponse, error) { - out := new(MsgEditValidatorResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/EditValidator", in, out, opts...) - if err != nil { - return nil, err +func (m *MsgUnbondValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUnbondValidatorResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *MsgUnbondValidatorResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUnbondValidatorResponse.Merge(m, src) +} +func (m *MsgUnbondValidatorResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUnbondValidatorResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUnbondValidatorResponse.DiscardUnknown(m) } -func (c *msgClient) Delegate(ctx context.Context, in *MsgDelegate, opts ...grpc.CallOption) (*MsgDelegateResponse, error) { - out := new(MsgDelegateResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/Delegate", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +var xxx_messageInfo_MsgUnbondValidatorResponse proto.InternalMessageInfo + +// MsgTokenizeShares tokenizes a delegation +type MsgTokenizeShares struct { + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"validator_address"` + Amount types1.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount"` + TokenizedShareOwner string `protobuf:"bytes,4,opt,name=tokenized_share_owner,json=tokenizedShareOwner,proto3" json:"tokenized_share_owner,omitempty"` } -func (c *msgClient) BeginRedelegate(ctx context.Context, in *MsgBeginRedelegate, opts ...grpc.CallOption) (*MsgBeginRedelegateResponse, error) { - out := new(MsgBeginRedelegateResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/BeginRedelegate", in, out, opts...) - if err != nil { - return nil, err +func (m *MsgTokenizeShares) Reset() { *m = MsgTokenizeShares{} } +func (m *MsgTokenizeShares) String() string { return proto.CompactTextString(m) } +func (*MsgTokenizeShares) ProtoMessage() {} +func (*MsgTokenizeShares) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{16} +} +func (m *MsgTokenizeShares) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgTokenizeShares) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgTokenizeShares.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *MsgTokenizeShares) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgTokenizeShares.Merge(m, src) +} +func (m *MsgTokenizeShares) XXX_Size() int { + return m.Size() +} +func (m *MsgTokenizeShares) XXX_DiscardUnknown() { + xxx_messageInfo_MsgTokenizeShares.DiscardUnknown(m) } -func (c *msgClient) Undelegate(ctx context.Context, in *MsgUndelegate, opts ...grpc.CallOption) (*MsgUndelegateResponse, error) { - out := new(MsgUndelegateResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/Undelegate", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +var xxx_messageInfo_MsgTokenizeShares proto.InternalMessageInfo + +// MsgTokenizeSharesResponse defines the Msg/MsgTokenizeShares response type. +type MsgTokenizeSharesResponse struct { + Amount types1.Coin `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount"` } -func (c *msgClient) CancelUnbondingDelegation(ctx context.Context, in *MsgCancelUnbondingDelegation, opts ...grpc.CallOption) (*MsgCancelUnbondingDelegationResponse, error) { - out := new(MsgCancelUnbondingDelegationResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation", in, out, opts...) - if err != nil { - return nil, err +func (m *MsgTokenizeSharesResponse) Reset() { *m = MsgTokenizeSharesResponse{} } +func (m *MsgTokenizeSharesResponse) String() string { return proto.CompactTextString(m) } +func (*MsgTokenizeSharesResponse) ProtoMessage() {} +func (*MsgTokenizeSharesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{17} +} +func (m *MsgTokenizeSharesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgTokenizeSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgTokenizeSharesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return out, nil +} +func (m *MsgTokenizeSharesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgTokenizeSharesResponse.Merge(m, src) +} +func (m *MsgTokenizeSharesResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgTokenizeSharesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgTokenizeSharesResponse.DiscardUnknown(m) } -func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { - out := new(MsgUpdateParamsResponse) - err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/UpdateParams", in, out, opts...) - if err != nil { - return nil, err +var xxx_messageInfo_MsgTokenizeSharesResponse proto.InternalMessageInfo + +func (m *MsgTokenizeSharesResponse) GetAmount() types1.Coin { + if m != nil { + return m.Amount } - return out, nil + return types1.Coin{} } -// MsgServer is the server API for Msg service. -type MsgServer interface { - // CreateValidator defines a method for creating a new validator. - CreateValidator(context.Context, *MsgCreateValidator) (*MsgCreateValidatorResponse, error) - // EditValidator defines a method for editing an existing validator. - EditValidator(context.Context, *MsgEditValidator) (*MsgEditValidatorResponse, error) - // Delegate defines a method for performing a delegation of coins - // from a delegator to a validator. - Delegate(context.Context, *MsgDelegate) (*MsgDelegateResponse, error) - // BeginRedelegate defines a method for performing a redelegation - // of coins from a delegator and source validator to a destination validator. - BeginRedelegate(context.Context, *MsgBeginRedelegate) (*MsgBeginRedelegateResponse, error) - // Undelegate defines a method for performing an undelegation from a - // delegate and a validator. - Undelegate(context.Context, *MsgUndelegate) (*MsgUndelegateResponse, error) - // CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation - // and delegate back to previous validator. - // - // Since: cosmos-sdk 0.46 - CancelUnbondingDelegation(context.Context, *MsgCancelUnbondingDelegation) (*MsgCancelUnbondingDelegationResponse, error) - // UpdateParams defines an operation for updating the x/staking module - // parameters. - // Since: cosmos-sdk 0.47 - UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) +// MsgRedeemTokensForShares redeems a tokenized share back into a native delegation +type MsgRedeemTokensForShares struct { + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` + Amount types1.Coin `protobuf:"bytes,2,opt,name=amount,proto3" json:"amount"` } -// UnimplementedMsgServer can be embedded to have forward compatible implementations. -type UnimplementedMsgServer struct { +func (m *MsgRedeemTokensForShares) Reset() { *m = MsgRedeemTokensForShares{} } +func (m *MsgRedeemTokensForShares) String() string { return proto.CompactTextString(m) } +func (*MsgRedeemTokensForShares) ProtoMessage() {} +func (*MsgRedeemTokensForShares) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{18} +} +func (m *MsgRedeemTokensForShares) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRedeemTokensForShares) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRedeemTokensForShares.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 *MsgRedeemTokensForShares) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRedeemTokensForShares.Merge(m, src) +} +func (m *MsgRedeemTokensForShares) XXX_Size() int { + return m.Size() +} +func (m *MsgRedeemTokensForShares) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRedeemTokensForShares.DiscardUnknown(m) } -func (*UnimplementedMsgServer) CreateValidator(ctx context.Context, req *MsgCreateValidator) (*MsgCreateValidatorResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateValidator not implemented") +var xxx_messageInfo_MsgRedeemTokensForShares proto.InternalMessageInfo + +// MsgRedeemTokensForSharesResponse defines the Msg/MsgRedeemTokensForShares response type. +type MsgRedeemTokensForSharesResponse struct { + Amount types1.Coin `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount"` } -func (*UnimplementedMsgServer) EditValidator(ctx context.Context, req *MsgEditValidator) (*MsgEditValidatorResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EditValidator not implemented") + +func (m *MsgRedeemTokensForSharesResponse) Reset() { *m = MsgRedeemTokensForSharesResponse{} } +func (m *MsgRedeemTokensForSharesResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRedeemTokensForSharesResponse) ProtoMessage() {} +func (*MsgRedeemTokensForSharesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{19} } -func (*UnimplementedMsgServer) Delegate(ctx context.Context, req *MsgDelegate) (*MsgDelegateResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delegate not implemented") +func (m *MsgRedeemTokensForSharesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } -func (*UnimplementedMsgServer) BeginRedelegate(ctx context.Context, req *MsgBeginRedelegate) (*MsgBeginRedelegateResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BeginRedelegate not implemented") +func (m *MsgRedeemTokensForSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRedeemTokensForSharesResponse.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 (*UnimplementedMsgServer) Undelegate(ctx context.Context, req *MsgUndelegate) (*MsgUndelegateResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Undelegate not implemented") +func (m *MsgRedeemTokensForSharesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRedeemTokensForSharesResponse.Merge(m, src) } -func (*UnimplementedMsgServer) CancelUnbondingDelegation(ctx context.Context, req *MsgCancelUnbondingDelegation) (*MsgCancelUnbondingDelegationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CancelUnbondingDelegation not implemented") +func (m *MsgRedeemTokensForSharesResponse) XXX_Size() int { + return m.Size() } -func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +func (m *MsgRedeemTokensForSharesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRedeemTokensForSharesResponse.DiscardUnknown(m) } -func RegisterMsgServer(s grpc1.Server, srv MsgServer) { - s.RegisterService(&_Msg_serviceDesc, srv) -} +var xxx_messageInfo_MsgRedeemTokensForSharesResponse proto.InternalMessageInfo -func _Msg_CreateValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgCreateValidator) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).CreateValidator(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Msg/CreateValidator", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).CreateValidator(ctx, req.(*MsgCreateValidator)) +func (m *MsgRedeemTokensForSharesResponse) GetAmount() types1.Coin { + if m != nil { + return m.Amount } - return interceptor(ctx, in, info, handler) + return types1.Coin{} } -func _Msg_EditValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgEditValidator) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).EditValidator(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Msg/EditValidator", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).EditValidator(ctx, req.(*MsgEditValidator)) - } - return interceptor(ctx, in, info, handler) +// MsgTransferTokenizeShareRecord transfer a tokenize share record +type MsgTransferTokenizeShareRecord struct { + TokenizeShareRecordId uint64 `protobuf:"varint,1,opt,name=tokenize_share_record_id,json=tokenizeShareRecordId,proto3" json:"tokenize_share_record_id,omitempty"` + Sender string `protobuf:"bytes,2,opt,name=sender,proto3" json:"sender,omitempty"` + NewOwner string `protobuf:"bytes,3,opt,name=new_owner,json=newOwner,proto3" json:"new_owner,omitempty"` } -func _Msg_Delegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgDelegate) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).Delegate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Msg/Delegate", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).Delegate(ctx, req.(*MsgDelegate)) +func (m *MsgTransferTokenizeShareRecord) Reset() { *m = MsgTransferTokenizeShareRecord{} } +func (m *MsgTransferTokenizeShareRecord) String() string { return proto.CompactTextString(m) } +func (*MsgTransferTokenizeShareRecord) ProtoMessage() {} +func (*MsgTransferTokenizeShareRecord) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{20} +} +func (m *MsgTransferTokenizeShareRecord) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgTransferTokenizeShareRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgTransferTokenizeShareRecord.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return interceptor(ctx, in, info, handler) +} +func (m *MsgTransferTokenizeShareRecord) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgTransferTokenizeShareRecord.Merge(m, src) +} +func (m *MsgTransferTokenizeShareRecord) XXX_Size() int { + return m.Size() +} +func (m *MsgTransferTokenizeShareRecord) XXX_DiscardUnknown() { + xxx_messageInfo_MsgTransferTokenizeShareRecord.DiscardUnknown(m) } -func _Msg_BeginRedelegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgBeginRedelegate) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).BeginRedelegate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Msg/BeginRedelegate", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).BeginRedelegate(ctx, req.(*MsgBeginRedelegate)) - } - return interceptor(ctx, in, info, handler) +var xxx_messageInfo_MsgTransferTokenizeShareRecord proto.InternalMessageInfo + +// MsgTransferTokenizeShareRecordResponse defines the Msg/MsgTransferTokenizeShareRecord response type. +type MsgTransferTokenizeShareRecordResponse struct { } -func _Msg_Undelegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgUndelegate) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).Undelegate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Msg/Undelegate", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).Undelegate(ctx, req.(*MsgUndelegate)) +func (m *MsgTransferTokenizeShareRecordResponse) Reset() { + *m = MsgTransferTokenizeShareRecordResponse{} +} +func (m *MsgTransferTokenizeShareRecordResponse) String() string { return proto.CompactTextString(m) } +func (*MsgTransferTokenizeShareRecordResponse) ProtoMessage() {} +func (*MsgTransferTokenizeShareRecordResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{21} +} +func (m *MsgTransferTokenizeShareRecordResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgTransferTokenizeShareRecordResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgTransferTokenizeShareRecordResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return interceptor(ctx, in, info, handler) +} +func (m *MsgTransferTokenizeShareRecordResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgTransferTokenizeShareRecordResponse.Merge(m, src) +} +func (m *MsgTransferTokenizeShareRecordResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgTransferTokenizeShareRecordResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgTransferTokenizeShareRecordResponse.DiscardUnknown(m) } -func _Msg_CancelUnbondingDelegation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgCancelUnbondingDelegation) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).CancelUnbondingDelegation(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).CancelUnbondingDelegation(ctx, req.(*MsgCancelUnbondingDelegation)) - } - return interceptor(ctx, in, info, handler) +var xxx_messageInfo_MsgTransferTokenizeShareRecordResponse proto.InternalMessageInfo + +// MsgDisableTokenizeShares prevents the tokenization of shares for a given address +type MsgDisableTokenizeShares struct { + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` } -func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgUpdateParams) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).UpdateParams(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/cosmos.staking.v1beta1.Msg/UpdateParams", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) +func (m *MsgDisableTokenizeShares) Reset() { *m = MsgDisableTokenizeShares{} } +func (m *MsgDisableTokenizeShares) String() string { return proto.CompactTextString(m) } +func (*MsgDisableTokenizeShares) ProtoMessage() {} +func (*MsgDisableTokenizeShares) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{22} +} +func (m *MsgDisableTokenizeShares) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgDisableTokenizeShares) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgDisableTokenizeShares.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return interceptor(ctx, in, info, handler) +} +func (m *MsgDisableTokenizeShares) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDisableTokenizeShares.Merge(m, src) +} +func (m *MsgDisableTokenizeShares) XXX_Size() int { + return m.Size() +} +func (m *MsgDisableTokenizeShares) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDisableTokenizeShares.DiscardUnknown(m) } -var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "cosmos.staking.v1beta1.Msg", - HandlerType: (*MsgServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "CreateValidator", - Handler: _Msg_CreateValidator_Handler, - }, - { - MethodName: "EditValidator", - Handler: _Msg_EditValidator_Handler, - }, - { - MethodName: "Delegate", - Handler: _Msg_Delegate_Handler, - }, - { - MethodName: "BeginRedelegate", - Handler: _Msg_BeginRedelegate_Handler, - }, - { - MethodName: "Undelegate", - Handler: _Msg_Undelegate_Handler, - }, - { - MethodName: "CancelUnbondingDelegation", - Handler: _Msg_CancelUnbondingDelegation_Handler, - }, - { - MethodName: "UpdateParams", - Handler: _Msg_UpdateParams_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "cosmos/staking/v1beta1/tx.proto", +var xxx_messageInfo_MsgDisableTokenizeShares proto.InternalMessageInfo + +// MsgDisableTokenizeSharesResponse defines the Msg/DisableTokenizeShares response type. +type MsgDisableTokenizeSharesResponse struct { } -func (m *MsgCreateValidator) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *MsgDisableTokenizeSharesResponse) Reset() { *m = MsgDisableTokenizeSharesResponse{} } +func (m *MsgDisableTokenizeSharesResponse) String() string { return proto.CompactTextString(m) } +func (*MsgDisableTokenizeSharesResponse) ProtoMessage() {} +func (*MsgDisableTokenizeSharesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{23} +} +func (m *MsgDisableTokenizeSharesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgDisableTokenizeSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgDisableTokenizeSharesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return dAtA[:n], nil +} +func (m *MsgDisableTokenizeSharesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDisableTokenizeSharesResponse.Merge(m, src) +} +func (m *MsgDisableTokenizeSharesResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgDisableTokenizeSharesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDisableTokenizeSharesResponse.DiscardUnknown(m) } -func (m *MsgCreateValidator) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +var xxx_messageInfo_MsgDisableTokenizeSharesResponse proto.InternalMessageInfo + +// MsgEnableTokenizeShares re-enables tokenization of shares for a given address +type MsgEnableTokenizeShares struct { + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` } -func (m *MsgCreateValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Value.MarshalToSizedBuffer(dAtA[:i]) +func (m *MsgEnableTokenizeShares) Reset() { *m = MsgEnableTokenizeShares{} } +func (m *MsgEnableTokenizeShares) String() string { return proto.CompactTextString(m) } +func (*MsgEnableTokenizeShares) ProtoMessage() {} +func (*MsgEnableTokenizeShares) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{24} +} +func (m *MsgEnableTokenizeShares) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgEnableTokenizeShares) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgEnableTokenizeShares.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) + return b[:n], nil } - i-- - dAtA[i] = 0x3a - if m.Pubkey != nil { - { - size, err := m.Pubkey.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) +} +func (m *MsgEnableTokenizeShares) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgEnableTokenizeShares.Merge(m, src) +} +func (m *MsgEnableTokenizeShares) XXX_Size() int { + return m.Size() +} +func (m *MsgEnableTokenizeShares) XXX_DiscardUnknown() { + xxx_messageInfo_MsgEnableTokenizeShares.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgEnableTokenizeShares proto.InternalMessageInfo + +// MsgEnableTokenizeSharesResponse defines the Msg/EnableTokenizeShares response type. +type MsgEnableTokenizeSharesResponse struct { + CompletionTime time.Time `protobuf:"bytes,1,opt,name=completion_time,json=completionTime,proto3,stdtime" json:"completion_time"` +} + +func (m *MsgEnableTokenizeSharesResponse) Reset() { *m = MsgEnableTokenizeSharesResponse{} } +func (m *MsgEnableTokenizeSharesResponse) String() string { return proto.CompactTextString(m) } +func (*MsgEnableTokenizeSharesResponse) ProtoMessage() {} +func (*MsgEnableTokenizeSharesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{25} +} +func (m *MsgEnableTokenizeSharesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgEnableTokenizeSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgEnableTokenizeSharesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - i-- - dAtA[i] = 0x32 + return b[:n], nil } - if len(m.ValidatorAddress) > 0 { - i -= len(m.ValidatorAddress) - copy(dAtA[i:], m.ValidatorAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) - i-- - dAtA[i] = 0x2a - } - if len(m.DelegatorAddress) > 0 { - i -= len(m.DelegatorAddress) - copy(dAtA[i:], m.DelegatorAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) - i-- - dAtA[i] = 0x22 - } - { - size := m.MinSelfDelegation.Size() - i -= size - if _, err := m.MinSelfDelegation.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) +} +func (m *MsgEnableTokenizeSharesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgEnableTokenizeSharesResponse.Merge(m, src) +} +func (m *MsgEnableTokenizeSharesResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgEnableTokenizeSharesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgEnableTokenizeSharesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgEnableTokenizeSharesResponse proto.InternalMessageInfo + +func (m *MsgEnableTokenizeSharesResponse) GetCompletionTime() time.Time { + if m != nil { + return m.CompletionTime } - i-- - dAtA[i] = 0x1a - { - size, err := m.Commission.MarshalToSizedBuffer(dAtA[:i]) + return time.Time{} +} + +// MsgValidatorBond defines a SDK message for performing validator self-bond of delegated coins +// from a delegator to a validator. +type MsgValidatorBond struct { + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"validator_address"` +} + +func (m *MsgValidatorBond) Reset() { *m = MsgValidatorBond{} } +func (m *MsgValidatorBond) String() string { return proto.CompactTextString(m) } +func (*MsgValidatorBond) ProtoMessage() {} +func (*MsgValidatorBond) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{26} +} +func (m *MsgValidatorBond) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgValidatorBond) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgValidatorBond.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) + return b[:n], nil } - i-- - dAtA[i] = 0x12 - { - size, err := m.Description.MarshalToSizedBuffer(dAtA[:i]) +} +func (m *MsgValidatorBond) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgValidatorBond.Merge(m, src) +} +func (m *MsgValidatorBond) XXX_Size() int { + return m.Size() +} +func (m *MsgValidatorBond) XXX_DiscardUnknown() { + xxx_messageInfo_MsgValidatorBond.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgValidatorBond proto.InternalMessageInfo + +// MsgValidatorBondResponse defines the Msg/ValidatorBond response type. +type MsgValidatorBondResponse struct { +} + +func (m *MsgValidatorBondResponse) Reset() { *m = MsgValidatorBondResponse{} } +func (m *MsgValidatorBondResponse) String() string { return proto.CompactTextString(m) } +func (*MsgValidatorBondResponse) ProtoMessage() {} +func (*MsgValidatorBondResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{27} +} +func (m *MsgValidatorBondResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgValidatorBondResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgValidatorBondResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) + return b[:n], nil } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil } - -func (m *MsgCreateValidatorResponse) 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 *MsgValidatorBondResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgValidatorBondResponse.Merge(m, src) +} +func (m *MsgValidatorBondResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgValidatorBondResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgValidatorBondResponse.DiscardUnknown(m) } -func (m *MsgCreateValidatorResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +var xxx_messageInfo_MsgValidatorBondResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgCreateValidator)(nil), "cosmos.staking.v1beta1.MsgCreateValidator") + proto.RegisterType((*MsgCreateValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgCreateValidatorResponse") + proto.RegisterType((*MsgEditValidator)(nil), "cosmos.staking.v1beta1.MsgEditValidator") + proto.RegisterType((*MsgEditValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgEditValidatorResponse") + proto.RegisterType((*MsgDelegate)(nil), "cosmos.staking.v1beta1.MsgDelegate") + proto.RegisterType((*MsgDelegateResponse)(nil), "cosmos.staking.v1beta1.MsgDelegateResponse") + proto.RegisterType((*MsgBeginRedelegate)(nil), "cosmos.staking.v1beta1.MsgBeginRedelegate") + proto.RegisterType((*MsgBeginRedelegateResponse)(nil), "cosmos.staking.v1beta1.MsgBeginRedelegateResponse") + proto.RegisterType((*MsgUndelegate)(nil), "cosmos.staking.v1beta1.MsgUndelegate") + proto.RegisterType((*MsgUndelegateResponse)(nil), "cosmos.staking.v1beta1.MsgUndelegateResponse") + proto.RegisterType((*MsgCancelUnbondingDelegation)(nil), "cosmos.staking.v1beta1.MsgCancelUnbondingDelegation") + proto.RegisterType((*MsgCancelUnbondingDelegationResponse)(nil), "cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse") + proto.RegisterType((*MsgUpdateParams)(nil), "cosmos.staking.v1beta1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "cosmos.staking.v1beta1.MsgUpdateParamsResponse") + proto.RegisterType((*MsgUnbondValidator)(nil), "cosmos.staking.v1beta1.MsgUnbondValidator") + proto.RegisterType((*MsgUnbondValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgUnbondValidatorResponse") + proto.RegisterType((*MsgTokenizeShares)(nil), "cosmos.staking.v1beta1.MsgTokenizeShares") + proto.RegisterType((*MsgTokenizeSharesResponse)(nil), "cosmos.staking.v1beta1.MsgTokenizeSharesResponse") + proto.RegisterType((*MsgRedeemTokensForShares)(nil), "cosmos.staking.v1beta1.MsgRedeemTokensForShares") + proto.RegisterType((*MsgRedeemTokensForSharesResponse)(nil), "cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse") + proto.RegisterType((*MsgTransferTokenizeShareRecord)(nil), "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord") + proto.RegisterType((*MsgTransferTokenizeShareRecordResponse)(nil), "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse") + proto.RegisterType((*MsgDisableTokenizeShares)(nil), "cosmos.staking.v1beta1.MsgDisableTokenizeShares") + proto.RegisterType((*MsgDisableTokenizeSharesResponse)(nil), "cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse") + proto.RegisterType((*MsgEnableTokenizeShares)(nil), "cosmos.staking.v1beta1.MsgEnableTokenizeShares") + proto.RegisterType((*MsgEnableTokenizeSharesResponse)(nil), "cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse") + proto.RegisterType((*MsgValidatorBond)(nil), "cosmos.staking.v1beta1.MsgValidatorBond") + proto.RegisterType((*MsgValidatorBondResponse)(nil), "cosmos.staking.v1beta1.MsgValidatorBondResponse") } -func (m *MsgCreateValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil +func init() { proto.RegisterFile("cosmos/staking/v1beta1/tx.proto", fileDescriptor_0926ef28816b35ab) } + +var fileDescriptor_0926ef28816b35ab = []byte{ + // 1519 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0x4f, 0x6c, 0x14, 0x55, + 0x18, 0xef, 0x6c, 0xff, 0xd8, 0x3e, 0x6c, 0x4b, 0xa7, 0x2d, 0x6c, 0x07, 0xdc, 0x25, 0x03, 0xd2, + 0x5a, 0xed, 0xae, 0x54, 0x43, 0x71, 0x25, 0x28, 0x4b, 0x21, 0x56, 0xdd, 0x48, 0xa6, 0xc0, 0x41, + 0x4d, 0x36, 0xb3, 0x33, 0xaf, 0xd3, 0x49, 0x77, 0xde, 0x5b, 0xe6, 0xcd, 0x02, 0xeb, 0x89, 0xe8, + 0xc5, 0x78, 0x91, 0x03, 0x26, 0x1c, 0x39, 0x72, 0x24, 0x86, 0xb3, 0x37, 0x13, 0xe2, 0x89, 0x70, + 0x32, 0x1e, 0x8a, 0x81, 0x03, 0x9e, 0xb9, 0x78, 0x35, 0xf3, 0xe6, 0xcd, 0x9b, 0x3f, 0x3b, 0x33, + 0xdd, 0xad, 0xd4, 0xa8, 0x97, 0x76, 0xf7, 0xbd, 0xef, 0xfb, 0xde, 0xf7, 0x7e, 0xbf, 0xef, 0xdf, + 0x5b, 0x50, 0xd4, 0x30, 0xb1, 0x30, 0x29, 0x13, 0x47, 0xdd, 0x32, 0x91, 0x51, 0xbe, 0x76, 0xa2, + 0x01, 0x1d, 0xf5, 0x44, 0xd9, 0xb9, 0x51, 0x6a, 0xd9, 0xd8, 0xc1, 0xe2, 0x01, 0x4f, 0xa0, 0xc4, + 0x04, 0x4a, 0x4c, 0x40, 0x9a, 0x33, 0x30, 0x36, 0x9a, 0xb0, 0x4c, 0xa5, 0x1a, 0xed, 0x8d, 0xb2, + 0x8a, 0x3a, 0x9e, 0x8a, 0x54, 0x8c, 0x6f, 0x39, 0xa6, 0x05, 0x89, 0xa3, 0x5a, 0x2d, 0x26, 0x30, + 0x63, 0x60, 0x03, 0xd3, 0x8f, 0x65, 0xf7, 0x13, 0x5b, 0x9d, 0xf3, 0x4e, 0xaa, 0x7b, 0x1b, 0xec, + 0x58, 0x6f, 0xab, 0xc0, 0xbc, 0x6c, 0xa8, 0x04, 0x72, 0x17, 0x35, 0x6c, 0x22, 0xb6, 0x7f, 0x2c, + 0xe5, 0x16, 0xbe, 0xd3, 0x9e, 0xd4, 0x41, 0x26, 0x65, 0x11, 0x57, 0xc2, 0xfd, 0xc7, 0x36, 0xa6, + 0x54, 0xcb, 0x44, 0xb8, 0x4c, 0xff, 0x7a, 0x4b, 0xf2, 0xed, 0x61, 0x20, 0xd6, 0x88, 0x71, 0xce, + 0x86, 0xaa, 0x03, 0xaf, 0xa8, 0x4d, 0x53, 0x57, 0x1d, 0x6c, 0x8b, 0x17, 0xc1, 0x3e, 0x1d, 0x12, + 0xcd, 0x36, 0x5b, 0x8e, 0x89, 0x51, 0x5e, 0x38, 0x22, 0x2c, 0xec, 0x5b, 0x3e, 0x5a, 0x4a, 0xc6, + 0xa8, 0xb4, 0x1a, 0x88, 0x56, 0xc7, 0x1e, 0x6e, 0x17, 0x07, 0xee, 0x3d, 0xbf, 0xbf, 0x28, 0x28, + 0x61, 0x13, 0xa2, 0x02, 0x80, 0x86, 0x2d, 0xcb, 0x24, 0xc4, 0x35, 0x98, 0xa3, 0x06, 0xe7, 0xd3, + 0x0c, 0x9e, 0xe3, 0x92, 0x8a, 0xea, 0x40, 0x12, 0x36, 0x1a, 0xb2, 0x22, 0x22, 0x30, 0x6d, 0x99, + 0xa8, 0x4e, 0x60, 0x73, 0xa3, 0xae, 0xc3, 0x26, 0x34, 0x54, 0xea, 0xed, 0xe0, 0x11, 0x61, 0x61, + 0xac, 0x7a, 0xc6, 0xd5, 0xf9, 0x6d, 0xbb, 0x78, 0xdc, 0x30, 0x9d, 0xcd, 0x76, 0xa3, 0xa4, 0x61, + 0x8b, 0x81, 0xcd, 0xfe, 0x2d, 0x11, 0x7d, 0xab, 0xec, 0x74, 0x5a, 0x90, 0x94, 0xd6, 0x90, 0xf3, + 0xf8, 0xc1, 0x12, 0x60, 0xde, 0xac, 0x21, 0x27, 0x2f, 0x28, 0x53, 0x96, 0x89, 0xd6, 0x61, 0x73, + 0x63, 0x95, 0x1b, 0x16, 0xcf, 0x83, 0x29, 0x76, 0x0c, 0xb6, 0xeb, 0xaa, 0xae, 0xdb, 0x90, 0x90, + 0xfc, 0x10, 0x3d, 0x2d, 0xff, 0xf8, 0xc1, 0xd2, 0x0c, 0xd3, 0x3f, 0xeb, 0xed, 0xac, 0x3b, 0xb6, + 0x89, 0x0c, 0x65, 0x3f, 0x57, 0x61, 0xeb, 0xae, 0x99, 0x6b, 0x3e, 0xd2, 0xdc, 0xcc, 0xf0, 0x4e, + 0x66, 0xb8, 0x8a, 0x6f, 0xe6, 0x02, 0x18, 0x69, 0xb5, 0x1b, 0x5b, 0xb0, 0x93, 0x1f, 0xa1, 0x68, + 0xce, 0x94, 0xbc, 0x78, 0x2c, 0xf9, 0xf1, 0x58, 0x3a, 0x8b, 0x3a, 0xd5, 0xfc, 0x2f, 0x81, 0x45, + 0xcd, 0xee, 0xb4, 0x1c, 0x5c, 0xba, 0xd8, 0x6e, 0x7c, 0x02, 0x3b, 0x0a, 0xd3, 0x16, 0x2b, 0x60, + 0xf8, 0x9a, 0xda, 0x6c, 0xc3, 0xfc, 0x2b, 0xd4, 0xcc, 0x9c, 0x4f, 0x8a, 0x1b, 0x84, 0x21, 0x46, + 0xcc, 0x08, 0xb7, 0x9e, 0x4a, 0xe5, 0xca, 0xb7, 0x77, 0x8b, 0x03, 0x7f, 0xdc, 0x2d, 0x0e, 0x7c, + 0xfd, 0xfc, 0xfe, 0x62, 0x37, 0x38, 0x74, 0xb5, 0xeb, 0xae, 0xdf, 0x3d, 0xbf, 0xbf, 0xf8, 0x5a, + 0x88, 0x83, 0xee, 0xf8, 0x93, 0x0f, 0x03, 0xa9, 0x7b, 0x55, 0x81, 0xa4, 0x85, 0x11, 0x81, 0xf2, + 0x4f, 0x83, 0x60, 0x7f, 0x8d, 0x18, 0xe7, 0x75, 0xd3, 0xd9, 0xcb, 0x90, 0x4d, 0xe4, 0x29, 0xd7, + 0x37, 0x4f, 0x2a, 0x98, 0x0c, 0x62, 0xb6, 0x6e, 0xab, 0x0e, 0x64, 0x11, 0x7a, 0xaa, 0xc7, 0xe8, + 0x5c, 0x85, 0x5a, 0x28, 0x3a, 0x57, 0xa1, 0xa6, 0x4c, 0x68, 0x91, 0x04, 0x49, 0x4b, 0x84, 0xa1, + 0x3d, 0x4a, 0x84, 0xca, 0x99, 0x08, 0xed, 0x89, 0x04, 0x1f, 0x8a, 0x12, 0x1c, 0xe1, 0x4a, 0x96, + 0x40, 0x3e, 0xbe, 0xc6, 0xc9, 0xbd, 0x9d, 0x03, 0xfb, 0x6a, 0xc4, 0x60, 0xa7, 0xc1, 0xe4, 0xa4, + 0x13, 0x5e, 0x4e, 0xd2, 0xf5, 0x4f, 0xe6, 0x69, 0x30, 0xa2, 0x5a, 0xb8, 0x8d, 0x1c, 0xca, 0x61, + 0xaf, 0xd9, 0xc2, 0x74, 0x2a, 0xef, 0x65, 0xa7, 0x8b, 0x8b, 0xdb, 0x81, 0x28, 0x6e, 0x3e, 0x0c, + 0xf2, 0x2c, 0x98, 0x0e, 0x7d, 0xe5, 0x68, 0xfd, 0x99, 0xa3, 0xf5, 0xbb, 0x0a, 0x0d, 0x13, 0x29, + 0x50, 0x7f, 0xc9, 0xa0, 0x7d, 0x0a, 0x66, 0x03, 0xd0, 0x88, 0xad, 0xf5, 0x0c, 0xdc, 0x34, 0x57, + 0x5b, 0xb7, 0xb5, 0x44, 0x6b, 0x3a, 0x71, 0xb8, 0xb5, 0xc1, 0x9e, 0xad, 0xad, 0x12, 0xa7, 0x9b, + 0x89, 0xa1, 0x5d, 0x30, 0xf1, 0xe1, 0xce, 0x4c, 0xc4, 0x4a, 0x54, 0x0c, 0x62, 0xb9, 0x45, 0x4b, + 0x54, 0x6c, 0xd5, 0xe7, 0x45, 0x54, 0x68, 0xd2, 0xb7, 0x9a, 0xd0, 0xcd, 0x97, 0xba, 0x3b, 0x18, + 0xb0, 0x8a, 0x24, 0x75, 0x55, 0xe9, 0x4b, 0xfe, 0xd4, 0x50, 0x1d, 0x77, 0xfd, 0xbc, 0xf5, 0xa4, + 0x28, 0x78, 0xbe, 0x4e, 0x04, 0x16, 0x5c, 0x19, 0xf9, 0x4e, 0x0e, 0x8c, 0xd7, 0x88, 0x71, 0x19, + 0xe9, 0xff, 0xc7, 0xdc, 0x78, 0x7f, 0x67, 0x46, 0xf2, 0x51, 0x46, 0x02, 0x20, 0xe4, 0x2d, 0x30, + 0x1b, 0x59, 0xd8, 0x53, 0x1e, 0x9e, 0xe4, 0xc0, 0x61, 0xb7, 0x3b, 0xa9, 0x48, 0x83, 0xcd, 0xcb, + 0xa8, 0x81, 0x91, 0x6e, 0x22, 0x63, 0xa7, 0x39, 0xe1, 0xbf, 0x49, 0x8b, 0x38, 0x0f, 0x26, 0x35, + 0xb7, 0x0d, 0xbb, 0xf0, 0x6d, 0x42, 0xd3, 0xd8, 0xf4, 0xf2, 0x6d, 0x50, 0x99, 0xf0, 0x97, 0x3f, + 0xa2, 0xab, 0x95, 0x8f, 0x77, 0xe6, 0x6f, 0x3e, 0xd6, 0xf4, 0xd3, 0x00, 0x94, 0x8f, 0x83, 0x63, + 0x59, 0xfb, 0xbc, 0xfa, 0xfd, 0x2c, 0x80, 0x49, 0x97, 0xf7, 0x96, 0xae, 0x3a, 0xf0, 0xa2, 0x6a, + 0xab, 0x16, 0x11, 0x4f, 0x82, 0x31, 0xb5, 0xed, 0x6c, 0x62, 0xdb, 0x74, 0x3a, 0x3b, 0x82, 0x1e, + 0x88, 0x8a, 0x67, 0xc1, 0x48, 0x8b, 0x5a, 0x60, 0xc3, 0x69, 0x21, 0x6d, 0x74, 0xf0, 0xce, 0x89, + 0x60, 0xe5, 0x29, 0x56, 0x56, 0xdc, 0xab, 0x07, 0x26, 0xdd, 0x2b, 0x1f, 0x0b, 0x5d, 0xf9, 0x06, + 0x9f, 0xdb, 0x63, 0x3e, 0xcb, 0x73, 0xe0, 0x60, 0x6c, 0x89, 0x5f, 0xf1, 0x32, 0xad, 0xef, 0x1e, + 0x08, 0xc1, 0xb0, 0xf3, 0x41, 0x52, 0x68, 0x78, 0x97, 0x15, 0x5f, 0x6c, 0x17, 0x27, 0x3a, 0xaa, + 0xd5, 0xac, 0xc8, 0x6c, 0x43, 0xee, 0x0e, 0x0a, 0x36, 0x60, 0xc5, 0xcc, 0xf2, 0x43, 0xef, 0xe6, + 0xc0, 0x54, 0x8d, 0x18, 0x97, 0xf0, 0x16, 0x44, 0xe6, 0x57, 0x70, 0x7d, 0x53, 0xb5, 0x21, 0x11, + 0xd7, 0xd2, 0xc3, 0xfa, 0xf0, 0x8b, 0xed, 0x62, 0xde, 0x3b, 0xb4, 0x4b, 0x44, 0x4e, 0x08, 0xed, + 0xb5, 0xf4, 0xd0, 0x0e, 0x99, 0xea, 0x12, 0x49, 0xb8, 0x89, 0xb8, 0xd2, 0x7b, 0x78, 0x0f, 0xb9, + 0x94, 0xf1, 0xc8, 0x5e, 0x06, 0xb3, 0x0e, 0xbb, 0xa0, 0x5e, 0x27, 0xee, 0x15, 0xeb, 0xf8, 0x3a, + 0x82, 0xb6, 0x37, 0x36, 0x29, 0xd3, 0x7c, 0x93, 0x5e, 0xff, 0x33, 0x77, 0xab, 0x32, 0xea, 0x07, + 0xb9, 0x7c, 0x09, 0xcc, 0x75, 0x21, 0xc4, 0xab, 0x4e, 0xe0, 0x93, 0xd0, 0x97, 0x4f, 0xf2, 0x3d, + 0x81, 0x4e, 0x46, 0x6e, 0x43, 0x81, 0x16, 0x35, 0x4e, 0x2e, 0x60, 0xfb, 0xe5, 0xe3, 0x1f, 0x38, + 0x98, 0xeb, 0xcb, 0xc1, 0x10, 0x00, 0x5f, 0x80, 0x23, 0x69, 0x9e, 0xfe, 0x7d, 0x1c, 0xee, 0x08, + 0xa0, 0xe0, 0xc2, 0x6b, 0xab, 0x88, 0x6c, 0x40, 0x3b, 0x02, 0xb3, 0x02, 0x35, 0x6c, 0xeb, 0xe2, + 0x0a, 0xc8, 0xfb, 0x0c, 0x31, 0xf6, 0x6c, 0xba, 0x51, 0x37, 0x75, 0x7a, 0xda, 0x90, 0xc2, 0xe9, + 0x0d, 0xa9, 0xad, 0xe9, 0xe2, 0x01, 0x30, 0x42, 0x20, 0xd2, 0xa1, 0xed, 0x05, 0x9c, 0xc2, 0xbe, + 0x89, 0x87, 0xc0, 0x18, 0x82, 0xd7, 0x59, 0x0c, 0xd0, 0x91, 0x44, 0x19, 0x45, 0xf0, 0x7a, 0x9c, + 0xf8, 0x05, 0x70, 0x3c, 0xdb, 0x33, 0x9e, 0x45, 0x98, 0x72, 0xb9, 0x6a, 0x12, 0xb5, 0xd1, 0x84, + 0x7b, 0x96, 0x4b, 0x21, 0xd7, 0x64, 0x4a, 0x49, 0xe2, 0x81, 0xdc, 0x29, 0x44, 0x4b, 0xcd, 0x79, + 0xf4, 0x4f, 0xf9, 0xd4, 0x02, 0xc5, 0x94, 0xf3, 0x78, 0x94, 0xd4, 0x76, 0xd3, 0xa3, 0x47, 0xfd, + 0x1e, 0xdd, 0xd5, 0x9e, 0x7f, 0x14, 0xe8, 0xeb, 0x90, 0x57, 0xb5, 0x2a, 0x46, 0xfa, 0xbf, 0xb3, + 0x76, 0x85, 0x60, 0xf2, 0x5e, 0x44, 0x11, 0x9f, 0x7d, 0x7c, 0x96, 0x6f, 0x8f, 0x83, 0xc1, 0x1a, + 0x31, 0xc4, 0xab, 0x60, 0x32, 0xfe, 0x3b, 0xcd, 0x62, 0x5a, 0x93, 0xea, 0x7e, 0x3d, 0x4b, 0xcb, + 0xbd, 0xcb, 0x72, 0x6a, 0xb6, 0xc0, 0x78, 0xf4, 0x95, 0xbd, 0x90, 0x61, 0x24, 0x22, 0x29, 0xbd, + 0xdd, 0xab, 0x24, 0x3f, 0xec, 0x4b, 0x30, 0xca, 0x5f, 0x7d, 0x47, 0x33, 0xb4, 0x7d, 0x21, 0xe9, + 0xcd, 0x1e, 0x84, 0xb8, 0xf5, 0xab, 0x60, 0x32, 0xfe, 0x4a, 0xca, 0x42, 0x2f, 0x26, 0x9b, 0x89, + 0x5e, 0xda, 0x23, 0xa0, 0x01, 0x40, 0x68, 0x58, 0x7f, 0x3d, 0xc3, 0x42, 0x20, 0x26, 0x2d, 0xf5, + 0x24, 0xc6, 0xcf, 0xf8, 0x5e, 0x00, 0x73, 0xe9, 0x93, 0xe8, 0xbb, 0x59, 0x9c, 0xa7, 0x69, 0x49, + 0xa7, 0x77, 0xa3, 0xc5, 0x3d, 0xda, 0x04, 0xaf, 0x46, 0x06, 0xb2, 0xf9, 0xac, 0x0b, 0x85, 0x04, + 0xa5, 0x72, 0x8f, 0x82, 0x61, 0x4a, 0xe3, 0x83, 0xd1, 0x62, 0x26, 0x7a, 0x11, 0xd9, 0x4c, 0x4a, + 0x53, 0x26, 0x23, 0x11, 0x81, 0x89, 0x58, 0xd5, 0x7c, 0x23, 0xc3, 0x4a, 0x54, 0x54, 0x3a, 0xd1, + 0xb3, 0x28, 0x3f, 0xef, 0x1b, 0x01, 0xcc, 0x26, 0x4f, 0x03, 0x59, 0xf9, 0x95, 0xa8, 0x21, 0x9d, + 0xea, 0x57, 0x83, 0x7b, 0xf1, 0x83, 0x00, 0x0e, 0x65, 0xf5, 0xe2, 0x93, 0x59, 0x17, 0x4b, 0xd7, + 0x93, 0xce, 0xec, 0x4e, 0x2f, 0x82, 0x4e, 0x72, 0x7f, 0xcd, 0x42, 0x27, 0x51, 0x23, 0x13, 0x9d, + 0xcc, 0x96, 0x2a, 0xde, 0x14, 0xc0, 0x4c, 0x62, 0x43, 0xcd, 0x0a, 0xe8, 0x24, 0x05, 0x69, 0xa5, + 0x4f, 0x85, 0x70, 0x9d, 0x8e, 0xf6, 0xbb, 0xac, 0x3a, 0x1d, 0x91, 0xcc, 0xac, 0xd3, 0x89, 0xfd, + 0x48, 0x1a, 0xbe, 0xe9, 0xbe, 0x7a, 0xaa, 0x17, 0x1e, 0x3e, 0x2d, 0x08, 0x8f, 0x9e, 0x16, 0x84, + 0xdf, 0x9f, 0x16, 0x84, 0x5b, 0xcf, 0x0a, 0x03, 0x8f, 0x9e, 0x15, 0x06, 0x7e, 0x7d, 0x56, 0x18, + 0xf8, 0xfc, 0xad, 0xcc, 0x5f, 0x1a, 0x83, 0x67, 0x10, 0xfd, 0xcd, 0xb1, 0x31, 0x42, 0xbb, 0xfb, + 0x3b, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xda, 0x6d, 0x3b, 0x00, 0xa3, 0x19, 0x00, 0x00, } -func (m *MsgEditValidator) 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 +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // CreateValidator defines a method for creating a new validator. + CreateValidator(ctx context.Context, in *MsgCreateValidator, opts ...grpc.CallOption) (*MsgCreateValidatorResponse, error) + // EditValidator defines a method for editing an existing validator. + EditValidator(ctx context.Context, in *MsgEditValidator, opts ...grpc.CallOption) (*MsgEditValidatorResponse, error) + // Delegate defines a method for performing a delegation of coins + // from a delegator to a validator. + Delegate(ctx context.Context, in *MsgDelegate, opts ...grpc.CallOption) (*MsgDelegateResponse, error) + // BeginRedelegate defines a method for performing a redelegation + // of coins from a delegator and source validator to a destination validator. + BeginRedelegate(ctx context.Context, in *MsgBeginRedelegate, opts ...grpc.CallOption) (*MsgBeginRedelegateResponse, error) + // Undelegate defines a method for performing an undelegation from a + // delegate and a validator. + Undelegate(ctx context.Context, in *MsgUndelegate, opts ...grpc.CallOption) (*MsgUndelegateResponse, error) + // CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation + // and delegate back to previous validator. + // + // Since: cosmos-sdk 0.46 + CancelUnbondingDelegation(ctx context.Context, in *MsgCancelUnbondingDelegation, opts ...grpc.CallOption) (*MsgCancelUnbondingDelegationResponse, error) + // UpdateParams defines an operation for updating the x/staking module + // parameters. + // Since: cosmos-sdk 0.47 + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) + // UnbondValidator defines a method for performing the status transition for a validator + // from bonded to unbonding + // This allows a validator to stop their services and jail themselves without + // experiencing a slash + UnbondValidator(ctx context.Context, in *MsgUnbondValidator, opts ...grpc.CallOption) (*MsgUnbondValidatorResponse, error) + // TokenizeShares defines a method for tokenizing shares from a validator. + TokenizeShares(ctx context.Context, in *MsgTokenizeShares, opts ...grpc.CallOption) (*MsgTokenizeSharesResponse, error) + // RedeemTokensForShares defines a method for redeeming tokens from a validator for + // shares. + RedeemTokensForShares(ctx context.Context, in *MsgRedeemTokensForShares, opts ...grpc.CallOption) (*MsgRedeemTokensForSharesResponse, error) + // TransferTokenizeShareRecord defines a method to transfer ownership of + // TokenizeShareRecord + TransferTokenizeShareRecord(ctx context.Context, in *MsgTransferTokenizeShareRecord, opts ...grpc.CallOption) (*MsgTransferTokenizeShareRecordResponse, error) + // DisableTokenizeShares defines a method to prevent the tokenization of an addresses stake + DisableTokenizeShares(ctx context.Context, in *MsgDisableTokenizeShares, opts ...grpc.CallOption) (*MsgDisableTokenizeSharesResponse, error) + // EnableTokenizeShares defines a method to re-enable the tokenization of an addresseses stake + // after it has been disabled + EnableTokenizeShares(ctx context.Context, in *MsgEnableTokenizeShares, opts ...grpc.CallOption) (*MsgEnableTokenizeSharesResponse, error) + // ValidatorBond defines a method for performing a validator self-bond + ValidatorBond(ctx context.Context, in *MsgValidatorBond, opts ...grpc.CallOption) (*MsgValidatorBondResponse, error) } -func (m *MsgEditValidator) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +type msgClient struct { + cc grpc1.ClientConn } -func (m *MsgEditValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.MinSelfDelegation != nil { - { - size := m.MinSelfDelegation.Size() - i -= size - if _, err := m.MinSelfDelegation.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.CommissionRate != nil { - { - size := m.CommissionRate.Size() - i -= size - if _, err := m.CommissionRate.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if len(m.ValidatorAddress) > 0 { - i -= len(m.ValidatorAddress) - copy(dAtA[i:], m.ValidatorAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) - i-- - dAtA[i] = 0x12 - } - { - size, err := m.Description.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} } -func (m *MsgEditValidatorResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *msgClient) CreateValidator(ctx context.Context, in *MsgCreateValidator, opts ...grpc.CallOption) (*MsgCreateValidatorResponse, error) { + out := new(MsgCreateValidatorResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/CreateValidator", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil + return out, nil } -func (m *MsgEditValidatorResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (c *msgClient) EditValidator(ctx context.Context, in *MsgEditValidator, opts ...grpc.CallOption) (*MsgEditValidatorResponse, error) { + out := new(MsgEditValidatorResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/EditValidator", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *MsgEditValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil +func (c *msgClient) Delegate(ctx context.Context, in *MsgDelegate, opts ...grpc.CallOption) (*MsgDelegateResponse, error) { + out := new(MsgDelegateResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/Delegate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *MsgDelegate) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *msgClient) BeginRedelegate(ctx context.Context, in *MsgBeginRedelegate, opts ...grpc.CallOption) (*MsgBeginRedelegateResponse, error) { + out := new(MsgBeginRedelegateResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/BeginRedelegate", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil + return out, nil } -func (m *MsgDelegate) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgDelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.ValidatorAddress) > 0 { - i -= len(m.ValidatorAddress) - copy(dAtA[i:], m.ValidatorAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) - i-- - dAtA[i] = 0x12 - } - if len(m.DelegatorAddress) > 0 { - i -= len(m.DelegatorAddress) - copy(dAtA[i:], m.DelegatorAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) - i-- - dAtA[i] = 0xa +func (c *msgClient) Undelegate(ctx context.Context, in *MsgUndelegate, opts ...grpc.CallOption) (*MsgUndelegateResponse, error) { + out := new(MsgUndelegateResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/Undelegate", in, out, opts...) + if err != nil { + return nil, err } - return len(dAtA) - i, nil + return out, nil } -func (m *MsgDelegateResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *msgClient) CancelUnbondingDelegation(ctx context.Context, in *MsgCancelUnbondingDelegation, opts ...grpc.CallOption) (*MsgCancelUnbondingDelegationResponse, error) { + out := new(MsgCancelUnbondingDelegationResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *MsgDelegateResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgDelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil + return out, nil } -func (m *MsgBeginRedelegate) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/UpdateParams", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *MsgBeginRedelegate) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return out, nil } -func (m *MsgBeginRedelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.ValidatorDstAddress) > 0 { - i -= len(m.ValidatorDstAddress) - copy(dAtA[i:], m.ValidatorDstAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorDstAddress))) - i-- - dAtA[i] = 0x1a - } - if len(m.ValidatorSrcAddress) > 0 { - i -= len(m.ValidatorSrcAddress) - copy(dAtA[i:], m.ValidatorSrcAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorSrcAddress))) - i-- - dAtA[i] = 0x12 - } - if len(m.DelegatorAddress) > 0 { - i -= len(m.DelegatorAddress) - copy(dAtA[i:], m.DelegatorAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) - i-- - dAtA[i] = 0xa +func (c *msgClient) UnbondValidator(ctx context.Context, in *MsgUnbondValidator, opts ...grpc.CallOption) (*MsgUnbondValidatorResponse, error) { + out := new(MsgUnbondValidatorResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/UnbondValidator", in, out, opts...) + if err != nil { + return nil, err } - return len(dAtA) - i, nil + return out, nil } -func (m *MsgBeginRedelegateResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *msgClient) TokenizeShares(ctx context.Context, in *MsgTokenizeShares, opts ...grpc.CallOption) (*MsgTokenizeSharesResponse, error) { + out := new(MsgTokenizeSharesResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/TokenizeShares", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil -} - -func (m *MsgBeginRedelegateResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return out, nil } -func (m *MsgBeginRedelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - n8, err8 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CompletionTime):]) - if err8 != nil { - return 0, err8 +func (c *msgClient) RedeemTokensForShares(ctx context.Context, in *MsgRedeemTokensForShares, opts ...grpc.CallOption) (*MsgRedeemTokensForSharesResponse, error) { + out := new(MsgRedeemTokensForSharesResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/RedeemTokensForShares", in, out, opts...) + if err != nil { + return nil, err } - i -= n8 - i = encodeVarintTx(dAtA, i, uint64(n8)) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil + return out, nil } -func (m *MsgUndelegate) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *msgClient) TransferTokenizeShareRecord(ctx context.Context, in *MsgTransferTokenizeShareRecord, opts ...grpc.CallOption) (*MsgTransferTokenizeShareRecordResponse, error) { + out := new(MsgTransferTokenizeShareRecordResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/TransferTokenizeShareRecord", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil + return out, nil } -func (m *MsgUndelegate) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (c *msgClient) DisableTokenizeShares(ctx context.Context, in *MsgDisableTokenizeShares, opts ...grpc.CallOption) (*MsgDisableTokenizeSharesResponse, error) { + out := new(MsgDisableTokenizeSharesResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/DisableTokenizeShares", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *MsgUndelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.ValidatorAddress) > 0 { - i -= len(m.ValidatorAddress) - copy(dAtA[i:], m.ValidatorAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) - i-- - dAtA[i] = 0x12 - } - if len(m.DelegatorAddress) > 0 { - i -= len(m.DelegatorAddress) - copy(dAtA[i:], m.DelegatorAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) - i-- - dAtA[i] = 0xa +func (c *msgClient) EnableTokenizeShares(ctx context.Context, in *MsgEnableTokenizeShares, opts ...grpc.CallOption) (*MsgEnableTokenizeSharesResponse, error) { + out := new(MsgEnableTokenizeSharesResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/EnableTokenizeShares", in, out, opts...) + if err != nil { + return nil, err } - return len(dAtA) - i, nil + return out, nil } -func (m *MsgUndelegateResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) +func (c *msgClient) ValidatorBond(ctx context.Context, in *MsgValidatorBond, opts ...grpc.CallOption) (*MsgValidatorBondResponse, error) { + out := new(MsgValidatorBondResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/ValidatorBond", in, out, opts...) if err != nil { return nil, err } - return dAtA[:n], nil + return out, nil } -func (m *MsgUndelegateResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +// MsgServer is the server API for Msg service. +type MsgServer interface { + // CreateValidator defines a method for creating a new validator. + CreateValidator(context.Context, *MsgCreateValidator) (*MsgCreateValidatorResponse, error) + // EditValidator defines a method for editing an existing validator. + EditValidator(context.Context, *MsgEditValidator) (*MsgEditValidatorResponse, error) + // Delegate defines a method for performing a delegation of coins + // from a delegator to a validator. + Delegate(context.Context, *MsgDelegate) (*MsgDelegateResponse, error) + // BeginRedelegate defines a method for performing a redelegation + // of coins from a delegator and source validator to a destination validator. + BeginRedelegate(context.Context, *MsgBeginRedelegate) (*MsgBeginRedelegateResponse, error) + // Undelegate defines a method for performing an undelegation from a + // delegate and a validator. + Undelegate(context.Context, *MsgUndelegate) (*MsgUndelegateResponse, error) + // CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation + // and delegate back to previous validator. + // + // Since: cosmos-sdk 0.46 + CancelUnbondingDelegation(context.Context, *MsgCancelUnbondingDelegation) (*MsgCancelUnbondingDelegationResponse, error) + // UpdateParams defines an operation for updating the x/staking module + // parameters. + // Since: cosmos-sdk 0.47 + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) + // UnbondValidator defines a method for performing the status transition for a validator + // from bonded to unbonding + // This allows a validator to stop their services and jail themselves without + // experiencing a slash + UnbondValidator(context.Context, *MsgUnbondValidator) (*MsgUnbondValidatorResponse, error) + // TokenizeShares defines a method for tokenizing shares from a validator. + TokenizeShares(context.Context, *MsgTokenizeShares) (*MsgTokenizeSharesResponse, error) + // RedeemTokensForShares defines a method for redeeming tokens from a validator for + // shares. + RedeemTokensForShares(context.Context, *MsgRedeemTokensForShares) (*MsgRedeemTokensForSharesResponse, error) + // TransferTokenizeShareRecord defines a method to transfer ownership of + // TokenizeShareRecord + TransferTokenizeShareRecord(context.Context, *MsgTransferTokenizeShareRecord) (*MsgTransferTokenizeShareRecordResponse, error) + // DisableTokenizeShares defines a method to prevent the tokenization of an addresses stake + DisableTokenizeShares(context.Context, *MsgDisableTokenizeShares) (*MsgDisableTokenizeSharesResponse, error) + // EnableTokenizeShares defines a method to re-enable the tokenization of an addresseses stake + // after it has been disabled + EnableTokenizeShares(context.Context, *MsgEnableTokenizeShares) (*MsgEnableTokenizeSharesResponse, error) + // ValidatorBond defines a method for performing a validator self-bond + ValidatorBond(context.Context, *MsgValidatorBond) (*MsgValidatorBondResponse, error) } -func (m *MsgUndelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - n10, err10 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CompletionTime):]) - if err10 != nil { - return 0, err10 - } - i -= n10 - i = encodeVarintTx(dAtA, i, uint64(n10)) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { } -func (m *MsgCancelUnbondingDelegation) 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 (*UnimplementedMsgServer) CreateValidator(ctx context.Context, req *MsgCreateValidator) (*MsgCreateValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateValidator not implemented") } - -func (m *MsgCancelUnbondingDelegation) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (*UnimplementedMsgServer) EditValidator(ctx context.Context, req *MsgEditValidator) (*MsgEditValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EditValidator not implemented") } - -func (m *MsgCancelUnbondingDelegation) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.CreationHeight != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.CreationHeight)) - i-- - dAtA[i] = 0x20 - } - { - size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.ValidatorAddress) > 0 { - i -= len(m.ValidatorAddress) - copy(dAtA[i:], m.ValidatorAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) - i-- - dAtA[i] = 0x12 - } - if len(m.DelegatorAddress) > 0 { - i -= len(m.DelegatorAddress) - copy(dAtA[i:], m.DelegatorAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil +func (*UnimplementedMsgServer) Delegate(ctx context.Context, req *MsgDelegate) (*MsgDelegateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delegate not implemented") } - -func (m *MsgCancelUnbondingDelegationResponse) 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 (*UnimplementedMsgServer) BeginRedelegate(ctx context.Context, req *MsgBeginRedelegate) (*MsgBeginRedelegateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method BeginRedelegate not implemented") } - -func (m *MsgCancelUnbondingDelegationResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (*UnimplementedMsgServer) Undelegate(ctx context.Context, req *MsgUndelegate) (*MsgUndelegateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Undelegate not implemented") } - -func (m *MsgCancelUnbondingDelegationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil +func (*UnimplementedMsgServer) CancelUnbondingDelegation(ctx context.Context, req *MsgCancelUnbondingDelegation) (*MsgCancelUnbondingDelegationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CancelUnbondingDelegation not implemented") } - -func (m *MsgUpdateParams) 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 (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") } - -func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (*UnimplementedMsgServer) UnbondValidator(ctx context.Context, req *MsgUnbondValidator) (*MsgUnbondValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UnbondValidator not implemented") } - -func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.Authority) > 0 { - i -= len(m.Authority) - copy(dAtA[i:], m.Authority) - i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil +func (*UnimplementedMsgServer) TokenizeShares(ctx context.Context, req *MsgTokenizeShares) (*MsgTokenizeSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenizeShares not implemented") } - -func (m *MsgUpdateParamsResponse) 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 (*UnimplementedMsgServer) RedeemTokensForShares(ctx context.Context, req *MsgRedeemTokensForShares) (*MsgRedeemTokensForSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RedeemTokensForShares not implemented") } - -func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (*UnimplementedMsgServer) TransferTokenizeShareRecord(ctx context.Context, req *MsgTransferTokenizeShareRecord) (*MsgTransferTokenizeShareRecordResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TransferTokenizeShareRecord not implemented") } - -func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil +func (*UnimplementedMsgServer) DisableTokenizeShares(ctx context.Context, req *MsgDisableTokenizeShares) (*MsgDisableTokenizeSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DisableTokenizeShares not implemented") +} +func (*UnimplementedMsgServer) EnableTokenizeShares(ctx context.Context, req *MsgEnableTokenizeShares) (*MsgEnableTokenizeSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EnableTokenizeShares not implemented") +} +func (*UnimplementedMsgServer) ValidatorBond(ctx context.Context, req *MsgValidatorBond) (*MsgValidatorBondResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ValidatorBond not implemented") } -func encodeVarintTx(dAtA []byte, offset int, v uint64) int { - offset -= sovTx(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) } -func (m *MsgCreateValidator) Size() (n int) { - if m == nil { - return 0 + +func _Msg_CreateValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCreateValidator) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - l = m.Description.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.Commission.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.MinSelfDelegation.Size() - n += 1 + l + sovTx(uint64(l)) - l = len(m.DelegatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if interceptor == nil { + return srv.(MsgServer).CreateValidator(ctx, in) } - l = len(m.ValidatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/CreateValidator", } - if m.Pubkey != nil { - l = m.Pubkey.Size() - n += 1 + l + sovTx(uint64(l)) + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CreateValidator(ctx, req.(*MsgCreateValidator)) } - l = m.Value.Size() - n += 1 + l + sovTx(uint64(l)) - return n + return interceptor(ctx, in, info, handler) } -func (m *MsgCreateValidatorResponse) Size() (n int) { - if m == nil { - return 0 +func _Msg_EditValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgEditValidator) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - return n + if interceptor == nil { + return srv.(MsgServer).EditValidator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/EditValidator", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).EditValidator(ctx, req.(*MsgEditValidator)) + } + return interceptor(ctx, in, info, handler) } -func (m *MsgEditValidator) Size() (n int) { - if m == nil { - return 0 +func _Msg_Delegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgDelegate) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - l = m.Description.Size() - n += 1 + l + sovTx(uint64(l)) - l = len(m.ValidatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if interceptor == nil { + return srv.(MsgServer).Delegate(ctx, in) } - if m.CommissionRate != nil { - l = m.CommissionRate.Size() - n += 1 + l + sovTx(uint64(l)) + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/Delegate", } - if m.MinSelfDelegation != nil { - l = m.MinSelfDelegation.Size() - n += 1 + l + sovTx(uint64(l)) + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).Delegate(ctx, req.(*MsgDelegate)) } - return n + return interceptor(ctx, in, info, handler) } -func (m *MsgEditValidatorResponse) Size() (n int) { - if m == nil { - return 0 +func _Msg_BeginRedelegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgBeginRedelegate) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - return n -} - -func (m *MsgDelegate) Size() (n int) { - if m == nil { - return 0 + if interceptor == nil { + return srv.(MsgServer).BeginRedelegate(ctx, in) } - var l int - _ = l - l = len(m.DelegatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/BeginRedelegate", } - l = len(m.ValidatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).BeginRedelegate(ctx, req.(*MsgBeginRedelegate)) } - l = m.Amount.Size() - n += 1 + l + sovTx(uint64(l)) - return n + return interceptor(ctx, in, info, handler) } -func (m *MsgDelegateResponse) Size() (n int) { - if m == nil { - return 0 +func _Msg_Undelegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUndelegate) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - return n + if interceptor == nil { + return srv.(MsgServer).Undelegate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/Undelegate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).Undelegate(ctx, req.(*MsgUndelegate)) + } + return interceptor(ctx, in, info, handler) } -func (m *MsgBeginRedelegate) Size() (n int) { - if m == nil { - return 0 +func _Msg_CancelUnbondingDelegation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCancelUnbondingDelegation) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - l = len(m.DelegatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if interceptor == nil { + return srv.(MsgServer).CancelUnbondingDelegation(ctx, in) } - l = len(m.ValidatorSrcAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation", } - l = len(m.ValidatorDstAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CancelUnbondingDelegation(ctx, req.(*MsgCancelUnbondingDelegation)) } - l = m.Amount.Size() - n += 1 + l + sovTx(uint64(l)) - return n + return interceptor(ctx, in, info, handler) } -func (m *MsgBeginRedelegateResponse) Size() (n int) { - if m == nil { - return 0 +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CompletionTime) - n += 1 + l + sovTx(uint64(l)) - return n + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) } -func (m *MsgUndelegate) Size() (n int) { - if m == nil { - return 0 +func _Msg_UnbondValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUnbondValidator) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - l = len(m.DelegatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if interceptor == nil { + return srv.(MsgServer).UnbondValidator(ctx, in) } - l = len(m.ValidatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/UnbondValidator", } - l = m.Amount.Size() - n += 1 + l + sovTx(uint64(l)) - return n + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UnbondValidator(ctx, req.(*MsgUnbondValidator)) + } + return interceptor(ctx, in, info, handler) } -func (m *MsgUndelegateResponse) Size() (n int) { - if m == nil { - return 0 +func _Msg_TokenizeShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgTokenizeShares) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CompletionTime) - n += 1 + l + sovTx(uint64(l)) - return n + if interceptor == nil { + return srv.(MsgServer).TokenizeShares(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/TokenizeShares", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).TokenizeShares(ctx, req.(*MsgTokenizeShares)) + } + return interceptor(ctx, in, info, handler) } -func (m *MsgCancelUnbondingDelegation) Size() (n int) { - if m == nil { - return 0 +func _Msg_RedeemTokensForShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRedeemTokensForShares) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - l = len(m.DelegatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if interceptor == nil { + return srv.(MsgServer).RedeemTokensForShares(ctx, in) } - l = len(m.ValidatorAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/RedeemTokensForShares", } - l = m.Amount.Size() - n += 1 + l + sovTx(uint64(l)) - if m.CreationHeight != 0 { - n += 1 + sovTx(uint64(m.CreationHeight)) + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RedeemTokensForShares(ctx, req.(*MsgRedeemTokensForShares)) } - return n + return interceptor(ctx, in, info, handler) } -func (m *MsgCancelUnbondingDelegationResponse) Size() (n int) { - if m == nil { - return 0 +func _Msg_TransferTokenizeShareRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgTransferTokenizeShareRecord) + if err := dec(in); err != nil { + return nil, err } - var l int - _ = l - return n + if interceptor == nil { + return srv.(MsgServer).TransferTokenizeShareRecord(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/TransferTokenizeShareRecord", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).TransferTokenizeShareRecord(ctx, req.(*MsgTransferTokenizeShareRecord)) + } + return interceptor(ctx, in, info, handler) } -func (m *MsgUpdateParams) Size() (n int) { - if m == nil { - return 0 +func _Msg_DisableTokenizeShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgDisableTokenizeShares) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).DisableTokenizeShares(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/DisableTokenizeShares", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).DisableTokenizeShares(ctx, req.(*MsgDisableTokenizeShares)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_EnableTokenizeShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgEnableTokenizeShares) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).EnableTokenizeShares(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/EnableTokenizeShares", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).EnableTokenizeShares(ctx, req.(*MsgEnableTokenizeShares)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ValidatorBond_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgValidatorBond) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ValidatorBond(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/ValidatorBond", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ValidatorBond(ctx, req.(*MsgValidatorBond)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "cosmos.staking.v1beta1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateValidator", + Handler: _Msg_CreateValidator_Handler, + }, + { + MethodName: "EditValidator", + Handler: _Msg_EditValidator_Handler, + }, + { + MethodName: "Delegate", + Handler: _Msg_Delegate_Handler, + }, + { + MethodName: "BeginRedelegate", + Handler: _Msg_BeginRedelegate_Handler, + }, + { + MethodName: "Undelegate", + Handler: _Msg_Undelegate_Handler, + }, + { + MethodName: "CancelUnbondingDelegation", + Handler: _Msg_CancelUnbondingDelegation_Handler, + }, + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + { + MethodName: "UnbondValidator", + Handler: _Msg_UnbondValidator_Handler, + }, + { + MethodName: "TokenizeShares", + Handler: _Msg_TokenizeShares_Handler, + }, + { + MethodName: "RedeemTokensForShares", + Handler: _Msg_RedeemTokensForShares_Handler, + }, + { + MethodName: "TransferTokenizeShareRecord", + Handler: _Msg_TransferTokenizeShareRecord_Handler, + }, + { + MethodName: "DisableTokenizeShares", + Handler: _Msg_DisableTokenizeShares_Handler, + }, + { + MethodName: "EnableTokenizeShares", + Handler: _Msg_EnableTokenizeShares_Handler, + }, + { + MethodName: "ValidatorBond", + Handler: _Msg_ValidatorBond_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "cosmos/staking/v1beta1/tx.proto", +} + +func (m *MsgCreateValidator) 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 *MsgCreateValidator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Authority) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + { + size, err := m.Value.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + if m.Pubkey != nil { + { + size, err := m.Pubkey.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0x2a + } + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0x22 + } + { + size := m.MinSelfDelegation.Size() + i -= size + if _, err := m.MinSelfDelegation.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Commission.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Description.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgCreateValidatorResponse) 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 *MsgCreateValidatorResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgEditValidator) 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 *MsgEditValidator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgEditValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.MinSelfDelegation.Size() + i -= size + if _, err := m.MinSelfDelegation.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if m.CommissionRate != nil { + { + size := m.CommissionRate.Size() + i -= size + if _, err := m.CommissionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Description.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgEditValidatorResponse) 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 *MsgEditValidatorResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgEditValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgDelegate) 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 *MsgDelegate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgDelegateResponse) 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 *MsgDelegateResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgBeginRedelegate) 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 *MsgBeginRedelegate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgBeginRedelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.ValidatorDstAddress) > 0 { + i -= len(m.ValidatorDstAddress) + copy(dAtA[i:], m.ValidatorDstAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorDstAddress))) + i-- + dAtA[i] = 0x1a + } + if len(m.ValidatorSrcAddress) > 0 { + i -= len(m.ValidatorSrcAddress) + copy(dAtA[i:], m.ValidatorSrcAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorSrcAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgBeginRedelegateResponse) 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 *MsgBeginRedelegateResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgBeginRedelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n8, err8 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CompletionTime):]) + if err8 != nil { + return 0, err8 + } + i -= n8 + i = encodeVarintTx(dAtA, i, uint64(n8)) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgUndelegate) 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 *MsgUndelegate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUndelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUndelegateResponse) 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 *MsgUndelegateResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUndelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n10, err10 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CompletionTime):]) + if err10 != nil { + return 0, err10 + } + i -= n10 + i = encodeVarintTx(dAtA, i, uint64(n10)) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgCancelUnbondingDelegation) 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 *MsgCancelUnbondingDelegation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCancelUnbondingDelegation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.CreationHeight != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.CreationHeight)) + i-- + dAtA[i] = 0x20 + } + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgCancelUnbondingDelegationResponse) 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 *MsgCancelUnbondingDelegationResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCancelUnbondingDelegationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParams) 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 *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) 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 *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgUnbondValidator) 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 *MsgUnbondValidator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUnbondValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUnbondValidatorResponse) 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 *MsgUnbondValidatorResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUnbondValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgTokenizeShares) 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 *MsgTokenizeShares) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgTokenizeShares) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokenizedShareOwner) > 0 { + i -= len(m.TokenizedShareOwner) + copy(dAtA[i:], m.TokenizedShareOwner) + i = encodeVarintTx(dAtA, i, uint64(len(m.TokenizedShareOwner))) + i-- + dAtA[i] = 0x22 + } + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgTokenizeSharesResponse) 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 *MsgTokenizeSharesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgTokenizeSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgRedeemTokensForShares) 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 *MsgRedeemTokensForShares) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRedeemTokensForShares) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRedeemTokensForSharesResponse) 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 *MsgRedeemTokensForSharesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRedeemTokensForSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgTransferTokenizeShareRecord) 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 *MsgTransferTokenizeShareRecord) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgTransferTokenizeShareRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NewOwner) > 0 { + i -= len(m.NewOwner) + copy(dAtA[i:], m.NewOwner) + i = encodeVarintTx(dAtA, i, uint64(len(m.NewOwner))) + i-- + dAtA[i] = 0x1a + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTx(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0x12 + } + if m.TokenizeShareRecordId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.TokenizeShareRecordId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *MsgTransferTokenizeShareRecordResponse) 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 *MsgTransferTokenizeShareRecordResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgTransferTokenizeShareRecordResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgDisableTokenizeShares) 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 *MsgDisableTokenizeShares) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDisableTokenizeShares) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgDisableTokenizeSharesResponse) 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 *MsgDisableTokenizeSharesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDisableTokenizeSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgEnableTokenizeShares) 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 *MsgEnableTokenizeShares) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgEnableTokenizeShares) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgEnableTokenizeSharesResponse) 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 *MsgEnableTokenizeSharesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgEnableTokenizeSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n17, err17 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CompletionTime):]) + if err17 != nil { + return 0, err17 + } + i -= n17 + i = encodeVarintTx(dAtA, i, uint64(n17)) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgValidatorBond) 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 *MsgValidatorBond) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgValidatorBond) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgValidatorBondResponse) 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 *MsgValidatorBondResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgValidatorBondResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgCreateValidator) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Description.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.Commission.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.MinSelfDelegation.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.Pubkey != nil { + l = m.Pubkey.Size() + n += 1 + l + sovTx(uint64(l)) + } + l = m.Value.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgCreateValidatorResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgEditValidator) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Description.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.CommissionRate != nil { + l = m.CommissionRate.Size() + n += 1 + l + sovTx(uint64(l)) + } + l = m.MinSelfDelegation.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgEditValidatorResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgDelegate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgDelegateResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgBeginRedelegate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ValidatorSrcAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ValidatorDstAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgBeginRedelegateResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CompletionTime) + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUndelegate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUndelegateResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CompletionTime) + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgCancelUnbondingDelegation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + if m.CreationHeight != 0 { + n += 1 + sovTx(uint64(m.CreationHeight)) + } + return n +} + +func (m *MsgCancelUnbondingDelegationResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgUnbondValidator) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgUnbondValidatorResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgTokenizeShares) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.TokenizedShareOwner) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgTokenizeSharesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgRedeemTokensForShares) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgRedeemTokensForSharesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgTransferTokenizeShareRecord) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TokenizeShareRecordId != 0 { + n += 1 + sovTx(uint64(m.TokenizeShareRecordId)) + } + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.NewOwner) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgTransferTokenizeShareRecordResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgDisableTokenizeShares) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgDisableTokenizeSharesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgEnableTokenizeShares) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgEnableTokenizeSharesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CompletionTime) + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgValidatorBond) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgValidatorBondResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgCreateValidator) 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: MsgCreateValidator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateValidator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Commission", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Commission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinSelfDelegation", 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 + } + if err := m.MinSelfDelegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", 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.DelegatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", 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.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pubkey", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pubkey == nil { + m.Pubkey = &types.Any{} + } + if err := m.Pubkey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *MsgCreateValidatorResponse) 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: MsgCreateValidatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateValidatorResponse: 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 *MsgEditValidator) 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: MsgEditValidator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgEditValidator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", 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.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommissionRate", 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 + } + var v github_com_cosmos_cosmos_sdk_types.Dec + m.CommissionRate = &v + if err := m.CommissionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinSelfDelegation", 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 + } + if err := m.MinSelfDelegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *MsgEditValidatorResponse) 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: MsgEditValidatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgEditValidatorResponse: 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 *MsgDelegate) 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: MsgDelegate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgDelegate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", 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.DelegatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", 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.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *MsgDelegateResponse) 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: MsgDelegateResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgDelegateResponse: 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 *MsgBeginRedelegate) 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: MsgBeginRedelegate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgBeginRedelegate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", 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.DelegatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorSrcAddress", 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.ValidatorSrcAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorDstAddress", 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.ValidatorDstAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *MsgBeginRedelegateResponse) 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: MsgBeginRedelegateResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgBeginRedelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CompletionTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 + } } - l = m.Params.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} -func (m *MsgUpdateParamsResponse) Size() (n int) { - if m == nil { - return 0 + if iNdEx > l { + return io.ErrUnexpectedEOF } - var l int - _ = l - return n + return nil } +func (m *MsgUndelegate) 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: MsgUndelegate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUndelegate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", 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.DelegatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", 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.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 + } + } -func sovTx(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozTx(x uint64) (n int) { - return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil } -func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error { +func (m *MsgUndelegateResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1880,15 +4574,15 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgCreateValidator: wiretype end group for non-group") + return fmt.Errorf("proto: MsgUndelegateResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgCreateValidator: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgUndelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1915,15 +4609,97 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CompletionTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *MsgCancelUnbondingDelegation) 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: MsgCancelUnbondingDelegation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCancelUnbondingDelegation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", 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.DelegatorAddress = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Commission", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -1933,30 +4709,29 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Commission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MinSelfDelegation", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -1966,31 +4741,30 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.MinSelfDelegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CreationHeight", wireType) } - var stringLen uint64 + m.CreationHeight = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -2000,27 +4774,114 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.CreationHeight |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen - if postIndex < 0 { + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCancelUnbondingDelegationResponse) 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: MsgCancelUnbondingDelegationResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCancelUnbondingDelegationResponse: 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 postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParams) 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: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -2048,11 +4909,11 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + m.Authority = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 6: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pubkey", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2079,18 +4940,115 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pubkey == nil { - m.Pubkey = &types.Any{} - } - if err := m.Pubkey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 7: + 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 *MsgUpdateParamsResponse) 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: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: 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 *MsgUnbondValidator) 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: MsgUnbondValidator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUnbondValidator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -2100,24 +5058,23 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -2140,7 +5097,7 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgCreateValidatorResponse) Unmarshal(dAtA []byte) error { +func (m *MsgUnbondValidatorResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2163,10 +5120,10 @@ func (m *MsgCreateValidatorResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgCreateValidatorResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgUnbondValidatorResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgCreateValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgUnbondValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -2190,7 +5147,7 @@ func (m *MsgCreateValidatorResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgEditValidator) Unmarshal(dAtA []byte) error { +func (m *MsgTokenizeShares) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2213,17 +5170,17 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgEditValidator: wiretype end group for non-group") + return fmt.Errorf("proto: MsgTokenizeShares: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgEditValidator: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgTokenizeShares: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -2233,24 +5190,23 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { @@ -2286,9 +5242,9 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CommissionRate", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -2298,31 +5254,28 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - var v github_com_cosmos_cosmos_sdk_types.Dec - m.CommissionRate = &v - if err := m.CommissionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MinSelfDelegation", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TokenizedShareOwner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -2350,11 +5303,7 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var v github_com_cosmos_cosmos_sdk_types.Int - m.MinSelfDelegation = &v - if err := m.MinSelfDelegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.TokenizedShareOwner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -2377,7 +5326,7 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgEditValidatorResponse) Unmarshal(dAtA []byte) error { +func (m *MsgTokenizeSharesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2400,12 +5349,45 @@ func (m *MsgEditValidatorResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgEditValidatorResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgTokenizeSharesResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgEditValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgTokenizeSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -2427,7 +5409,7 @@ func (m *MsgEditValidatorResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgDelegate) Unmarshal(dAtA []byte) error { +func (m *MsgRedeemTokensForShares) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2450,10 +5432,10 @@ func (m *MsgDelegate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgDelegate: wiretype end group for non-group") + return fmt.Errorf("proto: MsgRedeemTokensForShares: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgDelegate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgRedeemTokensForShares: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2489,38 +5471,6 @@ func (m *MsgDelegate) Unmarshal(dAtA []byte) error { m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", 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.ValidatorAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) } @@ -2574,7 +5524,7 @@ func (m *MsgDelegate) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgDelegateResponse) Unmarshal(dAtA []byte) error { +func (m *MsgRedeemTokensForSharesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2597,12 +5547,45 @@ func (m *MsgDelegateResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgDelegateResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgRedeemTokensForSharesResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgDelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgRedeemTokensForSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -2624,7 +5607,7 @@ func (m *MsgDelegateResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error { +func (m *MsgTransferTokenizeShareRecord) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2647,17 +5630,17 @@ func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgBeginRedelegate: wiretype end group for non-group") + return fmt.Errorf("proto: MsgTransferTokenizeShareRecord: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgBeginRedelegate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgTransferTokenizeShareRecord: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenizeShareRecordId", wireType) } - var stringLen uint64 + m.TokenizeShareRecordId = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -2667,27 +5650,14 @@ func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.TokenizeShareRecordId |= 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.DelegatorAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorSrcAddress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -2715,11 +5685,11 @@ func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ValidatorSrcAddress = string(dAtA[iNdEx:postIndex]) + m.Sender = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorDstAddress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NewOwner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -2747,40 +5717,7 @@ func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ValidatorDstAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.NewOwner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -2803,7 +5740,7 @@ func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgBeginRedelegateResponse) Unmarshal(dAtA []byte) error { +func (m *MsgTransferTokenizeShareRecordResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2826,45 +5763,12 @@ func (m *MsgBeginRedelegateResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgBeginRedelegateResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgBeginRedelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CompletionTime, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex + return fmt.Errorf("proto: MsgTransferTokenizeShareRecordResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgTransferTokenizeShareRecordResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -2886,7 +5790,7 @@ func (m *MsgBeginRedelegateResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgUndelegate) Unmarshal(dAtA []byte) error { +func (m *MsgDisableTokenizeShares) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2909,10 +5813,10 @@ func (m *MsgUndelegate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgUndelegate: wiretype end group for non-group") + return fmt.Errorf("proto: MsgDisableTokenizeShares: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgUndelegate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgDisableTokenizeShares: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2947,71 +5851,6 @@ func (m *MsgUndelegate) Unmarshal(dAtA []byte) error { } m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", 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.ValidatorAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -3033,7 +5872,7 @@ func (m *MsgUndelegate) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgUndelegateResponse) Unmarshal(dAtA []byte) error { +func (m *MsgDisableTokenizeSharesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3056,45 +5895,12 @@ func (m *MsgUndelegateResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgUndelegateResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgDisableTokenizeSharesResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgUndelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgDisableTokenizeSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CompletionTime, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -3116,7 +5922,7 @@ func (m *MsgUndelegateResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgCancelUnbondingDelegation) Unmarshal(dAtA []byte) error { +func (m *MsgEnableTokenizeShares) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3139,10 +5945,10 @@ func (m *MsgCancelUnbondingDelegation) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgCancelUnbondingDelegation: wiretype end group for non-group") + return fmt.Errorf("proto: MsgEnableTokenizeShares: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgCancelUnbondingDelegation: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgEnableTokenizeShares: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3177,90 +5983,6 @@ func (m *MsgCancelUnbondingDelegation) Unmarshal(dAtA []byte) error { } m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", 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.ValidatorAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CreationHeight", wireType) - } - m.CreationHeight = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CreationHeight |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -3282,7 +6004,7 @@ func (m *MsgCancelUnbondingDelegation) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgCancelUnbondingDelegationResponse) Unmarshal(dAtA []byte) error { +func (m *MsgEnableTokenizeSharesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3305,12 +6027,45 @@ func (m *MsgCancelUnbondingDelegationResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgCancelUnbondingDelegationResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgEnableTokenizeSharesResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgCancelUnbondingDelegationResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgEnableTokenizeSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CompletionTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -3332,7 +6087,7 @@ func (m *MsgCancelUnbondingDelegationResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { +func (m *MsgValidatorBond) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3355,15 +6110,15 @@ func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + return fmt.Errorf("proto: MsgValidatorBond: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgValidatorBond: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -3391,13 +6146,13 @@ func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Authority = string(dAtA[iNdEx:postIndex]) + m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -3407,24 +6162,23 @@ func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -3447,7 +6201,7 @@ func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { +func (m *MsgValidatorBondResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3470,10 +6224,10 @@ func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgValidatorBondResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgValidatorBondResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: From 16938f1ec6cc36e85e2c3fa1016a03ef1bdf0d35 Mon Sep 17 00:00:00 2001 From: Marius Poke Date: Tue, 28 Nov 2023 13:34:03 +0100 Subject: [PATCH 02/19] chore: LSM changes to distribution (#4) * set min_self_delegation to 0 in TestAminoCodecFullDecodeAndEncode * add WithdrawTokenizeShareRecordReward and WithdrawAllTokenizeShareRecordReward * add methods to distribution/keeper * register distribution msgs * add SimulateMsgWithdrawTokenizeShareRecordReward * LSM distribution queries * LSM distr cli * add BeforeTokenizeShareRecordRemoved hook * add signers to proto distribution * set signers correctly --- api/cosmos/distribution/v1beta1/tx.pulsar.go | 209 +++++++++--------- codec/amino_codec_test.go | 2 +- go.mod | 2 +- proto/cosmos/distribution/v1beta1/tx.proto | 6 + .../distribution/keeper/grpc_query_test.go | 82 +++++++ x/distribution/client/cli/query.go | 46 ++++ x/distribution/client/cli/suite_test.go | 48 ++++ x/distribution/client/cli/tx.go | 72 ++++++ x/distribution/keeper/delegation_test.go | 4 + x/distribution/keeper/grpc_query.go | 40 +++- x/distribution/keeper/hooks.go | 9 + x/distribution/keeper/keeper.go | 142 +++++++++++- x/distribution/keeper/msg_server.go | 48 +++- x/distribution/simulation/operations.go | 79 ++++++- x/distribution/simulation/operations_test.go | 13 +- .../testutil/expected_keepers_mocks.go | 57 +++++ x/distribution/types/codec.go | 4 + x/distribution/types/errors.go | 25 ++- x/distribution/types/events.go | 13 +- x/distribution/types/expected_keepers.go | 5 + x/distribution/types/msg.go | 86 ++++++- x/distribution/types/tx.pb.go | 127 +++++------ x/staking/keeper/tokenize_share_record.go | 151 +++++++++++++ .../keeper/tokenize_share_record_test.go | 14 ++ x/staking/types/errors.go | 100 +++++---- x/staking/types/keys.go | 42 ++++ x/staking/types/tokenize_share_record.go | 22 ++ 27 files changed, 1198 insertions(+), 250 deletions(-) create mode 100644 x/staking/keeper/tokenize_share_record.go create mode 100644 x/staking/keeper/tokenize_share_record_test.go create mode 100644 x/staking/types/tokenize_share_record.go diff --git a/api/cosmos/distribution/v1beta1/tx.pulsar.go b/api/cosmos/distribution/v1beta1/tx.pulsar.go index 10cb6409fd45..2a12102997d4 100644 --- a/api/cosmos/distribution/v1beta1/tx.pulsar.go +++ b/api/cosmos/distribution/v1beta1/tx.pulsar.go @@ -7843,7 +7843,7 @@ var file_cosmos_distribution_v1beta1_tx_proto_rawDesc = []byte{ 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x8a, 0xe7, 0xb0, 0x2a, 0x26, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x2f, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, - 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x22, 0x8c, 0x01, 0x0a, 0x24, 0x4d, 0x73, 0x67, 0x57, 0x69, + 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x22, 0xd8, 0x01, 0x0a, 0x24, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x3d, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, @@ -7851,116 +7851,125 @@ var file_cosmos_distribution_v1beta1_tx_proto_rawDesc = []byte{ 0x3a, 0x22, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x08, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64, 0x3a, 0x08, 0x88, 0xa0, 0x1f, - 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x2e, 0x0a, 0x2c, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x72, 0x0a, 0x27, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, + 0x04, 0x52, 0x08, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64, 0x3a, 0x54, 0x88, 0xa0, 0x1f, + 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x35, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x2f, 0x4d, 0x73, 0x67, + 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x22, 0x2e, 0x0a, 0x2c, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0xc1, 0x01, 0x0a, 0x27, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x3d, 0x0a, + 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xf2, 0xde, 0x1f, 0x14, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x0c, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x57, 0x88, 0xa0, + 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x38, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x2f, 0x4d, 0x73, + 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, 0x31, 0x0a, 0x2f, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x12, 0x3d, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xf2, 0xde, 0x1f, 0x14, 0x79, 0x61, 0x6d, - 0x6c, 0x3a, 0x22, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x22, 0x52, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, - 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x31, 0x0a, 0x2f, 0x4d, 0x73, 0x67, - 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x0a, 0x1d, - 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, - 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xbb, 0x09, - 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x84, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x2e, 0x63, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x0a, 0x1d, 0x4d, 0x73, 0x67, 0x43, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xbb, 0x09, 0x0a, 0x03, 0x4d, 0x73, + 0x67, 0x12, 0x84, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x53, 0x65, 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x93, 0x01, 0x0a, - 0x17, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x1a, 0x3f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x1b, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x3b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x1a, - 0x43, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, - 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x11, 0x46, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x46, 0x75, 0x6e, 0x64, - 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x1a, 0x39, 0x2e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x17, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, + 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x3f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x46, - 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9f, + 0x01, 0x0a, 0x1b, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3b, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, + 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x43, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x81, 0x01, 0x0a, 0x11, 0x46, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, - 0x12, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, - 0x65, 0x6e, 0x64, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x46, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x46, 0x75, 0x6e, 0x64, 0x43, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, + 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x12, 0x43, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, + 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, - 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, - 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0xb1, 0x01, 0x0a, 0x21, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x49, 0x2e, 0x63, + 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0xb1, 0x01, 0x0a, 0x21, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, + 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x49, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0xba, 0x01, 0x0a, 0x24, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x44, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xba, 0x01, 0x0a, 0x24, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x12, 0x44, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x4c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xfe, 0x01, 0x0a, 0x1f, - 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, - 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x40, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, - 0x44, 0x58, 0xaa, 0x02, 0x1b, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0xca, 0x02, 0x1b, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, - 0x27, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x3a, 0x3a, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, - 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa8, 0xe2, 0x1e, 0x01, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x1a, 0x4c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xfe, 0x01, 0x0a, 0x1f, 0x63, 0x6f, 0x6d, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x40, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, + 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x3b, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x44, 0x58, 0xaa, 0x02, + 0x1b, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1b, 0x43, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x27, 0x43, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x5c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x44, + 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0xa8, 0xe2, 0x1e, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/codec/amino_codec_test.go b/codec/amino_codec_test.go index ae5d37d857a3..80fc26aa81b4 100644 --- a/codec/amino_codec_test.go +++ b/codec/amino_codec_test.go @@ -123,7 +123,7 @@ func TestAminoCodecUnpackAnyFails(t *testing.T) { func TestAminoCodecFullDecodeAndEncode(t *testing.T) { // This tx comes from https://github.com/cosmos/cosmos-sdk/issues/8117. - txSigned := `{"type":"cosmos-sdk/StdTx","value":{"msg":[{"type":"cosmos-sdk/MsgCreateValidator","value":{"description":{"moniker":"fulltest","identity":"satoshi","website":"example.com","details":"example inc"},"commission":{"rate":"0.500000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.200000000000000000"},"min_self_delegation":"1000000","delegator_address":"cosmos14pt0q5cwf38zt08uu0n6yrstf3rndzr5057jys","validator_address":"cosmosvaloper14pt0q5cwf38zt08uu0n6yrstf3rndzr52q28gr","pubkey":{"type":"tendermint/PubKeyEd25519","value":"CYrOiM3HtS7uv1B1OAkknZnFYSRpQYSYII8AtMMtev0="},"value":{"denom":"umuon","amount":"700000000"}}}],"fee":{"amount":[{"denom":"umuon","amount":"6000"}],"gas":"160000"},"signatures":[{"pub_key":{"type":"tendermint/PubKeySecp256k1","value":"AwAOXeWgNf1FjMaayrSnrOOKz+Fivr6DiI/i0x0sZCHw"},"signature":"RcnfS/u2yl7uIShTrSUlDWvsXo2p2dYu6WJC8VDVHMBLEQZWc8bsINSCjOnlsIVkUNNe1q/WCA9n3Gy1+0zhYA=="}],"memo":"","timeout_height":"0"}}` + txSigned := `{"type":"cosmos-sdk/StdTx","value":{"msg":[{"type":"cosmos-sdk/MsgCreateValidator","value":{"description":{"moniker":"fulltest","identity":"satoshi","website":"example.com","details":"example inc"},"commission":{"rate":"0.500000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.200000000000000000"},"min_self_delegation":"0","delegator_address":"cosmos14pt0q5cwf38zt08uu0n6yrstf3rndzr5057jys","validator_address":"cosmosvaloper14pt0q5cwf38zt08uu0n6yrstf3rndzr52q28gr","pubkey":{"type":"tendermint/PubKeyEd25519","value":"CYrOiM3HtS7uv1B1OAkknZnFYSRpQYSYII8AtMMtev0="},"value":{"denom":"umuon","amount":"700000000"}}}],"fee":{"amount":[{"denom":"umuon","amount":"6000"}],"gas":"160000"},"signatures":[{"pub_key":{"type":"tendermint/PubKeySecp256k1","value":"AwAOXeWgNf1FjMaayrSnrOOKz+Fivr6DiI/i0x0sZCHw"},"signature":"RcnfS/u2yl7uIShTrSUlDWvsXo2p2dYu6WJC8VDVHMBLEQZWc8bsINSCjOnlsIVkUNNe1q/WCA9n3Gy1+0zhYA=="}],"memo":"","timeout_height":"0"}}` legacyCdc := testutil.MakeTestEncodingConfig(staking.AppModuleBasic{}, auth.AppModuleBasic{}).Amino var tx legacytx.StdTx err := legacyCdc.UnmarshalJSON([]byte(txSigned), &tx) diff --git a/go.mod b/go.mod index eda45f98b6fc..b987c9bccb6b 100644 --- a/go.mod +++ b/go.mod @@ -28,6 +28,7 @@ require ( github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/iavl v0.20.1 github.com/cosmos/ledger-cosmos-go v0.12.4 + github.com/gogo/protobuf v1.3.2 github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.3 github.com/google/gofuzz v1.2.0 @@ -104,7 +105,6 @@ require ( github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect - github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect diff --git a/proto/cosmos/distribution/v1beta1/tx.proto b/proto/cosmos/distribution/v1beta1/tx.proto index 0162bcaf8317..d41f96dd1982 100644 --- a/proto/cosmos/distribution/v1beta1/tx.proto +++ b/proto/cosmos/distribution/v1beta1/tx.proto @@ -181,6 +181,9 @@ message MsgCommunityPoolSpend { // MsgWithdrawTokenizeShareRecordReward withdraws tokenize share rewards for a specific record message MsgWithdrawTokenizeShareRecordReward { + option (cosmos.msg.v1.signer) = "owner_address"; + option (amino.name) = "cosmos-sdk/distr/MsgWithdrawTokenizeShareRecordReward"; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -194,6 +197,9 @@ message MsgWithdrawTokenizeShareRecordRewardResponse {} // MsgWithdrawAllTokenizeShareRecordReward withdraws tokenize share rewards or all // records owned by the designated owner message MsgWithdrawAllTokenizeShareRecordReward { + option (cosmos.msg.v1.signer) = "owner_address"; + option (amino.name) = "cosmos-sdk/distr/MsgWithdrawAllTokenizeShareRecordReward"; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; diff --git a/tests/integration/distribution/keeper/grpc_query_test.go b/tests/integration/distribution/keeper/grpc_query_test.go index d3c6c7bdef4d..b9841a328720 100644 --- a/tests/integration/distribution/keeper/grpc_query_test.go +++ b/tests/integration/distribution/keeper/grpc_query_test.go @@ -19,6 +19,8 @@ import ( "github.com/cosmos/cosmos-sdk/x/distribution/keeper" "github.com/cosmos/cosmos-sdk/x/distribution/testutil" "github.com/cosmos/cosmos-sdk/x/distribution/types" + mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" + minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" "github.com/cosmos/cosmos-sdk/x/staking" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" stakingtestutil "github.com/cosmos/cosmos-sdk/x/staking/testutil" @@ -35,6 +37,7 @@ type KeeperTestSuite struct { interfaceRegistry codectypes.InterfaceRegistry bankKeeper bankkeeper.Keeper + mintKeeper mintkeeper.Keeper distrKeeper keeper.Keeper stakingKeeper *stakingkeeper.Keeper msgServer types.MsgServer @@ -44,6 +47,7 @@ func (suite *KeeperTestSuite) SetupTest() { app, err := simtestutil.Setup(testutil.AppConfig, &suite.interfaceRegistry, &suite.bankKeeper, + &suite.mintKeeper, &suite.distrKeeper, &suite.stakingKeeper, ) @@ -673,6 +677,84 @@ func (suite *KeeperTestSuite) TestGRPCCommunityPool() { } } +func (suite *KeeperTestSuite) TestGRPCTokenizeShareRecordReward() { + ctx, queryClient := suite.ctx, suite.queryClient + + addr := simtestutil.AddTestAddrs(suite.bankKeeper, suite.stakingKeeper, ctx, 2, sdk.NewInt(100000000)) + valAddrs := simtestutil.ConvertAddrsToValAddrs(addr) + tstaking := stakingtestutil.NewHelper(suite.T(), ctx, suite.stakingKeeper) + + // create validator with 50% commission + tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) + valPower := int64(100) + tstaking.CreateValidatorWithValPower(valAddrs[0], valConsPk1, valPower, true) + + // end block to bond validator + staking.EndBlocker(ctx, suite.stakingKeeper) + + // next block + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + + // fetch validator and delegation + val := suite.stakingKeeper.Validator(ctx, valAddrs[0]) + del := suite.stakingKeeper.Delegation(ctx, sdk.AccAddress(valAddrs[0]), valAddrs[0]) + + // end period + endingPeriod := suite.distrKeeper.IncrementValidatorPeriod(ctx, val) + + // calculate delegation rewards + suite.distrKeeper.CalculateDelegationRewards(ctx, val, del, endingPeriod) + + // start out block height + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 3) + val = suite.stakingKeeper.Validator(ctx, valAddrs[0]) + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 3) + + // allocate some rewards + initial := suite.stakingKeeper.TokensFromConsensusPower(ctx, 10) + tokens := sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDecFromInt(initial)}} + suite.distrKeeper.AllocateTokensToValidator(ctx, val, tokens) + + // end period + suite.distrKeeper.IncrementValidatorPeriod(ctx, val) + + coins := sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, initial)} + err := suite.mintKeeper.MintCoins(ctx, coins) + suite.Require().NoError(err) + + err = suite.bankKeeper.SendCoinsFromModuleToModule(ctx, minttypes.ModuleName, types.ModuleName, coins) + suite.Require().NoError(err) + // tokenize share amount + delTokens := sdk.NewInt(1000000) + msgServer := stakingkeeper.NewMsgServerImpl(suite.stakingKeeper) + _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &stakingtypes.MsgTokenizeShares{ + DelegatorAddress: sdk.AccAddress(valAddrs[0]).String(), + ValidatorAddress: valAddrs[0].String(), + TokenizedShareOwner: sdk.AccAddress(valAddrs[0]).String(), + Amount: sdk.NewCoin(sdk.DefaultBondDenom, delTokens), + }) + suite.Require().NoError(err) + + staking.EndBlocker(ctx, suite.stakingKeeper) + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + suite.distrKeeper.AllocateTokensToValidator(ctx, val, tokens) + suite.distrKeeper.IncrementValidatorPeriod(ctx, val) + + rewards, err := queryClient.TokenizeShareRecordReward(gocontext.Background(), &types.QueryTokenizeShareRecordRewardRequest{ + OwnerAddress: sdk.AccAddress(valAddrs[0]).String(), + }) + suite.Require().NoError(err) + suite.Require().Equal(&types.QueryTokenizeShareRecordRewardResponse{ + Rewards: []types.TokenizeShareRecordReward{ + { + RecordId: 1, + Reward: sdk.DecCoins{sdk.NewInt64DecCoin("stake", 50000)}, + }, + }, + Total: sdk.DecCoins{sdk.NewInt64DecCoin("stake", 50000)}, + }, rewards) +} + func TestDistributionTestSuite(t *testing.T) { suite.Run(t, new(KeeperTestSuite)) } diff --git a/x/distribution/client/cli/query.go b/x/distribution/client/cli/query.go index 2ffdd5f1158d..e212fdc6f651 100644 --- a/x/distribution/client/cli/query.go +++ b/x/distribution/client/cli/query.go @@ -32,6 +32,7 @@ func GetQueryCmd() *cobra.Command { GetCmdQueryValidatorSlashes(), GetCmdQueryDelegatorRewards(), GetCmdQueryCommunityPool(), + GetCmdQueryTokenizeShareRecordReward(), ) return distQueryCmd @@ -364,3 +365,48 @@ $ %s query distribution community-pool flags.AddQueryFlagsToCmd(cmd) return cmd } + +// GetCmdQueryTokenizeShareRecordReward implements the query tokenize share record rewards +func GetCmdQueryTokenizeShareRecordReward() *cobra.Command { + bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix() + + cmd := &cobra.Command{ + Use: "tokenize-share-record-rewards [owner]", + Args: cobra.ExactArgs(1), + Short: "Query distribution tokenize share record rewards", + Long: strings.TrimSpace( + fmt.Sprintf(`Query the query tokenize share record rewards. + +Example: +$ %s query distribution tokenize-share-record-rewards %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +`, + version.AppName, bech32PrefixAccAddr, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + ownerAddr, err := sdk.AccAddressFromBech32(args[0]) + if err != nil { + return err + } + + res, err := queryClient.TokenizeShareRecordReward( + cmd.Context(), + &types.QueryTokenizeShareRecordRewardRequest{OwnerAddress: ownerAddr.String()}, + ) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + return cmd +} diff --git a/x/distribution/client/cli/suite_test.go b/x/distribution/client/cli/suite_test.go index fce975803fa4..fa426fdadf05 100644 --- a/x/distribution/client/cli/suite_test.go +++ b/x/distribution/client/cli/suite_test.go @@ -678,3 +678,51 @@ func (s *CLITestSuite) TestNewFundCommunityPoolCmd() { }) } } + +func (s *CLITestSuite) TestNewWithdrawAllTokenizeShareRecordRewardCmd() { + val := testutil.CreateKeyringAccounts(s.T(), s.kr, 1) + + testCases := []struct { + name string + args []string + expectErr bool + expectedCode uint32 + respType proto.Message + }{ + { + "valid transaction of withdraw tokenize share record reward", + []string{ + fmt.Sprintf("--%s=%s", flags.FlagFrom, val[0].Address.String()), + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(10))).String()), + }, + false, 0, &sdk.TxResponse{}, + }, + } + + for _, tc := range testCases { + tc := tc + + s.Run(tc.name, func() { + cmd := cli.NewWithdrawAllTokenizeShareRecordRewardCmd() + + out, err := clitestutil.ExecTestCLICmd(s.clientCtx, cmd, tc.args) + if tc.expectErr { + s.Require().Error(err) + } else { + s.Require().NoError(err, out.String()) + s.Require().NoError(s.clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType), out.String()) + + txResp := tc.respType.(*sdk.TxResponse) + s.Require().Equal(tc.expectedCode, txResp.Code, out.String()) + } + }) + } +} + +// This test requires multiple validators, if I add this test to `IntegrationTestSuite` by increasing +// `NumValidators` the existing tests are leading to non-determnism so created new suite for this test. +func (s *CLITestSuite) TestNewWithdrawAllRewardsGenerateOnly() { + // TODO add LSM test +} diff --git a/x/distribution/client/cli/tx.go b/x/distribution/client/cli/tx.go index e1f0312daf1c..1804bf7087a9 100644 --- a/x/distribution/client/cli/tx.go +++ b/x/distribution/client/cli/tx.go @@ -2,6 +2,7 @@ package cli import ( "fmt" + "strconv" "strings" "github.com/spf13/cobra" @@ -40,6 +41,8 @@ func NewTxCmd() *cobra.Command { NewWithdrawAllRewardsCmd(), NewSetWithdrawAddrCmd(), NewFundCommunityPoolCmd(), + NewWithdrawTokenizeShareRecordRewardCmd(), + NewWithdrawAllTokenizeShareRecordRewardCmd(), ) return distTxCmd @@ -254,3 +257,72 @@ $ %s tx distribution fund-community-pool 100uatom --from mykey return cmd } + +// WithdrawAllTokenizeShareRecordReward defines a method to withdraw reward for all owning TokenizeShareRecord +func NewWithdrawAllTokenizeShareRecordRewardCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "withdraw-all-tokenize-share-rewards", + Args: cobra.ExactArgs(0), + Short: "Withdraw reward for all owning TokenizeShareRecord", + Long: strings.TrimSpace( + fmt.Sprintf(`Withdraw reward for all owned TokenizeShareRecord + +Example: +$ %s tx distribution withdraw-tokenize-share-rewards --from mykey +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgWithdrawAllTokenizeShareRecordReward(clientCtx.GetFromAddress()) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// WithdrawTokenizeShareRecordReward defines a method to withdraw reward for an owning TokenizeShareRecord +func NewWithdrawTokenizeShareRecordRewardCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "withdraw-tokenize-share-rewards", + Args: cobra.ExactArgs(1), + Short: "Withdraw reward for an owning TokenizeShareRecord", + Long: strings.TrimSpace( + fmt.Sprintf(`Withdraw reward for an owned TokenizeShareRecord + +Example: +$ %s tx distribution withdraw-tokenize-share-rewards 1 --from mykey +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + recordID, err := strconv.Atoi(args[0]) + if err != nil { + return err + } + + msg := types.NewMsgWithdrawTokenizeShareRecordReward(clientCtx.GetFromAddress(), uint64(recordID)) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/distribution/keeper/delegation_test.go b/x/distribution/keeper/delegation_test.go index 8310f06d1493..a4cd5e959caa 100644 --- a/x/distribution/keeper/delegation_test.go +++ b/x/distribution/keeper/delegation_test.go @@ -98,6 +98,10 @@ func TestCalculateRewardsBasic(t *testing.T) { require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: math.LegacyNewDec(initial / 2)}}, distrKeeper.GetValidatorAccumulatedCommission(ctx, valAddr).Commission) } +func TestWithdrawTokenizeShareRecordReward(t *testing.T) { + // TODO add LSM test +} + func TestCalculateRewardsAfterSlash(t *testing.T) { ctrl := gomock.NewController(t) key := sdk.NewKVStoreKey(disttypes.StoreKey) diff --git a/x/distribution/keeper/grpc_query.go b/x/distribution/keeper/grpc_query.go index 33ef1499b5ea..d0d36421d9da 100644 --- a/x/distribution/keeper/grpc_query.go +++ b/x/distribution/keeper/grpc_query.go @@ -296,9 +296,47 @@ func (k Querier) CommunityPool(c context.Context, req *types.QueryCommunityPoolR // TokenizeShareRecordReward returns estimated amount of reward from tokenize share record ownership func (k Keeper) TokenizeShareRecordReward(c context.Context, req *types.QueryTokenizeShareRecordRewardRequest) (*types.QueryTokenizeShareRecordRewardResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + totalRewards := sdk.DecCoins{} rewards := []types.TokenizeShareRecordReward{} - // TODO add LSM logic + + ownerAddr, err := sdk.AccAddressFromBech32(req.OwnerAddress) + if err != nil { + return nil, err + } + records := k.stakingKeeper.GetTokenizeShareRecordsByOwner(ctx, ownerAddr) + for _, record := range records { + valAddr, err := sdk.ValAddressFromBech32(record.Validator) + if err != nil { + return nil, err + } + + moduleAddr := record.GetModuleAddress() + moduleBalance := k.bankKeeper.GetAllBalances(ctx, moduleAddr) + moduleBalanceDecCoins := sdk.NewDecCoinsFromCoins(moduleBalance...) + + val := k.stakingKeeper.Validator(ctx, valAddr) + del := k.stakingKeeper.Delegation(ctx, moduleAddr, valAddr) + if val != nil && del != nil { + // withdraw rewards + endingPeriod := k.IncrementValidatorPeriod(ctx, val) + recordReward := k.CalculateDelegationRewards(ctx, val, del, endingPeriod) + + rewards = append(rewards, types.TokenizeShareRecordReward{ + RecordId: record.Id, + Reward: recordReward.Add(moduleBalanceDecCoins...), + }) + totalRewards = totalRewards.Add(recordReward...) + } else if !moduleBalance.IsZero() { + rewards = append(rewards, types.TokenizeShareRecordReward{ + RecordId: record.Id, + Reward: moduleBalanceDecCoins, + }) + totalRewards = totalRewards.Add(moduleBalanceDecCoins...) + } + } + return &types.QueryTokenizeShareRecordRewardResponse{ Rewards: rewards, Total: totalRewards, diff --git a/x/distribution/keeper/hooks.go b/x/distribution/keeper/hooks.go index cb8ca0c3f757..1c50cb999d4f 100644 --- a/x/distribution/keeper/hooks.go +++ b/x/distribution/keeper/hooks.go @@ -111,6 +111,15 @@ func (h Hooks) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, f return nil } +// Withdraw rewards before removing record +func (h Hooks) BeforeTokenizeShareRecordRemoved(ctx sdk.Context, recordID uint64) error { + err := h.k.WithdrawSingleShareRecordReward(ctx, recordID) + if err != nil { + h.k.Logger(ctx).Error(err.Error()) + } + return err +} + func (h Hooks) BeforeValidatorModified(_ sdk.Context, _ sdk.ValAddress) error { return nil } diff --git a/x/distribution/keeper/keeper.go b/x/distribution/keeper/keeper.go index 236084a0e681..cb07dd5c0b4e 100644 --- a/x/distribution/keeper/keeper.go +++ b/x/distribution/keeper/keeper.go @@ -165,20 +165,154 @@ func (k Keeper) FundCommunityPool(ctx sdk.Context, amount sdk.Coins, sender sdk. } func (k Keeper) WithdrawSingleShareRecordReward(ctx sdk.Context, recordID uint64) error { - // TODO add LSM logic + record, err := k.stakingKeeper.GetTokenizeShareRecord(ctx, recordID) + if err != nil { + return err + } + + owner, err := sdk.AccAddressFromBech32(record.Owner) + if err != nil { + return err + } + + valAddr, err := sdk.ValAddressFromBech32(record.Validator) + if err != nil { + return err + } + + val := k.stakingKeeper.Validator(ctx, valAddr) + del := k.stakingKeeper.Delegation(ctx, record.GetModuleAddress(), valAddr) + if val != nil && del != nil { + // withdraw rewards into reward module account and send it to reward owner + cacheCtx, write := ctx.CacheContext() + _, err = k.WithdrawDelegationRewards(cacheCtx, record.GetModuleAddress(), valAddr) + if err != nil { + return err + } + write() + } + + // apply changes when the module account has positive balance + balances := k.bankKeeper.GetAllBalances(ctx, record.GetModuleAddress()) + if !balances.Empty() { + err = k.bankKeeper.SendCoins(ctx, record.GetModuleAddress(), owner, balances) + if err != nil { + return err + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeWithdrawTokenizeShareReward, + sdk.NewAttribute(types.AttributeKeyWithdrawAddress, owner.String()), + sdk.NewAttribute(sdk.AttributeKeyAmount, balances.String()), + ), + ) + } return nil } // withdraw reward for owning TokenizeShareRecord func (k Keeper) WithdrawTokenizeShareRecordReward(ctx sdk.Context, ownerAddr sdk.AccAddress, recordID uint64) (sdk.Coins, error) { - rewards := sdk.Coins{} - // TODO add LSM logic + record, err := k.stakingKeeper.GetTokenizeShareRecord(ctx, recordID) + if err != nil { + return nil, err + } + + if record.Owner != ownerAddr.String() { + return nil, types.ErrNotTokenizeShareRecordOwner + } + + valAddr, err := sdk.ValAddressFromBech32(record.Validator) + if err != nil { + return nil, err + } + + val := k.stakingKeeper.Validator(ctx, valAddr) + if val == nil { + return nil, err + } + + del := k.stakingKeeper.Delegation(ctx, record.GetModuleAddress(), valAddr) + if del == nil { + return nil, err + } + + // withdraw rewards into reward module account and send it to reward owner + _, err = k.WithdrawDelegationRewards(ctx, record.GetModuleAddress(), valAddr) + if err != nil { + return nil, err + } + + // apply changes when the module account has positive balance + rewards := k.bankKeeper.GetAllBalances(ctx, record.GetModuleAddress()) + if !rewards.Empty() { + err = k.bankKeeper.SendCoins(ctx, record.GetModuleAddress(), ownerAddr, rewards) + if err != nil { + return nil, err + } + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeWithdrawTokenizeShareReward, + sdk.NewAttribute(types.AttributeKeyWithdrawAddress, ownerAddr.String()), + sdk.NewAttribute(sdk.AttributeKeyAmount, rewards.String()), + ), + ) + return rewards, nil } // withdraw reward for all owning TokenizeShareRecord func (k Keeper) WithdrawAllTokenizeShareRecordReward(ctx sdk.Context, ownerAddr sdk.AccAddress) (sdk.Coins, error) { totalRewards := sdk.Coins{} - // TODO add LSM logic + + records := k.stakingKeeper.GetTokenizeShareRecordsByOwner(ctx, ownerAddr) + + for _, record := range records { + valAddr, err := sdk.ValAddressFromBech32(record.Validator) + if err != nil { + return nil, err + } + + val := k.stakingKeeper.Validator(ctx, valAddr) + if val == nil { + continue + } + + del := k.stakingKeeper.Delegation(ctx, record.GetModuleAddress(), valAddr) + if del == nil { + continue + } + + // withdraw rewards into reward module account and send it to reward owner + cacheCtx, write := ctx.CacheContext() + _, err = k.WithdrawDelegationRewards(cacheCtx, record.GetModuleAddress(), valAddr) + if err != nil { + k.Logger(ctx).Error(err.Error()) + continue + } + + // apply changes when the module account has positive balance + balances := k.bankKeeper.GetAllBalances(cacheCtx, record.GetModuleAddress()) + if !balances.Empty() { + err = k.bankKeeper.SendCoins(cacheCtx, record.GetModuleAddress(), ownerAddr, balances) + if err != nil { + k.Logger(ctx).Error(err.Error()) + continue + } + write() + totalRewards = totalRewards.Add(balances...) + } + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeWithdrawTokenizeShareReward, + sdk.NewAttribute(types.AttributeKeyWithdrawAddress, ownerAddr.String()), + sdk.NewAttribute(sdk.AttributeKeyAmount, totalRewards.String()), + ), + ) + return totalRewards, nil } diff --git a/x/distribution/keeper/msg_server.go b/x/distribution/keeper/msg_server.go index dae5df0fe548..b682cacd720f 100644 --- a/x/distribution/keeper/msg_server.go +++ b/x/distribution/keeper/msg_server.go @@ -161,12 +161,56 @@ func (k msgServer) CommunityPoolSpend(goCtx context.Context, req *types.MsgCommu // WithdrawTokenizeShareRecordReward defines a method to withdraw reward for owning TokenizeShareRecord func (k msgServer) WithdrawTokenizeShareRecordReward(goCtx context.Context, msg *types.MsgWithdrawTokenizeShareRecordReward) (*types.MsgWithdrawTokenizeShareRecordRewardResponse, error) { - // TODO add LSM logic + ctx := sdk.UnwrapSDKContext(goCtx) + + ownerAddr, err := sdk.AccAddressFromBech32(msg.OwnerAddress) + if err != nil { + return nil, err + } + amount, err := k.Keeper.WithdrawTokenizeShareRecordReward(ctx, ownerAddr, msg.RecordId) + if err != nil { + return nil, err + } + + defer func() { + for _, a := range amount { + if a.Amount.IsInt64() { + telemetry.SetGaugeWithLabels( + []string{"tx", "msg", "withdraw_tokenize_share_reward"}, + float32(a.Amount.Int64()), + []metrics.Label{telemetry.NewLabel("denom", a.Denom)}, + ) + } + } + }() + return &types.MsgWithdrawTokenizeShareRecordRewardResponse{}, nil } // WithdrawAllTokenizeShareRecordReward defines a method to withdraw reward for owning TokenizeShareRecord func (k msgServer) WithdrawAllTokenizeShareRecordReward(goCtx context.Context, msg *types.MsgWithdrawAllTokenizeShareRecordReward) (*types.MsgWithdrawAllTokenizeShareRecordRewardResponse, error) { - // TODO add LSM logic + ctx := sdk.UnwrapSDKContext(goCtx) + + ownerAddr, err := sdk.AccAddressFromBech32(msg.OwnerAddress) + if err != nil { + return nil, err + } + amount, err := k.Keeper.WithdrawAllTokenizeShareRecordReward(ctx, ownerAddr) + if err != nil { + return nil, err + } + + defer func() { + for _, a := range amount { + if a.Amount.IsInt64() { + telemetry.SetGaugeWithLabels( + []string{"tx", "msg", "withdraw_all_tokenize_share_reward"}, + float32(a.Amount.Int64()), + []metrics.Label{telemetry.NewLabel("denom", a.Denom)}, + ) + } + } + }() + return &types.MsgWithdrawAllTokenizeShareRecordRewardResponse{}, nil } diff --git a/x/distribution/simulation/operations.go b/x/distribution/simulation/operations.go index 9a5e5de737bf..82319a337b7b 100644 --- a/x/distribution/simulation/operations.go +++ b/x/distribution/simulation/operations.go @@ -19,15 +19,17 @@ import ( // Simulation operation weights constants const ( - OpWeightMsgSetWithdrawAddress = "op_weight_msg_set_withdraw_address" //nolint:gosec - OpWeightMsgWithdrawDelegationReward = "op_weight_msg_withdraw_delegation_reward" //nolint:gosec - OpWeightMsgWithdrawValidatorCommission = "op_weight_msg_withdraw_validator_commission" //nolint:gosec - OpWeightMsgFundCommunityPool = "op_weight_msg_fund_community_pool" //nolint:gosec - - DefaultWeightMsgSetWithdrawAddress int = 50 - DefaultWeightMsgWithdrawDelegationReward int = 50 - DefaultWeightMsgWithdrawValidatorCommission int = 50 - DefaultWeightMsgFundCommunityPool int = 50 + OpWeightMsgSetWithdrawAddress = "op_weight_msg_set_withdraw_address" //nolint:gosec + OpWeightMsgWithdrawDelegationReward = "op_weight_msg_withdraw_delegation_reward" //nolint:gosec + OpWeightMsgWithdrawValidatorCommission = "op_weight_msg_withdraw_validator_commission" //nolint:gosec + OpWeightMsgFundCommunityPool = "op_weight_msg_fund_community_pool" //nolint:gosec + OpWeightMsgWithdrawAllTokenizeShareRecordReward = "op_weight_msg_withdraw_all_tokenize_share_record_reward" //nolint:gosec + + DefaultWeightMsgSetWithdrawAddress int = 50 + DefaultWeightMsgWithdrawDelegationReward int = 50 + DefaultWeightMsgWithdrawValidatorCommission int = 50 + DefaultWeightMsgFundCommunityPool int = 50 + DefaultWeightMsgWithdrawAllTokenizeShareRecordReward int = 50 ) // WeightedOperations returns all the operations from the module with their respective weights @@ -60,6 +62,13 @@ func WeightedOperations(appParams simtypes.AppParams, cdc codec.JSONCodec, ak ty }, ) + var weightMsgWithdrawTokenizeShareRecordReward int + appParams.GetOrGenerate(cdc, OpWeightMsgWithdrawAllTokenizeShareRecordReward, &weightMsgWithdrawTokenizeShareRecordReward, nil, + func(_ *rand.Rand) { + weightMsgWithdrawTokenizeShareRecordReward = DefaultWeightMsgWithdrawAllTokenizeShareRecordReward + }, + ) + interfaceRegistry := codectypes.NewInterfaceRegistry() txConfig := tx.NewTxConfig(codec.NewProtoCodec(interfaceRegistry), tx.DefaultSignModes) @@ -80,6 +89,10 @@ func WeightedOperations(appParams simtypes.AppParams, cdc codec.JSONCodec, ak ty weightMsgFundCommunityPool, SimulateMsgFundCommunityPool(txConfig, ak, bk, k, sk), ), + simulation.NewWeightedOperation( + weightMsgWithdrawTokenizeShareRecordReward, + SimulateMsgWithdrawTokenizeShareRecordReward(txConfig, ak, bk, k, sk), + ), } } @@ -252,3 +265,51 @@ func SimulateMsgFundCommunityPool(txConfig client.TxConfig, ak types.AccountKeep return simulation.GenAndDeliverTx(txCtx, fees) } } + +// SimulateMsgWithdrawTokenizeShareRecordReward simulates MsgWithdrawTokenizeShareRecordReward execution where +// a random account claim tokenize share record rewards. +func SimulateMsgWithdrawTokenizeShareRecordReward(txConfig client.TxConfig, ak types.AccountKeeper, bk types.BankKeeper, _ keeper.Keeper, sk types.StakingKeeper) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + rewardOwner, _ := simtypes.RandomAcc(r, accs) + + records := sk.GetAllTokenizeShareRecords(ctx) + if len(records) > 0 { + record := records[r.Intn(len(records))] + for _, acc := range accs { + if acc.Address.String() == record.Owner { + rewardOwner = acc + break + } + } + } + + // if simaccount.PrivKey == nil, delegation address does not exist in accs. Return error + if rewardOwner.PrivKey == nil { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgWithdrawTokenizeShareRecordReward, "account private key is nil"), nil, nil + } + + msg := types.NewMsgWithdrawAllTokenizeShareRecordReward(rewardOwner.Address) + + account := ak.GetAccount(ctx, rewardOwner.Address) + spendable := bk.SpendableCoins(ctx, account.GetAddress()) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txConfig, + Cdc: nil, + Msg: msg, + MsgType: msg.Type(), + Context: ctx, + SimAccount: rewardOwner, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: spendable, + } + + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/distribution/simulation/operations_test.go b/x/distribution/simulation/operations_test.go index 3f9896287d21..d4b1c219ab1a 100644 --- a/x/distribution/simulation/operations_test.go +++ b/x/distribution/simulation/operations_test.go @@ -48,6 +48,7 @@ func (suite *SimTestSuite) TestWeightedOperations() { {simulation.DefaultWeightMsgWithdrawDelegationReward, types.ModuleName, types.TypeMsgWithdrawDelegatorReward}, {simulation.DefaultWeightMsgWithdrawValidatorCommission, types.ModuleName, types.TypeMsgWithdrawValidatorCommission}, {simulation.DefaultWeightMsgFundCommunityPool, types.ModuleName, types.TypeMsgFundCommunityPool}, + {simulation.DefaultWeightMsgWithdrawAllTokenizeShareRecordReward, types.ModuleName, types.TypeMsgWithdrawAllTokenizeShareRecordReward}, } for i, w := range weightesOps { @@ -80,7 +81,8 @@ func (suite *SimTestSuite) TestSimulateMsgSetWithdrawAddress() { suite.Require().NoError(err) var msg types.MsgSetWithdrawAddress - types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + err = types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + suite.Require().NoError(err) suite.Require().True(operationMsg.OK) suite.Require().Equal("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", msg.DelegatorAddress) @@ -121,7 +123,8 @@ func (suite *SimTestSuite) TestSimulateMsgWithdrawDelegatorReward() { suite.Require().NoError(err) var msg types.MsgWithdrawDelegatorReward - types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + err = types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + suite.Require().NoError(err) suite.Require().True(operationMsg.OK) suite.Require().Equal("cosmosvaloper1l4s054098kk9hmr5753c6k3m2kw65h686d3mhr", msg.ValidatorAddress) @@ -182,7 +185,8 @@ func (suite *SimTestSuite) testSimulateMsgWithdrawValidatorCommission(tokenName suite.Require().NoError(err) var msg types.MsgWithdrawValidatorCommission - types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + err = types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + suite.Require().NoError(err) suite.Require().True(operationMsg.OK) suite.Require().Equal("cosmosvaloper1tnh2q55v8wyygtt9srz5safamzdengsn9dsd7z", msg.ValidatorAddress) @@ -209,7 +213,8 @@ func (suite *SimTestSuite) TestSimulateMsgFundCommunityPool() { suite.Require().NoError(err) var msg types.MsgFundCommunityPool - types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + err = types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + suite.Require().NoError(err) suite.Require().True(operationMsg.OK) suite.Require().Equal("4896096stake", msg.Amount.String()) diff --git a/x/distribution/testutil/expected_keepers_mocks.go b/x/distribution/testutil/expected_keepers_mocks.go index 585d2cb57792..c51a8ec771d0 100644 --- a/x/distribution/testutil/expected_keepers_mocks.go +++ b/x/distribution/testutil/expected_keepers_mocks.go @@ -183,6 +183,20 @@ func (mr *MockBankKeeperMockRecorder) SendCoinsFromModuleToModule(ctx, senderMod return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendCoinsFromModuleToModule", reflect.TypeOf((*MockBankKeeper)(nil).SendCoinsFromModuleToModule), ctx, senderModule, recipientModule, amt) } +// SendCoins mocks base method. +func (m *MockBankKeeper) SendCoins(ctx types.Context, fromAddr types.AccAddress, toAddr types.AccAddress, amt types.Coins) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendCoins", ctx, fromAddr, toAddr, amt) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendCoins indicates an expected call of SendCoins. +func (mr *MockBankKeeperMockRecorder) SendCoins(ctx, fromAddr, toAddr, amt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendCoins", reflect.TypeOf((*MockBankKeeper)(nil).SendCoins), ctx, fromAddr, toAddr, amt) +} + // SpendableCoins mocks base method. func (m *MockBankKeeper) SpendableCoins(ctx types.Context, addr types.AccAddress) types.Coins { m.ctrl.T.Helper() @@ -328,6 +342,49 @@ func (mr *MockStakingKeeperMockRecorder) ValidatorByConsAddr(arg0, arg1 interfac return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ValidatorByConsAddr", reflect.TypeOf((*MockStakingKeeper)(nil).ValidatorByConsAddr), arg0, arg1) } +// GetTokenizeShareRecordsByOwner mocks base method. +func (m *MockStakingKeeper) GetTokenizeShareRecordsByOwner(ctx types.Context, owner types.AccAddress) (tokenizeShareRecords []types1.TokenizeShareRecord) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetTokenizeShareRecordsByOwner", ctx, owner) + ret0, _ := ret[0].([]types1.TokenizeShareRecord) + return ret0 +} + +// GetTokenizeShareRecordsByOwner indicates an expected call of GetTokenizeShareRecordsByOwner. +func (mr *MockStakingKeeperMockRecorder) GetTokenizeShareRecordsByOwner(ctx, owner interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTokenizeShareRecordsByOwner", reflect.TypeOf((*MockStakingKeeper)(nil).GetTokenizeShareRecordsByOwner), ctx, owner) +} + +// GetTokenizeShareRecord mocks base method. +func (m *MockStakingKeeper) GetTokenizeShareRecord(ctx types.Context, id uint64) (tokenizeShareRecord types1.TokenizeShareRecord, err error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetTokenizeShareRecord", ctx, id) + ret0, _ := ret[0].(types1.TokenizeShareRecord) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetTokenizeShareRecord indicates an expected call of GetTokenizeShareRecord. +func (mr *MockStakingKeeperMockRecorder) GetTokenizeShareRecord(ctx, id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTokenizeShareRecord", reflect.TypeOf((*MockStakingKeeper)(nil).GetTokenizeShareRecord), ctx, id) +} + +// GetAllTokenizeShareRecords mocks base method. +func (m *MockStakingKeeper) GetAllTokenizeShareRecords(ctx types.Context) (tokenizeShareRecords []types1.TokenizeShareRecord) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetAllTokenizeShareRecords", ctx) + ret0, _ := ret[0].([]types1.TokenizeShareRecord) + return ret0 +} + +// GetAllTokenizeShareRecords indicates an expected call of GetAllTokenizeShareRecords. +func (mr *MockStakingKeeperMockRecorder) GetAllTokenizeShareRecords(ctx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllTokenizeShareRecords", reflect.TypeOf((*MockStakingKeeper)(nil).GetAllTokenizeShareRecords), ctx) +} + // MockStakingHooks is a mock of StakingHooks interface. type MockStakingHooks struct { ctrl *gomock.Controller diff --git a/x/distribution/types/codec.go b/x/distribution/types/codec.go index 9d5118a938f8..852de74b67f8 100644 --- a/x/distribution/types/codec.go +++ b/x/distribution/types/codec.go @@ -23,6 +23,8 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { legacy.RegisterAminoMsg(cdc, &MsgFundCommunityPool{}, "cosmos-sdk/MsgFundCommunityPool") legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "cosmos-sdk/distribution/MsgUpdateParams") legacy.RegisterAminoMsg(cdc, &MsgCommunityPoolSpend{}, "cosmos-sdk/distr/MsgCommunityPoolSpend") + legacy.RegisterAminoMsg(cdc, &MsgWithdrawTokenizeShareRecordReward{}, "cosmos-sdk/MsgWithdrawTokenizeReward") + legacy.RegisterAminoMsg(cdc, &MsgWithdrawAllTokenizeShareRecordReward{}, "cosmos-sdk/MsgWithdrawAllTokenizeReward") cdc.RegisterConcrete(Params{}, "cosmos-sdk/x/distribution/Params", nil) } @@ -36,6 +38,8 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgFundCommunityPool{}, &MsgUpdateParams{}, &MsgCommunityPoolSpend{}, + &MsgWithdrawTokenizeShareRecordReward{}, + &MsgWithdrawAllTokenizeShareRecordReward{}, ) registry.RegisterImplementations( diff --git a/x/distribution/types/errors.go b/x/distribution/types/errors.go index 147cfd320341..83c254b6ef6b 100644 --- a/x/distribution/types/errors.go +++ b/x/distribution/types/errors.go @@ -6,16 +6,17 @@ import ( // x/distribution module sentinel errors var ( - ErrEmptyDelegatorAddr = sdkerrors.Register(ModuleName, 2, "delegator address is empty") - ErrEmptyWithdrawAddr = sdkerrors.Register(ModuleName, 3, "withdraw address is empty") - ErrEmptyValidatorAddr = sdkerrors.Register(ModuleName, 4, "validator address is empty") - ErrEmptyDelegationDistInfo = sdkerrors.Register(ModuleName, 5, "no delegation distribution info") - ErrNoValidatorDistInfo = sdkerrors.Register(ModuleName, 6, "no validator distribution info") - ErrNoValidatorCommission = sdkerrors.Register(ModuleName, 7, "no validator commission to withdraw") - ErrSetWithdrawAddrDisabled = sdkerrors.Register(ModuleName, 8, "set withdraw address disabled") - ErrBadDistribution = sdkerrors.Register(ModuleName, 9, "community pool does not have sufficient coins to distribute") - ErrInvalidProposalAmount = sdkerrors.Register(ModuleName, 10, "invalid community pool spend proposal amount") - ErrEmptyProposalRecipient = sdkerrors.Register(ModuleName, 11, "invalid community pool spend proposal recipient") - ErrNoValidatorExists = sdkerrors.Register(ModuleName, 12, "validator does not exist") - ErrNoDelegationExists = sdkerrors.Register(ModuleName, 13, "delegation does not exist") + ErrEmptyDelegatorAddr = sdkerrors.Register(ModuleName, 2, "delegator address is empty") + ErrEmptyWithdrawAddr = sdkerrors.Register(ModuleName, 3, "withdraw address is empty") + ErrEmptyValidatorAddr = sdkerrors.Register(ModuleName, 4, "validator address is empty") + ErrEmptyDelegationDistInfo = sdkerrors.Register(ModuleName, 5, "no delegation distribution info") + ErrNoValidatorDistInfo = sdkerrors.Register(ModuleName, 6, "no validator distribution info") + ErrNoValidatorCommission = sdkerrors.Register(ModuleName, 7, "no validator commission to withdraw") + ErrSetWithdrawAddrDisabled = sdkerrors.Register(ModuleName, 8, "set withdraw address disabled") + ErrBadDistribution = sdkerrors.Register(ModuleName, 9, "community pool does not have sufficient coins to distribute") + ErrInvalidProposalAmount = sdkerrors.Register(ModuleName, 10, "invalid community pool spend proposal amount") + ErrEmptyProposalRecipient = sdkerrors.Register(ModuleName, 11, "invalid community pool spend proposal recipient") + ErrNoValidatorExists = sdkerrors.Register(ModuleName, 12, "validator does not exist") + ErrNoDelegationExists = sdkerrors.Register(ModuleName, 13, "delegation does not exist") + ErrNotTokenizeShareRecordOwner = sdkerrors.Register(ModuleName, 14, "not tokenize share record owner") ) diff --git a/x/distribution/types/events.go b/x/distribution/types/events.go index e0ea7069106b..f1ab6b51e163 100644 --- a/x/distribution/types/events.go +++ b/x/distribution/types/events.go @@ -2,12 +2,13 @@ package types // distribution module event types const ( - EventTypeSetWithdrawAddress = "set_withdraw_address" - EventTypeRewards = "rewards" - EventTypeCommission = "commission" - EventTypeWithdrawRewards = "withdraw_rewards" - EventTypeWithdrawCommission = "withdraw_commission" - EventTypeProposerReward = "proposer_reward" + EventTypeSetWithdrawAddress = "set_withdraw_address" + EventTypeRewards = "rewards" + EventTypeCommission = "commission" + EventTypeWithdrawRewards = "withdraw_rewards" + EventTypeWithdrawCommission = "withdraw_commission" + EventTypeWithdrawTokenizeShareReward = "withdraw_tokenize_share_reward" + EventTypeProposerReward = "proposer_reward" AttributeKeyWithdrawAddress = "withdraw_address" AttributeKeyValidator = "validator" diff --git a/x/distribution/types/expected_keepers.go b/x/distribution/types/expected_keepers.go index 94cea333ab06..0ecab454683d 100644 --- a/x/distribution/types/expected_keepers.go +++ b/x/distribution/types/expected_keepers.go @@ -26,6 +26,7 @@ type BankKeeper interface { SendCoinsFromModuleToModule(ctx sdk.Context, senderModule string, recipientModule string, amt sdk.Coins) error SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error BlockedAddr(addr sdk.AccAddress) bool } @@ -49,6 +50,10 @@ type StakingKeeper interface { GetAllSDKDelegations(ctx sdk.Context) []stakingtypes.Delegation GetAllValidators(ctx sdk.Context) (validators []stakingtypes.Validator) GetAllDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddress) []stakingtypes.Delegation + + GetTokenizeShareRecordsByOwner(ctx sdk.Context, owner sdk.AccAddress) (tokenizeShareRecords []stakingtypes.TokenizeShareRecord) + GetTokenizeShareRecord(ctx sdk.Context, id uint64) (tokenizeShareRecord stakingtypes.TokenizeShareRecord, err error) + GetAllTokenizeShareRecords(ctx sdk.Context) (tokenizeShareRecords []stakingtypes.TokenizeShareRecord) } // StakingHooks event hooks for staking validator object (noalias) diff --git a/x/distribution/types/msg.go b/x/distribution/types/msg.go index ee1660db681f..1831f4424a9a 100644 --- a/x/distribution/types/msg.go +++ b/x/distribution/types/msg.go @@ -3,18 +3,21 @@ package types import ( "errors" + "github.com/cosmos/cosmos-sdk/codec/legacy" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) // distribution message types const ( - TypeMsgSetWithdrawAddress = "set_withdraw_address" - TypeMsgWithdrawDelegatorReward = "withdraw_delegator_reward" - TypeMsgWithdrawValidatorCommission = "withdraw_validator_commission" - TypeMsgFundCommunityPool = "fund_community_pool" - TypeMsgUpdateParams = "update_params" - TypeMsgCommunityPoolSpend = "community_pool_spend" + TypeMsgSetWithdrawAddress = "set_withdraw_address" + TypeMsgWithdrawDelegatorReward = "withdraw_delegator_reward" + TypeMsgWithdrawValidatorCommission = "withdraw_validator_commission" + TypeMsgFundCommunityPool = "fund_community_pool" + TypeMsgUpdateParams = "update_params" + TypeMsgCommunityPoolSpend = "community_pool_spend" + TypeMsgWithdrawTokenizeShareRecordReward = "withdraw_tokenize_share_record_reward" + TypeMsgWithdrawAllTokenizeShareRecordReward = "withdraw_all_tokenize_share_record_reward" ) // Verify interface at compile time @@ -24,6 +27,8 @@ var ( _ sdk.Msg = (*MsgWithdrawValidatorCommission)(nil) _ sdk.Msg = (*MsgUpdateParams)(nil) _ sdk.Msg = (*MsgCommunityPoolSpend)(nil) + _ sdk.Msg = (*MsgWithdrawTokenizeShareRecordReward)(nil) + _ sdk.Msg = (*MsgWithdrawAllTokenizeShareRecordReward)(nil) ) func NewMsgSetWithdrawAddress(delAddr, withdrawAddr sdk.AccAddress) *MsgSetWithdrawAddress { @@ -224,3 +229,72 @@ func (msg MsgCommunityPoolSpend) ValidateBasic() error { return msg.Amount.Validate() } + +func NewMsgWithdrawTokenizeShareRecordReward(ownerAddr sdk.AccAddress, recordID uint64) *MsgWithdrawTokenizeShareRecordReward { + return &MsgWithdrawTokenizeShareRecordReward{ + OwnerAddress: ownerAddr.String(), + RecordId: recordID, + } +} + +func (msg MsgWithdrawTokenizeShareRecordReward) Route() string { return ModuleName } +func (msg MsgWithdrawTokenizeShareRecordReward) Type() string { + return TypeMsgWithdrawTokenizeShareRecordReward +} + +// Return address that must sign over msg.GetSignBytes() +func (msg MsgWithdrawTokenizeShareRecordReward) GetSigners() []sdk.AccAddress { + owner, err := sdk.AccAddressFromBech32(msg.OwnerAddress) + if err != nil { + panic(err) + } + return []sdk.AccAddress{owner} +} + +// get the bytes for the message signer to sign on +func (msg MsgWithdrawTokenizeShareRecordReward) GetSignBytes() []byte { + bz := legacy.Cdc.MustMarshalJSON(&msg) + return sdk.MustSortJSON(bz) +} + +// quick validity check +func (msg MsgWithdrawTokenizeShareRecordReward) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.OwnerAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid owner address: %s", err) + } + return nil +} + +func NewMsgWithdrawAllTokenizeShareRecordReward(ownerAddr sdk.AccAddress) *MsgWithdrawAllTokenizeShareRecordReward { + return &MsgWithdrawAllTokenizeShareRecordReward{ + OwnerAddress: ownerAddr.String(), + } +} + +func (msg MsgWithdrawAllTokenizeShareRecordReward) Route() string { return ModuleName } +func (msg MsgWithdrawAllTokenizeShareRecordReward) Type() string { + return TypeMsgWithdrawAllTokenizeShareRecordReward +} + +// Return address that must sign over msg.GetSignBytes() +func (msg MsgWithdrawAllTokenizeShareRecordReward) GetSigners() []sdk.AccAddress { + owner, err := sdk.AccAddressFromBech32(msg.OwnerAddress) + if err != nil { + panic(err) + } + return []sdk.AccAddress{owner} +} + +// get the bytes for the message signer to sign on +func (msg MsgWithdrawAllTokenizeShareRecordReward) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(&msg) + return sdk.MustSortJSON(bz) +} + +// quick validity check +func (msg MsgWithdrawAllTokenizeShareRecordReward) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.OwnerAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid owner address: %s", err) + } + return nil +} diff --git a/x/distribution/types/tx.pb.go b/x/distribution/types/tx.pb.go index 96e297f04ff5..f72244e68b11 100644 --- a/x/distribution/types/tx.pb.go +++ b/x/distribution/types/tx.pb.go @@ -754,69 +754,70 @@ func init() { } var fileDescriptor_ed4f433d965e58ca = []byte{ - // 978 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xf6, 0x34, 0x10, 0xd5, 0xd3, 0xa2, 0x26, 0xab, 0xa0, 0x24, 0x9b, 0xb2, 0x2e, 0xdb, 0x28, - 0x8d, 0xa2, 0x76, 0x57, 0x0e, 0x5f, 0xea, 0x22, 0x84, 0x12, 0xb7, 0x91, 0x22, 0x61, 0x51, 0xad, - 0xf9, 0x90, 0xb8, 0x44, 0x6b, 0xcf, 0xb0, 0x1e, 0xd5, 0xbb, 0xb3, 0xda, 0x19, 0xc7, 0x35, 0x27, - 0x40, 0x1c, 0x10, 0x42, 0x08, 0x95, 0x1f, 0x40, 0x8f, 0x15, 0x17, 0x82, 0xc4, 0x09, 0xfe, 0x40, - 0x2f, 0x48, 0x15, 0x27, 0x4e, 0x05, 0x39, 0x87, 0x20, 0x71, 0x43, 0x70, 0x47, 0xfb, 0xe9, 0x5d, - 0xef, 0xda, 0x6b, 0xf7, 0x83, 0x5e, 0xf2, 0x31, 0xf3, 0xbe, 0xcf, 0x3c, 0xcf, 0x33, 0xef, 0xbc, - 0xaf, 0x0d, 0xd7, 0x5b, 0x94, 0x59, 0x94, 0xa9, 0x88, 0x30, 0xee, 0x92, 0x66, 0x97, 0x13, 0x6a, - 0xab, 0x87, 0xd5, 0x26, 0xe6, 0x46, 0x55, 0xe5, 0xb7, 0x14, 0xc7, 0xa5, 0x9c, 0x0a, 0x6b, 0x41, - 0x94, 0x92, 0x8c, 0x52, 0xc2, 0x28, 0x71, 0xc9, 0xa4, 0x26, 0xf5, 0xe3, 0x54, 0xef, 0xaf, 0x20, - 0x45, 0x94, 0x42, 0xe0, 0xa6, 0xc1, 0x70, 0x0c, 0xd8, 0xa2, 0xc4, 0x0e, 0xf7, 0x57, 0x83, 0xfd, - 0x83, 0x20, 0x31, 0xc4, 0x0f, 0xb6, 0x96, 0xc3, 0x54, 0x8b, 0x99, 0xea, 0x61, 0xd5, 0xfb, 0x15, - 0x6e, 0x2c, 0x1a, 0x16, 0xb1, 0xa9, 0xea, 0xff, 0x0c, 0x97, 0x94, 0x49, 0xfc, 0x53, 0x74, 0xfd, - 0x78, 0xf9, 0x2f, 0x00, 0x9f, 0xaf, 0x33, 0xb3, 0x81, 0xf9, 0xfb, 0x84, 0xb7, 0x91, 0x6b, 0xf4, - 0x76, 0x10, 0x72, 0x31, 0x63, 0xc2, 0x75, 0xb8, 0x88, 0x70, 0x07, 0x9b, 0x06, 0xa7, 0xee, 0x81, - 0x11, 0x2c, 0xae, 0x80, 0x0b, 0x60, 0xb3, 0xbc, 0xbb, 0xf2, 0xeb, 0x8f, 0x57, 0x96, 0x42, 0x8a, - 0x61, 0x78, 0x83, 0xbb, 0xc4, 0x36, 0xf5, 0x85, 0x38, 0x25, 0x82, 0xa9, 0xc1, 0x85, 0x5e, 0x88, - 0x1c, 0xa3, 0x9c, 0x2a, 0x40, 0x39, 0xd7, 0x4b, 0x73, 0xd1, 0xf6, 0x3e, 0xbf, 0x53, 0x29, 0xfd, - 0x79, 0xa7, 0x52, 0xfa, 0xf4, 0xe4, 0x68, 0x2b, 0x4b, 0xeb, 0x8b, 0x93, 0xa3, 0xad, 0x8b, 0x01, - 0xd2, 0x15, 0x86, 0x6e, 0xaa, 0x75, 0x66, 0xd6, 0x29, 0x22, 0x1f, 0xf6, 0x47, 0x34, 0xc9, 0x15, - 0xf8, 0x42, 0xae, 0x58, 0x1d, 0x33, 0x87, 0xda, 0x0c, 0xcb, 0xff, 0x02, 0x28, 0xd6, 0x99, 0x19, - 0x6d, 0x5f, 0x8b, 0x4e, 0xd2, 0x71, 0xcf, 0x70, 0xd1, 0xe3, 0xf2, 0xe4, 0x3a, 0x5c, 0x3c, 0x34, - 0x3a, 0x04, 0xa5, 0x60, 0x8a, 0x4c, 0x59, 0x88, 0x53, 0x22, 0x57, 0xf6, 0x8b, 0x5d, 0xd9, 0x48, - 0xbb, 0x32, 0xa2, 0x8b, 0x50, 0x3b, 0x10, 0x26, 0x7f, 0x05, 0xa0, 0x3c, 0x5e, 0x77, 0x64, 0x8f, - 0xd0, 0x86, 0xf3, 0x86, 0x45, 0xbb, 0x36, 0x5f, 0x01, 0x17, 0xe6, 0x36, 0xcf, 0x6c, 0xaf, 0x86, - 0xe5, 0xa6, 0x78, 0x55, 0x1d, 0x3d, 0x00, 0xa5, 0x46, 0x89, 0xbd, 0xfb, 0xca, 0xbd, 0x07, 0x95, - 0xd2, 0x77, 0xbf, 0x57, 0x36, 0x4d, 0xc2, 0xdb, 0xdd, 0xa6, 0xd2, 0xa2, 0x56, 0x58, 0xd5, 0x6a, - 0x82, 0x13, 0xef, 0x3b, 0x98, 0xf9, 0x09, 0xec, 0xee, 0xc9, 0xd1, 0x16, 0xd0, 0x43, 0x7c, 0xf9, - 0x7b, 0x00, 0xa5, 0x04, 0xa1, 0xf7, 0x22, 0xed, 0x35, 0x6a, 0x59, 0x84, 0x31, 0x42, 0xed, 0x7c, - 0x17, 0xc1, 0xcc, 0x2e, 0xa6, 0x6b, 0x2b, 0x83, 0x98, 0x53, 0x5b, 0x09, 0x52, 0x43, 0x3a, 0xf2, - 0x6d, 0x00, 0x37, 0x26, 0x33, 0x7e, 0x0a, 0x36, 0xfe, 0x03, 0xe0, 0x52, 0x9d, 0x99, 0x7b, 0x5d, - 0x1b, 0x79, 0x3c, 0xba, 0x36, 0xe1, 0xfd, 0x1b, 0x94, 0x76, 0xfe, 0x3f, 0x0a, 0xc2, 0xab, 0xb0, - 0x8c, 0xb0, 0x43, 0x19, 0xe1, 0xd4, 0x2d, 0x2c, 0xf2, 0x61, 0xa8, 0xa6, 0x25, 0xef, 0x65, 0xb8, - 0xee, 0xdd, 0x47, 0x25, 0x7d, 0x1f, 0x19, 0x75, 0xb2, 0x04, 0xcf, 0xe7, 0xad, 0xc7, 0xcf, 0xfc, - 0x17, 0x00, 0xcf, 0xd5, 0x99, 0xf9, 0xae, 0x83, 0x0c, 0x8e, 0x6f, 0x18, 0xae, 0x61, 0x31, 0x8f, - 0xa7, 0xd1, 0xe5, 0x6d, 0xea, 0x12, 0xde, 0x2f, 0x2c, 0xa3, 0x61, 0xa8, 0xb0, 0x07, 0xe7, 0x1d, - 0x1f, 0xc1, 0x17, 0x77, 0x66, 0xfb, 0xa2, 0x32, 0x61, 0x38, 0x28, 0xc1, 0x61, 0xbb, 0x65, 0xcf, - 0xd3, 0xd0, 0xa7, 0x20, 0x5b, 0xd3, 0x7c, 0x9d, 0x31, 0xae, 0xa7, 0xf3, 0x52, 0x42, 0x67, 0xaa, - 0xa1, 0x8f, 0x70, 0x97, 0x57, 0xe1, 0xf2, 0xc8, 0x52, 0x2c, 0xf5, 0xf6, 0x29, 0xbf, 0xc1, 0xa7, - 0x7c, 0x68, 0x38, 0xd8, 0x46, 0x0f, 0x2d, 0xf8, 0x3c, 0x2c, 0xbb, 0xb8, 0x45, 0x1c, 0x82, 0x6d, - 0x1e, 0x5c, 0xa8, 0x3e, 0x5c, 0x48, 0x14, 0xd6, 0xdc, 0x93, 0x2d, 0x2c, 0xed, 0x6a, 0xd6, 0xb0, - 0x8d, 0x51, 0xc3, 0xd4, 0x5c, 0xe9, 0xf2, 0x97, 0x00, 0xae, 0x27, 0xde, 0xea, 0x3b, 0xf4, 0x26, - 0xb6, 0xc9, 0x47, 0xb8, 0xd1, 0x36, 0x5c, 0xac, 0xe3, 0x16, 0xf5, 0x5a, 0x9e, 0xdf, 0xf0, 0xdf, - 0x80, 0xcf, 0xd1, 0x9e, 0x8d, 0x33, 0xfd, 0xe5, 0xef, 0x07, 0x95, 0xa5, 0xbe, 0x61, 0x75, 0x34, - 0x39, 0xb5, 0x2d, 0xeb, 0x67, 0xfd, 0xff, 0xa3, 0x46, 0xbf, 0xe6, 0x5b, 0x45, 0x5d, 0x74, 0x40, - 0x90, 0x6f, 0xd5, 0x33, 0xfa, 0xe9, 0x60, 0x61, 0x1f, 0x69, 0xa7, 0xa3, 0x02, 0x97, 0x15, 0x78, - 0x79, 0x1a, 0x36, 0xf1, 0x9d, 0xba, 0xf0, 0x52, 0x22, 0x7e, 0xa7, 0xd3, 0x79, 0x52, 0x02, 0x12, - 0x1c, 0xab, 0x50, 0x9d, 0xf2, 0xcc, 0x98, 0x66, 0x30, 0x6d, 0xb3, 0xf6, 0x47, 0x01, 0xdb, 0x3f, - 0x97, 0xe1, 0x5c, 0x9d, 0x99, 0xc2, 0x67, 0x00, 0x0a, 0x39, 0x9f, 0x40, 0xb6, 0x27, 0xbe, 0xa4, - 0xdc, 0x41, 0x2e, 0x6a, 0xb3, 0xe7, 0xc4, 0x6d, 0xf9, 0x1b, 0x00, 0x97, 0xc7, 0x4d, 0xfe, 0xd7, - 0x8a, 0x70, 0xc7, 0x24, 0x8a, 0x6f, 0x3e, 0x64, 0x62, 0xcc, 0xea, 0x5b, 0x00, 0xd7, 0x26, 0x8d, - 0xc1, 0xd7, 0xa7, 0x3d, 0x20, 0x27, 0x59, 0xac, 0x3d, 0x42, 0x72, 0xcc, 0xf0, 0x13, 0x00, 0x17, - 0xb3, 0x13, 0xa6, 0x5a, 0x04, 0x9d, 0x49, 0x11, 0xaf, 0xce, 0x9c, 0x12, 0x73, 0x70, 0xe1, 0xd9, - 0x54, 0x37, 0xbf, 0x5c, 0x04, 0x95, 0x8c, 0x16, 0x5f, 0x9e, 0x25, 0x3a, 0x3e, 0xd3, 0x2b, 0xdb, - 0x9c, 0xbe, 0x5a, 0x58, 0xb6, 0xd9, 0x9c, 0xe2, 0xb2, 0x1d, 0xff, 0x8a, 0x84, 0x1f, 0x00, 0x7c, - 0xb1, 0xb8, 0x93, 0xed, 0x4c, 0x7b, 0xd3, 0x63, 0x21, 0xc4, 0xfd, 0x47, 0x86, 0x88, 0x39, 0xff, - 0x04, 0xe0, 0xfa, 0x54, 0xfd, 0xeb, 0xda, 0xb4, 0x67, 0x4e, 0x42, 0x11, 0xdf, 0x7a, 0x1c, 0x28, - 0x11, 0x79, 0xf1, 0xd9, 0x8f, 0xbd, 0x39, 0xb4, 0xfb, 0xf6, 0xdd, 0x81, 0x04, 0xee, 0x0d, 0x24, - 0x70, 0x7f, 0x20, 0x81, 0x3f, 0x06, 0x12, 0xf8, 0xfa, 0x58, 0x2a, 0xdd, 0x3f, 0x96, 0x4a, 0xbf, - 0x1d, 0x4b, 0xa5, 0x0f, 0xaa, 0x13, 0x87, 0xda, 0xad, 0xf4, 0x3c, 0xf7, 0x67, 0x5c, 0x73, 0xde, - 0xff, 0x4a, 0xf6, 0xd2, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa8, 0xa7, 0x9f, 0x2b, 0x84, 0x0e, - 0x00, 0x00, + // 998 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0xcf, 0x6f, 0xdc, 0x44, + 0x14, 0xde, 0x69, 0x20, 0x62, 0xa7, 0x45, 0x4d, 0xac, 0xa0, 0x24, 0x4e, 0xf1, 0x16, 0x37, 0x4a, + 0xa3, 0xa8, 0xb5, 0xb5, 0x81, 0x02, 0x35, 0x42, 0x28, 0x49, 0x1b, 0x29, 0x12, 0x2b, 0x2a, 0xa7, + 0x50, 0x89, 0x4b, 0xe4, 0xdd, 0x19, 0xbc, 0xa3, 0xae, 0x3d, 0x96, 0x67, 0x36, 0xdb, 0xe5, 0x04, + 0x88, 0x03, 0xe2, 0x80, 0x50, 0xf9, 0x03, 0xe8, 0xb1, 0xe2, 0x42, 0x90, 0x38, 0xc1, 0x89, 0x5b, + 0x2f, 0x48, 0x15, 0xa7, 0x9e, 0x0a, 0x4a, 0x0e, 0x41, 0xe2, 0x86, 0xe0, 0x8e, 0xfc, 0x73, 0xed, + 0xb5, 0xd7, 0xde, 0xed, 0x0f, 0x7a, 0x49, 0x76, 0x67, 0xde, 0xfb, 0xe6, 0xfb, 0xbe, 0x79, 0xf3, + 0x66, 0x16, 0x2e, 0xb7, 0x28, 0xb3, 0x28, 0x53, 0x11, 0x61, 0xdc, 0x25, 0xcd, 0x2e, 0x27, 0xd4, + 0x56, 0xf7, 0xeb, 0x4d, 0xcc, 0x8d, 0xba, 0xca, 0x6f, 0x29, 0x8e, 0x4b, 0x39, 0x15, 0x96, 0x82, + 0x28, 0x25, 0x19, 0xa5, 0x84, 0x51, 0xe2, 0x9c, 0x49, 0x4d, 0xea, 0xc7, 0xa9, 0xde, 0xa7, 0x20, + 0x45, 0x94, 0x42, 0xe0, 0xa6, 0xc1, 0x70, 0x0c, 0xd8, 0xa2, 0xc4, 0x0e, 0xe7, 0x17, 0x83, 0xf9, + 0xbd, 0x20, 0x31, 0xc4, 0x0f, 0xa6, 0xe6, 0xc3, 0x54, 0x8b, 0x99, 0xea, 0x7e, 0xdd, 0xfb, 0x17, + 0x4e, 0xcc, 0x1a, 0x16, 0xb1, 0xa9, 0xea, 0xff, 0x0d, 0x87, 0x94, 0x22, 0xfe, 0x29, 0xba, 0x7e, + 0xbc, 0xfc, 0x17, 0x80, 0x2f, 0x35, 0x98, 0xb9, 0x8b, 0xf9, 0x0d, 0xc2, 0xdb, 0xc8, 0x35, 0x7a, + 0x1b, 0x08, 0xb9, 0x98, 0x31, 0xe1, 0x2a, 0x9c, 0x45, 0xb8, 0x83, 0x4d, 0x83, 0x53, 0x77, 0xcf, + 0x08, 0x06, 0x17, 0xc0, 0x59, 0xb0, 0x5a, 0xdd, 0x5c, 0xf8, 0xed, 0xc7, 0x8b, 0x73, 0x21, 0xc5, + 0x30, 0x7c, 0x97, 0xbb, 0xc4, 0x36, 0xf5, 0x99, 0x38, 0x25, 0x82, 0xd9, 0x82, 0x33, 0xbd, 0x10, + 0x39, 0x46, 0x39, 0x51, 0x82, 0x72, 0xba, 0x97, 0xe6, 0xa2, 0x6d, 0x7f, 0x71, 0xa7, 0x56, 0xf9, + 0xf3, 0x4e, 0xad, 0xf2, 0xd9, 0xf1, 0xc1, 0x5a, 0x96, 0xd6, 0x97, 0xc7, 0x07, 0x6b, 0xe7, 0x02, + 0xa4, 0x8b, 0x0c, 0xdd, 0x54, 0x1b, 0xcc, 0x6c, 0x50, 0x44, 0x3e, 0xea, 0x0f, 0x69, 0x92, 0x6b, + 0xf0, 0xe5, 0x5c, 0xb1, 0x3a, 0x66, 0x0e, 0xb5, 0x19, 0x96, 0xff, 0x05, 0x50, 0x6c, 0x30, 0x33, + 0x9a, 0xbe, 0x12, 0xad, 0xa4, 0xe3, 0x9e, 0xe1, 0xa2, 0x27, 0xe5, 0xc9, 0x55, 0x38, 0xbb, 0x6f, + 0x74, 0x08, 0x4a, 0xc1, 0x94, 0x99, 0x32, 0x13, 0xa7, 0x44, 0xae, 0xec, 0x94, 0xbb, 0xb2, 0x92, + 0x76, 0x65, 0x48, 0x17, 0xa1, 0x76, 0x20, 0x4c, 0xfe, 0x0a, 0x40, 0x79, 0xb4, 0xee, 0xc8, 0x1e, + 0xa1, 0x0d, 0xa7, 0x0d, 0x8b, 0x76, 0x6d, 0xbe, 0x00, 0xce, 0x4e, 0xad, 0x9e, 0x5c, 0x5f, 0x0c, + 0xcb, 0x4d, 0xf1, 0xaa, 0x3a, 0x3a, 0x00, 0xca, 0x16, 0x25, 0xf6, 0xe6, 0xa5, 0x7b, 0x0f, 0x6b, + 0x95, 0xef, 0x7e, 0xaf, 0xad, 0x9a, 0x84, 0xb7, 0xbb, 0x4d, 0xa5, 0x45, 0xad, 0xb0, 0xaa, 0xd5, + 0x04, 0x27, 0xde, 0x77, 0x30, 0xf3, 0x13, 0xd8, 0xdd, 0xe3, 0x83, 0x35, 0xa0, 0x87, 0xf8, 0xf2, + 0xf7, 0x00, 0x4a, 0x09, 0x42, 0x1f, 0x44, 0xda, 0xb7, 0xa8, 0x65, 0x11, 0xc6, 0x08, 0xb5, 0xf3, + 0x5d, 0x04, 0x13, 0xbb, 0x98, 0xae, 0xad, 0x0c, 0x62, 0x4e, 0x6d, 0x25, 0x48, 0x0d, 0xe8, 0xc8, + 0xb7, 0x01, 0x5c, 0x29, 0x66, 0xfc, 0x0c, 0x6c, 0xfc, 0x07, 0xc0, 0xb9, 0x06, 0x33, 0xb7, 0xbb, + 0x36, 0xf2, 0x78, 0x74, 0x6d, 0xc2, 0xfb, 0xd7, 0x28, 0xed, 0xfc, 0x7f, 0x14, 0x84, 0xd7, 0x61, + 0x15, 0x61, 0x87, 0x32, 0xc2, 0xa9, 0x5b, 0x5a, 0xe4, 0x83, 0x50, 0x4d, 0x4b, 0xee, 0xcb, 0x60, + 0xdc, 0xdb, 0x8f, 0x5a, 0x7a, 0x3f, 0x32, 0xea, 0x64, 0x09, 0x9e, 0xc9, 0x1b, 0x8f, 0x8f, 0xf9, + 0xaf, 0x00, 0x9e, 0x6e, 0x30, 0xf3, 0x7d, 0x07, 0x19, 0x1c, 0x5f, 0x33, 0x5c, 0xc3, 0x62, 0x1e, + 0x4f, 0xa3, 0xcb, 0xdb, 0xd4, 0x25, 0xbc, 0x5f, 0x5a, 0x46, 0x83, 0x50, 0x61, 0x1b, 0x4e, 0x3b, + 0x3e, 0x82, 0x2f, 0xee, 0xe4, 0xfa, 0x39, 0xa5, 0xe0, 0x72, 0x50, 0x82, 0xc5, 0x36, 0xab, 0x9e, + 0xa7, 0xa1, 0x4f, 0x41, 0xb6, 0xa6, 0xf9, 0x3a, 0x63, 0x5c, 0x4f, 0xe7, 0xf9, 0x84, 0xce, 0x54, + 0x43, 0x1f, 0xe2, 0x2e, 0x2f, 0xc2, 0xf9, 0xa1, 0xa1, 0x58, 0xea, 0xed, 0x13, 0x7e, 0x83, 0x4f, + 0xf9, 0xb0, 0xeb, 0x60, 0x1b, 0x3d, 0xb2, 0xe0, 0x33, 0xb0, 0xea, 0xe2, 0x16, 0x71, 0x08, 0xb6, + 0x79, 0xb0, 0xa1, 0xfa, 0x60, 0x20, 0x51, 0x58, 0x53, 0x4f, 0xb7, 0xb0, 0xb4, 0xcb, 0x59, 0xc3, + 0x56, 0x86, 0x0d, 0x53, 0x73, 0xa5, 0xcb, 0x0f, 0x00, 0x5c, 0x4e, 0x9c, 0xd5, 0xeb, 0xf4, 0x26, + 0xb6, 0xc9, 0xc7, 0x78, 0xb7, 0x6d, 0xb8, 0x58, 0xc7, 0x2d, 0xea, 0xb5, 0x3c, 0xbf, 0xe1, 0xbf, + 0x0d, 0x5f, 0xa4, 0x3d, 0x1b, 0x67, 0xfa, 0xcb, 0xdf, 0x0f, 0x6b, 0x73, 0x7d, 0xc3, 0xea, 0x68, + 0x72, 0x6a, 0x5a, 0xd6, 0x4f, 0xf9, 0xdf, 0xa3, 0x46, 0xbf, 0xe4, 0x5b, 0x45, 0x5d, 0xb4, 0x47, + 0x90, 0x6f, 0xd5, 0x73, 0xfa, 0x0b, 0xc1, 0xc0, 0x0e, 0xd2, 0xae, 0x27, 0x0b, 0x3c, 0xbd, 0x8c, + 0xa7, 0xe5, 0x52, 0x9e, 0x96, 0x52, 0xc6, 0xb2, 0x02, 0x2f, 0x8c, 0x13, 0x17, 0xd7, 0xc7, 0x2f, + 0x00, 0x9e, 0x4f, 0x24, 0x6c, 0x74, 0x3a, 0x4f, 0xcb, 0x0d, 0xed, 0x46, 0xb1, 0xe0, 0x37, 0x8b, + 0x04, 0x17, 0xf1, 0x92, 0xeb, 0x70, 0xdc, 0xd0, 0x58, 0x76, 0xf0, 0x12, 0xc8, 0x96, 0x46, 0x14, + 0xb0, 0xfe, 0x73, 0x15, 0x4e, 0x35, 0x98, 0x29, 0x7c, 0x0e, 0xa0, 0x90, 0xf3, 0x3a, 0x5a, 0x2f, + 0x3c, 0xe5, 0xb9, 0x8f, 0x0c, 0x51, 0x9b, 0x3c, 0x27, 0xbe, 0x32, 0xbe, 0x01, 0x70, 0x7e, 0xd4, + 0xab, 0xe4, 0x8d, 0x32, 0xdc, 0x11, 0x89, 0xe2, 0x3b, 0x8f, 0x98, 0x18, 0xb3, 0xfa, 0x16, 0xc0, + 0xa5, 0xa2, 0x2b, 0xfa, 0xad, 0x71, 0x17, 0xc8, 0x49, 0x16, 0xb7, 0x1e, 0x23, 0x39, 0x66, 0xf8, + 0x29, 0x80, 0xb3, 0xd9, 0xdb, 0xaf, 0x5e, 0x06, 0x9d, 0x49, 0x11, 0x2f, 0x4f, 0x9c, 0x12, 0x73, + 0x70, 0xe1, 0xa9, 0xd4, 0x4d, 0x73, 0xa1, 0x0c, 0x2a, 0x19, 0x2d, 0xbe, 0x36, 0x49, 0x74, 0xbc, + 0xa6, 0x57, 0xb6, 0x39, 0x3d, 0xbf, 0xb4, 0x6c, 0xb3, 0x39, 0xe5, 0x65, 0x3b, 0xfa, 0x14, 0x09, + 0x3f, 0x00, 0xf8, 0x4a, 0x79, 0x97, 0xdd, 0x18, 0x77, 0xa7, 0x47, 0x42, 0x88, 0x3b, 0x8f, 0x0d, + 0x11, 0x73, 0xfe, 0x09, 0xc0, 0xe5, 0xb1, 0xda, 0xe1, 0x95, 0x71, 0xd7, 0x2c, 0x42, 0x11, 0xdf, + 0x7d, 0x12, 0x28, 0x11, 0x79, 0xf1, 0xf9, 0x4f, 0xbc, 0x3b, 0x72, 0xf3, 0xbd, 0xbb, 0x87, 0x12, + 0xb8, 0x77, 0x28, 0x81, 0xfb, 0x87, 0x12, 0xf8, 0xe3, 0x50, 0x02, 0x5f, 0x1f, 0x49, 0x95, 0xfb, + 0x47, 0x52, 0xe5, 0xc1, 0x91, 0x54, 0xf9, 0xb0, 0x5e, 0x78, 0xe1, 0xde, 0x4a, 0xbf, 0x35, 0xfc, + 0xfb, 0xb7, 0x39, 0xed, 0xff, 0x5c, 0x7c, 0xf5, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb6, 0x06, + 0x36, 0xfb, 0x20, 0x0f, 0x00, 0x00, } func (this *MsgSetWithdrawAddressResponse) Equal(that interface{}) bool { diff --git a/x/staking/keeper/tokenize_share_record.go b/x/staking/keeper/tokenize_share_record.go new file mode 100644 index 000000000000..ecde86be0c2f --- /dev/null +++ b/x/staking/keeper/tokenize_share_record.go @@ -0,0 +1,151 @@ +package keeper + +import ( + "fmt" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + gogotypes "github.com/gogo/protobuf/types" + + "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +func (k Keeper) GetLastTokenizeShareRecordID(ctx sdk.Context) uint64 { + store := ctx.KVStore(k.storeKey) + bytes := store.Get(types.LastTokenizeShareRecordIDKey) + if bytes == nil { + return 0 + } + return sdk.BigEndianToUint64(bytes) +} + +func (k Keeper) SetLastTokenizeShareRecordID(ctx sdk.Context, id uint64) { + store := ctx.KVStore(k.storeKey) + store.Set(types.LastTokenizeShareRecordIDKey, sdk.Uint64ToBigEndian(id)) +} + +func (k Keeper) GetTokenizeShareRecord(ctx sdk.Context, id uint64) (tokenizeShareRecord types.TokenizeShareRecord, err error) { + store := ctx.KVStore(k.storeKey) + + bz := store.Get(types.GetTokenizeShareRecordByIndexKey(id)) + if bz == nil { + return tokenizeShareRecord, sdkerrors.Wrap(types.ErrTokenizeShareRecordNotExists, fmt.Sprintf("tokenizeShareRecord %d does not exist", id)) + } + + k.cdc.MustUnmarshal(bz, &tokenizeShareRecord) + return tokenizeShareRecord, nil +} + +func (k Keeper) GetTokenizeShareRecordsByOwner(ctx sdk.Context, owner sdk.AccAddress) (tokenizeShareRecords []types.TokenizeShareRecord) { + store := ctx.KVStore(k.storeKey) + + it := sdk.KVStorePrefixIterator(store, types.GetTokenizeShareRecordIdsByOwnerPrefix(owner)) + defer it.Close() + + for ; it.Valid(); it.Next() { + var id gogotypes.UInt64Value + k.cdc.MustUnmarshal(it.Value(), &id) + + tokenizeShareRecord, err := k.GetTokenizeShareRecord(ctx, id.Value) + if err != nil { + continue + } + tokenizeShareRecords = append(tokenizeShareRecords, tokenizeShareRecord) + } + return +} + +func (k Keeper) GetTokenizeShareRecordByDenom(ctx sdk.Context, denom string) (types.TokenizeShareRecord, error) { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.GetTokenizeShareRecordIDByDenomKey(denom)) + if bz == nil { + return types.TokenizeShareRecord{}, fmt.Errorf("tokenize share record not found from denom: %s", denom) + } + + var id gogotypes.UInt64Value + k.cdc.MustUnmarshal(bz, &id) + + return k.GetTokenizeShareRecord(ctx, id.Value) +} + +func (k Keeper) GetAllTokenizeShareRecords(ctx sdk.Context) (tokenizeShareRecords []types.TokenizeShareRecord) { + store := ctx.KVStore(k.storeKey) + + it := sdk.KVStorePrefixIterator(store, types.TokenizeShareRecordPrefix) + defer it.Close() + + for ; it.Valid(); it.Next() { + var tokenizeShareRecord types.TokenizeShareRecord + k.cdc.MustUnmarshal(it.Value(), &tokenizeShareRecord) + + tokenizeShareRecords = append(tokenizeShareRecords, tokenizeShareRecord) + } + return +} + +func (k Keeper) AddTokenizeShareRecord(ctx sdk.Context, tokenizeShareRecord types.TokenizeShareRecord) error { + if k.hasTokenizeShareRecord(ctx, tokenizeShareRecord.Id) { + return sdkerrors.Wrapf(types.ErrTokenizeShareRecordAlreadyExists, "TokenizeShareRecord already exists: %d", tokenizeShareRecord.Id) + } + + k.setTokenizeShareRecord(ctx, tokenizeShareRecord) + + owner, err := sdk.AccAddressFromBech32(tokenizeShareRecord.Owner) + if err != nil { + return err + } + + k.setTokenizeShareRecordWithOwner(ctx, owner, tokenizeShareRecord.Id) + k.setTokenizeShareRecordWithDenom(ctx, tokenizeShareRecord.GetShareTokenDenom(), tokenizeShareRecord.Id) + + return nil +} + +func (k Keeper) DeleteTokenizeShareRecord(ctx sdk.Context, recordID uint64) error { + record, err := k.GetTokenizeShareRecord(ctx, recordID) + if err != nil { + return err + } + owner, err := sdk.AccAddressFromBech32(record.Owner) + if err != nil { + return err + } + + store := ctx.KVStore(k.storeKey) + store.Delete(types.GetTokenizeShareRecordByIndexKey(recordID)) + store.Delete(types.GetTokenizeShareRecordIDByOwnerAndIDKey(owner, recordID)) + store.Delete(types.GetTokenizeShareRecordIDByDenomKey(record.GetShareTokenDenom())) + return nil +} + +func (k Keeper) hasTokenizeShareRecord(ctx sdk.Context, id uint64) bool { + store := ctx.KVStore(k.storeKey) + return store.Has(types.GetTokenizeShareRecordByIndexKey(id)) +} + +func (k Keeper) setTokenizeShareRecord(ctx sdk.Context, tokenizeShareRecord types.TokenizeShareRecord) { + store := ctx.KVStore(k.storeKey) + bz := k.cdc.MustMarshal(&tokenizeShareRecord) + + store.Set(types.GetTokenizeShareRecordByIndexKey(tokenizeShareRecord.Id), bz) +} + +func (k Keeper) setTokenizeShareRecordWithOwner(ctx sdk.Context, owner sdk.AccAddress, id uint64) { + store := ctx.KVStore(k.storeKey) + bz := k.cdc.MustMarshal(&gogotypes.UInt64Value{Value: id}) + + store.Set(types.GetTokenizeShareRecordIDByOwnerAndIDKey(owner, id), bz) +} + +func (k Keeper) deleteTokenizeShareRecordWithOwner(ctx sdk.Context, owner sdk.AccAddress, id uint64) { + store := ctx.KVStore(k.storeKey) + store.Delete(types.GetTokenizeShareRecordIDByOwnerAndIDKey(owner, id)) +} + +func (k Keeper) setTokenizeShareRecordWithDenom(ctx sdk.Context, denom string, id uint64) { + store := ctx.KVStore(k.storeKey) + bz := k.cdc.MustMarshal(&gogotypes.UInt64Value{Value: id}) + + store.Set(types.GetTokenizeShareRecordIDByDenomKey(denom), bz) +} diff --git a/x/staking/keeper/tokenize_share_record_test.go b/x/staking/keeper/tokenize_share_record_test.go new file mode 100644 index 000000000000..3f0bc7679a5c --- /dev/null +++ b/x/staking/keeper/tokenize_share_record_test.go @@ -0,0 +1,14 @@ +package keeper_test + +func (suite *KeeperTestSuite) TestGetLastTokenizeShareRecordId() { + ctx, keeper := suite.ctx, suite.stakingKeeper + lastTokenizeShareRecordID := keeper.GetLastTokenizeShareRecordID(ctx) + suite.Equal(lastTokenizeShareRecordID, uint64(0)) + keeper.SetLastTokenizeShareRecordID(ctx, 100) + lastTokenizeShareRecordID = keeper.GetLastTokenizeShareRecordID(ctx) + suite.Equal(lastTokenizeShareRecordID, uint64(100)) +} + +func (suite *KeeperTestSuite) TestGetTokenizeShareRecord() { + // TODO add LSM test +} diff --git a/x/staking/types/errors.go b/x/staking/types/errors.go index 5cf482984dc5..32d07d74b972 100644 --- a/x/staking/types/errors.go +++ b/x/staking/types/errors.go @@ -11,45 +11,63 @@ import ( // // REF: https://github.com/cosmos/cosmos-sdk/issues/5450 var ( - ErrEmptyValidatorAddr = sdkerrors.Register(ModuleName, 2, "empty validator address") - ErrNoValidatorFound = sdkerrors.Register(ModuleName, 3, "validator does not exist") - ErrValidatorOwnerExists = sdkerrors.Register(ModuleName, 4, "validator already exist for this operator address; must use new validator operator address") - ErrValidatorPubKeyExists = sdkerrors.Register(ModuleName, 5, "validator already exist for this pubkey; must use new validator pubkey") - ErrValidatorPubKeyTypeNotSupported = sdkerrors.Register(ModuleName, 6, "validator pubkey type is not supported") - ErrValidatorJailed = sdkerrors.Register(ModuleName, 7, "validator for this address is currently jailed") - ErrBadRemoveValidator = sdkerrors.Register(ModuleName, 8, "failed to remove validator") - ErrCommissionNegative = sdkerrors.Register(ModuleName, 9, "commission must be positive") - ErrCommissionHuge = sdkerrors.Register(ModuleName, 10, "commission cannot be more than 100%") - ErrCommissionGTMaxRate = sdkerrors.Register(ModuleName, 11, "commission cannot be more than the max rate") - ErrCommissionUpdateTime = sdkerrors.Register(ModuleName, 12, "commission cannot be changed more than once in 24h") - ErrCommissionChangeRateNegative = sdkerrors.Register(ModuleName, 13, "commission change rate must be positive") - ErrCommissionChangeRateGTMaxRate = sdkerrors.Register(ModuleName, 14, "commission change rate cannot be more than the max rate") - ErrCommissionGTMaxChangeRate = sdkerrors.Register(ModuleName, 15, "commission cannot be changed more than max change rate") - ErrSelfDelegationBelowMinimum = sdkerrors.Register(ModuleName, 16, "validator's self delegation must be greater than their minimum self delegation") - ErrMinSelfDelegationDecreased = sdkerrors.Register(ModuleName, 17, "minimum self delegation cannot be decrease") - ErrEmptyDelegatorAddr = sdkerrors.Register(ModuleName, 18, "empty delegator address") - ErrNoDelegation = sdkerrors.Register(ModuleName, 19, "no delegation for (address, validator) tuple") - ErrBadDelegatorAddr = sdkerrors.Register(ModuleName, 20, "delegator does not exist with address") - ErrNoDelegatorForAddress = sdkerrors.Register(ModuleName, 21, "delegator does not contain delegation") - ErrInsufficientShares = sdkerrors.Register(ModuleName, 22, "insufficient delegation shares") - ErrDelegationValidatorEmpty = sdkerrors.Register(ModuleName, 23, "cannot delegate to an empty validator") - ErrNotEnoughDelegationShares = sdkerrors.Register(ModuleName, 24, "not enough delegation shares") - ErrNotMature = sdkerrors.Register(ModuleName, 25, "entry not mature") - ErrNoUnbondingDelegation = sdkerrors.Register(ModuleName, 26, "no unbonding delegation found") - ErrMaxUnbondingDelegationEntries = sdkerrors.Register(ModuleName, 27, "too many unbonding delegation entries for (delegator, validator) tuple") - ErrNoRedelegation = sdkerrors.Register(ModuleName, 28, "no redelegation found") - ErrSelfRedelegation = sdkerrors.Register(ModuleName, 29, "cannot redelegate to the same validator") - ErrTinyRedelegationAmount = sdkerrors.Register(ModuleName, 30, "too few tokens to redelegate (truncates to zero tokens)") - ErrBadRedelegationDst = sdkerrors.Register(ModuleName, 31, "redelegation destination validator not found") - ErrTransitiveRedelegation = sdkerrors.Register(ModuleName, 32, "redelegation to this validator already in progress; first redelegation to this validator must complete before next redelegation") - ErrMaxRedelegationEntries = sdkerrors.Register(ModuleName, 33, "too many redelegation entries for (delegator, src-validator, dst-validator) tuple") - ErrDelegatorShareExRateInvalid = sdkerrors.Register(ModuleName, 34, "cannot delegate to validators with invalid (zero) ex-rate") - ErrBothShareMsgsGiven = sdkerrors.Register(ModuleName, 35, "both shares amount and shares percent provided") - ErrNeitherShareMsgsGiven = sdkerrors.Register(ModuleName, 36, "neither shares amount nor shares percent provided") - ErrInvalidHistoricalInfo = sdkerrors.Register(ModuleName, 37, "invalid historical info") - ErrNoHistoricalInfo = sdkerrors.Register(ModuleName, 38, "no historical info found") - ErrEmptyValidatorPubKey = sdkerrors.Register(ModuleName, 39, "empty validator public key") - ErrCommissionLTMinRate = sdkerrors.Register(ModuleName, 40, "commission cannot be less than min rate") - ErrUnbondingNotFound = sdkerrors.Register(ModuleName, 41, "unbonding operation not found") - ErrUnbondingOnHoldRefCountNegative = sdkerrors.Register(ModuleName, 42, "cannot un-hold unbonding operation that is not on hold") + ErrEmptyValidatorAddr = sdkerrors.Register(ModuleName, 2, "empty validator address") + ErrNoValidatorFound = sdkerrors.Register(ModuleName, 3, "validator does not exist") + ErrValidatorOwnerExists = sdkerrors.Register(ModuleName, 4, "validator already exist for this operator address; must use new validator operator address") + ErrValidatorPubKeyExists = sdkerrors.Register(ModuleName, 5, "validator already exist for this pubkey; must use new validator pubkey") + ErrValidatorPubKeyTypeNotSupported = sdkerrors.Register(ModuleName, 6, "validator pubkey type is not supported") + ErrValidatorJailed = sdkerrors.Register(ModuleName, 7, "validator for this address is currently jailed") + ErrBadRemoveValidator = sdkerrors.Register(ModuleName, 8, "failed to remove validator") + ErrCommissionNegative = sdkerrors.Register(ModuleName, 9, "commission must be positive") + ErrCommissionHuge = sdkerrors.Register(ModuleName, 10, "commission cannot be more than 100%") + ErrCommissionGTMaxRate = sdkerrors.Register(ModuleName, 11, "commission cannot be more than the max rate") + ErrCommissionUpdateTime = sdkerrors.Register(ModuleName, 12, "commission cannot be changed more than once in 24h") + ErrCommissionChangeRateNegative = sdkerrors.Register(ModuleName, 13, "commission change rate must be positive") + ErrCommissionChangeRateGTMaxRate = sdkerrors.Register(ModuleName, 14, "commission change rate cannot be more than the max rate") + ErrCommissionGTMaxChangeRate = sdkerrors.Register(ModuleName, 15, "commission cannot be changed more than max change rate") + ErrSelfDelegationBelowMinimum = sdkerrors.Register(ModuleName, 16, "validator's self delegation must be greater than their minimum self delegation") + ErrMinSelfDelegationDecreased = sdkerrors.Register(ModuleName, 17, "minimum self delegation cannot be decrease") + ErrEmptyDelegatorAddr = sdkerrors.Register(ModuleName, 18, "empty delegator address") + ErrNoDelegation = sdkerrors.Register(ModuleName, 19, "no delegation for (address, validator) tuple") + ErrBadDelegatorAddr = sdkerrors.Register(ModuleName, 20, "delegator does not exist with address") + ErrNoDelegatorForAddress = sdkerrors.Register(ModuleName, 21, "delegator does not contain delegation") + ErrInsufficientShares = sdkerrors.Register(ModuleName, 22, "insufficient delegation shares") + ErrDelegationValidatorEmpty = sdkerrors.Register(ModuleName, 23, "cannot delegate to an empty validator") + ErrNotEnoughDelegationShares = sdkerrors.Register(ModuleName, 24, "not enough delegation shares") + ErrNotMature = sdkerrors.Register(ModuleName, 25, "entry not mature") + ErrNoUnbondingDelegation = sdkerrors.Register(ModuleName, 26, "no unbonding delegation found") + ErrMaxUnbondingDelegationEntries = sdkerrors.Register(ModuleName, 27, "too many unbonding delegation entries for (delegator, validator) tuple") + ErrNoRedelegation = sdkerrors.Register(ModuleName, 28, "no redelegation found") + ErrSelfRedelegation = sdkerrors.Register(ModuleName, 29, "cannot redelegate to the same validator") + ErrTinyRedelegationAmount = sdkerrors.Register(ModuleName, 30, "too few tokens to redelegate (truncates to zero tokens)") + ErrBadRedelegationDst = sdkerrors.Register(ModuleName, 31, "redelegation destination validator not found") + ErrTransitiveRedelegation = sdkerrors.Register(ModuleName, 32, "redelegation to this validator already in progress; first redelegation to this validator must complete before next redelegation") + ErrMaxRedelegationEntries = sdkerrors.Register(ModuleName, 33, "too many redelegation entries for (delegator, src-validator, dst-validator) tuple") + ErrDelegatorShareExRateInvalid = sdkerrors.Register(ModuleName, 34, "cannot delegate to validators with invalid (zero) ex-rate") + ErrBothShareMsgsGiven = sdkerrors.Register(ModuleName, 35, "both shares amount and shares percent provided") + ErrNeitherShareMsgsGiven = sdkerrors.Register(ModuleName, 36, "neither shares amount nor shares percent provided") + ErrInvalidHistoricalInfo = sdkerrors.Register(ModuleName, 37, "invalid historical info") + ErrNoHistoricalInfo = sdkerrors.Register(ModuleName, 38, "no historical info found") + ErrEmptyValidatorPubKey = sdkerrors.Register(ModuleName, 39, "empty validator public key") + ErrCommissionLTMinRate = sdkerrors.Register(ModuleName, 40, "commission cannot be less than min rate") + ErrUnbondingNotFound = sdkerrors.Register(ModuleName, 41, "unbonding operation not found") + ErrUnbondingOnHoldRefCountNegative = sdkerrors.Register(ModuleName, 42, "cannot un-hold unbonding operation that is not on hold") + ErrNotEnoughBalance = sdkerrors.Register(ModuleName, 101, "not enough balance") + ErrTokenizeShareRecordNotExists = sdkerrors.Register(ModuleName, 102, "tokenize share record not exists") + ErrTokenizeShareRecordAlreadyExists = sdkerrors.Register(ModuleName, 103, "tokenize share record already exists") + ErrNotTokenizeShareRecordOwner = sdkerrors.Register(ModuleName, 104, "not tokenize share record owner") + ErrExceedingFreeVestingDelegations = sdkerrors.Register(ModuleName, 105, "trying to exceed vested free delegation for vesting account") + ErrOnlyBondDenomAllowdForTokenize = sdkerrors.Register(ModuleName, 106, "only bond denom is allowed for tokenize") + ErrInsufficientValidatorBondShares = sdkerrors.Register(ModuleName, 107, "insufficient validator bond shares") + ErrRedelegationNotAllowedForValidatorBond = sdkerrors.Register(ModuleName, 108, "redelegation is not allowed for validator bond delegation") + ErrValidatorBondNotAllowedForTokenizeShare = sdkerrors.Register(ModuleName, 109, "validator bond delegation is not allowed to tokenize share") + ErrValidatorBondNotAllowedFromModuleAccount = sdkerrors.Register(ModuleName, 110, "validator bond is not allowed from a module account") + ErrGlobalLiquidStakingCapExceeded = sdkerrors.Register(ModuleName, 111, "delegation or tokenization exceeds the global cap") + ErrValidatorLiquidStakingCapExceeded = sdkerrors.Register(ModuleName, 112, "delegation or tokenization exceeds the validator cap") + ErrTokenizeSharesDisabledForAccount = sdkerrors.Register(ModuleName, 113, "tokenize shares currently disabled for account") + ErrUnableToDisableTokenizeShares = sdkerrors.Register(ModuleName, 114, "unable to disable tokenize shares for account") + ErrTokenizeSharesAlreadyEnabledForAccount = sdkerrors.Register(ModuleName, 115, "tokenize shares is already enabled for this account") + ErrTokenizeSharesAlreadyDisabledForAccount = sdkerrors.Register(ModuleName, 116, "tokenize shares is already disabled for this account") + ErrValidatorLiquidSharesUnderflow = sdkerrors.Register(ModuleName, 117, "validator liquid shares underflow") + ErrTotalLiquidStakedUnderflow = sdkerrors.Register(ModuleName, 118, "total liquid staked underflow") ) diff --git a/x/staking/types/keys.go b/x/staking/types/keys.go index 6fede0ef1a0c..3d2626c1b875 100644 --- a/x/staking/types/keys.go +++ b/x/staking/types/keys.go @@ -23,6 +23,9 @@ const ( // RouterKey is the msg router key for the staking module RouterKey = ModuleName + + // Prefix for module accounts that custodian tokenized shares + TokenizeShareModuleAccountPrefix = "tokenizeshare_" ) var ( @@ -54,6 +57,14 @@ var ( ValidatorUpdatesKey = []byte{0x61} // prefix for the end block validator updates key ParamsKey = []byte{0x51} // prefix for parameters for module x/staking + + TokenizeShareRecordPrefix = []byte{0x81} // key for tokenizeshare record prefix + TokenizeShareRecordIDByOwnerPrefix = []byte{0x82} // key for tokenizeshare record id by owner prefix + TokenizeShareRecordIDByDenomPrefix = []byte{0x83} // key for tokenizeshare record id by denom prefix + LastTokenizeShareRecordIDKey = []byte{0x84} // key for last tokenize share record id + TotalLiquidStakedTokensKey = []byte{0x85} // key for total liquid staked tokens + TokenizeSharesLockPrefix = []byte{0x86} // key for locking tokenize shares + TokenizeSharesUnlockQueuePrefix = []byte{0x87} // key for the queue that unlocks tokenize shares ) // UnbondingType defines the type of unbonding operation @@ -377,3 +388,34 @@ func GetREDsByDelToValDstIndexKey(delAddr sdk.AccAddress, valDstAddr sdk.ValAddr func GetHistoricalInfoKey(height int64) []byte { return append(HistoricalInfoKey, []byte(strconv.FormatInt(height, 10))...) } + +// GetTokenizeShareRecordByIndexKey returns the key of the specified id. Intended for querying the tokenizeShareRecord by the id. +func GetTokenizeShareRecordByIndexKey(id uint64) []byte { + return append(TokenizeShareRecordPrefix, sdk.Uint64ToBigEndian(id)...) +} + +// GetTokenizeShareRecordIdsByOwnerPrefix returns the key of the specified owner. Intended for querying all tokenizeShareRecords of an owner +func GetTokenizeShareRecordIdsByOwnerPrefix(owner sdk.AccAddress) []byte { + return append(TokenizeShareRecordIDByOwnerPrefix, address.MustLengthPrefix(owner)...) +} + +// GetTokenizeShareRecordIdByOwnerAndIdKey returns the key of the specified owner and id. Intended for setting tokenizeShareRecord of an owner +func GetTokenizeShareRecordIDByOwnerAndIDKey(owner sdk.AccAddress, id uint64) []byte { + return append(append(TokenizeShareRecordIDByOwnerPrefix, address.MustLengthPrefix(owner)...), sdk.Uint64ToBigEndian(id)...) +} + +func GetTokenizeShareRecordIDByDenomKey(denom string) []byte { + return append(TokenizeShareRecordIDByDenomPrefix, []byte(denom)...) +} + +// GetTokenizeSharesLockKey returns the key for storing a tokenize share lock for a specified account +func GetTokenizeSharesLockKey(owner sdk.AccAddress) []byte { + return append(TokenizeSharesLockPrefix, address.MustLengthPrefix(owner)...) +} + +// GetTokenizeShareAuthorizationTimeKey returns the prefix key used for getting a set of pending +// tokenize share unlocks that complete at the given time +func GetTokenizeShareAuthorizationTimeKey(timestamp time.Time) []byte { + bz := sdk.FormatTimeBytes(timestamp) + return append(TokenizeSharesUnlockQueuePrefix, bz...) +} diff --git a/x/staking/types/tokenize_share_record.go b/x/staking/types/tokenize_share_record.go new file mode 100644 index 000000000000..01a64a1f69ac --- /dev/null +++ b/x/staking/types/tokenize_share_record.go @@ -0,0 +1,22 @@ +package types + +import ( + fmt "fmt" + "strconv" + "strings" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" +) + +func (r TokenizeShareRecord) GetModuleAddress() sdk.AccAddress { + // NOTE: The module name is intentionally hard coded so that, if this + // function were to move to a different module in future SDK version, + // it would not break all the address lookups + moduleName := "lsm" + return address.Module(moduleName, []byte(r.ModuleAccount)) +} + +func (r TokenizeShareRecord) GetShareTokenDenom() string { + return fmt.Sprintf("%s/%s", strings.ToLower(r.Validator), strconv.Itoa(int(r.Id))) +} From c22e127f1ea865e2ca2568c73388f14076500e3f Mon Sep 17 00:00:00 2001 From: Marius Poke Date: Wed, 29 Nov 2023 09:50:04 +0100 Subject: [PATCH 03/19] add LSM changes to slashing module (#5) --- .../slashing/keeper/keeper_test.go | 62 ------------------- x/slashing/keeper/hooks.go | 4 ++ x/slashing/keeper/unjail.go | 9 --- x/slashing/simulation/operations_test.go | 6 +- 4 files changed, 8 insertions(+), 73 deletions(-) diff --git a/tests/integration/slashing/keeper/keeper_test.go b/tests/integration/slashing/keeper/keeper_test.go index 7678c981195f..a438f68a41c7 100644 --- a/tests/integration/slashing/keeper/keeper_test.go +++ b/tests/integration/slashing/keeper/keeper_test.go @@ -76,68 +76,6 @@ func (s *KeeperTestSuite) SetupTest() { s.msgServer = slashingkeeper.NewMsgServerImpl(s.slashingKeeper) } -func (s *KeeperTestSuite) TestUnJailNotBonded() { - ctx := s.ctx - - p := s.stakingKeeper.GetParams(ctx) - p.MaxValidators = 5 - s.stakingKeeper.SetParams(ctx, p) - - addrDels := simtestutil.AddTestAddrsIncremental(s.bankKeeper, s.stakingKeeper, ctx, 6, s.stakingKeeper.TokensFromConsensusPower(ctx, 200)) - valAddrs := simtestutil.ConvertAddrsToValAddrs(addrDels) - pks := simtestutil.CreateTestPubKeys(6) - tstaking := stakingtestutil.NewHelper(s.T(), ctx, s.stakingKeeper) - - // create max (5) validators all with the same power - for i := uint32(0); i < p.MaxValidators; i++ { - addr, val := valAddrs[i], pks[i] - tstaking.CreateValidatorWithValPower(addr, val, 100, true) - } - - staking.EndBlocker(ctx, s.stakingKeeper) - ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) - - // create a 6th validator with less power than the cliff validator (won't be bonded) - addr, val := valAddrs[5], pks[5] - amt := s.stakingKeeper.TokensFromConsensusPower(ctx, 50) - msg := tstaking.CreateValidatorMsg(addr, val, amt) - msg.MinSelfDelegation = amt - res, err := tstaking.CreateValidatorWithMsg(sdk.WrapSDKContext(ctx), msg) - s.Require().NoError(err) - s.Require().NotNil(res) - - staking.EndBlocker(ctx, s.stakingKeeper) - ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) - - tstaking.CheckValidator(addr, stakingtypes.Unbonded, false) - - // unbond below minimum self-delegation - s.Require().Equal(p.BondDenom, tstaking.Denom) - tstaking.Undelegate(sdk.AccAddress(addr), addr, s.stakingKeeper.TokensFromConsensusPower(ctx, 1), true) - - staking.EndBlocker(ctx, s.stakingKeeper) - ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) - - // verify that validator is jailed - tstaking.CheckValidator(addr, -1, true) - - // verify we cannot unjail (yet) - s.Require().Error(s.slashingKeeper.Unjail(ctx, addr)) - - staking.EndBlocker(ctx, s.stakingKeeper) - ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) - // bond to meet minimum self-delegation - tstaking.DelegateWithPower(sdk.AccAddress(addr), addr, 1) - - staking.EndBlocker(ctx, s.stakingKeeper) - ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) - - // verify we can immediately unjail - s.Require().NoError(s.slashingKeeper.Unjail(ctx, addr)) - - tstaking.CheckValidator(addr, -1, false) -} - // Test a new validator entering the validator set // Ensure that SigningInfo.StartHeight is set correctly // and that they are not immediately jailed diff --git a/x/slashing/keeper/hooks.go b/x/slashing/keeper/hooks.go index bdb2f38c1439..a6942023e722 100644 --- a/x/slashing/keeper/hooks.go +++ b/x/slashing/keeper/hooks.go @@ -90,3 +90,7 @@ func (h Hooks) BeforeValidatorSlashed(_ sdk.Context, _ sdk.ValAddress, _ sdk.Dec func (h Hooks) AfterUnbondingInitiated(_ sdk.Context, _ uint64) error { return nil } + +func (h Hooks) BeforeTokenizeShareRecordRemoved(_ sdk.Context, _ uint64) error { + return nil +} diff --git a/x/slashing/keeper/unjail.go b/x/slashing/keeper/unjail.go index 23a9121e5472..f417bdc546f4 100644 --- a/x/slashing/keeper/unjail.go +++ b/x/slashing/keeper/unjail.go @@ -2,7 +2,6 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/slashing/types" ) @@ -20,14 +19,6 @@ func (k Keeper) Unjail(ctx sdk.Context, validatorAddr sdk.ValAddress) error { return types.ErrMissingSelfDelegation } - tokens := validator.TokensFromShares(selfDel.GetShares()).TruncateInt() - minSelfBond := validator.GetMinSelfDelegation() - if tokens.LT(minSelfBond) { - return sdkerrors.Wrapf( - types.ErrSelfDelegationTooLowToUnjail, "%s less than %s", tokens, minSelfBond, - ) - } - // cannot be unjailed if not jailed if !validator.IsJailed() { return types.ErrValidatorNotJailed diff --git a/x/slashing/simulation/operations_test.go b/x/slashing/simulation/operations_test.go index 991ac17f0b3c..2582116f4826 100644 --- a/x/slashing/simulation/operations_test.go +++ b/x/slashing/simulation/operations_test.go @@ -150,7 +150,8 @@ func (suite *SimTestSuite) TestSimulateMsgUnjail() { suite.Require().NoError(err) // setup validator0 by consensus address - suite.stakingKeeper.SetValidatorByConsAddr(ctx, validator0) + err = suite.stakingKeeper.SetValidatorByConsAddr(ctx, validator0) + suite.Require().NoError(err) val0ConsAddress, err := validator0.GetConsAddr() suite.Require().NoError(err) info := types.NewValidatorSigningInfo(val0ConsAddress, int64(4), int64(3), @@ -178,7 +179,8 @@ func (suite *SimTestSuite) TestSimulateMsgUnjail() { suite.Require().NoError(err) var msg types.MsgUnjail - types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + err = types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + suite.Require().NoError(err) suite.Require().True(operationMsg.OK) suite.Require().Equal(types.TypeMsgUnjail, msg.Type()) From e7220e3b3f95fcd6309394c86f77889bc65273a9 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Tue, 5 Dec 2023 15:59:20 +0100 Subject: [PATCH 04/19] chore: LSM changes to staking (#7) * set min_self_delegation to 0 in TestAminoCodecFullDecodeAndEncode * add WithdrawTokenizeShareRecordReward and WithdrawAllTokenizeShareRecordReward * add methods to distribution/keeper * register distribution msgs * add SimulateMsgWithdrawTokenizeShareRecordReward * LSM distribution queries * LSM distr cli * add BeforeTokenizeShareRecordRemoved hook * add signers to proto distribution * set signers correctly * minimum refactor to build * tag LSM test to be refactored * Merge with feat/lsm/v0.47.x tag LSM tests to be refactored Fix nits * nit * comments more failing tests * make protos * Update x/staking/keeper/msg_server.go Co-authored-by: Marius Poke * Update x/staking/keeper/msg_server.go Co-authored-by: Marius Poke * add go.work and fix silent errors * address comments * tests: add lsm distribution tests (#6) --------- Co-authored-by: mpoke Co-authored-by: MSalopek --- .gitignore | 1 + runtime/app.go | 7 +- tests/e2e/staking/grpc.go | 4 +- tests/e2e/staking/suite.go | 34 +- tests/e2e/staking/test_helpers.go | 16 + .../distribution/keeper/delegation_test.go | 136 ++ tests/integration/gov/keeper/common_test.go | 19 +- .../integration/staking/keeper/common_test.go | 6 + .../staking/keeper/genesis_test.go | 44 + .../staking/keeper/msg_server_test.go | 1391 ++++++++++++++++- x/distribution/keeper/delegation_test.go | 4 - .../testutil/expected_keepers_mocks.go | 114 +- x/distribution/types/msg_test.go | 18 + x/staking/abci.go | 1 + x/staking/client/cli/query.go | 331 ++++ x/staking/client/cli/tx.go | 286 ++++ x/staking/client/cli/tx_test.go | 20 +- x/staking/keeper/delegation_test.go | 242 ++- x/staking/keeper/genesis.go | 62 +- x/staking/keeper/grpc_query.go | 129 +- x/staking/keeper/liquid_stake.go | 432 +++++ x/staking/keeper/liquid_stake_test.go | 1209 ++++++++++++++ x/staking/keeper/msg_server.go | 597 ++++++- x/staking/keeper/params.go | 16 + x/staking/keeper/slash.go | 11 + .../keeper/tokenize_share_record_test.go | 52 +- x/staking/simulation/genesis.go | 75 +- x/staking/simulation/genesis_test.go | 7 +- x/staking/simulation/operations.go | 570 ++++++- x/staking/simulation/operations_test.go | 6 + x/staking/testutil/expected_keepers_mocks.go | 70 + x/staking/types/codec.go | 14 + x/staking/types/delegation.go | 11 +- x/staking/types/delegation_test.go | 4 +- x/staking/types/events.go | 23 +- x/staking/types/expected_keepers.go | 5 + x/staking/types/exported.go | 1 + x/staking/types/hooks.go | 9 + x/staking/types/msg.go | 336 +++- x/staking/types/msg_test.go | 4 - x/staking/types/params.go | 95 +- x/staking/types/params_legacy.go | 18 +- x/staking/types/validator.go | 7 +- 43 files changed, 6161 insertions(+), 276 deletions(-) create mode 100644 x/staking/keeper/liquid_stake.go create mode 100644 x/staking/keeper/liquid_stake_test.go diff --git a/.gitignore b/.gitignore index a99e8990f39c..c3230d7a9382 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ *.swm *.swn *.pyc +*.fail # private files private[.-]* diff --git a/runtime/app.go b/runtime/app.go index b5cfcc54cecb..e6053385e498 100644 --- a/runtime/app.go +++ b/runtime/app.go @@ -121,9 +121,10 @@ func (a *App) Load(loadLatest bool) error { a.SetEndBlocker(a.EndBlocker) } - if len(a.config.OrderMigrations) != 0 { - a.ModuleManager.SetOrderMigrations(a.config.OrderMigrations...) - } + // TODO LSM refactor fix this + // if len(a.config.OrderMigrations) != 0 { + // a.ModuleManager.SetOrderMigrations(a.config.OrderMigrations...) + // } if loadLatest { if err := a.LoadLatestVersion(); err != nil { diff --git a/tests/e2e/staking/grpc.go b/tests/e2e/staking/grpc.go index 95ce9775bff6..8d0942f8e653 100644 --- a/tests/e2e/staking/grpc.go +++ b/tests/e2e/staking/grpc.go @@ -148,7 +148,7 @@ func (s *E2ETestSuite) TestGRPCQueryValidatorDelegations() { &types.QueryValidatorDelegationsResponse{}, &types.QueryValidatorDelegationsResponse{ DelegationResponses: types.DelegationResponses{ - types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)), + types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), false, sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)), }, Pagination: &query.PageResponse{Total: 1}, }, @@ -398,7 +398,7 @@ func (s *E2ETestSuite) TestGRPCQueryDelegatorDelegations() { &types.QueryDelegatorDelegationsResponse{}, &types.QueryDelegatorDelegationsResponse{ DelegationResponses: types.DelegationResponses{ - types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)), + types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), false, sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)), }, Pagination: &query.PageResponse{Total: 1}, }, diff --git a/tests/e2e/staking/suite.go b/tests/e2e/staking/suite.go index 05b806cc3054..dff54520f9cf 100644 --- a/tests/e2e/staking/suite.go +++ b/tests/e2e/staking/suite.go @@ -49,7 +49,10 @@ func (s *E2ETestSuite) SetupSuite() { s.network, err = network.New(s.T(), s.T().TempDir(), s.cfg) s.Require().NoError(err) - unbond, err := sdk.ParseCoinNormalized("10stake") + unbondCoin, err := sdk.ParseCoinNormalized("10stake") + s.Require().NoError(err) + + tokenizeCoin, err := sdk.ParseCoinNormalized("1000stake") s.Require().NoError(err) val := s.network.Validators[0] @@ -61,7 +64,7 @@ func (s *E2ETestSuite) SetupSuite() { val.Address, val.ValAddress, val2.ValAddress, - unbond, + unbondCoin, fmt.Sprintf("--%s=%d", flags.FlagGas, 300000), ) s.Require().NoError(err) @@ -70,15 +73,32 @@ func (s *E2ETestSuite) SetupSuite() { s.Require().Equal(uint32(0), txRes.Code) s.Require().NoError(s.network.WaitForNextBlock()) - unbondingAmount := sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(5)) - // unbonding the amount - out, err = MsgUnbondExec(val.ClientCtx, val.Address, val.ValAddress, unbondingAmount) + out, err = MsgUnbondExec(val.ClientCtx, val.Address, val.ValAddress, unbondCoin) s.Require().NoError(err) s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &txRes)) s.Require().Equal(uint32(0), txRes.Code) s.Require().NoError(s.network.WaitForNextBlock()) + // tokenize shares twice (once for the transfer and one for the redeem) + for i := 1; i <= 2; i++ { + out, err := MsgTokenizeSharesExec( + val.ClientCtx, + val.Address, + val.ValAddress, + val.Address, + tokenizeCoin, + fmt.Sprintf("--%s=%d", flags.FlagGas, 1000000), + ) + + s.Require().NoError(err) + s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &txRes)) + s.Require().Equal(uint32(0), txRes.Code) + s.Require().NoError(s.network.WaitForNextBlock()) + } + + unbondingAmount := sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(5)) + // unbonding the amount out, err = MsgUnbondExec(val.ClientCtx, val.Address, val.ValAddress, unbondingAmount) s.Require().NoError(err) @@ -420,7 +440,7 @@ func (s *E2ETestSuite) TestGetCmdQueryDelegations() { &types.QueryDelegatorDelegationsResponse{}, &types.QueryDelegatorDelegationsResponse{ DelegationResponses: types.DelegationResponses{ - types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)), + types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), false, sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)), }, Pagination: &query.PageResponse{}, }, @@ -476,7 +496,7 @@ func (s *E2ETestSuite) TestGetCmdQueryValidatorDelegations() { &types.QueryValidatorDelegationsResponse{}, &types.QueryValidatorDelegationsResponse{ DelegationResponses: types.DelegationResponses{ - types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)), + types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), false, sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)), }, Pagination: &query.PageResponse{}, }, diff --git a/tests/e2e/staking/test_helpers.go b/tests/e2e/staking/test_helpers.go index c1358319ca7f..cfa66fe6c9fe 100644 --- a/tests/e2e/staking/test_helpers.go +++ b/tests/e2e/staking/test_helpers.go @@ -46,3 +46,19 @@ func MsgUnbondExec(clientCtx client.Context, from fmt.Stringer, valAddress, args = append(args, extraArgs...) return clitestutil.ExecTestCLICmd(clientCtx, stakingcli.NewUnbondCmd(), args) } + +// MsgTokenizeSharesExec creates a delegation message. +func MsgTokenizeSharesExec(clientCtx client.Context, from fmt.Stringer, valAddress, + rewardOwner, amount fmt.Stringer, extraArgs ...string, +) (testutil.BufferWriter, error) { + args := []string{ + valAddress.String(), + amount.String(), + rewardOwner.String(), + fmt.Sprintf("--%s=%s", flags.FlagFrom, from.String()), + } + + args = append(args, commonArgs...) + args = append(args, extraArgs...) + return clitestutil.ExecTestCLICmd(clientCtx, stakingcli.NewTokenizeSharesCmd(), args) +} diff --git a/tests/integration/distribution/keeper/delegation_test.go b/tests/integration/distribution/keeper/delegation_test.go index 6b71fb5dfdc1..77391ecc7361 100644 --- a/tests/integration/distribution/keeper/delegation_test.go +++ b/tests/integration/distribution/keeper/delegation_test.go @@ -14,6 +14,9 @@ import ( banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/cosmos/cosmos-sdk/x/distribution/keeper" "github.com/cosmos/cosmos-sdk/x/distribution/testutil" + "github.com/cosmos/cosmos-sdk/x/distribution/types" + mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" + minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" "github.com/cosmos/cosmos-sdk/x/staking" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" stakingtestutil "github.com/cosmos/cosmos-sdk/x/staking/testutil" @@ -818,3 +821,136 @@ func Test100PercentCommissionReward(t *testing.T) { } require.True(t, hasValue) } + +func TestWithdrawTokenizeShareRecordReward(t *testing.T) { + var ( + accountKeeper authkeeper.AccountKeeper + bankKeeper bankkeeper.Keeper + distrKeeper keeper.Keeper + stakingKeeper *stakingkeeper.Keeper + mintKeeper mintkeeper.Keeper + ) + + app, err := simtestutil.Setup(testutil.AppConfig, + &accountKeeper, + &bankKeeper, + &distrKeeper, + &stakingKeeper, + &mintKeeper, + ) + require.NoError(t, err) + + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + + addr := simtestutil.AddTestAddrs(bankKeeper, stakingKeeper, ctx, 2, sdk.NewInt(100000000)) + valAddrs := simtestutil.ConvertAddrsToValAddrs(addr) + tstaking := stakingtestutil.NewHelper(t, ctx, stakingKeeper) + + // create validator with 50% commission + tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) + valPower := int64(100) + tstaking.CreateValidatorWithValPower(valAddrs[0], valConsPk1, valPower, true) + + // end block to bond validator + staking.EndBlocker(ctx, stakingKeeper) + + // next block + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + + // fetch validator and delegation + val := stakingKeeper.Validator(ctx, valAddrs[0]) + del := stakingKeeper.Delegation(ctx, sdk.AccAddress(valAddrs[0]), valAddrs[0]) + + // end period + endingPeriod := distrKeeper.IncrementValidatorPeriod(ctx, val) + + // calculate delegation rewards + rewards := distrKeeper.CalculateDelegationRewards(ctx, val, del, endingPeriod) + + // rewards should be zero + require.True(t, rewards.IsZero()) + + // start out block height + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 3) + + // retrieve validator + val = stakingKeeper.Validator(ctx, valAddrs[0]) + + // increase block height + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 3) + + // allocate some rewards + initial := stakingKeeper.TokensFromConsensusPower(ctx, 10) + tokens := sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDecFromInt(initial)}} + distrKeeper.AllocateTokensToValidator(ctx, val, tokens) + + // end period + distrKeeper.IncrementValidatorPeriod(ctx, val) + + coins := sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, initial)} + err = mintKeeper.MintCoins(ctx, coins) + require.NoError(t, err) + err = bankKeeper.SendCoinsFromModuleToModule(ctx, minttypes.ModuleName, types.ModuleName, coins) + require.NoError(t, err) + + // tokenize share amount + delTokens := sdk.NewInt(1000000) + msgServer := stakingkeeper.NewMsgServerImpl(stakingKeeper) + resp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &stakingtypes.MsgTokenizeShares{ + DelegatorAddress: sdk.AccAddress(valAddrs[0]).String(), + ValidatorAddress: valAddrs[0].String(), + TokenizedShareOwner: sdk.AccAddress(valAddrs[1]).String(), + Amount: sdk.NewCoin(sdk.DefaultBondDenom, delTokens), + }) + require.NoError(t, err) + + // try withdrawing rewards before no reward is allocated + coins, err = distrKeeper.WithdrawAllTokenizeShareRecordReward(ctx, sdk.AccAddress(valAddrs[1])) + require.Nil(t, err) + require.Equal(t, coins, sdk.Coins{}) + + // assert tokenize share response + require.NoError(t, err) + require.Equal(t, resp.Amount.Amount, delTokens) + + // end block to bond validator + staking.EndBlocker(ctx, stakingKeeper) + // next block + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + // allocate some rewards + distrKeeper.AllocateTokensToValidator(ctx, val, tokens) + // end period + distrKeeper.IncrementValidatorPeriod(ctx, val) + + beforeBalance := bankKeeper.GetBalance(ctx, sdk.AccAddress(valAddrs[1]), sdk.DefaultBondDenom) + + // withdraw rewards + coins, err = distrKeeper.WithdrawAllTokenizeShareRecordReward(ctx, sdk.AccAddress(valAddrs[1])) + require.Nil(t, err) + + // check return value + require.Equal(t, coins.String(), "50000stake") + // check balance changes + midBalance := bankKeeper.GetBalance(ctx, sdk.AccAddress(valAddrs[1]), sdk.DefaultBondDenom) + require.Equal(t, beforeBalance.Amount.Add(coins.AmountOf(sdk.DefaultBondDenom)), midBalance.Amount) + + // allocate more rewards manually on module account and try full redeem + record, err := stakingKeeper.GetTokenizeShareRecord(ctx, 1) + require.NoError(t, err) + + err = mintKeeper.MintCoins(ctx, coins) + require.NoError(t, err) + err = bankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, record.GetModuleAddress(), coins) + require.NoError(t, err) + + shareTokenBalance := bankKeeper.GetBalance(ctx, sdk.AccAddress(valAddrs[0]), record.GetShareTokenDenom()) + + _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &stakingtypes.MsgRedeemTokensForShares{ + DelegatorAddress: sdk.AccAddress(valAddrs[0]).String(), + Amount: shareTokenBalance, + }) + require.NoError(t, err) + + finalBalance := bankKeeper.GetBalance(ctx, sdk.AccAddress(valAddrs[1]), sdk.DefaultBondDenom) + require.Equal(t, midBalance.Amount.Add(coins.AmountOf(sdk.DefaultBondDenom)), finalBalance.Amount) +} diff --git a/tests/integration/gov/keeper/common_test.go b/tests/integration/gov/keeper/common_test.go index 91574fa19772..62451f605596 100644 --- a/tests/integration/gov/keeper/common_test.go +++ b/tests/integration/gov/keeper/common_test.go @@ -62,17 +62,22 @@ func createValidators(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers app.StakingKeeper.SetValidator(ctx, val1) app.StakingKeeper.SetValidator(ctx, val2) app.StakingKeeper.SetValidator(ctx, val3) - app.StakingKeeper.SetValidatorByConsAddr(ctx, val1) - app.StakingKeeper.SetValidatorByConsAddr(ctx, val2) - app.StakingKeeper.SetValidatorByConsAddr(ctx, val3) + err = app.StakingKeeper.SetValidatorByConsAddr(ctx, val1) + require.NoError(t, err) + err = app.StakingKeeper.SetValidatorByConsAddr(ctx, val2) + require.NoError(t, err) + err = app.StakingKeeper.SetValidatorByConsAddr(ctx, val3) + require.NoError(t, err) app.StakingKeeper.SetNewValidatorByPowerIndex(ctx, val1) app.StakingKeeper.SetNewValidatorByPowerIndex(ctx, val2) app.StakingKeeper.SetNewValidatorByPowerIndex(ctx, val3) - _, _ = app.StakingKeeper.Delegate(ctx, addrs[0], app.StakingKeeper.TokensFromConsensusPower(ctx, powers[0]), stakingtypes.Unbonded, val1, true) - _, _ = app.StakingKeeper.Delegate(ctx, addrs[1], app.StakingKeeper.TokensFromConsensusPower(ctx, powers[1]), stakingtypes.Unbonded, val2, true) - _, _ = app.StakingKeeper.Delegate(ctx, addrs[2], app.StakingKeeper.TokensFromConsensusPower(ctx, powers[2]), stakingtypes.Unbonded, val3, true) - + _, err = app.StakingKeeper.Delegate(ctx, addrs[0], app.StakingKeeper.TokensFromConsensusPower(ctx, powers[0]), stakingtypes.Unbonded, val1, true) + require.NoError(t, err) + _, err = app.StakingKeeper.Delegate(ctx, addrs[1], app.StakingKeeper.TokensFromConsensusPower(ctx, powers[1]), stakingtypes.Unbonded, val2, true) + require.NoError(t, err) + _, err = app.StakingKeeper.Delegate(ctx, addrs[2], app.StakingKeeper.TokensFromConsensusPower(ctx, powers[2]), stakingtypes.Unbonded, val3, true) + require.NoError(t, err) _ = staking.EndBlocker(ctx, app.StakingKeeper) return addrs, valAddrs diff --git a/tests/integration/staking/keeper/common_test.go b/tests/integration/staking/keeper/common_test.go index 21acfe1599a9..f6169b9d44c1 100644 --- a/tests/integration/staking/keeper/common_test.go +++ b/tests/integration/staking/keeper/common_test.go @@ -88,3 +88,9 @@ func createValidators(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers return addrs, valAddrs, vals } + +func delegateCoinsFromAccount(ctx sdk.Context, app *simapp.SimApp, addr sdk.AccAddress, amount sdk.Int, val types.Validator) error { + _, err := app.StakingKeeper.Delegate(ctx, addr, amount, types.Unbonded, val, true) + + return err +} diff --git a/tests/integration/staking/keeper/genesis_test.go b/tests/integration/staking/keeper/genesis_test.go index 608e84f9751f..7e453a59fbec 100644 --- a/tests/integration/staking/keeper/genesis_test.go +++ b/tests/integration/staking/keeper/genesis_test.go @@ -218,3 +218,47 @@ func TestInitGenesisLargeValidatorSet(t *testing.T) { vals = vals[:100] require.Equal(t, abcivals, vals) } + +// TODO: refactor LSM TEST +func TestInitExportLiquidStakingGenesis(t *testing.T) { + // app, ctx, addrs := bootstrapGenesisTest(t, 2) + // address1, address2 := addrs[0], addrs[1] + + // // Mock out a genesis state + // inGenesisState := types.GenesisState{ + // Params: types.DefaultParams(), + // TokenizeShareRecords: []types.TokenizeShareRecord{ + // {Id: 1, Owner: address1.String(), ModuleAccount: "module1", Validator: "val1"}, + // {Id: 2, Owner: address2.String(), ModuleAccount: "module2", Validator: "val2"}, + // }, + // LastTokenizeShareRecordId: 2, + // TotalLiquidStakedTokens: sdk.NewInt(1_000_000), + // TokenizeShareLocks: []types.TokenizeShareLock{ + // { + // Address: address1.String(), + // Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String(), + // }, + // { + // Address: address2.String(), + // Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String(), + // CompletionTime: time.Date(2023, 1, 1, 1, 0, 0, 0, time.UTC), + // }, + // }, + // } + + // // Call init and then export genesis - confirming the same state is returned + // staking.InitGenesis(ctx, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, &inGenesisState) + // outGenesisState := *staking.ExportGenesis(ctx, app.StakingKeeper) + + // require.ElementsMatch(t, inGenesisState.TokenizeShareRecords, outGenesisState.TokenizeShareRecords, + // "tokenize share records") + + // require.Equal(t, inGenesisState.LastTokenizeShareRecordId, outGenesisState.LastTokenizeShareRecordId, + // "last tokenize share record ID") + + // require.Equal(t, inGenesisState.TotalLiquidStakedTokens.Int64(), outGenesisState.TotalLiquidStakedTokens.Int64(), + // "total liquid staked") + + // require.ElementsMatch(t, inGenesisState.TokenizeShareLocks, outGenesisState.TokenizeShareLocks, + // "tokenize share locks") +} diff --git a/tests/integration/staking/keeper/msg_server_test.go b/tests/integration/staking/keeper/msg_server_test.go index 84a11e461e21..76ac622175f7 100644 --- a/tests/integration/staking/keeper/msg_server_test.go +++ b/tests/integration/staking/keeper/msg_server_test.go @@ -4,9 +4,10 @@ import ( "testing" "time" - "cosmossdk.io/simapp" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" + + "cosmossdk.io/simapp" "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/cosmos/cosmos-sdk/x/staking/keeper" "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -145,3 +146,1391 @@ func TestCancelUnbondingDelegation(t *testing.T) { }) } } + +// TODO refactor LSM test +func TestTokenizeSharesAndRedeemTokens(t *testing.T) { + // app := simapp.Setup(t, false) + // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + + // liquidStakingCapStrict := sdk.ZeroDec() + // liquidStakingCapConservative := sdk.MustNewDecFromStr("0.8") + // liquidStakingCapDisabled := sdk.OneDec() + + // validatorBondStrict := sdk.OneDec() + // validatorBondConservative := sdk.NewDec(10) + // validatorBondDisabled := sdk.NewDec(-1) + + // testCases := []struct { + // name string + // vestingAmount sdk.Int + // delegationAmount sdk.Int + // tokenizeShareAmount sdk.Int + // redeemAmount sdk.Int + // targetVestingDelAfterShare sdk.Int + // targetVestingDelAfterRedeem sdk.Int + // globalLiquidStakingCap sdk.Dec + // slashFactor sdk.Dec + // validatorLiquidStakingCap sdk.Dec + // validatorBondFactor sdk.Dec + // validatorBondDelegation bool + // validatorBondDelegatorIndex int + // delegatorIsLSTP bool + // expTokenizeErr bool + // expRedeemErr bool + // prevAccountDelegationExists bool + // recordAccountDelegationExists bool + // }{ + // { + // name: "full amount tokenize and redeem", + // vestingAmount: sdk.NewInt(0), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondDisabled, + // validatorBondDelegation: false, + // expTokenizeErr: false, + // expRedeemErr: false, + // prevAccountDelegationExists: false, + // recordAccountDelegationExists: false, + // }, + // { + // name: "full amount tokenize and partial redeem", + // vestingAmount: sdk.NewInt(0), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondDisabled, + // validatorBondDelegation: false, + // expTokenizeErr: false, + // expRedeemErr: false, + // prevAccountDelegationExists: false, + // recordAccountDelegationExists: true, + // }, + // { + // name: "partial amount tokenize and full redeem", + // vestingAmount: sdk.NewInt(0), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondDisabled, + // validatorBondDelegation: false, + // expTokenizeErr: false, + // expRedeemErr: false, + // prevAccountDelegationExists: true, + // recordAccountDelegationExists: false, + // }, + // { + // name: "tokenize and redeem with slash", + // vestingAmount: sdk.NewInt(0), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.MustNewDecFromStr("0.1"), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondDisabled, + // validatorBondDelegation: false, + // expTokenizeErr: false, + // expRedeemErr: false, + // prevAccountDelegationExists: false, + // recordAccountDelegationExists: true, + // }, + // { + // name: "over tokenize", + // vestingAmount: sdk.NewInt(0), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 30), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondDisabled, + // validatorBondDelegation: false, + // expTokenizeErr: true, + // expRedeemErr: false, + // }, + // { + // name: "over redeem", + // vestingAmount: sdk.NewInt(0), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 40), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondDisabled, + // validatorBondDelegation: false, + // expTokenizeErr: false, + // expRedeemErr: true, + // }, + // { + // name: "vesting account tokenize share failure", + // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondDisabled, + // validatorBondDelegation: false, + // expTokenizeErr: true, + // expRedeemErr: false, + // prevAccountDelegationExists: true, + // }, + // { + // name: "vesting account tokenize share success", + // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondDisabled, + // validatorBondDelegation: false, + // expTokenizeErr: false, + // expRedeemErr: false, + // prevAccountDelegationExists: true, + // }, + // { + // name: "try tokenize share for a validator-bond delegation", + // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondConservative, + // validatorBondDelegation: true, + // validatorBondDelegatorIndex: 1, + // expTokenizeErr: true, + // expRedeemErr: false, + // prevAccountDelegationExists: true, + // }, + // { + // name: "strict validator-bond - tokenization fails", + // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondStrict, + // validatorBondDelegation: false, + // expTokenizeErr: true, + // expRedeemErr: false, + // prevAccountDelegationExists: true, + // }, + // { + // name: "conservative validator-bond - successful tokenization", + // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondConservative, + // validatorBondDelegation: true, + // validatorBondDelegatorIndex: 0, + // expTokenizeErr: false, + // expRedeemErr: false, + // prevAccountDelegationExists: true, + // }, + // { + // name: "strict global liquid staking cap - tokenization fails", + // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapStrict, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondDisabled, + // validatorBondDelegation: true, + // validatorBondDelegatorIndex: 0, + // expTokenizeErr: true, + // expRedeemErr: false, + // prevAccountDelegationExists: true, + // }, + // { + // name: "conservative global liquid staking cap - successful tokenization", + // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapConservative, + // validatorLiquidStakingCap: liquidStakingCapDisabled, + // validatorBondFactor: validatorBondDisabled, + // validatorBondDelegation: true, + // validatorBondDelegatorIndex: 0, + // expTokenizeErr: false, + // expRedeemErr: false, + // prevAccountDelegationExists: true, + // }, + // { + // name: "strict validator liquid staking cap - tokenization fails", + // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapStrict, + // validatorBondFactor: validatorBondDisabled, + // validatorBondDelegation: true, + // validatorBondDelegatorIndex: 0, + // expTokenizeErr: true, + // expRedeemErr: false, + // prevAccountDelegationExists: true, + // }, + // { + // name: "conservative validator liquid staking cap - successful tokenization", + // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapDisabled, + // validatorLiquidStakingCap: liquidStakingCapConservative, + // validatorBondFactor: validatorBondDisabled, + // validatorBondDelegation: true, + // validatorBondDelegatorIndex: 0, + // expTokenizeErr: false, + // expRedeemErr: false, + // prevAccountDelegationExists: true, + // }, + // { + // name: "all caps set conservatively - successful tokenize share", + // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapConservative, + // validatorLiquidStakingCap: liquidStakingCapConservative, + // validatorBondFactor: validatorBondConservative, + // validatorBondDelegation: true, + // validatorBondDelegatorIndex: 0, + // expTokenizeErr: false, + // expRedeemErr: false, + // prevAccountDelegationExists: true, + // }, + // { + // name: "delegator is a liquid staking provider - accounting should not update", + // vestingAmount: sdk.ZeroInt(), + // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), + // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), + // slashFactor: sdk.ZeroDec(), + // globalLiquidStakingCap: liquidStakingCapConservative, + // validatorLiquidStakingCap: liquidStakingCapConservative, + // validatorBondFactor: validatorBondConservative, + // delegatorIsLSTP: true, + // validatorBondDelegation: true, + // validatorBondDelegatorIndex: 0, + // expTokenizeErr: false, + // expRedeemErr: false, + // prevAccountDelegationExists: true, + // }, + // } + + // for _, tc := range testCases { + // t.Run(tc.name, func(t *testing.T) { + // addrs := simtestutil.AddTestAddrs(app.BankKeeper, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) + // addrAcc1, addrAcc2 := addrs[0], addrs[1] + // addrVal1, addrVal2 := sdk.ValAddress(addrAcc1), sdk.ValAddress(addrAcc2) + + // // Create ICA module account + // icaAccountAddress := createICAAccount(app, ctx) + + // // Fund module account + // delegationCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), tc.delegationAmount) + // err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, sdk.NewCoins(delegationCoin)) + // require.NoError(t, err) + // err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, icaAccountAddress, sdk.NewCoins(delegationCoin)) + // require.NoError(t, err) + + // // set the delegator address depending on whether the delegator should be a liquid staking provider + // delegatorAccount := addrAcc2 + // if tc.delegatorIsLSTP { + // delegatorAccount = icaAccountAddress + // } + + // // set validator bond factor and global liquid staking cap + // params := app.StakingKeeper.GetParams(ctx) + // params.ValidatorBondFactor = tc.validatorBondFactor + // params.GlobalLiquidStakingCap = tc.globalLiquidStakingCap + // params.ValidatorLiquidStakingCap = tc.validatorLiquidStakingCap + // app.StakingKeeper.SetParams(ctx, params) + + // // set the total liquid staked tokens + // app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, sdk.ZeroInt()) + + // if !tc.vestingAmount.IsZero() { + // // create vesting account + // pubkey := secp256k1.GenPrivKey().PubKey() + // baseAcc := authtypes.NewBaseAccount(addrAcc2, pubkey, 0, 0) + // initialVesting := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, tc.vestingAmount)) + // baseVestingWithCoins := vestingtypes.NewBaseVestingAccount(baseAcc, initialVesting, ctx.BlockTime().Unix()+86400*365) + // delayedVestingAccount := vestingtypes.NewDelayedVestingAccountRaw(baseVestingWithCoins) + // app.AccountKeeper.SetAccount(ctx, delayedVestingAccount) + // } + + // pubKeys := simtestutil.CreateTestPubKeys(2) + // pk1, pk2 := pubKeys[0], pubKeys[1] + + // // Create Validators and Delegation + // val1 := stakingtypes.NewValidator(addrVal1, pk1, stakingtypes.Description{}) + // val1.Status = sdkstaking.Bonded + // app.StakingKeeper.SetValidator(ctx, val1) + // app.StakingKeeper.SetValidatorByPowerIndex(ctx, val1) + // err = app.StakingKeeper.SetValidatorByConsAddr(ctx, val1) + // require.NoError(t, err) + + // val2 := stakingtypes.NewValidator(addrVal2, pk2, stakingtypes.Description{}) + // val2.Status = sdkstaking.Bonded + // app.StakingKeeper.SetValidator(ctx, val2) + // app.StakingKeeper.SetValidatorByPowerIndex(ctx, val2) + // err = app.StakingKeeper.SetValidatorByConsAddr(ctx, val2) + // require.NoError(t, err) + + // // Delegate from both the main delegator as well as a random account so there is a + // // non-zero delegation after redemption + // err = delegateCoinsFromAccount(ctx, app, delegatorAccount, tc.delegationAmount, val1) + // require.NoError(t, err) + + // // apply TM updates + // applyValidatorSetUpdates(t, ctx, app.StakingKeeper, -1) + + // _, found := app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) + // require.True(t, found, "delegation not found after delegate") + + // lastRecordID := app.StakingKeeper.GetLastTokenizeShareRecordID(ctx) + // oldValidator, found := app.StakingKeeper.GetValidator(ctx, addrVal1) + // require.True(t, found) + + // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + // if tc.validatorBondDelegation { + // err := delegateCoinsFromAccount(ctx, app, addrs[tc.validatorBondDelegatorIndex], tc.delegationAmount, val1) + // require.NoError(t, err) + // _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ + // DelegatorAddress: addrs[tc.validatorBondDelegatorIndex].String(), + // ValidatorAddress: addrVal1.String(), + // }) + // require.NoError(t, err) + // } + + // resp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ + // DelegatorAddress: delegatorAccount.String(), + // ValidatorAddress: addrVal1.String(), + // Amount: sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), tc.tokenizeShareAmount), + // TokenizedShareOwner: delegatorAccount.String(), + // }) + // if tc.expTokenizeErr { + // require.Error(t, err) + // return + // } + // require.NoError(t, err) + + // // check last record id increase + // require.Equal(t, lastRecordID+1, app.StakingKeeper.GetLastTokenizeShareRecordID(ctx)) + + // // ensure validator's total tokens is consistent + // newValidator, found := app.StakingKeeper.GetValidator(ctx, addrVal1) + // require.True(t, found) + // require.Equal(t, oldValidator.Tokens, newValidator.Tokens) + + // // if the delegator was not a provider, check that the total liquid staked and validator liquid shares increased + // totalLiquidTokensAfterTokenization := app.StakingKeeper.GetTotalLiquidStakedTokens(ctx) + // validatorLiquidSharesAfterTokenization := newValidator.LiquidShares + // if !tc.delegatorIsLSTP { + // require.Equal(t, tc.tokenizeShareAmount.String(), totalLiquidTokensAfterTokenization.String(), "total liquid tokens after tokenization") + // require.Equal(t, tc.tokenizeShareAmount.String(), validatorLiquidSharesAfterTokenization.TruncateInt().String(), "validator liquid shares after tokenization") + // } else { + // require.True(t, totalLiquidTokensAfterTokenization.IsZero(), "zero liquid tokens after tokenization") + // require.True(t, validatorLiquidSharesAfterTokenization.IsZero(), "zero liquid validator shares after tokenization") + // } + + // if tc.vestingAmount.IsPositive() { + // acc := app.AccountKeeper.GetAccount(ctx, addrAcc2) + // vestingAcc := acc.(vesting.VestingAccount) + // require.Equal(t, vestingAcc.GetDelegatedVesting().AmountOf(app.StakingKeeper.BondDenom(ctx)).String(), tc.targetVestingDelAfterShare.String()) + // } + + // if tc.prevAccountDelegationExists { + // _, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) + // require.True(t, found, "delegation found after partial tokenize share") + // } else { + // _, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) + // require.False(t, found, "delegation found after full tokenize share") + // } + + // shareToken := app.BankKeeper.GetBalance(ctx, delegatorAccount, resp.Amount.Denom) + // require.Equal(t, resp.Amount, shareToken) + // _, found = app.StakingKeeper.GetValidator(ctx, addrVal1) + // require.True(t, found, true, "validator not found") + + // records := app.StakingKeeper.GetAllTokenizeShareRecords(ctx) + // require.Len(t, records, 1) + // delegation, found := app.StakingKeeper.GetDelegation(ctx, records[0].GetModuleAddress(), addrVal1) + // require.True(t, found, "delegation not found from tokenize share module account after tokenize share") + + // // slash before redeem + // slashedTokens := sdk.ZeroInt() + // redeemedShares := tc.redeemAmount + // redeemedTokens := tc.redeemAmount + // if tc.slashFactor.IsPositive() { + // consAddr, err := val1.GetConsAddr() + // require.NoError(t, err) + // ctx = ctx.WithBlockHeight(100) + // val1, found = app.StakingKeeper.GetValidator(ctx, addrVal1) + // require.True(t, found) + // power := app.StakingKeeper.TokensToConsensusPower(ctx, val1.Tokens) + // app.StakingKeeper.Slash(ctx, consAddr, 10, power, tc.slashFactor, 0) + // slashedTokens = sdk.NewDecFromInt(val1.Tokens).Mul(tc.slashFactor).TruncateInt() + + // val1, _ := app.StakingKeeper.GetValidator(ctx, addrVal1) + // redeemedTokens = val1.TokensFromShares(sdk.NewDecFromInt(redeemedShares)).TruncateInt() + // } + + // // get deletagor balance and delegation + // bondDenomAmountBefore := app.BankKeeper.GetBalance(ctx, delegatorAccount, app.StakingKeeper.BondDenom(ctx)) + // val1, found = app.StakingKeeper.GetValidator(ctx, addrVal1) + // require.True(t, found) + // delegation, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) + // if !found { + // delegation = types.Delegation{Shares: sdk.ZeroDec()} + // } + // delAmountBefore := val1.TokensFromShares(delegation.Shares) + // oldValidator, found = app.StakingKeeper.GetValidator(ctx, addrVal1) + // require.True(t, found) + + // _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ + // DelegatorAddress: delegatorAccount.String(), + // Amount: sdk.NewCoin(resp.Amount.Denom, tc.redeemAmount), + // }) + // if tc.expRedeemErr { + // require.Error(t, err) + // return + // } + // require.NoError(t, err) + + // // ensure validator's total tokens is consistent + // newValidator, found = app.StakingKeeper.GetValidator(ctx, addrVal1) + // require.True(t, found) + // require.Equal(t, oldValidator.Tokens, newValidator.Tokens) + + // // if the delegator was not a liuqid staking provider, check that the total liquid staked + // // and liquid shares decreased + // totalLiquidTokensAfterRedemption := app.StakingKeeper.GetTotalLiquidStakedTokens(ctx) + // validatorLiquidSharesAfterRedemption := newValidator.LiquidShares + // expectedLiquidTokens := totalLiquidTokensAfterTokenization.Sub(redeemedTokens).Sub(slashedTokens) + // expectedLiquidShares := validatorLiquidSharesAfterTokenization.Sub(sdk.NewDecFromInt(redeemedShares)) + // if !tc.delegatorIsLSTP { + // require.Equal(t, expectedLiquidTokens.String(), totalLiquidTokensAfterRedemption.String(), "total liquid tokens after redemption") + // require.Equal(t, expectedLiquidShares.String(), validatorLiquidSharesAfterRedemption.String(), "validator liquid shares after tokenization") + // } else { + // require.True(t, totalLiquidTokensAfterRedemption.IsZero(), "zero liquid tokens after redemption") + // require.True(t, validatorLiquidSharesAfterRedemption.IsZero(), "zero liquid validator shares after redemption") + // } + + // if tc.vestingAmount.IsPositive() { + // acc := app.AccountKeeper.GetAccount(ctx, addrAcc2) + // vestingAcc := acc.(vesting.VestingAccount) + // require.Equal(t, vestingAcc.GetDelegatedVesting().AmountOf(app.StakingKeeper.BondDenom(ctx)).String(), tc.targetVestingDelAfterRedeem.String()) + // } + + // expectedDelegatedShares := sdk.NewDecFromInt(tc.delegationAmount.Sub(tc.tokenizeShareAmount).Add(tc.redeemAmount)) + // delegation, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) + // require.True(t, found, "delegation not found after redeem tokens") + // require.Equal(t, delegatorAccount.String(), delegation.DelegatorAddress) + // require.Equal(t, addrVal1.String(), delegation.ValidatorAddress) + // require.Equal(t, expectedDelegatedShares, delegation.Shares, "delegation shares after redeem") + + // // check delegator balance is not changed + // bondDenomAmountAfter := app.BankKeeper.GetBalance(ctx, delegatorAccount, app.StakingKeeper.BondDenom(ctx)) + // require.Equal(t, bondDenomAmountAfter.Amount.String(), bondDenomAmountBefore.Amount.String()) + + // // get delegation amount is changed correctly + // val1, found = app.StakingKeeper.GetValidator(ctx, addrVal1) + // require.True(t, found) + // delegation, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) + // if !found { + // delegation = types.Delegation{Shares: sdk.ZeroDec()} + // } + // delAmountAfter := val1.TokensFromShares(delegation.Shares) + // require.Equal(t, delAmountAfter.String(), delAmountBefore.Add(sdk.NewDecFromInt(tc.redeemAmount).Mul(sdk.OneDec().Sub(tc.slashFactor))).String()) + + // shareToken = app.BankKeeper.GetBalance(ctx, delegatorAccount, resp.Amount.Denom) + // require.Equal(t, shareToken.Amount.String(), tc.tokenizeShareAmount.Sub(tc.redeemAmount).String()) + // _, found = app.StakingKeeper.GetValidator(ctx, addrVal1) + // require.True(t, found, true, "validator not found") + + // if tc.recordAccountDelegationExists { + // _, found = app.StakingKeeper.GetDelegation(ctx, records[0].GetModuleAddress(), addrVal1) + // require.True(t, found, "delegation not found from tokenize share module account after redeem partial amount") + + // records = app.StakingKeeper.GetAllTokenizeShareRecords(ctx) + // require.Len(t, records, 1) + // } else { + // _, found = app.StakingKeeper.GetDelegation(ctx, records[0].GetModuleAddress(), addrVal1) + // require.False(t, found, "delegation found from tokenize share module account after redeem full amount") + + // records = app.StakingKeeper.GetAllTokenizeShareRecords(ctx) + // require.Len(t, records, 0) + // } + // }) + // } +} + +// TODO refactor LSM test +// +// Helper function to setup a delegator and validator for the Tokenize/Redeem conversion tests +func setupTestTokenizeAndRedeemConversion( + t *testing.T, + app *simapp.SimApp, + ctx sdk.Context, +) (delAddress sdk.AccAddress, valAddress sdk.ValAddress) { + // addresses := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1_000_000)) + // pubKeys := simapp.CreateTestPubKeys(1) + + // delegatorAddress := addresses[0] + // validatorAddress := sdk.ValAddress(addresses[1]) + + // validator := stakingtypes.NewValidator(validatorAddress, pubKeys[0], stakingtypes.Description{}) + // validator.DelegatorShares = sdk.NewDec(1_000_000) + // validator.Tokens = sdk.NewInt(1_000_000) + // validator.LiquidShares = sdk.NewDec(0) + // validator.Status = types.Bonded + + // app.StakingKeeper.SetValidator(ctx, validator) + // app.StakingKeeper.SetValidatorByConsAddr(ctx, validator) + + // return delegatorAddress, validatorAddress + return +} + +// TODO refactor LSM test +// +// Simulate a slash by decrementing the validator's tokens +// We'll do this in a way such that the exchange rate is not an even integer +// and the shares associated with a delegation will have a long decimal +func simulateSlashWithImprecision(t *testing.T, app *simapp.SimApp, ctx sdk.Context, valAddress sdk.ValAddress) { + // validator, found := app.StakingKeeper.GetValidator(ctx, valAddress) + // require.True(t, found) + + // slashMagnitude := sdk.MustNewDecFromStr("0.1111111111") + // slashTokens := validator.Tokens.ToDec().Mul(slashMagnitude).TruncateInt() + // validator.Tokens = validator.Tokens.Sub(slashTokens) + + // app.StakingKeeper.SetValidator(ctx, validator) +} + +// TODO refactor LSM test +// Tests the conversion from tokenization and redemption from the following scenario: +// Slash -> Delegate -> Tokenize -> Redeem +// Note, in this example, there 2 tokens are lost during the decimal to int conversion +// during the unbonding step within tokenization and redemption +func TestTokenizeAndRedeemConversion_SlashBeforeDelegation(t *testing.T) { + // app := simapp.Setup(t, false) + // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + + // delegatorAddress, validatorAddress := setupTestTokenizeAndRedeemConversion(t, app, ctx) + + // // slash the validator + // simulateSlashWithImprecision(t, app, ctx, validatorAddress) + // validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddress) + // require.True(t, found) + + // // Delegate and confirm the delegation record was created + // delegateAmount := sdk.NewInt(1000) + // delegateCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegateAmount) + // _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAddress.String(), + // Amount: delegateCoin, + // }) + // require.NoError(t, err, "no error expected when delegating") + + // delegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + // require.True(t, found, "delegation should have been found") + + // // Tokenize the full delegation amount + // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAddress.String(), + // Amount: delegateCoin, + // TokenizedShareOwner: delegatorAddress.String(), + // }) + // require.NoError(t, err, "no error expected when tokenizing") + + // // Confirm the number of shareTokens equals the number of shares truncated + // // Note: 1 token is lost during unbonding due to rounding + // shareDenom := validatorAddress.String() + "/1" + // shareToken := app.BankKeeper.GetBalance(ctx, delegatorAddress, shareDenom) + // expectedShareTokens := delegation.Shares.TruncateInt().Int64() - 1 // 1 token was lost during unbonding + // require.Equal(t, expectedShareTokens, shareToken.Amount.Int64(), "share token amount") + + // // Redeem the share tokens + // _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ + // DelegatorAddress: delegatorAddress.String(), + // Amount: shareToken, + // }) + // require.NoError(t, err, "no error expected when redeeming") + + // // Confirm (almost) the full delegation was recovered - minus the 2 tokens from the precision error + // // (1 occurs during tokenization, and 1 occurs during redemption) + // newDelegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + // require.True(t, found) + + // endDelegationTokens := validator.TokensFromShares(newDelegation.Shares).TruncateInt().Int64() + // expectedDelegationTokens := delegateAmount.Int64() - 2 + // require.Equal(t, expectedDelegationTokens, endDelegationTokens, "final delegation tokens") +} + +// TODO refactor LSM test +// +// Tests the conversion from tokenization and redemption from the following scenario: +// Delegate -> Slash -> Tokenize -> Redeem +// Note, in this example, there 1 token lost during the decimal to int conversion +// during the unbonding step within tokenization +func TestTokenizeAndRedeemConversion_SlashBeforeTokenization(t *testing.T) { + // app := simapp.Setup(t, false) + // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + + // delegatorAddress, validatorAddress := setupTestTokenizeAndRedeemConversion(t, app, ctx) + + // // Delegate and confirm the delegation record was created + // delegateAmount := sdk.NewInt(1000) + // delegateCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegateAmount) + // _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAddress.String(), + // Amount: delegateCoin, + // }) + // require.NoError(t, err, "no error expected when delegating") + + // _, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + // require.True(t, found, "delegation should have been found") + + // // slash the validator + // simulateSlashWithImprecision(t, app, ctx, validatorAddress) + // validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddress) + // require.True(t, found) + + // // Tokenize the new amount after the slash + // delegationAmountAfterSlash := validator.TokensFromShares(delegateAmount.ToDec()).TruncateInt() + // tokenizationCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegationAmountAfterSlash) + + // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAddress.String(), + // Amount: tokenizationCoin, + // TokenizedShareOwner: delegatorAddress.String(), + // }) + // require.NoError(t, err, "no error expected when tokenizing") + + // // The number of share tokens should line up with the **new** number of shares associated + // // with the original delegated amount + // // Note: 1 token is lost during unbonding due to rounding + // shareDenom := validatorAddress.String() + "/1" + // shareToken := app.BankKeeper.GetBalance(ctx, delegatorAddress, shareDenom) + // expectedShareTokens, err := validator.SharesFromTokens(tokenizationCoin.Amount) + // require.Equal(t, expectedShareTokens.TruncateInt().Int64()-1, shareToken.Amount.Int64(), "share token amount") + + // // // Redeem the share tokens + // _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ + // DelegatorAddress: delegatorAddress.String(), + // Amount: shareToken, + // }) + // require.NoError(t, err, "no error expected when redeeming") + + // // Confirm the full tokenization amount was recovered - minus the 1 token from the precision error + // newDelegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + // require.True(t, found) + + // endDelegationTokens := validator.TokensFromShares(newDelegation.Shares).TruncateInt().Int64() + // expectedDelegationTokens := delegationAmountAfterSlash.Int64() - 1 + // require.Equal(t, expectedDelegationTokens, endDelegationTokens, "final delegation tokens") +} + +// TODO refactor LSM test +// +// Tests the conversion from tokenization and redemption from the following scenario: +// Delegate -> Tokenize -> Slash -> Redeem +// Note, in this example, there 1 token lost during the decimal to int conversion +// during the unbonding step within redemption +func TestTokenizeAndRedeemConversion_SlashBeforeRedemptino(t *testing.T) { + // app := simapp.Setup(t, false) + // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + + // delegatorAddress, validatorAddress := setupTestTokenizeAndRedeemConversion(t, app, ctx) + + // // Delegate and confirm the delegation record was created + // delegateAmount := sdk.NewInt(1000) + // delegateCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegateAmount) + // _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAddress.String(), + // Amount: delegateCoin, + // }) + // require.NoError(t, err, "no error expected when delegating") + + // _, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + // require.True(t, found, "delegation should have been found") + + // // Tokenize the full delegation amount + // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAddress.String(), + // Amount: delegateCoin, + // TokenizedShareOwner: delegatorAddress.String(), + // }) + // require.NoError(t, err, "no error expected when tokenizing") + + // // The number of share tokens should line up 1:1 with the number of issued shares + // // Since the validator has not been slashed, the shares also line up 1;1 + // // with the original delegation amount + // shareDenom := validatorAddress.String() + "/1" + // shareToken := app.BankKeeper.GetBalance(ctx, delegatorAddress, shareDenom) + // expectedShareTokens := delegateAmount + // require.Equal(t, expectedShareTokens.Int64(), shareToken.Amount.Int64(), "share token amount") + + // // slash the validator + // simulateSlashWithImprecision(t, app, ctx, validatorAddress) + // validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddress) + // require.True(t, found) + + // // Redeem the share tokens + // _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ + // DelegatorAddress: delegatorAddress.String(), + // Amount: shareToken, + // }) + // require.NoError(t, err, "no error expected when redeeming") + + // // Confirm the original delegation, minus the slash, was recovered + // // There's an additional 1 token lost from precision error during unbonding + // delegationAmountAfterSlash := validator.TokensFromShares(delegateAmount.ToDec()).TruncateInt().Int64() + // newDelegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + // require.True(t, found) + + // endDelegationTokens := validator.TokensFromShares(newDelegation.Shares).TruncateInt().Int64() + // require.Equal(t, delegationAmountAfterSlash-1, endDelegationTokens, "final delegation tokens") +} + +// TODO refactor LSM test +func TestTransferTokenizeShareRecord(t *testing.T) { + // app := simapp.Setup(t, false) + // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + + // addrs := simapp.AddTestAddrs(app, ctx, 3, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) + // addrAcc1, addrAcc2, valAcc := addrs[0], addrs[1], addrs[2] + // addrVal := sdk.ValAddress(valAcc) + + // pubKeys := simapp.CreateTestPubKeys(1) + // pk := pubKeys[0] + + // val := stakingtypes.NewValidator(addrVal, pk, stakingtypes.Description{}) + // app.StakingKeeper.SetValidator(ctx, val) + // app.StakingKeeper.SetValidatorByPowerIndex(ctx, val) + + // // apply TM updates + // applyValidatorSetUpdates(t, ctx, app.StakingKeeper, -1) + + // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + + // err := app.StakingKeeper.AddTokenizeShareRecord(ctx, types.TokenizeShareRecord{ + // Id: 1, + // Owner: addrAcc1.String(), + // ModuleAccount: "module_account", + // Validator: val.String(), + // }) + // require.NoError(t, err) + + // _, err = msgServer.TransferTokenizeShareRecord(sdk.WrapSDKContext(ctx), &types.MsgTransferTokenizeShareRecord{ + // TokenizeShareRecordId: 1, + // Sender: addrAcc1.String(), + // NewOwner: addrAcc2.String(), + // }) + // require.NoError(t, err) + + // record, err := app.StakingKeeper.GetTokenizeShareRecord(ctx, 1) + // require.NoError(t, err) + // require.Equal(t, record.Owner, addrAcc2.String()) + + // records := app.StakingKeeper.GetTokenizeShareRecordsByOwner(ctx, addrAcc1) + // require.Len(t, records, 0) + // records = app.StakingKeeper.GetTokenizeShareRecordsByOwner(ctx, addrAcc2) + // require.Len(t, records, 1) +} + +// TODO refactor LSM test +func TestValidatorBond(t *testing.T) { + // app := simapp.Setup(t, false) + // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + + // testCases := []struct { + // name string + // createValidator bool + // createDelegation bool + // alreadyValidatorBond bool + // delegatorIsLSTP bool + // expectedErr error + // }{ + // { + // name: "successful validator bond", + // createValidator: true, + // createDelegation: true, + // alreadyValidatorBond: false, + // delegatorIsLSTP: false, + // }, + // { + // name: "successful with existing validator bond", + // createValidator: true, + // createDelegation: true, + // alreadyValidatorBond: true, + // delegatorIsLSTP: false, + // }, + // { + // name: "validator does not not exist", + // createValidator: false, + // createDelegation: false, + // alreadyValidatorBond: false, + // delegatorIsLSTP: false, + // expectedErr: sdkstaking.ErrNoValidatorFound, + // }, + // { + // name: "delegation not exist case", + // createValidator: true, + // createDelegation: false, + // alreadyValidatorBond: false, + // delegatorIsLSTP: false, + // expectedErr: sdkstaking.ErrNoDelegation, + // }, + // { + // name: "delegator is a liquid staking provider", + // createValidator: true, + // createDelegation: true, + // alreadyValidatorBond: false, + // delegatorIsLSTP: true, + // expectedErr: types.ErrValidatorBondNotAllowedFromModuleAccount, + // }, + // } + + // for _, tc := range testCases { + // t.Run(tc.name, func(t *testing.T) { + // _, app, ctx = createTestInput() + + // pubKeys := simapp.CreateTestPubKeys(2) + // validatorPubKey := pubKeys[0] + // delegatorPubKey := pubKeys[1] + + // delegatorAddress := sdk.AccAddress(delegatorPubKey.Address()) + // validatorAddress := sdk.ValAddress(validatorPubKey.Address()) + // icaAccountAddress := createICAAccount(app, ctx) + + // // Set the delegator address to either be a user account or an ICA account depending on the test case + // if tc.delegatorIsLSTP { + // delegatorAddress = icaAccountAddress + // } + + // // Fund the delegator + // delegationAmount := app.StakingKeeper.TokensFromConsensusPower(ctx, 20) + // coins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegationAmount)) + + // err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, coins) + // require.NoError(t, err, "no error expected when minting") + + // err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, delegatorAddress, coins) + // require.NoError(t, err, "no error expected when funding account") + + // // Create Validator and delegation + // if tc.createValidator { + // validator := stakingtypes.NewValidator(validatorAddress, validatorPubKey, stakingtypes.Description{}) + // validator.Status = sdkstaking.Bonded + // app.StakingKeeper.SetValidator(ctx, validator) + // app.StakingKeeper.SetValidatorByPowerIndex(ctx, validator) + // err = app.StakingKeeper.SetValidatorByConsAddr(ctx, validator) + // require.NoError(t, err) + + // // Optionally create the delegation, depending on the test case + // if tc.createDelegation { + // _, err = app.StakingKeeper.Delegate(ctx, delegatorAddress, delegationAmount, sdkstaking.Unbonded, validator, true) + // require.NoError(t, err, "no error expected when delegating") + + // // Optionally, convert the delegation into a validator bond + // if tc.alreadyValidatorBond { + // delegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + // require.True(t, found, "delegation should have been found") + + // delegation.ValidatorBond = true + // app.StakingKeeper.SetDelegation(ctx, delegation) + // } + // } + // } + + // // Call ValidatorBond + // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + // _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAddress.String(), + // }) + + // if tc.expectedErr != nil { + // require.ErrorContains(t, err, tc.expectedErr.Error()) + // } else { + // require.NoError(t, err, "no error expected from validator bond transaction") + + // // check validator bond true + // delegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + // require.True(t, found, "delegation should have been found after validator bond") + // require.True(t, delegation.ValidatorBond, "delegation should be marked as a validator bond") + + // // check validator bond shares + // validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddress) + // require.True(t, found, "validator should have been found after validator bond") + + // if tc.alreadyValidatorBond { + // require.True(t, validator.ValidatorBondShares.IsZero(), "validator bond shares should still be zero") + // } else { + // require.Equal(t, delegation.Shares.String(), validator.ValidatorBondShares.String(), + // "validator total shares should have increased") + // } + // } + // }) + // } +} + +// TODO refactor LSM test +func TestChangeValidatorBond(t *testing.T) { + // app := simapp.Setup(t, false) + // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + + // checkValidatorBondShares := func(validatorAddress sdk.ValAddress, expectedShares sdk.Int) { + // validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddress) + // require.True(t, found, "validator should have been found") + // require.Equal(t, expectedShares.Int64(), validator.ValidatorBondShares.TruncateInt64(), "validator bond shares") + // } + + // // Create a delegator and 3 validators + // addresses := simapp.AddTestAddrs(app, ctx, 4, sdk.NewInt(1_000_000)) + // pubKeys := simapp.CreateTestPubKeys(4) + + // validatorAPubKey := pubKeys[1] + // validatorBPubKey := pubKeys[2] + // validatorCPubKey := pubKeys[3] + + // delegatorAddress := addresses[0] + // validatorAAddress := sdk.ValAddress(validatorAPubKey.Address()) + // validatorBAddress := sdk.ValAddress(validatorBPubKey.Address()) + // validatorCAddress := sdk.ValAddress(validatorCPubKey.Address()) + + // validatorA := stakingtypes.NewValidator(validatorAAddress, validatorAPubKey, stakingtypes.Description{}) + // validatorB := stakingtypes.NewValidator(validatorBAddress, validatorBPubKey, stakingtypes.Description{}) + // validatorC := stakingtypes.NewValidator(validatorCAddress, validatorCPubKey, stakingtypes.Description{}) + + // validatorA.Tokens = sdk.NewInt(1_000_000) + // validatorB.Tokens = sdk.NewInt(1_000_000) + // validatorC.Tokens = sdk.NewInt(1_000_000) + // validatorA.DelegatorShares = sdk.NewDec(1_000_000) + // validatorB.DelegatorShares = sdk.NewDec(1_000_000) + // validatorC.DelegatorShares = sdk.NewDec(1_000_000) + + // app.StakingKeeper.SetValidator(ctx, validatorA) + // app.StakingKeeper.SetValidator(ctx, validatorB) + // app.StakingKeeper.SetValidator(ctx, validatorC) + + // // The test will go through Delegate/Redelegate/Undelegate messages with the following + // delegation1Amount := sdk.NewInt(1000) + // delegation2Amount := sdk.NewInt(1000) + // redelegateAmount := sdk.NewInt(500) + // undelegateAmount := sdk.NewInt(500) + + // delegate1Coin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegation1Amount) + // delegate2Coin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegation2Amount) + // redelegateCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), redelegateAmount) + // undelegateCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), undelegateAmount) + + // // Delegate to validator's A and C - validator bond shares should not change + // _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAAddress.String(), + // Amount: delegate1Coin, + // }) + // require.NoError(t, err, "no error expected during first delegation") + + // _, err = msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorCAddress.String(), + // Amount: delegate1Coin, + // }) + // require.NoError(t, err, "no error expected during first delegation") + + // checkValidatorBondShares(validatorAAddress, sdk.ZeroInt()) + // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + // checkValidatorBondShares(validatorCAddress, sdk.ZeroInt()) + + // // Flag the the delegations to validator A and C validator bond's + // // Their bond shares should increase + // _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAAddress.String(), + // }) + // require.NoError(t, err, "no error expected during validator bond") + + // _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorCAddress.String(), + // }) + // require.NoError(t, err, "no error expected during validator bond") + + // checkValidatorBondShares(validatorAAddress, delegation1Amount) + // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + // checkValidatorBondShares(validatorCAddress, delegation1Amount) + + // // Delegate more to validator A - it should increase the validator bond shares + // _, err = msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAAddress.String(), + // Amount: delegate2Coin, + // }) + // require.NoError(t, err, "no error expected during second delegation") + + // checkValidatorBondShares(validatorAAddress, delegation1Amount.Add(delegation2Amount)) + // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + // checkValidatorBondShares(validatorCAddress, delegation1Amount) + + // // Redelegate partially from A to B (where A is a validator bond and B is not) + // // It should remove the bond shares from A, and B's validator bond shares should not change + // _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorSrcAddress: validatorAAddress.String(), + // ValidatorDstAddress: validatorBAddress.String(), + // Amount: redelegateCoin, + // }) + // require.NoError(t, err, "no error expected during redelegation") + + // expectedBondSharesA := delegation1Amount.Add(delegation2Amount).Sub(redelegateAmount) + // checkValidatorBondShares(validatorAAddress, expectedBondSharesA) + // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + // checkValidatorBondShares(validatorCAddress, delegation1Amount) + + // // Now redelegate from B to C (where B is not a validator bond, but C is) + // // Validator B's bond shares should remain at zero, but C's bond shares should increase + // _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorSrcAddress: validatorBAddress.String(), + // ValidatorDstAddress: validatorCAddress.String(), + // Amount: redelegateCoin, + // }) + // require.NoError(t, err, "no error expected during redelegation") + + // checkValidatorBondShares(validatorAAddress, expectedBondSharesA) + // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + // checkValidatorBondShares(validatorCAddress, delegation1Amount.Add(redelegateAmount)) + + // // Redelegate partially from A to C (where C is a validator bond delegation) + // // It should remove the bond shares from A, and increase the bond shares on validator C + // _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorSrcAddress: validatorAAddress.String(), + // ValidatorDstAddress: validatorCAddress.String(), + // Amount: redelegateCoin, + // }) + // require.NoError(t, err, "no error expected during redelegation") + + // expectedBondSharesA = expectedBondSharesA.Sub(redelegateAmount) + // expectedBondSharesC := delegation1Amount.Add(redelegateAmount).Add(redelegateAmount) + // checkValidatorBondShares(validatorAAddress, expectedBondSharesA) + // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + // checkValidatorBondShares(validatorCAddress, expectedBondSharesC) + + // // Undelegate from validator A - it should remove shares + // _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAAddress.String(), + // Amount: undelegateCoin, + // }) + // require.NoError(t, err, "no error expected during undelegation") + + // expectedBondSharesA = expectedBondSharesA.Sub(undelegateAmount) + // checkValidatorBondShares(validatorAAddress, expectedBondSharesA) + // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + // checkValidatorBondShares(validatorCAddress, expectedBondSharesC) +} + +// TODO refactor LSM test +func TestEnableDisableTokenizeShares(t *testing.T) { + // app := simapp.Setup(t, false) + // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + // // Create a delegator and validator + // stakeAmount := sdk.NewInt(1000) + // stakeToken := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), stakeAmount) + + // addresses := simapp.AddTestAddrs(app, ctx, 2, stakeAmount) + // delegatorAddress := addresses[0] + + // pubKeys := simapp.CreateTestPubKeys(1) + // validatorAddress := sdk.ValAddress(addresses[1]) + // validator := stakingtypes.NewValidator(validatorAddress, pubKeys[0], stakingtypes.Description{}) + + // validator.DelegatorShares = sdk.NewDec(1_000_000) + // validator.Tokens = sdk.NewInt(1_000_000) + // validator.Status = types.Bonded + // app.StakingKeeper.SetValidator(ctx, validator) + + // // Fix block time and set unbonding period to 1 day + // blockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) + // ctx = ctx.WithBlockTime(blockTime) + + // unbondingPeriod := time.Hour * 24 + // params := app.StakingKeeper.GetParams(ctx) + // params.UnbondingTime = unbondingPeriod + // app.StakingKeeper.SetParams(ctx, params) + // unlockTime := blockTime.Add(unbondingPeriod) + + // // Build test messages (some of which will be reused) + // delegateMsg := types.MsgDelegate{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAddress.String(), + // Amount: stakeToken, + // } + // tokenizeMsg := types.MsgTokenizeShares{ + // DelegatorAddress: delegatorAddress.String(), + // ValidatorAddress: validatorAddress.String(), + // Amount: stakeToken, + // TokenizedShareOwner: delegatorAddress.String(), + // } + // redeemMsg := types.MsgRedeemTokensForShares{ + // DelegatorAddress: delegatorAddress.String(), + // } + // disableMsg := types.MsgDisableTokenizeShares{ + // DelegatorAddress: delegatorAddress.String(), + // } + // enableMsg := types.MsgEnableTokenizeShares{ + // DelegatorAddress: delegatorAddress.String(), + // } + + // // Delegate normally + // _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &delegateMsg) + // require.NoError(t, err, "no error expected when delegating") + + // // Tokenize shares - it should succeed + // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg) + // require.NoError(t, err, "no error expected when tokenizing shares for the first time") + + // liquidToken := app.BankKeeper.GetBalance(ctx, delegatorAddress, validatorAddress.String()+"/1") + // require.Equal(t, stakeAmount.Int64(), liquidToken.Amount.Int64(), "user received token after tokenizing share") + + // // Redeem to remove all tokenized shares + // redeemMsg.Amount = liquidToken + // _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &redeemMsg) + // require.NoError(t, err, "no error expected when redeeming") + + // // Attempt to enable tokenizing shares when there is no lock in place, it should error + // _, err = msgServer.EnableTokenizeShares(sdk.WrapSDKContext(ctx), &enableMsg) + // require.ErrorIs(t, err, types.ErrTokenizeSharesAlreadyEnabledForAccount) + + // // Attempt to disable when no lock is in place, it should succeed + // _, err = msgServer.DisableTokenizeShares(sdk.WrapSDKContext(ctx), &disableMsg) + // require.NoError(t, err, "no error expected when disabling tokenization") + + // // Disabling again while the lock is already in place, should error + // _, err = msgServer.DisableTokenizeShares(sdk.WrapSDKContext(ctx), &disableMsg) + // require.ErrorIs(t, err, types.ErrTokenizeSharesAlreadyDisabledForAccount) + + // // Attempt to tokenize, it should fail since tokenization is disabled + // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg) + // require.ErrorIs(t, err, types.ErrTokenizeSharesDisabledForAccount) + + // // Now enable tokenization + // _, err = msgServer.EnableTokenizeShares(sdk.WrapSDKContext(ctx), &enableMsg) + // require.NoError(t, err, "no error expected when enabling tokenization") + + // // Attempt to tokenize again, it should still fail since the unbonding period has + // // not passed and the lock is still active + // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg) + // require.ErrorIs(t, err, types.ErrTokenizeSharesDisabledForAccount) + // require.ErrorContains(t, err, fmt.Sprintf("tokenization will be allowed at %s", + // blockTime.Add(unbondingPeriod))) + + // // Confirm the unlock is queued + // authorizations := app.StakingKeeper.GetPendingTokenizeShareAuthorizations(ctx, unlockTime) + // require.Equal(t, []string{delegatorAddress.String()}, authorizations.Addresses, + // "pending tokenize share authorizations") + + // // Disable tokenization again - it should remove the pending record from the queue + // _, err = msgServer.DisableTokenizeShares(sdk.WrapSDKContext(ctx), &disableMsg) + // require.NoError(t, err, "no error expected when re-enabling tokenization") + + // authorizations = app.StakingKeeper.GetPendingTokenizeShareAuthorizations(ctx, unlockTime) + // require.Empty(t, authorizations.Addresses, "there should be no pending authorizations in the queue") + + // // Enable one more time + // _, err = msgServer.EnableTokenizeShares(sdk.WrapSDKContext(ctx), &enableMsg) + // require.NoError(t, err, "no error expected when enabling tokenization again") + + // // Increment the block time by the unbonding period and remove the expired locks + // ctx = ctx.WithBlockTime(unlockTime) + // app.StakingKeeper.RemoveExpiredTokenizeShareLocks(ctx, ctx.BlockTime()) + + // // Attempt to tokenize again, it should succeed this time since the lock has expired + // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg) + // require.NoError(t, err, "no error expected when tokenizing after lock has expired") +} + +// TODO refactor LSM test +func TestUnbondValidator(t *testing.T) { + // app := simapp.Setup(t, false) + // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + + // addrs := simapp.AddTestAddrs(app, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) + // addrAcc1 := addrs[0] + // addrVal1 := sdk.ValAddress(addrAcc1) + + // pubKeys := simapp.CreateTestPubKeys(1) + // pk1 := pubKeys[0] + + // // Create Validators and Delegation + // val1 := stakingtypes.NewValidator(addrVal1, pk1, stakingtypes.Description{}) + // val1.Status = sdkstaking.Bonded + // app.StakingKeeper.SetValidator(ctx, val1) + // app.StakingKeeper.SetValidatorByPowerIndex(ctx, val1) + // err := app.StakingKeeper.SetValidatorByConsAddr(ctx, val1) + // require.NoError(t, err) + + // // try unbonding not available validator + // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + // _, err = msgServer.UnbondValidator(sdk.WrapSDKContext(ctx), &types.MsgUnbondValidator{ + // ValidatorAddress: sdk.ValAddress(addrs[1]).String(), + // }) + // require.Error(t, err) + + // // unbond validator + // _, err = msgServer.UnbondValidator(sdk.WrapSDKContext(ctx), &types.MsgUnbondValidator{ + // ValidatorAddress: addrVal1.String(), + // }) + // require.NoError(t, err) + + // // check if validator is jailed + // validator, found := app.StakingKeeper.GetValidator(ctx, addrVal1) + // require.True(t, found) + // require.True(t, validator.Jailed) +} + +// TODO refactor LSM test +// +// TestICADelegateUndelegate tests that an ICA account can undelegate +// sequentially right after delegating. +func TestICADelegateUndelegate(t *testing.T) { + // app := simapp.Setup(t, false) + // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + + // // Create a delegator and validator (the delegator will be an ICA account) + // delegateAmount := sdk.NewInt(1000) + // delegateCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegateAmount) + // icaAccountAddress := createICAAccount(app, ctx) + + // // Fund ICA account + // err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, sdk.NewCoins(delegateCoin)) + // require.NoError(t, err) + // err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, icaAccountAddress, sdk.NewCoins(delegateCoin)) + // require.NoError(t, err) + + // addresses := simapp.AddTestAddrs(app, ctx, 1, sdk.NewInt(0)) + // pubKeys := simapp.CreateTestPubKeys(1) + // validatorAddress := sdk.ValAddress(addresses[0]) + // validator := stakingtypes.NewValidator(validatorAddress, pubKeys[0], stakingtypes.Description{}) + + // validator.DelegatorShares = sdk.NewDec(1_000_000) + // validator.Tokens = sdk.NewInt(1_000_000) + // validator.LiquidShares = sdk.NewDec(0) + // app.StakingKeeper.SetValidator(ctx, validator) + + // delegateMsg := types.MsgDelegate{ + // DelegatorAddress: icaAccountAddress.String(), + // ValidatorAddress: validatorAddress.String(), + // Amount: delegateCoin, + // } + + // undelegateMsg := types.MsgUndelegate{ + // DelegatorAddress: icaAccountAddress.String(), + // ValidatorAddress: validatorAddress.String(), + // Amount: delegateCoin, + // } + + // // Delegate normally + // _, err = msgServer.Delegate(sdk.WrapSDKContext(ctx), &delegateMsg) + // require.NoError(t, err, "no error expected when delegating") + + // // Confirm delegation record + // _, found := app.StakingKeeper.GetDelegation(ctx, icaAccountAddress, validatorAddress) + // require.True(t, found, "delegation should have been found") + + // // Confirm liquid staking totals were incremented + // expectedTotalLiquidStaked := delegateAmount.Int64() + // actualTotalLiquidStaked := app.StakingKeeper.GetTotalLiquidStakedTokens(ctx).Int64() + // require.Equal(t, expectedTotalLiquidStaked, actualTotalLiquidStaked, "total liquid staked tokens after delegation") + + // validator, found = app.StakingKeeper.GetValidator(ctx, validatorAddress) + // require.True(t, found, "validator should have been found") + // require.Equal(t, delegateAmount.ToDec(), validator.LiquidShares, "validator liquid shares after delegation") + + // // Try to undelegate + // _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &undelegateMsg) + // require.NoError(t, err, "no error expected when sequentially undelegating") + + // // Confirm delegation record was removed + // _, found = app.StakingKeeper.GetDelegation(ctx, icaAccountAddress, validatorAddress) + // require.False(t, found, "delegation not have been found") + + // // Confirm liquid staking totals were decremented + // actualTotalLiquidStaked = app.StakingKeeper.GetTotalLiquidStakedTokens(ctx).Int64() + // require.Zero(t, actualTotalLiquidStaked, "total liquid staked tokens after undelegation") + + // validator, found = app.StakingKeeper.GetValidator(ctx, validatorAddress) + // require.True(t, found, "validator should have been found") + // require.Equal(t, sdk.ZeroDec(), validator.LiquidShares, "validator liquid shares after undelegation") +} diff --git a/x/distribution/keeper/delegation_test.go b/x/distribution/keeper/delegation_test.go index a4cd5e959caa..8310f06d1493 100644 --- a/x/distribution/keeper/delegation_test.go +++ b/x/distribution/keeper/delegation_test.go @@ -98,10 +98,6 @@ func TestCalculateRewardsBasic(t *testing.T) { require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: math.LegacyNewDec(initial / 2)}}, distrKeeper.GetValidatorAccumulatedCommission(ctx, valAddr).Commission) } -func TestWithdrawTokenizeShareRecordReward(t *testing.T) { - // TODO add LSM test -} - func TestCalculateRewardsAfterSlash(t *testing.T) { ctrl := gomock.NewController(t) key := sdk.NewKVStoreKey(disttypes.StoreKey) diff --git a/x/distribution/testutil/expected_keepers_mocks.go b/x/distribution/testutil/expected_keepers_mocks.go index c51a8ec771d0..b3de49ec23c6 100644 --- a/x/distribution/testutil/expected_keepers_mocks.go +++ b/x/distribution/testutil/expected_keepers_mocks.go @@ -141,6 +141,20 @@ func (mr *MockBankKeeperMockRecorder) GetAllBalances(ctx, addr interface{}) *gom return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllBalances", reflect.TypeOf((*MockBankKeeper)(nil).GetAllBalances), ctx, addr) } +// SendCoins mocks base method. +func (m *MockBankKeeper) SendCoins(ctx types.Context, fromAddr, toAddr types.AccAddress, amt types.Coins) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendCoins", ctx, fromAddr, toAddr, amt) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendCoins indicates an expected call of SendCoins. +func (mr *MockBankKeeperMockRecorder) SendCoins(ctx, fromAddr, toAddr, amt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendCoins", reflect.TypeOf((*MockBankKeeper)(nil).SendCoins), ctx, fromAddr, toAddr, amt) +} + // SendCoinsFromAccountToModule mocks base method. func (m *MockBankKeeper) SendCoinsFromAccountToModule(ctx types.Context, senderAddr types.AccAddress, recipientModule string, amt types.Coins) error { m.ctrl.T.Helper() @@ -183,20 +197,6 @@ func (mr *MockBankKeeperMockRecorder) SendCoinsFromModuleToModule(ctx, senderMod return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendCoinsFromModuleToModule", reflect.TypeOf((*MockBankKeeper)(nil).SendCoinsFromModuleToModule), ctx, senderModule, recipientModule, amt) } -// SendCoins mocks base method. -func (m *MockBankKeeper) SendCoins(ctx types.Context, fromAddr types.AccAddress, toAddr types.AccAddress, amt types.Coins) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SendCoins", ctx, fromAddr, toAddr, amt) - ret0, _ := ret[0].(error) - return ret0 -} - -// SendCoins indicates an expected call of SendCoins. -func (mr *MockBankKeeperMockRecorder) SendCoins(ctx, fromAddr, toAddr, amt interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendCoins", reflect.TypeOf((*MockBankKeeper)(nil).SendCoins), ctx, fromAddr, toAddr, amt) -} - // SpendableCoins mocks base method. func (m *MockBankKeeper) SpendableCoins(ctx types.Context, addr types.AccAddress) types.Coins { m.ctrl.T.Helper() @@ -276,6 +276,20 @@ func (mr *MockStakingKeeperMockRecorder) GetAllSDKDelegations(ctx interface{}) * return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllSDKDelegations", reflect.TypeOf((*MockStakingKeeper)(nil).GetAllSDKDelegations), ctx) } +// GetAllTokenizeShareRecords mocks base method. +func (m *MockStakingKeeper) GetAllTokenizeShareRecords(ctx types.Context) []types1.TokenizeShareRecord { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetAllTokenizeShareRecords", ctx) + ret0, _ := ret[0].([]types1.TokenizeShareRecord) + return ret0 +} + +// GetAllTokenizeShareRecords indicates an expected call of GetAllTokenizeShareRecords. +func (mr *MockStakingKeeperMockRecorder) GetAllTokenizeShareRecords(ctx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllTokenizeShareRecords", reflect.TypeOf((*MockStakingKeeper)(nil).GetAllTokenizeShareRecords), ctx) +} + // GetAllValidators mocks base method. func (m *MockStakingKeeper) GetAllValidators(ctx types.Context) []types1.Validator { m.ctrl.T.Helper() @@ -290,6 +304,35 @@ func (mr *MockStakingKeeperMockRecorder) GetAllValidators(ctx interface{}) *gomo return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllValidators", reflect.TypeOf((*MockStakingKeeper)(nil).GetAllValidators), ctx) } +// GetTokenizeShareRecord mocks base method. +func (m *MockStakingKeeper) GetTokenizeShareRecord(ctx types.Context, id uint64) (types1.TokenizeShareRecord, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetTokenizeShareRecord", ctx, id) + ret0, _ := ret[0].(types1.TokenizeShareRecord) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetTokenizeShareRecord indicates an expected call of GetTokenizeShareRecord. +func (mr *MockStakingKeeperMockRecorder) GetTokenizeShareRecord(ctx, id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTokenizeShareRecord", reflect.TypeOf((*MockStakingKeeper)(nil).GetTokenizeShareRecord), ctx, id) +} + +// GetTokenizeShareRecordsByOwner mocks base method. +func (m *MockStakingKeeper) GetTokenizeShareRecordsByOwner(ctx types.Context, owner types.AccAddress) []types1.TokenizeShareRecord { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetTokenizeShareRecordsByOwner", ctx, owner) + ret0, _ := ret[0].([]types1.TokenizeShareRecord) + return ret0 +} + +// GetTokenizeShareRecordsByOwner indicates an expected call of GetTokenizeShareRecordsByOwner. +func (mr *MockStakingKeeperMockRecorder) GetTokenizeShareRecordsByOwner(ctx, owner interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTokenizeShareRecordsByOwner", reflect.TypeOf((*MockStakingKeeper)(nil).GetTokenizeShareRecordsByOwner), ctx, owner) +} + // IterateDelegations mocks base method. func (m *MockStakingKeeper) IterateDelegations(ctx types.Context, delegator types.AccAddress, fn func(int64, types1.DelegationI) bool) { m.ctrl.T.Helper() @@ -342,49 +385,6 @@ func (mr *MockStakingKeeperMockRecorder) ValidatorByConsAddr(arg0, arg1 interfac return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ValidatorByConsAddr", reflect.TypeOf((*MockStakingKeeper)(nil).ValidatorByConsAddr), arg0, arg1) } -// GetTokenizeShareRecordsByOwner mocks base method. -func (m *MockStakingKeeper) GetTokenizeShareRecordsByOwner(ctx types.Context, owner types.AccAddress) (tokenizeShareRecords []types1.TokenizeShareRecord) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetTokenizeShareRecordsByOwner", ctx, owner) - ret0, _ := ret[0].([]types1.TokenizeShareRecord) - return ret0 -} - -// GetTokenizeShareRecordsByOwner indicates an expected call of GetTokenizeShareRecordsByOwner. -func (mr *MockStakingKeeperMockRecorder) GetTokenizeShareRecordsByOwner(ctx, owner interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTokenizeShareRecordsByOwner", reflect.TypeOf((*MockStakingKeeper)(nil).GetTokenizeShareRecordsByOwner), ctx, owner) -} - -// GetTokenizeShareRecord mocks base method. -func (m *MockStakingKeeper) GetTokenizeShareRecord(ctx types.Context, id uint64) (tokenizeShareRecord types1.TokenizeShareRecord, err error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetTokenizeShareRecord", ctx, id) - ret0, _ := ret[0].(types1.TokenizeShareRecord) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetTokenizeShareRecord indicates an expected call of GetTokenizeShareRecord. -func (mr *MockStakingKeeperMockRecorder) GetTokenizeShareRecord(ctx, id interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTokenizeShareRecord", reflect.TypeOf((*MockStakingKeeper)(nil).GetTokenizeShareRecord), ctx, id) -} - -// GetAllTokenizeShareRecords mocks base method. -func (m *MockStakingKeeper) GetAllTokenizeShareRecords(ctx types.Context) (tokenizeShareRecords []types1.TokenizeShareRecord) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetAllTokenizeShareRecords", ctx) - ret0, _ := ret[0].([]types1.TokenizeShareRecord) - return ret0 -} - -// GetAllTokenizeShareRecords indicates an expected call of GetAllTokenizeShareRecords. -func (mr *MockStakingKeeperMockRecorder) GetAllTokenizeShareRecords(ctx interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllTokenizeShareRecords", reflect.TypeOf((*MockStakingKeeper)(nil).GetAllTokenizeShareRecords), ctx) -} - // MockStakingHooks is a mock of StakingHooks interface. type MockStakingHooks struct { ctrl *gomock.Controller diff --git a/x/distribution/types/msg_test.go b/x/distribution/types/msg_test.go index 324626178d04..80b655d68142 100644 --- a/x/distribution/types/msg_test.go +++ b/x/distribution/types/msg_test.go @@ -93,3 +93,21 @@ func TestMsgDepositIntoCommunityPool(t *testing.T) { } } } + +func TestMsgWithdrawTokenizeShareRecordReward(t *testing.T) { + tests := []struct { + ownerAddr sdk.AccAddress + expectPass bool + }{ + {sdk.AccAddress{}, false}, + {delAddr1, true}, + } + for i, tc := range tests { + msg := NewMsgWithdrawAllTokenizeShareRecordReward(tc.ownerAddr) + if tc.expectPass { + require.Nil(t, msg.ValidateBasic(), "test index: %v", i) + } else { + require.NotNil(t, msg.ValidateBasic(), "test index: %v", i) + } + } +} diff --git a/x/staking/abci.go b/x/staking/abci.go index 1912beb99747..6b14b025a514 100644 --- a/x/staking/abci.go +++ b/x/staking/abci.go @@ -17,6 +17,7 @@ func BeginBlocker(ctx sdk.Context, k *keeper.Keeper) { defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker) k.TrackHistoricalInfo(ctx) + k.RemoveExpiredTokenizeShareLocks(ctx, ctx.BlockTime()) } // Called every block, update validator set diff --git a/x/staking/client/cli/query.go b/x/staking/client/cli/query.go index 0982296161e4..1de70b7cc8ea 100644 --- a/x/staking/client/cli/query.go +++ b/x/staking/client/cli/query.go @@ -39,6 +39,14 @@ func GetQueryCmd() *cobra.Command { GetCmdQueryHistoricalInfo(), GetCmdQueryParams(), GetCmdQueryPool(), + GetCmdQueryTokenizeShareRecordByID(), + GetCmdQueryTokenizeShareRecordByDenom(), + GetCmdQueryTokenizeShareRecordsOwned(), + GetCmdQueryAllTokenizeShareRecords(), + GetCmdQueryLastTokenizeShareRecordID(), + GetCmdQueryTotalTokenizeSharedAssets(), + GetCmdQueryTokenizeShareLockInfo(), + GetCmdQueryTotalLiquidStaked(), ) return stakingQueryCmd @@ -744,3 +752,326 @@ $ %s query staking params return cmd } + +// GetCmdQueryTokenizeShareRecordById implements the query for individual tokenize share record information by share by id +func GetCmdQueryTokenizeShareRecordByID() *cobra.Command { + cmd := &cobra.Command{ + Use: "tokenize-share-record-by-id [id]", + Args: cobra.ExactArgs(1), + Short: "Query individual tokenize share record information by share by id", + Long: strings.TrimSpace( + fmt.Sprintf(`Query individual tokenize share record information by share by id. + +Example: +$ %s query staking tokenize-share-record-by-id [id] +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + id, err := strconv.Atoi(args[0]) + if err != nil { + return err + } + + res, err := queryClient.TokenizeShareRecordById(cmd.Context(), &types.QueryTokenizeShareRecordByIdRequest{ + Id: uint64(id), + }) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryTokenizeShareRecordByDenom implements the query for individual tokenize share record information by share denom +func GetCmdQueryTokenizeShareRecordByDenom() *cobra.Command { + cmd := &cobra.Command{ + Use: "tokenize-share-record-by-denom", + Args: cobra.ExactArgs(1), + Short: "Query individual tokenize share record information by share denom", + Long: strings.TrimSpace( + fmt.Sprintf(`Query individual tokenize share record information by share denom. + +Example: +$ %s query staking tokenize-share-record-by-denom +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.TokenizeShareRecordByDenom(cmd.Context(), &types.QueryTokenizeShareRecordByDenomRequest{ + Denom: args[0], + }) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryTokenizeShareRecordsOwned implements the query tokenize share records by address +func GetCmdQueryTokenizeShareRecordsOwned() *cobra.Command { + cmd := &cobra.Command{ + Use: "tokenize-share-records-owned", + Args: cobra.ExactArgs(1), + Short: "Query tokenize share records by address", + Long: strings.TrimSpace( + fmt.Sprintf(`Query tokenize share records by address. + +Example: +$ %s query staking tokenize-share-records-owned [owner] +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + owner, err := sdk.AccAddressFromBech32(args[0]) + if err != nil { + return err + } + + res, err := queryClient.TokenizeShareRecordsOwned(cmd.Context(), &types.QueryTokenizeShareRecordsOwnedRequest{ + Owner: owner.String(), + }) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryAllTokenizeShareRecords implements the query for all tokenize share records +func GetCmdQueryAllTokenizeShareRecords() *cobra.Command { + cmd := &cobra.Command{ + Use: "all-tokenize-share-records", + Args: cobra.NoArgs, + Short: "Query for all tokenize share records", + Long: strings.TrimSpace( + fmt.Sprintf(`Query for all tokenize share records. + +Example: +$ %s query staking all-tokenize-share-records +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + pageReq, err := client.ReadPageRequest(cmd.Flags()) + if err != nil { + return err + } + + params := &types.QueryAllTokenizeShareRecordsRequest{ + Pagination: pageReq, + } + + res, err := queryClient.AllTokenizeShareRecords(cmd.Context(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + flags.AddPaginationFlagsToCmd(cmd, "tokenize share records") + + return cmd +} + +// GetCmdQueryLastTokenizeShareRecordId implements the query for last tokenize share record id +func GetCmdQueryLastTokenizeShareRecordID() *cobra.Command { + cmd := &cobra.Command{ + Use: "last-tokenize-share-record-id", + Args: cobra.NoArgs, + Short: "Query for last tokenize share record id", + Long: strings.TrimSpace( + fmt.Sprintf(`Query for last tokenize share record id. + +Example: +$ %s query staking last-tokenize-share-record-id +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.LastTokenizeShareRecordId(cmd.Context(), &types.QueryLastTokenizeShareRecordIdRequest{}) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryTotalTokenizeSharedAssets implements the query for total tokenized staked assets +func GetCmdQueryTotalTokenizeSharedAssets() *cobra.Command { + cmd := &cobra.Command{ + Use: "total-tokenize-share-assets", + Args: cobra.NoArgs, + Short: "Query for total tokenized staked assets", + Long: strings.TrimSpace( + fmt.Sprintf(`Query for total tokenized staked assets. + +Example: +$ %s query staking total-tokenize-share-assets +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.TotalTokenizeSharedAssets(cmd.Context(), &types.QueryTotalTokenizeSharedAssetsRequest{}) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryTotalLiquidStaked implements the query for total liquid staked tokens +func GetCmdQueryTotalLiquidStaked() *cobra.Command { + cmd := &cobra.Command{ + Use: "total-liquid-staked", + Args: cobra.NoArgs, + Short: "Query for total liquid staked tokens", + Long: strings.TrimSpace( + fmt.Sprintf(`Query for total number of liquid staked tokens. +Liquid staked tokens are identified as either a tokenized delegation, +or tokens owned by an interchain account. +Example: +$ %s query staking total-liquid-staked +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.TotalLiquidStaked(cmd.Context(), &types.QueryTotalLiquidStaked{}) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryTokenizeShareLockInfo returns the tokenize share lock status for a user +func GetCmdQueryTokenizeShareLockInfo() *cobra.Command { + bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix() + + cmd := &cobra.Command{ + Use: "tokenize-share-lock-info [address]", + Args: cobra.ExactArgs(1), + Short: "Query tokenize share lock information", + Long: strings.TrimSpace( + fmt.Sprintf(`Query the status of a tokenize share lock for a given account +Example: +$ %s query staking tokenize-share-lock-info %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +`, + version.AppName, bech32PrefixAccAddr, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + address := args[0] + if _, err := sdk.AccAddressFromBech32(address); err != nil { + return err + } + + res, err := queryClient.TokenizeShareLockInfo( + cmd.Context(), + &types.QueryTokenizeShareLockInfo{Address: address}, + ) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + return cmd +} diff --git a/x/staking/client/cli/tx.go b/x/staking/client/cli/tx.go index ceebbe40a54b..d99a3b3796c4 100644 --- a/x/staking/client/cli/tx.go +++ b/x/staking/client/cli/tx.go @@ -44,7 +44,14 @@ func NewTxCmd() *cobra.Command { NewDelegateCmd(), NewRedelegateCmd(), NewUnbondCmd(), + NewUnbondValidatorCmd(), NewCancelUnbondingDelegation(), + NewTokenizeSharesCmd(), + NewRedeemTokensCmd(), + NewTransferTokenizeShareRecordCmd(), + NewDisableTokenizeShares(), + NewEnableTokenizeShares(), + NewValidatorBondCmd(), ) return stakingTxCmd @@ -272,6 +279,37 @@ $ %s tx staking unbond %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 100stake --from return cmd } +func NewUnbondValidatorCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "unbond-validator", + Short: "Unbond a validator", + Args: cobra.ExactArgs(0), + Long: strings.TrimSpace( + fmt.Sprintf(`Unbond a validator. + +Example: +$ %s tx staking unbond-validator --from mykey +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgUnbondValidator(sdk.ValAddress(clientCtx.GetFromAddress())) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + // NewCancelUnbondingDelegation returns a CLI command handler for creating a MsgCancelUnbondingDelegation transaction. func NewCancelUnbondingDelegation() *cobra.Command { bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() @@ -575,3 +613,251 @@ func BuildCreateValidatorMsg(clientCtx client.Context, config TxCreateValidatorC return txBldr, msg, nil } + +// NewTokenizeSharesCmd defines a command for tokenizing shares from a validator. +func NewTokenizeSharesCmd() *cobra.Command { + bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() + bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix() + + cmd := &cobra.Command{ + Use: "tokenize-share [validator-addr] [amount] [rewardOwner]", + Short: "Tokenize delegation to share tokens", + Args: cobra.ExactArgs(3), + Long: strings.TrimSpace( + fmt.Sprintf(`Tokenize delegation to share tokens. + +Example: +$ %s tx staking tokenize-share %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 100stake %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj --from mykey +`, + version.AppName, bech32PrefixValAddr, bech32PrefixAccAddr, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + delAddr := clientCtx.GetFromAddress() + valAddr, err := sdk.ValAddressFromBech32(args[0]) + if err != nil { + return err + } + + amount, err := sdk.ParseCoinNormalized(args[1]) + if err != nil { + return err + } + + rewardOwner, err := sdk.AccAddressFromBech32(args[2]) + if err != nil { + return err + } + + msg := &types.MsgTokenizeShares{ + DelegatorAddress: delAddr.String(), + ValidatorAddress: valAddr.String(), + Amount: amount, + TokenizedShareOwner: rewardOwner.String(), + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// NewRedeemTokensCmd defines a command for redeeming tokens from a validator for shares. +func NewRedeemTokensCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "redeem-tokens [amount]", + Short: "Redeem specified amount of share tokens to delegation", + Args: cobra.ExactArgs(1), + Long: strings.TrimSpace( + fmt.Sprintf(`Redeem specified amount of share tokens to delegation. + +Example: +$ %s tx staking redeem-tokens 100sharetoken --from mykey +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + delAddr := clientCtx.GetFromAddress() + + amount, err := sdk.ParseCoinNormalized(args[0]) + if err != nil { + return err + } + + msg := &types.MsgRedeemTokensForShares{ + DelegatorAddress: delAddr.String(), + Amount: amount, + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// NewTransferTokenizeShareRecordCmd defines a command to transfer ownership of TokenizeShareRecord +func NewTransferTokenizeShareRecordCmd() *cobra.Command { + bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix() + + cmd := &cobra.Command{ + Use: "transfer-tokenize-share-record [record-id] [new-owner]", + Short: "Transfer ownership of TokenizeShareRecord", + Args: cobra.ExactArgs(2), + Long: strings.TrimSpace( + fmt.Sprintf(`Transfer ownership of TokenizeShareRecord. + +Example: +$ %s tx staking transfer-tokenize-share-record 1 %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj --from mykey +`, + version.AppName, bech32PrefixAccAddr, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + recordID, err := strconv.Atoi(args[0]) + if err != nil { + return err + } + + ownerAddr, err := sdk.AccAddressFromBech32(args[1]) + if err != nil { + return err + } + + msg := &types.MsgTransferTokenizeShareRecord{ + Sender: clientCtx.GetFromAddress().String(), + TokenizeShareRecordId: uint64(recordID), + NewOwner: ownerAddr.String(), + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// NewDisableTokenizeShares defines a command to disable tokenization for an address +func NewDisableTokenizeShares() *cobra.Command { + cmd := &cobra.Command{ + Use: "disable-tokenize-shares", + Short: "Disable tokenization of shares", + Args: cobra.ExactArgs(0), + Long: strings.TrimSpace( + fmt.Sprintf(`Disables the tokenization of shares for an address. The account +must explicitly re-enable if they wish to tokenize again, at which point they must wait +the chain's unbonding period. + +Example: +$ %s tx staking disable-tokenize-shares --from mykey +`, version.AppName), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := &types.MsgDisableTokenizeShares{ + DelegatorAddress: clientCtx.GetFromAddress().String(), + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// NewEnableTokenizeShares defines a command to re-enable tokenization for an address +func NewEnableTokenizeShares() *cobra.Command { + cmd := &cobra.Command{ + Use: "enable-tokenize-shares", + Short: "Enable tokenization of shares", + Args: cobra.ExactArgs(0), + Long: strings.TrimSpace( + fmt.Sprintf(`Enables the tokenization of shares for an address after +it had been disable. This transaction queues the enablement of tokenization, but +the address must wait 1 unbonding period from the time of this transaction before +tokenization is permitted. + +Example: +$ %s tx staking enable-tokenize-shares --from mykey +`, version.AppName), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := &types.MsgEnableTokenizeShares{ + DelegatorAddress: clientCtx.GetFromAddress().String(), + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// NewValidatorBondCmd defines a command to mark a delegation as a validator self bond +func NewValidatorBondCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "validator-bond [validator]", + Short: "Mark a delegation as a validator self-bond", + Args: cobra.ExactArgs(1), + Long: strings.TrimSpace( + fmt.Sprintf(`Mark a delegation as a validator self-bond. + +Example: +$ %s tx staking validator-bond cosmosvaloper13h5xdxhsdaugwdrkusf8lkgu406h8t62jkqv3h --from mykey +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := &types.MsgValidatorBond{ + DelegatorAddress: clientCtx.GetFromAddress().String(), + ValidatorAddress: args[0], + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/staking/client/cli/tx_test.go b/x/staking/client/cli/tx_test.go index e0810b4f0ecb..e8d7e5195a85 100644 --- a/x/staking/client/cli/tx_test.go +++ b/x/staking/client/cli/tx_test.go @@ -108,28 +108,40 @@ func (s *CLITestSuite) TestPrepareConfigForTxCreateValidator() { { name: "Custom amount", fsModify: func(fs *pflag.FlagSet) { - fs.Set(cli.FlagAmount, "2000stake") + err := fs.Set(cli.FlagAmount, "2000stake") + if err != nil { + panic(err) + } }, expectedCfg: mkTxValCfg("2000stake", "0.1", "0.2", "0.01"), }, { name: "Custom commission rate", fsModify: func(fs *pflag.FlagSet) { - fs.Set(cli.FlagCommissionRate, "0.54") + err := fs.Set(cli.FlagCommissionRate, "0.54") + if err != nil { + panic(err) + } }, expectedCfg: mkTxValCfg(cli.DefaultTokens.String()+sdk.DefaultBondDenom, "0.54", "0.2", "0.01"), }, { name: "Custom commission max rate", fsModify: func(fs *pflag.FlagSet) { - fs.Set(cli.FlagCommissionMaxRate, "0.89") + err := fs.Set(cli.FlagCommissionMaxRate, "0.89") + if err != nil { + panic(err) + } }, expectedCfg: mkTxValCfg(cli.DefaultTokens.String()+sdk.DefaultBondDenom, "0.1", "0.89", "0.01"), }, { name: "Custom commission max change rate", fsModify: func(fs *pflag.FlagSet) { - fs.Set(cli.FlagCommissionMaxChangeRate, "0.55") + err := fs.Set(cli.FlagCommissionMaxChangeRate, "0.55") + if err != nil { + panic(err) + } }, expectedCfg: mkTxValCfg(cli.DefaultTokens.String()+sdk.DefaultBondDenom, "0.1", "0.2", "0.55"), }, diff --git a/x/staking/keeper/delegation_test.go b/x/staking/keeper/delegation_test.go index 6a5782c9fca3..98ed2aa9378d 100644 --- a/x/staking/keeper/delegation_test.go +++ b/x/staking/keeper/delegation_test.go @@ -224,56 +224,6 @@ func (s *KeeperTestSuite) TestUnbondDelegation() { require.Equal(remainingTokens, validator.BondedTokens()) } -// // test undelegating self delegation from a validator pushing it below MinSelfDelegation -// // shift it from the bonded to unbonding state and jailed -func (s *KeeperTestSuite) TestUndelegateSelfDelegationBelowMinSelfDelegation() { - ctx, keeper := s.ctx, s.stakingKeeper - require := s.Require() - - addrDels, addrVals := createValAddrs(1) - delTokens := keeper.TokensFromConsensusPower(ctx, 10) - - // create a validator with a self-delegation - validator := testutil.NewValidator(s.T(), addrVals[0], PKs[0]) - - validator.MinSelfDelegation = delTokens - validator, issuedShares := validator.AddTokensFromDel(delTokens) - require.Equal(delTokens, issuedShares.RoundInt()) - - s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.NotBondedPoolName, stakingtypes.BondedPoolName, gomock.Any()) - validator = stakingkeeper.TestingUpdateValidator(keeper, ctx, validator, true) - keeper.SetValidatorByConsAddr(ctx, validator) - require.True(validator.IsBonded()) - - selfDelegation := stakingtypes.NewDelegation(sdk.AccAddress(addrVals[0].Bytes()), addrVals[0], issuedShares) - keeper.SetDelegation(ctx, selfDelegation) - - // create a second delegation to this validator - keeper.DeleteValidatorByPowerIndex(ctx, validator) - validator, issuedShares = validator.AddTokensFromDel(delTokens) - require.True(validator.IsBonded()) - require.Equal(delTokens, issuedShares.RoundInt()) - - validator = stakingkeeper.TestingUpdateValidator(keeper, ctx, validator, true) - delegation := stakingtypes.NewDelegation(addrDels[0], addrVals[0], issuedShares) - keeper.SetDelegation(ctx, delegation) - - val0AccAddr := sdk.AccAddress(addrVals[0].Bytes()) - s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any()) - _, err := keeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(keeper.TokensFromConsensusPower(ctx, 6))) - require.NoError(err) - - // end block - s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any()) - s.applyValidatorSetUpdates(ctx, keeper, 1) - - validator, found := keeper.GetValidator(ctx, addrVals[0]) - require.True(found) - require.Equal(keeper.TokensFromConsensusPower(ctx, 14), validator.Tokens) - require.Equal(stakingtypes.Unbonding, validator.Status) - require.True(validator.Jailed) -} - func (s *KeeperTestSuite) TestUndelegateFromUnbondingValidator() { ctx, keeper := s.ctx, s.stakingKeeper require := s.Require() @@ -312,11 +262,12 @@ func (s *KeeperTestSuite) TestUndelegateFromUnbondingValidator() { header.Time = blockTime ctx = ctx.WithBlockHeader(header) - // unbond the all self-delegation to put validator in unbonding state + // unbond the and jail the validator to put it in an unbonding state val0AccAddr := sdk.AccAddress(addrVals[0]) s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any()) _, err := keeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(delTokens)) require.NoError(err) + keeper.Jail(ctx, sdk.GetConsAddress(PKs[0])) // end block s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any()) @@ -380,9 +331,10 @@ func (s *KeeperTestSuite) TestUndelegateFromUnbondedValidator() { ctx = ctx.WithBlockHeight(10) ctx = ctx.WithBlockTime(time.Unix(333, 0)) - // unbond the all self-delegation to put validator in unbonding state + // unbond the and jail the validator to put it in an unbonding state s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any()) _, err := keeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(valTokens)) + keeper.Jail(ctx, sdk.GetConsAddress(PKs[0])) require.NoError(err) // end block @@ -456,10 +408,11 @@ func (s *KeeperTestSuite) TestUnbondingAllDelegationFromValidator() { ctx = ctx.WithBlockHeight(10) ctx = ctx.WithBlockTime(time.Unix(333, 0)) - // unbond the all self-delegation to put validator in unbonding state + // unbond the and jail the validator to put it in an unbonding state s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any()) _, err := keeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(valTokens)) require.NoError(err) + keeper.Jail(ctx, sdk.GetConsAddress(PKs[0])) // end block s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any()) @@ -742,10 +695,11 @@ func (s *KeeperTestSuite) TestRedelegateFromUnbondingValidator() { header.Time = blockTime ctx = ctx.WithBlockHeader(header) - // unbond the all self-delegation to put validator in unbonding state + // unbond the and jail the validator to put it in an unbonding state s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any()) _, err := keeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(delTokens)) require.NoError(err) + keeper.Jail(ctx, sdk.GetConsAddress(PKs[0])) // end block s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any()) @@ -846,3 +800,183 @@ func (s *KeeperTestSuite) TestRedelegateFromUnbondedValidator() { red, found := keeper.GetRedelegation(ctx, addrDels[0], addrVals[0], addrVals[1]) require.False(found, "%v", red) } + +/*TODO refactor LSM tests: + +- Note that in v0.45.16-lsm the redelegation tests are renamed such that: +TestRedelegateFromUnbondingValidator -> TestValidatorBondUndelegate and +TestRedelegateFromUnbondedValidator -> TestValidatorBondUndelegate + +- Note that in v0.45.16-lsm the keeper tests are still using testing.T +and simapp, which should updated to unit test with gomock, see tests above. + +*/ +// func TestValidatorBondUndelegate(t *testing.T) { +// _, app, ctx := createTestInput() + +// addrDels := simapp.AddTestAddrs(app, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) +// addrVals := simapp.ConvertAddrsToValAddrs(addrDels) + +// startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) + +// bondDenom := app.StakingKeeper.BondDenom(ctx) +// notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx) + +// require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens)))) +// app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) + +// // create a validator and a delegator to that validator +// validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) +// validator.Status = types.Bonded +// app.StakingKeeper.SetValidator(ctx, validator) + +// // set validator bond factor +// params := app.StakingKeeper.GetParams(ctx) +// params.ValidatorBondFactor = sdk.NewDec(1) +// app.StakingKeeper.SetParams(ctx, params) + +// // convert to validator self-bond +// msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + +// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) +// err := delegateCoinsFromAccount(ctx, app, addrDels[0], startTokens, validator) +// require.NoError(t, err) +// _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ +// DelegatorAddress: addrDels[0].String(), +// ValidatorAddress: addrVals[0].String(), +// }) +// require.NoError(t, err) + +// // tokenize share for 2nd account delegation +// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) +// err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator) +// require.NoError(t, err) +// tokenizeShareResp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ +// DelegatorAddress: addrDels[1].String(), +// ValidatorAddress: addrVals[0].String(), +// Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), +// TokenizedShareOwner: addrDels[0].String(), +// }) +// require.NoError(t, err) + +// // try undelegating +// _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{ +// DelegatorAddress: addrDels[0].String(), +// ValidatorAddress: addrVals[0].String(), +// Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), +// }) +// require.Error(t, err) + +// // redeem full amount on 2nd account and try undelegation +// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) +// err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator) +// require.NoError(t, err) +// _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ +// DelegatorAddress: addrDels[1].String(), +// Amount: tokenizeShareResp.Amount, +// }) +// require.NoError(t, err) + +// // try undelegating +// _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{ +// DelegatorAddress: addrDels[0].String(), +// ValidatorAddress: addrVals[0].String(), +// Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), +// }) +// require.NoError(t, err) + +// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) +// require.Equal(t, validator.ValidatorBondShares, sdk.ZeroDec()) +// } + +// func TestValidatorBondRedelegate(t *testing.T) { +// _, app, ctx := createTestInput() + +// addrDels := simapp.AddTestAddrs(app, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) +// addrVals := simapp.ConvertAddrsToValAddrs(addrDels) + +// startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) + +// bondDenom := app.StakingKeeper.BondDenom(ctx) +// notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx) + +// startPoolToken := sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens.Mul(sdk.NewInt(2)))) +// require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), startPoolToken)) +// app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) + +// // create a validator and a delegator to that validator +// validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) +// validator.Status = types.Bonded +// app.StakingKeeper.SetValidator(ctx, validator) +// validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1]) +// validator.Status = types.Bonded +// app.StakingKeeper.SetValidator(ctx, validator2) + +// // set validator bond factor +// params := app.StakingKeeper.GetParams(ctx) +// params.ValidatorBondFactor = sdk.NewDec(1) +// app.StakingKeeper.SetParams(ctx, params) + +// // set total liquid stake +// app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, sdk.NewInt(100)) + +// // delegate to each validator +// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) +// err := delegateCoinsFromAccount(ctx, app, addrDels[0], startTokens, validator) +// require.NoError(t, err) + +// validator2, _ = app.StakingKeeper.GetValidator(ctx, addrVals[1]) +// err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator2) +// require.NoError(t, err) + +// // convert to validator self-bond +// msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) +// _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ +// DelegatorAddress: addrDels[0].String(), +// ValidatorAddress: addrVals[0].String(), +// }) +// require.NoError(t, err) + +// // tokenize share for 2nd account delegation +// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) +// err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator) +// require.NoError(t, err) +// tokenizeShareResp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ +// DelegatorAddress: addrDels[1].String(), +// ValidatorAddress: addrVals[0].String(), +// Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), +// TokenizedShareOwner: addrDels[0].String(), +// }) +// require.NoError(t, err) + +// // try undelegating +// _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ +// DelegatorAddress: addrDels[0].String(), +// ValidatorSrcAddress: addrVals[0].String(), +// ValidatorDstAddress: addrVals[1].String(), +// Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), +// }) +// require.Error(t, err) + +// // redeem full amount on 2nd account and try undelegation +// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) +// err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator) +// require.NoError(t, err) +// _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ +// DelegatorAddress: addrDels[1].String(), +// Amount: tokenizeShareResp.Amount, +// }) +// require.NoError(t, err) + +// // try undelegating +// _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ +// DelegatorAddress: addrDels[0].String(), +// ValidatorSrcAddress: addrVals[0].String(), +// ValidatorDstAddress: addrVals[1].String(), +// Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), +// }) +// require.NoError(t, err) + +// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) +// require.Equal(t, validator.ValidatorBondShares, sdk.ZeroDec()) +// } diff --git a/x/staking/keeper/genesis.go b/x/staking/keeper/genesis.go index 1d88367290ce..52e8bd5fd561 100644 --- a/x/staking/keeper/genesis.go +++ b/x/staking/keeper/genesis.go @@ -165,6 +165,48 @@ func (k Keeper) InitGenesis(ctx sdk.Context, data *types.GenesisState) (res []ab } } + // Set the total liquid staked tokens + k.SetTotalLiquidStakedTokens(ctx, data.TotalLiquidStakedTokens) + + // Set each tokenize share record, as well as the last tokenize share record ID + latestId := uint64(0) + for _, tokenizeShareRecord := range data.TokenizeShareRecords { + if err := k.AddTokenizeShareRecord(ctx, tokenizeShareRecord); err != nil { + panic(err) + } + if tokenizeShareRecord.Id > latestId { + latestId = tokenizeShareRecord.Id + } + } + if data.LastTokenizeShareRecordId < latestId { + panic("Tokenize share record specified with ID greater than the latest ID") + } + k.SetLastTokenizeShareRecordID(ctx, data.LastTokenizeShareRecordId) + + // Set the tokenize shares locks for accounts that have disabled tokenizing shares + // The lock can either be in status LOCKED or LOCK_EXPIRING + // If it is in status LOCK_EXPIRING, a the unlocking must also be queued + for _, tokenizeShareLock := range data.TokenizeShareLocks { + address := sdk.MustAccAddressFromBech32(tokenizeShareLock.Address) + + switch tokenizeShareLock.Status { + case types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String(): + k.AddTokenizeSharesLock(ctx, address) + + case types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String(): + completionTime := tokenizeShareLock.CompletionTime + + authorizations := k.GetPendingTokenizeShareAuthorizations(ctx, completionTime) + authorizations.Addresses = append(authorizations.Addresses, address.String()) + + k.SetPendingTokenizeShareAuthorizations(ctx, completionTime, authorizations) + k.SetTokenizeSharesUnlockTime(ctx, address, completionTime) + + default: + panic(fmt.Sprintf("Unsupported tokenize share lock status %s", tokenizeShareLock.Status)) + } + } + return res } @@ -194,13 +236,17 @@ func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { }) return &types.GenesisState{ - Params: k.GetParams(ctx), - LastTotalPower: k.GetLastTotalPower(ctx), - LastValidatorPowers: lastValidatorPowers, - Validators: k.GetAllValidators(ctx), - Delegations: k.GetAllDelegations(ctx), - UnbondingDelegations: unbondingDelegations, - Redelegations: redelegations, - Exported: true, + Params: k.GetParams(ctx), + LastTotalPower: k.GetLastTotalPower(ctx), + LastValidatorPowers: lastValidatorPowers, + Validators: k.GetAllValidators(ctx), + Delegations: k.GetAllDelegations(ctx), + UnbondingDelegations: unbondingDelegations, + Redelegations: redelegations, + Exported: true, + TokenizeShareRecords: k.GetAllTokenizeShareRecords(ctx), + LastTokenizeShareRecordId: k.GetLastTokenizeShareRecordID(ctx), + TotalLiquidStakedTokens: k.GetTotalLiquidStakedTokens(ctx), + TokenizeShareLocks: k.GetAllTokenizeSharesLocks(ctx), } } diff --git a/x/staking/keeper/grpc_query.go b/x/staking/keeper/grpc_query.go index 87bb4539723b..a8b6d31a07ce 100644 --- a/x/staking/keeper/grpc_query.go +++ b/x/staking/keeper/grpc_query.go @@ -4,7 +4,6 @@ import ( "context" "strings" - "cosmossdk.io/math" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -551,6 +550,7 @@ func DelegationToDelegationResponse(ctx sdk.Context, k *Keeper, del types.Delega delegatorAddress, del.GetValidatorAddr(), del.Shares, + del.ValidatorBond, sdk.NewCoin(k.BondDenom(ctx), val.TokensFromShares(del.Shares).TruncateInt()), ), nil } @@ -615,8 +615,16 @@ func RedelegationsToRedelegationResponses(ctx sdk.Context, k *Keeper, redels typ // Query for individual tokenize share record information by share by id func (k Querier) TokenizeShareRecordById(c context.Context, req *types.QueryTokenizeShareRecordByIdRequest) (*types.QueryTokenizeShareRecordByIdResponse, error) { //nolint:revive // fixing this would require changing the .proto files, so we might as well leave it alone - record := types.TokenizeShareRecord{} - // TODO add LSM logic + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(c) + record, err := k.GetTokenizeShareRecord(ctx, req.Id) + if err != nil { + return nil, err + } + return &types.QueryTokenizeShareRecordByIdResponse{ Record: record, }, nil @@ -624,8 +632,16 @@ func (k Querier) TokenizeShareRecordById(c context.Context, req *types.QueryToke // Query for individual tokenize share record information by share denom func (k Querier) TokenizeShareRecordByDenom(c context.Context, req *types.QueryTokenizeShareRecordByDenomRequest) (*types.QueryTokenizeShareRecordByDenomResponse, error) { - record := types.TokenizeShareRecord{} - // TODO add LSM logic + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(c) + record, err := k.GetTokenizeShareRecordByDenom(ctx, req.Denom) + if err != nil { + return nil, err + } + return &types.QueryTokenizeShareRecordByDenomResponse{ Record: record, }, nil @@ -633,8 +649,17 @@ func (k Querier) TokenizeShareRecordByDenom(c context.Context, req *types.QueryT // Query tokenize share records by address func (k Querier) TokenizeShareRecordsOwned(c context.Context, req *types.QueryTokenizeShareRecordsOwnedRequest) (*types.QueryTokenizeShareRecordsOwnedResponse, error) { - records := []types.TokenizeShareRecord{} - // TODO add LSM logic + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(c) + owner, err := sdk.AccAddressFromBech32(req.Owner) + if err != nil { + return nil, err + } + records := k.GetTokenizeShareRecordsByOwner(ctx, owner) + return &types.QueryTokenizeShareRecordsOwnedResponse{ Records: records, }, nil @@ -642,27 +667,77 @@ func (k Querier) TokenizeShareRecordsOwned(c context.Context, req *types.QueryTo // Query for all tokenize share records func (k Querier) AllTokenizeShareRecords(c context.Context, req *types.QueryAllTokenizeShareRecordsRequest) (*types.QueryAllTokenizeShareRecordsResponse, error) { - records := []types.TokenizeShareRecord{} - // TODO add LSM logic + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + ctx := sdk.UnwrapSDKContext(c) + + var records []types.TokenizeShareRecord + + store := ctx.KVStore(k.storeKey) + valStore := prefix.NewStore(store, types.TokenizeShareRecordPrefix) + pageRes, err := query.FilteredPaginate(valStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { + var tokenizeShareRecord types.TokenizeShareRecord + if err := k.cdc.Unmarshal(value, &tokenizeShareRecord); err != nil { + return false, err + } + + if accumulate { + records = append(records, tokenizeShareRecord) + } + return true, nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + return &types.QueryAllTokenizeShareRecordsResponse{ Records: records, - Pagination: nil, + Pagination: pageRes, }, nil } // Query for last tokenize share record id func (k Querier) LastTokenizeShareRecordId(c context.Context, req *types.QueryLastTokenizeShareRecordIdRequest) (*types.QueryLastTokenizeShareRecordIdResponse, error) { //nolint:revive // fixing this would require changing the .proto files, so we might as well leave it alone - // TODO add LSM logic + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(c) return &types.QueryLastTokenizeShareRecordIdResponse{ - Id: 0, + Id: k.GetLastTokenizeShareRecordID(ctx), }, nil } // Query for total tokenized staked assets func (k Querier) TotalTokenizeSharedAssets(c context.Context, req *types.QueryTotalTokenizeSharedAssetsRequest) (*types.QueryTotalTokenizeSharedAssetsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } ctx := sdk.UnwrapSDKContext(c) - totalTokenizeShared := math.Int{} - // TODO add LSM logic + records := k.GetAllTokenizeShareRecords(ctx) + totalTokenizeShared := sdk.ZeroInt() + + for _, record := range records { + moduleAcc := record.GetModuleAddress() + valAddr, err := sdk.ValAddressFromBech32(record.Validator) + if err != nil { + return nil, err + } + + validator, found := k.GetValidator(ctx, valAddr) + if !found { + return nil, types.ErrNoValidatorFound + } + + delegation, found := k.GetDelegation(ctx, moduleAcc, valAddr) + if !found { + return nil, types.ErrNoDelegation + } + + tokens := validator.TokensFromShares(delegation.Shares) + totalTokenizeShared = totalTokenizeShared.Add(tokens.RoundInt()) + } return &types.QueryTotalTokenizeSharedAssetsResponse{ Value: sdk.NewCoin(k.BondDenom(ctx), totalTokenizeShared), }, nil @@ -672,17 +747,33 @@ func (k Querier) TotalTokenizeSharedAssets(c context.Context, req *types.QueryTo // Liquid staked tokens are either tokenized delegations or delegations // owned by a module account func (k Querier) TotalLiquidStaked(c context.Context, req *types.QueryTotalLiquidStaked) (*types.QueryTotalLiquidStakedResponse, error) { - // TODO add LSM logic + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + ctx := sdk.UnwrapSDKContext(c) + totalLiquidStaked := k.GetTotalLiquidStakedTokens(ctx).String() return &types.QueryTotalLiquidStakedResponse{ - Tokens: "", + Tokens: totalLiquidStaked, }, nil } // Query status of an account's tokenize share lock func (k Querier) TokenizeShareLockInfo(c context.Context, req *types.QueryTokenizeShareLockInfo) (*types.QueryTokenizeShareLockInfoResponse, error) { - // TODO add LSM logic + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + ctx := sdk.UnwrapSDKContext(c) + + address := sdk.MustAccAddressFromBech32(req.Address) + status, completionTime := k.GetTokenizeSharesLock(ctx, address) + + timeString := "" + if !completionTime.IsZero() { + timeString = completionTime.String() + } + return &types.QueryTokenizeShareLockInfoResponse{ - Status: "", - ExpirationTime: "", + Status: status.String(), + ExpirationTime: timeString, }, nil } diff --git a/x/staking/keeper/liquid_stake.go b/x/staking/keeper/liquid_stake.go new file mode 100644 index 000000000000..64c44e4cd35d --- /dev/null +++ b/x/staking/keeper/liquid_stake.go @@ -0,0 +1,432 @@ +package keeper + +import ( + "time" + + "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +// SetTotalLiquidStakedTokens stores the total outstanding tokens owned by a liquid staking provider +func (k Keeper) SetTotalLiquidStakedTokens(ctx sdk.Context, tokens sdk.Int) { + store := ctx.KVStore(k.storeKey) + + tokensBz, err := tokens.Marshal() + if err != nil { + panic(err) + } + + store.Set(types.TotalLiquidStakedTokensKey, tokensBz) +} + +// GetTotalLiquidStakedTokens returns the total outstanding tokens owned by a liquid staking provider +// Returns zero if the total liquid stake amount has not been initialized +func (k Keeper) GetTotalLiquidStakedTokens(ctx sdk.Context) sdk.Int { + store := ctx.KVStore(k.storeKey) + tokensBz := store.Get(types.TotalLiquidStakedTokensKey) + + if tokensBz == nil { + return sdk.ZeroInt() + } + + var tokens sdk.Int + if err := tokens.Unmarshal(tokensBz); err != nil { + panic(err) + } + + return tokens +} + +// Checks if an account associated with a given delegation is related to liquid staking +// +// This is determined by checking if the account has a 32-length address +// which will identify the following scenarios: +// - An account has tokenized their shares, and thus the delegation is +// owned by the tokenize share record module account +// - A liquid staking provider is delegating through an ICA account +// +// Both ICA accounts and tokenize share record module accounts have 32-length addresses +// NOTE: This will have to be refactored before adapting it to chains beyond gaia +// as other chains may have 32-length addresses that are not related to the above scenarios +func (k Keeper) DelegatorIsLiquidStaker(delegatorAddress sdk.AccAddress) bool { + return len(delegatorAddress) == 32 +} + +// CheckExceedsGlobalLiquidStakingCap checks if a liquid delegation would cause the +// global liquid staking cap to be exceeded +// A liquid delegation is defined as either tokenized shares, or a delegation from an ICA Account +// The total stake is determined by the balance of the bonded pool +// If the delegation's shares are already bonded (e.g. in the event of a tokenized share) +// the tokens are already included in the bonded pool +// If the delegation's shares are not bonded (e.g. normal delegation), +// we need to add the tokens to the current bonded pool balance to get the total staked +func (k Keeper) CheckExceedsGlobalLiquidStakingCap(ctx sdk.Context, tokens sdk.Int, sharesAlreadyBonded bool) bool { + liquidStakingCap := k.GlobalLiquidStakingCap(ctx) + liquidStakedAmount := k.GetTotalLiquidStakedTokens(ctx) + + // Determine the total stake from the balance of the bonded pool + // If this is not a tokenized delegation, we need to add the tokens to the pool balance since + // they would not have been counted yet + // If this is for a tokenized delegation, the tokens are already included in the pool balance + totalStakedAmount := k.TotalBondedTokens(ctx) + if !sharesAlreadyBonded { + totalStakedAmount = totalStakedAmount.Add(tokens) + } + + // Calculate the percentage of stake that is liquid + updatedLiquidStaked := math.LegacyNewDec(liquidStakedAmount.Add(tokens).Int64()) + liquidStakePercent := updatedLiquidStaked.Quo(math.LegacyNewDec(totalStakedAmount.Int64())) + + return liquidStakePercent.GT(liquidStakingCap) +} + +// CheckExceedsValidatorBondCap checks if a liquid delegation to a validator would cause +// the liquid shares to exceed the validator bond factor +// A liquid delegation is defined as either tokenized shares, or a delegation from an ICA Account +// Returns true if the cap is exceeded +func (k Keeper) CheckExceedsValidatorBondCap(ctx sdk.Context, validator types.Validator, shares sdk.Dec) bool { + validatorBondFactor := k.ValidatorBondFactor(ctx) + if validatorBondFactor.Equal(types.ValidatorBondCapDisabled) { + return false + } + maxValLiquidShares := validator.ValidatorBondShares.Mul(validatorBondFactor) + return validator.LiquidShares.Add(shares).GT(maxValLiquidShares) +} + +// CheckExceedsValidatorLiquidStakingCap checks if a liquid delegation could cause the +// total liuquid shares to exceed the liquid staking cap +// A liquid delegation is defined as either tokenized shares, or a delegation from an ICA Account +// Returns true if the cap is exceeded +func (k Keeper) CheckExceedsValidatorLiquidStakingCap(ctx sdk.Context, validator types.Validator, shares sdk.Dec) bool { + updatedLiquidShares := validator.LiquidShares.Add(shares) + updatedTotalShares := validator.DelegatorShares.Add(shares) + + liquidStakePercent := updatedLiquidShares.Quo(updatedTotalShares) + liquidStakingCap := k.ValidatorLiquidStakingCap(ctx) + + return liquidStakePercent.GT(liquidStakingCap) +} + +// SafelyIncreaseTotalLiquidStakedTokens increments the total liquid staked tokens +// if the global cap is not surpassed by this delegation +// +// The percentage of liquid staked tokens must be less than the GlobalLiquidStakingCap: +// (TotalLiquidStakedTokens / TotalStakedTokens) <= GlobalLiquidStakingCap +func (k Keeper) SafelyIncreaseTotalLiquidStakedTokens(ctx sdk.Context, amount sdk.Int, sharesAlreadyBonded bool) error { + if k.CheckExceedsGlobalLiquidStakingCap(ctx, amount, sharesAlreadyBonded) { + return types.ErrGlobalLiquidStakingCapExceeded + } + + k.SetTotalLiquidStakedTokens(ctx, k.GetTotalLiquidStakedTokens(ctx).Add(amount)) + return nil +} + +// DecreaseTotalLiquidStakedTokens decrements the total liquid staked tokens +func (k Keeper) DecreaseTotalLiquidStakedTokens(ctx sdk.Context, amount sdk.Int) error { + totalLiquidStake := k.GetTotalLiquidStakedTokens(ctx) + if amount.GT(totalLiquidStake) { + return types.ErrTotalLiquidStakedUnderflow + } + k.SetTotalLiquidStakedTokens(ctx, totalLiquidStake.Sub(amount)) + return nil +} + +// SafelyIncreaseValidatorLiquidShares increments the liquid shares on a validator, if: +// the validator bond factor and validator liquid staking cap will not be exceeded by this delegation +// +// The percentage of validator liquid shares must be less than the ValidatorLiquidStakingCap, +// and the total liquid staked shares cannot exceed the validator bond cap +// 1) (TotalLiquidStakedTokens / TotalStakedTokens) <= ValidatorLiquidStakingCap +// 2) LiquidShares <= (ValidatorBondShares * ValidatorBondFactor) +func (k Keeper) SafelyIncreaseValidatorLiquidShares(ctx sdk.Context, valAddress sdk.ValAddress, shares sdk.Dec) (types.Validator, error) { + validator, found := k.GetValidator(ctx, valAddress) + if !found { + return validator, types.ErrNoValidatorFound + } + + // Confirm the validator bond factor and validator liquid staking cap will not be exceeded + if k.CheckExceedsValidatorBondCap(ctx, validator, shares) { + return validator, types.ErrInsufficientValidatorBondShares + } + if k.CheckExceedsValidatorLiquidStakingCap(ctx, validator, shares) { + return validator, types.ErrValidatorLiquidStakingCapExceeded + } + + // Increment the validator's liquid shares + validator.LiquidShares = validator.LiquidShares.Add(shares) + k.SetValidator(ctx, validator) + + return validator, nil +} + +// DecreaseValidatorLiquidShares decrements the liquid shares on a validator +func (k Keeper) DecreaseValidatorLiquidShares(ctx sdk.Context, valAddress sdk.ValAddress, shares sdk.Dec) (types.Validator, error) { + validator, found := k.GetValidator(ctx, valAddress) + if !found { + return validator, types.ErrNoValidatorFound + } + + if shares.GT(validator.LiquidShares) { + return validator, types.ErrValidatorLiquidSharesUnderflow + } + + validator.LiquidShares = validator.LiquidShares.Sub(shares) + k.SetValidator(ctx, validator) + + return validator, nil +} + +// Increase validator bond shares increments the validator's self bond +// in the event that the delegation amount on a validator bond delegation is increased +func (k Keeper) IncreaseValidatorBondShares(ctx sdk.Context, valAddress sdk.ValAddress, shares sdk.Dec) error { + validator, found := k.GetValidator(ctx, valAddress) + if !found { + return types.ErrNoValidatorFound + } + + validator.ValidatorBondShares = validator.ValidatorBondShares.Add(shares) + k.SetValidator(ctx, validator) + + return nil +} + +// SafelyDecreaseValidatorBond decrements the validator's self bond +// so long as it will not cause the current delegations to exceed the threshold +// set by validator bond factor +func (k Keeper) SafelyDecreaseValidatorBond(ctx sdk.Context, valAddress sdk.ValAddress, shares sdk.Dec) error { + validator, found := k.GetValidator(ctx, valAddress) + if !found { + return types.ErrNoValidatorFound + } + + // Check if the decreased self bond will cause the validator bond threshold to be exceeded + validatorBondFactor := k.ValidatorBondFactor(ctx) + validatorBondEnabled := !validatorBondFactor.Equal(types.ValidatorBondCapDisabled) + maxValTotalShare := validator.ValidatorBondShares.Sub(shares).Mul(validatorBondFactor) + + if validatorBondEnabled && validator.LiquidShares.GT(maxValTotalShare) { + return types.ErrInsufficientValidatorBondShares + } + + // Decrement the validator's self bond + validator.ValidatorBondShares = validator.ValidatorBondShares.Sub(shares) + k.SetValidator(ctx, validator) + + return nil +} + +// Adds a lock that prevents tokenizing shares for an account +// The tokenize share lock store is implemented by keying on the account address +// and storing a timestamp as the value. The timestamp is empty when the lock is +// set and gets populated with the unlock completion time once the unlock has started +func (k Keeper) AddTokenizeSharesLock(ctx sdk.Context, address sdk.AccAddress) { + store := ctx.KVStore(k.storeKey) + key := types.GetTokenizeSharesLockKey(address) + store.Set(key, sdk.FormatTimeBytes(time.Time{})) +} + +// Removes the tokenize share lock for an account to enable tokenizing shares +func (k Keeper) RemoveTokenizeSharesLock(ctx sdk.Context, address sdk.AccAddress) { + store := ctx.KVStore(k.storeKey) + key := types.GetTokenizeSharesLockKey(address) + store.Delete(key) +} + +// Updates the timestamp associated with a lock to the time at which the lock expires +func (k Keeper) SetTokenizeSharesUnlockTime(ctx sdk.Context, address sdk.AccAddress, completionTime time.Time) { + store := ctx.KVStore(k.storeKey) + key := types.GetTokenizeSharesLockKey(address) + store.Set(key, sdk.FormatTimeBytes(completionTime)) +} + +// Checks if there is currently a tokenize share lock for a given account +// Returns the status indicating whether the account is locked, unlocked, +// or as a lock expiring. If the lock is expiring, the expiration time is returned +func (k Keeper) GetTokenizeSharesLock(ctx sdk.Context, address sdk.AccAddress) (status types.TokenizeShareLockStatus, unlockTime time.Time) { + store := ctx.KVStore(k.storeKey) + key := types.GetTokenizeSharesLockKey(address) + bz := store.Get(key) + if len(bz) == 0 { + return types.TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED, time.Time{} + } + unlockTime, err := sdk.ParseTimeBytes(bz) + if err != nil { + panic(err) + } + if unlockTime.IsZero() { + return types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED, time.Time{} + } + return types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING, unlockTime +} + +// Returns all tokenize share locks +func (k Keeper) GetAllTokenizeSharesLocks(ctx sdk.Context) (tokenizeShareLocks []types.TokenizeShareLock) { + store := ctx.KVStore(k.storeKey) + + iterator := sdk.KVStorePrefixIterator(store, types.TokenizeSharesLockPrefix) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + addressBz := iterator.Key()[2:] // remove prefix bytes and address length + unlockTime, err := sdk.ParseTimeBytes(iterator.Value()) + if err != nil { + panic(err) + } + + var status types.TokenizeShareLockStatus + if unlockTime.IsZero() { + status = types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED + } else { + status = types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING + } + + bechPrefix := sdk.GetConfig().GetBech32AccountAddrPrefix() + lock := types.TokenizeShareLock{ + Address: sdk.MustBech32ifyAddressBytes(bechPrefix, addressBz), + Status: status.String(), + CompletionTime: unlockTime, + } + + tokenizeShareLocks = append(tokenizeShareLocks, lock) + } + + return tokenizeShareLocks +} + +// Stores a list of addresses pending tokenize share unlocking at the same time +func (k Keeper) SetPendingTokenizeShareAuthorizations(ctx sdk.Context, completionTime time.Time, authorizations types.PendingTokenizeShareAuthorizations) { + store := ctx.KVStore(k.storeKey) + timeKey := types.GetTokenizeShareAuthorizationTimeKey(completionTime) + bz := k.cdc.MustMarshal(&authorizations) + store.Set(timeKey, bz) +} + +// Returns a list of addresses pending tokenize share unlocking at the same time +func (k Keeper) GetPendingTokenizeShareAuthorizations(ctx sdk.Context, completionTime time.Time) types.PendingTokenizeShareAuthorizations { + store := ctx.KVStore(k.storeKey) + + timeKey := types.GetTokenizeShareAuthorizationTimeKey(completionTime) + bz := store.Get(timeKey) + + authorizations := types.PendingTokenizeShareAuthorizations{Addresses: []string{}} + if len(bz) == 0 { + return authorizations + } + k.cdc.MustUnmarshal(bz, &authorizations) + + return authorizations +} + +// Inserts the address into a queue where it will sit for 1 unbonding period +// before the tokenize share lock is removed +// Returns the completion time +func (k Keeper) QueueTokenizeSharesAuthorization(ctx sdk.Context, address sdk.AccAddress) time.Time { + params := k.GetParams(ctx) + completionTime := ctx.BlockTime().Add(params.UnbondingTime) + + // Append the address to the list of addresses that also unlock at this time + authorizations := k.GetPendingTokenizeShareAuthorizations(ctx, completionTime) + authorizations.Addresses = append(authorizations.Addresses, address.String()) + + k.SetPendingTokenizeShareAuthorizations(ctx, completionTime, authorizations) + k.SetTokenizeSharesUnlockTime(ctx, address, completionTime) + + return completionTime +} + +// Cancels a pending tokenize share authorization by removing the lock from the queue +func (k Keeper) CancelTokenizeShareLockExpiration(ctx sdk.Context, address sdk.AccAddress, completionTime time.Time) { + authorizations := k.GetPendingTokenizeShareAuthorizations(ctx, completionTime) + + updatedAddresses := []string{} + for _, expiringAddress := range authorizations.Addresses { + if address.String() != expiringAddress { + updatedAddresses = append(updatedAddresses, expiringAddress) + } + } + + authorizations.Addresses = updatedAddresses + k.SetPendingTokenizeShareAuthorizations(ctx, completionTime, authorizations) +} + +// Unlocks all queued tokenize share authorizations that have matured +// (i.e. have waited the full unbonding period) +func (k Keeper) RemoveExpiredTokenizeShareLocks(ctx sdk.Context, blockTime time.Time) (unlockedAddresses []string) { + store := ctx.KVStore(k.storeKey) + + // iterators all time slices from time 0 until the current block time + prefixEnd := sdk.InclusiveEndBytes(types.GetTokenizeShareAuthorizationTimeKey(blockTime)) + iterator := store.Iterator(types.TokenizeSharesUnlockQueuePrefix, prefixEnd) + defer iterator.Close() + + // collect all unlocked addresses + unlockedAddresses = []string{} + for ; iterator.Valid(); iterator.Next() { + authorizations := types.PendingTokenizeShareAuthorizations{} + k.cdc.MustUnmarshal(iterator.Value(), &authorizations) + + for _, addressString := range authorizations.Addresses { + unlockedAddresses = append(unlockedAddresses, addressString) + } + store.Delete(iterator.Key()) + } + + // remove the lock from each unlocked address + for _, unlockedAddress := range unlockedAddresses { + k.RemoveTokenizeSharesLock(ctx, sdk.MustAccAddressFromBech32(unlockedAddress)) + } + + return unlockedAddresses +} + +// Calculates and sets the global liquid staked tokens and liquid shares by validator +// The totals are determined by looping each delegation record and summing the stake +// if the delegator has a 32-length address. Checking for a 32-length address will capture +// ICA accounts, as well as tokenized delegations which are owned by module accounts +// under the hood +// This function must be called in the upgrade handler which onboards LSM +func (k Keeper) RefreshTotalLiquidStaked(ctx sdk.Context) error { + // First reset each validator's liquid shares to 0 + for _, validator := range k.GetAllValidators(ctx) { + validator.LiquidShares = sdk.ZeroDec() + k.SetValidator(ctx, validator) + } + + // Sum up the total liquid tokens and increment each validator's liquid shares + totalLiquidStakedTokens := sdk.ZeroInt() + for _, delegation := range k.GetAllDelegations(ctx) { + delegatorAddress, err := sdk.AccAddressFromBech32(delegation.DelegatorAddress) + if err != nil { + return err + } + + // If the delegator is either an ICA account or a tokenize share module account, + // the delegation should be considered to be associated with liquid staking + // Consequently, the global number of liquid staked tokens, and the total + // liquid shares on the validator should be incremented + if k.DelegatorIsLiquidStaker(delegatorAddress) { + validatorAddress, err := sdk.ValAddressFromBech32(delegation.ValidatorAddress) + if err != nil { + return err + } + validator, found := k.GetValidator(ctx, validatorAddress) + if !found { + return types.ErrNoValidatorFound + } + + liquidShares := delegation.Shares + liquidTokens := validator.TokensFromShares(liquidShares).TruncateInt() + + validator.LiquidShares = validator.LiquidShares.Add(liquidShares) + k.SetValidator(ctx, validator) + + totalLiquidStakedTokens = totalLiquidStakedTokens.Add(liquidTokens) + } + } + + k.SetTotalLiquidStakedTokens(ctx, totalLiquidStakedTokens) + + return nil +} diff --git a/x/staking/keeper/liquid_stake_test.go b/x/staking/keeper/liquid_stake_test.go new file mode 100644 index 000000000000..abeba9b9343b --- /dev/null +++ b/x/staking/keeper/liquid_stake_test.go @@ -0,0 +1,1209 @@ +package keeper_test + +// TODO refactor LSM tests + +// import ( +// "fmt" +// "testing" +// "time" + +// testutil "github.com/cosmos/cosmos-sdk/testutil/sims" + +// "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" +// "github.com/cosmos/cosmos-sdk/simapp" +// sdk "github.com/cosmos/cosmos-sdk/types" +// "github.com/cosmos/cosmos-sdk/types/address" +// authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +// minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" +// "github.com/cosmos/cosmos-sdk/x/staking/types" +// "github.com/stretchr/testify/require" +// ) + +// // Helper function to create a base account from an account name +// // Used to differentiate against liquid staking provider module account +// func createBaseAccount(app *simapp.SimApp, ctx sdk.Context, accountName string) sdk.AccAddress { +// baseAccountAddress := sdk.AccAddress(accountName) +// app.AccountKeeper.SetAccount(ctx, authtypes.NewBaseAccountWithAddress(baseAccountAddress)) +// return baseAccountAddress +// } + +// // Helper function to create 32-length account +// // Used to mock an liquid staking provider's ICA account +// func createICAAccount(app *simapp.SimApp, ctx sdk.Context) sdk.AccAddress { +// icahost := "icahost" +// connectionID := "connection-0" +// portID := icahost + +// moduleAddress := authtypes.NewModuleAddress(icahost) +// icaAddress := sdk.AccAddress(address.Derive(moduleAddress, []byte(connectionID+portID))) + +// account := authtypes.NewBaseAccountWithAddress(icaAddress) +// app.AccountKeeper.SetAccount(ctx, account) + +// return icaAddress +// } + +// // Helper function to create a module account address from a tokenized share +// // Used to mock the delegation owner of a tokenized share +// func createTokenizeShareModuleAccount(recordID uint64) sdk.AccAddress { +// record := types.TokenizeShareRecord{ +// Id: recordID, +// ModuleAccount: fmt.Sprintf("%s%d", types.TokenizeShareModuleAccountPrefix, recordID), +// } +// return record.GetModuleAddress() +// } + +// // Tests Set/Get TotalLiquidStakedTokens +// func (s *KeeperTestSuite) TestTotalLiquidStakedTokens(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// // Update the total liquid staked +// total := sdk.NewInt(100) +// keeper.SetTotalLiquidStakedTokens(ctx, total) + +// // Confirm it was updated +// require.Equal(t, total, keeper.GetTotalLiquidStakedTokens(ctx), "initial") +// } + +// // Tests Increase/Decrease TotalValidatorLiquidShares +// func (s *KeeperTestSuite) TestValidatorLiquidShares(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper + +// // Create a validator address +// privKey := secp256k1.GenPrivKey() +// pubKey := privKey.PubKey() +// valAddress := sdk.ValAddress(pubKey.Address()) + +// // Set an initial total +// initial := sdk.NewDec(100) +// validator := types.Validator{ +// OperatorAddress: valAddress.String(), +// LiquidShares: initial, +// } +// keeper.SetValidator(ctx, validator) +// } + +// // Tests DelegatorIsLiquidStaker +// func (s *KeeperTestSuite) TestDelegatorIsLiquidStaker(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// // Create base and ICA accounts +// baseAccountAddress := createBaseAccount(app, ctx, "base-account") +// icaAccountAddress := createICAAccount(app, ctx) + +// // Only the ICA module account should be considered a liquid staking provider +// require.False(keeper.DelegatorIsLiquidStaker(baseAccountAddress), "base account") +// require.True(keeper.DelegatorIsLiquidStaker(icaAccountAddress), "ICA module account") +// } + +// // Helper function to clear the Bonded pool balances before a unit test +// func clearPoolBalance(t *testing.T, app *simapp.SimApp, ctx sdk.Context) { +// bondDenom := keeper.BondDenom(ctx) +// initialBondedBalance := app.BankKeeper.GetBalance(ctx, app.AccountKeeper.GetModuleAddress(types.BondedPoolName), bondDenom) + +// err := app.BankKeeper.SendCoinsFromModuleToModule(ctx, types.BondedPoolName, minttypes.ModuleName, sdk.NewCoins(initialBondedBalance)) +// require.NoError(t, err, "no error expected when clearing bonded pool balance") +// } + +// // Helper function to fund the Bonded pool balances before a unit test +// func fundPoolBalance(t *testing.T, app *simapp.SimApp, ctx sdk.Context, amount sdk.Int) { +// bondDenom := keeper.BondDenom(ctx) +// bondedPoolCoin := sdk.NewCoin(bondDenom, amount) + +// err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, sdk.NewCoins(bondedPoolCoin)) +// require.NoError(t, err, "no error expected when minting") + +// err = app.BankKeeper.SendCoinsFromModuleToModule(ctx, minttypes.ModuleName, types.BondedPoolName, sdk.NewCoins(bondedPoolCoin)) +// require.NoError(t, err, "no error expected when sending tokens to bonded pool") +// } + +// // Tests CheckExceedsGlobalLiquidStakingCap +// func (s *KeeperTestSuite) TestCheckExceedsGlobalLiquidStakingCap(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// testCases := []struct { +// name string +// globalLiquidCap sdk.Dec +// totalLiquidStake sdk.Int +// totalStake sdk.Int +// newLiquidStake sdk.Int +// tokenizingShares bool +// expectedExceeds bool +// }{ +// { +// // Cap: 10% - Native Delegation - Delegation Below Threshold +// // Total Liquid Stake: 5, Total Stake: 95, New Liquid Stake: 1 +// // => Total Liquid Stake: 5+1=6, Total Stake: 95+1=96 => 6/96 = 6% < 10% cap +// name: "10 percent cap _ native delegation _ delegation below cap", +// globalLiquidCap: sdk.MustNewDecFromStr("0.1"), +// totalLiquidStake: sdk.NewInt(5), +// totalStake: sdk.NewInt(95), +// newLiquidStake: sdk.NewInt(1), +// tokenizingShares: false, +// expectedExceeds: false, +// }, +// { +// // Cap: 10% - Native Delegation - Delegation At Threshold +// // Total Liquid Stake: 5, Total Stake: 95, New Liquid Stake: 5 +// // => Total Liquid Stake: 5+5=10, Total Stake: 95+5=100 => 10/100 = 10% == 10% cap +// name: "10 percent cap _ native delegation _ delegation equals cap", +// globalLiquidCap: sdk.MustNewDecFromStr("0.1"), +// totalLiquidStake: sdk.NewInt(5), +// totalStake: sdk.NewInt(95), +// newLiquidStake: sdk.NewInt(5), +// tokenizingShares: false, +// expectedExceeds: false, +// }, +// { +// // Cap: 10% - Native Delegation - Delegation Exceeds Threshold +// // Total Liquid Stake: 5, Total Stake: 95, New Liquid Stake: 6 +// // => Total Liquid Stake: 5+6=11, Total Stake: 95+6=101 => 11/101 = 11% > 10% cap +// name: "10 percent cap _ native delegation _ delegation exceeds cap", +// globalLiquidCap: sdk.MustNewDecFromStr("0.1"), +// totalLiquidStake: sdk.NewInt(5), +// totalStake: sdk.NewInt(95), +// newLiquidStake: sdk.NewInt(6), +// tokenizingShares: false, +// expectedExceeds: true, +// }, +// { +// // Cap: 20% - Native Delegation - Delegation Below Threshold +// // Total Liquid Stake: 20, Total Stake: 220, New Liquid Stake: 29 +// // => Total Liquid Stake: 20+29=49, Total Stake: 220+29=249 => 49/249 = 19% < 20% cap +// name: "20 percent cap _ native delegation _ delegation below cap", +// globalLiquidCap: sdk.MustNewDecFromStr("0.20"), +// totalLiquidStake: sdk.NewInt(20), +// totalStake: sdk.NewInt(220), +// newLiquidStake: sdk.NewInt(29), +// tokenizingShares: false, +// expectedExceeds: false, +// }, +// { +// // Cap: 20% - Native Delegation - Delegation At Threshold +// // Total Liquid Stake: 20, Total Stake: 220, New Liquid Stake: 30 +// // => Total Liquid Stake: 20+30=50, Total Stake: 220+30=250 => 50/250 = 20% == 20% cap +// name: "20 percent cap _ native delegation _ delegation equals cap", +// globalLiquidCap: sdk.MustNewDecFromStr("0.20"), +// totalLiquidStake: sdk.NewInt(20), +// totalStake: sdk.NewInt(220), +// newLiquidStake: sdk.NewInt(30), +// tokenizingShares: false, +// expectedExceeds: false, +// }, +// { +// // Cap: 20% - Native Delegation - Delegation Exceeds Threshold +// // Total Liquid Stake: 20, Total Stake: 220, New Liquid Stake: 31 +// // => Total Liquid Stake: 20+31=51, Total Stake: 220+31=251 => 51/251 = 21% > 20% cap +// name: "20 percent cap _ native delegation _ delegation exceeds cap", +// globalLiquidCap: sdk.MustNewDecFromStr("0.20"), +// totalLiquidStake: sdk.NewInt(20), +// totalStake: sdk.NewInt(220), +// newLiquidStake: sdk.NewInt(31), +// tokenizingShares: false, +// expectedExceeds: true, +// }, +// { +// // Cap: 50% - Native Delegation - Delegation Below Threshold +// // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 50 +// // => Total Liquid Stake: 0+50=50, Total Stake: 100+50=150 => 50/150 = 33% < 50% cap +// name: "50 percent cap _ native delegation _ delegation below cap", +// globalLiquidCap: sdk.MustNewDecFromStr("0.5"), +// totalLiquidStake: sdk.NewInt(0), +// totalStake: sdk.NewInt(100), +// newLiquidStake: sdk.NewInt(50), +// tokenizingShares: false, +// expectedExceeds: false, +// }, +// { +// // Cap: 50% - Tokenized Delegation - Delegation At Threshold +// // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 50 +// // => 50 / 100 = 50% == 50% cap +// name: "50 percent cap _ tokenized delegation _ delegation equals cap", +// globalLiquidCap: sdk.MustNewDecFromStr("0.5"), +// totalLiquidStake: sdk.NewInt(0), +// totalStake: sdk.NewInt(100), +// newLiquidStake: sdk.NewInt(50), +// tokenizingShares: true, +// expectedExceeds: false, +// }, +// { +// // Cap: 50% - Native Delegation - Delegation Below Threshold +// // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 51 +// // => Total Liquid Stake: 0+51=51, Total Stake: 100+51=151 => 51/151 = 33% < 50% cap +// name: "50 percent cap _ native delegation _ delegation below cap", +// globalLiquidCap: sdk.MustNewDecFromStr("0.5"), +// totalLiquidStake: sdk.NewInt(0), +// totalStake: sdk.NewInt(100), +// newLiquidStake: sdk.NewInt(51), +// tokenizingShares: false, +// expectedExceeds: false, +// }, +// { +// // Cap: 50% - Tokenized Delegation - Delegation Exceeds Threshold +// // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 51 +// // => 51 / 100 = 51% > 50% cap +// name: "50 percent cap _ tokenized delegation _delegation exceeds cap", +// globalLiquidCap: sdk.MustNewDecFromStr("0.5"), +// totalLiquidStake: sdk.NewInt(0), +// totalStake: sdk.NewInt(100), +// newLiquidStake: sdk.NewInt(51), +// tokenizingShares: true, +// expectedExceeds: true, +// }, +// { +// // Cap of 0% - everything should exceed +// name: "0 percent cap", +// globalLiquidCap: sdk.ZeroDec(), +// totalLiquidStake: sdk.NewInt(0), +// totalStake: sdk.NewInt(1_000_000), +// newLiquidStake: sdk.NewInt(1), +// tokenizingShares: false, +// expectedExceeds: true, +// }, +// { +// // Cap of 100% - nothing should exceed +// name: "100 percent cap", +// globalLiquidCap: sdk.OneDec(), +// totalLiquidStake: sdk.NewInt(1), +// totalStake: sdk.NewInt(1), +// newLiquidStake: sdk.NewInt(1_000_000), +// tokenizingShares: false, +// expectedExceeds: false, +// }, +// } + +// for _, tc := range testCases { +// t.Run(tc.name, func(t *testing.T) { +// // Update the global liquid staking cap +// params := keeper.GetParams(ctx) +// params.GlobalLiquidStakingCap = tc.globalLiquidCap +// keeper.SetParams(ctx, params) + +// // Update the total liquid tokens +// keeper.SetTotalLiquidStakedTokens(ctx, tc.totalLiquidStake) + +// // Fund each pool for the given test case +// clearPoolBalance(t, app, ctx) +// fundPoolBalance(t, app, ctx, tc.totalStake) + +// // Check if the new tokens would exceed the global cap +// actualExceeds := keeper.CheckExceedsGlobalLiquidStakingCap(ctx, tc.newLiquidStake, tc.tokenizingShares) +// require.Equal(t, tc.expectedExceeds, actualExceeds, tc.name) +// }) +// } +// } + +// // Tests SafelyIncreaseTotalLiquidStakedTokens +// func (s *KeeperTestSuite) TestSafelyIncreaseTotalLiquidStakedTokens(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// intitialTotalLiquidStaked := sdk.NewInt(100) +// increaseAmount := sdk.NewInt(10) +// poolBalance := sdk.NewInt(200) + +// // Set the total staked and total liquid staked amounts +// // which are required components when checking the global cap +// // Total stake is calculated from the pool balance +// clearPoolBalance(t, app, ctx) +// fundPoolBalance(t, app, ctx, poolBalance) +// keeper.SetTotalLiquidStakedTokens(ctx, intitialTotalLiquidStaked) + +// // Set the global cap such that a small delegation would exceed the cap +// params := keeper.GetParams(ctx) +// params.GlobalLiquidStakingCap = sdk.MustNewDecFromStr("0.0001") +// keeper.SetParams(ctx, params) + +// // Attempt to increase the total liquid stake again, it should error since +// // the cap was exceeded +// err := keeper.SafelyIncreaseTotalLiquidStakedTokens(ctx, increaseAmount, true) +// require.ErrorIs(t, err, types.ErrGlobalLiquidStakingCapExceeded) +// require.Equal(t, intitialTotalLiquidStaked, keeper.GetTotalLiquidStakedTokens(ctx)) + +// // Now relax the cap so that the increase succeeds +// params.GlobalLiquidStakingCap = sdk.MustNewDecFromStr("0.99") +// keeper.SetParams(ctx, params) + +// // Confirm the total increased +// err = keeper.SafelyIncreaseTotalLiquidStakedTokens(ctx, increaseAmount, true) +// require.NoError(t, err) +// require.Equal(t, intitialTotalLiquidStaked.Add(increaseAmount), keeper.GetTotalLiquidStakedTokens(ctx)) +// } + +// // Tests DecreaseTotalLiquidStakedTokens +// func (s *KeeperTestSuite) TestDecreaseTotalLiquidStakedTokens(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// intitialTotalLiquidStaked := sdk.NewInt(100) +// decreaseAmount := sdk.NewInt(10) + +// // Set the total liquid staked to an arbitrary value +// keeper.SetTotalLiquidStakedTokens(ctx, intitialTotalLiquidStaked) + +// // Decrease the total liquid stake and confirm the total was updated +// err := keeper.DecreaseTotalLiquidStakedTokens(ctx, decreaseAmount) +// require.NoError(t, err, "no error expected when decreasing total liquid staked tokens") +// require.Equal(t, intitialTotalLiquidStaked.Sub(decreaseAmount), keeper.GetTotalLiquidStakedTokens(ctx)) + +// // Attempt to decrease by an excessive amount, it should error +// err = keeper.DecreaseTotalLiquidStakedTokens(ctx, intitialTotalLiquidStaked) +// require.ErrorIs(err, types.ErrTotalLiquidStakedUnderflow) +// } + +// // Tests CheckExceedsValidatorBondCap +// func (s *KeeperTestSuite) TestCheckExceedsValidatorBondCap(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// testCases := []struct { +// name string +// validatorShares sdk.Dec +// validatorBondFactor sdk.Dec +// currentLiquidShares sdk.Dec +// newShares sdk.Dec +// expectedExceeds bool +// }{ +// { +// // Validator Shares: 100, Factor: 1, Current Shares: 90 => 100 Max Shares, Capacity: 10 +// // New Shares: 5 - below cap +// name: "factor 1 - below cap", +// validatorShares: sdk.NewDec(100), +// validatorBondFactor: sdk.NewDec(1), +// currentLiquidShares: sdk.NewDec(90), +// newShares: sdk.NewDec(5), +// expectedExceeds: false, +// }, +// { +// // Validator Shares: 100, Factor: 1, Current Shares: 90 => 100 Max Shares, Capacity: 10 +// // New Shares: 10 - at cap +// name: "factor 1 - at cap", +// validatorShares: sdk.NewDec(100), +// validatorBondFactor: sdk.NewDec(1), +// currentLiquidShares: sdk.NewDec(90), +// newShares: sdk.NewDec(10), +// expectedExceeds: false, +// }, +// { +// // Validator Shares: 100, Factor: 1, Current Shares: 90 => 100 Max Shares, Capacity: 10 +// // New Shares: 15 - above cap +// name: "factor 1 - above cap", +// validatorShares: sdk.NewDec(100), +// validatorBondFactor: sdk.NewDec(1), +// currentLiquidShares: sdk.NewDec(90), +// newShares: sdk.NewDec(15), +// expectedExceeds: true, +// }, +// { +// // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110 +// // New Shares: 5 - below cap +// name: "factor 2 - well below cap", +// validatorShares: sdk.NewDec(100), +// validatorBondFactor: sdk.NewDec(2), +// currentLiquidShares: sdk.NewDec(90), +// newShares: sdk.NewDec(5), +// expectedExceeds: false, +// }, +// { +// // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110 +// // New Shares: 100 - below cap +// name: "factor 2 - below cap", +// validatorShares: sdk.NewDec(100), +// validatorBondFactor: sdk.NewDec(2), +// currentLiquidShares: sdk.NewDec(90), +// newShares: sdk.NewDec(100), +// expectedExceeds: false, +// }, +// { +// // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110 +// // New Shares: 110 - below cap +// name: "factor 2 - at cap", +// validatorShares: sdk.NewDec(100), +// validatorBondFactor: sdk.NewDec(2), +// currentLiquidShares: sdk.NewDec(90), +// newShares: sdk.NewDec(110), +// expectedExceeds: false, +// }, +// { +// // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110 +// // New Shares: 111 - above cap +// name: "factor 2 - above cap", +// validatorShares: sdk.NewDec(100), +// validatorBondFactor: sdk.NewDec(2), +// currentLiquidShares: sdk.NewDec(90), +// newShares: sdk.NewDec(111), +// expectedExceeds: true, +// }, +// { +// // Validator Shares: 100, Factor: 100, Current Shares: 90 => 10000 Max Shares, Capacity: 9910 +// // New Shares: 100 - below cap +// name: "factor 100 - below cap", +// validatorShares: sdk.NewDec(100), +// validatorBondFactor: sdk.NewDec(100), +// currentLiquidShares: sdk.NewDec(90), +// newShares: sdk.NewDec(100), +// expectedExceeds: false, +// }, +// { +// // Validator Shares: 100, Factor: 100, Current Shares: 90 => 10000 Max Shares, Capacity: 9910 +// // New Shares: 9910 - at cap +// name: "factor 100 - at cap", +// validatorShares: sdk.NewDec(100), +// validatorBondFactor: sdk.NewDec(100), +// currentLiquidShares: sdk.NewDec(90), +// newShares: sdk.NewDec(9910), +// expectedExceeds: false, +// }, +// { +// // Validator Shares: 100, Factor: 100, Current Shares: 90 => 10000 Max Shares, Capacity: 9910 +// // New Shares: 9911 - above cap +// name: "factor 100 - above cap", +// validatorShares: sdk.NewDec(100), +// validatorBondFactor: sdk.NewDec(100), +// currentLiquidShares: sdk.NewDec(90), +// newShares: sdk.NewDec(9911), +// expectedExceeds: true, +// }, +// { +// // Factor of -1 (disabled): Should always return false +// name: "factor disabled", +// validatorShares: sdk.NewDec(1), +// validatorBondFactor: sdk.NewDec(-1), +// currentLiquidShares: sdk.NewDec(1), +// newShares: sdk.NewDec(1_000_000), +// expectedExceeds: false, +// }, +// } + +// for _, tc := range testCases { +// t.Run(tc.name, func(t *testing.T) { +// // Update the validator bond factor +// params := keeper.GetParams(ctx) +// params.ValidatorBondFactor = tc.validatorBondFactor +// keeper.SetParams(ctx, params) + +// // Create a validator with designated self-bond shares +// validator := types.Validator{ +// LiquidShares: tc.currentLiquidShares, +// ValidatorBondShares: tc.validatorShares, +// } + +// // Check whether the cap is exceeded +// actualExceeds := keeper.CheckExceedsValidatorBondCap(ctx, validator, tc.newShares) +// require.Equal(t, tc.expectedExceeds, actualExceeds, tc.name) +// }) +// } +// } + +// // Tests TestCheckExceedsValidatorLiquidStakingCap +// func (s *KeeperTestSuite) TestCheckExceedsValidatorLiquidStakingCap(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// testCases := []struct { +// name string +// validatorLiquidCap sdk.Dec +// validatorLiquidShares sdk.Dec +// validatorTotalShares sdk.Dec +// newLiquidShares sdk.Dec +// expectedExceeds bool +// }{ +// { +// // Cap: 10% - Delegation Below Threshold +// // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 1 +// // => Liquid Shares: 5+1=6, Total Shares: 95+1=96 => 6/96 = 6% < 10% cap +// name: "10 percent cap _ delegation below cap", +// validatorLiquidCap: sdk.MustNewDecFromStr("0.1"), +// validatorLiquidShares: sdk.NewDec(5), +// validatorTotalShares: sdk.NewDec(95), +// newLiquidShares: sdk.NewDec(1), +// expectedExceeds: false, +// }, +// { +// // Cap: 10% - Delegation At Threshold +// // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 5 +// // => Liquid Shares: 5+5=10, Total Shares: 95+5=100 => 10/100 = 10% == 10% cap +// name: "10 percent cap _ delegation equals cap", +// validatorLiquidCap: sdk.MustNewDecFromStr("0.1"), +// validatorLiquidShares: sdk.NewDec(5), +// validatorTotalShares: sdk.NewDec(95), +// newLiquidShares: sdk.NewDec(4), +// expectedExceeds: false, +// }, +// { +// // Cap: 10% - Delegation Exceeds Threshold +// // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 6 +// // => Liquid Shares: 5+6=11, Total Shares: 95+6=101 => 11/101 = 11% > 10% cap +// name: "10 percent cap _ delegation exceeds cap", +// validatorLiquidCap: sdk.MustNewDecFromStr("0.1"), +// validatorLiquidShares: sdk.NewDec(5), +// validatorTotalShares: sdk.NewDec(95), +// newLiquidShares: sdk.NewDec(6), +// expectedExceeds: true, +// }, +// { +// // Cap: 20% - Delegation Below Threshold +// // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 29 +// // => Liquid Shares: 20+29=49, Total Shares: 220+29=249 => 49/249 = 19% < 20% cap +// name: "20 percent cap _ delegation below cap", +// validatorLiquidCap: sdk.MustNewDecFromStr("0.2"), +// validatorLiquidShares: sdk.NewDec(20), +// validatorTotalShares: sdk.NewDec(220), +// newLiquidShares: sdk.NewDec(29), +// expectedExceeds: false, +// }, +// { +// // Cap: 20% - Delegation At Threshold +// // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 30 +// // => Liquid Shares: 20+30=50, Total Shares: 220+30=250 => 50/250 = 20% == 20% cap +// name: "20 percent cap _ delegation equals cap", +// validatorLiquidCap: sdk.MustNewDecFromStr("0.2"), +// validatorLiquidShares: sdk.NewDec(20), +// validatorTotalShares: sdk.NewDec(220), +// newLiquidShares: sdk.NewDec(30), +// expectedExceeds: false, +// }, +// { +// // Cap: 20% - Delegation Exceeds Threshold +// // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 31 +// // => Liquid Shares: 20+31=51, Total Shares: 220+31=251 => 51/251 = 21% > 20% cap +// name: "20 percent cap _ delegation exceeds cap", +// validatorLiquidCap: sdk.MustNewDecFromStr("0.2"), +// validatorLiquidShares: sdk.NewDec(20), +// validatorTotalShares: sdk.NewDec(220), +// newLiquidShares: sdk.NewDec(31), +// expectedExceeds: true, +// }, +// { +// // Cap of 0% - everything should exceed +// name: "0 percent cap", +// validatorLiquidCap: sdk.ZeroDec(), +// validatorLiquidShares: sdk.NewDec(0), +// validatorTotalShares: sdk.NewDec(1_000_000), +// newLiquidShares: sdk.NewDec(1), +// expectedExceeds: true, +// }, +// { +// // Cap of 100% - nothing should exceed +// name: "100 percent cap", +// validatorLiquidCap: sdk.OneDec(), +// validatorLiquidShares: sdk.NewDec(1), +// validatorTotalShares: sdk.NewDec(1_000_000), +// newLiquidShares: sdk.NewDec(1), +// expectedExceeds: false, +// }, +// } + +// for _, tc := range testCases { +// t.Run(tc.name, func(t *testing.T) { +// // Update the validator liquid staking cap +// params := keeper.GetParams(ctx) +// params.ValidatorLiquidStakingCap = tc.validatorLiquidCap +// keeper.SetParams(ctx, params) + +// // Create a validator with designated self-bond shares +// validator := types.Validator{ +// LiquidShares: tc.validatorLiquidShares, +// DelegatorShares: tc.validatorTotalShares, +// } + +// // Check whether the cap is exceeded +// actualExceeds := keeper.CheckExceedsValidatorLiquidStakingCap(ctx, validator, tc.newLiquidShares) +// require.Equal(t, tc.expectedExceeds, actualExceeds, tc.name) +// }) +// } +// } + +// // Tests SafelyIncreaseValidatorLiquidShares +// func (s *KeeperTestSuite) TestSafelyIncreaseValidatorLiquidShares(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// // Generate a test validator address +// privKey := secp256k1.GenPrivKey() +// pubKey := privKey.PubKey() +// valAddress := sdk.ValAddress(pubKey.Address()) + +// // Helper function to check the validator's liquid shares +// checkValidatorLiquidShares := func(expected sdk.Dec, description string) { +// actualValidator, found := keeper.GetValidator(ctx, valAddress) +// require.True(found) +// require.Equal(expected.TruncateInt64(), actualValidator.LiquidShares.TruncateInt64(), description) +// } + +// // Start with the following: +// // Initial Liquid Shares: 0 +// // Validator Bond Shares: 10 +// // Validator TotalShares: 75 +// // +// // Initial Caps: +// // ValidatorBondFactor: 1 (Cap applied at 10 shares) +// // ValidatorLiquidStakingCap: 25% (Cap applied at 25 shares) +// // +// // Cap Increases: +// // ValidatorBondFactor: 10 (Cap applied at 100 shares) +// // ValidatorLiquidStakingCap: 40% (Cap applied at 50 shares) +// initialLiquidShares := sdk.NewDec(0) +// validatorBondShares := sdk.NewDec(10) +// validatorTotalShares := sdk.NewDec(75) + +// firstIncreaseAmount := sdk.NewDec(20) +// secondIncreaseAmount := sdk.NewDec(10) // total increase of 30 + +// initialBondFactor := sdk.NewDec(1) +// finalBondFactor := sdk.NewDec(10) +// initialLiquidStakingCap := sdk.MustNewDecFromStr("0.25") +// finalLiquidStakingCap := sdk.MustNewDecFromStr("0.4") + +// // Create a validator with designated self-bond shares +// initialValidator := types.Validator{ +// OperatorAddress: valAddress.String(), +// LiquidShares: initialLiquidShares, +// ValidatorBondShares: validatorBondShares, +// DelegatorShares: validatorTotalShares, +// } +// keeper.SetValidator(ctx, initialValidator) + +// // Set validator bond factor to a small number such that any delegation would fail, +// // and set the liquid staking cap such that the first stake would succeed, but the second +// // would fail +// params := keeper.GetParams(ctx) +// params.ValidatorBondFactor = initialBondFactor +// params.ValidatorLiquidStakingCap = initialLiquidStakingCap +// keeper.SetParams(ctx, params) + +// // Attempt to increase the validator liquid shares, it should throw an +// // error that the validator bond cap was exceeded +// _, err := keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, firstIncreaseAmount) +// require.ErrorIs(t, err, types.ErrInsufficientValidatorBondShares) +// checkValidatorLiquidShares(initialLiquidShares, "shares after low bond factor") + +// // Change validator bond factor to a more conservative number, so that the increase succeeds +// params.ValidatorBondFactor = finalBondFactor +// keeper.SetParams(ctx, params) + +// // Try the increase again and check that it succeeded +// expectedLiquidSharesAfterFirstStake := initialLiquidShares.Add(firstIncreaseAmount) +// _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, firstIncreaseAmount) +// require.NoError(t, err) +// checkValidatorLiquidShares(expectedLiquidSharesAfterFirstStake, "shares with cap loose bond cap") + +// // Attempt another increase, it should fail from the liquid staking cap +// _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, secondIncreaseAmount) +// require.ErrorIs(t, err, types.ErrValidatorLiquidStakingCapExceeded) +// checkValidatorLiquidShares(expectedLiquidSharesAfterFirstStake, "shares after liquid staking cap hit") + +// // Raise the liquid staking cap so the new increment succeeds +// params.ValidatorLiquidStakingCap = finalLiquidStakingCap +// keeper.SetParams(ctx, params) + +// // Finally confirm that the increase succeeded this time +// expectedLiquidSharesAfterSecondStake := expectedLiquidSharesAfterFirstStake.Add(secondIncreaseAmount) +// _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, secondIncreaseAmount) +// require.NoError(t, err, "no error expected after increasing liquid staking cap") +// checkValidatorLiquidShares(expectedLiquidSharesAfterSecondStake, "shares after loose liquid stake cap") +// } + +// // Tests DecreaseValidatorLiquidShares +// func (s *KeeperTestSuite) TestDecreaseValidatorLiquidShares(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// initialLiquidShares := sdk.NewDec(100) +// decreaseAmount := sdk.NewDec(10) + +// // Create a validator with designated self-bond shares +// privKey := secp256k1.GenPrivKey() +// pubKey := privKey.PubKey() +// valAddress := sdk.ValAddress(pubKey.Address()) + +// initialValidator := types.Validator{ +// OperatorAddress: valAddress.String(), +// LiquidShares: initialLiquidShares, +// } +// keeper.SetValidator(ctx, initialValidator) + +// // Decrease the validator liquid shares, and confirm the new share amount has been updated +// _, err := keeper.DecreaseValidatorLiquidShares(ctx, valAddress, decreaseAmount) +// require.NoError(t, err, "no error expected when decreasing validator liquid shares") + +// actualValidator, found := keeper.GetValidator(ctx, valAddress) +// require.True(t, found) +// require.Equal(t, initialLiquidShares.Sub(decreaseAmount), actualValidator.LiquidShares, "liquid shares") + +// // Attempt to decrease by a larger amount than it has, it should fail +// _, err = keeper.DecreaseValidatorLiquidShares(ctx, valAddress, initialLiquidShares) +// require.ErrorIs(t, err, types.ErrValidatorLiquidSharesUnderflow) +// } + +// // Tests SafelyDecreaseValidatorBond +// func (s *KeeperTestSuite) TestSafelyDecreaseValidatorBond(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// // Initial Bond Factor: 100, Initial Validator Bond: 10 +// // => Max Liquid Shares 1000 (Initial Liquid Shares: 200) +// initialBondFactor := sdk.NewDec(100) +// initialValidatorBondShares := sdk.NewDec(10) +// initialLiquidShares := sdk.NewDec(200) + +// // Create a validator with designated self-bond shares +// privKey := secp256k1.GenPrivKey() +// pubKey := privKey.PubKey() +// valAddress := sdk.ValAddress(pubKey.Address()) + +// initialValidator := types.Validator{ +// OperatorAddress: valAddress.String(), +// ValidatorBondShares: initialValidatorBondShares, +// LiquidShares: initialLiquidShares, +// } +// keeper.SetValidator(ctx, initialValidator) + +// // Set the bond factor +// params := keeper.GetParams(ctx) +// params.ValidatorBondFactor = initialBondFactor +// keeper.SetParams(ctx, params) + +// // Decrease the validator bond from 10 to 5 (minus 5) +// // This will adjust the cap (factor * shares) +// // from (100 * 10 = 1000) to (100 * 5 = 500) +// // Since this is still above the initial liquid shares of 200, this will succeed +// decreaseAmount, expectedBondShares := sdk.NewDec(5), sdk.NewDec(5) +// err := keeper.SafelyDecreaseValidatorBond(ctx, valAddress, decreaseAmount) +// require.NoError(t, err) + +// actualValidator, found := keeper.GetValidator(ctx, valAddress) +// require.True(t, found) +// require.Equal(t, expectedBondShares, actualValidator.ValidatorBondShares, "validator bond shares shares") + +// // Now attempt to decrease the validator bond again from 5 to 1 (minus 4) +// // This time, the cap will be reduced to (factor * shares) = (100 * 1) = 100 +// // However, the liquid shares are currently 200, so this should fail +// decreaseAmount, expectedBondShares = sdk.NewDec(4), sdk.NewDec(1) +// err = keeper.SafelyDecreaseValidatorBond(ctx, valAddress, decreaseAmount) +// require.ErrorIs(t, err, types.ErrInsufficientValidatorBondShares) + +// // Finally, disable the cap and attempt to decrease again +// // This time it should succeed +// params.ValidatorBondFactor = types.ValidatorBondCapDisabled +// keeper.SetParams(ctx, params) + +// err = keeper.SafelyDecreaseValidatorBond(ctx, valAddress, decreaseAmount) +// require.NoError(t, err) + +// actualValidator, found = keeper.GetValidator(ctx, valAddress) +// require.True(t, found) +// require.Equal(t, expectedBondShares, actualValidator.ValidatorBondShares, "validator bond shares shares") +// } + +// // Tests Add/Remove/Get/SetTokenizeSharesLock +// func (s *KeeperTestSuite) TestTokenizeSharesLock(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// addresses := simtestutil.AddTestAddrs(s.bankKeeper, ctx, 2, sdk.NewInt(1)) +// addressA, addressB := addresses[0], addresses[1] + +// unlocked := types.TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED.String() +// locked := types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String() +// lockExpiring := types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String() + +// // Confirm both accounts start unlocked +// status, _ := keeper.GetTokenizeSharesLock(ctx, addressA) +// require.Equal(t, unlocked, status.String(), "addressA unlocked at start") + +// status, _ = keeper.GetTokenizeSharesLock(ctx, addressB) +// require.Equal(t, unlocked, status.String(), "addressB unlocked at start") + +// // Lock the first account +// keeper.AddTokenizeSharesLock(ctx, addressA) + +// // The first account should now have tokenize shares disabled +// // and the unlock time should be the zero time +// status, _ = keeper.GetTokenizeSharesLock(ctx, addressA) +// require.Equal(t, locked, status.String(), "addressA locked") + +// status, _ = keeper.GetTokenizeSharesLock(ctx, addressB) +// require.Equal(t, unlocked, status.String(), "addressB still unlocked") + +// // Update the lock time and confirm it was set +// expectedUnlockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) +// keeper.SetTokenizeSharesUnlockTime(ctx, addressA, expectedUnlockTime) + +// status, actualUnlockTime := keeper.GetTokenizeSharesLock(ctx, addressA) +// require.Equal(t, lockExpiring, status.String(), "addressA lock expiring") +// require.Equal(t, expectedUnlockTime, actualUnlockTime, "addressA unlock time") + +// // Confirm B is still unlocked +// status, _ = keeper.GetTokenizeSharesLock(ctx, addressB) +// require.Equal(t, unlocked, status.String(), "addressB still unlocked") + +// // Remove the lock +// keeper.RemoveTokenizeSharesLock(ctx, addressA) +// status, _ = keeper.GetTokenizeSharesLock(ctx, addressA) +// require.Equal(t, unlocked, status.String(), "addressA unlocked at end") + +// status, _ = keeper.GetTokenizeSharesLock(ctx, addressB) +// require.Equal(t, unlocked, status.String(), "addressB unlocked at end") +// } + +// // Tests GetAllTokenizeSharesLocks +// func (s *KeeperTestSuite) TestGetAllTokenizeSharesLocks(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// addresses := simapp.AddTestAddrs(app, ctx, 4, sdk.NewInt(1)) + +// // Set 2 locked accounts, and two accounts with a lock expiring +// keeper.AddTokenizeSharesLock(ctx, addresses[0]) +// keeper.AddTokenizeSharesLock(ctx, addresses[1]) + +// unlockTime1 := time.Date(2023, 1, 1, 1, 0, 0, 0, time.UTC) +// unlockTime2 := time.Date(2023, 1, 2, 1, 0, 0, 0, time.UTC) +// keeper.SetTokenizeSharesUnlockTime(ctx, addresses[2], unlockTime1) +// keeper.SetTokenizeSharesUnlockTime(ctx, addresses[3], unlockTime2) + +// // Defined expected locks after GetAll +// expectedLocks := map[string]types.TokenizeShareLock{ +// addresses[0].String(): { +// Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String(), +// }, +// addresses[1].String(): { +// Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String(), +// }, +// addresses[2].String(): { +// Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String(), +// CompletionTime: unlockTime1, +// }, +// addresses[3].String(): { +// Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String(), +// CompletionTime: unlockTime2, +// }, +// } + +// // Check output from GetAll +// actualLocks := keeper.GetAllTokenizeSharesLocks(ctx) +// require.Len(actualLocks, len(expectedLocks), "number of locks") + +// for i, actual := range actualLocks { +// expected, ok := expectedLocks[actual.Address] +// require.True(ok, "address %s not expected", actual.Address) +// require.Equal(expected.Status, actual.Status, "tokenize share lock #%d status", i) +// require.Equal(expected.CompletionTime, actual.CompletionTime, "tokenize share lock #%d completion time", i) +// } +// } + +// // Test Get/SetPendingTokenizeShareAuthorizations +// func (s *KeeperTestSuite) TestPendingTokenizeShareAuthorizations(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// // Create dummy accounts and completion times +// addresses := simapp.AddTestAddrs(app, ctx, 3, sdk.NewInt(1)) +// addressStrings := []string{} +// for _, address := range addresses { +// addressStrings = append(addressStrings, address.String()) +// } + +// timeA := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) +// timeB := timeA.Add(time.Hour) + +// // There should be no addresses returned originally +// authorizationsA := keeper.GetPendingTokenizeShareAuthorizations(ctx, timeA) +// require.Empty(t, authorizationsA.Addresses, "no addresses at timeA expected") + +// authorizationsB := keeper.GetPendingTokenizeShareAuthorizations(ctx, timeB) +// require.Empty(t, authorizationsB.Addresses, "no addresses at timeB expected") + +// // Store addresses for timeB +// keeper.SetPendingTokenizeShareAuthorizations(ctx, timeB, types.PendingTokenizeShareAuthorizations{ +// Addresses: addressStrings, +// }) + +// // Check addresses +// authorizationsA = keeper.GetPendingTokenizeShareAuthorizations(ctx, timeA) +// require.Empty(t, authorizationsA.Addresses, "no addresses at timeA expected at end") + +// authorizationsB = keeper.GetPendingTokenizeShareAuthorizations(ctx, timeB) +// require.Equal(t, addressStrings, authorizationsB.Addresses, "address length") +// } + +// // Test QueueTokenizeSharesAuthorization and RemoveExpiredTokenizeShareLocks +// func (s *KeeperTestSuite) TestTokenizeShareAuthorizationQueue(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// // We'll start by adding the following addresses to the queue +// // Time 0: [address0] +// // Time 1: [] +// // Time 2: [address1, address2, address3] +// // Time 3: [address4, address5] +// // Time 4: [address6] +// addresses := simapp.AddTestAddrs(app, ctx, 7, sdk.NewInt(1)) +// addressesByTime := map[int][]sdk.AccAddress{ +// 0: {addresses[0]}, +// 1: {}, +// 2: {addresses[1], addresses[2], addresses[3]}, +// 3: {addresses[4], addresses[5]}, +// 4: {addresses[6]}, +// } + +// // Set the unbonding time to 1 day +// unbondingPeriod := time.Hour * 24 +// params := keeper.GetParams(ctx) +// params.UnbondingTime = unbondingPeriod +// keeper.SetParams(ctx, params) + +// // Add each address to the queue and then increment the block time +// // such that the times line up as follows +// // Time 0: 2023-01-01 00:00:00 +// // Time 1: 2023-01-01 00:01:00 +// // Time 2: 2023-01-01 00:02:00 +// // Time 3: 2023-01-01 00:03:00 +// startTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) +// ctx = ctx.WithBlockTime(startTime) +// blockTimeIncrement := time.Hour + +// for timeIndex := 0; timeIndex <= 4; timeIndex++ { +// for _, address := range addressesByTime[timeIndex] { +// keeper.QueueTokenizeSharesAuthorization(ctx, address) +// } +// ctx = ctx.WithBlockTime(ctx.BlockTime().Add(blockTimeIncrement)) +// } + +// // We'll unlock the tokens using the following progression +// // The "alias'"/keys for these times assume a starting point of the Time 0 +// // from above, plus the Unbonding Time +// // Time -1 (2023-01-01 23:59:99): [] +// // Time 0 (2023-01-02 00:00:00): [address0] +// // Time 1 (2023-01-02 00:01:00): [] +// // Time 2.5 (2023-01-02 00:02:30): [address1, address2, address3] +// // Time 10 (2023-01-02 00:10:00): [address4, address5, address6] +// unlockBlockTimes := map[string]time.Time{ +// "-1": startTime.Add(unbondingPeriod).Add(-time.Second), +// "0": startTime.Add(unbondingPeriod), +// "1": startTime.Add(unbondingPeriod).Add(blockTimeIncrement), +// "2.5": startTime.Add(unbondingPeriod).Add(2 * blockTimeIncrement).Add(blockTimeIncrement / 2), +// "10": startTime.Add(unbondingPeriod).Add(10 * blockTimeIncrement), +// } +// expectedUnlockedAddresses := map[string][]string{ +// "-1": {}, +// "0": {addresses[0].String()}, +// "1": {}, +// "2.5": {addresses[1].String(), addresses[2].String(), addresses[3].String()}, +// "10": {addresses[4].String(), addresses[5].String(), addresses[6].String()}, +// } + +// // Now we'll remove items from the queue sequentially +// // First check with a block time before the first expiration - it should remove no addresses +// actualAddresses := keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["-1"]) +// require.Equal(t, expectedUnlockedAddresses["-1"], actualAddresses, "no addresses unlocked from time -1") + +// // Then pass in (time 0 + unbonding time) - it should remove the first address +// actualAddresses = keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["0"]) +// require.Equal(t, expectedUnlockedAddresses["0"], actualAddresses, "one address unlocked from time 0") + +// // Now pass in (time 1 + unbonding time) - it should remove no addresses since +// // the address at time 0 was already removed +// actualAddresses = keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["1"]) +// require.Equal(t, expectedUnlockedAddresses["1"], actualAddresses, "no addresses unlocked from time 1") + +// // Now pass in (time 2.5 + unbonding time) - it should remove the three addresses from time 2 +// actualAddresses = keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["2.5"]) +// require.Equal(t, expectedUnlockedAddresses["2.5"], actualAddresses, "addresses unlocked from time 2.5") + +// // Finally pass in a block time far in the future, which should remove all the remaining locks +// actualAddresses = keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["10"]) +// require.Equal(t, expectedUnlockedAddresses["10"], actualAddresses, "addresses unlocked from time 10") +// } + +// // Test RefreshTotalLiquidStaked +// func (s *KeeperTestSuite) TestRefreshTotalLiquidStaked(t *testing.T) { +// ctx, keeper := s.ctx, s.stakingKeeper +// require := s.Require() + +// // Set an arbitrary total liquid staked tokens amount that will get overwritten by the refresh +// keeper.SetTotalLiquidStakedTokens(ctx, sdk.NewInt(999)) + +// // Add validator's with various exchange rates +// validators := []types.Validator{ +// { +// // Exchange rate of 1 +// OperatorAddress: "valA", +// Tokens: sdk.NewInt(100), +// DelegatorShares: sdk.NewDec(100), +// LiquidShares: sdk.NewDec(100), // should be overwritten +// }, +// { +// // Exchange rate of 0.9 +// OperatorAddress: "valB", +// Tokens: sdk.NewInt(90), +// DelegatorShares: sdk.NewDec(100), +// LiquidShares: sdk.NewDec(200), // should be overwritten +// }, +// { +// // Exchange rate of 0.75 +// OperatorAddress: "valC", +// Tokens: sdk.NewInt(75), +// DelegatorShares: sdk.NewDec(100), +// LiquidShares: sdk.NewDec(300), // should be overwritten +// }, +// } + +// // Add various delegations across the above validator's +// // Total Liquid Staked: 1,849 + 922 = 2,771 +// // Liquid Shares: +// // ValA: 400 + 325 = 725 +// // ValB: 860 + 580 = 1,440 +// // ValC: 900 + 100 = 1,000 +// expectedTotalLiquidStaked := int64(2771) +// expectedValidatorLiquidShares := map[string]sdk.Dec{ +// "valA": sdk.NewDec(725), +// "valB": sdk.NewDec(1440), +// "valC": sdk.NewDec(1000), +// } + +// delegations := []struct { +// delegation types.Delegation +// isLSTP bool +// isTokenized bool +// }{ +// // Delegator A - Not a liquid staking provider +// // Number of tokens/shares is irrelevant for this test +// { +// isLSTP: false, +// delegation: types.Delegation{ +// DelegatorAddress: "delA", +// ValidatorAddress: "valA", +// Shares: sdk.NewDec(100), +// }, +// }, +// { +// isLSTP: false, +// delegation: types.Delegation{ +// DelegatorAddress: "delA", +// ValidatorAddress: "valB", +// Shares: sdk.NewDec(860), +// }, +// }, +// { +// isLSTP: false, +// delegation: types.Delegation{ +// DelegatorAddress: "delA", +// ValidatorAddress: "valC", +// Shares: sdk.NewDec(750), +// }, +// }, +// // Delegator B - Liquid staking provider, tokens included in total +// // Total liquid staked: 400 + 774 + 675 = 1,849 +// { +// // Shares: 400 shares, Exchange Rate: 1.0, Tokens: 400 +// isLSTP: true, +// delegation: types.Delegation{ +// DelegatorAddress: "delB-LSTP", +// ValidatorAddress: "valA", +// Shares: sdk.NewDec(400), +// }, +// }, +// { +// // Shares: 860 shares, Exchange Rate: 0.9, Tokens: 774 +// isLSTP: true, +// delegation: types.Delegation{ +// DelegatorAddress: "delB-LSTP", +// ValidatorAddress: "valB", +// Shares: sdk.NewDec(860), +// }, +// }, +// { +// // Shares: 900 shares, Exchange Rate: 0.75, Tokens: 675 +// isLSTP: true, +// delegation: types.Delegation{ +// DelegatorAddress: "delB-LSTP", +// ValidatorAddress: "valC", +// Shares: sdk.NewDec(900), +// }, +// }, +// // Delegator C - Tokenized shares, tokens included in total +// // Total liquid staked: 325 + 522 + 75 = 922 +// { +// // Shares: 325 shares, Exchange Rate: 1.0, Tokens: 325 +// isTokenized: true, +// delegation: types.Delegation{ +// DelegatorAddress: "delC-LSTP", +// ValidatorAddress: "valA", +// Shares: sdk.NewDec(325), +// }, +// }, +// { +// // Shares: 580 shares, Exchange Rate: 0.9, Tokens: 522 +// isTokenized: true, +// delegation: types.Delegation{ +// DelegatorAddress: "delC-LSTP", +// ValidatorAddress: "valB", +// Shares: sdk.NewDec(580), +// }, +// }, +// { +// // Shares: 100 shares, Exchange Rate: 0.75, Tokens: 75 +// isTokenized: true, +// delegation: types.Delegation{ +// DelegatorAddress: "delC-LSTP", +// ValidatorAddress: "valC", +// Shares: sdk.NewDec(100), +// }, +// }, +// } + +// // Create validators based on the above (must use an actual validator address) +// addresses := testutil.AddTestAddrsIncremental(s.bankKeeper, ctx, 5, keeper.TokensFromConsensusPower(ctx, 300)) +// validatorAddresses := map[string]sdk.ValAddress{ +// "valA": sdk.ValAddress(addresses[0]), +// "valB": sdk.ValAddress(addresses[1]), +// "valC": sdk.ValAddress(addresses[2]), +// } +// for _, validator := range validators { +// validator.OperatorAddress = validatorAddresses[validator.OperatorAddress].String() +// keeper.SetValidator(ctx, validator) +// } + +// // Create the delegations based on the above (must use actual delegator addresses) +// for _, delegationCase := range delegations { +// var delegatorAddress sdk.AccAddress +// switch { +// case delegationCase.isLSTP: +// delegatorAddress = createICAAccount(app, ctx) +// case delegationCase.isTokenized: +// delegatorAddress = createTokenizeShareModuleAccount(1) +// default: +// delegatorAddress = createBaseAccount(app, ctx, delegationCase.delegation.DelegatorAddress) +// } + +// delegation := delegationCase.delegation +// delegation.DelegatorAddress = delegatorAddress.String() +// delegation.ValidatorAddress = validatorAddresses[delegation.ValidatorAddress].String() +// keeper.SetDelegation(ctx, delegation) +// } + +// // Refresh the total liquid staked and validator liquid shares +// err := keeper.RefreshTotalLiquidStaked(ctx) +// require.NoError(t, err, "no error expected when refreshing total liquid staked") + +// // Check the total liquid staked and liquid shares by validator +// actualTotalLiquidStaked := keeper.GetTotalLiquidStakedTokens(ctx) +// require.Equal(t, expectedTotalLiquidStaked, actualTotalLiquidStaked.Int64(), "total liquid staked tokens") + +// for _, moniker := range []string{"valA", "valB", "valC"} { +// address := validatorAddresses[moniker] +// expectedLiquidShares := expectedValidatorLiquidShares[moniker] + +// actualValidator, found := keeper.GetValidator(ctx, address) +// require.True(t, found, "validator %s should have been found after refresh", moniker) + +// actualLiquidShares := actualValidator.LiquidShares +// require.Equal(t, expectedLiquidShares.TruncateInt64(), actualLiquidShares.TruncateInt64(), +// "liquid staked shares for validator %s", moniker) +// } +// } diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index 93615bcb137d..843c120a41a3 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -2,19 +2,22 @@ package keeper import ( "context" + "fmt" "strconv" "time" + "cosmossdk.io/math" "github.com/armon/go-metrics" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/exported" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" "github.com/cosmos/cosmos-sdk/x/staking/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) type msgServer struct { @@ -208,18 +211,47 @@ func (k msgServer) Delegate(goCtx context.Context, msg *types.MsgDelegate) (*typ ) } + tokens := msg.Amount.Amount + + // if this delegation is from a liquid staking provider (identified if the delegator + // is an ICA account), it cannot exceed the global or validator bond cap + if k.DelegatorIsLiquidStaker(delegatorAddress) { + shares, err := validator.SharesFromTokens(tokens) + if err != nil { + return nil, err + } + if err := k.SafelyIncreaseTotalLiquidStakedTokens(ctx, tokens, false); err != nil { + return nil, err + } + validator, err = k.SafelyIncreaseValidatorLiquidShares(ctx, valAddr, shares) + if err != nil { + return nil, err + } + } + // NOTE: source funds are always unbonded - newShares, err := k.Keeper.Delegate(ctx, delegatorAddress, msg.Amount.Amount, types.Unbonded, validator, true) + newShares, err := k.Keeper.Delegate(ctx, delegatorAddress, tokens, types.Unbonded, validator, true) if err != nil { return nil, err } - if msg.Amount.Amount.IsInt64() { + // If the delegation is a validator bond, increment the validator bond shares + delegation, found := k.Keeper.GetDelegation(ctx, delegatorAddress, valAddr) + if !found { + return nil, types.ErrNoDelegation + } + if delegation.ValidatorBond { + if err := k.IncreaseValidatorBondShares(ctx, valAddr, newShares); err != nil { + return nil, err + } + } + + if tokens.IsInt64() { defer func() { telemetry.IncrCounter(1, types.ModuleName, "delegate") telemetry.SetGaugeWithLabels( []string{"tx", "msg", msg.Type()}, - float32(msg.Amount.Amount.Int64()), + float32(tokens.Int64()), []metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)}, ) }() @@ -241,21 +273,70 @@ func (k msgServer) Delegate(goCtx context.Context, msg *types.MsgDelegate) (*typ // BeginRedelegate defines a method for performing a redelegation of coins from a delegator and source validator to a destination validator func (k msgServer) BeginRedelegate(goCtx context.Context, msg *types.MsgBeginRedelegate) (*types.MsgBeginRedelegateResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) + valSrcAddr, err := sdk.ValAddressFromBech32(msg.ValidatorSrcAddress) if err != nil { return nil, err } + valDstAddr, err := sdk.ValAddressFromBech32(msg.ValidatorDstAddress) + if err != nil { + return nil, err + } + + _, found := k.GetValidator(ctx, valSrcAddr) + if !found { + return nil, types.ErrNoValidatorFound + } + dstValidator, found := k.GetValidator(ctx, valDstAddr) + if !found { + return nil, types.ErrNoValidatorFound + } + delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) if err != nil { return nil, err } - shares, err := k.ValidateUnbondAmount( + + srcDelegation, found := k.GetDelegation(ctx, delegatorAddress, valSrcAddr) + if !found { + return nil, status.Errorf( + codes.NotFound, + "delegation with delegator %s not found for validator %s", + msg.DelegatorAddress, msg.ValidatorSrcAddress, + ) + } + + srcShares, err := k.ValidateUnbondAmount( ctx, delegatorAddress, valSrcAddr, msg.Amount.Amount, ) if err != nil { return nil, err } + // If this is a validator self-bond, the new liquid delegation cannot fall below the self-bond * bond factor + // The delegation on the new validator will not a validator bond + if srcDelegation.ValidatorBond { + if err := k.SafelyDecreaseValidatorBond(ctx, valSrcAddr, srcShares); err != nil { + return nil, err + } + } + + // If this delegation from a liquid staker, the delegation on the new validator + // cannot exceed that validator's self-bond cap + // The liquid shares from the source validator should get moved to the destination validator + if k.DelegatorIsLiquidStaker(delegatorAddress) { + dstShares, err := dstValidator.SharesFromTokensTruncated(msg.Amount.Amount) + if err != nil { + return nil, err + } + if _, err := k.SafelyIncreaseValidatorLiquidShares(ctx, valDstAddr, dstShares); err != nil { + return nil, err + } + if _, err := k.DecreaseValidatorLiquidShares(ctx, valSrcAddr, srcShares); err != nil { + return nil, err + } + } + bondDenom := k.BondDenom(ctx) if msg.Amount.Denom != bondDenom { return nil, sdkerrors.Wrapf( @@ -263,18 +344,28 @@ func (k msgServer) BeginRedelegate(goCtx context.Context, msg *types.MsgBeginRed ) } - valDstAddr, err := sdk.ValAddressFromBech32(msg.ValidatorDstAddress) - if err != nil { - return nil, err - } - completionTime, err := k.BeginRedelegation( - ctx, delegatorAddress, valSrcAddr, valDstAddr, shares, + ctx, delegatorAddress, valSrcAddr, valDstAddr, srcShares, ) if err != nil { return nil, err } + // If the redelegation adds to a validator bond delegation, update the validator's bond shares + dstDelegation, found := k.GetDelegation(ctx, delegatorAddress, valDstAddr) + if !found { + return nil, types.ErrNoDelegation + } + if dstDelegation.ValidatorBond { + dstShares, err := dstValidator.SharesFromTokensTruncated(msg.Amount.Amount) + if err != nil { + return nil, err + } + if err := k.IncreaseValidatorBondShares(ctx, valDstAddr, dstShares); err != nil { + return nil, err + } + } + if msg.Amount.Amount.IsInt64() { defer func() { telemetry.IncrCounter(1, types.ModuleName, "redelegate") @@ -313,13 +404,47 @@ func (k msgServer) Undelegate(goCtx context.Context, msg *types.MsgUndelegate) ( if err != nil { return nil, err } + + tokens := msg.Amount.Amount shares, err := k.ValidateUnbondAmount( - ctx, delegatorAddress, addr, msg.Amount.Amount, + ctx, delegatorAddress, addr, tokens, ) if err != nil { return nil, err } + _, found := k.GetValidator(ctx, addr) + if !found { + return nil, types.ErrNoValidatorFound + } + + delegation, found := k.GetDelegation(ctx, delegatorAddress, addr) + if !found { + return nil, status.Errorf( + codes.NotFound, + "delegation with delegator %s not found for validator %s", + msg.DelegatorAddress, msg.ValidatorAddress, + ) + } + + // if this is a validator self-bond, the new liquid delegation cannot fall below the self-bond * bond factor + if delegation.ValidatorBond { + if err := k.SafelyDecreaseValidatorBond(ctx, addr, shares); err != nil { + return nil, err + } + } + + // if this delegation is from a liquid staking provider (identified if the delegator + // is an ICA account), the global and validator liquid totals should be decremented + if k.DelegatorIsLiquidStaker(delegatorAddress) { + if err := k.DecreaseTotalLiquidStakedTokens(ctx, tokens); err != nil { + return nil, err + } + if _, err := k.DecreaseValidatorLiquidShares(ctx, addr, shares); err != nil { + return nil, err + } + } + bondDenom := k.BondDenom(ctx) if msg.Amount.Denom != bondDenom { return nil, sdkerrors.Wrapf( @@ -332,12 +457,12 @@ func (k msgServer) Undelegate(goCtx context.Context, msg *types.MsgUndelegate) ( return nil, err } - if msg.Amount.Amount.IsInt64() { + if tokens.IsInt64() { defer func() { telemetry.IncrCounter(1, types.ModuleName, "undelegate") telemetry.SetGaugeWithLabels( []string{"tx", "msg", msg.Type()}, - float32(msg.Amount.Amount.Int64()), + float32(tokens.Int64()), []metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)}, ) }() @@ -405,6 +530,23 @@ func (k msgServer) CancelUnbondingDelegation(goCtx context.Context, msg *types.M ) } + // if this undelegation was from a liquid staking provider (identified if the delegator + // is an ICA account), the global and validator liquid totals should be incremented + tokens := msg.Amount.Amount + if k.DelegatorIsLiquidStaker(delegatorAddress) { + shares, err := validator.SharesFromTokens(tokens) + if err != nil { + return nil, err + } + if err := k.SafelyIncreaseTotalLiquidStakedTokens(ctx, tokens, false); err != nil { + return nil, err + } + validator, err = k.SafelyIncreaseValidatorLiquidShares(ctx, valAddr, shares) + if err != nil { + return nil, err + } + } + var ( unbondEntry types.UnbondingDelegationEntry unbondEntryIndex int64 = -1 @@ -430,11 +572,22 @@ func (k msgServer) CancelUnbondingDelegation(goCtx context.Context, msg *types.M } // delegate back the unbonding delegation amount to the validator - _, err = k.Keeper.Delegate(ctx, delegatorAddress, msg.Amount.Amount, types.Unbonding, validator, false) + newShares, err := k.Keeper.Delegate(ctx, delegatorAddress, msg.Amount.Amount, types.Unbonding, validator, false) if err != nil { return nil, err } + // If the delegation is a validator bond, increment the validator bond shares + delegation, found := k.Keeper.GetDelegation(ctx, delegatorAddress, valAddr) + if !found { + return nil, types.ErrNoDelegation + } + if delegation.ValidatorBond { + if err := k.IncreaseValidatorBondShares(ctx, valAddr, newShares); err != nil { + return nil, err + } + } + amount := unbondEntry.Balance.Sub(msg.Amount.Amount) if amount.IsZero() { ubd.RemoveEntry(unbondEntryIndex) @@ -485,15 +638,180 @@ func (ms msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdatePara // This allows a validator to stop their services and jail themselves without // experiencing a slash func (k msgServer) UnbondValidator(goCtx context.Context, msg *types.MsgUnbondValidator) (*types.MsgUnbondValidatorResponse, error) { - // TODO add LSM logic + ctx := sdk.UnwrapSDKContext(goCtx) + valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + if err != nil { + return nil, err + } + // validator must already be registered + validator, found := k.GetValidator(ctx, valAddr) + if !found { + return nil, types.ErrNoValidatorFound + } + + // jail the validator. + k.jailValidator(ctx, validator) return &types.MsgUnbondValidatorResponse{}, nil } // Tokenizes shares associated with a delegation by creating a tokenize share record // and returning tokens with a denom of the format {validatorAddress}/{recordId} func (k msgServer) TokenizeShares(goCtx context.Context, msg *types.MsgTokenizeShares) (*types.MsgTokenizeSharesResponse, error) { - shareToken := sdk.Coin{} - // TODO add LSM logic + ctx := sdk.UnwrapSDKContext(goCtx) + + valAddr, valErr := sdk.ValAddressFromBech32(msg.ValidatorAddress) + if valErr != nil { + return nil, valErr + } + validator, found := k.GetValidator(ctx, valAddr) + if !found { + return nil, types.ErrNoValidatorFound + } + + delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + return nil, err + } + + // Check if the delegator has disabled tokenization + lockStatus, unlockTime := k.GetTokenizeSharesLock(ctx, delegatorAddress) + if lockStatus == types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED { + return nil, types.ErrTokenizeSharesDisabledForAccount + } + if lockStatus == types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING { + return nil, types.ErrTokenizeSharesDisabledForAccount.Wrapf("tokenization will be allowed at %s", unlockTime) + } + + delegation, found := k.GetDelegation(ctx, delegatorAddress, valAddr) + if !found { + return nil, types.ErrNoDelegatorForAddress + } + + if delegation.ValidatorBond { + return nil, types.ErrValidatorBondNotAllowedForTokenizeShare + } + + if msg.Amount.Denom != k.BondDenom(ctx) { + return nil, types.ErrOnlyBondDenomAllowdForTokenize + } + + acc := k.authKeeper.GetAccount(ctx, delegatorAddress) + if acc != nil { + acc, ok := acc.(vesting.VestingAccount) + if ok { + // if account is a vesting account, it checks if free delegation (non-vesting delegation) is not exceeding + // the tokenize share amount and execute further tokenize share process + // tokenize share is reducing unlocked tokens delegation from the vesting account and further process + // is not causing issues + delFree := acc.GetDelegatedFree().AmountOf(msg.Amount.Denom) + if delFree.LT(msg.Amount.Amount) { + return nil, types.ErrExceedingFreeVestingDelegations + } + } + } + + shares, err := k.ValidateUnbondAmount( + ctx, delegatorAddress, valAddr, msg.Amount.Amount, + ) + if err != nil { + return nil, err + } + + // If this tokenization is NOT from a liquid staking provider, + // confirm it does not exceed the global and validator liquid staking cap + // If the tokenization is from a liquid staking provider, + // the shares are already considered liquid and there's no need to increment the totals + if !k.DelegatorIsLiquidStaker(delegatorAddress) { + if err := k.SafelyIncreaseTotalLiquidStakedTokens(ctx, msg.Amount.Amount, true); err != nil { + return nil, err + } + validator, err = k.SafelyIncreaseValidatorLiquidShares(ctx, valAddr, shares) + if err != nil { + return nil, err + } + } + + recordID := k.GetLastTokenizeShareRecordID(ctx) + 1 + k.SetLastTokenizeShareRecordID(ctx, recordID) + + record := types.TokenizeShareRecord{ + Id: recordID, + Owner: msg.TokenizedShareOwner, + ModuleAccount: fmt.Sprintf("%s%d", types.TokenizeShareModuleAccountPrefix, recordID), + Validator: msg.ValidatorAddress, + } + + // note: this returnAmount can be slightly off from the original delegation amount if there + // is a decimal to int precision error + returnAmount, err := k.Unbond(ctx, delegatorAddress, valAddr, shares) + if err != nil { + return nil, err + } + + if validator.IsBonded() { + k.bondedTokensToNotBonded(ctx, returnAmount) + } + + // Note: UndelegateCoinsFromModuleToAccount is internally calling TrackUndelegation for vesting account + returnCoin := sdk.NewCoin(k.BondDenom(ctx), returnAmount) + err = k.bankKeeper.UndelegateCoinsFromModuleToAccount(ctx, types.NotBondedPoolName, delegatorAddress, sdk.Coins{returnCoin}) + if err != nil { + return nil, err + } + + // Re-calculate the shares in case there was rounding precision during the undelegation + newShares, err := validator.SharesFromTokens(returnAmount) + if err != nil { + return nil, err + } + + // The share tokens returned maps 1:1 with shares + shareToken := sdk.NewCoin(record.GetShareTokenDenom(), newShares.TruncateInt()) + + err = k.bankKeeper.MintCoins(ctx, minttypes.ModuleName, sdk.Coins{shareToken}) + if err != nil { + return nil, err + } + + err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, delegatorAddress, sdk.Coins{shareToken}) + if err != nil { + return nil, err + } + + // create reward ownership record + err = k.AddTokenizeShareRecord(ctx, record) + if err != nil { + return nil, err + } + // send coins to module account + err = k.bankKeeper.SendCoins(ctx, delegatorAddress, record.GetModuleAddress(), sdk.Coins{returnCoin}) + if err != nil { + return nil, err + } + + // Note: it is needed to get latest validator object to get Keeper.Delegate function work properly + validator, found = k.GetValidator(ctx, valAddr) + if !found { + return nil, types.ErrNoValidatorFound + } + + // delegate from module account + _, err = k.Keeper.Delegate(ctx, record.GetModuleAddress(), returnAmount, types.Unbonded, validator, true) + if err != nil { + return nil, err + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeTokenizeShares, + sdk.NewAttribute(types.AttributeKeyDelegator, msg.DelegatorAddress), + sdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress), + sdk.NewAttribute(types.AttributeKeyShareOwner, msg.TokenizedShareOwner), + sdk.NewAttribute(types.AttributeKeyShareRecordID, fmt.Sprintf("%d", record.Id)), + sdk.NewAttribute(types.AttributeKeyAmount, msg.Amount.String()), + ), + ) + return &types.MsgTokenizeSharesResponse{ Amount: shareToken, }, nil @@ -501,8 +819,123 @@ func (k msgServer) TokenizeShares(goCtx context.Context, msg *types.MsgTokenizeS // Converts tokenized shares back into a native delegation func (k msgServer) RedeemTokensForShares(goCtx context.Context, msg *types.MsgRedeemTokensForShares) (*types.MsgRedeemTokensForSharesResponse, error) { - returnCoin := sdk.Coin{} - // TODO add LSM logic + ctx := sdk.UnwrapSDKContext(goCtx) + + delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + return nil, err + } + + shareToken := msg.Amount + balance := k.bankKeeper.GetBalance(ctx, delegatorAddress, shareToken.Denom) + if balance.Amount.LT(shareToken.Amount) { + return nil, types.ErrNotEnoughBalance + } + + record, err := k.GetTokenizeShareRecordByDenom(ctx, shareToken.Denom) + if err != nil { + return nil, err + } + + valAddr, valErr := sdk.ValAddressFromBech32(record.Validator) + if valErr != nil { + return nil, valErr + } + + validator, found := k.GetValidator(ctx, valAddr) + if !found { + return nil, types.ErrNoValidatorFound + } + + delegation, found := k.GetDelegation(ctx, record.GetModuleAddress(), valAddr) + if !found { + return nil, types.ErrNoUnbondingDelegation + } + + // Similar to undelegations, if the account is attempting to tokenize the full delegation, + // but there's a precision error due to the decimal to int conversion, round up to the + // full decimal amount before modifying the delegation + shares := math.LegacyNewDec(shareToken.Amount.Int64()) + if shareToken.Amount.Equal(delegation.Shares.TruncateInt()) { + shares = delegation.Shares + } + tokens := validator.TokensFromShares(shares).TruncateInt() + + // If this redemption is NOT from a liquid staking provider, decrement the total liquid staked + // If the redemption was from a liquid staking provider, the shares are still considered + // liquid, even in their non-tokenized form (since they are owned by a liquid staking provider) + if !k.DelegatorIsLiquidStaker(delegatorAddress) { + if err := k.DecreaseTotalLiquidStakedTokens(ctx, tokens); err != nil { + return nil, err + } + validator, err = k.DecreaseValidatorLiquidShares(ctx, valAddr, shares) + if err != nil { + return nil, err + } + } + + returnAmount, err := k.Unbond(ctx, record.GetModuleAddress(), valAddr, shares) + if err != nil { + return nil, err + } + + if validator.IsBonded() { + k.bondedTokensToNotBonded(ctx, returnAmount) + } + + // Note: since delegation object has been changed from unbond call, it gets latest delegation + _, found = k.GetDelegation(ctx, record.GetModuleAddress(), valAddr) + if !found { + if k.hooks != nil { + if err := k.hooks.BeforeTokenizeShareRecordRemoved(ctx, record.Id); err != nil { + return nil, err + } + } + err = k.DeleteTokenizeShareRecord(ctx, record.Id) + if err != nil { + return nil, err + } + } + + // send share tokens to NotBondedPool and burn + err = k.bankKeeper.SendCoinsFromAccountToModule(ctx, delegatorAddress, types.NotBondedPoolName, sdk.Coins{shareToken}) + if err != nil { + return nil, err + } + err = k.bankKeeper.BurnCoins(ctx, types.NotBondedPoolName, sdk.Coins{shareToken}) + if err != nil { + return nil, err + } + + // send equivalent amount of tokens to the delegator + returnCoin := sdk.NewCoin(k.BondDenom(ctx), returnAmount) + err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.NotBondedPoolName, delegatorAddress, sdk.Coins{returnCoin}) + if err != nil { + return nil, err + } + + // Note: it is needed to get latest validator object to get Keeper.Delegate function work properly + validator, found = k.GetValidator(ctx, valAddr) + if !found { + return nil, types.ErrNoValidatorFound + } + + // convert the share tokens to delegated status + // Note: Delegate(substractAccount => true) -> DelegateCoinsFromAccountToModule -> TrackDelegation for vesting account + _, err = k.Keeper.Delegate(ctx, delegatorAddress, returnAmount, types.Unbonded, validator, true) + if err != nil { + return nil, err + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeRedeemShares, + sdk.NewAttribute(types.AttributeKeyDelegator, msg.DelegatorAddress), + sdk.NewAttribute(types.AttributeKeyValidator, validator.OperatorAddress), + sdk.NewAttribute(types.AttributeKeyAmount, shareToken.String()), + ), + ) + return &types.MsgRedeemTokensForSharesResponse{ Amount: returnCoin, }, nil @@ -510,27 +943,137 @@ func (k msgServer) RedeemTokensForShares(goCtx context.Context, msg *types.MsgRe // Transfers the ownership of rewards associated with a tokenize share record func (k msgServer) TransferTokenizeShareRecord(goCtx context.Context, msg *types.MsgTransferTokenizeShareRecord) (*types.MsgTransferTokenizeShareRecordResponse, error) { - // TODO add LSM logic + ctx := sdk.UnwrapSDKContext(goCtx) + + record, err := k.GetTokenizeShareRecord(ctx, msg.TokenizeShareRecordId) + if err != nil { + return nil, types.ErrTokenizeShareRecordNotExists + } + + if record.Owner != msg.Sender { + return nil, types.ErrNotTokenizeShareRecordOwner + } + + // Remove old account reference + oldOwner, err := sdk.AccAddressFromBech32(record.Owner) + if err != nil { + return nil, sdkerrors.ErrInvalidAddress + } + k.deleteTokenizeShareRecordWithOwner(ctx, oldOwner, record.Id) + + record.Owner = msg.NewOwner + k.setTokenizeShareRecord(ctx, record) + + // Set new account reference + newOwner, err := sdk.AccAddressFromBech32(record.Owner) + if err != nil { + return nil, sdkerrors.ErrInvalidAddress + } + k.setTokenizeShareRecordWithOwner(ctx, newOwner, record.Id) + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeTransferTokenizeShareRecord, + sdk.NewAttribute(types.AttributeKeyShareRecordID, fmt.Sprintf("%d", msg.TokenizeShareRecordId)), + sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender), + sdk.NewAttribute(types.AttributeKeyShareOwner, msg.NewOwner), + ), + ) + return &types.MsgTransferTokenizeShareRecordResponse{}, nil } // DisableTokenizeShares prevents an address from tokenizing any of their delegations func (k msgServer) DisableTokenizeShares(goCtx context.Context, msg *types.MsgDisableTokenizeShares) (*types.MsgDisableTokenizeSharesResponse, error) { - // TODO add LSM logic + ctx := sdk.UnwrapSDKContext(goCtx) + + delegator := sdk.MustAccAddressFromBech32(msg.DelegatorAddress) + + // If tokenized shares is already disabled, alert the user + lockStatus, completionTime := k.GetTokenizeSharesLock(ctx, delegator) + if lockStatus == types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED { + return nil, types.ErrTokenizeSharesAlreadyDisabledForAccount + } + + // If the tokenized shares lock is expiring, remove the pending unlock from the queue + if lockStatus == types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING { + k.CancelTokenizeShareLockExpiration(ctx, delegator, completionTime) + } + + // Create a new tokenization lock for the user + // Note: if there is a lock expiration in progress, this will override the expiration + k.AddTokenizeSharesLock(ctx, delegator) + return &types.MsgDisableTokenizeSharesResponse{}, nil } // EnableTokenizeShares begins the countdown after which tokenizing shares by the // sender address is re-allowed, which will complete after the unbonding period func (k msgServer) EnableTokenizeShares(goCtx context.Context, msg *types.MsgEnableTokenizeShares) (*types.MsgEnableTokenizeSharesResponse, error) { - completionTime := time.Time{} - // TODO add LSM logic + ctx := sdk.UnwrapSDKContext(goCtx) + + delegator := sdk.MustAccAddressFromBech32(msg.DelegatorAddress) + + // If tokenized shares aren't current disabled, alert the user + lockStatus, unlockTime := k.GetTokenizeSharesLock(ctx, delegator) + if lockStatus == types.TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED { + return nil, types.ErrTokenizeSharesAlreadyEnabledForAccount + } + if lockStatus == types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING { + return nil, types.ErrTokenizeSharesAlreadyEnabledForAccount.Wrapf( + "tokenize shares re-enablement already in progress, ending at %s", unlockTime) + } + + // Otherwise queue the unlock + completionTime := k.QueueTokenizeSharesAuthorization(ctx, delegator) + return &types.MsgEnableTokenizeSharesResponse{CompletionTime: completionTime}, nil } // Designates a delegation as a validator bond // This enables the validator to receive more liquid staking delegations func (k msgServer) ValidatorBond(goCtx context.Context, msg *types.MsgValidatorBond) (*types.MsgValidatorBondResponse, error) { - // TODO add LSM logic + ctx := sdk.UnwrapSDKContext(goCtx) + + delAddr, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + return nil, err + } + + valAddr, valErr := sdk.ValAddressFromBech32(msg.ValidatorAddress) + if valErr != nil { + return nil, valErr + } + + validator, found := k.GetValidator(ctx, valAddr) + if !found { + return nil, types.ErrNoValidatorFound + } + + delegation, found := k.GetDelegation(ctx, delAddr, valAddr) + if !found { + return nil, types.ErrNoDelegation + } + + // liquid staking providers should not be able to validator bond + if k.DelegatorIsLiquidStaker(delAddr) { + return nil, types.ErrValidatorBondNotAllowedFromModuleAccount + } + + if !delegation.ValidatorBond { + delegation.ValidatorBond = true + k.SetDelegation(ctx, delegation) + validator.ValidatorBondShares = validator.ValidatorBondShares.Add(delegation.Shares) + k.SetValidator(ctx, validator) + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeValidatorBondDelegation, + sdk.NewAttribute(types.AttributeKeyDelegator, msg.DelegatorAddress), + sdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress), + ), + ) + } + return &types.MsgValidatorBondResponse{}, nil } diff --git a/x/staking/keeper/params.go b/x/staking/keeper/params.go index 3e1bb083916e..06dfad471852 100644 --- a/x/staking/keeper/params.go +++ b/x/staking/keeper/params.go @@ -44,6 +44,22 @@ func (k Keeper) PowerReduction(ctx sdk.Context) math.Int { return sdk.DefaultPowerReduction } +// Validator bond factor for all validators +func (k Keeper) ValidatorBondFactor(ctx sdk.Context) (res sdk.Dec) { + return k.GetParams(ctx).ValidatorBondFactor + +} + +// Global liquid staking cap across all liquid staking providers +func (k Keeper) GlobalLiquidStakingCap(ctx sdk.Context) (res sdk.Dec) { + return k.GetParams(ctx).GlobalLiquidStakingCap +} + +// Liquid staking cap for each validator +func (k Keeper) ValidatorLiquidStakingCap(ctx sdk.Context) (res sdk.Dec) { + return k.GetParams(ctx).ValidatorLiquidStakingCap +} + // MinCommissionRate - Minimum validator commission rate func (k Keeper) MinCommissionRate(ctx sdk.Context) math.LegacyDec { return k.GetParams(ctx).MinCommissionRate diff --git a/x/staking/keeper/slash.go b/x/staking/keeper/slash.go index e5b4e1f87e61..cd0318c933c2 100644 --- a/x/staking/keeper/slash.go +++ b/x/staking/keeper/slash.go @@ -132,8 +132,19 @@ func (k Keeper) Slash(ctx sdk.Context, consAddr sdk.ConsAddress, infractionHeigh // Deduct from validator's bonded tokens and update the validator. // Burn the slashed tokens from the pool account and decrease the total supply. + initialLiquidTokens := validator.TokensFromShares(validator.LiquidShares).TruncateInt() validator = k.RemoveValidatorTokens(ctx, validator, tokensToBurn) + // Proportionally deduct any liquid tokens from the global total + updatedLiquidTokens := validator.TokensFromShares(validator.LiquidShares).TruncateInt() + slashedLiquidTokens := initialLiquidTokens.Sub(updatedLiquidTokens) + if err := k.DecreaseTotalLiquidStakedTokens(ctx, slashedLiquidTokens); err != nil { + // This only error's if the total liquid staked tokens underflows + // which would indicate there's a corrupted state where the validator has + // liquid tokens that are not accounted for in the global total + panic(err) + } + switch validator.GetStatus() { case types.Bonded: if err := k.burnBondedTokens(ctx, tokensToBurn); err != nil { diff --git a/x/staking/keeper/tokenize_share_record_test.go b/x/staking/keeper/tokenize_share_record_test.go index 3f0bc7679a5c..0fc9043f96cf 100644 --- a/x/staking/keeper/tokenize_share_record_test.go +++ b/x/staking/keeper/tokenize_share_record_test.go @@ -9,6 +9,52 @@ func (suite *KeeperTestSuite) TestGetLastTokenizeShareRecordId() { suite.Equal(lastTokenizeShareRecordID, uint64(100)) } -func (suite *KeeperTestSuite) TestGetTokenizeShareRecord() { - // TODO add LSM test -} +// TODO: refactor LSM test +// Note that this test might be moved to the integration tests +// +// func (suite *KeeperTestSuite) TestGetTokenizeShareRecord() { +// app, ctx := suite.app, suite.ctx +// owner1, owner2 := suite.addrs[0], suite.addrs[1] + +// tokenizeShareRecord1 := types.TokenizeShareRecord{ +// Id: 0, +// Owner: owner1.String(), +// ModuleAccount: "test-module-account-1", +// Validator: "test-validator", +// } +// tokenizeShareRecord2 := types.TokenizeShareRecord{ +// Id: 1, +// Owner: owner2.String(), +// ModuleAccount: "test-module-account-2", +// Validator: "test-validator", +// } +// tokenizeShareRecord3 := types.TokenizeShareRecord{ +// Id: 2, +// Owner: owner1.String(), +// ModuleAccount: "test-module-account-3", +// Validator: "test-validator", +// } +// err := app.StakingKeeper.AddTokenizeShareRecord(ctx, tokenizeShareRecord1) +// suite.NoError(err) +// err = app.StakingKeeper.AddTokenizeShareRecord(ctx, tokenizeShareRecord2) +// suite.NoError(err) +// err = app.StakingKeeper.AddTokenizeShareRecord(ctx, tokenizeShareRecord3) +// suite.NoError(err) + +// tokenizeShareRecord, err := app.StakingKeeper.GetTokenizeShareRecord(ctx, 2) +// suite.NoError(err) +// suite.Equal(tokenizeShareRecord, tokenizeShareRecord3) + +// tokenizeShareRecord, err = app.StakingKeeper.GetTokenizeShareRecordByDenom(ctx, tokenizeShareRecord2.GetShareTokenDenom()) +// suite.NoError(err) +// suite.Equal(tokenizeShareRecord, tokenizeShareRecord2) + +// tokenizeShareRecords := app.StakingKeeper.GetAllTokenizeShareRecords(ctx) +// suite.Equal(len(tokenizeShareRecords), 3) + +// tokenizeShareRecords = app.StakingKeeper.GetTokenizeShareRecordsByOwner(ctx, owner1) +// suite.Equal(len(tokenizeShareRecords), 2) + +// tokenizeShareRecords = app.StakingKeeper.GetTokenizeShareRecordsByOwner(ctx, owner2) +// suite.Equal(len(tokenizeShareRecords), 1) +// } diff --git a/x/staking/simulation/genesis.go b/x/staking/simulation/genesis.go index afd393c1c778..6a6de6a408bb 100644 --- a/x/staking/simulation/genesis.go +++ b/x/staking/simulation/genesis.go @@ -11,14 +11,18 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/types/simulation" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/staking/types" ) // Simulation parameter constants const ( - unbondingTime = "unbonding_time" - maxValidators = "max_validators" - historicalEntries = "historical_entries" + UnbondingTime = "unbonding_time" + MaxValidators = "max_validators" + HistoricalEntries = "historical_entries" + ValidatorBondFactor = "validator_bond_factor" + GlobalLiquidStakingCap = "global_liquid_staking_cap" + ValidatorLiquidStakingCap = "validator_liquid_staking_cap" ) // genUnbondingTime returns randomized UnbondingTime @@ -36,35 +40,76 @@ func getHistEntries(r *rand.Rand) uint32 { return uint32(r.Intn(int(types.DefaultHistoricalEntries + 1))) } +// getGlobalLiquidStakingCap returns randomized GlobalLiquidStakingCap between 0-1. +func getGlobalLiquidStakingCap(r *rand.Rand) sdk.Dec { + return simtypes.RandomDecAmount(r, sdk.OneDec()) +} + +// getValidatorLiquidStakingCap returns randomized ValidatorLiquidStakingCap between 0-1. +func getValidatorLiquidStakingCap(r *rand.Rand) sdk.Dec { + return simtypes.RandomDecAmount(r, sdk.OneDec()) +} + +// getValidatorBondFactor returns randomized ValidatorBondCap between -1 and 300. +func getValidatorBondFactor(r *rand.Rand) sdk.Dec { + return sdk.NewDec(int64(simtypes.RandIntBetween(r, -1, 300))) +} + // RandomizedGenState generates a random GenesisState for staking func RandomizedGenState(simState *module.SimulationState) { // params var ( - unbondTime time.Duration - maxVals uint32 - histEntries uint32 - minCommissionRate sdk.Dec + unbondingTime time.Duration + maxValidators uint32 + historicalEntries uint32 + minCommissionRate sdk.Dec + validatorBondFactor sdk.Dec + globalLiquidStakingCap sdk.Dec + validatorLiquidStakingCap sdk.Dec + ) + + simState.AppParams.GetOrGenerate( + simState.Cdc, UnbondingTime, &unbondingTime, simState.Rand, + func(r *rand.Rand) { unbondingTime = genUnbondingTime(r) }, ) simState.AppParams.GetOrGenerate( - simState.Cdc, unbondingTime, &unbondTime, simState.Rand, - func(r *rand.Rand) { unbondTime = genUnbondingTime(r) }, + simState.Cdc, MaxValidators, &maxValidators, simState.Rand, + func(r *rand.Rand) { maxValidators = genMaxValidators(r) }, ) simState.AppParams.GetOrGenerate( - simState.Cdc, maxValidators, &maxVals, simState.Rand, - func(r *rand.Rand) { maxVals = genMaxValidators(r) }, + simState.Cdc, HistoricalEntries, &historicalEntries, simState.Rand, + func(r *rand.Rand) { historicalEntries = getHistEntries(r) }, ) simState.AppParams.GetOrGenerate( - simState.Cdc, historicalEntries, &histEntries, simState.Rand, - func(r *rand.Rand) { histEntries = getHistEntries(r) }, + simState.Cdc, ValidatorBondFactor, &validatorBondFactor, simState.Rand, + func(r *rand.Rand) { validatorBondFactor = getValidatorBondFactor(r) }, + ) + simState.AppParams.GetOrGenerate( + simState.Cdc, GlobalLiquidStakingCap, &globalLiquidStakingCap, simState.Rand, + func(r *rand.Rand) { globalLiquidStakingCap = getGlobalLiquidStakingCap(r) }, + ) + simState.AppParams.GetOrGenerate( + simState.Cdc, ValidatorLiquidStakingCap, &validatorLiquidStakingCap, simState.Rand, + func(r *rand.Rand) { validatorLiquidStakingCap = getValidatorLiquidStakingCap(r) }, ) // NOTE: the slashing module need to be defined after the staking module on the // NewSimulationManager constructor for this to work - simState.UnbondTime = unbondTime - params := types.NewParams(simState.UnbondTime, maxVals, 7, histEntries, sdk.DefaultBondDenom, minCommissionRate) + simState.UnbondTime = unbondingTime + params := types.NewParams( + simState.UnbondTime, + maxValidators, + 7, + historicalEntries, + sdk.DefaultBondDenom, + minCommissionRate, + validatorBondFactor, + globalLiquidStakingCap, + validatorLiquidStakingCap, + ) // validators & delegations var ( diff --git a/x/staking/simulation/genesis_test.go b/x/staking/simulation/genesis_test.go index dd60652a87bb..809009a6eba1 100644 --- a/x/staking/simulation/genesis_test.go +++ b/x/staking/simulation/genesis_test.go @@ -61,10 +61,9 @@ func TestRandomizedGenState(t *testing.T) { require.Equal(t, "BOND_STATUS_UNBONDED", stakingGenesis.Validators[2].Status.String()) require.Equal(t, "1000", stakingGenesis.Validators[2].Tokens.String()) require.Equal(t, "1000.000000000000000000", stakingGenesis.Validators[2].DelegatorShares.String()) - require.Equal(t, "0.292059246265731326", stakingGenesis.Validators[2].Commission.CommissionRates.Rate.String()) - require.Equal(t, "0.330000000000000000", stakingGenesis.Validators[2].Commission.CommissionRates.MaxRate.String()) - require.Equal(t, "0.038337453731274481", stakingGenesis.Validators[2].Commission.CommissionRates.MaxChangeRate.String()) - require.Equal(t, "1", stakingGenesis.Validators[2].MinSelfDelegation.String()) + require.Equal(t, "0.019527679037870745", stakingGenesis.Validators[2].Commission.CommissionRates.Rate.String()) + require.Equal(t, "0.240000000000000000", stakingGenesis.Validators[2].Commission.CommissionRates.MaxRate.String()) + require.Equal(t, "0.240000000000000000", stakingGenesis.Validators[2].Commission.CommissionRates.MaxChangeRate.String()) } // TestRandomizedGenState1 tests abnormal scenarios of applying RandomizedGenState. diff --git a/x/staking/simulation/operations.go b/x/staking/simulation/operations.go index 15ad194a09a5..68680096243b 100644 --- a/x/staking/simulation/operations.go +++ b/x/staking/simulation/operations.go @@ -4,12 +4,14 @@ import ( "fmt" "math/rand" + "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/testutil" sdk "github.com/cosmos/cosmos-sdk/types" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/exported" "github.com/cosmos/cosmos-sdk/x/simulation" "github.com/cosmos/cosmos-sdk/x/staking/keeper" "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -19,19 +21,32 @@ import ( // //nolint:gosec // these are not hardcoded credentials const ( - DefaultWeightMsgCreateValidator int = 100 - DefaultWeightMsgEditValidator int = 5 - DefaultWeightMsgDelegate int = 100 - DefaultWeightMsgUndelegate int = 100 - DefaultWeightMsgBeginRedelegate int = 100 - DefaultWeightMsgCancelUnbondingDelegation int = 100 - - OpWeightMsgCreateValidator = "op_weight_msg_create_validator" - OpWeightMsgEditValidator = "op_weight_msg_edit_validator" - OpWeightMsgDelegate = "op_weight_msg_delegate" - OpWeightMsgUndelegate = "op_weight_msg_undelegate" - OpWeightMsgBeginRedelegate = "op_weight_msg_begin_redelegate" - OpWeightMsgCancelUnbondingDelegation = "op_weight_msg_cancel_unbonding_delegation" + DefaultWeightMsgCreateValidator int = 100 + DefaultWeightMsgEditValidator int = 5 + DefaultWeightMsgDelegate int = 100 + DefaultWeightMsgUndelegate int = 100 + DefaultWeightMsgBeginRedelegate int = 100 + DefaultWeightMsgCancelUnbondingDelegation int = 100 + DefaultWeightMsgValidatorBond int = 100 + DefaultWeightMsgTokenizeShares int = 25 + DefaultWeightMsgRedeemTokensforShares int = 25 + DefaultWeightMsgTransferTokenizeShareRecord int = 5 + DefaultWeightMsgEnableTokenizeShares int = 1 + DefaultWeightMsgDisableTokenizeShares int = 1 + + OpWeightMsgCreateValidator = "op_weight_msg_create_validator" + OpWeightMsgEditValidator = "op_weight_msg_edit_validator" + OpWeightMsgDelegate = "op_weight_msg_delegate" + OpWeightMsgUndelegate = "op_weight_msg_undelegate" + OpWeightMsgBeginRedelegate = "op_weight_msg_begin_redelegate" + OpWeightMsgCancelUnbondingDelegation = "op_weight_msg_cancel_unbonding_delegation" + OpWeightMsgValidatorBond = "op_weight_msg_validator_bond" //nolint:gosec + OpWeightMsgTokenizeShares = "op_weight_msg_tokenize_shares" //nolint:gosec + OpWeightMsgRedeemTokensforShares = "op_weight_msg_redeem_tokens_for_shares" //nolint:gosec + OpWeightMsgTransferTokenizeShareRecord = "op_weight_msg_transfer_tokenize_share_record" //nolint:gosec + OpWeightMsgDisableTokenizeShares = "op_weight_msg_disable_tokenize_shares" //nolint:gosec + OpWeightMsgEnableTokenizeShares = "op_weight_msg_enable_tokenize_shares" //nolint:gosec + ) // WeightedOperations returns all the operations from the module with their respective weights @@ -40,12 +55,18 @@ func WeightedOperations( bk types.BankKeeper, k *keeper.Keeper, ) simulation.WeightedOperations { var ( - weightMsgCreateValidator int - weightMsgEditValidator int - weightMsgDelegate int - weightMsgUndelegate int - weightMsgBeginRedelegate int - weightMsgCancelUnbondingDelegation int + weightMsgCreateValidator int + weightMsgEditValidator int + weightMsgDelegate int + weightMsgUndelegate int + weightMsgBeginRedelegate int + weightMsgCancelUnbondingDelegation int + weightMsgValidatorBond int + weightMsgTokenizeShares int + weightMsgRedeemTokensforShares int + weightMsgTransferTokenizeShareRecord int + weightMsgDisableTokenizeShares int + weightMsgEnableTokenizeShares int ) appParams.GetOrGenerate(cdc, OpWeightMsgCreateValidator, &weightMsgCreateValidator, nil, @@ -84,6 +105,42 @@ func WeightedOperations( }, ) + appParams.GetOrGenerate(cdc, OpWeightMsgValidatorBond, &weightMsgValidatorBond, nil, + func(_ *rand.Rand) { + weightMsgValidatorBond = DefaultWeightMsgValidatorBond + }, + ) + + appParams.GetOrGenerate(cdc, OpWeightMsgTokenizeShares, &weightMsgTokenizeShares, nil, + func(_ *rand.Rand) { + weightMsgTokenizeShares = DefaultWeightMsgTokenizeShares + }, + ) + + appParams.GetOrGenerate(cdc, OpWeightMsgRedeemTokensforShares, &weightMsgRedeemTokensforShares, nil, + func(_ *rand.Rand) { + weightMsgRedeemTokensforShares = DefaultWeightMsgRedeemTokensforShares + }, + ) + + appParams.GetOrGenerate(cdc, OpWeightMsgTransferTokenizeShareRecord, &weightMsgTransferTokenizeShareRecord, nil, + func(_ *rand.Rand) { + weightMsgTransferTokenizeShareRecord = DefaultWeightMsgTransferTokenizeShareRecord + }, + ) + + appParams.GetOrGenerate(cdc, OpWeightMsgDisableTokenizeShares, &weightMsgDisableTokenizeShares, nil, + func(_ *rand.Rand) { + weightMsgDisableTokenizeShares = DefaultWeightMsgDisableTokenizeShares + }, + ) + + appParams.GetOrGenerate(cdc, OpWeightMsgEnableTokenizeShares, &weightMsgEnableTokenizeShares, nil, + func(_ *rand.Rand) { + weightMsgEnableTokenizeShares = DefaultWeightMsgEnableTokenizeShares + }, + ) + return simulation.WeightedOperations{ simulation.NewWeightedOperation( weightMsgCreateValidator, @@ -109,6 +166,30 @@ func WeightedOperations( weightMsgCancelUnbondingDelegation, SimulateMsgCancelUnbondingDelegate(ak, bk, k), ), + simulation.NewWeightedOperation( + weightMsgValidatorBond, + SimulateMsgValidatorBond(ak, bk, k), + ), + simulation.NewWeightedOperation( + weightMsgTokenizeShares, + SimulateMsgTokenizeShares(ak, bk, k), + ), + simulation.NewWeightedOperation( + weightMsgRedeemTokensforShares, + SimulateMsgRedeemTokensforShares(ak, bk, k), + ), + simulation.NewWeightedOperation( + weightMsgTransferTokenizeShareRecord, + SimulateMsgTransferTokenizeShareRecord(ak, bk, k), + ), + simulation.NewWeightedOperation( + weightMsgDisableTokenizeShares, + SimulateMsgDisableTokenizeShares(ak, bk, k), + ), + simulation.NewWeightedOperation( + weightMsgEnableTokenizeShares, + SimulateMsgEnableTokenizeShares(ak, bk, k), + ), } } @@ -319,13 +400,13 @@ func SimulateMsgUndelegate(ak types.AccountKeeper, bk types.BankKeeper, k *keepe return func( r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - val, ok := testutil.RandSliceElem(r, k.GetAllValidators(ctx)) + validator, ok := testutil.RandSliceElem(r, k.GetAllValidators(ctx)) if !ok { return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUndelegate, "validator is not ok"), nil, nil } - valAddr := val.GetOperator() - delegations := k.GetValidatorDelegations(ctx, val.GetOperator()) + valAddr := validator.GetOperator() + delegations := k.GetValidatorDelegations(ctx, validator.GetOperator()) if delegations == nil { return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUndelegate, "keeper does have any delegation entries"), nil, nil } @@ -338,7 +419,7 @@ func SimulateMsgUndelegate(ak types.AccountKeeper, bk types.BankKeeper, k *keepe return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUndelegate, "keeper does have a max unbonding delegation entries"), nil, nil } - totalBond := val.TokensFromShares(delegation.GetShares()).TruncateInt() + totalBond := validator.TokensFromShares(delegation.GetShares()).TruncateInt() if !totalBond.IsPositive() { return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUndelegate, "total bond is negative"), nil, nil } @@ -352,6 +433,19 @@ func SimulateMsgUndelegate(ak types.AccountKeeper, bk types.BankKeeper, k *keepe return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUndelegate, "unbond amount is zero"), nil, nil } + // if delegation is a validator bond, make sure the decrease wont cause the validator bond cap to be exceeded + if delegation.ValidatorBond { + shares, err := validator.SharesFromTokens(unbondAmt) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUndelegate, "unable to calculate shares from tokens"), nil, nil + } + + maxValTotalShare := validator.ValidatorBondShares.Sub(shares).Mul(k.ValidatorBondFactor(ctx)) + if validator.LiquidShares.GT(maxValTotalShare) { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUndelegate, "unbonding validator bond exceeds cap"), nil, nil + } + } + msg := types.NewMsgUndelegate( delAddr, valAddr, sdk.NewCoin(k.BondDenom(ctx), unbondAmt), ) @@ -532,6 +626,14 @@ func SimulateMsgBeginRedelegate(ak types.AccountKeeper, bk types.BankKeeper, k * return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "shares truncate to zero"), nil, nil // skip } + // if delegation is a validator bond, make sure the decrease wont cause the validator bond cap to be exceeded + if delegation.ValidatorBond { + maxValTotalShare := srcVal.ValidatorBondShares.Sub(shares).Mul(k.ValidatorBondFactor(ctx)) + if srcVal.LiquidShares.GT(maxValTotalShare) { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "source validator bond exceeds cap"), nil, nil + } + } + // need to retrieve the simulation account associated with delegation to retrieve PrivKey var simAccount simtypes.Account @@ -573,3 +675,425 @@ func SimulateMsgBeginRedelegate(ak types.AccountKeeper, bk types.BankKeeper, k * return simulation.GenAndDeliverTxWithRandFees(txCtx) } } + +func SimulateMsgValidatorBond(ak types.AccountKeeper, bk types.BankKeeper, k *keeper.Keeper) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + // get random validator + validator, ok := testutil.RandSliceElem(r, k.GetAllValidators(ctx)) + if !ok { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgValidatorBond, "unable to pick validator"), nil, nil + } + + valAddr := validator.GetOperator() + delegations := k.GetValidatorDelegations(ctx, validator.GetOperator()) + if delegations == nil { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgValidatorBond, "keeper does have any delegation entries"), nil, nil + } + + // get random delegator from validator + delegation := delegations[r.Intn(len(delegations))] + delAddr := delegation.GetDelegatorAddr() + + totalBond := validator.TokensFromShares(delegation.GetShares()).TruncateInt() + if !totalBond.IsPositive() { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgValidatorBond, "total bond is negative"), nil, nil + } + + // submit validator bond + msg := &types.MsgValidatorBond{ + DelegatorAddress: delAddr.String(), + ValidatorAddress: valAddr.String(), + } + + // need to retrieve the simulation account associated with delegation to retrieve PrivKey + var simAccount simtypes.Account + + for _, simAcc := range accs { + if simAcc.Address.Equals(delAddr) { + simAccount = simAcc + break + } + } + // if simaccount.PrivKey == nil, delegation address does not exist in accs. Return error + if simAccount.PrivKey == nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "account private key is nil"), nil, nil + } + + account := ak.GetAccount(ctx, delAddr) + spendable := bk.SpendableCoins(ctx, account.GetAddress()) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: moduletestutil.MakeTestEncodingConfig().TxConfig, + Cdc: nil, + Msg: msg, + MsgType: msg.Type(), + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: spendable, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +// SimulateMsgTokenizeShares generates a MsgTokenizeShares with random values +func SimulateMsgTokenizeShares(ak types.AccountKeeper, bk types.BankKeeper, k *keeper.Keeper) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + // get random source validator + validator, ok := testutil.RandSliceElem(r, k.GetAllValidators(ctx)) + if !ok { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "unable to pick validator"), nil, nil + } + + srcAddr := validator.GetOperator() + delegations := k.GetValidatorDelegations(ctx, srcAddr) + if delegations == nil { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "keeper does have any delegation entries"), nil, nil + } + + // get random delegator from src validator + delegation := delegations[r.Intn(len(delegations))] + delAddr := delegation.GetDelegatorAddr() + + // make sure delegation is not a validator bond + if delegation.ValidatorBond { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "can't tokenize a validator bond"), nil, nil + } + + // make sure tokenizations are not disabled + lockStatus, _ := k.GetTokenizeSharesLock(ctx, delAddr) + if lockStatus != types.TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "tokenize shares disabled"), nil, nil + } + + // get random destination validator + totalBond := validator.TokensFromShares(delegation.GetShares()).TruncateInt() + if !totalBond.IsPositive() { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "total bond is negative"), nil, nil + } + + tokenizeShareAmt, err := simtypes.RandPositiveInt(r, totalBond) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "unable to generate positive amount"), nil, err + } + + if tokenizeShareAmt.IsZero() { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "amount is zero"), nil, nil + } + + account := ak.GetAccount(ctx, delAddr) + if account, ok := account.(vesting.VestingAccount); ok { + if tokenizeShareAmt.GT(account.GetDelegatedFree().AmountOf(k.BondDenom(ctx))) { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "account vests and amount exceeds free portion"), nil, nil + } + } + + // check if the shares truncate to zero + shares, err := validator.SharesFromTokens(tokenizeShareAmt) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "invalid shares"), nil, err + } + + if validator.TokensFromShares(shares).TruncateInt().IsZero() { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "shares truncate to zero"), nil, nil // skip + } + + // check that tokenization would not exceed global cap + params := k.GetParams(ctx) + totalStaked := math.LegacyNewDec(k.TotalBondedTokens(ctx).Int64()) + if totalStaked.IsZero() { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "cannot happened - no validators bonded if stake is 0.0"), nil, nil // skip + } + totalLiquidStaked := math.LegacyNewDec(k.GetTotalLiquidStakedTokens(ctx).Add(tokenizeShareAmt).Int64()) + liquidStakedPercent := totalLiquidStaked.Quo(totalStaked) + if liquidStakedPercent.GT(params.GlobalLiquidStakingCap) { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "global liquid staking cap exceeded"), nil, nil + } + + // check that tokenization would not exceed validator liquid staking cap + validatorTotalShares := validator.DelegatorShares.Add(shares) + validatorLiquidShares := validator.LiquidShares.Add(shares) + validatorLiquidSharesPercent := validatorLiquidShares.Quo(validatorTotalShares) + if validatorLiquidSharesPercent.GT(params.ValidatorLiquidStakingCap) { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "validator liquid staking cap exceeded"), nil, nil + } + + // check that tokenization would not exceed validator bond cap + maxValidatorLiquidShares := validator.ValidatorBondShares.Mul(params.ValidatorBondFactor) + if validator.LiquidShares.Add(shares).GT(maxValidatorLiquidShares) { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "validator bond cap exceeded"), nil, nil + } + + // need to retrieve the simulation account associated with delegation to retrieve PrivKey + var simAccount simtypes.Account + + for _, simAcc := range accs { + if simAcc.Address.Equals(delAddr) { + simAccount = simAcc + break + } + } + + // if simaccount.PrivKey == nil, delegation address does not exist in accs. Return error + if simAccount.PrivKey == nil { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "account private key is nil"), nil, nil + } + + msg := &types.MsgTokenizeShares{ + DelegatorAddress: delAddr.String(), + ValidatorAddress: srcAddr.String(), + Amount: sdk.NewCoin(k.BondDenom(ctx), tokenizeShareAmt), + TokenizedShareOwner: delAddr.String(), + } + + spendable := bk.SpendableCoins(ctx, account.GetAddress()) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: moduletestutil.MakeTestEncodingConfig().TxConfig, + Cdc: nil, + Msg: msg, + MsgType: msg.Type(), + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: spendable, + } + + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +// SimulateMsgRedeemTokensforShares generates a MsgRedeemTokensforShares with random values +func SimulateMsgRedeemTokensforShares(ak types.AccountKeeper, bk types.BankKeeper, k *keeper.Keeper) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + redeemUser := simtypes.Account{} + redeemCoin := sdk.Coin{} + tokenizeShareRecord := types.TokenizeShareRecord{} + + records := k.GetAllTokenizeShareRecords(ctx) + if len(records) > 0 { + record := records[r.Intn(len(records))] + for _, acc := range accs { + balance := bk.GetBalance(ctx, acc.Address, record.GetShareTokenDenom()) + if balance.Amount.IsPositive() { + redeemUser = acc + redeemAmount, err := simtypes.RandPositiveInt(r, balance.Amount) + if err == nil { + redeemCoin = sdk.NewCoin(record.GetShareTokenDenom(), redeemAmount) + tokenizeShareRecord = record + } + break + } + } + } + + // if redeemUser.PrivKey == nil, redeem user does not exist in accs + if redeemUser.PrivKey == nil { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgRedeemTokensForShares, "account private key is nil"), nil, nil + } + + if redeemCoin.Amount.IsZero() { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgRedeemTokensForShares, "empty balance in tokens"), nil, nil + } + + valAddress, err := sdk.ValAddressFromBech32(tokenizeShareRecord.Validator) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgRedeemTokensForShares, "invalid validator address"), nil, fmt.Errorf("invalid validator address") + } + validator, found := k.GetValidator(ctx, valAddress) + if !found { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgRedeemTokensForShares, "validator not found"), nil, fmt.Errorf("validator not found") + } + delegation, found := k.GetDelegation(ctx, tokenizeShareRecord.GetModuleAddress(), valAddress) + if !found { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgRedeemTokensForShares, "delegation not found"), nil, fmt.Errorf("delegation not found") + } + + // prevent redemption that returns a 0 amount + shareDenomSupply := bk.GetSupply(ctx, tokenizeShareRecord.GetShareTokenDenom()) + shares := delegation.Shares.Mul(sdk.NewDecFromInt(redeemCoin.Amount)).QuoInt(shareDenomSupply.Amount) + + if validator.TokensFromShares(shares).TruncateInt().IsZero() { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgRedeemTokensForShares, "zero tokens returned"), nil, nil + } + + account := ak.GetAccount(ctx, redeemUser.Address) + spendable := bk.SpendableCoins(ctx, account.GetAddress()) + + msg := &types.MsgRedeemTokensForShares{ + DelegatorAddress: redeemUser.Address.String(), + Amount: redeemCoin, + } + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: moduletestutil.MakeTestEncodingConfig().TxConfig, + Cdc: nil, + Msg: msg, + MsgType: msg.Type(), + Context: ctx, + SimAccount: redeemUser, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: spendable, + } + + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +// SimulateMsgTransferTokenizeShareRecord generates a MsgTransferTokenizeShareRecord with random values +func SimulateMsgTransferTokenizeShareRecord(ak types.AccountKeeper, bk types.BankKeeper, k *keeper.Keeper) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + simAccount, _ := simtypes.RandomAcc(r, accs) + destAccount, _ := simtypes.RandomAcc(r, accs) + transferRecord := types.TokenizeShareRecord{} + + records := k.GetAllTokenizeShareRecords(ctx) + if len(records) > 0 { + record := records[r.Intn(len(records))] + for _, acc := range accs { + if record.Owner == acc.Address.String() { + simAccount = acc + transferRecord = record + break + } + } + } + + // if simAccount.PrivKey == nil, record owner does not exist in accs + if simAccount.PrivKey == nil { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTransferTokenizeShareRecord, "account private key is nil"), nil, nil + } + + if transferRecord.Id == 0 { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTransferTokenizeShareRecord, "share record not found"), nil, nil + } + + account := ak.GetAccount(ctx, simAccount.Address) + spendable := bk.SpendableCoins(ctx, account.GetAddress()) + + msg := &types.MsgTransferTokenizeShareRecord{ + TokenizeShareRecordId: transferRecord.Id, + Sender: simAccount.Address.String(), + NewOwner: destAccount.Address.String(), + } + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: moduletestutil.MakeTestEncodingConfig().TxConfig, + Cdc: nil, + Msg: msg, + MsgType: msg.Type(), + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: spendable, + } + + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +func SimulateMsgDisableTokenizeShares(ak types.AccountKeeper, bk types.BankKeeper, k *keeper.Keeper) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + simAccount, _ := simtypes.RandomAcc(r, accs) + + if simAccount.PrivKey == nil { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDisableTokenizeShares, "account private key is nil"), nil, nil + } + + balance := bk.GetBalance(ctx, simAccount.Address, k.GetParams(ctx).BondDenom).Amount + if !balance.IsPositive() { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDisableTokenizeShares, "balance is negative"), nil, nil + } + + lockStatus, _ := k.GetTokenizeSharesLock(ctx, simAccount.Address) + if lockStatus == types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDisableTokenizeShares, "account already locked"), nil, nil + } + + msg := &types.MsgDisableTokenizeShares{ + DelegatorAddress: simAccount.Address.String(), + } + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: moduletestutil.MakeTestEncodingConfig().TxConfig, + Cdc: nil, + Msg: msg, + MsgType: msg.Type(), + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +func SimulateMsgEnableTokenizeShares(ak types.AccountKeeper, bk types.BankKeeper, k *keeper.Keeper) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + simAccount, _ := simtypes.RandomAcc(r, accs) + + if simAccount.PrivKey == nil { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEnableTokenizeShares, "account private key is nil"), nil, nil + } + + balance := bk.GetBalance(ctx, simAccount.Address, k.GetParams(ctx).BondDenom).Amount + if !balance.IsPositive() { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEnableTokenizeShares, "balance is negative"), nil, nil + } + + lockStatus, _ := k.GetTokenizeSharesLock(ctx, simAccount.Address) + if lockStatus != types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED { + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEnableTokenizeShares, "account is not locked"), nil, nil + } + + msg := &types.MsgEnableTokenizeShares{ + DelegatorAddress: simAccount.Address.String(), + } + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: moduletestutil.MakeTestEncodingConfig().TxConfig, + Cdc: nil, + Msg: msg, + MsgType: msg.Type(), + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/staking/simulation/operations_test.go b/x/staking/simulation/operations_test.go index de7bbb4f05ee..05b780be9565 100644 --- a/x/staking/simulation/operations_test.go +++ b/x/staking/simulation/operations_test.go @@ -137,6 +137,12 @@ func (s *SimTestSuite) TestWeightedOperations() { {simulation.DefaultWeightMsgUndelegate, types.ModuleName, types.TypeMsgUndelegate}, {simulation.DefaultWeightMsgBeginRedelegate, types.ModuleName, types.TypeMsgBeginRedelegate}, {simulation.DefaultWeightMsgCancelUnbondingDelegation, types.ModuleName, types.TypeMsgCancelUnbondingDelegation}, + {simulation.DefaultWeightMsgValidatorBond, types.ModuleName, types.TypeMsgValidatorBond}, + {simulation.DefaultWeightMsgTokenizeShares, types.ModuleName, types.TypeMsgTokenizeShares}, + {simulation.DefaultWeightMsgRedeemTokensforShares, types.ModuleName, types.TypeMsgRedeemTokensForShares}, + {simulation.DefaultWeightMsgTransferTokenizeShareRecord, types.ModuleName, types.TypeMsgTransferTokenizeShareRecord}, + {simulation.DefaultWeightMsgDisableTokenizeShares, types.ModuleName, types.TypeMsgDisableTokenizeShares}, + {simulation.DefaultWeightMsgEnableTokenizeShares, types.ModuleName, types.TypeMsgEnableTokenizeShares}, } for i, w := range weightesOps { diff --git a/x/staking/testutil/expected_keepers_mocks.go b/x/staking/testutil/expected_keepers_mocks.go index 375c6ff3c729..225c6ca0deac 100644 --- a/x/staking/testutil/expected_keepers_mocks.go +++ b/x/staking/testutil/expected_keepers_mocks.go @@ -261,6 +261,62 @@ func (mr *MockBankKeeperMockRecorder) LockedCoins(ctx, addr interface{}) *gomock return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LockedCoins", reflect.TypeOf((*MockBankKeeper)(nil).LockedCoins), ctx, addr) } +// MintCoins mocks base method. +func (m *MockBankKeeper) MintCoins(cts types.Context, name string, amt types.Coins) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MintCoins", cts, name, amt) + ret0, _ := ret[0].(error) + return ret0 +} + +// MintCoins indicates an expected call of MintCoins. +func (mr *MockBankKeeperMockRecorder) MintCoins(cts, name, amt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MintCoins", reflect.TypeOf((*MockBankKeeper)(nil).MintCoins), cts, name, amt) +} + +// SendCoins mocks base method. +func (m *MockBankKeeper) SendCoins(ctx types.Context, fromAddr, toAddr types.AccAddress, amt types.Coins) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendCoins", ctx, fromAddr, toAddr, amt) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendCoins indicates an expected call of SendCoins. +func (mr *MockBankKeeperMockRecorder) SendCoins(ctx, fromAddr, toAddr, amt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendCoins", reflect.TypeOf((*MockBankKeeper)(nil).SendCoins), ctx, fromAddr, toAddr, amt) +} + +// SendCoinsFromAccountToModule mocks base method. +func (m *MockBankKeeper) SendCoinsFromAccountToModule(ctx types.Context, senderAddr types.AccAddress, recipientModule string, amt types.Coins) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendCoinsFromAccountToModule", ctx, senderAddr, recipientModule, amt) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendCoinsFromAccountToModule indicates an expected call of SendCoinsFromAccountToModule. +func (mr *MockBankKeeperMockRecorder) SendCoinsFromAccountToModule(ctx, senderAddr, recipientModule, amt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendCoinsFromAccountToModule", reflect.TypeOf((*MockBankKeeper)(nil).SendCoinsFromAccountToModule), ctx, senderAddr, recipientModule, amt) +} + +// SendCoinsFromModuleToAccount mocks base method. +func (m *MockBankKeeper) SendCoinsFromModuleToAccount(ctx types.Context, senderModule string, recipientAddr types.AccAddress, amt types.Coins) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendCoinsFromModuleToAccount", ctx, senderModule, recipientAddr, amt) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendCoinsFromModuleToAccount indicates an expected call of SendCoinsFromModuleToAccount. +func (mr *MockBankKeeperMockRecorder) SendCoinsFromModuleToAccount(ctx, senderModule, recipientAddr, amt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendCoinsFromModuleToAccount", reflect.TypeOf((*MockBankKeeper)(nil).SendCoinsFromModuleToAccount), ctx, senderModule, recipientAddr, amt) +} + // SendCoinsFromModuleToModule mocks base method. func (m *MockBankKeeper) SendCoinsFromModuleToModule(ctx types.Context, senderPool, recipientPool string, amt types.Coins) error { m.ctrl.T.Helper() @@ -696,6 +752,20 @@ func (mr *MockStakingHooksMockRecorder) BeforeDelegationSharesModified(ctx, delA return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BeforeDelegationSharesModified", reflect.TypeOf((*MockStakingHooks)(nil).BeforeDelegationSharesModified), ctx, delAddr, valAddr) } +// BeforeTokenizeShareRecordRemoved mocks base method. +func (m *MockStakingHooks) BeforeTokenizeShareRecordRemoved(ctx types.Context, recordID uint64) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BeforeTokenizeShareRecordRemoved", ctx, recordID) + ret0, _ := ret[0].(error) + return ret0 +} + +// BeforeTokenizeShareRecordRemoved indicates an expected call of BeforeTokenizeShareRecordRemoved. +func (mr *MockStakingHooksMockRecorder) BeforeTokenizeShareRecordRemoved(ctx, recordID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BeforeTokenizeShareRecordRemoved", reflect.TypeOf((*MockStakingHooks)(nil).BeforeTokenizeShareRecordRemoved), ctx, recordID) +} + // BeforeValidatorModified mocks base method. func (m *MockStakingHooks) BeforeValidatorModified(ctx types.Context, valAddr types.ValAddress) error { m.ctrl.T.Helper() diff --git a/x/staking/types/codec.go b/x/staking/types/codec.go index 11c9aec9e860..9a8813bde2ac 100644 --- a/x/staking/types/codec.go +++ b/x/staking/types/codec.go @@ -23,6 +23,13 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { legacy.RegisterAminoMsg(cdc, &MsgBeginRedelegate{}, "cosmos-sdk/MsgBeginRedelegate") legacy.RegisterAminoMsg(cdc, &MsgCancelUnbondingDelegation{}, "cosmos-sdk/MsgCancelUnbondingDelegation") legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "cosmos-sdk/x/staking/MsgUpdateParams") + legacy.RegisterAminoMsg(cdc, &MsgValidatorBond{}, "cosmos-sdk/MsgValidatorBond") + legacy.RegisterAminoMsg(cdc, &MsgUnbondValidator{}, "cosmos-sdk/MsgUnbondValidator") + legacy.RegisterAminoMsg(cdc, &MsgTokenizeShares{}, "cosmos-sdk/MsgTokenizeShares") + legacy.RegisterAminoMsg(cdc, &MsgRedeemTokensForShares{}, "cosmos-sdk/MsgRedeemTokensForShares") + legacy.RegisterAminoMsg(cdc, &MsgTransferTokenizeShareRecord{}, "cosmos-sdk/MsgTransferTokenizeRecord") + legacy.RegisterAminoMsg(cdc, &MsgDisableTokenizeShares{}, "cosmos-sdk/MsgDisableTokenizeShares") + legacy.RegisterAminoMsg(cdc, &MsgEnableTokenizeShares{}, "cosmos-sdk/MsgEnableTokenizeShares") cdc.RegisterInterface((*isStakeAuthorization_Validators)(nil), nil) cdc.RegisterConcrete(&StakeAuthorization_AllowList{}, "cosmos-sdk/StakeAuthorization/AllowList", nil) @@ -41,6 +48,13 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgBeginRedelegate{}, &MsgCancelUnbondingDelegation{}, &MsgUpdateParams{}, + &MsgValidatorBond{}, + &MsgUnbondValidator{}, + &MsgTokenizeShares{}, + &MsgRedeemTokensForShares{}, + &MsgTransferTokenizeShareRecord{}, + &MsgDisableTokenizeShares{}, + &MsgEnableTokenizeShares{}, ) registry.RegisterImplementations( (*authz.Authorization)(nil), diff --git a/x/staking/types/delegation.go b/x/staking/types/delegation.go index 1242e1c46182..513eb6974ab5 100644 --- a/x/staking/types/delegation.go +++ b/x/staking/types/delegation.go @@ -351,11 +351,16 @@ func (d Redelegations) String() (out string) { // NewDelegationResp creates a new DelegationResponse instance func NewDelegationResp( - delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress, shares sdk.Dec, balance sdk.Coin, + delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress, shares sdk.Dec, validatorBond bool, balance sdk.Coin, ) DelegationResponse { return DelegationResponse{ - Delegation: NewDelegation(delegatorAddr, validatorAddr, shares), - Balance: balance, + Delegation: Delegation{ + DelegatorAddress: delegatorAddr.String(), + ValidatorAddress: validatorAddr.String(), + Shares: shares, + ValidatorBond: validatorBond, + }, + Balance: balance, } } diff --git a/x/staking/types/delegation_test.go b/x/staking/types/delegation_test.go index ae1519baa347..7dd7cd202dd7 100644 --- a/x/staking/types/delegation_test.go +++ b/x/staking/types/delegation_test.go @@ -82,9 +82,9 @@ func TestRedelegationString(t *testing.T) { func TestDelegationResponses(t *testing.T) { cdc := codec.NewLegacyAmino() - dr1 := types.NewDelegationResp(sdk.AccAddress(valAddr1), valAddr2, math.LegacyNewDec(5), + dr1 := types.NewDelegationResp(sdk.AccAddress(valAddr1), valAddr2, math.LegacyNewDec(5), false, sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(5))) - dr2 := types.NewDelegationResp(sdk.AccAddress(valAddr1), valAddr3, math.LegacyNewDec(5), + dr2 := types.NewDelegationResp(sdk.AccAddress(valAddr1), valAddr3, math.LegacyNewDec(5), false, sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(5))) drs := types.DelegationResponses{dr1, dr2} diff --git a/x/staking/types/events.go b/x/staking/types/events.go index 5195955feae7..431535399094 100644 --- a/x/staking/types/events.go +++ b/x/staking/types/events.go @@ -2,14 +2,18 @@ package types // staking module event types const ( - EventTypeCompleteUnbonding = "complete_unbonding" - EventTypeCompleteRedelegation = "complete_redelegation" - EventTypeCreateValidator = "create_validator" - EventTypeEditValidator = "edit_validator" - EventTypeDelegate = "delegate" - EventTypeUnbond = "unbond" - EventTypeCancelUnbondingDelegation = "cancel_unbonding_delegation" - EventTypeRedelegate = "redelegate" + EventTypeCompleteUnbonding = "complete_unbonding" + EventTypeCompleteRedelegation = "complete_redelegation" + EventTypeCreateValidator = "create_validator" + EventTypeEditValidator = "edit_validator" + EventTypeDelegate = "delegate" + EventTypeUnbond = "unbond" + EventTypeCancelUnbondingDelegation = "cancel_unbonding_delegation" + EventTypeRedelegate = "redelegate" + EventTypeTokenizeShares = "tokenize_shares" + EventTypeRedeemShares = "redeem_shares" + EventTypeTransferTokenizeShareRecord = "transfer_tokenize_share_record" + EventTypeValidatorBondDelegation = "validator_bond_delegation" AttributeKeyValidator = "validator" AttributeKeyCommissionRate = "commission_rate" @@ -19,4 +23,7 @@ const ( AttributeKeyCreationHeight = "creation_height" AttributeKeyCompletionTime = "completion_time" AttributeKeyNewShares = "new_shares" + AttributeKeyShareOwner = "share_owner" + AttributeKeyShareRecordID = "share_record_id" + AttributeKeyAmount = "amount" ) diff --git a/x/staking/types/expected_keepers.go b/x/staking/types/expected_keepers.go index 05672ee256da..4a465895f1f7 100644 --- a/x/staking/types/expected_keepers.go +++ b/x/staking/types/expected_keepers.go @@ -34,10 +34,14 @@ type BankKeeper interface { GetSupply(ctx sdk.Context, denom string) sdk.Coin + SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error SendCoinsFromModuleToModule(ctx sdk.Context, senderPool, recipientPool string, amt sdk.Coins) error + SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error UndelegateCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error DelegateCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + MintCoins(cts sdk.Context, name string, amt sdk.Coins) error BurnCoins(ctx sdk.Context, name string, amt sdk.Coins) error } @@ -105,6 +109,7 @@ type StakingHooks interface { AfterDelegationModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, fraction sdk.Dec) error AfterUnbondingInitiated(ctx sdk.Context, id uint64) error + BeforeTokenizeShareRecordRemoved(ctx sdk.Context, recordID uint64) error // Must be called when tokenize share record is deleted } // StakingHooksWrapper is a wrapper for modules to inject StakingHooks using depinject. diff --git a/x/staking/types/exported.go b/x/staking/types/exported.go index bf83ab09a76a..b9963ec61ad2 100644 --- a/x/staking/types/exported.go +++ b/x/staking/types/exported.go @@ -33,6 +33,7 @@ type ValidatorI interface { GetCommission() math.LegacyDec // validator commission rate GetMinSelfDelegation() math.Int // validator minimum self delegation GetDelegatorShares() math.LegacyDec // total outstanding delegator shares + GetLiquidShares() sdk.Dec // total shares earmarked from liquid staking TokensFromShares(sdk.Dec) math.LegacyDec // token worth of provided delegator shares TokensFromSharesTruncated(sdk.Dec) math.LegacyDec // token worth of provided delegator shares, truncated TokensFromSharesRoundUp(sdk.Dec) math.LegacyDec // token worth of provided delegator shares, rounded up diff --git a/x/staking/types/hooks.go b/x/staking/types/hooks.go index 6fad1df77d6b..cee47afbaad3 100644 --- a/x/staking/types/hooks.go +++ b/x/staking/types/hooks.go @@ -112,3 +112,12 @@ func (h MultiStakingHooks) AfterUnbondingInitiated(ctx sdk.Context, id uint64) e } return nil } + +func (h MultiStakingHooks) BeforeTokenizeShareRecordRemoved(ctx sdk.Context, recordID uint64) error { + for i := range h { + if err := h[i].BeforeTokenizeShareRecordRemoved(ctx, recordID); err != nil { + return err + } + } + return nil +} diff --git a/x/staking/types/msg.go b/x/staking/types/msg.go index 553f49bf8570..64c08233db64 100644 --- a/x/staking/types/msg.go +++ b/x/staking/types/msg.go @@ -9,14 +9,23 @@ import ( ) // staking message types +// +//nolint:gosec // these are not hard coded credentials const ( - TypeMsgUndelegate = "begin_unbonding" - TypeMsgCancelUnbondingDelegation = "cancel_unbond" - TypeMsgEditValidator = "edit_validator" - TypeMsgCreateValidator = "create_validator" - TypeMsgDelegate = "delegate" - TypeMsgBeginRedelegate = "begin_redelegate" - TypeMsgUpdateParams = "update_params" + TypeMsgUndelegate = "begin_unbonding" + TypeMsgUnbondValidator = "unbond_validator" + TypeMsgCancelUnbondingDelegation = "cancel_unbond" + TypeMsgEditValidator = "edit_validator" + TypeMsgCreateValidator = "create_validator" + TypeMsgDelegate = "delegate" + TypeMsgBeginRedelegate = "begin_redelegate" + TypeMsgUpdateParams = "update_params" + TypeMsgTokenizeShares = "tokenize_shares" + TypeMsgRedeemTokensForShares = "redeem_tokens_for_shares" + TypeMsgTransferTokenizeShareRecord = "transfer_tokenize_share_record" + TypeMsgDisableTokenizeShares = "disable_tokenize_shares" + TypeMsgEnableTokenizeShares = "enable_tokenize_shares" + TypeMsgValidatorBond = "validator_bond" ) var ( @@ -26,9 +35,16 @@ var ( _ sdk.Msg = &MsgEditValidator{} _ sdk.Msg = &MsgDelegate{} _ sdk.Msg = &MsgUndelegate{} + _ sdk.Msg = &MsgUnbondValidator{} _ sdk.Msg = &MsgBeginRedelegate{} _ sdk.Msg = &MsgCancelUnbondingDelegation{} _ sdk.Msg = &MsgUpdateParams{} + _ sdk.Msg = &MsgTokenizeShares{} + _ sdk.Msg = &MsgRedeemTokensForShares{} + _ sdk.Msg = &MsgTransferTokenizeShareRecord{} + _ sdk.Msg = &MsgDisableTokenizeShares{} + _ sdk.Msg = &MsgEnableTokenizeShares{} + _ sdk.Msg = &MsgValidatorBond{} ) // NewMsgCreateValidator creates a new MsgCreateValidator instance. @@ -401,3 +417,309 @@ func (m *MsgUpdateParams) GetSigners() []sdk.AccAddress { addr, _ := sdk.AccAddressFromBech32(m.Authority) return []sdk.AccAddress{addr} } + +// NewMsgUnbondValidator creates a new MsgUnbondValidator instance. +// +//nolint:interfacer +func NewMsgUnbondValidator(valAddr sdk.ValAddress) *MsgUnbondValidator { + return &MsgUnbondValidator{ + ValidatorAddress: valAddr.String(), + } +} + +// Route implements the sdk.Msg interface. +func (msg MsgUnbondValidator) Route() string { return RouterKey } + +// Type implements the sdk.Msg interface. +func (msg MsgUnbondValidator) Type() string { return TypeMsgUnbondValidator } + +// GetSigners implements the sdk.Msg interface. +func (msg MsgUnbondValidator) GetSigners() []sdk.AccAddress { + valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + if err != nil { + panic(err) + } + return []sdk.AccAddress{valAddr.Bytes()} +} + +// GetSignBytes implements the sdk.Msg interface. +func (msg MsgUnbondValidator) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(&msg) + return sdk.MustSortJSON(bz) +} + +// ValidateBasic implements the sdk.Msg interface. +func (msg MsgUnbondValidator) ValidateBasic() error { + if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) + } + + return nil +} + +// NewMsgTokenizeShares creates a new MsgTokenizeShares instance. +// +//nolint:interfacer +func NewMsgTokenizeShares(delAddr sdk.AccAddress, valAddr sdk.ValAddress, amount sdk.Coin, owner sdk.AccAddress) *MsgTokenizeShares { + return &MsgTokenizeShares{ + DelegatorAddress: delAddr.String(), + ValidatorAddress: valAddr.String(), + Amount: amount, + TokenizedShareOwner: owner.String(), + } +} + +// Route implements the sdk.Msg interface. +func (msg MsgTokenizeShares) Route() string { return RouterKey } + +// Type implements the sdk.Msg interface. +func (msg MsgTokenizeShares) Type() string { return TypeMsgTokenizeShares } + +// GetSigners implements the sdk.Msg interface. +func (msg MsgTokenizeShares) GetSigners() []sdk.AccAddress { + delegator, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + panic(err) + } + return []sdk.AccAddress{delegator} +} + +// MsgTokenizeShares implements the sdk.Msg interface. +func (msg MsgTokenizeShares) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(&msg) + return sdk.MustSortJSON(bz) +} + +// ValidateBasic implements the sdk.Msg interface. +func (msg MsgTokenizeShares) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err) + } + if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) + } + if _, err := sdk.AccAddressFromBech32(msg.TokenizedShareOwner); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid tokenize share owner address: %s", err) + } + + if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() { + return sdkerrors.Wrap( + sdkerrors.ErrInvalidRequest, + "invalid shares amount", + ) + } + + return nil +} + +// NewMsgRedeemTokensForShares creates a new MsgRedeemTokensForShares instance. +// +//nolint:interfacer +func NewMsgRedeemTokensForShares(delAddr sdk.AccAddress, amount sdk.Coin) *MsgRedeemTokensForShares { + return &MsgRedeemTokensForShares{ + DelegatorAddress: delAddr.String(), + Amount: amount, + } +} + +// Route implements the sdk.Msg interface. +func (msg MsgRedeemTokensForShares) Route() string { return RouterKey } + +// Type implements the sdk.Msg interface. +func (msg MsgRedeemTokensForShares) Type() string { return TypeMsgRedeemTokensForShares } + +// GetSigners implements the sdk.Msg interface. +func (msg MsgRedeemTokensForShares) GetSigners() []sdk.AccAddress { + delegator, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + panic(err) + } + return []sdk.AccAddress{delegator} +} + +// GetSignBytes implements the sdk.Msg interface. +func (msg MsgRedeemTokensForShares) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(&msg) + return sdk.MustSortJSON(bz) +} + +// ValidateBasic implements the sdk.Msg interface. +func (msg MsgRedeemTokensForShares) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err) + } + + if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() { + return sdkerrors.Wrap( + sdkerrors.ErrInvalidRequest, + "invalid shares amount", + ) + } + + return nil +} + +// NewMsgTransferTokenizeShareRecord creates a new MsgTransferTokenizeShareRecord instance. +// +//nolint:interfacer +func NewMsgTransferTokenizeShareRecord(recordId uint64, sender, newOwner sdk.AccAddress) *MsgTransferTokenizeShareRecord { + return &MsgTransferTokenizeShareRecord{ + TokenizeShareRecordId: recordId, + Sender: sender.String(), + NewOwner: newOwner.String(), + } +} + +// Route implements the sdk.Msg interface. +func (msg MsgTransferTokenizeShareRecord) Route() string { return RouterKey } + +// Type implements the sdk.Msg interface. +func (msg MsgTransferTokenizeShareRecord) Type() string { return TypeMsgTransferTokenizeShareRecord } + +// GetSigners implements the sdk.Msg interface. +func (msg MsgTransferTokenizeShareRecord) GetSigners() []sdk.AccAddress { + sender, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + panic(err) + } + return []sdk.AccAddress{sender} +} + +// GetSignBytes implements the sdk.Msg interface. +func (msg MsgTransferTokenizeShareRecord) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(&msg) + return sdk.MustSortJSON(bz) +} + +// ValidateBasic implements the sdk.Msg interface. +func (msg MsgTransferTokenizeShareRecord) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid sender address: %s", err) + } + if _, err := sdk.AccAddressFromBech32(msg.NewOwner); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid new owner address: %s", err) + } + + return nil +} + +// NewMsgDisableTokenizeShares creates a new MsgDisableTokenizeShares instance. +// +//nolint:interfacer +func NewMsgDisableTokenizeShares(delAddr sdk.AccAddress) *MsgDisableTokenizeShares { + return &MsgDisableTokenizeShares{ + DelegatorAddress: delAddr.String(), + } +} + +// Route implements the sdk.Msg interface. +func (msg MsgDisableTokenizeShares) Route() string { return RouterKey } + +// Type implements the sdk.Msg interface. +func (msg MsgDisableTokenizeShares) Type() string { return TypeMsgDisableTokenizeShares } + +// GetSigners implements the sdk.Msg interface. +func (msg MsgDisableTokenizeShares) GetSigners() []sdk.AccAddress { + sender, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + panic(err) + } + return []sdk.AccAddress{sender} +} + +// GetSignBytes implements the sdk.Msg interface. +func (msg MsgDisableTokenizeShares) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(&msg) + return sdk.MustSortJSON(bz) +} + +// ValidateBasic implements the sdk.Msg interface. +func (msg MsgDisableTokenizeShares) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid sender address: %s", err) + } + + return nil +} + +// NewMsgEnableTokenizeShares creates a new MsgEnableTokenizeShares instance. +// +//nolint:interfacer +func NewMsgEnableTokenizeShares(delAddr sdk.AccAddress) *MsgEnableTokenizeShares { + return &MsgEnableTokenizeShares{ + DelegatorAddress: delAddr.String(), + } +} + +// Route implements the sdk.Msg interface. +func (msg MsgEnableTokenizeShares) Route() string { return RouterKey } + +// Type implements the sdk.Msg interface. +func (msg MsgEnableTokenizeShares) Type() string { return TypeMsgEnableTokenizeShares } + +// GetSigners implements the sdk.Msg interface. +func (msg MsgEnableTokenizeShares) GetSigners() []sdk.AccAddress { + sender, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + panic(err) + } + return []sdk.AccAddress{sender} +} + +// GetSignBytes implements the sdk.Msg interface. +func (msg MsgEnableTokenizeShares) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(&msg) + return sdk.MustSortJSON(bz) +} + +// ValidateBasic implements the sdk.Msg interface. +func (msg MsgEnableTokenizeShares) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid sender address: %s", err) + } + + return nil +} + +// NewMsgValidatorBond creates a new MsgValidatorBond instance. +// +//nolint:interfacer +func NewMsgValidatorBond(delAddr sdk.AccAddress, valAddr sdk.ValAddress) *MsgValidatorBond { + return &MsgValidatorBond{ + DelegatorAddress: delAddr.String(), + ValidatorAddress: valAddr.String(), + } +} + +// Route implements the sdk.Msg interface. +func (msg MsgValidatorBond) Route() string { return RouterKey } + +// Type implements the sdk.Msg interface. +func (msg MsgValidatorBond) Type() string { return TypeMsgValidatorBond } + +// GetSigners implements the sdk.Msg interface. +func (msg MsgValidatorBond) GetSigners() []sdk.AccAddress { + delegator, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + panic(err) + } + return []sdk.AccAddress{delegator} +} + +// GetSignBytes implements the sdk.Msg interface. +func (msg MsgValidatorBond) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(&msg) + return sdk.MustSortJSON(bz) +} + +// ValidateBasic implements the sdk.Msg interface. +func (msg MsgValidatorBond) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err) + } + if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) + } + + return nil +} diff --git a/x/staking/types/msg_test.go b/x/staking/types/msg_test.go index a32fd2d7905d..eaab8093046e 100644 --- a/x/staking/types/msg_test.go +++ b/x/staking/types/msg_test.go @@ -77,9 +77,6 @@ func TestMsgCreateValidator(t *testing.T) { {"empty pubkey", "a", "b", "c", "d", "e", commission1, math.OneInt(), valAddr1, emptyPubkey, coinPos, false}, {"empty bond", "a", "b", "c", "d", "e", commission2, math.OneInt(), valAddr1, pk1, coinZero, false}, {"nil bond", "a", "b", "c", "d", "e", commission2, math.OneInt(), valAddr1, pk1, sdk.Coin{}, false}, - {"zero min self delegation", "a", "b", "c", "d", "e", commission1, math.ZeroInt(), valAddr1, pk1, coinPos, false}, - {"negative min self delegation", "a", "b", "c", "d", "e", commission1, sdk.NewInt(-1), valAddr1, pk1, coinPos, false}, - {"delegation less than min self delegation", "a", "b", "c", "d", "e", commission1, coinPos.Amount.Add(math.OneInt()), valAddr1, pk1, coinPos, false}, } for _, tc := range tests { @@ -106,7 +103,6 @@ func TestMsgEditValidator(t *testing.T) { {"partial description", "", "", "c", "", "", valAddr1, true, math.OneInt()}, {"empty description", "", "", "", "", "", valAddr1, false, math.OneInt()}, {"empty address", "a", "b", "c", "d", "e", emptyAddr, false, math.OneInt()}, - {"nil int", "a", "b", "c", "d", "e", emptyAddr, false, math.Int{}}, } for _, tc := range tests { diff --git a/x/staking/types/params.go b/x/staking/types/params.go index f4e24e3f1767..330132058f48 100644 --- a/x/staking/types/params.go +++ b/x/staking/types/params.go @@ -32,18 +32,43 @@ const ( DefaultHistoricalEntries uint32 = 10000 ) -// DefaultMinCommissionRate is set to 0% -var DefaultMinCommissionRate = math.LegacyZeroDec() +var ( + // DefaultMinCommissionRate is set to 0% + DefaultMinCommissionRate = math.LegacyZeroDec() + + // ValidatorBondFactor of -1 indicates that it's disabled + ValidatorBondCapDisabled = sdk.NewDecFromInt(sdk.NewInt(-1)) + + // DefaultValidatorBondFactor is set to -1 (disabled) + DefaultValidatorBondFactor = ValidatorBondCapDisabled + // DefaultGlobalLiquidStakingCap is set to 100% + DefaultGlobalLiquidStakingCap = sdk.OneDec() + // DefaultValidatorLiquidStakingCap is set to 100% + DefaultValidatorLiquidStakingCap = sdk.OneDec() +) // NewParams creates a new Params instance -func NewParams(unbondingTime time.Duration, maxValidators, maxEntries, historicalEntries uint32, bondDenom string, minCommissionRate sdk.Dec) Params { +func NewParams(unbondingTime time.Duration, + maxValidators, + maxEntries, + historicalEntries uint32, + bondDenom string, + minCommissionRate sdk.Dec, + validatorBondFactor sdk.Dec, + globalLiquidStakingCap sdk.Dec, + validatorLiquidStakingCap sdk.Dec, +) Params { return Params{ UnbondingTime: unbondingTime, MaxValidators: maxValidators, MaxEntries: maxEntries, HistoricalEntries: historicalEntries, - BondDenom: bondDenom, - MinCommissionRate: minCommissionRate, + + BondDenom: bondDenom, + MinCommissionRate: minCommissionRate, + ValidatorBondFactor: validatorBondFactor, + GlobalLiquidStakingCap: globalLiquidStakingCap, + ValidatorLiquidStakingCap: validatorLiquidStakingCap, } } @@ -56,6 +81,9 @@ func DefaultParams() Params { DefaultHistoricalEntries, sdk.DefaultBondDenom, DefaultMinCommissionRate, + DefaultValidatorBondFactor, + DefaultGlobalLiquidStakingCap, + DefaultValidatorLiquidStakingCap, ) } @@ -111,6 +139,18 @@ func (p Params) Validate() error { return err } + if err := validateValidatorBondFactor(p.ValidatorBondFactor); err != nil { + return err + } + + if err := validateGlobalLiquidStakingCap(p.GlobalLiquidStakingCap); err != nil { + return err + } + + if err := validateValidatorLiquidStakingCap(p.ValidatorLiquidStakingCap); err != nil { + return err + } + return nil } @@ -210,3 +250,48 @@ func validateMinCommissionRate(i interface{}) error { return nil } + +func validateValidatorBondFactor(i interface{}) error { + v, ok := i.(sdk.Dec) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v.IsNegative() && !v.Equal(sdk.NewDec(-1)) { + return fmt.Errorf("invalid validator bond factor: %s", v) + } + + return nil +} + +func validateGlobalLiquidStakingCap(i interface{}) error { + v, ok := i.(sdk.Dec) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v.IsNegative() { + return fmt.Errorf("global liquid staking cap cannot be negative: %s", v) + } + if v.GT(sdk.OneDec()) { + return fmt.Errorf("global liquid staking cap cannot be greater than 100%%: %s", v) + } + + return nil +} + +func validateValidatorLiquidStakingCap(i interface{}) error { + v, ok := i.(sdk.Dec) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v.IsNegative() { + return fmt.Errorf("validator liquid staking cap cannot be negative: %s", v) + } + if v.GT(sdk.OneDec()) { + return fmt.Errorf("validator liquid staking cap cannot be greater than 100%%: %s", v) + } + + return nil +} diff --git a/x/staking/types/params_legacy.go b/x/staking/types/params_legacy.go index df474c02ffa1..95487c9408a4 100644 --- a/x/staking/types/params_legacy.go +++ b/x/staking/types/params_legacy.go @@ -3,12 +3,15 @@ package types import paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" var ( - KeyUnbondingTime = []byte("UnbondingTime") - KeyMaxValidators = []byte("MaxValidators") - KeyMaxEntries = []byte("MaxEntries") - KeyBondDenom = []byte("BondDenom") - KeyHistoricalEntries = []byte("HistoricalEntries") - KeyMinCommissionRate = []byte("MinCommissionRate") + KeyUnbondingTime = []byte("UnbondingTime") + KeyMaxValidators = []byte("MaxValidators") + KeyMaxEntries = []byte("MaxEntries") + KeyBondDenom = []byte("BondDenom") + KeyHistoricalEntries = []byte("HistoricalEntries") + KeyMinCommissionRate = []byte("MinCommissionRate") + KeyValidatorBondFactor = []byte("ValidatorBondFactor") + KeyGlobalLiquidStakingCap = []byte("GlobalLiquidStakingCap") + KeyValidatorLiquidStakingCap = []byte("ValidatorLiquidStakingCap") ) var _ paramtypes.ParamSet = (*Params)(nil) @@ -29,5 +32,8 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { paramtypes.NewParamSetPair(KeyHistoricalEntries, &p.HistoricalEntries, validateHistoricalEntries), paramtypes.NewParamSetPair(KeyBondDenom, &p.BondDenom, validateBondDenom), paramtypes.NewParamSetPair(KeyMinCommissionRate, &p.MinCommissionRate, validateMinCommissionRate), + paramtypes.NewParamSetPair(KeyValidatorBondFactor, &p.ValidatorBondFactor, validateValidatorBondFactor), + paramtypes.NewParamSetPair(KeyGlobalLiquidStakingCap, &p.GlobalLiquidStakingCap, validateGlobalLiquidStakingCap), + paramtypes.NewParamSetPair(KeyValidatorLiquidStakingCap, &p.ValidatorLiquidStakingCap, validateValidatorLiquidStakingCap), } } diff --git a/x/staking/types/validator.go b/x/staking/types/validator.go index 5c5ec4c1d3e5..f8467933380b 100644 --- a/x/staking/types/validator.go +++ b/x/staking/types/validator.go @@ -58,8 +58,9 @@ func NewValidator(operator sdk.ValAddress, pubKey cryptotypes.PubKey, descriptio UnbondingHeight: int64(0), UnbondingTime: time.Unix(0, 0).UTC(), Commission: NewCommission(math.LegacyZeroDec(), math.LegacyZeroDec(), math.LegacyZeroDec()), - MinSelfDelegation: math.OneInt(), UnbondingOnHoldRefCount: 0, + ValidatorBondShares: sdk.ZeroDec(), + LiquidShares: sdk.ZeroDec(), }, nil } @@ -454,7 +455,6 @@ func (v *Validator) MinEqual(other *Validator) bool { v.Description.Equal(other.Description) && v.Commission.Equal(other.Commission) && v.Jailed == other.Jailed && - v.MinSelfDelegation.Equal(other.MinSelfDelegation) && v.ConsensusPubkey.Equal(other.ConsensusPubkey) } @@ -520,8 +520,9 @@ func (v Validator) GetConsensusPower(r math.Int) int64 { return v.ConsensusPower(r) } func (v Validator) GetCommission() math.LegacyDec { return v.Commission.Rate } -func (v Validator) GetMinSelfDelegation() math.Int { return v.MinSelfDelegation } +func (v Validator) GetMinSelfDelegation() math.Int { return sdk.ZeroInt() } func (v Validator) GetDelegatorShares() math.LegacyDec { return v.DelegatorShares } +func (v Validator) GetLiquidShares() sdk.Dec { return v.LiquidShares } // UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces func (v Validator) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { From b50f5a74b864396c0dddfd2e0954d6116972ac92 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Fri, 8 Dec 2023 10:45:23 +0100 Subject: [PATCH 05/19] chore: refactor staking integration, sims and e2e tests (#8) * set min_self_delegation to 0 in TestAminoCodecFullDecodeAndEncode * add WithdrawTokenizeShareRecordReward and WithdrawAllTokenizeShareRecordReward * add methods to distribution/keeper * register distribution msgs * add SimulateMsgWithdrawTokenizeShareRecordReward * LSM distribution queries * LSM distr cli * add BeforeTokenizeShareRecordRemoved hook * add signers to proto distribution * set signers correctly * minimum refactor to build * tag LSM test to be refactored * Merge with feat/lsm/v0.47.x tag LSM tests to be refactored Fix nits * nit * comments more failing tests * make protos * Update x/staking/keeper/msg_server.go Co-authored-by: Marius Poke * Update x/staking/keeper/msg_server.go Co-authored-by: Marius Poke * add go.work and fix silent errors * address comments * refactor staking msg_server_tests.go - distrib hooks cause them to fail * make integration tests pass * clean up * clean up * refactor last integration * nits * revert deterministic tests change * tests: update simulation randfees calc (#9) * address min self delegation depreciation in tests * refactor e2e tests and other nits * tests: appease linter in randfees --------- Co-authored-by: mpoke Co-authored-by: MSalopek --- Makefile | 2 +- snapshots/store.go | 2 +- tests/e2e/staking/suite.go | 9 +- .../integration/staking/keeper/common_test.go | 5 +- .../staking/keeper/delegation_test.go | 170 + .../staking/keeper/determinstic_test.go | 66 +- .../staking/keeper/genesis_test.go | 95 +- .../staking/keeper/liquid_stake_test.go | 274 ++ .../staking/keeper/msg_server_test.go | 2722 +++++++++-------- types/simulation/account.go | 16 +- x/staking/keeper/delegation.go | 10 - x/staking/keeper/delegation_test.go | 191 +- x/staking/keeper/liquid_stake.go | 29 +- x/staking/keeper/liquid_stake_test.go | 1954 +++++------- x/staking/keeper/msg_server.go | 5 +- x/staking/keeper/params.go | 1 - .../keeper/tokenize_share_record_test.go | 101 +- x/staking/migrations/v3/json_test.go | 17 +- x/staking/simulation/genesis.go | 7 +- x/staking/simulation/operations.go | 5 +- x/staking/types/validator.go | 1 + 21 files changed, 2799 insertions(+), 2883 deletions(-) create mode 100644 tests/integration/staking/keeper/liquid_stake_test.go diff --git a/Makefile b/Makefile index d9313246778c..be69109df5a6 100644 --- a/Makefile +++ b/Makefile @@ -347,7 +347,7 @@ benchmark: ############################################################################### golangci_lint_cmd=golangci-lint -golangci_version=v1.50.1 +golangci_version=v1.55.2 lint: @echo "--> Running linter" diff --git a/snapshots/store.go b/snapshots/store.go index 1087c826fab2..3ceafa2bbe03 100644 --- a/snapshots/store.go +++ b/snapshots/store.go @@ -260,7 +260,7 @@ func (s *Store) Save( snapshotHasher := sha256.New() chunkHasher := sha256.New() for chunkBody := range chunks { - defer chunkBody.Close() //nolint:staticcheck + defer chunkBody.Close() dir := s.pathSnapshot(height, format) err = os.MkdirAll(dir, 0o755) if err != nil { diff --git a/tests/e2e/staking/suite.go b/tests/e2e/staking/suite.go index dff54520f9cf..cee0eac0b7b6 100644 --- a/tests/e2e/staking/suite.go +++ b/tests/e2e/staking/suite.go @@ -914,16 +914,19 @@ func (s *E2ETestSuite) TestGetCmdQueryParams() { "with text output", []string{fmt.Sprintf("--%s=text", flags.FlagOutput)}, `bond_denom: stake +global_liquid_staking_cap: "1.000000000000000000" historical_entries: 10000 max_entries: 7 max_validators: 100 min_commission_rate: "0.000000000000000000" -unbonding_time: 1814400s`, +unbonding_time: 1814400s +validator_bond_factor: "-1.000000000000000000" +validator_liquid_staking_cap: "1.000000000000000000"`, }, { "with json output", []string{fmt.Sprintf("--%s=json", flags.FlagOutput)}, - `{"unbonding_time":"1814400s","max_validators":100,"max_entries":7,"historical_entries":10000,"bond_denom":"stake","min_commission_rate":"0.000000000000000000"}`, + `{"unbonding_time":"1814400s","max_validators":100,"max_entries":7,"historical_entries":10000,"bond_denom":"stake","min_commission_rate":"0.000000000000000000","validator_bond_factor":"-1.000000000000000000","global_liquid_staking_cap":"1.000000000000000000","validator_liquid_staking_cap":"1.000000000000000000"}`, }, } for _, tc := range testCases { @@ -1224,7 +1227,7 @@ func (s *E2ETestSuite) TestNewRedelegateCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, 31, &sdk.TxResponse{}, + false, 3, &sdk.TxResponse{}, }, { "valid transaction of delegate", diff --git a/tests/integration/staking/keeper/common_test.go b/tests/integration/staking/keeper/common_test.go index f6169b9d44c1..d882a5a666c6 100644 --- a/tests/integration/staking/keeper/common_test.go +++ b/tests/integration/staking/keeper/common_test.go @@ -7,6 +7,7 @@ import ( tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/stretchr/testify/require" + "cosmossdk.io/math" "cosmossdk.io/simapp" "github.com/cosmos/cosmos-sdk/codec" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" @@ -89,8 +90,8 @@ func createValidators(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers return addrs, valAddrs, vals } -func delegateCoinsFromAccount(ctx sdk.Context, app *simapp.SimApp, addr sdk.AccAddress, amount sdk.Int, val types.Validator) error { - _, err := app.StakingKeeper.Delegate(ctx, addr, amount, types.Unbonded, val, true) +func delegateCoinsFromAccount(ctx sdk.Context, sk keeper.Keeper, addr sdk.AccAddress, amount math.Int, val types.ValidatorI) error { + _, err := sk.Delegate(ctx, addr, amount, types.Unbonded, val.(types.Validator), true) return err } diff --git a/tests/integration/staking/keeper/delegation_test.go b/tests/integration/staking/keeper/delegation_test.go index 384e949149f1..0b0ed641dcb1 100644 --- a/tests/integration/staking/keeper/delegation_test.go +++ b/tests/integration/staking/keeper/delegation_test.go @@ -96,3 +96,173 @@ func TestUnbondingDelegationsMaxEntries(t *testing.T) { require.True(math.IntEq(t, newBonded, oldBonded.SubRaw(1))) require.True(math.IntEq(t, newNotBonded, oldNotBonded.AddRaw(1))) } + +func TestValidatorBondUndelegate(t *testing.T) { + _, app, ctx := createTestInput(t) + + addrDels := simtestutil.AddTestAddrs(app.BankKeeper, app.StakingKeeper, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) + addrVals := simtestutil.ConvertAddrsToValAddrs(addrDels) + + startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) + + bondDenom := app.StakingKeeper.BondDenom(ctx) + notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx) + + require.NoError(t, banktestutil.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens)))) + app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) + + // create a validator and a delegator to that validator + validator := testutil.NewValidator(t, addrVals[0], PKs[0]) + validator.Status = types.Bonded + app.StakingKeeper.SetValidator(ctx, validator) + + // set validator bond factor + params := app.StakingKeeper.GetParams(ctx) + params.ValidatorBondFactor = sdk.NewDec(1) + app.StakingKeeper.SetParams(ctx, params) + + // convert to validator self-bond + msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + + validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) + err := delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[0], startTokens, validator) + require.NoError(t, err) + _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ + DelegatorAddress: addrDels[0].String(), + ValidatorAddress: addrVals[0].String(), + }) + require.NoError(t, err) + + // tokenize share for 2nd account delegation + validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) + err = delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[1], startTokens, validator) + require.NoError(t, err) + tokenizeShareResp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ + DelegatorAddress: addrDels[1].String(), + ValidatorAddress: addrVals[0].String(), + Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), + TokenizedShareOwner: addrDels[0].String(), + }) + require.NoError(t, err) + + // try undelegating + _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{ + DelegatorAddress: addrDels[0].String(), + ValidatorAddress: addrVals[0].String(), + Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), + }) + require.Error(t, err) + + // redeem full amount on 2nd account and try undelegation + validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) + err = delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[1], startTokens, validator) + require.NoError(t, err) + _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ + DelegatorAddress: addrDels[1].String(), + Amount: tokenizeShareResp.Amount, + }) + require.NoError(t, err) + + // try undelegating + _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{ + DelegatorAddress: addrDels[0].String(), + ValidatorAddress: addrVals[0].String(), + Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), + }) + require.NoError(t, err) + + validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) + require.Equal(t, validator.ValidatorBondShares, sdk.ZeroDec()) +} + +func TestValidatorBondRedelegate(t *testing.T) { + _, app, ctx := createTestInput(t) + + addrDels := simtestutil.AddTestAddrs(app.BankKeeper, app.StakingKeeper, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) + addrVals := simtestutil.ConvertAddrsToValAddrs(addrDels) + + startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) + + bondDenom := app.StakingKeeper.BondDenom(ctx) + notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx) + + startPoolToken := sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens.Mul(sdk.NewInt(2)))) + require.NoError(t, banktestutil.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), startPoolToken)) + app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) + + // create a validator and a delegator to that validator + validator := testutil.NewValidator(t, addrVals[0], PKs[0]) + validator.Status = types.Bonded + app.StakingKeeper.SetValidator(ctx, validator) + validator2 := testutil.NewValidator(t, addrVals[1], PKs[1]) + validator.Status = types.Bonded + app.StakingKeeper.SetValidator(ctx, validator2) + + // set validator bond factor + params := app.StakingKeeper.GetParams(ctx) + params.ValidatorBondFactor = sdk.NewDec(1) + app.StakingKeeper.SetParams(ctx, params) + + // set total liquid stake + app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, sdk.NewInt(100)) + + // delegate to each validator + validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) + err := delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[0], startTokens, validator) + require.NoError(t, err) + + validator2, _ = app.StakingKeeper.GetValidator(ctx, addrVals[1]) + err = delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[1], startTokens, validator2) + require.NoError(t, err) + + // convert to validator self-bond + msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ + DelegatorAddress: addrDels[0].String(), + ValidatorAddress: addrVals[0].String(), + }) + require.NoError(t, err) + + // tokenize share for 2nd account delegation + validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) + err = delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[1], startTokens, validator) + require.NoError(t, err) + tokenizeShareResp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ + DelegatorAddress: addrDels[1].String(), + ValidatorAddress: addrVals[0].String(), + Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), + TokenizedShareOwner: addrDels[0].String(), + }) + require.NoError(t, err) + + // try undelegating + _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ + DelegatorAddress: addrDels[0].String(), + ValidatorSrcAddress: addrVals[0].String(), + ValidatorDstAddress: addrVals[1].String(), + Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), + }) + require.Error(t, err) + + // redeem full amount on 2nd account and try undelegation + validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) + err = delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[1], startTokens, validator) + require.NoError(t, err) + _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ + DelegatorAddress: addrDels[1].String(), + Amount: tokenizeShareResp.Amount, + }) + require.NoError(t, err) + + // try undelegating + _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ + DelegatorAddress: addrDels[0].String(), + ValidatorSrcAddress: addrVals[0].String(), + ValidatorDstAddress: addrVals[1].String(), + Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), + }) + require.NoError(t, err) + + validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) + require.Equal(t, validator.ValidatorBondShares, sdk.ZeroDec()) +} diff --git a/tests/integration/staking/keeper/determinstic_test.go b/tests/integration/staking/keeper/determinstic_test.go index eefb8c7ec819..ffa5a675f43f 100644 --- a/tests/integration/staking/keeper/determinstic_test.go +++ b/tests/integration/staking/keeper/determinstic_test.go @@ -60,7 +60,6 @@ func (s *DeterministicTestSuite) SetupTest() { ) s.Require().NoError(err) - // s.ctx = app.BaseApp.NewContext(false, tmproto.Header{Height: 1, Time: time.Now()}).WithGasMeter(sdk.NewInfiniteGasMeter()) s.ctx = app.BaseApp.NewContext(false, tmproto.Header{}) queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, interfaceRegistry) @@ -258,7 +257,8 @@ func (suite *DeterministicTestSuite) TestGRPCValidator() { ValidatorAddr: val.OperatorAddress, } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Validator, 1915, false) + // NOTE: gas consumption delta changed from 1915 to 1933 + testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Validator, 1933, false) } func (suite *DeterministicTestSuite) TestGRPCValidators() { @@ -281,7 +281,8 @@ func (suite *DeterministicTestSuite) TestGRPCValidators() { suite.getStaticValidator() suite.getStaticValidator2() - testdata.DeterministicIterations(suite.ctx, suite.Require(), &stakingtypes.QueryValidatorsRequest{}, suite.queryClient.Validators, 3525, false) + // NOTE: gas consumption delta changed from 3525 to 3597 + testdata.DeterministicIterations(suite.ctx, suite.Require(), &stakingtypes.QueryValidatorsRequest{}, suite.queryClient.Validators, 3597, false) } func (suite *DeterministicTestSuite) TestGRPCValidatorDelegations() { @@ -317,7 +318,8 @@ func (suite *DeterministicTestSuite) TestGRPCValidatorDelegations() { ValidatorAddr: validator.OperatorAddress, } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.ValidatorDelegations, 11985, false) + // NOTE: gas consumption delta changed from 11985 to 12615 + testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.ValidatorDelegations, 12615, false) } func (suite *DeterministicTestSuite) TestGRPCValidatorUnbondingDelegations() { @@ -390,7 +392,8 @@ func (suite *DeterministicTestSuite) TestGRPCDelegation() { DelegatorAddr: delegator1, } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Delegation, 4635, false) + // NOTE: gas consumption delta changed from 4635 to 4845 + testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Delegation, 4845, false) } func (suite *DeterministicTestSuite) TestGRPCUnbondingDelegation() { @@ -457,7 +460,8 @@ func (suite *DeterministicTestSuite) TestGRPCDelegatorDelegations() { DelegatorAddr: delegator1, } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DelegatorDelegations, 4238, false) + // NOTE: gas consumption delta changed from 4238 to 4448 + testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DelegatorDelegations, 4448, false) } func (suite *DeterministicTestSuite) TestGRPCDelegatorValidator() { @@ -488,7 +492,8 @@ func (suite *DeterministicTestSuite) TestGRPCDelegatorValidator() { ValidatorAddr: validator.OperatorAddress, } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DelegatorValidator, 3563, false) + // NOTE: gas consumption delta changed from 3563 to 3581 + testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DelegatorValidator, 3581, false) } func (suite *DeterministicTestSuite) TestGRPCDelegatorUnbondingDelegations() { @@ -579,7 +584,8 @@ func (suite *DeterministicTestSuite) TestGRPCHistoricalInfo() { Height: height, } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.HistoricalInfo, 1930, false) + // NOTE: gas consumption delta changed from 1930 to 1948 + testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.HistoricalInfo, 1948, false) } func (suite *DeterministicTestSuite) TestGRPCDelegatorValidators() { @@ -609,7 +615,9 @@ func (suite *DeterministicTestSuite) TestGRPCDelegatorValidators() { suite.Require().NoError(err) req := &stakingtypes.QueryDelegatorValidatorsRequest{DelegatorAddr: delegator1} - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DelegatorValidators, 3166, false) + + // NOTE: gas consumption delta changed from 3166 to 3184 + testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DelegatorValidators, 3184, false) } func (suite *DeterministicTestSuite) TestGRPCPool() { @@ -621,7 +629,9 @@ func (suite *DeterministicTestSuite) TestGRPCPool() { suite.SetupTest() // reset suite.getStaticValidator() - testdata.DeterministicIterations(suite.ctx, suite.Require(), &stakingtypes.QueryPoolRequest{}, suite.queryClient.Pool, 6185, false) + + // NOTE: gas consumption delta changed from 6185 to 6377 + testdata.DeterministicIterations(suite.ctx, suite.Require(), &stakingtypes.QueryPoolRequest{}, suite.queryClient.Pool, 6377, false) } func (suite *DeterministicTestSuite) TestGRPCRedelegations() { @@ -683,18 +693,22 @@ func (suite *DeterministicTestSuite) TestGRPCRedelegations() { DstValidatorAddr: validator2, } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Redelegations, 3920, false) + // NOTE: gas consumption delta changed from 3920 to 3938 + testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Redelegations, 3938, false) } func (suite *DeterministicTestSuite) TestGRPCParams() { rapid.Check(suite.T(), func(t *rapid.T) { params := stakingtypes.Params{ - BondDenom: rapid.StringMatching(sdk.DefaultCoinDenomRegex()).Draw(t, "bond-denom"), - UnbondingTime: durationGenerator().Draw(t, "duration"), - MaxValidators: rapid.Uint32Min(1).Draw(t, "max-validators"), - MaxEntries: rapid.Uint32Min(1).Draw(t, "max-entries"), - HistoricalEntries: rapid.Uint32Min(1).Draw(t, "historical-entries"), - MinCommissionRate: sdk.NewDecWithPrec(rapid.Int64Range(0, 100).Draw(t, "commission"), 2), + BondDenom: rapid.StringMatching(sdk.DefaultCoinDenomRegex()).Draw(t, "bond-denom"), + UnbondingTime: durationGenerator().Draw(t, "duration"), + MaxValidators: rapid.Uint32Min(1).Draw(t, "max-validators"), + MaxEntries: rapid.Uint32Min(1).Draw(t, "max-entries"), + HistoricalEntries: rapid.Uint32Min(1).Draw(t, "historical-entries"), + MinCommissionRate: sdk.NewDecWithPrec(rapid.Int64Range(0, 100).Draw(t, "commission"), 2), + ValidatorBondFactor: sdk.NewDecWithPrec(rapid.Int64Range(0, 100).Draw(t, "bond-factor"), 2), + GlobalLiquidStakingCap: sdk.NewDecWithPrec(rapid.Int64Range(0, 100).Draw(t, "global-liquid-staking-cap"), 2), + ValidatorLiquidStakingCap: sdk.NewDecWithPrec(rapid.Int64Range(0, 100).Draw(t, "validator-liquid-staking-cap"), 2), } err := suite.stakingKeeper.SetParams(suite.ctx, params) @@ -704,16 +718,20 @@ func (suite *DeterministicTestSuite) TestGRPCParams() { }) params := stakingtypes.Params{ - BondDenom: "denom", - UnbondingTime: time.Hour, - MaxValidators: 85, - MaxEntries: 5, - HistoricalEntries: 5, - MinCommissionRate: sdk.NewDecWithPrec(5, 2), + BondDenom: "denom", + UnbondingTime: time.Hour, + MaxValidators: 85, + MaxEntries: 5, + HistoricalEntries: 5, + MinCommissionRate: sdk.NewDecWithPrec(5, 2), + ValidatorBondFactor: sdk.NewDecWithPrec(18, 2), + GlobalLiquidStakingCap: sdk.NewDecWithPrec(11, 2), + ValidatorLiquidStakingCap: sdk.NewDecWithPrec(2, 2), } err := suite.stakingKeeper.SetParams(suite.ctx, params) suite.Require().NoError(err) - testdata.DeterministicIterations(suite.ctx, suite.Require(), &stakingtypes.QueryParamsRequest{}, suite.queryClient.Params, 1114, false) + // NOTE: gas consumption delta changed from 1114 to 1291 + testdata.DeterministicIterations(suite.ctx, suite.Require(), &stakingtypes.QueryParamsRequest{}, suite.queryClient.Params, 1291, false) } diff --git a/tests/integration/staking/keeper/genesis_test.go b/tests/integration/staking/keeper/genesis_test.go index 7e453a59fbec..0e8a9b222f3d 100644 --- a/tests/integration/staking/keeper/genesis_test.go +++ b/tests/integration/staking/keeper/genesis_test.go @@ -3,6 +3,7 @@ package keeper_test import ( "fmt" "testing" + "time" "cosmossdk.io/math" abci "github.com/cometbft/cometbft/abci/types" @@ -11,8 +12,9 @@ import ( "cosmossdk.io/simapp" codectypes "github.com/cosmos/cosmos-sdk/codec/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/bank/testutil" + banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/cosmos/cosmos-sdk/x/staking" "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -65,7 +67,7 @@ func TestInitGenesis(t *testing.T) { // mint coins in the bonded pool representing the validators coins i2 := len(validators) - 1 // -1 to exclude genesis validator require.NoError(t, - testutil.FundModuleAccount( + banktestutil.FundModuleAccount( app.BankKeeper, ctx, types.BondedPoolName, @@ -199,7 +201,7 @@ func TestInitGenesisLargeValidatorSet(t *testing.T) { // mint coins in the bonded pool representing the validators coins require.NoError(t, - testutil.FundModuleAccount( + banktestutil.FundModuleAccount( app.BankKeeper, ctx, types.BondedPoolName, @@ -219,46 +221,51 @@ func TestInitGenesisLargeValidatorSet(t *testing.T) { require.Equal(t, abcivals, vals) } -// TODO: refactor LSM TEST func TestInitExportLiquidStakingGenesis(t *testing.T) { - // app, ctx, addrs := bootstrapGenesisTest(t, 2) - // address1, address2 := addrs[0], addrs[1] - - // // Mock out a genesis state - // inGenesisState := types.GenesisState{ - // Params: types.DefaultParams(), - // TokenizeShareRecords: []types.TokenizeShareRecord{ - // {Id: 1, Owner: address1.String(), ModuleAccount: "module1", Validator: "val1"}, - // {Id: 2, Owner: address2.String(), ModuleAccount: "module2", Validator: "val2"}, - // }, - // LastTokenizeShareRecordId: 2, - // TotalLiquidStakedTokens: sdk.NewInt(1_000_000), - // TokenizeShareLocks: []types.TokenizeShareLock{ - // { - // Address: address1.String(), - // Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String(), - // }, - // { - // Address: address2.String(), - // Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String(), - // CompletionTime: time.Date(2023, 1, 1, 1, 0, 0, 0, time.UTC), - // }, - // }, - // } - - // // Call init and then export genesis - confirming the same state is returned - // staking.InitGenesis(ctx, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, &inGenesisState) - // outGenesisState := *staking.ExportGenesis(ctx, app.StakingKeeper) - - // require.ElementsMatch(t, inGenesisState.TokenizeShareRecords, outGenesisState.TokenizeShareRecords, - // "tokenize share records") - - // require.Equal(t, inGenesisState.LastTokenizeShareRecordId, outGenesisState.LastTokenizeShareRecordId, - // "last tokenize share record ID") - - // require.Equal(t, inGenesisState.TotalLiquidStakedTokens.Int64(), outGenesisState.TotalLiquidStakedTokens.Int64(), - // "total liquid staked") - - // require.ElementsMatch(t, inGenesisState.TokenizeShareLocks, outGenesisState.TokenizeShareLocks, - // "tokenize share locks") + app := simapp.Setup(t, false) + ctx := app.NewContext(false, tmproto.Header{}) + + addresses := simtestutil.AddTestAddrs(app.BankKeeper, app.StakingKeeper, ctx, 2, sdk.OneInt()) + addrAcc1, addrAcc2 := addresses[0], addresses[1] + + // Mock out a genesis state + inGenesisState := types.GenesisState{ + Params: types.DefaultParams(), + TokenizeShareRecords: []types.TokenizeShareRecord{ + {Id: 1, Owner: addrAcc1.String(), ModuleAccount: "module1", Validator: "val1"}, + {Id: 2, Owner: addrAcc2.String(), ModuleAccount: "module2", Validator: "val2"}, + }, + LastTokenizeShareRecordId: 2, + TotalLiquidStakedTokens: sdk.NewInt(1_000_000), + TokenizeShareLocks: []types.TokenizeShareLock{ + { + Address: addrAcc1.String(), + Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String(), + }, + { + Address: addrAcc2.String(), + Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String(), + CompletionTime: time.Date(2023, 1, 1, 1, 0, 0, 0, time.UTC), + }, + }, + // Ensure that the bonded pool balance matches the bonded coins by passing existing validators + // Note: the above wasn't required in v0.45.16-ics-lsm + Validators: app.StakingKeeper.GetAllValidators(ctx), + } + + // Call init and then export genesis - confirming the same state is returned + app.StakingKeeper.InitGenesis(ctx, &inGenesisState) + outGenesisState := app.StakingKeeper.ExportGenesis(ctx) + + require.ElementsMatch(t, inGenesisState.TokenizeShareRecords, outGenesisState.TokenizeShareRecords, + "tokenize share records") + + require.Equal(t, inGenesisState.LastTokenizeShareRecordId, outGenesisState.LastTokenizeShareRecordId, + "last tokenize share record ID") + + require.Equal(t, inGenesisState.TotalLiquidStakedTokens.Int64(), outGenesisState.TotalLiquidStakedTokens.Int64(), + "total liquid staked") + + require.ElementsMatch(t, inGenesisState.TokenizeShareLocks, outGenesisState.TokenizeShareLocks, + "tokenize share locks") } diff --git a/tests/integration/staking/keeper/liquid_stake_test.go b/tests/integration/staking/keeper/liquid_stake_test.go new file mode 100644 index 000000000000..1f0a96382f16 --- /dev/null +++ b/tests/integration/staking/keeper/liquid_stake_test.go @@ -0,0 +1,274 @@ +package keeper_test + +import ( + "testing" + + "cosmossdk.io/math" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + sdk "github.com/cosmos/cosmos-sdk/types" + accountkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" + "github.com/cosmos/cosmos-sdk/x/staking/keeper" + "github.com/cosmos/cosmos-sdk/x/staking/testutil" + "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/stretchr/testify/require" +) + +// Helper function to clear the Bonded pool balances before a unit test +func clearPoolBalance(t *testing.T, sk keeper.Keeper, ak accountkeeper.AccountKeeper, bk bankkeeper.Keeper, ctx sdk.Context) { + bondDenom := sk.BondDenom(ctx) + initialBondedBalance := bk.GetBalance(ctx, ak.GetModuleAddress(types.BondedPoolName), bondDenom) + + err := bk.SendCoinsFromModuleToModule(ctx, types.BondedPoolName, minttypes.ModuleName, sdk.NewCoins(initialBondedBalance)) + require.NoError(t, err, "no error expected when clearing bonded pool balance") +} + +// Helper function to fund the Bonded pool balances before a unit test +func fundPoolBalance(t *testing.T, sk keeper.Keeper, bk bankkeeper.Keeper, ctx sdk.Context, amount math.Int) { + bondDenom := sk.BondDenom(ctx) + bondedPoolCoin := sdk.NewCoin(bondDenom, amount) + + err := bk.MintCoins(ctx, minttypes.ModuleName, sdk.NewCoins(bondedPoolCoin)) + require.NoError(t, err, "no error expected when minting") + + err = bk.SendCoinsFromModuleToModule(ctx, minttypes.ModuleName, types.BondedPoolName, sdk.NewCoins(bondedPoolCoin)) + require.NoError(t, err, "no error expected when sending tokens to bonded pool") +} + +// Tests CheckExceedsGlobalLiquidStakingCap +func TestCheckExceedsGlobalLiquidStakingCap(t *testing.T) { + var ( + accountKeeper accountkeeper.AccountKeeper + bankKeeper bankkeeper.Keeper + stakingKeeper *keeper.Keeper + ) + + app, err := simtestutil.Setup(testutil.AppConfig, + &accountKeeper, + &bankKeeper, + &stakingKeeper, + ) + require.NoError(t, err) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + + testCases := []struct { + name string + globalLiquidCap sdk.Dec + totalLiquidStake math.Int + totalStake math.Int + newLiquidStake math.Int + tokenizingShares bool + expectedExceeds bool + }{ + { + // Cap: 10% - Native Delegation - Delegation Below Threshold + // Total Liquid Stake: 5, Total Stake: 95, New Liquid Stake: 1 + // => Total Liquid Stake: 5+1=6, Total Stake: 95+1=96 => 6/96 = 6% < 10% cap + name: "10 percent cap _ native delegation _ delegation below cap", + globalLiquidCap: sdk.MustNewDecFromStr("0.1"), + totalLiquidStake: sdk.NewInt(5), + totalStake: sdk.NewInt(95), + newLiquidStake: sdk.NewInt(1), + tokenizingShares: false, + expectedExceeds: false, + }, + { + // Cap: 10% - Native Delegation - Delegation At Threshold + // Total Liquid Stake: 5, Total Stake: 95, New Liquid Stake: 5 + // => Total Liquid Stake: 5+5=10, Total Stake: 95+5=100 => 10/100 = 10% == 10% cap + name: "10 percent cap _ native delegation _ delegation equals cap", + globalLiquidCap: sdk.MustNewDecFromStr("0.1"), + totalLiquidStake: sdk.NewInt(5), + totalStake: sdk.NewInt(95), + newLiquidStake: sdk.NewInt(5), + tokenizingShares: false, + expectedExceeds: false, + }, + { + // Cap: 10% - Native Delegation - Delegation Exceeds Threshold + // Total Liquid Stake: 5, Total Stake: 95, New Liquid Stake: 6 + // => Total Liquid Stake: 5+6=11, Total Stake: 95+6=101 => 11/101 = 11% > 10% cap + name: "10 percent cap _ native delegation _ delegation exceeds cap", + globalLiquidCap: sdk.MustNewDecFromStr("0.1"), + totalLiquidStake: sdk.NewInt(5), + totalStake: sdk.NewInt(95), + newLiquidStake: sdk.NewInt(6), + tokenizingShares: false, + expectedExceeds: true, + }, + { + // Cap: 20% - Native Delegation - Delegation Below Threshold + // Total Liquid Stake: 20, Total Stake: 220, New Liquid Stake: 29 + // => Total Liquid Stake: 20+29=49, Total Stake: 220+29=249 => 49/249 = 19% < 20% cap + name: "20 percent cap _ native delegation _ delegation below cap", + globalLiquidCap: sdk.MustNewDecFromStr("0.20"), + totalLiquidStake: sdk.NewInt(20), + totalStake: sdk.NewInt(220), + newLiquidStake: sdk.NewInt(29), + tokenizingShares: false, + expectedExceeds: false, + }, + { + // Cap: 20% - Native Delegation - Delegation At Threshold + // Total Liquid Stake: 20, Total Stake: 220, New Liquid Stake: 30 + // => Total Liquid Stake: 20+30=50, Total Stake: 220+30=250 => 50/250 = 20% == 20% cap + name: "20 percent cap _ native delegation _ delegation equals cap", + globalLiquidCap: sdk.MustNewDecFromStr("0.20"), + totalLiquidStake: sdk.NewInt(20), + totalStake: sdk.NewInt(220), + newLiquidStake: sdk.NewInt(30), + tokenizingShares: false, + expectedExceeds: false, + }, + { + // Cap: 20% - Native Delegation - Delegation Exceeds Threshold + // Total Liquid Stake: 20, Total Stake: 220, New Liquid Stake: 31 + // => Total Liquid Stake: 20+31=51, Total Stake: 220+31=251 => 51/251 = 21% > 20% cap + name: "20 percent cap _ native delegation _ delegation exceeds cap", + globalLiquidCap: sdk.MustNewDecFromStr("0.20"), + totalLiquidStake: sdk.NewInt(20), + totalStake: sdk.NewInt(220), + newLiquidStake: sdk.NewInt(31), + tokenizingShares: false, + expectedExceeds: true, + }, + { + // Cap: 50% - Native Delegation - Delegation Below Threshold + // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 50 + // => Total Liquid Stake: 0+50=50, Total Stake: 100+50=150 => 50/150 = 33% < 50% cap + name: "50 percent cap _ native delegation _ delegation below cap", + globalLiquidCap: sdk.MustNewDecFromStr("0.5"), + totalLiquidStake: sdk.NewInt(0), + totalStake: sdk.NewInt(100), + newLiquidStake: sdk.NewInt(50), + tokenizingShares: false, + expectedExceeds: false, + }, + { + // Cap: 50% - Tokenized Delegation - Delegation At Threshold + // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 50 + // => 50 / 100 = 50% == 50% cap + name: "50 percent cap _ tokenized delegation _ delegation equals cap", + globalLiquidCap: sdk.MustNewDecFromStr("0.5"), + totalLiquidStake: sdk.NewInt(0), + totalStake: sdk.NewInt(100), + newLiquidStake: sdk.NewInt(50), + tokenizingShares: true, + expectedExceeds: false, + }, + { + // Cap: 50% - Native Delegation - Delegation Below Threshold + // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 51 + // => Total Liquid Stake: 0+51=51, Total Stake: 100+51=151 => 51/151 = 33% < 50% cap + name: "50 percent cap _ native delegation _ delegation below cap", + globalLiquidCap: sdk.MustNewDecFromStr("0.5"), + totalLiquidStake: sdk.NewInt(0), + totalStake: sdk.NewInt(100), + newLiquidStake: sdk.NewInt(51), + tokenizingShares: false, + expectedExceeds: false, + }, + { + // Cap: 50% - Tokenized Delegation - Delegation Exceeds Threshold + // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 51 + // => 51 / 100 = 51% > 50% cap + name: "50 percent cap _ tokenized delegation _delegation exceeds cap", + globalLiquidCap: sdk.MustNewDecFromStr("0.5"), + totalLiquidStake: sdk.NewInt(0), + totalStake: sdk.NewInt(100), + newLiquidStake: sdk.NewInt(51), + tokenizingShares: true, + expectedExceeds: true, + }, + { + // Cap of 0% - everything should exceed + name: "0 percent cap", + globalLiquidCap: sdk.ZeroDec(), + totalLiquidStake: sdk.NewInt(0), + totalStake: sdk.NewInt(1_000_000), + newLiquidStake: sdk.NewInt(1), + tokenizingShares: false, + expectedExceeds: true, + }, + { + // Cap of 100% - nothing should exceed + name: "100 percent cap", + globalLiquidCap: sdk.OneDec(), + totalLiquidStake: sdk.NewInt(1), + totalStake: sdk.NewInt(1), + newLiquidStake: sdk.NewInt(1_000_000), + tokenizingShares: false, + expectedExceeds: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + // Update the global liquid staking cap + params := stakingKeeper.GetParams(ctx) + params.GlobalLiquidStakingCap = tc.globalLiquidCap + stakingKeeper.SetParams(ctx, params) + + // Update the total liquid tokens + stakingKeeper.SetTotalLiquidStakedTokens(ctx, tc.totalLiquidStake) + + // Fund each pool for the given test case + clearPoolBalance(t, *stakingKeeper, accountKeeper, bankKeeper, ctx) + fundPoolBalance(t, *stakingKeeper, bankKeeper, ctx, tc.totalStake) + + // Check if the new tokens would exceed the global cap + actualExceeds := stakingKeeper.CheckExceedsGlobalLiquidStakingCap(ctx, tc.newLiquidStake, tc.tokenizingShares) + require.Equal(t, tc.expectedExceeds, actualExceeds, tc.name) + }) + } +} + +// Tests SafelyIncreaseTotalLiquidStakedTokens +func TestSafelyIncreaseTotalLiquidStakedTokens(t *testing.T) { + var ( + accountKeeper accountkeeper.AccountKeeper + bankKeeper bankkeeper.Keeper + stakingKeeper *keeper.Keeper + ) + + app, err := simtestutil.Setup(testutil.AppConfig, + &accountKeeper, + &bankKeeper, + &stakingKeeper, + ) + require.NoError(t, err) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + + intitialTotalLiquidStaked := sdk.NewInt(100) + increaseAmount := sdk.NewInt(10) + poolBalance := sdk.NewInt(200) + + // Set the total staked and total liquid staked amounts + // which are required components when checking the global cap + // Total stake is calculated from the pool balance + clearPoolBalance(t, *stakingKeeper, accountKeeper, bankKeeper, ctx) + fundPoolBalance(t, *stakingKeeper, bankKeeper, ctx, poolBalance) + stakingKeeper.SetTotalLiquidStakedTokens(ctx, intitialTotalLiquidStaked) + + // Set the global cap such that a small delegation would exceed the cap + params := stakingKeeper.GetParams(ctx) + params.GlobalLiquidStakingCap = sdk.MustNewDecFromStr("0.0001") + stakingKeeper.SetParams(ctx, params) + + // Attempt to increase the total liquid stake again, it should error since + // the cap was exceeded + err = stakingKeeper.SafelyIncreaseTotalLiquidStakedTokens(ctx, increaseAmount, true) + require.ErrorIs(t, err, types.ErrGlobalLiquidStakingCapExceeded) + require.Equal(t, intitialTotalLiquidStaked, stakingKeeper.GetTotalLiquidStakedTokens(ctx)) + + // Now relax the cap so that the increase succeeds + params.GlobalLiquidStakingCap = sdk.MustNewDecFromStr("0.99") + stakingKeeper.SetParams(ctx, params) + + // Confirm the total increased + err = stakingKeeper.SafelyIncreaseTotalLiquidStakedTokens(ctx, increaseAmount, true) + require.NoError(t, err) + require.Equal(t, intitialTotalLiquidStaked.Add(increaseAmount), stakingKeeper.GetTotalLiquidStakedTokens(ctx)) +} diff --git a/tests/integration/staking/keeper/msg_server_test.go b/tests/integration/staking/keeper/msg_server_test.go index 76ac622175f7..535ecfcc9190 100644 --- a/tests/integration/staking/keeper/msg_server_test.go +++ b/tests/integration/staking/keeper/msg_server_test.go @@ -1,16 +1,28 @@ package keeper_test import ( + "fmt" "testing" "time" + "cosmossdk.io/math" + "cosmossdk.io/simapp" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - - "cosmossdk.io/simapp" - "github.com/cosmos/cosmos-sdk/x/bank/testutil" + "github.com/cosmos/cosmos-sdk/types/address" + accountkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/exported" + vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" + minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" "github.com/cosmos/cosmos-sdk/x/staking/keeper" + "github.com/cosmos/cosmos-sdk/x/staking/testutil" "github.com/cosmos/cosmos-sdk/x/staking/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/stretchr/testify/require" ) @@ -25,7 +37,7 @@ func TestCancelUnbondingDelegation(t *testing.T) { notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx) startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 5) - require.NoError(t, testutil.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), startTokens)))) + require.NoError(t, banktestutil.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), startTokens)))) app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) moduleBalance := app.BankKeeper.GetBalance(ctx, notBondedPool.GetAddress(), app.StakingKeeper.BondDenom(ctx)) @@ -147,1390 +159,1442 @@ func TestCancelUnbondingDelegation(t *testing.T) { } } -// TODO refactor LSM test func TestTokenizeSharesAndRedeemTokens(t *testing.T) { - // app := simapp.Setup(t, false) - // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - - // liquidStakingCapStrict := sdk.ZeroDec() - // liquidStakingCapConservative := sdk.MustNewDecFromStr("0.8") - // liquidStakingCapDisabled := sdk.OneDec() - - // validatorBondStrict := sdk.OneDec() - // validatorBondConservative := sdk.NewDec(10) - // validatorBondDisabled := sdk.NewDec(-1) - - // testCases := []struct { - // name string - // vestingAmount sdk.Int - // delegationAmount sdk.Int - // tokenizeShareAmount sdk.Int - // redeemAmount sdk.Int - // targetVestingDelAfterShare sdk.Int - // targetVestingDelAfterRedeem sdk.Int - // globalLiquidStakingCap sdk.Dec - // slashFactor sdk.Dec - // validatorLiquidStakingCap sdk.Dec - // validatorBondFactor sdk.Dec - // validatorBondDelegation bool - // validatorBondDelegatorIndex int - // delegatorIsLSTP bool - // expTokenizeErr bool - // expRedeemErr bool - // prevAccountDelegationExists bool - // recordAccountDelegationExists bool - // }{ - // { - // name: "full amount tokenize and redeem", - // vestingAmount: sdk.NewInt(0), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondDisabled, - // validatorBondDelegation: false, - // expTokenizeErr: false, - // expRedeemErr: false, - // prevAccountDelegationExists: false, - // recordAccountDelegationExists: false, - // }, - // { - // name: "full amount tokenize and partial redeem", - // vestingAmount: sdk.NewInt(0), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondDisabled, - // validatorBondDelegation: false, - // expTokenizeErr: false, - // expRedeemErr: false, - // prevAccountDelegationExists: false, - // recordAccountDelegationExists: true, - // }, - // { - // name: "partial amount tokenize and full redeem", - // vestingAmount: sdk.NewInt(0), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondDisabled, - // validatorBondDelegation: false, - // expTokenizeErr: false, - // expRedeemErr: false, - // prevAccountDelegationExists: true, - // recordAccountDelegationExists: false, - // }, - // { - // name: "tokenize and redeem with slash", - // vestingAmount: sdk.NewInt(0), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.MustNewDecFromStr("0.1"), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondDisabled, - // validatorBondDelegation: false, - // expTokenizeErr: false, - // expRedeemErr: false, - // prevAccountDelegationExists: false, - // recordAccountDelegationExists: true, - // }, - // { - // name: "over tokenize", - // vestingAmount: sdk.NewInt(0), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 30), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondDisabled, - // validatorBondDelegation: false, - // expTokenizeErr: true, - // expRedeemErr: false, - // }, - // { - // name: "over redeem", - // vestingAmount: sdk.NewInt(0), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 40), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondDisabled, - // validatorBondDelegation: false, - // expTokenizeErr: false, - // expRedeemErr: true, - // }, - // { - // name: "vesting account tokenize share failure", - // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondDisabled, - // validatorBondDelegation: false, - // expTokenizeErr: true, - // expRedeemErr: false, - // prevAccountDelegationExists: true, - // }, - // { - // name: "vesting account tokenize share success", - // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondDisabled, - // validatorBondDelegation: false, - // expTokenizeErr: false, - // expRedeemErr: false, - // prevAccountDelegationExists: true, - // }, - // { - // name: "try tokenize share for a validator-bond delegation", - // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondConservative, - // validatorBondDelegation: true, - // validatorBondDelegatorIndex: 1, - // expTokenizeErr: true, - // expRedeemErr: false, - // prevAccountDelegationExists: true, - // }, - // { - // name: "strict validator-bond - tokenization fails", - // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondStrict, - // validatorBondDelegation: false, - // expTokenizeErr: true, - // expRedeemErr: false, - // prevAccountDelegationExists: true, - // }, - // { - // name: "conservative validator-bond - successful tokenization", - // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondConservative, - // validatorBondDelegation: true, - // validatorBondDelegatorIndex: 0, - // expTokenizeErr: false, - // expRedeemErr: false, - // prevAccountDelegationExists: true, - // }, - // { - // name: "strict global liquid staking cap - tokenization fails", - // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapStrict, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondDisabled, - // validatorBondDelegation: true, - // validatorBondDelegatorIndex: 0, - // expTokenizeErr: true, - // expRedeemErr: false, - // prevAccountDelegationExists: true, - // }, - // { - // name: "conservative global liquid staking cap - successful tokenization", - // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapConservative, - // validatorLiquidStakingCap: liquidStakingCapDisabled, - // validatorBondFactor: validatorBondDisabled, - // validatorBondDelegation: true, - // validatorBondDelegatorIndex: 0, - // expTokenizeErr: false, - // expRedeemErr: false, - // prevAccountDelegationExists: true, - // }, - // { - // name: "strict validator liquid staking cap - tokenization fails", - // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapStrict, - // validatorBondFactor: validatorBondDisabled, - // validatorBondDelegation: true, - // validatorBondDelegatorIndex: 0, - // expTokenizeErr: true, - // expRedeemErr: false, - // prevAccountDelegationExists: true, - // }, - // { - // name: "conservative validator liquid staking cap - successful tokenization", - // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapDisabled, - // validatorLiquidStakingCap: liquidStakingCapConservative, - // validatorBondFactor: validatorBondDisabled, - // validatorBondDelegation: true, - // validatorBondDelegatorIndex: 0, - // expTokenizeErr: false, - // expRedeemErr: false, - // prevAccountDelegationExists: true, - // }, - // { - // name: "all caps set conservatively - successful tokenize share", - // vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapConservative, - // validatorLiquidStakingCap: liquidStakingCapConservative, - // validatorBondFactor: validatorBondConservative, - // validatorBondDelegation: true, - // validatorBondDelegatorIndex: 0, - // expTokenizeErr: false, - // expRedeemErr: false, - // prevAccountDelegationExists: true, - // }, - // { - // name: "delegator is a liquid staking provider - accounting should not update", - // vestingAmount: sdk.ZeroInt(), - // delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20), - // tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10), - // slashFactor: sdk.ZeroDec(), - // globalLiquidStakingCap: liquidStakingCapConservative, - // validatorLiquidStakingCap: liquidStakingCapConservative, - // validatorBondFactor: validatorBondConservative, - // delegatorIsLSTP: true, - // validatorBondDelegation: true, - // validatorBondDelegatorIndex: 0, - // expTokenizeErr: false, - // expRedeemErr: false, - // prevAccountDelegationExists: true, - // }, - // } - - // for _, tc := range testCases { - // t.Run(tc.name, func(t *testing.T) { - // addrs := simtestutil.AddTestAddrs(app.BankKeeper, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) - // addrAcc1, addrAcc2 := addrs[0], addrs[1] - // addrVal1, addrVal2 := sdk.ValAddress(addrAcc1), sdk.ValAddress(addrAcc2) - - // // Create ICA module account - // icaAccountAddress := createICAAccount(app, ctx) - - // // Fund module account - // delegationCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), tc.delegationAmount) - // err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, sdk.NewCoins(delegationCoin)) - // require.NoError(t, err) - // err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, icaAccountAddress, sdk.NewCoins(delegationCoin)) - // require.NoError(t, err) - - // // set the delegator address depending on whether the delegator should be a liquid staking provider - // delegatorAccount := addrAcc2 - // if tc.delegatorIsLSTP { - // delegatorAccount = icaAccountAddress - // } - - // // set validator bond factor and global liquid staking cap - // params := app.StakingKeeper.GetParams(ctx) - // params.ValidatorBondFactor = tc.validatorBondFactor - // params.GlobalLiquidStakingCap = tc.globalLiquidStakingCap - // params.ValidatorLiquidStakingCap = tc.validatorLiquidStakingCap - // app.StakingKeeper.SetParams(ctx, params) - - // // set the total liquid staked tokens - // app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, sdk.ZeroInt()) - - // if !tc.vestingAmount.IsZero() { - // // create vesting account - // pubkey := secp256k1.GenPrivKey().PubKey() - // baseAcc := authtypes.NewBaseAccount(addrAcc2, pubkey, 0, 0) - // initialVesting := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, tc.vestingAmount)) - // baseVestingWithCoins := vestingtypes.NewBaseVestingAccount(baseAcc, initialVesting, ctx.BlockTime().Unix()+86400*365) - // delayedVestingAccount := vestingtypes.NewDelayedVestingAccountRaw(baseVestingWithCoins) - // app.AccountKeeper.SetAccount(ctx, delayedVestingAccount) - // } - - // pubKeys := simtestutil.CreateTestPubKeys(2) - // pk1, pk2 := pubKeys[0], pubKeys[1] - - // // Create Validators and Delegation - // val1 := stakingtypes.NewValidator(addrVal1, pk1, stakingtypes.Description{}) - // val1.Status = sdkstaking.Bonded - // app.StakingKeeper.SetValidator(ctx, val1) - // app.StakingKeeper.SetValidatorByPowerIndex(ctx, val1) - // err = app.StakingKeeper.SetValidatorByConsAddr(ctx, val1) - // require.NoError(t, err) - - // val2 := stakingtypes.NewValidator(addrVal2, pk2, stakingtypes.Description{}) - // val2.Status = sdkstaking.Bonded - // app.StakingKeeper.SetValidator(ctx, val2) - // app.StakingKeeper.SetValidatorByPowerIndex(ctx, val2) - // err = app.StakingKeeper.SetValidatorByConsAddr(ctx, val2) - // require.NoError(t, err) - - // // Delegate from both the main delegator as well as a random account so there is a - // // non-zero delegation after redemption - // err = delegateCoinsFromAccount(ctx, app, delegatorAccount, tc.delegationAmount, val1) - // require.NoError(t, err) - - // // apply TM updates - // applyValidatorSetUpdates(t, ctx, app.StakingKeeper, -1) - - // _, found := app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) - // require.True(t, found, "delegation not found after delegate") - - // lastRecordID := app.StakingKeeper.GetLastTokenizeShareRecordID(ctx) - // oldValidator, found := app.StakingKeeper.GetValidator(ctx, addrVal1) - // require.True(t, found) - - // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - // if tc.validatorBondDelegation { - // err := delegateCoinsFromAccount(ctx, app, addrs[tc.validatorBondDelegatorIndex], tc.delegationAmount, val1) - // require.NoError(t, err) - // _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ - // DelegatorAddress: addrs[tc.validatorBondDelegatorIndex].String(), - // ValidatorAddress: addrVal1.String(), - // }) - // require.NoError(t, err) - // } - - // resp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ - // DelegatorAddress: delegatorAccount.String(), - // ValidatorAddress: addrVal1.String(), - // Amount: sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), tc.tokenizeShareAmount), - // TokenizedShareOwner: delegatorAccount.String(), - // }) - // if tc.expTokenizeErr { - // require.Error(t, err) - // return - // } - // require.NoError(t, err) - - // // check last record id increase - // require.Equal(t, lastRecordID+1, app.StakingKeeper.GetLastTokenizeShareRecordID(ctx)) - - // // ensure validator's total tokens is consistent - // newValidator, found := app.StakingKeeper.GetValidator(ctx, addrVal1) - // require.True(t, found) - // require.Equal(t, oldValidator.Tokens, newValidator.Tokens) - - // // if the delegator was not a provider, check that the total liquid staked and validator liquid shares increased - // totalLiquidTokensAfterTokenization := app.StakingKeeper.GetTotalLiquidStakedTokens(ctx) - // validatorLiquidSharesAfterTokenization := newValidator.LiquidShares - // if !tc.delegatorIsLSTP { - // require.Equal(t, tc.tokenizeShareAmount.String(), totalLiquidTokensAfterTokenization.String(), "total liquid tokens after tokenization") - // require.Equal(t, tc.tokenizeShareAmount.String(), validatorLiquidSharesAfterTokenization.TruncateInt().String(), "validator liquid shares after tokenization") - // } else { - // require.True(t, totalLiquidTokensAfterTokenization.IsZero(), "zero liquid tokens after tokenization") - // require.True(t, validatorLiquidSharesAfterTokenization.IsZero(), "zero liquid validator shares after tokenization") - // } - - // if tc.vestingAmount.IsPositive() { - // acc := app.AccountKeeper.GetAccount(ctx, addrAcc2) - // vestingAcc := acc.(vesting.VestingAccount) - // require.Equal(t, vestingAcc.GetDelegatedVesting().AmountOf(app.StakingKeeper.BondDenom(ctx)).String(), tc.targetVestingDelAfterShare.String()) - // } - - // if tc.prevAccountDelegationExists { - // _, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) - // require.True(t, found, "delegation found after partial tokenize share") - // } else { - // _, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) - // require.False(t, found, "delegation found after full tokenize share") - // } - - // shareToken := app.BankKeeper.GetBalance(ctx, delegatorAccount, resp.Amount.Denom) - // require.Equal(t, resp.Amount, shareToken) - // _, found = app.StakingKeeper.GetValidator(ctx, addrVal1) - // require.True(t, found, true, "validator not found") - - // records := app.StakingKeeper.GetAllTokenizeShareRecords(ctx) - // require.Len(t, records, 1) - // delegation, found := app.StakingKeeper.GetDelegation(ctx, records[0].GetModuleAddress(), addrVal1) - // require.True(t, found, "delegation not found from tokenize share module account after tokenize share") - - // // slash before redeem - // slashedTokens := sdk.ZeroInt() - // redeemedShares := tc.redeemAmount - // redeemedTokens := tc.redeemAmount - // if tc.slashFactor.IsPositive() { - // consAddr, err := val1.GetConsAddr() - // require.NoError(t, err) - // ctx = ctx.WithBlockHeight(100) - // val1, found = app.StakingKeeper.GetValidator(ctx, addrVal1) - // require.True(t, found) - // power := app.StakingKeeper.TokensToConsensusPower(ctx, val1.Tokens) - // app.StakingKeeper.Slash(ctx, consAddr, 10, power, tc.slashFactor, 0) - // slashedTokens = sdk.NewDecFromInt(val1.Tokens).Mul(tc.slashFactor).TruncateInt() - - // val1, _ := app.StakingKeeper.GetValidator(ctx, addrVal1) - // redeemedTokens = val1.TokensFromShares(sdk.NewDecFromInt(redeemedShares)).TruncateInt() - // } - - // // get deletagor balance and delegation - // bondDenomAmountBefore := app.BankKeeper.GetBalance(ctx, delegatorAccount, app.StakingKeeper.BondDenom(ctx)) - // val1, found = app.StakingKeeper.GetValidator(ctx, addrVal1) - // require.True(t, found) - // delegation, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) - // if !found { - // delegation = types.Delegation{Shares: sdk.ZeroDec()} - // } - // delAmountBefore := val1.TokensFromShares(delegation.Shares) - // oldValidator, found = app.StakingKeeper.GetValidator(ctx, addrVal1) - // require.True(t, found) - - // _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ - // DelegatorAddress: delegatorAccount.String(), - // Amount: sdk.NewCoin(resp.Amount.Denom, tc.redeemAmount), - // }) - // if tc.expRedeemErr { - // require.Error(t, err) - // return - // } - // require.NoError(t, err) - - // // ensure validator's total tokens is consistent - // newValidator, found = app.StakingKeeper.GetValidator(ctx, addrVal1) - // require.True(t, found) - // require.Equal(t, oldValidator.Tokens, newValidator.Tokens) - - // // if the delegator was not a liuqid staking provider, check that the total liquid staked - // // and liquid shares decreased - // totalLiquidTokensAfterRedemption := app.StakingKeeper.GetTotalLiquidStakedTokens(ctx) - // validatorLiquidSharesAfterRedemption := newValidator.LiquidShares - // expectedLiquidTokens := totalLiquidTokensAfterTokenization.Sub(redeemedTokens).Sub(slashedTokens) - // expectedLiquidShares := validatorLiquidSharesAfterTokenization.Sub(sdk.NewDecFromInt(redeemedShares)) - // if !tc.delegatorIsLSTP { - // require.Equal(t, expectedLiquidTokens.String(), totalLiquidTokensAfterRedemption.String(), "total liquid tokens after redemption") - // require.Equal(t, expectedLiquidShares.String(), validatorLiquidSharesAfterRedemption.String(), "validator liquid shares after tokenization") - // } else { - // require.True(t, totalLiquidTokensAfterRedemption.IsZero(), "zero liquid tokens after redemption") - // require.True(t, validatorLiquidSharesAfterRedemption.IsZero(), "zero liquid validator shares after redemption") - // } - - // if tc.vestingAmount.IsPositive() { - // acc := app.AccountKeeper.GetAccount(ctx, addrAcc2) - // vestingAcc := acc.(vesting.VestingAccount) - // require.Equal(t, vestingAcc.GetDelegatedVesting().AmountOf(app.StakingKeeper.BondDenom(ctx)).String(), tc.targetVestingDelAfterRedeem.String()) - // } - - // expectedDelegatedShares := sdk.NewDecFromInt(tc.delegationAmount.Sub(tc.tokenizeShareAmount).Add(tc.redeemAmount)) - // delegation, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) - // require.True(t, found, "delegation not found after redeem tokens") - // require.Equal(t, delegatorAccount.String(), delegation.DelegatorAddress) - // require.Equal(t, addrVal1.String(), delegation.ValidatorAddress) - // require.Equal(t, expectedDelegatedShares, delegation.Shares, "delegation shares after redeem") - - // // check delegator balance is not changed - // bondDenomAmountAfter := app.BankKeeper.GetBalance(ctx, delegatorAccount, app.StakingKeeper.BondDenom(ctx)) - // require.Equal(t, bondDenomAmountAfter.Amount.String(), bondDenomAmountBefore.Amount.String()) - - // // get delegation amount is changed correctly - // val1, found = app.StakingKeeper.GetValidator(ctx, addrVal1) - // require.True(t, found) - // delegation, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) - // if !found { - // delegation = types.Delegation{Shares: sdk.ZeroDec()} - // } - // delAmountAfter := val1.TokensFromShares(delegation.Shares) - // require.Equal(t, delAmountAfter.String(), delAmountBefore.Add(sdk.NewDecFromInt(tc.redeemAmount).Mul(sdk.OneDec().Sub(tc.slashFactor))).String()) - - // shareToken = app.BankKeeper.GetBalance(ctx, delegatorAccount, resp.Amount.Denom) - // require.Equal(t, shareToken.Amount.String(), tc.tokenizeShareAmount.Sub(tc.redeemAmount).String()) - // _, found = app.StakingKeeper.GetValidator(ctx, addrVal1) - // require.True(t, found, true, "validator not found") - - // if tc.recordAccountDelegationExists { - // _, found = app.StakingKeeper.GetDelegation(ctx, records[0].GetModuleAddress(), addrVal1) - // require.True(t, found, "delegation not found from tokenize share module account after redeem partial amount") - - // records = app.StakingKeeper.GetAllTokenizeShareRecords(ctx) - // require.Len(t, records, 1) - // } else { - // _, found = app.StakingKeeper.GetDelegation(ctx, records[0].GetModuleAddress(), addrVal1) - // require.False(t, found, "delegation found from tokenize share module account after redeem full amount") - - // records = app.StakingKeeper.GetAllTokenizeShareRecords(ctx) - // require.Len(t, records, 0) - // } - // }) - // } + _, app, ctx := createTestInput(t) + var ( + stakingKeeper = app.StakingKeeper + ) + + liquidStakingCapStrict := sdk.ZeroDec() + liquidStakingCapConservative := sdk.MustNewDecFromStr("0.8") + liquidStakingCapDisabled := sdk.OneDec() + + validatorBondStrict := sdk.OneDec() + validatorBondConservative := sdk.NewDec(10) + validatorBondDisabled := sdk.NewDec(-1) + + testCases := []struct { + name string + vestingAmount math.Int + delegationAmount math.Int + tokenizeShareAmount math.Int + redeemAmount math.Int + targetVestingDelAfterShare math.Int + targetVestingDelAfterRedeem math.Int + globalLiquidStakingCap sdk.Dec + slashFactor sdk.Dec + validatorLiquidStakingCap sdk.Dec + validatorBondFactor sdk.Dec + validatorBondDelegation bool + validatorBondDelegatorIndex int + delegatorIsLSTP bool + expTokenizeErr bool + expRedeemErr bool + prevAccountDelegationExists bool + recordAccountDelegationExists bool + }{ + { + name: "full amount tokenize and redeem", + vestingAmount: sdk.NewInt(0), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondDisabled, + validatorBondDelegation: false, + expTokenizeErr: false, + expRedeemErr: false, + prevAccountDelegationExists: false, + recordAccountDelegationExists: false, + }, + { + name: "full amount tokenize and partial redeem", + vestingAmount: sdk.NewInt(0), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondDisabled, + validatorBondDelegation: false, + expTokenizeErr: false, + expRedeemErr: false, + prevAccountDelegationExists: false, + recordAccountDelegationExists: true, + }, + { + name: "partial amount tokenize and full redeem", + vestingAmount: sdk.NewInt(0), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondDisabled, + validatorBondDelegation: false, + expTokenizeErr: false, + expRedeemErr: false, + prevAccountDelegationExists: true, + recordAccountDelegationExists: false, + }, + { + name: "tokenize and redeem with slash", + vestingAmount: sdk.NewInt(0), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.MustNewDecFromStr("0.1"), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondDisabled, + validatorBondDelegation: false, + expTokenizeErr: false, + expRedeemErr: false, + prevAccountDelegationExists: false, + recordAccountDelegationExists: true, + }, + { + name: "over tokenize", + vestingAmount: sdk.NewInt(0), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 30), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondDisabled, + validatorBondDelegation: false, + expTokenizeErr: true, + expRedeemErr: false, + }, + { + name: "over redeem", + vestingAmount: sdk.NewInt(0), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 40), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondDisabled, + validatorBondDelegation: false, + expTokenizeErr: false, + expRedeemErr: true, + }, + { + name: "vesting account tokenize share failure", + vestingAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondDisabled, + validatorBondDelegation: false, + expTokenizeErr: true, + expRedeemErr: false, + prevAccountDelegationExists: true, + }, + { + name: "vesting account tokenize share success", + vestingAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterShare: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterRedeem: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondDisabled, + validatorBondDelegation: false, + expTokenizeErr: false, + expRedeemErr: false, + prevAccountDelegationExists: true, + }, + { + name: "try tokenize share for a validator-bond delegation", + vestingAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterShare: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterRedeem: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondConservative, + validatorBondDelegation: true, + validatorBondDelegatorIndex: 1, + expTokenizeErr: true, + expRedeemErr: false, + prevAccountDelegationExists: true, + }, + { + name: "strict validator-bond - tokenization fails", + vestingAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterShare: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterRedeem: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondStrict, + validatorBondDelegation: false, + expTokenizeErr: true, + expRedeemErr: false, + prevAccountDelegationExists: true, + }, + { + name: "conservative validator-bond - successful tokenization", + vestingAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterShare: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterRedeem: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondConservative, + validatorBondDelegation: true, + validatorBondDelegatorIndex: 0, + expTokenizeErr: false, + expRedeemErr: false, + prevAccountDelegationExists: true, + }, + { + name: "strict global liquid staking cap - tokenization fails", + vestingAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterShare: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterRedeem: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapStrict, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondDisabled, + validatorBondDelegation: true, + validatorBondDelegatorIndex: 0, + expTokenizeErr: true, + expRedeemErr: false, + prevAccountDelegationExists: true, + }, + { + name: "conservative global liquid staking cap - successful tokenization", + vestingAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterShare: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterRedeem: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapConservative, + validatorLiquidStakingCap: liquidStakingCapDisabled, + validatorBondFactor: validatorBondDisabled, + validatorBondDelegation: true, + validatorBondDelegatorIndex: 0, + expTokenizeErr: false, + expRedeemErr: false, + prevAccountDelegationExists: true, + }, + { + name: "strict validator liquid staking cap - tokenization fails", + vestingAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterShare: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterRedeem: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapStrict, + validatorBondFactor: validatorBondDisabled, + validatorBondDelegation: true, + validatorBondDelegatorIndex: 0, + expTokenizeErr: true, + expRedeemErr: false, + prevAccountDelegationExists: true, + }, + { + name: "conservative validator liquid staking cap - successful tokenization", + vestingAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterShare: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterRedeem: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapDisabled, + validatorLiquidStakingCap: liquidStakingCapConservative, + validatorBondFactor: validatorBondDisabled, + validatorBondDelegation: true, + validatorBondDelegatorIndex: 0, + expTokenizeErr: false, + expRedeemErr: false, + prevAccountDelegationExists: true, + }, + { + name: "all caps set conservatively - successful tokenize share", + vestingAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterShare: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterRedeem: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapConservative, + validatorLiquidStakingCap: liquidStakingCapConservative, + validatorBondFactor: validatorBondConservative, + validatorBondDelegation: true, + validatorBondDelegatorIndex: 0, + expTokenizeErr: false, + expRedeemErr: false, + prevAccountDelegationExists: true, + }, + { + name: "delegator is a liquid staking provider - accounting should not update", + vestingAmount: sdk.ZeroInt(), + delegationAmount: stakingKeeper.TokensFromConsensusPower(ctx, 20), + tokenizeShareAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + redeemAmount: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterShare: stakingKeeper.TokensFromConsensusPower(ctx, 10), + targetVestingDelAfterRedeem: stakingKeeper.TokensFromConsensusPower(ctx, 10), + slashFactor: sdk.ZeroDec(), + globalLiquidStakingCap: liquidStakingCapConservative, + validatorLiquidStakingCap: liquidStakingCapConservative, + validatorBondFactor: validatorBondConservative, + delegatorIsLSTP: true, + validatorBondDelegation: true, + validatorBondDelegatorIndex: 0, + expTokenizeErr: false, + expRedeemErr: false, + prevAccountDelegationExists: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + _, app, ctx := createTestInput(t) + var ( + bankKeeper = app.BankKeeper + accountKeeper = app.AccountKeeper + stakingKeeper = app.StakingKeeper + ) + addrs := simtestutil.AddTestAddrs(bankKeeper, stakingKeeper, ctx, 2, stakingKeeper.TokensFromConsensusPower(ctx, 10000)) + addrAcc1, addrAcc2 := addrs[0], addrs[1] + addrVal1, addrVal2 := sdk.ValAddress(addrAcc1), sdk.ValAddress(addrAcc2) + + // Create ICA module account + icaAccountAddress := createICAAccount(ctx, accountKeeper) + + // Fund module account + delegationCoin := sdk.NewCoin(stakingKeeper.BondDenom(ctx), tc.delegationAmount) + err := bankKeeper.MintCoins(ctx, minttypes.ModuleName, sdk.NewCoins(delegationCoin)) + require.NoError(t, err) + err = bankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, icaAccountAddress, sdk.NewCoins(delegationCoin)) + require.NoError(t, err) + + // set the delegator address depending on whether the delegator should be a liquid staking provider + delegatorAccount := addrAcc2 + if tc.delegatorIsLSTP { + delegatorAccount = icaAccountAddress + } + + // set validator bond factor and global liquid staking cap + params := stakingKeeper.GetParams(ctx) + params.ValidatorBondFactor = tc.validatorBondFactor + params.GlobalLiquidStakingCap = tc.globalLiquidStakingCap + params.ValidatorLiquidStakingCap = tc.validatorLiquidStakingCap + stakingKeeper.SetParams(ctx, params) + + // set the total liquid staked tokens + stakingKeeper.SetTotalLiquidStakedTokens(ctx, sdk.ZeroInt()) + + if !tc.vestingAmount.IsZero() { + // create vesting account + pubkey := secp256k1.GenPrivKey().PubKey() + baseAcc := authtypes.NewBaseAccount(addrAcc2, pubkey, 0, 0) + initialVesting := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, tc.vestingAmount)) + baseVestingWithCoins := vestingtypes.NewBaseVestingAccount(baseAcc, initialVesting, ctx.BlockTime().Unix()+86400*365) + delayedVestingAccount := vestingtypes.NewDelayedVestingAccountRaw(baseVestingWithCoins) + accountKeeper.SetAccount(ctx, delayedVestingAccount) + } + + pubKeys := simtestutil.CreateTestPubKeys(2) + pk1, pk2 := pubKeys[0], pubKeys[1] + + // Create Validators and Delegation + val1 := testutil.NewValidator(t, addrVal1, pk1) + val1.Status = stakingtypes.Bonded + app.StakingKeeper.SetValidator(ctx, val1) + app.StakingKeeper.SetValidatorByPowerIndex(ctx, val1) + err = app.StakingKeeper.SetValidatorByConsAddr(ctx, val1) + require.NoError(t, err) + + val2 := testutil.NewValidator(t, addrVal2, pk2) + val2.Status = stakingtypes.Bonded + app.StakingKeeper.SetValidator(ctx, val2) + app.StakingKeeper.SetValidatorByPowerIndex(ctx, val2) + err = app.StakingKeeper.SetValidatorByConsAddr(ctx, val2) + require.NoError(t, err) + + // Delegate from both the main delegator as well as a random account so there is a + // non-zero delegation after redemption + err = delegateCoinsFromAccount(ctx, *stakingKeeper, delegatorAccount, tc.delegationAmount, val1) + require.NoError(t, err) + + // apply TM updates + applyValidatorSetUpdates(t, ctx, stakingKeeper, -1) + + _, found := stakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) + require.True(t, found, "delegation not found after delegate") + + lastRecordID := stakingKeeper.GetLastTokenizeShareRecordID(ctx) + oldValidator, found := stakingKeeper.GetValidator(ctx, addrVal1) + require.True(t, found) + + msgServer := keeper.NewMsgServerImpl(stakingKeeper) + if tc.validatorBondDelegation { + err := delegateCoinsFromAccount(ctx, *stakingKeeper, addrs[tc.validatorBondDelegatorIndex], tc.delegationAmount, val1) + require.NoError(t, err) + _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ + DelegatorAddress: addrs[tc.validatorBondDelegatorIndex].String(), + ValidatorAddress: addrVal1.String(), + }) + require.NoError(t, err) + } + + resp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ + DelegatorAddress: delegatorAccount.String(), + ValidatorAddress: addrVal1.String(), + Amount: sdk.NewCoin(stakingKeeper.BondDenom(ctx), tc.tokenizeShareAmount), + TokenizedShareOwner: delegatorAccount.String(), + }) + if tc.expTokenizeErr { + require.Error(t, err) + return + } + require.NoError(t, err) + + // check last record id increase + require.Equal(t, lastRecordID+1, stakingKeeper.GetLastTokenizeShareRecordID(ctx)) + + // ensure validator's total tokens is consistent + newValidator, found := stakingKeeper.GetValidator(ctx, addrVal1) + require.True(t, found) + require.Equal(t, oldValidator.Tokens, newValidator.Tokens) + + // if the delegator was not a provider, check that the total liquid staked and validator liquid shares increased + totalLiquidTokensAfterTokenization := stakingKeeper.GetTotalLiquidStakedTokens(ctx) + validatorLiquidSharesAfterTokenization := newValidator.LiquidShares + if !tc.delegatorIsLSTP { + require.Equal(t, tc.tokenizeShareAmount.String(), totalLiquidTokensAfterTokenization.String(), "total liquid tokens after tokenization") + require.Equal(t, tc.tokenizeShareAmount.String(), validatorLiquidSharesAfterTokenization.TruncateInt().String(), "validator liquid shares after tokenization") + } else { + require.True(t, totalLiquidTokensAfterTokenization.IsZero(), "zero liquid tokens after tokenization") + require.True(t, validatorLiquidSharesAfterTokenization.IsZero(), "zero liquid validator shares after tokenization") + } + + if tc.vestingAmount.IsPositive() { + acc := accountKeeper.GetAccount(ctx, addrAcc2) + vestingAcc := acc.(vesting.VestingAccount) + require.Equal(t, vestingAcc.GetDelegatedVesting().AmountOf(stakingKeeper.BondDenom(ctx)).String(), tc.targetVestingDelAfterShare.String()) + } + + if tc.prevAccountDelegationExists { + _, found = stakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) + require.True(t, found, "delegation found after partial tokenize share") + } else { + _, found = stakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) + require.False(t, found, "delegation found after full tokenize share") + } + + shareToken := bankKeeper.GetBalance(ctx, delegatorAccount, resp.Amount.Denom) + require.Equal(t, resp.Amount, shareToken) + _, found = stakingKeeper.GetValidator(ctx, addrVal1) + require.True(t, found, true, "validator not found") + + records := stakingKeeper.GetAllTokenizeShareRecords(ctx) + require.Len(t, records, 1) + delegation, found := stakingKeeper.GetDelegation(ctx, records[0].GetModuleAddress(), addrVal1) + require.True(t, found, "delegation not found from tokenize share module account after tokenize share") + + // slash before redeem + slashedTokens := sdk.ZeroInt() + redeemedShares := tc.redeemAmount + redeemedTokens := tc.redeemAmount + if tc.slashFactor.IsPositive() { + consAddr, err := val1.GetConsAddr() + require.NoError(t, err) + ctx = ctx.WithBlockHeight(100) + val1, found = stakingKeeper.GetValidator(ctx, addrVal1) + require.True(t, found) + power := stakingKeeper.TokensToConsensusPower(ctx, val1.Tokens) + stakingKeeper.Slash(ctx, consAddr, 10, power, tc.slashFactor) + slashedTokens = sdk.NewDecFromInt(val1.Tokens).Mul(tc.slashFactor).TruncateInt() + + val1, _ := stakingKeeper.GetValidator(ctx, addrVal1) + redeemedTokens = val1.TokensFromShares(sdk.NewDecFromInt(redeemedShares)).TruncateInt() + } + + // get delegator balance and delegation + bondDenomAmountBefore := bankKeeper.GetBalance(ctx, delegatorAccount, stakingKeeper.BondDenom(ctx)) + val1, found = stakingKeeper.GetValidator(ctx, addrVal1) + require.True(t, found) + delegation, found = stakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) + if !found { + delegation = types.Delegation{Shares: sdk.ZeroDec()} + } + delAmountBefore := val1.TokensFromShares(delegation.Shares) + oldValidator, found = stakingKeeper.GetValidator(ctx, addrVal1) + require.True(t, found) + + _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ + DelegatorAddress: delegatorAccount.String(), + Amount: sdk.NewCoin(resp.Amount.Denom, tc.redeemAmount), + }) + if tc.expRedeemErr { + require.Error(t, err) + return + } + require.NoError(t, err) + + // ensure validator's total tokens is consistent + newValidator, found = stakingKeeper.GetValidator(ctx, addrVal1) + require.True(t, found) + require.Equal(t, oldValidator.Tokens, newValidator.Tokens) + + // if the delegator was not a liquid staking provider, check that the total liquid staked + // and liquid shares decreased + totalLiquidTokensAfterRedemption := stakingKeeper.GetTotalLiquidStakedTokens(ctx) + validatorLiquidSharesAfterRedemption := newValidator.LiquidShares + expectedLiquidTokens := totalLiquidTokensAfterTokenization.Sub(redeemedTokens).Sub(slashedTokens) + expectedLiquidShares := validatorLiquidSharesAfterTokenization.Sub(sdk.NewDecFromInt(redeemedShares)) + if !tc.delegatorIsLSTP { + require.Equal(t, expectedLiquidTokens.String(), totalLiquidTokensAfterRedemption.String(), "total liquid tokens after redemption") + require.Equal(t, expectedLiquidShares.String(), validatorLiquidSharesAfterRedemption.String(), "validator liquid shares after tokenization") + } else { + require.True(t, totalLiquidTokensAfterRedemption.IsZero(), "zero liquid tokens after redemption") + require.True(t, validatorLiquidSharesAfterRedemption.IsZero(), "zero liquid validator shares after redemption") + } + + if tc.vestingAmount.IsPositive() { + acc := accountKeeper.GetAccount(ctx, addrAcc2) + vestingAcc := acc.(vesting.VestingAccount) + require.Equal(t, vestingAcc.GetDelegatedVesting().AmountOf(stakingKeeper.BondDenom(ctx)).String(), tc.targetVestingDelAfterRedeem.String()) + } + + expectedDelegatedShares := sdk.NewDecFromInt(tc.delegationAmount.Sub(tc.tokenizeShareAmount).Add(tc.redeemAmount)) + delegation, found = stakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) + require.True(t, found, "delegation not found after redeem tokens") + require.Equal(t, delegatorAccount.String(), delegation.DelegatorAddress) + require.Equal(t, addrVal1.String(), delegation.ValidatorAddress) + require.Equal(t, expectedDelegatedShares, delegation.Shares, "delegation shares after redeem") + + // check delegator balance is not changed + bondDenomAmountAfter := bankKeeper.GetBalance(ctx, delegatorAccount, stakingKeeper.BondDenom(ctx)) + require.Equal(t, bondDenomAmountAfter.Amount.String(), bondDenomAmountBefore.Amount.String()) + + // get delegation amount is changed correctly + val1, found = stakingKeeper.GetValidator(ctx, addrVal1) + require.True(t, found) + delegation, found = stakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1) + if !found { + delegation = types.Delegation{Shares: sdk.ZeroDec()} + } + delAmountAfter := val1.TokensFromShares(delegation.Shares) + require.Equal(t, delAmountAfter.String(), delAmountBefore.Add(sdk.NewDecFromInt(tc.redeemAmount).Mul(sdk.OneDec().Sub(tc.slashFactor))).String()) + + shareToken = bankKeeper.GetBalance(ctx, delegatorAccount, resp.Amount.Denom) + require.Equal(t, shareToken.Amount.String(), tc.tokenizeShareAmount.Sub(tc.redeemAmount).String()) + _, found = stakingKeeper.GetValidator(ctx, addrVal1) + require.True(t, found, true, "validator not found") + + if tc.recordAccountDelegationExists { + _, found = stakingKeeper.GetDelegation(ctx, records[0].GetModuleAddress(), addrVal1) + require.True(t, found, "delegation not found from tokenize share module account after redeem partial amount") + + records = stakingKeeper.GetAllTokenizeShareRecords(ctx) + require.Len(t, records, 1) + } else { + _, found = stakingKeeper.GetDelegation(ctx, records[0].GetModuleAddress(), addrVal1) + require.False(t, found, "delegation found from tokenize share module account after redeem full amount") + + records = stakingKeeper.GetAllTokenizeShareRecords(ctx) + require.Len(t, records, 0) + } + }) + } } -// TODO refactor LSM test -// // Helper function to setup a delegator and validator for the Tokenize/Redeem conversion tests func setupTestTokenizeAndRedeemConversion( t *testing.T, - app *simapp.SimApp, + sk keeper.Keeper, + bk bankkeeper.Keeper, ctx sdk.Context, ) (delAddress sdk.AccAddress, valAddress sdk.ValAddress) { - // addresses := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1_000_000)) - // pubKeys := simapp.CreateTestPubKeys(1) + addresses := simtestutil.AddTestAddrs(bk, sk, ctx, 2, sdk.NewInt(1_000_000)) - // delegatorAddress := addresses[0] - // validatorAddress := sdk.ValAddress(addresses[1]) + pubKeys := simtestutil.CreateTestPubKeys(1) - // validator := stakingtypes.NewValidator(validatorAddress, pubKeys[0], stakingtypes.Description{}) - // validator.DelegatorShares = sdk.NewDec(1_000_000) - // validator.Tokens = sdk.NewInt(1_000_000) - // validator.LiquidShares = sdk.NewDec(0) - // validator.Status = types.Bonded + delegatorAddress := addresses[0] + validatorAddress := sdk.ValAddress(addresses[1]) + + validator, err := stakingtypes.NewValidator(validatorAddress, pubKeys[0], stakingtypes.Description{}) + require.NoError(t, err) + validator.DelegatorShares = sdk.NewDec(1_000_000) + validator.Tokens = sdk.NewInt(1_000_000) + validator.LiquidShares = sdk.NewDec(0) + validator.Status = types.Bonded - // app.StakingKeeper.SetValidator(ctx, validator) - // app.StakingKeeper.SetValidatorByConsAddr(ctx, validator) + sk.SetValidator(ctx, validator) + sk.SetValidatorByConsAddr(ctx, validator) - // return delegatorAddress, validatorAddress - return + return delegatorAddress, validatorAddress } -// TODO refactor LSM test -// // Simulate a slash by decrementing the validator's tokens // We'll do this in a way such that the exchange rate is not an even integer // and the shares associated with a delegation will have a long decimal -func simulateSlashWithImprecision(t *testing.T, app *simapp.SimApp, ctx sdk.Context, valAddress sdk.ValAddress) { - // validator, found := app.StakingKeeper.GetValidator(ctx, valAddress) - // require.True(t, found) +func simulateSlashWithImprecision(t *testing.T, sk keeper.Keeper, ctx sdk.Context, valAddress sdk.ValAddress) { + validator, found := sk.GetValidator(ctx, valAddress) + require.True(t, found) - // slashMagnitude := sdk.MustNewDecFromStr("0.1111111111") - // slashTokens := validator.Tokens.ToDec().Mul(slashMagnitude).TruncateInt() - // validator.Tokens = validator.Tokens.Sub(slashTokens) + slashMagnitude := sdk.MustNewDecFromStr("0.1111111111") + slashTokens := sdk.NewDecFromInt(validator.Tokens).Mul(slashMagnitude).TruncateInt() + validator.Tokens = validator.Tokens.Sub(slashTokens) - // app.StakingKeeper.SetValidator(ctx, validator) + sk.SetValidator(ctx, validator) } -// TODO refactor LSM test // Tests the conversion from tokenization and redemption from the following scenario: // Slash -> Delegate -> Tokenize -> Redeem // Note, in this example, there 2 tokens are lost during the decimal to int conversion // during the unbonding step within tokenization and redemption func TestTokenizeAndRedeemConversion_SlashBeforeDelegation(t *testing.T) { - // app := simapp.Setup(t, false) - // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - - // delegatorAddress, validatorAddress := setupTestTokenizeAndRedeemConversion(t, app, ctx) - - // // slash the validator - // simulateSlashWithImprecision(t, app, ctx, validatorAddress) - // validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddress) - // require.True(t, found) - - // // Delegate and confirm the delegation record was created - // delegateAmount := sdk.NewInt(1000) - // delegateCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegateAmount) - // _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAddress.String(), - // Amount: delegateCoin, - // }) - // require.NoError(t, err, "no error expected when delegating") - - // delegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) - // require.True(t, found, "delegation should have been found") - - // // Tokenize the full delegation amount - // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAddress.String(), - // Amount: delegateCoin, - // TokenizedShareOwner: delegatorAddress.String(), - // }) - // require.NoError(t, err, "no error expected when tokenizing") - - // // Confirm the number of shareTokens equals the number of shares truncated - // // Note: 1 token is lost during unbonding due to rounding - // shareDenom := validatorAddress.String() + "/1" - // shareToken := app.BankKeeper.GetBalance(ctx, delegatorAddress, shareDenom) - // expectedShareTokens := delegation.Shares.TruncateInt().Int64() - 1 // 1 token was lost during unbonding - // require.Equal(t, expectedShareTokens, shareToken.Amount.Int64(), "share token amount") + _, app, ctx := createTestInput(t) + var ( + stakingKeeper = app.StakingKeeper + bankKeeper = app.BankKeeper + ) + msgServer := keeper.NewMsgServerImpl(stakingKeeper) + delegatorAddress, validatorAddress := setupTestTokenizeAndRedeemConversion(t, *stakingKeeper, bankKeeper, ctx) - // // Redeem the share tokens - // _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ - // DelegatorAddress: delegatorAddress.String(), - // Amount: shareToken, - // }) - // require.NoError(t, err, "no error expected when redeeming") - - // // Confirm (almost) the full delegation was recovered - minus the 2 tokens from the precision error - // // (1 occurs during tokenization, and 1 occurs during redemption) - // newDelegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) - // require.True(t, found) - - // endDelegationTokens := validator.TokensFromShares(newDelegation.Shares).TruncateInt().Int64() - // expectedDelegationTokens := delegateAmount.Int64() - 2 - // require.Equal(t, expectedDelegationTokens, endDelegationTokens, "final delegation tokens") + // slash the validator + simulateSlashWithImprecision(t, *stakingKeeper, ctx, validatorAddress) + validator, found := stakingKeeper.GetValidator(ctx, validatorAddress) + require.True(t, found) + + // Delegate and confirm the delegation record was created + delegateAmount := sdk.NewInt(1000) + delegateCoin := sdk.NewCoin(stakingKeeper.BondDenom(ctx), delegateAmount) + _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAddress.String(), + Amount: delegateCoin, + }) + require.NoError(t, err, "no error expected when delegating") + + delegation, found := stakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + require.True(t, found, "delegation should have been found") + + // Tokenize the full delegation amount + _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAddress.String(), + Amount: delegateCoin, + TokenizedShareOwner: delegatorAddress.String(), + }) + require.NoError(t, err, "no error expected when tokenizing") + + // Confirm the number of shareTokens equals the number of shares truncated + // Note: 1 token is lost during unbonding due to rounding + shareDenom := validatorAddress.String() + "/1" + shareToken := bankKeeper.GetBalance(ctx, delegatorAddress, shareDenom) + expectedShareTokens := delegation.Shares.TruncateInt().Int64() - 1 // 1 token was lost during unbonding + require.Equal(t, expectedShareTokens, shareToken.Amount.Int64(), "share token amount") + + // Redeem the share tokens + _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ + DelegatorAddress: delegatorAddress.String(), + Amount: shareToken, + }) + require.NoError(t, err, "no error expected when redeeming") + + // Confirm (almost) the full delegation was recovered - minus the 2 tokens from the precision error + // (1 occurs during tokenization, and 1 occurs during redemption) + newDelegation, found := stakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + require.True(t, found) + + endDelegationTokens := validator.TokensFromShares(newDelegation.Shares).TruncateInt().Int64() + expectedDelegationTokens := delegateAmount.Int64() - 2 + require.Equal(t, expectedDelegationTokens, endDelegationTokens, "final delegation tokens") } -// TODO refactor LSM test -// // Tests the conversion from tokenization and redemption from the following scenario: // Delegate -> Slash -> Tokenize -> Redeem // Note, in this example, there 1 token lost during the decimal to int conversion // during the unbonding step within tokenization func TestTokenizeAndRedeemConversion_SlashBeforeTokenization(t *testing.T) { - // app := simapp.Setup(t, false) - // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - - // delegatorAddress, validatorAddress := setupTestTokenizeAndRedeemConversion(t, app, ctx) - - // // Delegate and confirm the delegation record was created - // delegateAmount := sdk.NewInt(1000) - // delegateCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegateAmount) - // _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAddress.String(), - // Amount: delegateCoin, - // }) - // require.NoError(t, err, "no error expected when delegating") - - // _, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) - // require.True(t, found, "delegation should have been found") - - // // slash the validator - // simulateSlashWithImprecision(t, app, ctx, validatorAddress) - // validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddress) - // require.True(t, found) - - // // Tokenize the new amount after the slash - // delegationAmountAfterSlash := validator.TokensFromShares(delegateAmount.ToDec()).TruncateInt() - // tokenizationCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegationAmountAfterSlash) - - // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAddress.String(), - // Amount: tokenizationCoin, - // TokenizedShareOwner: delegatorAddress.String(), - // }) - // require.NoError(t, err, "no error expected when tokenizing") - - // // The number of share tokens should line up with the **new** number of shares associated - // // with the original delegated amount - // // Note: 1 token is lost during unbonding due to rounding - // shareDenom := validatorAddress.String() + "/1" - // shareToken := app.BankKeeper.GetBalance(ctx, delegatorAddress, shareDenom) - // expectedShareTokens, err := validator.SharesFromTokens(tokenizationCoin.Amount) - // require.Equal(t, expectedShareTokens.TruncateInt().Int64()-1, shareToken.Amount.Int64(), "share token amount") - - // // // Redeem the share tokens - // _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ - // DelegatorAddress: delegatorAddress.String(), - // Amount: shareToken, - // }) - // require.NoError(t, err, "no error expected when redeeming") - - // // Confirm the full tokenization amount was recovered - minus the 1 token from the precision error - // newDelegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) - // require.True(t, found) - - // endDelegationTokens := validator.TokensFromShares(newDelegation.Shares).TruncateInt().Int64() - // expectedDelegationTokens := delegationAmountAfterSlash.Int64() - 1 - // require.Equal(t, expectedDelegationTokens, endDelegationTokens, "final delegation tokens") + _, app, ctx := createTestInput(t) + var ( + stakingKeeper = app.StakingKeeper + bankKeeper = app.BankKeeper + ) + msgServer := keeper.NewMsgServerImpl(stakingKeeper) + delegatorAddress, validatorAddress := setupTestTokenizeAndRedeemConversion(t, *stakingKeeper, bankKeeper, ctx) + + // Delegate and confirm the delegation record was created + delegateAmount := sdk.NewInt(1000) + delegateCoin := sdk.NewCoin(stakingKeeper.BondDenom(ctx), delegateAmount) + _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAddress.String(), + Amount: delegateCoin, + }) + require.NoError(t, err, "no error expected when delegating") + + _, found := stakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + require.True(t, found, "delegation should have been found") + + // slash the validator + simulateSlashWithImprecision(t, *stakingKeeper, ctx, validatorAddress) + validator, found := stakingKeeper.GetValidator(ctx, validatorAddress) + require.True(t, found) + + // Tokenize the new amount after the slash + delegationAmountAfterSlash := validator.TokensFromShares(sdk.NewDecFromInt(delegateAmount)).TruncateInt() + tokenizationCoin := sdk.NewCoin(stakingKeeper.BondDenom(ctx), delegationAmountAfterSlash) + + _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAddress.String(), + Amount: tokenizationCoin, + TokenizedShareOwner: delegatorAddress.String(), + }) + require.NoError(t, err, "no error expected when tokenizing") + + // The number of share tokens should line up with the **new** number of shares associated + // with the original delegated amount + // Note: 1 token is lost during unbonding due to rounding + shareDenom := validatorAddress.String() + "/1" + shareToken := bankKeeper.GetBalance(ctx, delegatorAddress, shareDenom) + expectedShareTokens, err := validator.SharesFromTokens(tokenizationCoin.Amount) + require.Equal(t, expectedShareTokens.TruncateInt().Int64()-1, shareToken.Amount.Int64(), "share token amount") + + // // Redeem the share tokens + _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ + DelegatorAddress: delegatorAddress.String(), + Amount: shareToken, + }) + require.NoError(t, err, "no error expected when redeeming") + + // Confirm the full tokenization amount was recovered - minus the 1 token from the precision error + newDelegation, found := stakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + require.True(t, found) + + endDelegationTokens := validator.TokensFromShares(newDelegation.Shares).TruncateInt().Int64() + expectedDelegationTokens := delegationAmountAfterSlash.Int64() - 1 + require.Equal(t, expectedDelegationTokens, endDelegationTokens, "final delegation tokens") } -// TODO refactor LSM test -// // Tests the conversion from tokenization and redemption from the following scenario: // Delegate -> Tokenize -> Slash -> Redeem // Note, in this example, there 1 token lost during the decimal to int conversion // during the unbonding step within redemption -func TestTokenizeAndRedeemConversion_SlashBeforeRedemptino(t *testing.T) { - // app := simapp.Setup(t, false) - // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - - // delegatorAddress, validatorAddress := setupTestTokenizeAndRedeemConversion(t, app, ctx) - - // // Delegate and confirm the delegation record was created - // delegateAmount := sdk.NewInt(1000) - // delegateCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegateAmount) - // _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAddress.String(), - // Amount: delegateCoin, - // }) - // require.NoError(t, err, "no error expected when delegating") - - // _, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) - // require.True(t, found, "delegation should have been found") - - // // Tokenize the full delegation amount - // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAddress.String(), - // Amount: delegateCoin, - // TokenizedShareOwner: delegatorAddress.String(), - // }) - // require.NoError(t, err, "no error expected when tokenizing") - - // // The number of share tokens should line up 1:1 with the number of issued shares - // // Since the validator has not been slashed, the shares also line up 1;1 - // // with the original delegation amount - // shareDenom := validatorAddress.String() + "/1" - // shareToken := app.BankKeeper.GetBalance(ctx, delegatorAddress, shareDenom) - // expectedShareTokens := delegateAmount - // require.Equal(t, expectedShareTokens.Int64(), shareToken.Amount.Int64(), "share token amount") - - // // slash the validator - // simulateSlashWithImprecision(t, app, ctx, validatorAddress) - // validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddress) - // require.True(t, found) +func TestTokenizeAndRedeemConversion_SlashBeforeRedemption(t *testing.T) { + _, app, ctx := createTestInput(t) + var ( + stakingKeeper = app.StakingKeeper + bankKeeper = app.BankKeeper + ) + msgServer := keeper.NewMsgServerImpl(stakingKeeper) + delegatorAddress, validatorAddress := setupTestTokenizeAndRedeemConversion(t, *stakingKeeper, bankKeeper, ctx) + + // Delegate and confirm the delegation record was created + delegateAmount := sdk.NewInt(1000) + delegateCoin := sdk.NewCoin(stakingKeeper.BondDenom(ctx), delegateAmount) + _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAddress.String(), + Amount: delegateCoin, + }) + require.NoError(t, err, "no error expected when delegating") + + _, found := stakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + require.True(t, found, "delegation should have been found") + + // Tokenize the full delegation amount + _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAddress.String(), + Amount: delegateCoin, + TokenizedShareOwner: delegatorAddress.String(), + }) + require.NoError(t, err, "no error expected when tokenizing") + + // The number of share tokens should line up 1:1 with the number of issued shares + // Since the validator has not been slashed, the shares also line up 1;1 + // with the original delegation amount + shareDenom := validatorAddress.String() + "/1" + shareToken := bankKeeper.GetBalance(ctx, delegatorAddress, shareDenom) + expectedShareTokens := delegateAmount + require.Equal(t, expectedShareTokens.Int64(), shareToken.Amount.Int64(), "share token amount") + + // slash the validator + simulateSlashWithImprecision(t, *stakingKeeper, ctx, validatorAddress) + validator, found := stakingKeeper.GetValidator(ctx, validatorAddress) + require.True(t, found) - // // Redeem the share tokens - // _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ - // DelegatorAddress: delegatorAddress.String(), - // Amount: shareToken, - // }) - // require.NoError(t, err, "no error expected when redeeming") - - // // Confirm the original delegation, minus the slash, was recovered - // // There's an additional 1 token lost from precision error during unbonding - // delegationAmountAfterSlash := validator.TokensFromShares(delegateAmount.ToDec()).TruncateInt().Int64() - // newDelegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) - // require.True(t, found) - - // endDelegationTokens := validator.TokensFromShares(newDelegation.Shares).TruncateInt().Int64() - // require.Equal(t, delegationAmountAfterSlash-1, endDelegationTokens, "final delegation tokens") + // Redeem the share tokens + _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ + DelegatorAddress: delegatorAddress.String(), + Amount: shareToken, + }) + require.NoError(t, err, "no error expected when redeeming") + + // Confirm the original delegation, minus the slash, was recovered + // There's an additional 1 token lost from precision error during unbonding + delegationAmountAfterSlash := validator.TokensFromShares(sdk.NewDecFromInt(delegateAmount)).TruncateInt().Int64() + newDelegation, found := stakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + require.True(t, found) + + endDelegationTokens := validator.TokensFromShares(newDelegation.Shares).TruncateInt().Int64() + require.Equal(t, delegationAmountAfterSlash-1, endDelegationTokens, "final delegation tokens") } -// TODO refactor LSM test func TestTransferTokenizeShareRecord(t *testing.T) { - // app := simapp.Setup(t, false) - // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - - // addrs := simapp.AddTestAddrs(app, ctx, 3, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) - // addrAcc1, addrAcc2, valAcc := addrs[0], addrs[1], addrs[2] - // addrVal := sdk.ValAddress(valAcc) - - // pubKeys := simapp.CreateTestPubKeys(1) - // pk := pubKeys[0] - - // val := stakingtypes.NewValidator(addrVal, pk, stakingtypes.Description{}) - // app.StakingKeeper.SetValidator(ctx, val) - // app.StakingKeeper.SetValidatorByPowerIndex(ctx, val) - - // // apply TM updates - // applyValidatorSetUpdates(t, ctx, app.StakingKeeper, -1) - - // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - - // err := app.StakingKeeper.AddTokenizeShareRecord(ctx, types.TokenizeShareRecord{ - // Id: 1, - // Owner: addrAcc1.String(), - // ModuleAccount: "module_account", - // Validator: val.String(), - // }) - // require.NoError(t, err) - - // _, err = msgServer.TransferTokenizeShareRecord(sdk.WrapSDKContext(ctx), &types.MsgTransferTokenizeShareRecord{ - // TokenizeShareRecordId: 1, - // Sender: addrAcc1.String(), - // NewOwner: addrAcc2.String(), - // }) - // require.NoError(t, err) - - // record, err := app.StakingKeeper.GetTokenizeShareRecord(ctx, 1) - // require.NoError(t, err) - // require.Equal(t, record.Owner, addrAcc2.String()) - - // records := app.StakingKeeper.GetTokenizeShareRecordsByOwner(ctx, addrAcc1) - // require.Len(t, records, 0) - // records = app.StakingKeeper.GetTokenizeShareRecordsByOwner(ctx, addrAcc2) - // require.Len(t, records, 1) + var ( + bankKeeper bankkeeper.Keeper + stakingKeeper *keeper.Keeper + ) + app, err := simtestutil.Setup(testutil.AppConfig, + &bankKeeper, + &stakingKeeper, + ) + require.NoError(t, err) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + msgServer := keeper.NewMsgServerImpl(stakingKeeper) + + addrs := simtestutil.AddTestAddrs(bankKeeper, stakingKeeper, ctx, 3, stakingKeeper.TokensFromConsensusPower(ctx, 10000)) + addrAcc1, addrAcc2, valAcc := addrs[0], addrs[1], addrs[2] + addrVal := sdk.ValAddress(valAcc) + + pubKeys := simtestutil.CreateTestPubKeys(1) + pk := pubKeys[0] + + val, err := stakingtypes.NewValidator(addrVal, pk, stakingtypes.Description{}) + require.NoError(t, err) + + stakingKeeper.SetValidator(ctx, val) + stakingKeeper.SetValidatorByPowerIndex(ctx, val) + + // apply TM updates + applyValidatorSetUpdates(t, ctx, stakingKeeper, -1) + + err = stakingKeeper.AddTokenizeShareRecord(ctx, types.TokenizeShareRecord{ + Id: 1, + Owner: addrAcc1.String(), + ModuleAccount: "module_account", + Validator: val.String(), + }) + require.NoError(t, err) + + _, err = msgServer.TransferTokenizeShareRecord(sdk.WrapSDKContext(ctx), &types.MsgTransferTokenizeShareRecord{ + TokenizeShareRecordId: 1, + Sender: addrAcc1.String(), + NewOwner: addrAcc2.String(), + }) + require.NoError(t, err) + + record, err := stakingKeeper.GetTokenizeShareRecord(ctx, 1) + require.NoError(t, err) + require.Equal(t, record.Owner, addrAcc2.String()) + + records := stakingKeeper.GetTokenizeShareRecordsByOwner(ctx, addrAcc1) + require.Len(t, records, 0) + records = stakingKeeper.GetTokenizeShareRecordsByOwner(ctx, addrAcc2) + require.Len(t, records, 1) } -// TODO refactor LSM test func TestValidatorBond(t *testing.T) { - // app := simapp.Setup(t, false) - // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - - // testCases := []struct { - // name string - // createValidator bool - // createDelegation bool - // alreadyValidatorBond bool - // delegatorIsLSTP bool - // expectedErr error - // }{ - // { - // name: "successful validator bond", - // createValidator: true, - // createDelegation: true, - // alreadyValidatorBond: false, - // delegatorIsLSTP: false, - // }, - // { - // name: "successful with existing validator bond", - // createValidator: true, - // createDelegation: true, - // alreadyValidatorBond: true, - // delegatorIsLSTP: false, - // }, - // { - // name: "validator does not not exist", - // createValidator: false, - // createDelegation: false, - // alreadyValidatorBond: false, - // delegatorIsLSTP: false, - // expectedErr: sdkstaking.ErrNoValidatorFound, - // }, - // { - // name: "delegation not exist case", - // createValidator: true, - // createDelegation: false, - // alreadyValidatorBond: false, - // delegatorIsLSTP: false, - // expectedErr: sdkstaking.ErrNoDelegation, - // }, - // { - // name: "delegator is a liquid staking provider", - // createValidator: true, - // createDelegation: true, - // alreadyValidatorBond: false, - // delegatorIsLSTP: true, - // expectedErr: types.ErrValidatorBondNotAllowedFromModuleAccount, - // }, - // } - - // for _, tc := range testCases { - // t.Run(tc.name, func(t *testing.T) { - // _, app, ctx = createTestInput() - - // pubKeys := simapp.CreateTestPubKeys(2) - // validatorPubKey := pubKeys[0] - // delegatorPubKey := pubKeys[1] - - // delegatorAddress := sdk.AccAddress(delegatorPubKey.Address()) - // validatorAddress := sdk.ValAddress(validatorPubKey.Address()) - // icaAccountAddress := createICAAccount(app, ctx) - - // // Set the delegator address to either be a user account or an ICA account depending on the test case - // if tc.delegatorIsLSTP { - // delegatorAddress = icaAccountAddress - // } - - // // Fund the delegator - // delegationAmount := app.StakingKeeper.TokensFromConsensusPower(ctx, 20) - // coins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegationAmount)) - - // err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, coins) - // require.NoError(t, err, "no error expected when minting") - - // err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, delegatorAddress, coins) - // require.NoError(t, err, "no error expected when funding account") - - // // Create Validator and delegation - // if tc.createValidator { - // validator := stakingtypes.NewValidator(validatorAddress, validatorPubKey, stakingtypes.Description{}) - // validator.Status = sdkstaking.Bonded - // app.StakingKeeper.SetValidator(ctx, validator) - // app.StakingKeeper.SetValidatorByPowerIndex(ctx, validator) - // err = app.StakingKeeper.SetValidatorByConsAddr(ctx, validator) - // require.NoError(t, err) - - // // Optionally create the delegation, depending on the test case - // if tc.createDelegation { - // _, err = app.StakingKeeper.Delegate(ctx, delegatorAddress, delegationAmount, sdkstaking.Unbonded, validator, true) - // require.NoError(t, err, "no error expected when delegating") - - // // Optionally, convert the delegation into a validator bond - // if tc.alreadyValidatorBond { - // delegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) - // require.True(t, found, "delegation should have been found") - - // delegation.ValidatorBond = true - // app.StakingKeeper.SetDelegation(ctx, delegation) - // } - // } - // } - - // // Call ValidatorBond - // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - // _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAddress.String(), - // }) - - // if tc.expectedErr != nil { - // require.ErrorContains(t, err, tc.expectedErr.Error()) - // } else { - // require.NoError(t, err, "no error expected from validator bond transaction") - - // // check validator bond true - // delegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) - // require.True(t, found, "delegation should have been found after validator bond") - // require.True(t, delegation.ValidatorBond, "delegation should be marked as a validator bond") - - // // check validator bond shares - // validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddress) - // require.True(t, found, "validator should have been found after validator bond") - - // if tc.alreadyValidatorBond { - // require.True(t, validator.ValidatorBondShares.IsZero(), "validator bond shares should still be zero") - // } else { - // require.Equal(t, delegation.Shares.String(), validator.ValidatorBondShares.String(), - // "validator total shares should have increased") - // } - // } - // }) - // } + testCases := []struct { + name string + createValidator bool + createDelegation bool + alreadyValidatorBond bool + delegatorIsLSTP bool + expectedErr error + }{ + { + name: "successful validator bond", + createValidator: true, + createDelegation: true, + alreadyValidatorBond: false, + delegatorIsLSTP: false, + }, + { + name: "successful with existing validator bond", + createValidator: true, + createDelegation: true, + alreadyValidatorBond: true, + delegatorIsLSTP: false, + }, + { + name: "validator does not not exist", + createValidator: false, + createDelegation: false, + alreadyValidatorBond: false, + delegatorIsLSTP: false, + expectedErr: stakingtypes.ErrNoValidatorFound, + }, + { + name: "delegation not exist case", + createValidator: true, + createDelegation: false, + alreadyValidatorBond: false, + delegatorIsLSTP: false, + expectedErr: stakingtypes.ErrNoDelegation, + }, + { + name: "delegator is a liquid staking provider", + createValidator: true, + createDelegation: true, + alreadyValidatorBond: false, + delegatorIsLSTP: true, + expectedErr: types.ErrValidatorBondNotAllowedFromModuleAccount, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + _, app, ctx := createTestInput(t) + var ( + accountKeeper = app.AccountKeeper + stakingKeeper = app.StakingKeeper + bankKeeper = app.BankKeeper + ) + pubKeys := simtestutil.CreateTestPubKeys(2) + + validatorPubKey := pubKeys[0] + delegatorPubKey := pubKeys[1] + + delegatorAddress := sdk.AccAddress(delegatorPubKey.Address()) + validatorAddress := sdk.ValAddress(validatorPubKey.Address()) + icaAccountAddress := createICAAccount(ctx, accountKeeper) + + // Set the delegator address to either be a user account or an ICA account depending on the test case + if tc.delegatorIsLSTP { + delegatorAddress = icaAccountAddress + } + + // Fund the delegator + delegationAmount := stakingKeeper.TokensFromConsensusPower(ctx, 20) + coins := sdk.NewCoins(sdk.NewCoin(stakingKeeper.BondDenom(ctx), delegationAmount)) + + err := bankKeeper.MintCoins(ctx, minttypes.ModuleName, coins) + require.NoError(t, err, "no error expected when minting") + + err = bankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, delegatorAddress, coins) + require.NoError(t, err, "no error expected when funding account") + + // Create Validator and delegation + if tc.createValidator { + validator, err := stakingtypes.NewValidator(validatorAddress, validatorPubKey, stakingtypes.Description{}) + require.NoError(t, err) + validator.Status = stakingtypes.Bonded + stakingKeeper.SetValidator(ctx, validator) + stakingKeeper.SetValidatorByPowerIndex(ctx, validator) + err = stakingKeeper.SetValidatorByConsAddr(ctx, validator) + require.NoError(t, err) + + // Optionally create the delegation, depending on the test case + if tc.createDelegation { + _, err = stakingKeeper.Delegate(ctx, delegatorAddress, delegationAmount, stakingtypes.Unbonded, validator, true) + require.NoError(t, err, "no error expected when delegating") + + // Optionally, convert the delegation into a validator bond + if tc.alreadyValidatorBond { + delegation, found := stakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + require.True(t, found, "delegation should have been found") + + delegation.ValidatorBond = true + stakingKeeper.SetDelegation(ctx, delegation) + } + } + } + + // Call ValidatorBond + msgServer := keeper.NewMsgServerImpl(stakingKeeper) + _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAddress.String(), + }) + + if tc.expectedErr != nil { + require.ErrorContains(t, err, tc.expectedErr.Error()) + } else { + require.NoError(t, err, "no error expected from validator bond transaction") + + // check validator bond true + delegation, found := stakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress) + require.True(t, found, "delegation should have been found after validator bond") + require.True(t, delegation.ValidatorBond, "delegation should be marked as a validator bond") + + // check validator bond shares + validator, found := stakingKeeper.GetValidator(ctx, validatorAddress) + require.True(t, found, "validator should have been found after validator bond") + + if tc.alreadyValidatorBond { + require.True(t, validator.ValidatorBondShares.IsZero(), "validator bond shares should still be zero") + } else { + require.Equal(t, delegation.Shares.String(), validator.ValidatorBondShares.String(), + "validator total shares should have increased") + } + } + }) + } } -// TODO refactor LSM test func TestChangeValidatorBond(t *testing.T) { - // app := simapp.Setup(t, false) - // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - - // checkValidatorBondShares := func(validatorAddress sdk.ValAddress, expectedShares sdk.Int) { - // validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddress) - // require.True(t, found, "validator should have been found") - // require.Equal(t, expectedShares.Int64(), validator.ValidatorBondShares.TruncateInt64(), "validator bond shares") - // } - - // // Create a delegator and 3 validators - // addresses := simapp.AddTestAddrs(app, ctx, 4, sdk.NewInt(1_000_000)) - // pubKeys := simapp.CreateTestPubKeys(4) - - // validatorAPubKey := pubKeys[1] - // validatorBPubKey := pubKeys[2] - // validatorCPubKey := pubKeys[3] - - // delegatorAddress := addresses[0] - // validatorAAddress := sdk.ValAddress(validatorAPubKey.Address()) - // validatorBAddress := sdk.ValAddress(validatorBPubKey.Address()) - // validatorCAddress := sdk.ValAddress(validatorCPubKey.Address()) - - // validatorA := stakingtypes.NewValidator(validatorAAddress, validatorAPubKey, stakingtypes.Description{}) - // validatorB := stakingtypes.NewValidator(validatorBAddress, validatorBPubKey, stakingtypes.Description{}) - // validatorC := stakingtypes.NewValidator(validatorCAddress, validatorCPubKey, stakingtypes.Description{}) - - // validatorA.Tokens = sdk.NewInt(1_000_000) - // validatorB.Tokens = sdk.NewInt(1_000_000) - // validatorC.Tokens = sdk.NewInt(1_000_000) - // validatorA.DelegatorShares = sdk.NewDec(1_000_000) - // validatorB.DelegatorShares = sdk.NewDec(1_000_000) - // validatorC.DelegatorShares = sdk.NewDec(1_000_000) - - // app.StakingKeeper.SetValidator(ctx, validatorA) - // app.StakingKeeper.SetValidator(ctx, validatorB) - // app.StakingKeeper.SetValidator(ctx, validatorC) - - // // The test will go through Delegate/Redelegate/Undelegate messages with the following - // delegation1Amount := sdk.NewInt(1000) - // delegation2Amount := sdk.NewInt(1000) - // redelegateAmount := sdk.NewInt(500) - // undelegateAmount := sdk.NewInt(500) - - // delegate1Coin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegation1Amount) - // delegate2Coin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegation2Amount) - // redelegateCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), redelegateAmount) - // undelegateCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), undelegateAmount) - - // // Delegate to validator's A and C - validator bond shares should not change - // _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAAddress.String(), - // Amount: delegate1Coin, - // }) - // require.NoError(t, err, "no error expected during first delegation") - - // _, err = msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorCAddress.String(), - // Amount: delegate1Coin, - // }) - // require.NoError(t, err, "no error expected during first delegation") - - // checkValidatorBondShares(validatorAAddress, sdk.ZeroInt()) - // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) - // checkValidatorBondShares(validatorCAddress, sdk.ZeroInt()) - - // // Flag the the delegations to validator A and C validator bond's - // // Their bond shares should increase - // _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAAddress.String(), - // }) - // require.NoError(t, err, "no error expected during validator bond") - - // _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorCAddress.String(), - // }) - // require.NoError(t, err, "no error expected during validator bond") - - // checkValidatorBondShares(validatorAAddress, delegation1Amount) - // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) - // checkValidatorBondShares(validatorCAddress, delegation1Amount) - - // // Delegate more to validator A - it should increase the validator bond shares - // _, err = msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAAddress.String(), - // Amount: delegate2Coin, - // }) - // require.NoError(t, err, "no error expected during second delegation") - - // checkValidatorBondShares(validatorAAddress, delegation1Amount.Add(delegation2Amount)) - // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) - // checkValidatorBondShares(validatorCAddress, delegation1Amount) - - // // Redelegate partially from A to B (where A is a validator bond and B is not) - // // It should remove the bond shares from A, and B's validator bond shares should not change - // _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorSrcAddress: validatorAAddress.String(), - // ValidatorDstAddress: validatorBAddress.String(), - // Amount: redelegateCoin, - // }) - // require.NoError(t, err, "no error expected during redelegation") - - // expectedBondSharesA := delegation1Amount.Add(delegation2Amount).Sub(redelegateAmount) - // checkValidatorBondShares(validatorAAddress, expectedBondSharesA) - // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) - // checkValidatorBondShares(validatorCAddress, delegation1Amount) - - // // Now redelegate from B to C (where B is not a validator bond, but C is) - // // Validator B's bond shares should remain at zero, but C's bond shares should increase - // _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorSrcAddress: validatorBAddress.String(), - // ValidatorDstAddress: validatorCAddress.String(), - // Amount: redelegateCoin, - // }) - // require.NoError(t, err, "no error expected during redelegation") - - // checkValidatorBondShares(validatorAAddress, expectedBondSharesA) - // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) - // checkValidatorBondShares(validatorCAddress, delegation1Amount.Add(redelegateAmount)) - - // // Redelegate partially from A to C (where C is a validator bond delegation) - // // It should remove the bond shares from A, and increase the bond shares on validator C - // _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorSrcAddress: validatorAAddress.String(), - // ValidatorDstAddress: validatorCAddress.String(), - // Amount: redelegateCoin, - // }) - // require.NoError(t, err, "no error expected during redelegation") - - // expectedBondSharesA = expectedBondSharesA.Sub(redelegateAmount) - // expectedBondSharesC := delegation1Amount.Add(redelegateAmount).Add(redelegateAmount) - // checkValidatorBondShares(validatorAAddress, expectedBondSharesA) - // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) - // checkValidatorBondShares(validatorCAddress, expectedBondSharesC) - - // // Undelegate from validator A - it should remove shares - // _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAAddress.String(), - // Amount: undelegateCoin, - // }) - // require.NoError(t, err, "no error expected during undelegation") - - // expectedBondSharesA = expectedBondSharesA.Sub(undelegateAmount) - // checkValidatorBondShares(validatorAAddress, expectedBondSharesA) - // checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) - // checkValidatorBondShares(validatorCAddress, expectedBondSharesC) + _, app, ctx := createTestInput(t) + var ( + stakingKeeper = app.StakingKeeper + bankKeeper = app.BankKeeper + ) + + checkValidatorBondShares := func(validatorAddress sdk.ValAddress, expectedShares math.Int) { + validator, found := stakingKeeper.GetValidator(ctx, validatorAddress) + require.True(t, found, "validator should have been found") + require.Equal(t, expectedShares.Int64(), validator.ValidatorBondShares.TruncateInt64(), "validator bond shares") + } + + // Create a delegator and 3 validators + addresses := simtestutil.AddTestAddrs(bankKeeper, stakingKeeper, ctx, 4, sdk.NewInt(1_000_000)) + pubKeys := simtestutil.CreateTestPubKeys(4) + + validatorAPubKey := pubKeys[1] + validatorBPubKey := pubKeys[2] + validatorCPubKey := pubKeys[3] + + delegatorAddress := addresses[0] + validatorAAddress := sdk.ValAddress(validatorAPubKey.Address()) + validatorBAddress := sdk.ValAddress(validatorBPubKey.Address()) + validatorCAddress := sdk.ValAddress(validatorCPubKey.Address()) + + validatorA, err := stakingtypes.NewValidator(validatorAAddress, validatorAPubKey, stakingtypes.Description{}) + require.NoError(t, err) + validatorB, err := stakingtypes.NewValidator(validatorBAddress, validatorBPubKey, stakingtypes.Description{}) + require.NoError(t, err) + validatorC, err := stakingtypes.NewValidator(validatorCAddress, validatorCPubKey, stakingtypes.Description{}) + require.NoError(t, err) + + validatorA.Tokens = sdk.NewInt(1_000_000) + validatorB.Tokens = sdk.NewInt(1_000_000) + validatorC.Tokens = sdk.NewInt(1_000_000) + validatorA.DelegatorShares = sdk.NewDec(1_000_000) + validatorB.DelegatorShares = sdk.NewDec(1_000_000) + validatorC.DelegatorShares = sdk.NewDec(1_000_000) + + stakingKeeper.SetValidator(ctx, validatorA) + stakingKeeper.SetValidator(ctx, validatorB) + stakingKeeper.SetValidator(ctx, validatorC) + + // The test will go through Delegate/Redelegate/Undelegate messages with the following + delegation1Amount := sdk.NewInt(1000) + delegation2Amount := sdk.NewInt(1000) + redelegateAmount := sdk.NewInt(500) + undelegateAmount := sdk.NewInt(500) + + delegate1Coin := sdk.NewCoin(stakingKeeper.BondDenom(ctx), delegation1Amount) + delegate2Coin := sdk.NewCoin(stakingKeeper.BondDenom(ctx), delegation2Amount) + redelegateCoin := sdk.NewCoin(stakingKeeper.BondDenom(ctx), redelegateAmount) + undelegateCoin := sdk.NewCoin(stakingKeeper.BondDenom(ctx), undelegateAmount) + + // Delegate to validator's A and C - validator bond shares should not change + msgServer := keeper.NewMsgServerImpl(stakingKeeper) + _, err = msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAAddress.String(), + Amount: delegate1Coin, + }) + require.NoError(t, err, "no error expected during first delegation") + + _, err = msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorCAddress.String(), + Amount: delegate1Coin, + }) + require.NoError(t, err, "no error expected during first delegation") + + checkValidatorBondShares(validatorAAddress, sdk.ZeroInt()) + checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + checkValidatorBondShares(validatorCAddress, sdk.ZeroInt()) + + // Flag the the delegations to validator A and C validator bond's + // Their bond shares should increase + _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAAddress.String(), + }) + require.NoError(t, err, "no error expected during validator bond") + + _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorCAddress.String(), + }) + require.NoError(t, err, "no error expected during validator bond") + + checkValidatorBondShares(validatorAAddress, delegation1Amount) + checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + checkValidatorBondShares(validatorCAddress, delegation1Amount) + + // Delegate more to validator A - it should increase the validator bond shares + _, err = msgServer.Delegate(sdk.WrapSDKContext(ctx), &types.MsgDelegate{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAAddress.String(), + Amount: delegate2Coin, + }) + require.NoError(t, err, "no error expected during second delegation") + + checkValidatorBondShares(validatorAAddress, delegation1Amount.Add(delegation2Amount)) + checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + checkValidatorBondShares(validatorCAddress, delegation1Amount) + + // Redelegate partially from A to B (where A is a validator bond and B is not) + // It should remove the bond shares from A, and B's validator bond shares should not change + _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ + DelegatorAddress: delegatorAddress.String(), + ValidatorSrcAddress: validatorAAddress.String(), + ValidatorDstAddress: validatorBAddress.String(), + Amount: redelegateCoin, + }) + require.NoError(t, err, "no error expected during redelegation") + + expectedBondSharesA := delegation1Amount.Add(delegation2Amount).Sub(redelegateAmount) + checkValidatorBondShares(validatorAAddress, expectedBondSharesA) + checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + checkValidatorBondShares(validatorCAddress, delegation1Amount) + + // Now redelegate from B to C (where B is not a validator bond, but C is) + // Validator B's bond shares should remain at zero, but C's bond shares should increase + _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ + DelegatorAddress: delegatorAddress.String(), + ValidatorSrcAddress: validatorBAddress.String(), + ValidatorDstAddress: validatorCAddress.String(), + Amount: redelegateCoin, + }) + require.NoError(t, err, "no error expected during redelegation") + + checkValidatorBondShares(validatorAAddress, expectedBondSharesA) + checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + checkValidatorBondShares(validatorCAddress, delegation1Amount.Add(redelegateAmount)) + + // Redelegate partially from A to C (where C is a validator bond delegation) + // It should remove the bond shares from A, and increase the bond shares on validator C + _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ + DelegatorAddress: delegatorAddress.String(), + ValidatorSrcAddress: validatorAAddress.String(), + ValidatorDstAddress: validatorCAddress.String(), + Amount: redelegateCoin, + }) + require.NoError(t, err, "no error expected during redelegation") + + expectedBondSharesA = expectedBondSharesA.Sub(redelegateAmount) + expectedBondSharesC := delegation1Amount.Add(redelegateAmount).Add(redelegateAmount) + checkValidatorBondShares(validatorAAddress, expectedBondSharesA) + checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + checkValidatorBondShares(validatorCAddress, expectedBondSharesC) + + // Undelegate from validator A - it should remove shares + _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAAddress.String(), + Amount: undelegateCoin, + }) + require.NoError(t, err, "no error expected during undelegation") + + expectedBondSharesA = expectedBondSharesA.Sub(undelegateAmount) + checkValidatorBondShares(validatorAAddress, expectedBondSharesA) + checkValidatorBondShares(validatorBAddress, sdk.ZeroInt()) + checkValidatorBondShares(validatorCAddress, expectedBondSharesC) } -// TODO refactor LSM test func TestEnableDisableTokenizeShares(t *testing.T) { - // app := simapp.Setup(t, false) - // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - // // Create a delegator and validator - // stakeAmount := sdk.NewInt(1000) - // stakeToken := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), stakeAmount) - - // addresses := simapp.AddTestAddrs(app, ctx, 2, stakeAmount) - // delegatorAddress := addresses[0] - - // pubKeys := simapp.CreateTestPubKeys(1) - // validatorAddress := sdk.ValAddress(addresses[1]) - // validator := stakingtypes.NewValidator(validatorAddress, pubKeys[0], stakingtypes.Description{}) - - // validator.DelegatorShares = sdk.NewDec(1_000_000) - // validator.Tokens = sdk.NewInt(1_000_000) - // validator.Status = types.Bonded - // app.StakingKeeper.SetValidator(ctx, validator) - - // // Fix block time and set unbonding period to 1 day - // blockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) - // ctx = ctx.WithBlockTime(blockTime) - - // unbondingPeriod := time.Hour * 24 - // params := app.StakingKeeper.GetParams(ctx) - // params.UnbondingTime = unbondingPeriod - // app.StakingKeeper.SetParams(ctx, params) - // unlockTime := blockTime.Add(unbondingPeriod) - - // // Build test messages (some of which will be reused) - // delegateMsg := types.MsgDelegate{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAddress.String(), - // Amount: stakeToken, - // } - // tokenizeMsg := types.MsgTokenizeShares{ - // DelegatorAddress: delegatorAddress.String(), - // ValidatorAddress: validatorAddress.String(), - // Amount: stakeToken, - // TokenizedShareOwner: delegatorAddress.String(), - // } - // redeemMsg := types.MsgRedeemTokensForShares{ - // DelegatorAddress: delegatorAddress.String(), - // } - // disableMsg := types.MsgDisableTokenizeShares{ - // DelegatorAddress: delegatorAddress.String(), - // } - // enableMsg := types.MsgEnableTokenizeShares{ - // DelegatorAddress: delegatorAddress.String(), - // } - - // // Delegate normally - // _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &delegateMsg) - // require.NoError(t, err, "no error expected when delegating") - - // // Tokenize shares - it should succeed - // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg) - // require.NoError(t, err, "no error expected when tokenizing shares for the first time") - - // liquidToken := app.BankKeeper.GetBalance(ctx, delegatorAddress, validatorAddress.String()+"/1") - // require.Equal(t, stakeAmount.Int64(), liquidToken.Amount.Int64(), "user received token after tokenizing share") - - // // Redeem to remove all tokenized shares - // redeemMsg.Amount = liquidToken - // _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &redeemMsg) - // require.NoError(t, err, "no error expected when redeeming") - - // // Attempt to enable tokenizing shares when there is no lock in place, it should error - // _, err = msgServer.EnableTokenizeShares(sdk.WrapSDKContext(ctx), &enableMsg) - // require.ErrorIs(t, err, types.ErrTokenizeSharesAlreadyEnabledForAccount) - - // // Attempt to disable when no lock is in place, it should succeed - // _, err = msgServer.DisableTokenizeShares(sdk.WrapSDKContext(ctx), &disableMsg) - // require.NoError(t, err, "no error expected when disabling tokenization") - - // // Disabling again while the lock is already in place, should error - // _, err = msgServer.DisableTokenizeShares(sdk.WrapSDKContext(ctx), &disableMsg) - // require.ErrorIs(t, err, types.ErrTokenizeSharesAlreadyDisabledForAccount) - - // // Attempt to tokenize, it should fail since tokenization is disabled - // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg) - // require.ErrorIs(t, err, types.ErrTokenizeSharesDisabledForAccount) - - // // Now enable tokenization - // _, err = msgServer.EnableTokenizeShares(sdk.WrapSDKContext(ctx), &enableMsg) - // require.NoError(t, err, "no error expected when enabling tokenization") - - // // Attempt to tokenize again, it should still fail since the unbonding period has - // // not passed and the lock is still active - // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg) - // require.ErrorIs(t, err, types.ErrTokenizeSharesDisabledForAccount) - // require.ErrorContains(t, err, fmt.Sprintf("tokenization will be allowed at %s", - // blockTime.Add(unbondingPeriod))) - - // // Confirm the unlock is queued - // authorizations := app.StakingKeeper.GetPendingTokenizeShareAuthorizations(ctx, unlockTime) - // require.Equal(t, []string{delegatorAddress.String()}, authorizations.Addresses, - // "pending tokenize share authorizations") - - // // Disable tokenization again - it should remove the pending record from the queue - // _, err = msgServer.DisableTokenizeShares(sdk.WrapSDKContext(ctx), &disableMsg) - // require.NoError(t, err, "no error expected when re-enabling tokenization") - - // authorizations = app.StakingKeeper.GetPendingTokenizeShareAuthorizations(ctx, unlockTime) - // require.Empty(t, authorizations.Addresses, "there should be no pending authorizations in the queue") - - // // Enable one more time - // _, err = msgServer.EnableTokenizeShares(sdk.WrapSDKContext(ctx), &enableMsg) - // require.NoError(t, err, "no error expected when enabling tokenization again") - - // // Increment the block time by the unbonding period and remove the expired locks - // ctx = ctx.WithBlockTime(unlockTime) - // app.StakingKeeper.RemoveExpiredTokenizeShareLocks(ctx, ctx.BlockTime()) - - // // Attempt to tokenize again, it should succeed this time since the lock has expired - // _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg) - // require.NoError(t, err, "no error expected when tokenizing after lock has expired") + _, app, ctx := createTestInput(t) + var ( + stakingKeeper = app.StakingKeeper + bankKeeper = app.BankKeeper + ) + // Create a delegator and validator + stakeAmount := sdk.NewInt(1000) + stakeToken := sdk.NewCoin(stakingKeeper.BondDenom(ctx), stakeAmount) + + addresses := simtestutil.AddTestAddrs(bankKeeper, stakingKeeper, ctx, 2, stakeAmount) + delegatorAddress := addresses[0] + + pubKeys := simtestutil.CreateTestPubKeys(1) + validatorAddress := sdk.ValAddress(addresses[1]) + validator, err := stakingtypes.NewValidator(validatorAddress, pubKeys[0], stakingtypes.Description{}) + require.NoError(t, err) + + validator.DelegatorShares = sdk.NewDec(1_000_000) + validator.Tokens = sdk.NewInt(1_000_000) + validator.Status = types.Bonded + stakingKeeper.SetValidator(ctx, validator) + + // Fix block time and set unbonding period to 1 day + blockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) + ctx = ctx.WithBlockTime(blockTime) + + unbondingPeriod := time.Hour * 24 + params := stakingKeeper.GetParams(ctx) + params.UnbondingTime = unbondingPeriod + stakingKeeper.SetParams(ctx, params) + unlockTime := blockTime.Add(unbondingPeriod) + + // Build test messages (some of which will be reused) + delegateMsg := types.MsgDelegate{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAddress.String(), + Amount: stakeToken, + } + tokenizeMsg := types.MsgTokenizeShares{ + DelegatorAddress: delegatorAddress.String(), + ValidatorAddress: validatorAddress.String(), + Amount: stakeToken, + TokenizedShareOwner: delegatorAddress.String(), + } + redeemMsg := types.MsgRedeemTokensForShares{ + DelegatorAddress: delegatorAddress.String(), + } + disableMsg := types.MsgDisableTokenizeShares{ + DelegatorAddress: delegatorAddress.String(), + } + enableMsg := types.MsgEnableTokenizeShares{ + DelegatorAddress: delegatorAddress.String(), + } + + msgServer := keeper.NewMsgServerImpl(stakingKeeper) + // Delegate normally + _, err = msgServer.Delegate(sdk.WrapSDKContext(ctx), &delegateMsg) + require.NoError(t, err, "no error expected when delegating") + + // Tokenize shares - it should succeed + _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg) + require.NoError(t, err, "no error expected when tokenizing shares for the first time") + + liquidToken := bankKeeper.GetBalance(ctx, delegatorAddress, validatorAddress.String()+"/1") + require.Equal(t, stakeAmount.Int64(), liquidToken.Amount.Int64(), "user received token after tokenizing share") + + // Redeem to remove all tokenized shares + redeemMsg.Amount = liquidToken + _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &redeemMsg) + require.NoError(t, err, "no error expected when redeeming") + + // Attempt to enable tokenizing shares when there is no lock in place, it should error + _, err = msgServer.EnableTokenizeShares(sdk.WrapSDKContext(ctx), &enableMsg) + require.ErrorIs(t, err, types.ErrTokenizeSharesAlreadyEnabledForAccount) + + // Attempt to disable when no lock is in place, it should succeed + _, err = msgServer.DisableTokenizeShares(sdk.WrapSDKContext(ctx), &disableMsg) + require.NoError(t, err, "no error expected when disabling tokenization") + + // Disabling again while the lock is already in place, should error + _, err = msgServer.DisableTokenizeShares(sdk.WrapSDKContext(ctx), &disableMsg) + require.ErrorIs(t, err, types.ErrTokenizeSharesAlreadyDisabledForAccount) + + // Attempt to tokenize, it should fail since tokenization is disabled + _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg) + require.ErrorIs(t, err, types.ErrTokenizeSharesDisabledForAccount) + + // Now enable tokenization + _, err = msgServer.EnableTokenizeShares(sdk.WrapSDKContext(ctx), &enableMsg) + require.NoError(t, err, "no error expected when enabling tokenization") + + // Attempt to tokenize again, it should still fail since the unbonding period has + // not passed and the lock is still active + _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg) + require.ErrorIs(t, err, types.ErrTokenizeSharesDisabledForAccount) + require.ErrorContains(t, err, fmt.Sprintf("tokenization will be allowed at %s", + blockTime.Add(unbondingPeriod))) + + // Confirm the unlock is queued + authorizations := stakingKeeper.GetPendingTokenizeShareAuthorizations(ctx, unlockTime) + require.Equal(t, []string{delegatorAddress.String()}, authorizations.Addresses, + "pending tokenize share authorizations") + + // Disable tokenization again - it should remove the pending record from the queue + _, err = msgServer.DisableTokenizeShares(sdk.WrapSDKContext(ctx), &disableMsg) + require.NoError(t, err, "no error expected when re-enabling tokenization") + + authorizations = stakingKeeper.GetPendingTokenizeShareAuthorizations(ctx, unlockTime) + require.Empty(t, authorizations.Addresses, "there should be no pending authorizations in the queue") + + // Enable one more time + _, err = msgServer.EnableTokenizeShares(sdk.WrapSDKContext(ctx), &enableMsg) + require.NoError(t, err, "no error expected when enabling tokenization again") + + // Increment the block time by the unbonding period and remove the expired locks + ctx = ctx.WithBlockTime(unlockTime) + stakingKeeper.RemoveExpiredTokenizeShareLocks(ctx, ctx.BlockTime()) + + // Attempt to tokenize again, it should succeed this time since the lock has expired + _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg) + require.NoError(t, err, "no error expected when tokenizing after lock has expired") } -// TODO refactor LSM test func TestUnbondValidator(t *testing.T) { - // app := simapp.Setup(t, false) - // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - - // addrs := simapp.AddTestAddrs(app, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) - // addrAcc1 := addrs[0] - // addrVal1 := sdk.ValAddress(addrAcc1) - - // pubKeys := simapp.CreateTestPubKeys(1) - // pk1 := pubKeys[0] - - // // Create Validators and Delegation - // val1 := stakingtypes.NewValidator(addrVal1, pk1, stakingtypes.Description{}) - // val1.Status = sdkstaking.Bonded - // app.StakingKeeper.SetValidator(ctx, val1) - // app.StakingKeeper.SetValidatorByPowerIndex(ctx, val1) - // err := app.StakingKeeper.SetValidatorByConsAddr(ctx, val1) - // require.NoError(t, err) - - // // try unbonding not available validator - // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - // _, err = msgServer.UnbondValidator(sdk.WrapSDKContext(ctx), &types.MsgUnbondValidator{ - // ValidatorAddress: sdk.ValAddress(addrs[1]).String(), - // }) - // require.Error(t, err) - - // // unbond validator - // _, err = msgServer.UnbondValidator(sdk.WrapSDKContext(ctx), &types.MsgUnbondValidator{ - // ValidatorAddress: addrVal1.String(), - // }) - // require.NoError(t, err) - - // // check if validator is jailed - // validator, found := app.StakingKeeper.GetValidator(ctx, addrVal1) - // require.True(t, found) - // require.True(t, validator.Jailed) + var ( + bankKeeper bankkeeper.Keeper + stakingKeeper *keeper.Keeper + ) + + app, err := simtestutil.Setup(testutil.AppConfig, + &bankKeeper, + &stakingKeeper, + ) + require.NoError(t, err) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + msgServer := keeper.NewMsgServerImpl(stakingKeeper) + + addrs := simtestutil.AddTestAddrs(bankKeeper, stakingKeeper, ctx, 2, stakingKeeper.TokensFromConsensusPower(ctx, 10000)) + addrAcc1 := addrs[0] + addrVal1 := sdk.ValAddress(addrAcc1) + + pubKeys := simtestutil.CreateTestPubKeys(1) + pk1 := pubKeys[0] + + // Create Validators and Delegation + val1, err := stakingtypes.NewValidator(addrVal1, pk1, stakingtypes.Description{}) + require.NoError(t, err) + val1.Status = stakingtypes.Bonded + stakingKeeper.SetValidator(ctx, val1) + stakingKeeper.SetValidatorByPowerIndex(ctx, val1) + err = stakingKeeper.SetValidatorByConsAddr(ctx, val1) + require.NoError(t, err) + + // try unbonding not available validator + msgServer = keeper.NewMsgServerImpl(stakingKeeper) + _, err = msgServer.UnbondValidator(sdk.WrapSDKContext(ctx), &types.MsgUnbondValidator{ + ValidatorAddress: sdk.ValAddress(addrs[1]).String(), + }) + require.Error(t, err) + + // unbond validator + _, err = msgServer.UnbondValidator(sdk.WrapSDKContext(ctx), &types.MsgUnbondValidator{ + ValidatorAddress: addrVal1.String(), + }) + require.NoError(t, err) + + // check if validator is jailed + validator, found := stakingKeeper.GetValidator(ctx, addrVal1) + require.True(t, found) + require.True(t, validator.Jailed) } -// TODO refactor LSM test -// // TestICADelegateUndelegate tests that an ICA account can undelegate // sequentially right after delegating. func TestICADelegateUndelegate(t *testing.T) { - // app := simapp.Setup(t, false) - // ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - // msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - - // // Create a delegator and validator (the delegator will be an ICA account) - // delegateAmount := sdk.NewInt(1000) - // delegateCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegateAmount) - // icaAccountAddress := createICAAccount(app, ctx) - - // // Fund ICA account - // err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, sdk.NewCoins(delegateCoin)) - // require.NoError(t, err) - // err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, icaAccountAddress, sdk.NewCoins(delegateCoin)) - // require.NoError(t, err) - - // addresses := simapp.AddTestAddrs(app, ctx, 1, sdk.NewInt(0)) - // pubKeys := simapp.CreateTestPubKeys(1) - // validatorAddress := sdk.ValAddress(addresses[0]) - // validator := stakingtypes.NewValidator(validatorAddress, pubKeys[0], stakingtypes.Description{}) - - // validator.DelegatorShares = sdk.NewDec(1_000_000) - // validator.Tokens = sdk.NewInt(1_000_000) - // validator.LiquidShares = sdk.NewDec(0) - // app.StakingKeeper.SetValidator(ctx, validator) - - // delegateMsg := types.MsgDelegate{ - // DelegatorAddress: icaAccountAddress.String(), - // ValidatorAddress: validatorAddress.String(), - // Amount: delegateCoin, - // } - - // undelegateMsg := types.MsgUndelegate{ - // DelegatorAddress: icaAccountAddress.String(), - // ValidatorAddress: validatorAddress.String(), - // Amount: delegateCoin, - // } - - // // Delegate normally - // _, err = msgServer.Delegate(sdk.WrapSDKContext(ctx), &delegateMsg) - // require.NoError(t, err, "no error expected when delegating") - - // // Confirm delegation record - // _, found := app.StakingKeeper.GetDelegation(ctx, icaAccountAddress, validatorAddress) - // require.True(t, found, "delegation should have been found") - - // // Confirm liquid staking totals were incremented - // expectedTotalLiquidStaked := delegateAmount.Int64() - // actualTotalLiquidStaked := app.StakingKeeper.GetTotalLiquidStakedTokens(ctx).Int64() - // require.Equal(t, expectedTotalLiquidStaked, actualTotalLiquidStaked, "total liquid staked tokens after delegation") - - // validator, found = app.StakingKeeper.GetValidator(ctx, validatorAddress) - // require.True(t, found, "validator should have been found") - // require.Equal(t, delegateAmount.ToDec(), validator.LiquidShares, "validator liquid shares after delegation") - - // // Try to undelegate - // _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &undelegateMsg) - // require.NoError(t, err, "no error expected when sequentially undelegating") - - // // Confirm delegation record was removed - // _, found = app.StakingKeeper.GetDelegation(ctx, icaAccountAddress, validatorAddress) - // require.False(t, found, "delegation not have been found") - - // // Confirm liquid staking totals were decremented - // actualTotalLiquidStaked = app.StakingKeeper.GetTotalLiquidStakedTokens(ctx).Int64() - // require.Zero(t, actualTotalLiquidStaked, "total liquid staked tokens after undelegation") - - // validator, found = app.StakingKeeper.GetValidator(ctx, validatorAddress) - // require.True(t, found, "validator should have been found") - // require.Equal(t, sdk.ZeroDec(), validator.LiquidShares, "validator liquid shares after undelegation") + _, app, ctx := createTestInput(t) + var ( + accountKeeper = app.AccountKeeper + stakingKeeper = app.StakingKeeper + bankKeeper = app.BankKeeper + ) + + // Create a delegator and validator (the delegator will be an ICA account) + delegateAmount := sdk.NewInt(1000) + delegateCoin := sdk.NewCoin(stakingKeeper.BondDenom(ctx), delegateAmount) + icaAccountAddress := createICAAccount(ctx, accountKeeper) + + // Fund ICA account + err := bankKeeper.MintCoins(ctx, minttypes.ModuleName, sdk.NewCoins(delegateCoin)) + require.NoError(t, err) + err = bankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, icaAccountAddress, sdk.NewCoins(delegateCoin)) + require.NoError(t, err) + + addresses := simtestutil.AddTestAddrs(bankKeeper, stakingKeeper, ctx, 1, sdk.NewInt(0)) + pubKeys := simtestutil.CreateTestPubKeys(1) + validatorAddress := sdk.ValAddress(addresses[0]) + validator, err := stakingtypes.NewValidator(validatorAddress, pubKeys[0], stakingtypes.Description{}) + require.NoError(t, err) + + validator.DelegatorShares = sdk.NewDec(1_000_000) + validator.Tokens = sdk.NewInt(1_000_000) + validator.LiquidShares = sdk.NewDec(0) + stakingKeeper.SetValidator(ctx, validator) + + delegateMsg := types.MsgDelegate{ + DelegatorAddress: icaAccountAddress.String(), + ValidatorAddress: validatorAddress.String(), + Amount: delegateCoin, + } + + undelegateMsg := types.MsgUndelegate{ + DelegatorAddress: icaAccountAddress.String(), + ValidatorAddress: validatorAddress.String(), + Amount: delegateCoin, + } + + msgServer := keeper.NewMsgServerImpl(stakingKeeper) + + // Delegate normally + _, err = msgServer.Delegate(sdk.WrapSDKContext(ctx), &delegateMsg) + require.NoError(t, err, "no error expected when delegating") + + // Confirm delegation record + _, found := stakingKeeper.GetDelegation(ctx, icaAccountAddress, validatorAddress) + require.True(t, found, "delegation should have been found") + + // Confirm liquid staking totals were incremented + expectedTotalLiquidStaked := delegateAmount.Int64() + actualTotalLiquidStaked := stakingKeeper.GetTotalLiquidStakedTokens(ctx).Int64() + require.Equal(t, expectedTotalLiquidStaked, actualTotalLiquidStaked, "total liquid staked tokens after delegation") + + validator, found = stakingKeeper.GetValidator(ctx, validatorAddress) + require.True(t, found, "validator should have been found") + require.Equal(t, sdk.NewDecFromInt(delegateAmount), validator.LiquidShares, "validator liquid shares after delegation") + + // Try to undelegate + _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &undelegateMsg) + require.NoError(t, err, "no error expected when sequentially undelegating") + + // Confirm delegation record was removed + _, found = stakingKeeper.GetDelegation(ctx, icaAccountAddress, validatorAddress) + require.False(t, found, "delegation not have been found") + + // Confirm liquid staking totals were decremented + actualTotalLiquidStaked = stakingKeeper.GetTotalLiquidStakedTokens(ctx).Int64() + require.Zero(t, actualTotalLiquidStaked, "total liquid staked tokens after undelegation") + + validator, found = stakingKeeper.GetValidator(ctx, validatorAddress) + require.True(t, found, "validator should have been found") + require.Equal(t, sdk.ZeroDec(), validator.LiquidShares, "validator liquid shares after undelegation") +} + +// Helper function to create 32-length account +// Used to mock an liquid staking provider's ICA account +func createICAAccount(ctx sdk.Context, ak accountkeeper.AccountKeeper) sdk.AccAddress { + icahost := "icahost" + connectionID := "connection-0" + portID := icahost + + moduleAddress := authtypes.NewModuleAddress(icahost) + icaAddress := sdk.AccAddress(address.Derive(moduleAddress, []byte(connectionID+portID))) + + account := authtypes.NewBaseAccountWithAddress(icaAddress) + ak.SetAccount(ctx, account) + + return icaAddress } diff --git a/types/simulation/account.go b/types/simulation/account.go index b9f69ffa6116..1f04d558def7 100644 --- a/types/simulation/account.go +++ b/types/simulation/account.go @@ -3,6 +3,7 @@ package simulation import ( "fmt" "math/rand" + "strings" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" @@ -66,14 +67,23 @@ func FindAccount(accs []Account, address sdk.Address) (Account, bool) { // amount from the account's available balance. If the user doesn't have enough // funds for paying fees, it returns empty coins. func RandomFees(r *rand.Rand, ctx sdk.Context, spendableCoins sdk.Coins) (sdk.Coins, error) { - if spendableCoins.Empty() { + spendable := sdk.NewCoins() + // remove liquid staking denoms from spendable coins since fees cannot be paid in those denoms + for _, coin := range spendableCoins { + if strings.Contains(coin.Denom, sdk.GetConfig().GetBech32ValidatorAddrPrefix()) { + continue + } + spendable = append(spendable, coin) + } + + if spendable.Empty() { return nil, nil } - perm := r.Perm(len(spendableCoins)) + perm := r.Perm(len(spendable)) var randCoin sdk.Coin for _, index := range perm { - randCoin = spendableCoins[index] + randCoin = spendable[index] if !randCoin.Amount.IsZero() { break } diff --git a/x/staking/keeper/delegation.go b/x/staking/keeper/delegation.go index 23cb929099e8..cc97f9ec6bee 100644 --- a/x/staking/keeper/delegation.go +++ b/x/staking/keeper/delegation.go @@ -746,16 +746,6 @@ func (k Keeper) Unbond( return amount, err } - isValidatorOperator := delegatorAddress.Equals(validator.GetOperator()) - - // If the delegation is the operator of the validator and undelegating will decrease the validator's - // self-delegation below their minimum, we jail the validator. - if isValidatorOperator && !validator.Jailed && - validator.TokensFromShares(delegation.Shares).TruncateInt().LT(validator.MinSelfDelegation) { - k.jailValidator(ctx, validator) - validator = k.mustGetValidator(ctx, validator.GetOperator()) - } - if delegation.Shares.IsZero() { err = k.RemoveDelegation(ctx, delegation) } else { diff --git a/x/staking/keeper/delegation_test.go b/x/staking/keeper/delegation_test.go index 98ed2aa9378d..ee205bcf2b0f 100644 --- a/x/staking/keeper/delegation_test.go +++ b/x/staking/keeper/delegation_test.go @@ -602,6 +602,7 @@ func (s *KeeperTestSuite) TestRedelegationMaxEntries() { require.NoError(err) } +// NOTE: redelegating self-delegations does not put validators in unbonding state with LSM func (s *KeeperTestSuite) TestRedelegateSelfDelegation() { ctx, keeper := s.ctx, s.stakingKeeper require := s.Require() @@ -644,13 +645,12 @@ func (s *KeeperTestSuite) TestRedelegateSelfDelegation() { require.NoError(err) // end block - s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any()) s.applyValidatorSetUpdates(ctx, keeper, 2) validator, found := keeper.GetValidator(ctx, addrVals[0]) require.True(found) require.Equal(valTokens, validator.Tokens) - require.Equal(stakingtypes.Unbonding, validator.Status) + require.Equal(stakingtypes.Bonded, validator.Status) } func (s *KeeperTestSuite) TestRedelegateFromUnbondingValidator() { @@ -686,7 +686,7 @@ func (s *KeeperTestSuite) TestRedelegateFromUnbondingValidator() { validator2, issuedShares = validator2.AddTokensFromDel(valTokens) require.Equal(valTokens, issuedShares.RoundInt()) s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.NotBondedPoolName, stakingtypes.BondedPoolName, gomock.Any()) - _ = stakingkeeper.TestingUpdateValidator(keeper, ctx, validator2, true) + validator2 = stakingkeeper.TestingUpdateValidator(keeper, ctx, validator2, true) header := ctx.BlockHeader() blockHeight := int64(10) @@ -733,6 +733,7 @@ func (s *KeeperTestSuite) TestRedelegateFromUnbondingValidator() { require.True(blockTime.Add(params.UnbondingTime).Equal(ubd.Entries[0].CompletionTime)) } +// NOTE: undelegating all self-delegation does not put a validator in unbonding state with LSM func (s *KeeperTestSuite) TestRedelegateFromUnbondedValidator() { ctx, keeper := s.ctx, s.stakingKeeper require := s.Require() @@ -772,10 +773,12 @@ func (s *KeeperTestSuite) TestRedelegateFromUnbondedValidator() { ctx = ctx.WithBlockHeight(10) ctx = ctx.WithBlockTime(time.Unix(333, 0)) - // unbond the all self-delegation to put validator in unbonding state + // unbond the all self-delegation s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any()) _, err := keeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(delTokens)) require.NoError(err) + // jail to put validator in unbonding state + keeper.Jail(ctx, sdk.ConsAddress(PKs[0].Address())) // end block s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any()) @@ -800,183 +803,3 @@ func (s *KeeperTestSuite) TestRedelegateFromUnbondedValidator() { red, found := keeper.GetRedelegation(ctx, addrDels[0], addrVals[0], addrVals[1]) require.False(found, "%v", red) } - -/*TODO refactor LSM tests: - -- Note that in v0.45.16-lsm the redelegation tests are renamed such that: -TestRedelegateFromUnbondingValidator -> TestValidatorBondUndelegate and -TestRedelegateFromUnbondedValidator -> TestValidatorBondUndelegate - -- Note that in v0.45.16-lsm the keeper tests are still using testing.T -and simapp, which should updated to unit test with gomock, see tests above. - -*/ -// func TestValidatorBondUndelegate(t *testing.T) { -// _, app, ctx := createTestInput() - -// addrDels := simapp.AddTestAddrs(app, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) -// addrVals := simapp.ConvertAddrsToValAddrs(addrDels) - -// startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) - -// bondDenom := app.StakingKeeper.BondDenom(ctx) -// notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx) - -// require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens)))) -// app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) - -// // create a validator and a delegator to that validator -// validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) -// validator.Status = types.Bonded -// app.StakingKeeper.SetValidator(ctx, validator) - -// // set validator bond factor -// params := app.StakingKeeper.GetParams(ctx) -// params.ValidatorBondFactor = sdk.NewDec(1) -// app.StakingKeeper.SetParams(ctx, params) - -// // convert to validator self-bond -// msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) - -// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) -// err := delegateCoinsFromAccount(ctx, app, addrDels[0], startTokens, validator) -// require.NoError(t, err) -// _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ -// DelegatorAddress: addrDels[0].String(), -// ValidatorAddress: addrVals[0].String(), -// }) -// require.NoError(t, err) - -// // tokenize share for 2nd account delegation -// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) -// err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator) -// require.NoError(t, err) -// tokenizeShareResp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ -// DelegatorAddress: addrDels[1].String(), -// ValidatorAddress: addrVals[0].String(), -// Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), -// TokenizedShareOwner: addrDels[0].String(), -// }) -// require.NoError(t, err) - -// // try undelegating -// _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{ -// DelegatorAddress: addrDels[0].String(), -// ValidatorAddress: addrVals[0].String(), -// Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), -// }) -// require.Error(t, err) - -// // redeem full amount on 2nd account and try undelegation -// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) -// err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator) -// require.NoError(t, err) -// _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ -// DelegatorAddress: addrDels[1].String(), -// Amount: tokenizeShareResp.Amount, -// }) -// require.NoError(t, err) - -// // try undelegating -// _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{ -// DelegatorAddress: addrDels[0].String(), -// ValidatorAddress: addrVals[0].String(), -// Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), -// }) -// require.NoError(t, err) - -// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) -// require.Equal(t, validator.ValidatorBondShares, sdk.ZeroDec()) -// } - -// func TestValidatorBondRedelegate(t *testing.T) { -// _, app, ctx := createTestInput() - -// addrDels := simapp.AddTestAddrs(app, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) -// addrVals := simapp.ConvertAddrsToValAddrs(addrDels) - -// startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) - -// bondDenom := app.StakingKeeper.BondDenom(ctx) -// notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx) - -// startPoolToken := sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens.Mul(sdk.NewInt(2)))) -// require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), startPoolToken)) -// app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) - -// // create a validator and a delegator to that validator -// validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) -// validator.Status = types.Bonded -// app.StakingKeeper.SetValidator(ctx, validator) -// validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1]) -// validator.Status = types.Bonded -// app.StakingKeeper.SetValidator(ctx, validator2) - -// // set validator bond factor -// params := app.StakingKeeper.GetParams(ctx) -// params.ValidatorBondFactor = sdk.NewDec(1) -// app.StakingKeeper.SetParams(ctx, params) - -// // set total liquid stake -// app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, sdk.NewInt(100)) - -// // delegate to each validator -// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) -// err := delegateCoinsFromAccount(ctx, app, addrDels[0], startTokens, validator) -// require.NoError(t, err) - -// validator2, _ = app.StakingKeeper.GetValidator(ctx, addrVals[1]) -// err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator2) -// require.NoError(t, err) - -// // convert to validator self-bond -// msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) -// _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{ -// DelegatorAddress: addrDels[0].String(), -// ValidatorAddress: addrVals[0].String(), -// }) -// require.NoError(t, err) - -// // tokenize share for 2nd account delegation -// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) -// err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator) -// require.NoError(t, err) -// tokenizeShareResp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{ -// DelegatorAddress: addrDels[1].String(), -// ValidatorAddress: addrVals[0].String(), -// Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), -// TokenizedShareOwner: addrDels[0].String(), -// }) -// require.NoError(t, err) - -// // try undelegating -// _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ -// DelegatorAddress: addrDels[0].String(), -// ValidatorSrcAddress: addrVals[0].String(), -// ValidatorDstAddress: addrVals[1].String(), -// Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), -// }) -// require.Error(t, err) - -// // redeem full amount on 2nd account and try undelegation -// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) -// err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator) -// require.NoError(t, err) -// _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{ -// DelegatorAddress: addrDels[1].String(), -// Amount: tokenizeShareResp.Amount, -// }) -// require.NoError(t, err) - -// // try undelegating -// _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{ -// DelegatorAddress: addrDels[0].String(), -// ValidatorSrcAddress: addrVals[0].String(), -// ValidatorDstAddress: addrVals[1].String(), -// Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens), -// }) -// require.NoError(t, err) - -// validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0]) -// require.Equal(t, validator.ValidatorBondShares, sdk.ZeroDec()) -// } diff --git a/x/staking/keeper/liquid_stake.go b/x/staking/keeper/liquid_stake.go index 64c44e4cd35d..62b2473f50fc 100644 --- a/x/staking/keeper/liquid_stake.go +++ b/x/staking/keeper/liquid_stake.go @@ -4,13 +4,12 @@ import ( "time" "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking/types" ) // SetTotalLiquidStakedTokens stores the total outstanding tokens owned by a liquid staking provider -func (k Keeper) SetTotalLiquidStakedTokens(ctx sdk.Context, tokens sdk.Int) { +func (k Keeper) SetTotalLiquidStakedTokens(ctx sdk.Context, tokens math.Int) { store := ctx.KVStore(k.storeKey) tokensBz, err := tokens.Marshal() @@ -23,7 +22,7 @@ func (k Keeper) SetTotalLiquidStakedTokens(ctx sdk.Context, tokens sdk.Int) { // GetTotalLiquidStakedTokens returns the total outstanding tokens owned by a liquid staking provider // Returns zero if the total liquid stake amount has not been initialized -func (k Keeper) GetTotalLiquidStakedTokens(ctx sdk.Context) sdk.Int { +func (k Keeper) GetTotalLiquidStakedTokens(ctx sdk.Context) math.Int { store := ctx.KVStore(k.storeKey) tokensBz := store.Get(types.TotalLiquidStakedTokensKey) @@ -31,7 +30,7 @@ func (k Keeper) GetTotalLiquidStakedTokens(ctx sdk.Context) sdk.Int { return sdk.ZeroInt() } - var tokens sdk.Int + var tokens math.Int if err := tokens.Unmarshal(tokensBz); err != nil { panic(err) } @@ -62,7 +61,7 @@ func (k Keeper) DelegatorIsLiquidStaker(delegatorAddress sdk.AccAddress) bool { // the tokens are already included in the bonded pool // If the delegation's shares are not bonded (e.g. normal delegation), // we need to add the tokens to the current bonded pool balance to get the total staked -func (k Keeper) CheckExceedsGlobalLiquidStakingCap(ctx sdk.Context, tokens sdk.Int, sharesAlreadyBonded bool) bool { +func (k Keeper) CheckExceedsGlobalLiquidStakingCap(ctx sdk.Context, tokens math.Int, sharesAlreadyBonded bool) bool { liquidStakingCap := k.GlobalLiquidStakingCap(ctx) liquidStakedAmount := k.GetTotalLiquidStakedTokens(ctx) @@ -76,8 +75,9 @@ func (k Keeper) CheckExceedsGlobalLiquidStakingCap(ctx sdk.Context, tokens sdk.I } // Calculate the percentage of stake that is liquid - updatedLiquidStaked := math.LegacyNewDec(liquidStakedAmount.Add(tokens).Int64()) - liquidStakePercent := updatedLiquidStaked.Quo(math.LegacyNewDec(totalStakedAmount.Int64())) + + updatedLiquidStaked := sdk.NewDecFromInt(liquidStakedAmount.Add(tokens)) + liquidStakePercent := updatedLiquidStaked.Quo(sdk.NewDecFromInt(totalStakedAmount)) return liquidStakePercent.GT(liquidStakingCap) } @@ -114,7 +114,7 @@ func (k Keeper) CheckExceedsValidatorLiquidStakingCap(ctx sdk.Context, validator // // The percentage of liquid staked tokens must be less than the GlobalLiquidStakingCap: // (TotalLiquidStakedTokens / TotalStakedTokens) <= GlobalLiquidStakingCap -func (k Keeper) SafelyIncreaseTotalLiquidStakedTokens(ctx sdk.Context, amount sdk.Int, sharesAlreadyBonded bool) error { +func (k Keeper) SafelyIncreaseTotalLiquidStakedTokens(ctx sdk.Context, amount math.Int, sharesAlreadyBonded bool) error { if k.CheckExceedsGlobalLiquidStakingCap(ctx, amount, sharesAlreadyBonded) { return types.ErrGlobalLiquidStakingCapExceeded } @@ -124,7 +124,7 @@ func (k Keeper) SafelyIncreaseTotalLiquidStakedTokens(ctx sdk.Context, amount sd } // DecreaseTotalLiquidStakedTokens decrements the total liquid staked tokens -func (k Keeper) DecreaseTotalLiquidStakedTokens(ctx sdk.Context, amount sdk.Int) error { +func (k Keeper) DecreaseTotalLiquidStakedTokens(ctx sdk.Context, amount math.Int) error { totalLiquidStake := k.GetTotalLiquidStakedTokens(ctx) if amount.GT(totalLiquidStake) { return types.ErrTotalLiquidStakedUnderflow @@ -363,14 +363,17 @@ func (k Keeper) RemoveExpiredTokenizeShareLocks(ctx sdk.Context, blockTime time. // collect all unlocked addresses unlockedAddresses = []string{} + keys := [][]byte{} for ; iterator.Valid(); iterator.Next() { authorizations := types.PendingTokenizeShareAuthorizations{} k.cdc.MustUnmarshal(iterator.Value(), &authorizations) + unlockedAddresses = append(unlockedAddresses, authorizations.Addresses...) + keys = append(keys, iterator.Key()) + } - for _, addressString := range authorizations.Addresses { - unlockedAddresses = append(unlockedAddresses, addressString) - } - store.Delete(iterator.Key()) + // delete unlocked addresses keys + for _, k := range keys { + store.Delete(k) } // remove the lock from each unlocked address diff --git a/x/staking/keeper/liquid_stake_test.go b/x/staking/keeper/liquid_stake_test.go index abeba9b9343b..9e622c815d08 100644 --- a/x/staking/keeper/liquid_stake_test.go +++ b/x/staking/keeper/liquid_stake_test.go @@ -1,1209 +1,749 @@ package keeper_test -// TODO refactor LSM tests - -// import ( -// "fmt" -// "testing" -// "time" - -// testutil "github.com/cosmos/cosmos-sdk/testutil/sims" - -// "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" -// "github.com/cosmos/cosmos-sdk/simapp" -// sdk "github.com/cosmos/cosmos-sdk/types" -// "github.com/cosmos/cosmos-sdk/types/address" -// authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" -// minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" -// "github.com/cosmos/cosmos-sdk/x/staking/types" -// "github.com/stretchr/testify/require" -// ) - -// // Helper function to create a base account from an account name -// // Used to differentiate against liquid staking provider module account -// func createBaseAccount(app *simapp.SimApp, ctx sdk.Context, accountName string) sdk.AccAddress { -// baseAccountAddress := sdk.AccAddress(accountName) -// app.AccountKeeper.SetAccount(ctx, authtypes.NewBaseAccountWithAddress(baseAccountAddress)) -// return baseAccountAddress -// } - -// // Helper function to create 32-length account -// // Used to mock an liquid staking provider's ICA account -// func createICAAccount(app *simapp.SimApp, ctx sdk.Context) sdk.AccAddress { -// icahost := "icahost" -// connectionID := "connection-0" -// portID := icahost - -// moduleAddress := authtypes.NewModuleAddress(icahost) -// icaAddress := sdk.AccAddress(address.Derive(moduleAddress, []byte(connectionID+portID))) - -// account := authtypes.NewBaseAccountWithAddress(icaAddress) -// app.AccountKeeper.SetAccount(ctx, account) - -// return icaAddress -// } - -// // Helper function to create a module account address from a tokenized share -// // Used to mock the delegation owner of a tokenized share -// func createTokenizeShareModuleAccount(recordID uint64) sdk.AccAddress { -// record := types.TokenizeShareRecord{ -// Id: recordID, -// ModuleAccount: fmt.Sprintf("%s%d", types.TokenizeShareModuleAccountPrefix, recordID), -// } -// return record.GetModuleAddress() -// } - -// // Tests Set/Get TotalLiquidStakedTokens -// func (s *KeeperTestSuite) TestTotalLiquidStakedTokens(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// // Update the total liquid staked -// total := sdk.NewInt(100) -// keeper.SetTotalLiquidStakedTokens(ctx, total) - -// // Confirm it was updated -// require.Equal(t, total, keeper.GetTotalLiquidStakedTokens(ctx), "initial") -// } - -// // Tests Increase/Decrease TotalValidatorLiquidShares -// func (s *KeeperTestSuite) TestValidatorLiquidShares(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper - -// // Create a validator address -// privKey := secp256k1.GenPrivKey() -// pubKey := privKey.PubKey() -// valAddress := sdk.ValAddress(pubKey.Address()) - -// // Set an initial total -// initial := sdk.NewDec(100) -// validator := types.Validator{ -// OperatorAddress: valAddress.String(), -// LiquidShares: initial, -// } -// keeper.SetValidator(ctx, validator) -// } - -// // Tests DelegatorIsLiquidStaker -// func (s *KeeperTestSuite) TestDelegatorIsLiquidStaker(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// // Create base and ICA accounts -// baseAccountAddress := createBaseAccount(app, ctx, "base-account") -// icaAccountAddress := createICAAccount(app, ctx) - -// // Only the ICA module account should be considered a liquid staking provider -// require.False(keeper.DelegatorIsLiquidStaker(baseAccountAddress), "base account") -// require.True(keeper.DelegatorIsLiquidStaker(icaAccountAddress), "ICA module account") -// } - -// // Helper function to clear the Bonded pool balances before a unit test -// func clearPoolBalance(t *testing.T, app *simapp.SimApp, ctx sdk.Context) { -// bondDenom := keeper.BondDenom(ctx) -// initialBondedBalance := app.BankKeeper.GetBalance(ctx, app.AccountKeeper.GetModuleAddress(types.BondedPoolName), bondDenom) - -// err := app.BankKeeper.SendCoinsFromModuleToModule(ctx, types.BondedPoolName, minttypes.ModuleName, sdk.NewCoins(initialBondedBalance)) -// require.NoError(t, err, "no error expected when clearing bonded pool balance") -// } - -// // Helper function to fund the Bonded pool balances before a unit test -// func fundPoolBalance(t *testing.T, app *simapp.SimApp, ctx sdk.Context, amount sdk.Int) { -// bondDenom := keeper.BondDenom(ctx) -// bondedPoolCoin := sdk.NewCoin(bondDenom, amount) - -// err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, sdk.NewCoins(bondedPoolCoin)) -// require.NoError(t, err, "no error expected when minting") - -// err = app.BankKeeper.SendCoinsFromModuleToModule(ctx, minttypes.ModuleName, types.BondedPoolName, sdk.NewCoins(bondedPoolCoin)) -// require.NoError(t, err, "no error expected when sending tokens to bonded pool") -// } - -// // Tests CheckExceedsGlobalLiquidStakingCap -// func (s *KeeperTestSuite) TestCheckExceedsGlobalLiquidStakingCap(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// testCases := []struct { -// name string -// globalLiquidCap sdk.Dec -// totalLiquidStake sdk.Int -// totalStake sdk.Int -// newLiquidStake sdk.Int -// tokenizingShares bool -// expectedExceeds bool -// }{ -// { -// // Cap: 10% - Native Delegation - Delegation Below Threshold -// // Total Liquid Stake: 5, Total Stake: 95, New Liquid Stake: 1 -// // => Total Liquid Stake: 5+1=6, Total Stake: 95+1=96 => 6/96 = 6% < 10% cap -// name: "10 percent cap _ native delegation _ delegation below cap", -// globalLiquidCap: sdk.MustNewDecFromStr("0.1"), -// totalLiquidStake: sdk.NewInt(5), -// totalStake: sdk.NewInt(95), -// newLiquidStake: sdk.NewInt(1), -// tokenizingShares: false, -// expectedExceeds: false, -// }, -// { -// // Cap: 10% - Native Delegation - Delegation At Threshold -// // Total Liquid Stake: 5, Total Stake: 95, New Liquid Stake: 5 -// // => Total Liquid Stake: 5+5=10, Total Stake: 95+5=100 => 10/100 = 10% == 10% cap -// name: "10 percent cap _ native delegation _ delegation equals cap", -// globalLiquidCap: sdk.MustNewDecFromStr("0.1"), -// totalLiquidStake: sdk.NewInt(5), -// totalStake: sdk.NewInt(95), -// newLiquidStake: sdk.NewInt(5), -// tokenizingShares: false, -// expectedExceeds: false, -// }, -// { -// // Cap: 10% - Native Delegation - Delegation Exceeds Threshold -// // Total Liquid Stake: 5, Total Stake: 95, New Liquid Stake: 6 -// // => Total Liquid Stake: 5+6=11, Total Stake: 95+6=101 => 11/101 = 11% > 10% cap -// name: "10 percent cap _ native delegation _ delegation exceeds cap", -// globalLiquidCap: sdk.MustNewDecFromStr("0.1"), -// totalLiquidStake: sdk.NewInt(5), -// totalStake: sdk.NewInt(95), -// newLiquidStake: sdk.NewInt(6), -// tokenizingShares: false, -// expectedExceeds: true, -// }, -// { -// // Cap: 20% - Native Delegation - Delegation Below Threshold -// // Total Liquid Stake: 20, Total Stake: 220, New Liquid Stake: 29 -// // => Total Liquid Stake: 20+29=49, Total Stake: 220+29=249 => 49/249 = 19% < 20% cap -// name: "20 percent cap _ native delegation _ delegation below cap", -// globalLiquidCap: sdk.MustNewDecFromStr("0.20"), -// totalLiquidStake: sdk.NewInt(20), -// totalStake: sdk.NewInt(220), -// newLiquidStake: sdk.NewInt(29), -// tokenizingShares: false, -// expectedExceeds: false, -// }, -// { -// // Cap: 20% - Native Delegation - Delegation At Threshold -// // Total Liquid Stake: 20, Total Stake: 220, New Liquid Stake: 30 -// // => Total Liquid Stake: 20+30=50, Total Stake: 220+30=250 => 50/250 = 20% == 20% cap -// name: "20 percent cap _ native delegation _ delegation equals cap", -// globalLiquidCap: sdk.MustNewDecFromStr("0.20"), -// totalLiquidStake: sdk.NewInt(20), -// totalStake: sdk.NewInt(220), -// newLiquidStake: sdk.NewInt(30), -// tokenizingShares: false, -// expectedExceeds: false, -// }, -// { -// // Cap: 20% - Native Delegation - Delegation Exceeds Threshold -// // Total Liquid Stake: 20, Total Stake: 220, New Liquid Stake: 31 -// // => Total Liquid Stake: 20+31=51, Total Stake: 220+31=251 => 51/251 = 21% > 20% cap -// name: "20 percent cap _ native delegation _ delegation exceeds cap", -// globalLiquidCap: sdk.MustNewDecFromStr("0.20"), -// totalLiquidStake: sdk.NewInt(20), -// totalStake: sdk.NewInt(220), -// newLiquidStake: sdk.NewInt(31), -// tokenizingShares: false, -// expectedExceeds: true, -// }, -// { -// // Cap: 50% - Native Delegation - Delegation Below Threshold -// // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 50 -// // => Total Liquid Stake: 0+50=50, Total Stake: 100+50=150 => 50/150 = 33% < 50% cap -// name: "50 percent cap _ native delegation _ delegation below cap", -// globalLiquidCap: sdk.MustNewDecFromStr("0.5"), -// totalLiquidStake: sdk.NewInt(0), -// totalStake: sdk.NewInt(100), -// newLiquidStake: sdk.NewInt(50), -// tokenizingShares: false, -// expectedExceeds: false, -// }, -// { -// // Cap: 50% - Tokenized Delegation - Delegation At Threshold -// // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 50 -// // => 50 / 100 = 50% == 50% cap -// name: "50 percent cap _ tokenized delegation _ delegation equals cap", -// globalLiquidCap: sdk.MustNewDecFromStr("0.5"), -// totalLiquidStake: sdk.NewInt(0), -// totalStake: sdk.NewInt(100), -// newLiquidStake: sdk.NewInt(50), -// tokenizingShares: true, -// expectedExceeds: false, -// }, -// { -// // Cap: 50% - Native Delegation - Delegation Below Threshold -// // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 51 -// // => Total Liquid Stake: 0+51=51, Total Stake: 100+51=151 => 51/151 = 33% < 50% cap -// name: "50 percent cap _ native delegation _ delegation below cap", -// globalLiquidCap: sdk.MustNewDecFromStr("0.5"), -// totalLiquidStake: sdk.NewInt(0), -// totalStake: sdk.NewInt(100), -// newLiquidStake: sdk.NewInt(51), -// tokenizingShares: false, -// expectedExceeds: false, -// }, -// { -// // Cap: 50% - Tokenized Delegation - Delegation Exceeds Threshold -// // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 51 -// // => 51 / 100 = 51% > 50% cap -// name: "50 percent cap _ tokenized delegation _delegation exceeds cap", -// globalLiquidCap: sdk.MustNewDecFromStr("0.5"), -// totalLiquidStake: sdk.NewInt(0), -// totalStake: sdk.NewInt(100), -// newLiquidStake: sdk.NewInt(51), -// tokenizingShares: true, -// expectedExceeds: true, -// }, -// { -// // Cap of 0% - everything should exceed -// name: "0 percent cap", -// globalLiquidCap: sdk.ZeroDec(), -// totalLiquidStake: sdk.NewInt(0), -// totalStake: sdk.NewInt(1_000_000), -// newLiquidStake: sdk.NewInt(1), -// tokenizingShares: false, -// expectedExceeds: true, -// }, -// { -// // Cap of 100% - nothing should exceed -// name: "100 percent cap", -// globalLiquidCap: sdk.OneDec(), -// totalLiquidStake: sdk.NewInt(1), -// totalStake: sdk.NewInt(1), -// newLiquidStake: sdk.NewInt(1_000_000), -// tokenizingShares: false, -// expectedExceeds: false, -// }, -// } - -// for _, tc := range testCases { -// t.Run(tc.name, func(t *testing.T) { -// // Update the global liquid staking cap -// params := keeper.GetParams(ctx) -// params.GlobalLiquidStakingCap = tc.globalLiquidCap -// keeper.SetParams(ctx, params) - -// // Update the total liquid tokens -// keeper.SetTotalLiquidStakedTokens(ctx, tc.totalLiquidStake) - -// // Fund each pool for the given test case -// clearPoolBalance(t, app, ctx) -// fundPoolBalance(t, app, ctx, tc.totalStake) - -// // Check if the new tokens would exceed the global cap -// actualExceeds := keeper.CheckExceedsGlobalLiquidStakingCap(ctx, tc.newLiquidStake, tc.tokenizingShares) -// require.Equal(t, tc.expectedExceeds, actualExceeds, tc.name) -// }) -// } -// } - -// // Tests SafelyIncreaseTotalLiquidStakedTokens -// func (s *KeeperTestSuite) TestSafelyIncreaseTotalLiquidStakedTokens(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// intitialTotalLiquidStaked := sdk.NewInt(100) -// increaseAmount := sdk.NewInt(10) -// poolBalance := sdk.NewInt(200) - -// // Set the total staked and total liquid staked amounts -// // which are required components when checking the global cap -// // Total stake is calculated from the pool balance -// clearPoolBalance(t, app, ctx) -// fundPoolBalance(t, app, ctx, poolBalance) -// keeper.SetTotalLiquidStakedTokens(ctx, intitialTotalLiquidStaked) - -// // Set the global cap such that a small delegation would exceed the cap -// params := keeper.GetParams(ctx) -// params.GlobalLiquidStakingCap = sdk.MustNewDecFromStr("0.0001") -// keeper.SetParams(ctx, params) - -// // Attempt to increase the total liquid stake again, it should error since -// // the cap was exceeded -// err := keeper.SafelyIncreaseTotalLiquidStakedTokens(ctx, increaseAmount, true) -// require.ErrorIs(t, err, types.ErrGlobalLiquidStakingCapExceeded) -// require.Equal(t, intitialTotalLiquidStaked, keeper.GetTotalLiquidStakedTokens(ctx)) - -// // Now relax the cap so that the increase succeeds -// params.GlobalLiquidStakingCap = sdk.MustNewDecFromStr("0.99") -// keeper.SetParams(ctx, params) - -// // Confirm the total increased -// err = keeper.SafelyIncreaseTotalLiquidStakedTokens(ctx, increaseAmount, true) -// require.NoError(t, err) -// require.Equal(t, intitialTotalLiquidStaked.Add(increaseAmount), keeper.GetTotalLiquidStakedTokens(ctx)) -// } - -// // Tests DecreaseTotalLiquidStakedTokens -// func (s *KeeperTestSuite) TestDecreaseTotalLiquidStakedTokens(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// intitialTotalLiquidStaked := sdk.NewInt(100) -// decreaseAmount := sdk.NewInt(10) - -// // Set the total liquid staked to an arbitrary value -// keeper.SetTotalLiquidStakedTokens(ctx, intitialTotalLiquidStaked) - -// // Decrease the total liquid stake and confirm the total was updated -// err := keeper.DecreaseTotalLiquidStakedTokens(ctx, decreaseAmount) -// require.NoError(t, err, "no error expected when decreasing total liquid staked tokens") -// require.Equal(t, intitialTotalLiquidStaked.Sub(decreaseAmount), keeper.GetTotalLiquidStakedTokens(ctx)) - -// // Attempt to decrease by an excessive amount, it should error -// err = keeper.DecreaseTotalLiquidStakedTokens(ctx, intitialTotalLiquidStaked) -// require.ErrorIs(err, types.ErrTotalLiquidStakedUnderflow) -// } - -// // Tests CheckExceedsValidatorBondCap -// func (s *KeeperTestSuite) TestCheckExceedsValidatorBondCap(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// testCases := []struct { -// name string -// validatorShares sdk.Dec -// validatorBondFactor sdk.Dec -// currentLiquidShares sdk.Dec -// newShares sdk.Dec -// expectedExceeds bool -// }{ -// { -// // Validator Shares: 100, Factor: 1, Current Shares: 90 => 100 Max Shares, Capacity: 10 -// // New Shares: 5 - below cap -// name: "factor 1 - below cap", -// validatorShares: sdk.NewDec(100), -// validatorBondFactor: sdk.NewDec(1), -// currentLiquidShares: sdk.NewDec(90), -// newShares: sdk.NewDec(5), -// expectedExceeds: false, -// }, -// { -// // Validator Shares: 100, Factor: 1, Current Shares: 90 => 100 Max Shares, Capacity: 10 -// // New Shares: 10 - at cap -// name: "factor 1 - at cap", -// validatorShares: sdk.NewDec(100), -// validatorBondFactor: sdk.NewDec(1), -// currentLiquidShares: sdk.NewDec(90), -// newShares: sdk.NewDec(10), -// expectedExceeds: false, -// }, -// { -// // Validator Shares: 100, Factor: 1, Current Shares: 90 => 100 Max Shares, Capacity: 10 -// // New Shares: 15 - above cap -// name: "factor 1 - above cap", -// validatorShares: sdk.NewDec(100), -// validatorBondFactor: sdk.NewDec(1), -// currentLiquidShares: sdk.NewDec(90), -// newShares: sdk.NewDec(15), -// expectedExceeds: true, -// }, -// { -// // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110 -// // New Shares: 5 - below cap -// name: "factor 2 - well below cap", -// validatorShares: sdk.NewDec(100), -// validatorBondFactor: sdk.NewDec(2), -// currentLiquidShares: sdk.NewDec(90), -// newShares: sdk.NewDec(5), -// expectedExceeds: false, -// }, -// { -// // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110 -// // New Shares: 100 - below cap -// name: "factor 2 - below cap", -// validatorShares: sdk.NewDec(100), -// validatorBondFactor: sdk.NewDec(2), -// currentLiquidShares: sdk.NewDec(90), -// newShares: sdk.NewDec(100), -// expectedExceeds: false, -// }, -// { -// // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110 -// // New Shares: 110 - below cap -// name: "factor 2 - at cap", -// validatorShares: sdk.NewDec(100), -// validatorBondFactor: sdk.NewDec(2), -// currentLiquidShares: sdk.NewDec(90), -// newShares: sdk.NewDec(110), -// expectedExceeds: false, -// }, -// { -// // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110 -// // New Shares: 111 - above cap -// name: "factor 2 - above cap", -// validatorShares: sdk.NewDec(100), -// validatorBondFactor: sdk.NewDec(2), -// currentLiquidShares: sdk.NewDec(90), -// newShares: sdk.NewDec(111), -// expectedExceeds: true, -// }, -// { -// // Validator Shares: 100, Factor: 100, Current Shares: 90 => 10000 Max Shares, Capacity: 9910 -// // New Shares: 100 - below cap -// name: "factor 100 - below cap", -// validatorShares: sdk.NewDec(100), -// validatorBondFactor: sdk.NewDec(100), -// currentLiquidShares: sdk.NewDec(90), -// newShares: sdk.NewDec(100), -// expectedExceeds: false, -// }, -// { -// // Validator Shares: 100, Factor: 100, Current Shares: 90 => 10000 Max Shares, Capacity: 9910 -// // New Shares: 9910 - at cap -// name: "factor 100 - at cap", -// validatorShares: sdk.NewDec(100), -// validatorBondFactor: sdk.NewDec(100), -// currentLiquidShares: sdk.NewDec(90), -// newShares: sdk.NewDec(9910), -// expectedExceeds: false, -// }, -// { -// // Validator Shares: 100, Factor: 100, Current Shares: 90 => 10000 Max Shares, Capacity: 9910 -// // New Shares: 9911 - above cap -// name: "factor 100 - above cap", -// validatorShares: sdk.NewDec(100), -// validatorBondFactor: sdk.NewDec(100), -// currentLiquidShares: sdk.NewDec(90), -// newShares: sdk.NewDec(9911), -// expectedExceeds: true, -// }, -// { -// // Factor of -1 (disabled): Should always return false -// name: "factor disabled", -// validatorShares: sdk.NewDec(1), -// validatorBondFactor: sdk.NewDec(-1), -// currentLiquidShares: sdk.NewDec(1), -// newShares: sdk.NewDec(1_000_000), -// expectedExceeds: false, -// }, -// } - -// for _, tc := range testCases { -// t.Run(tc.name, func(t *testing.T) { -// // Update the validator bond factor -// params := keeper.GetParams(ctx) -// params.ValidatorBondFactor = tc.validatorBondFactor -// keeper.SetParams(ctx, params) - -// // Create a validator with designated self-bond shares -// validator := types.Validator{ -// LiquidShares: tc.currentLiquidShares, -// ValidatorBondShares: tc.validatorShares, -// } - -// // Check whether the cap is exceeded -// actualExceeds := keeper.CheckExceedsValidatorBondCap(ctx, validator, tc.newShares) -// require.Equal(t, tc.expectedExceeds, actualExceeds, tc.name) -// }) -// } -// } - -// // Tests TestCheckExceedsValidatorLiquidStakingCap -// func (s *KeeperTestSuite) TestCheckExceedsValidatorLiquidStakingCap(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// testCases := []struct { -// name string -// validatorLiquidCap sdk.Dec -// validatorLiquidShares sdk.Dec -// validatorTotalShares sdk.Dec -// newLiquidShares sdk.Dec -// expectedExceeds bool -// }{ -// { -// // Cap: 10% - Delegation Below Threshold -// // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 1 -// // => Liquid Shares: 5+1=6, Total Shares: 95+1=96 => 6/96 = 6% < 10% cap -// name: "10 percent cap _ delegation below cap", -// validatorLiquidCap: sdk.MustNewDecFromStr("0.1"), -// validatorLiquidShares: sdk.NewDec(5), -// validatorTotalShares: sdk.NewDec(95), -// newLiquidShares: sdk.NewDec(1), -// expectedExceeds: false, -// }, -// { -// // Cap: 10% - Delegation At Threshold -// // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 5 -// // => Liquid Shares: 5+5=10, Total Shares: 95+5=100 => 10/100 = 10% == 10% cap -// name: "10 percent cap _ delegation equals cap", -// validatorLiquidCap: sdk.MustNewDecFromStr("0.1"), -// validatorLiquidShares: sdk.NewDec(5), -// validatorTotalShares: sdk.NewDec(95), -// newLiquidShares: sdk.NewDec(4), -// expectedExceeds: false, -// }, -// { -// // Cap: 10% - Delegation Exceeds Threshold -// // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 6 -// // => Liquid Shares: 5+6=11, Total Shares: 95+6=101 => 11/101 = 11% > 10% cap -// name: "10 percent cap _ delegation exceeds cap", -// validatorLiquidCap: sdk.MustNewDecFromStr("0.1"), -// validatorLiquidShares: sdk.NewDec(5), -// validatorTotalShares: sdk.NewDec(95), -// newLiquidShares: sdk.NewDec(6), -// expectedExceeds: true, -// }, -// { -// // Cap: 20% - Delegation Below Threshold -// // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 29 -// // => Liquid Shares: 20+29=49, Total Shares: 220+29=249 => 49/249 = 19% < 20% cap -// name: "20 percent cap _ delegation below cap", -// validatorLiquidCap: sdk.MustNewDecFromStr("0.2"), -// validatorLiquidShares: sdk.NewDec(20), -// validatorTotalShares: sdk.NewDec(220), -// newLiquidShares: sdk.NewDec(29), -// expectedExceeds: false, -// }, -// { -// // Cap: 20% - Delegation At Threshold -// // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 30 -// // => Liquid Shares: 20+30=50, Total Shares: 220+30=250 => 50/250 = 20% == 20% cap -// name: "20 percent cap _ delegation equals cap", -// validatorLiquidCap: sdk.MustNewDecFromStr("0.2"), -// validatorLiquidShares: sdk.NewDec(20), -// validatorTotalShares: sdk.NewDec(220), -// newLiquidShares: sdk.NewDec(30), -// expectedExceeds: false, -// }, -// { -// // Cap: 20% - Delegation Exceeds Threshold -// // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 31 -// // => Liquid Shares: 20+31=51, Total Shares: 220+31=251 => 51/251 = 21% > 20% cap -// name: "20 percent cap _ delegation exceeds cap", -// validatorLiquidCap: sdk.MustNewDecFromStr("0.2"), -// validatorLiquidShares: sdk.NewDec(20), -// validatorTotalShares: sdk.NewDec(220), -// newLiquidShares: sdk.NewDec(31), -// expectedExceeds: true, -// }, -// { -// // Cap of 0% - everything should exceed -// name: "0 percent cap", -// validatorLiquidCap: sdk.ZeroDec(), -// validatorLiquidShares: sdk.NewDec(0), -// validatorTotalShares: sdk.NewDec(1_000_000), -// newLiquidShares: sdk.NewDec(1), -// expectedExceeds: true, -// }, -// { -// // Cap of 100% - nothing should exceed -// name: "100 percent cap", -// validatorLiquidCap: sdk.OneDec(), -// validatorLiquidShares: sdk.NewDec(1), -// validatorTotalShares: sdk.NewDec(1_000_000), -// newLiquidShares: sdk.NewDec(1), -// expectedExceeds: false, -// }, -// } - -// for _, tc := range testCases { -// t.Run(tc.name, func(t *testing.T) { -// // Update the validator liquid staking cap -// params := keeper.GetParams(ctx) -// params.ValidatorLiquidStakingCap = tc.validatorLiquidCap -// keeper.SetParams(ctx, params) - -// // Create a validator with designated self-bond shares -// validator := types.Validator{ -// LiquidShares: tc.validatorLiquidShares, -// DelegatorShares: tc.validatorTotalShares, -// } - -// // Check whether the cap is exceeded -// actualExceeds := keeper.CheckExceedsValidatorLiquidStakingCap(ctx, validator, tc.newLiquidShares) -// require.Equal(t, tc.expectedExceeds, actualExceeds, tc.name) -// }) -// } -// } - -// // Tests SafelyIncreaseValidatorLiquidShares -// func (s *KeeperTestSuite) TestSafelyIncreaseValidatorLiquidShares(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// // Generate a test validator address -// privKey := secp256k1.GenPrivKey() -// pubKey := privKey.PubKey() -// valAddress := sdk.ValAddress(pubKey.Address()) - -// // Helper function to check the validator's liquid shares -// checkValidatorLiquidShares := func(expected sdk.Dec, description string) { -// actualValidator, found := keeper.GetValidator(ctx, valAddress) -// require.True(found) -// require.Equal(expected.TruncateInt64(), actualValidator.LiquidShares.TruncateInt64(), description) -// } - -// // Start with the following: -// // Initial Liquid Shares: 0 -// // Validator Bond Shares: 10 -// // Validator TotalShares: 75 -// // -// // Initial Caps: -// // ValidatorBondFactor: 1 (Cap applied at 10 shares) -// // ValidatorLiquidStakingCap: 25% (Cap applied at 25 shares) -// // -// // Cap Increases: -// // ValidatorBondFactor: 10 (Cap applied at 100 shares) -// // ValidatorLiquidStakingCap: 40% (Cap applied at 50 shares) -// initialLiquidShares := sdk.NewDec(0) -// validatorBondShares := sdk.NewDec(10) -// validatorTotalShares := sdk.NewDec(75) - -// firstIncreaseAmount := sdk.NewDec(20) -// secondIncreaseAmount := sdk.NewDec(10) // total increase of 30 - -// initialBondFactor := sdk.NewDec(1) -// finalBondFactor := sdk.NewDec(10) -// initialLiquidStakingCap := sdk.MustNewDecFromStr("0.25") -// finalLiquidStakingCap := sdk.MustNewDecFromStr("0.4") - -// // Create a validator with designated self-bond shares -// initialValidator := types.Validator{ -// OperatorAddress: valAddress.String(), -// LiquidShares: initialLiquidShares, -// ValidatorBondShares: validatorBondShares, -// DelegatorShares: validatorTotalShares, -// } -// keeper.SetValidator(ctx, initialValidator) - -// // Set validator bond factor to a small number such that any delegation would fail, -// // and set the liquid staking cap such that the first stake would succeed, but the second -// // would fail -// params := keeper.GetParams(ctx) -// params.ValidatorBondFactor = initialBondFactor -// params.ValidatorLiquidStakingCap = initialLiquidStakingCap -// keeper.SetParams(ctx, params) - -// // Attempt to increase the validator liquid shares, it should throw an -// // error that the validator bond cap was exceeded -// _, err := keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, firstIncreaseAmount) -// require.ErrorIs(t, err, types.ErrInsufficientValidatorBondShares) -// checkValidatorLiquidShares(initialLiquidShares, "shares after low bond factor") - -// // Change validator bond factor to a more conservative number, so that the increase succeeds -// params.ValidatorBondFactor = finalBondFactor -// keeper.SetParams(ctx, params) - -// // Try the increase again and check that it succeeded -// expectedLiquidSharesAfterFirstStake := initialLiquidShares.Add(firstIncreaseAmount) -// _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, firstIncreaseAmount) -// require.NoError(t, err) -// checkValidatorLiquidShares(expectedLiquidSharesAfterFirstStake, "shares with cap loose bond cap") - -// // Attempt another increase, it should fail from the liquid staking cap -// _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, secondIncreaseAmount) -// require.ErrorIs(t, err, types.ErrValidatorLiquidStakingCapExceeded) -// checkValidatorLiquidShares(expectedLiquidSharesAfterFirstStake, "shares after liquid staking cap hit") - -// // Raise the liquid staking cap so the new increment succeeds -// params.ValidatorLiquidStakingCap = finalLiquidStakingCap -// keeper.SetParams(ctx, params) - -// // Finally confirm that the increase succeeded this time -// expectedLiquidSharesAfterSecondStake := expectedLiquidSharesAfterFirstStake.Add(secondIncreaseAmount) -// _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, secondIncreaseAmount) -// require.NoError(t, err, "no error expected after increasing liquid staking cap") -// checkValidatorLiquidShares(expectedLiquidSharesAfterSecondStake, "shares after loose liquid stake cap") -// } - -// // Tests DecreaseValidatorLiquidShares -// func (s *KeeperTestSuite) TestDecreaseValidatorLiquidShares(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// initialLiquidShares := sdk.NewDec(100) -// decreaseAmount := sdk.NewDec(10) - -// // Create a validator with designated self-bond shares -// privKey := secp256k1.GenPrivKey() -// pubKey := privKey.PubKey() -// valAddress := sdk.ValAddress(pubKey.Address()) - -// initialValidator := types.Validator{ -// OperatorAddress: valAddress.String(), -// LiquidShares: initialLiquidShares, -// } -// keeper.SetValidator(ctx, initialValidator) - -// // Decrease the validator liquid shares, and confirm the new share amount has been updated -// _, err := keeper.DecreaseValidatorLiquidShares(ctx, valAddress, decreaseAmount) -// require.NoError(t, err, "no error expected when decreasing validator liquid shares") - -// actualValidator, found := keeper.GetValidator(ctx, valAddress) -// require.True(t, found) -// require.Equal(t, initialLiquidShares.Sub(decreaseAmount), actualValidator.LiquidShares, "liquid shares") - -// // Attempt to decrease by a larger amount than it has, it should fail -// _, err = keeper.DecreaseValidatorLiquidShares(ctx, valAddress, initialLiquidShares) -// require.ErrorIs(t, err, types.ErrValidatorLiquidSharesUnderflow) -// } - -// // Tests SafelyDecreaseValidatorBond -// func (s *KeeperTestSuite) TestSafelyDecreaseValidatorBond(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// // Initial Bond Factor: 100, Initial Validator Bond: 10 -// // => Max Liquid Shares 1000 (Initial Liquid Shares: 200) -// initialBondFactor := sdk.NewDec(100) -// initialValidatorBondShares := sdk.NewDec(10) -// initialLiquidShares := sdk.NewDec(200) - -// // Create a validator with designated self-bond shares -// privKey := secp256k1.GenPrivKey() -// pubKey := privKey.PubKey() -// valAddress := sdk.ValAddress(pubKey.Address()) - -// initialValidator := types.Validator{ -// OperatorAddress: valAddress.String(), -// ValidatorBondShares: initialValidatorBondShares, -// LiquidShares: initialLiquidShares, -// } -// keeper.SetValidator(ctx, initialValidator) - -// // Set the bond factor -// params := keeper.GetParams(ctx) -// params.ValidatorBondFactor = initialBondFactor -// keeper.SetParams(ctx, params) - -// // Decrease the validator bond from 10 to 5 (minus 5) -// // This will adjust the cap (factor * shares) -// // from (100 * 10 = 1000) to (100 * 5 = 500) -// // Since this is still above the initial liquid shares of 200, this will succeed -// decreaseAmount, expectedBondShares := sdk.NewDec(5), sdk.NewDec(5) -// err := keeper.SafelyDecreaseValidatorBond(ctx, valAddress, decreaseAmount) -// require.NoError(t, err) - -// actualValidator, found := keeper.GetValidator(ctx, valAddress) -// require.True(t, found) -// require.Equal(t, expectedBondShares, actualValidator.ValidatorBondShares, "validator bond shares shares") - -// // Now attempt to decrease the validator bond again from 5 to 1 (minus 4) -// // This time, the cap will be reduced to (factor * shares) = (100 * 1) = 100 -// // However, the liquid shares are currently 200, so this should fail -// decreaseAmount, expectedBondShares = sdk.NewDec(4), sdk.NewDec(1) -// err = keeper.SafelyDecreaseValidatorBond(ctx, valAddress, decreaseAmount) -// require.ErrorIs(t, err, types.ErrInsufficientValidatorBondShares) - -// // Finally, disable the cap and attempt to decrease again -// // This time it should succeed -// params.ValidatorBondFactor = types.ValidatorBondCapDisabled -// keeper.SetParams(ctx, params) - -// err = keeper.SafelyDecreaseValidatorBond(ctx, valAddress, decreaseAmount) -// require.NoError(t, err) - -// actualValidator, found = keeper.GetValidator(ctx, valAddress) -// require.True(t, found) -// require.Equal(t, expectedBondShares, actualValidator.ValidatorBondShares, "validator bond shares shares") -// } - -// // Tests Add/Remove/Get/SetTokenizeSharesLock -// func (s *KeeperTestSuite) TestTokenizeSharesLock(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// addresses := simtestutil.AddTestAddrs(s.bankKeeper, ctx, 2, sdk.NewInt(1)) -// addressA, addressB := addresses[0], addresses[1] - -// unlocked := types.TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED.String() -// locked := types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String() -// lockExpiring := types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String() - -// // Confirm both accounts start unlocked -// status, _ := keeper.GetTokenizeSharesLock(ctx, addressA) -// require.Equal(t, unlocked, status.String(), "addressA unlocked at start") - -// status, _ = keeper.GetTokenizeSharesLock(ctx, addressB) -// require.Equal(t, unlocked, status.String(), "addressB unlocked at start") - -// // Lock the first account -// keeper.AddTokenizeSharesLock(ctx, addressA) - -// // The first account should now have tokenize shares disabled -// // and the unlock time should be the zero time -// status, _ = keeper.GetTokenizeSharesLock(ctx, addressA) -// require.Equal(t, locked, status.String(), "addressA locked") - -// status, _ = keeper.GetTokenizeSharesLock(ctx, addressB) -// require.Equal(t, unlocked, status.String(), "addressB still unlocked") - -// // Update the lock time and confirm it was set -// expectedUnlockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) -// keeper.SetTokenizeSharesUnlockTime(ctx, addressA, expectedUnlockTime) - -// status, actualUnlockTime := keeper.GetTokenizeSharesLock(ctx, addressA) -// require.Equal(t, lockExpiring, status.String(), "addressA lock expiring") -// require.Equal(t, expectedUnlockTime, actualUnlockTime, "addressA unlock time") - -// // Confirm B is still unlocked -// status, _ = keeper.GetTokenizeSharesLock(ctx, addressB) -// require.Equal(t, unlocked, status.String(), "addressB still unlocked") - -// // Remove the lock -// keeper.RemoveTokenizeSharesLock(ctx, addressA) -// status, _ = keeper.GetTokenizeSharesLock(ctx, addressA) -// require.Equal(t, unlocked, status.String(), "addressA unlocked at end") - -// status, _ = keeper.GetTokenizeSharesLock(ctx, addressB) -// require.Equal(t, unlocked, status.String(), "addressB unlocked at end") -// } - -// // Tests GetAllTokenizeSharesLocks -// func (s *KeeperTestSuite) TestGetAllTokenizeSharesLocks(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// addresses := simapp.AddTestAddrs(app, ctx, 4, sdk.NewInt(1)) - -// // Set 2 locked accounts, and two accounts with a lock expiring -// keeper.AddTokenizeSharesLock(ctx, addresses[0]) -// keeper.AddTokenizeSharesLock(ctx, addresses[1]) - -// unlockTime1 := time.Date(2023, 1, 1, 1, 0, 0, 0, time.UTC) -// unlockTime2 := time.Date(2023, 1, 2, 1, 0, 0, 0, time.UTC) -// keeper.SetTokenizeSharesUnlockTime(ctx, addresses[2], unlockTime1) -// keeper.SetTokenizeSharesUnlockTime(ctx, addresses[3], unlockTime2) - -// // Defined expected locks after GetAll -// expectedLocks := map[string]types.TokenizeShareLock{ -// addresses[0].String(): { -// Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String(), -// }, -// addresses[1].String(): { -// Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String(), -// }, -// addresses[2].String(): { -// Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String(), -// CompletionTime: unlockTime1, -// }, -// addresses[3].String(): { -// Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String(), -// CompletionTime: unlockTime2, -// }, -// } - -// // Check output from GetAll -// actualLocks := keeper.GetAllTokenizeSharesLocks(ctx) -// require.Len(actualLocks, len(expectedLocks), "number of locks") - -// for i, actual := range actualLocks { -// expected, ok := expectedLocks[actual.Address] -// require.True(ok, "address %s not expected", actual.Address) -// require.Equal(expected.Status, actual.Status, "tokenize share lock #%d status", i) -// require.Equal(expected.CompletionTime, actual.CompletionTime, "tokenize share lock #%d completion time", i) -// } -// } - -// // Test Get/SetPendingTokenizeShareAuthorizations -// func (s *KeeperTestSuite) TestPendingTokenizeShareAuthorizations(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// // Create dummy accounts and completion times -// addresses := simapp.AddTestAddrs(app, ctx, 3, sdk.NewInt(1)) -// addressStrings := []string{} -// for _, address := range addresses { -// addressStrings = append(addressStrings, address.String()) -// } - -// timeA := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) -// timeB := timeA.Add(time.Hour) - -// // There should be no addresses returned originally -// authorizationsA := keeper.GetPendingTokenizeShareAuthorizations(ctx, timeA) -// require.Empty(t, authorizationsA.Addresses, "no addresses at timeA expected") - -// authorizationsB := keeper.GetPendingTokenizeShareAuthorizations(ctx, timeB) -// require.Empty(t, authorizationsB.Addresses, "no addresses at timeB expected") - -// // Store addresses for timeB -// keeper.SetPendingTokenizeShareAuthorizations(ctx, timeB, types.PendingTokenizeShareAuthorizations{ -// Addresses: addressStrings, -// }) - -// // Check addresses -// authorizationsA = keeper.GetPendingTokenizeShareAuthorizations(ctx, timeA) -// require.Empty(t, authorizationsA.Addresses, "no addresses at timeA expected at end") - -// authorizationsB = keeper.GetPendingTokenizeShareAuthorizations(ctx, timeB) -// require.Equal(t, addressStrings, authorizationsB.Addresses, "address length") -// } - -// // Test QueueTokenizeSharesAuthorization and RemoveExpiredTokenizeShareLocks -// func (s *KeeperTestSuite) TestTokenizeShareAuthorizationQueue(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// // We'll start by adding the following addresses to the queue -// // Time 0: [address0] -// // Time 1: [] -// // Time 2: [address1, address2, address3] -// // Time 3: [address4, address5] -// // Time 4: [address6] -// addresses := simapp.AddTestAddrs(app, ctx, 7, sdk.NewInt(1)) -// addressesByTime := map[int][]sdk.AccAddress{ -// 0: {addresses[0]}, -// 1: {}, -// 2: {addresses[1], addresses[2], addresses[3]}, -// 3: {addresses[4], addresses[5]}, -// 4: {addresses[6]}, -// } - -// // Set the unbonding time to 1 day -// unbondingPeriod := time.Hour * 24 -// params := keeper.GetParams(ctx) -// params.UnbondingTime = unbondingPeriod -// keeper.SetParams(ctx, params) - -// // Add each address to the queue and then increment the block time -// // such that the times line up as follows -// // Time 0: 2023-01-01 00:00:00 -// // Time 1: 2023-01-01 00:01:00 -// // Time 2: 2023-01-01 00:02:00 -// // Time 3: 2023-01-01 00:03:00 -// startTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) -// ctx = ctx.WithBlockTime(startTime) -// blockTimeIncrement := time.Hour - -// for timeIndex := 0; timeIndex <= 4; timeIndex++ { -// for _, address := range addressesByTime[timeIndex] { -// keeper.QueueTokenizeSharesAuthorization(ctx, address) -// } -// ctx = ctx.WithBlockTime(ctx.BlockTime().Add(blockTimeIncrement)) -// } - -// // We'll unlock the tokens using the following progression -// // The "alias'"/keys for these times assume a starting point of the Time 0 -// // from above, plus the Unbonding Time -// // Time -1 (2023-01-01 23:59:99): [] -// // Time 0 (2023-01-02 00:00:00): [address0] -// // Time 1 (2023-01-02 00:01:00): [] -// // Time 2.5 (2023-01-02 00:02:30): [address1, address2, address3] -// // Time 10 (2023-01-02 00:10:00): [address4, address5, address6] -// unlockBlockTimes := map[string]time.Time{ -// "-1": startTime.Add(unbondingPeriod).Add(-time.Second), -// "0": startTime.Add(unbondingPeriod), -// "1": startTime.Add(unbondingPeriod).Add(blockTimeIncrement), -// "2.5": startTime.Add(unbondingPeriod).Add(2 * blockTimeIncrement).Add(blockTimeIncrement / 2), -// "10": startTime.Add(unbondingPeriod).Add(10 * blockTimeIncrement), -// } -// expectedUnlockedAddresses := map[string][]string{ -// "-1": {}, -// "0": {addresses[0].String()}, -// "1": {}, -// "2.5": {addresses[1].String(), addresses[2].String(), addresses[3].String()}, -// "10": {addresses[4].String(), addresses[5].String(), addresses[6].String()}, -// } - -// // Now we'll remove items from the queue sequentially -// // First check with a block time before the first expiration - it should remove no addresses -// actualAddresses := keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["-1"]) -// require.Equal(t, expectedUnlockedAddresses["-1"], actualAddresses, "no addresses unlocked from time -1") - -// // Then pass in (time 0 + unbonding time) - it should remove the first address -// actualAddresses = keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["0"]) -// require.Equal(t, expectedUnlockedAddresses["0"], actualAddresses, "one address unlocked from time 0") - -// // Now pass in (time 1 + unbonding time) - it should remove no addresses since -// // the address at time 0 was already removed -// actualAddresses = keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["1"]) -// require.Equal(t, expectedUnlockedAddresses["1"], actualAddresses, "no addresses unlocked from time 1") - -// // Now pass in (time 2.5 + unbonding time) - it should remove the three addresses from time 2 -// actualAddresses = keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["2.5"]) -// require.Equal(t, expectedUnlockedAddresses["2.5"], actualAddresses, "addresses unlocked from time 2.5") - -// // Finally pass in a block time far in the future, which should remove all the remaining locks -// actualAddresses = keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["10"]) -// require.Equal(t, expectedUnlockedAddresses["10"], actualAddresses, "addresses unlocked from time 10") -// } - -// // Test RefreshTotalLiquidStaked -// func (s *KeeperTestSuite) TestRefreshTotalLiquidStaked(t *testing.T) { -// ctx, keeper := s.ctx, s.stakingKeeper -// require := s.Require() - -// // Set an arbitrary total liquid staked tokens amount that will get overwritten by the refresh -// keeper.SetTotalLiquidStakedTokens(ctx, sdk.NewInt(999)) - -// // Add validator's with various exchange rates -// validators := []types.Validator{ -// { -// // Exchange rate of 1 -// OperatorAddress: "valA", -// Tokens: sdk.NewInt(100), -// DelegatorShares: sdk.NewDec(100), -// LiquidShares: sdk.NewDec(100), // should be overwritten -// }, -// { -// // Exchange rate of 0.9 -// OperatorAddress: "valB", -// Tokens: sdk.NewInt(90), -// DelegatorShares: sdk.NewDec(100), -// LiquidShares: sdk.NewDec(200), // should be overwritten -// }, -// { -// // Exchange rate of 0.75 -// OperatorAddress: "valC", -// Tokens: sdk.NewInt(75), -// DelegatorShares: sdk.NewDec(100), -// LiquidShares: sdk.NewDec(300), // should be overwritten -// }, -// } - -// // Add various delegations across the above validator's -// // Total Liquid Staked: 1,849 + 922 = 2,771 -// // Liquid Shares: -// // ValA: 400 + 325 = 725 -// // ValB: 860 + 580 = 1,440 -// // ValC: 900 + 100 = 1,000 -// expectedTotalLiquidStaked := int64(2771) -// expectedValidatorLiquidShares := map[string]sdk.Dec{ -// "valA": sdk.NewDec(725), -// "valB": sdk.NewDec(1440), -// "valC": sdk.NewDec(1000), -// } - -// delegations := []struct { -// delegation types.Delegation -// isLSTP bool -// isTokenized bool -// }{ -// // Delegator A - Not a liquid staking provider -// // Number of tokens/shares is irrelevant for this test -// { -// isLSTP: false, -// delegation: types.Delegation{ -// DelegatorAddress: "delA", -// ValidatorAddress: "valA", -// Shares: sdk.NewDec(100), -// }, -// }, -// { -// isLSTP: false, -// delegation: types.Delegation{ -// DelegatorAddress: "delA", -// ValidatorAddress: "valB", -// Shares: sdk.NewDec(860), -// }, -// }, -// { -// isLSTP: false, -// delegation: types.Delegation{ -// DelegatorAddress: "delA", -// ValidatorAddress: "valC", -// Shares: sdk.NewDec(750), -// }, -// }, -// // Delegator B - Liquid staking provider, tokens included in total -// // Total liquid staked: 400 + 774 + 675 = 1,849 -// { -// // Shares: 400 shares, Exchange Rate: 1.0, Tokens: 400 -// isLSTP: true, -// delegation: types.Delegation{ -// DelegatorAddress: "delB-LSTP", -// ValidatorAddress: "valA", -// Shares: sdk.NewDec(400), -// }, -// }, -// { -// // Shares: 860 shares, Exchange Rate: 0.9, Tokens: 774 -// isLSTP: true, -// delegation: types.Delegation{ -// DelegatorAddress: "delB-LSTP", -// ValidatorAddress: "valB", -// Shares: sdk.NewDec(860), -// }, -// }, -// { -// // Shares: 900 shares, Exchange Rate: 0.75, Tokens: 675 -// isLSTP: true, -// delegation: types.Delegation{ -// DelegatorAddress: "delB-LSTP", -// ValidatorAddress: "valC", -// Shares: sdk.NewDec(900), -// }, -// }, -// // Delegator C - Tokenized shares, tokens included in total -// // Total liquid staked: 325 + 522 + 75 = 922 -// { -// // Shares: 325 shares, Exchange Rate: 1.0, Tokens: 325 -// isTokenized: true, -// delegation: types.Delegation{ -// DelegatorAddress: "delC-LSTP", -// ValidatorAddress: "valA", -// Shares: sdk.NewDec(325), -// }, -// }, -// { -// // Shares: 580 shares, Exchange Rate: 0.9, Tokens: 522 -// isTokenized: true, -// delegation: types.Delegation{ -// DelegatorAddress: "delC-LSTP", -// ValidatorAddress: "valB", -// Shares: sdk.NewDec(580), -// }, -// }, -// { -// // Shares: 100 shares, Exchange Rate: 0.75, Tokens: 75 -// isTokenized: true, -// delegation: types.Delegation{ -// DelegatorAddress: "delC-LSTP", -// ValidatorAddress: "valC", -// Shares: sdk.NewDec(100), -// }, -// }, -// } - -// // Create validators based on the above (must use an actual validator address) -// addresses := testutil.AddTestAddrsIncremental(s.bankKeeper, ctx, 5, keeper.TokensFromConsensusPower(ctx, 300)) -// validatorAddresses := map[string]sdk.ValAddress{ -// "valA": sdk.ValAddress(addresses[0]), -// "valB": sdk.ValAddress(addresses[1]), -// "valC": sdk.ValAddress(addresses[2]), -// } -// for _, validator := range validators { -// validator.OperatorAddress = validatorAddresses[validator.OperatorAddress].String() -// keeper.SetValidator(ctx, validator) -// } - -// // Create the delegations based on the above (must use actual delegator addresses) -// for _, delegationCase := range delegations { -// var delegatorAddress sdk.AccAddress -// switch { -// case delegationCase.isLSTP: -// delegatorAddress = createICAAccount(app, ctx) -// case delegationCase.isTokenized: -// delegatorAddress = createTokenizeShareModuleAccount(1) -// default: -// delegatorAddress = createBaseAccount(app, ctx, delegationCase.delegation.DelegatorAddress) -// } - -// delegation := delegationCase.delegation -// delegation.DelegatorAddress = delegatorAddress.String() -// delegation.ValidatorAddress = validatorAddresses[delegation.ValidatorAddress].String() -// keeper.SetDelegation(ctx, delegation) -// } - -// // Refresh the total liquid staked and validator liquid shares -// err := keeper.RefreshTotalLiquidStaked(ctx) -// require.NoError(t, err, "no error expected when refreshing total liquid staked") - -// // Check the total liquid staked and liquid shares by validator -// actualTotalLiquidStaked := keeper.GetTotalLiquidStakedTokens(ctx) -// require.Equal(t, expectedTotalLiquidStaked, actualTotalLiquidStaked.Int64(), "total liquid staked tokens") - -// for _, moniker := range []string{"valA", "valB", "valC"} { -// address := validatorAddresses[moniker] -// expectedLiquidShares := expectedValidatorLiquidShares[moniker] - -// actualValidator, found := keeper.GetValidator(ctx, address) -// require.True(t, found, "validator %s should have been found after refresh", moniker) - -// actualLiquidShares := actualValidator.LiquidShares -// require.Equal(t, expectedLiquidShares.TruncateInt64(), actualLiquidShares.TruncateInt64(), -// "liquid staked shares for validator %s", moniker) -// } -// } +import ( + "time" + + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +// Tests Set/Get TotalLiquidStakedTokens +func (s *KeeperTestSuite) TestTotalLiquidStakedTokens() { + ctx, keeper := s.ctx, s.stakingKeeper + require := s.Require() + + // Update the total liquid staked + total := sdk.NewInt(100) + keeper.SetTotalLiquidStakedTokens(ctx, total) + + // Confirm it was updated + require.Equal(total, keeper.GetTotalLiquidStakedTokens(ctx), "initial") +} + +// Tests Increase/Decrease TotalValidatorLiquidShares +func (s *KeeperTestSuite) TestValidatorLiquidShares() { + ctx, keeper := s.ctx, s.stakingKeeper + + // Create a validator address + privKey := secp256k1.GenPrivKey() + pubKey := privKey.PubKey() + valAddress := sdk.ValAddress(pubKey.Address()) + + // Set an initial total + initial := sdk.NewDec(100) + validator := types.Validator{ + OperatorAddress: valAddress.String(), + LiquidShares: initial, + } + keeper.SetValidator(ctx, validator) +} + +// Tests DecreaseTotalLiquidStakedTokens +func (s *KeeperTestSuite) TestDecreaseTotalLiquidStakedTokens() { + ctx, keeper := s.ctx, s.stakingKeeper + require := s.Require() + + intitialTotalLiquidStaked := sdk.NewInt(100) + decreaseAmount := sdk.NewInt(10) + + // Set the total liquid staked to an arbitrary value + keeper.SetTotalLiquidStakedTokens(ctx, intitialTotalLiquidStaked) + + // Decrease the total liquid stake and confirm the total was updated + err := keeper.DecreaseTotalLiquidStakedTokens(ctx, decreaseAmount) + require.NoError(err, "no error expected when decreasing total liquid staked tokens") + require.Equal(intitialTotalLiquidStaked.Sub(decreaseAmount), keeper.GetTotalLiquidStakedTokens(ctx)) + + // Attempt to decrease by an excessive amount, it should error + err = keeper.DecreaseTotalLiquidStakedTokens(ctx, intitialTotalLiquidStaked) + require.ErrorIs(err, types.ErrTotalLiquidStakedUnderflow) +} + +// Tests CheckExceedsValidatorBondCap +func (s *KeeperTestSuite) TestCheckExceedsValidatorBondCap() { + ctx, keeper := s.ctx, s.stakingKeeper + require := s.Require() + + testCases := []struct { + name string + validatorShares sdk.Dec + validatorBondFactor sdk.Dec + currentLiquidShares sdk.Dec + newShares sdk.Dec + expectedExceeds bool + }{ + { + // Validator Shares: 100, Factor: 1, Current Shares: 90 => 100 Max Shares, Capacity: 10 + // New Shares: 5 - below cap + name: "factor 1 - below cap", + validatorShares: sdk.NewDec(100), + validatorBondFactor: sdk.NewDec(1), + currentLiquidShares: sdk.NewDec(90), + newShares: sdk.NewDec(5), + expectedExceeds: false, + }, + { + // Validator Shares: 100, Factor: 1, Current Shares: 90 => 100 Max Shares, Capacity: 10 + // New Shares: 10 - at cap + name: "factor 1 - at cap", + validatorShares: sdk.NewDec(100), + validatorBondFactor: sdk.NewDec(1), + currentLiquidShares: sdk.NewDec(90), + newShares: sdk.NewDec(10), + expectedExceeds: false, + }, + { + // Validator Shares: 100, Factor: 1, Current Shares: 90 => 100 Max Shares, Capacity: 10 + // New Shares: 15 - above cap + name: "factor 1 - above cap", + validatorShares: sdk.NewDec(100), + validatorBondFactor: sdk.NewDec(1), + currentLiquidShares: sdk.NewDec(90), + newShares: sdk.NewDec(15), + expectedExceeds: true, + }, + { + // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110 + // New Shares: 5 - below cap + name: "factor 2 - well below cap", + validatorShares: sdk.NewDec(100), + validatorBondFactor: sdk.NewDec(2), + currentLiquidShares: sdk.NewDec(90), + newShares: sdk.NewDec(5), + expectedExceeds: false, + }, + { + // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110 + // New Shares: 100 - below cap + name: "factor 2 - below cap", + validatorShares: sdk.NewDec(100), + validatorBondFactor: sdk.NewDec(2), + currentLiquidShares: sdk.NewDec(90), + newShares: sdk.NewDec(100), + expectedExceeds: false, + }, + { + // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110 + // New Shares: 110 - below cap + name: "factor 2 - at cap", + validatorShares: sdk.NewDec(100), + validatorBondFactor: sdk.NewDec(2), + currentLiquidShares: sdk.NewDec(90), + newShares: sdk.NewDec(110), + expectedExceeds: false, + }, + { + // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110 + // New Shares: 111 - above cap + name: "factor 2 - above cap", + validatorShares: sdk.NewDec(100), + validatorBondFactor: sdk.NewDec(2), + currentLiquidShares: sdk.NewDec(90), + newShares: sdk.NewDec(111), + expectedExceeds: true, + }, + { + // Validator Shares: 100, Factor: 100, Current Shares: 90 => 10000 Max Shares, Capacity: 9910 + // New Shares: 100 - below cap + name: "factor 100 - below cap", + validatorShares: sdk.NewDec(100), + validatorBondFactor: sdk.NewDec(100), + currentLiquidShares: sdk.NewDec(90), + newShares: sdk.NewDec(100), + expectedExceeds: false, + }, + { + // Validator Shares: 100, Factor: 100, Current Shares: 90 => 10000 Max Shares, Capacity: 9910 + // New Shares: 9910 - at cap + name: "factor 100 - at cap", + validatorShares: sdk.NewDec(100), + validatorBondFactor: sdk.NewDec(100), + currentLiquidShares: sdk.NewDec(90), + newShares: sdk.NewDec(9910), + expectedExceeds: false, + }, + { + // Validator Shares: 100, Factor: 100, Current Shares: 90 => 10000 Max Shares, Capacity: 9910 + // New Shares: 9911 - above cap + name: "factor 100 - above cap", + validatorShares: sdk.NewDec(100), + validatorBondFactor: sdk.NewDec(100), + currentLiquidShares: sdk.NewDec(90), + newShares: sdk.NewDec(9911), + expectedExceeds: true, + }, + { + // Factor of -1 (disabled): Should always return false + name: "factor disabled", + validatorShares: sdk.NewDec(1), + validatorBondFactor: sdk.NewDec(-1), + currentLiquidShares: sdk.NewDec(1), + newShares: sdk.NewDec(1_000_000), + expectedExceeds: false, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + // Update the validator bond factor + params := keeper.GetParams(ctx) + params.ValidatorBondFactor = tc.validatorBondFactor + keeper.SetParams(ctx, params) + + // Create a validator with designated self-bond shares + validator := types.Validator{ + LiquidShares: tc.currentLiquidShares, + ValidatorBondShares: tc.validatorShares, + } + + // Check whether the cap is exceeded + actualExceeds := keeper.CheckExceedsValidatorBondCap(ctx, validator, tc.newShares) + require.Equal(tc.expectedExceeds, actualExceeds, tc.name) + }) + } +} + +// Tests TestCheckExceedsValidatorLiquidStakingCap +func (s *KeeperTestSuite) TestCheckExceedsValidatorLiquidStakingCap() { + ctx, keeper := s.ctx, s.stakingKeeper + require := s.Require() + + testCases := []struct { + name string + validatorLiquidCap sdk.Dec + validatorLiquidShares sdk.Dec + validatorTotalShares sdk.Dec + newLiquidShares sdk.Dec + expectedExceeds bool + }{ + { + // Cap: 10% - Delegation Below Threshold + // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 1 + // => Liquid Shares: 5+1=6, Total Shares: 95+1=96 => 6/96 = 6% < 10% cap + name: "10 percent cap _ delegation below cap", + validatorLiquidCap: sdk.MustNewDecFromStr("0.1"), + validatorLiquidShares: sdk.NewDec(5), + validatorTotalShares: sdk.NewDec(95), + newLiquidShares: sdk.NewDec(1), + expectedExceeds: false, + }, + { + // Cap: 10% - Delegation At Threshold + // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 5 + // => Liquid Shares: 5+5=10, Total Shares: 95+5=100 => 10/100 = 10% == 10% cap + name: "10 percent cap _ delegation equals cap", + validatorLiquidCap: sdk.MustNewDecFromStr("0.1"), + validatorLiquidShares: sdk.NewDec(5), + validatorTotalShares: sdk.NewDec(95), + newLiquidShares: sdk.NewDec(4), + expectedExceeds: false, + }, + { + // Cap: 10% - Delegation Exceeds Threshold + // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 6 + // => Liquid Shares: 5+6=11, Total Shares: 95+6=101 => 11/101 = 11% > 10% cap + name: "10 percent cap _ delegation exceeds cap", + validatorLiquidCap: sdk.MustNewDecFromStr("0.1"), + validatorLiquidShares: sdk.NewDec(5), + validatorTotalShares: sdk.NewDec(95), + newLiquidShares: sdk.NewDec(6), + expectedExceeds: true, + }, + { + // Cap: 20% - Delegation Below Threshold + // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 29 + // => Liquid Shares: 20+29=49, Total Shares: 220+29=249 => 49/249 = 19% < 20% cap + name: "20 percent cap _ delegation below cap", + validatorLiquidCap: sdk.MustNewDecFromStr("0.2"), + validatorLiquidShares: sdk.NewDec(20), + validatorTotalShares: sdk.NewDec(220), + newLiquidShares: sdk.NewDec(29), + expectedExceeds: false, + }, + { + // Cap: 20% - Delegation At Threshold + // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 30 + // => Liquid Shares: 20+30=50, Total Shares: 220+30=250 => 50/250 = 20% == 20% cap + name: "20 percent cap _ delegation equals cap", + validatorLiquidCap: sdk.MustNewDecFromStr("0.2"), + validatorLiquidShares: sdk.NewDec(20), + validatorTotalShares: sdk.NewDec(220), + newLiquidShares: sdk.NewDec(30), + expectedExceeds: false, + }, + { + // Cap: 20% - Delegation Exceeds Threshold + // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 31 + // => Liquid Shares: 20+31=51, Total Shares: 220+31=251 => 51/251 = 21% > 20% cap + name: "20 percent cap _ delegation exceeds cap", + validatorLiquidCap: sdk.MustNewDecFromStr("0.2"), + validatorLiquidShares: sdk.NewDec(20), + validatorTotalShares: sdk.NewDec(220), + newLiquidShares: sdk.NewDec(31), + expectedExceeds: true, + }, + { + // Cap of 0% - everything should exceed + name: "0 percent cap", + validatorLiquidCap: sdk.ZeroDec(), + validatorLiquidShares: sdk.NewDec(0), + validatorTotalShares: sdk.NewDec(1_000_000), + newLiquidShares: sdk.NewDec(1), + expectedExceeds: true, + }, + { + // Cap of 100% - nothing should exceed + name: "100 percent cap", + validatorLiquidCap: sdk.OneDec(), + validatorLiquidShares: sdk.NewDec(1), + validatorTotalShares: sdk.NewDec(1_000_000), + newLiquidShares: sdk.NewDec(1), + expectedExceeds: false, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + // Update the validator liquid staking cap + params := keeper.GetParams(ctx) + params.ValidatorLiquidStakingCap = tc.validatorLiquidCap + keeper.SetParams(ctx, params) + + // Create a validator with designated self-bond shares + validator := types.Validator{ + LiquidShares: tc.validatorLiquidShares, + DelegatorShares: tc.validatorTotalShares, + } + + // Check whether the cap is exceeded + actualExceeds := keeper.CheckExceedsValidatorLiquidStakingCap(ctx, validator, tc.newLiquidShares) + require.Equal(tc.expectedExceeds, actualExceeds, tc.name) + }) + } +} + +// Tests SafelyIncreaseValidatorLiquidShares +func (s *KeeperTestSuite) TestSafelyIncreaseValidatorLiquidShares() { + ctx, keeper := s.ctx, s.stakingKeeper + require := s.Require() + + // Generate a test validator address + privKey := secp256k1.GenPrivKey() + pubKey := privKey.PubKey() + valAddress := sdk.ValAddress(pubKey.Address()) + + // Helper function to check the validator's liquid shares + checkValidatorLiquidShares := func(expected sdk.Dec, description string) { + actualValidator, found := keeper.GetValidator(ctx, valAddress) + require.True(found) + require.Equal(expected.TruncateInt64(), actualValidator.LiquidShares.TruncateInt64(), description) + } + + // Start with the following: + // Initial Liquid Shares: 0 + // Validator Bond Shares: 10 + // Validator TotalShares: 75 + // + // Initial Caps: + // ValidatorBondFactor: 1 (Cap applied at 10 shares) + // ValidatorLiquidStakingCap: 25% (Cap applied at 25 shares) + // + // Cap Increases: + // ValidatorBondFactor: 10 (Cap applied at 100 shares) + // ValidatorLiquidStakingCap: 40% (Cap applied at 50 shares) + initialLiquidShares := sdk.NewDec(0) + validatorBondShares := sdk.NewDec(10) + validatorTotalShares := sdk.NewDec(75) + + firstIncreaseAmount := sdk.NewDec(20) + secondIncreaseAmount := sdk.NewDec(10) // total increase of 30 + + initialBondFactor := sdk.NewDec(1) + finalBondFactor := sdk.NewDec(10) + initialLiquidStakingCap := sdk.MustNewDecFromStr("0.25") + finalLiquidStakingCap := sdk.MustNewDecFromStr("0.4") + + // Create a validator with designated self-bond shares + initialValidator := types.Validator{ + OperatorAddress: valAddress.String(), + LiquidShares: initialLiquidShares, + ValidatorBondShares: validatorBondShares, + DelegatorShares: validatorTotalShares, + } + keeper.SetValidator(ctx, initialValidator) + + // Set validator bond factor to a small number such that any delegation would fail, + // and set the liquid staking cap such that the first stake would succeed, but the second + // would fail + params := keeper.GetParams(ctx) + params.ValidatorBondFactor = initialBondFactor + params.ValidatorLiquidStakingCap = initialLiquidStakingCap + keeper.SetParams(ctx, params) + + // Attempt to increase the validator liquid shares, it should throw an + // error that the validator bond cap was exceeded + _, err := keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, firstIncreaseAmount) + require.ErrorIs(err, types.ErrInsufficientValidatorBondShares) + checkValidatorLiquidShares(initialLiquidShares, "shares after low bond factor") + + // Change validator bond factor to a more conservative number, so that the increase succeeds + params.ValidatorBondFactor = finalBondFactor + keeper.SetParams(ctx, params) + + // Try the increase again and check that it succeeded + expectedLiquidSharesAfterFirstStake := initialLiquidShares.Add(firstIncreaseAmount) + _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, firstIncreaseAmount) + require.NoError(err) + checkValidatorLiquidShares(expectedLiquidSharesAfterFirstStake, "shares with cap loose bond cap") + + // Attempt another increase, it should fail from the liquid staking cap + _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, secondIncreaseAmount) + require.ErrorIs(err, types.ErrValidatorLiquidStakingCapExceeded) + checkValidatorLiquidShares(expectedLiquidSharesAfterFirstStake, "shares after liquid staking cap hit") + + // Raise the liquid staking cap so the new increment succeeds + params.ValidatorLiquidStakingCap = finalLiquidStakingCap + keeper.SetParams(ctx, params) + + // Finally confirm that the increase succeeded this time + expectedLiquidSharesAfterSecondStake := expectedLiquidSharesAfterFirstStake.Add(secondIncreaseAmount) + _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, secondIncreaseAmount) + require.NoError(err, "no error expected after increasing liquid staking cap") + checkValidatorLiquidShares(expectedLiquidSharesAfterSecondStake, "shares after loose liquid stake cap") +} + +// Tests DecreaseValidatorLiquidShares +func (s *KeeperTestSuite) TestDecreaseValidatorLiquidShares() { + ctx, keeper := s.ctx, s.stakingKeeper + require := s.Require() + + initialLiquidShares := sdk.NewDec(100) + decreaseAmount := sdk.NewDec(10) + + // Create a validator with designated self-bond shares + privKey := secp256k1.GenPrivKey() + pubKey := privKey.PubKey() + valAddress := sdk.ValAddress(pubKey.Address()) + + initialValidator := types.Validator{ + OperatorAddress: valAddress.String(), + LiquidShares: initialLiquidShares, + } + keeper.SetValidator(ctx, initialValidator) + + // Decrease the validator liquid shares, and confirm the new share amount has been updated + _, err := keeper.DecreaseValidatorLiquidShares(ctx, valAddress, decreaseAmount) + require.NoError(err, "no error expected when decreasing validator liquid shares") + + actualValidator, found := keeper.GetValidator(ctx, valAddress) + require.True(found) + require.Equal(initialLiquidShares.Sub(decreaseAmount), actualValidator.LiquidShares, "liquid shares") + + // Attempt to decrease by a larger amount than it has, it should fail + _, err = keeper.DecreaseValidatorLiquidShares(ctx, valAddress, initialLiquidShares) + require.ErrorIs(err, types.ErrValidatorLiquidSharesUnderflow) +} + +// Tests SafelyDecreaseValidatorBond +func (s *KeeperTestSuite) TestSafelyDecreaseValidatorBond() { + ctx, keeper := s.ctx, s.stakingKeeper + require := s.Require() + + // Initial Bond Factor: 100, Initial Validator Bond: 10 + // => Max Liquid Shares 1000 (Initial Liquid Shares: 200) + initialBondFactor := sdk.NewDec(100) + initialValidatorBondShares := sdk.NewDec(10) + initialLiquidShares := sdk.NewDec(200) + + // Create a validator with designated self-bond shares + privKey := secp256k1.GenPrivKey() + pubKey := privKey.PubKey() + valAddress := sdk.ValAddress(pubKey.Address()) + + initialValidator := types.Validator{ + OperatorAddress: valAddress.String(), + ValidatorBondShares: initialValidatorBondShares, + LiquidShares: initialLiquidShares, + } + keeper.SetValidator(ctx, initialValidator) + + // Set the bond factor + params := keeper.GetParams(ctx) + params.ValidatorBondFactor = initialBondFactor + keeper.SetParams(ctx, params) + + // Decrease the validator bond from 10 to 5 (minus 5) + // This will adjust the cap (factor * shares) + // from (100 * 10 = 1000) to (100 * 5 = 500) + // Since this is still above the initial liquid shares of 200, this will succeed + decreaseAmount, expectedBondShares := sdk.NewDec(5), sdk.NewDec(5) + err := keeper.SafelyDecreaseValidatorBond(ctx, valAddress, decreaseAmount) + require.NoError(err) + + actualValidator, found := keeper.GetValidator(ctx, valAddress) + require.True(found) + require.Equal(expectedBondShares, actualValidator.ValidatorBondShares, "validator bond shares shares") + + // Now attempt to decrease the validator bond again from 5 to 1 (minus 4) + // This time, the cap will be reduced to (factor * shares) = (100 * 1) = 100 + // However, the liquid shares are currently 200, so this should fail + decreaseAmount, expectedBondShares = sdk.NewDec(4), sdk.NewDec(1) + err = keeper.SafelyDecreaseValidatorBond(ctx, valAddress, decreaseAmount) + require.ErrorIs(err, types.ErrInsufficientValidatorBondShares) + + // Finally, disable the cap and attempt to decrease again + // This time it should succeed + params.ValidatorBondFactor = types.ValidatorBondCapDisabled + keeper.SetParams(ctx, params) + + err = keeper.SafelyDecreaseValidatorBond(ctx, valAddress, decreaseAmount) + require.NoError(err) + + actualValidator, found = keeper.GetValidator(ctx, valAddress) + require.True(found) + require.Equal(expectedBondShares, actualValidator.ValidatorBondShares, "validator bond shares shares") +} + +// Tests Add/Remove/Get/SetTokenizeSharesLock +func (s *KeeperTestSuite) TestTokenizeSharesLock() { + ctx, keeper := s.ctx, s.stakingKeeper + require := s.Require() + + addresses := simtestutil.CreateIncrementalAccounts(2) + addressA, addressB := addresses[0], addresses[1] + + unlocked := types.TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED.String() + locked := types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String() + lockExpiring := types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String() + + // Confirm both accounts start unlocked + status, _ := keeper.GetTokenizeSharesLock(ctx, addressA) + require.Equal(unlocked, status.String(), "addressA unlocked at start") + + status, _ = keeper.GetTokenizeSharesLock(ctx, addressB) + require.Equal(unlocked, status.String(), "addressB unlocked at start") + + // Lock the first account + keeper.AddTokenizeSharesLock(ctx, addressA) + + // The first account should now have tokenize shares disabled + // and the unlock time should be the zero time + status, _ = keeper.GetTokenizeSharesLock(ctx, addressA) + require.Equal(locked, status.String(), "addressA locked") + + status, _ = keeper.GetTokenizeSharesLock(ctx, addressB) + require.Equal(unlocked, status.String(), "addressB still unlocked") + + // Update the lock time and confirm it was set + expectedUnlockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) + keeper.SetTokenizeSharesUnlockTime(ctx, addressA, expectedUnlockTime) + + status, actualUnlockTime := keeper.GetTokenizeSharesLock(ctx, addressA) + require.Equal(lockExpiring, status.String(), "addressA lock expiring") + require.Equal(expectedUnlockTime, actualUnlockTime, "addressA unlock time") + + // Confirm B is still unlocked + status, _ = keeper.GetTokenizeSharesLock(ctx, addressB) + require.Equal(unlocked, status.String(), "addressB still unlocked") + + // Remove the lock + keeper.RemoveTokenizeSharesLock(ctx, addressA) + status, _ = keeper.GetTokenizeSharesLock(ctx, addressA) + require.Equal(unlocked, status.String(), "addressA unlocked at end") + + status, _ = keeper.GetTokenizeSharesLock(ctx, addressB) + require.Equal(unlocked, status.String(), "addressB unlocked at end") +} + +// Tests GetAllTokenizeSharesLocks +func (s *KeeperTestSuite) TestGetAllTokenizeSharesLocks() { + ctx, keeper := s.ctx, s.stakingKeeper + require := s.Require() + + addresses := simtestutil.CreateIncrementalAccounts(4) + + // Set 2 locked accounts, and two accounts with a lock expiring + keeper.AddTokenizeSharesLock(ctx, addresses[0]) + keeper.AddTokenizeSharesLock(ctx, addresses[1]) + + unlockTime1 := time.Date(2023, 1, 1, 1, 0, 0, 0, time.UTC) + unlockTime2 := time.Date(2023, 1, 2, 1, 0, 0, 0, time.UTC) + keeper.SetTokenizeSharesUnlockTime(ctx, addresses[2], unlockTime1) + keeper.SetTokenizeSharesUnlockTime(ctx, addresses[3], unlockTime2) + + // Defined expected locks after GetAll + expectedLocks := map[string]types.TokenizeShareLock{ + addresses[0].String(): { + Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String(), + }, + addresses[1].String(): { + Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String(), + }, + addresses[2].String(): { + Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String(), + CompletionTime: unlockTime1, + }, + addresses[3].String(): { + Status: types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String(), + CompletionTime: unlockTime2, + }, + } + + // Check output from GetAll + actualLocks := keeper.GetAllTokenizeSharesLocks(ctx) + require.Len(actualLocks, len(expectedLocks), "number of locks") + + for i, actual := range actualLocks { + expected, ok := expectedLocks[actual.Address] + require.True(ok, "address %s not expected", actual.Address) + require.Equal(expected.Status, actual.Status, "tokenize share lock #%d status", i) + require.Equal(expected.CompletionTime, actual.CompletionTime, "tokenize share lock #%d completion time", i) + } +} + +// Test Get/SetPendingTokenizeShareAuthorizations +func (s *KeeperTestSuite) TestPendingTokenizeShareAuthorizations() { + ctx, keeper := s.ctx, s.stakingKeeper + require := s.Require() + + // Create dummy accounts and completion times + + addresses := simtestutil.CreateIncrementalAccounts(4) + addressStrings := []string{} + for _, address := range addresses { + addressStrings = append(addressStrings, address.String()) + } + + timeA := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) + timeB := timeA.Add(time.Hour) + + // There should be no addresses returned originally + authorizationsA := keeper.GetPendingTokenizeShareAuthorizations(ctx, timeA) + require.Empty(authorizationsA.Addresses, "no addresses at timeA expected") + + authorizationsB := keeper.GetPendingTokenizeShareAuthorizations(ctx, timeB) + require.Empty(authorizationsB.Addresses, "no addresses at timeB expected") + + // Store addresses for timeB + keeper.SetPendingTokenizeShareAuthorizations(ctx, timeB, types.PendingTokenizeShareAuthorizations{ + Addresses: addressStrings, + }) + + // Check addresses + authorizationsA = keeper.GetPendingTokenizeShareAuthorizations(ctx, timeA) + require.Empty(authorizationsA.Addresses, "no addresses at timeA expected at end") + + authorizationsB = keeper.GetPendingTokenizeShareAuthorizations(ctx, timeB) + require.Equal(addressStrings, authorizationsB.Addresses, "address length") +} + +// Test QueueTokenizeSharesAuthorization and RemoveExpiredTokenizeShareLocks +func (s *KeeperTestSuite) TestTokenizeShareAuthorizationQueue() { + ctx, keeper := s.ctx, s.stakingKeeper + require := s.Require() + + // Create dummy accounts and completion times + + // We'll start by adding the following addresses to the queue + // Time 0: [address0] + // Time 1: [] + // Time 2: [address1, address2, address3] + // Time 3: [address4, address5] + // Time 4: [address6] + addresses := simtestutil.CreateIncrementalAccounts(7) + addressesByTime := map[int][]sdk.AccAddress{ + 0: {addresses[0]}, + 1: {}, + 2: {addresses[1], addresses[2], addresses[3]}, + 3: {addresses[4], addresses[5]}, + 4: {addresses[6]}, + } + + // Set the unbonding time to 1 day + unbondingPeriod := time.Hour * 24 + params := keeper.GetParams(ctx) + params.UnbondingTime = unbondingPeriod + keeper.SetParams(ctx, params) + + // Add each address to the queue and then increment the block time + // such that the times line up as follows + // Time 0: 2023-01-01 00:00:00 + // Time 1: 2023-01-01 00:01:00 + // Time 2: 2023-01-01 00:02:00 + // Time 3: 2023-01-01 00:03:00 + startTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) + ctx = ctx.WithBlockTime(startTime) + blockTimeIncrement := time.Hour + + for timeIndex := 0; timeIndex <= 4; timeIndex++ { + for _, address := range addressesByTime[timeIndex] { + keeper.QueueTokenizeSharesAuthorization(ctx, address) + } + ctx = ctx.WithBlockTime(ctx.BlockTime().Add(blockTimeIncrement)) + } + + // We'll unlock the tokens using the following progression + // The "alias'"/keys for these times assume a starting point of the Time 0 + // from above, plus the Unbonding Time + // Time -1 (2023-01-01 23:59:99): [] + // Time 0 (2023-01-02 00:00:00): [address0] + // Time 1 (2023-01-02 00:01:00): [] + // Time 2.5 (2023-01-02 00:02:30): [address1, address2, address3] + // Time 10 (2023-01-02 00:10:00): [address4, address5, address6] + unlockBlockTimes := map[string]time.Time{ + "-1": startTime.Add(unbondingPeriod).Add(-time.Second), + "0": startTime.Add(unbondingPeriod), + "1": startTime.Add(unbondingPeriod).Add(blockTimeIncrement), + "2.5": startTime.Add(unbondingPeriod).Add(2 * blockTimeIncrement).Add(blockTimeIncrement / 2), + "10": startTime.Add(unbondingPeriod).Add(10 * blockTimeIncrement), + } + expectedUnlockedAddresses := map[string][]string{ + "-1": {}, + "0": {addresses[0].String()}, + "1": {}, + "2.5": {addresses[1].String(), addresses[2].String(), addresses[3].String()}, + "10": {addresses[4].String(), addresses[5].String(), addresses[6].String()}, + } + + // Now we'll remove items from the queue sequentially + // First check with a block time before the first expiration - it should remove no addresses + actualAddresses := keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["-1"]) + require.Equal(expectedUnlockedAddresses["-1"], actualAddresses, "no addresses unlocked from time -1") + + // Then pass in (time 0 + unbonding time) - it should remove the first address + actualAddresses = keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["0"]) + require.Equal(expectedUnlockedAddresses["0"], actualAddresses, "one address unlocked from time 0") + + // Now pass in (time 1 + unbonding time) - it should remove no addresses since + // the address at time 0 was already removed + actualAddresses = keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["1"]) + require.Equal(expectedUnlockedAddresses["1"], actualAddresses, "no addresses unlocked from time 1") + + // Now pass in (time 2.5 + unbonding time) - it should remove the three addresses from time 2 + actualAddresses = keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["2.5"]) + require.Equal(expectedUnlockedAddresses["2.5"], actualAddresses, "addresses unlocked from time 2.5") + + // Finally pass in a block time far in the future, which should remove all the remaining locks + actualAddresses = keeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["10"]) + require.Equal(expectedUnlockedAddresses["10"], actualAddresses, "addresses unlocked from time 10") +} + +// Tests DelegatorIsLiquidStaker +func (s *KeeperTestSuite) TestDelegatorIsLiquidStaker() { + _, keeper := s.ctx, s.stakingKeeper + require := s.Require() + + // Create base and ICA accounts + baseAccountAddress := sdk.AccAddress("base-account") + icaAccountAddress := sdk.AccAddress( + address.Derive(authtypes.NewModuleAddress("icahost"), []byte("connection-0"+"icahost")), + ) + + // Only the ICA module account should be considered a liquid staking provider + require.False(keeper.DelegatorIsLiquidStaker(baseAccountAddress), "base account") + require.True(keeper.DelegatorIsLiquidStaker(icaAccountAddress), "ICA module account") +} diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index 843c120a41a3..b74ad429281e 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -6,7 +6,6 @@ import ( "strconv" "time" - "cosmossdk.io/math" "github.com/armon/go-metrics" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/telemetry" @@ -643,13 +642,13 @@ func (k msgServer) UnbondValidator(goCtx context.Context, msg *types.MsgUnbondVa if err != nil { return nil, err } + // validator must already be registered validator, found := k.GetValidator(ctx, valAddr) if !found { return nil, types.ErrNoValidatorFound } - // jail the validator. k.jailValidator(ctx, validator) return &types.MsgUnbondValidatorResponse{}, nil } @@ -855,7 +854,7 @@ func (k msgServer) RedeemTokensForShares(goCtx context.Context, msg *types.MsgRe // Similar to undelegations, if the account is attempting to tokenize the full delegation, // but there's a precision error due to the decimal to int conversion, round up to the // full decimal amount before modifying the delegation - shares := math.LegacyNewDec(shareToken.Amount.Int64()) + shares := sdk.NewDecFromInt(shareToken.Amount) if shareToken.Amount.Equal(delegation.Shares.TruncateInt()) { shares = delegation.Shares } diff --git a/x/staking/keeper/params.go b/x/staking/keeper/params.go index 06dfad471852..640525e53a26 100644 --- a/x/staking/keeper/params.go +++ b/x/staking/keeper/params.go @@ -47,7 +47,6 @@ func (k Keeper) PowerReduction(ctx sdk.Context) math.Int { // Validator bond factor for all validators func (k Keeper) ValidatorBondFactor(ctx sdk.Context) (res sdk.Dec) { return k.GetParams(ctx).ValidatorBondFactor - } // Global liquid staking cap across all liquid staking providers diff --git a/x/staking/keeper/tokenize_share_record_test.go b/x/staking/keeper/tokenize_share_record_test.go index 0fc9043f96cf..fd9dd76a6765 100644 --- a/x/staking/keeper/tokenize_share_record_test.go +++ b/x/staking/keeper/tokenize_share_record_test.go @@ -1,5 +1,10 @@ package keeper_test +import ( + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + "github.com/cosmos/cosmos-sdk/x/staking/types" +) + func (suite *KeeperTestSuite) TestGetLastTokenizeShareRecordId() { ctx, keeper := suite.ctx, suite.stakingKeeper lastTokenizeShareRecordID := keeper.GetLastTokenizeShareRecordID(ctx) @@ -9,52 +14,50 @@ func (suite *KeeperTestSuite) TestGetLastTokenizeShareRecordId() { suite.Equal(lastTokenizeShareRecordID, uint64(100)) } -// TODO: refactor LSM test -// Note that this test might be moved to the integration tests -// -// func (suite *KeeperTestSuite) TestGetTokenizeShareRecord() { -// app, ctx := suite.app, suite.ctx -// owner1, owner2 := suite.addrs[0], suite.addrs[1] - -// tokenizeShareRecord1 := types.TokenizeShareRecord{ -// Id: 0, -// Owner: owner1.String(), -// ModuleAccount: "test-module-account-1", -// Validator: "test-validator", -// } -// tokenizeShareRecord2 := types.TokenizeShareRecord{ -// Id: 1, -// Owner: owner2.String(), -// ModuleAccount: "test-module-account-2", -// Validator: "test-validator", -// } -// tokenizeShareRecord3 := types.TokenizeShareRecord{ -// Id: 2, -// Owner: owner1.String(), -// ModuleAccount: "test-module-account-3", -// Validator: "test-validator", -// } -// err := app.StakingKeeper.AddTokenizeShareRecord(ctx, tokenizeShareRecord1) -// suite.NoError(err) -// err = app.StakingKeeper.AddTokenizeShareRecord(ctx, tokenizeShareRecord2) -// suite.NoError(err) -// err = app.StakingKeeper.AddTokenizeShareRecord(ctx, tokenizeShareRecord3) -// suite.NoError(err) - -// tokenizeShareRecord, err := app.StakingKeeper.GetTokenizeShareRecord(ctx, 2) -// suite.NoError(err) -// suite.Equal(tokenizeShareRecord, tokenizeShareRecord3) - -// tokenizeShareRecord, err = app.StakingKeeper.GetTokenizeShareRecordByDenom(ctx, tokenizeShareRecord2.GetShareTokenDenom()) -// suite.NoError(err) -// suite.Equal(tokenizeShareRecord, tokenizeShareRecord2) - -// tokenizeShareRecords := app.StakingKeeper.GetAllTokenizeShareRecords(ctx) -// suite.Equal(len(tokenizeShareRecords), 3) - -// tokenizeShareRecords = app.StakingKeeper.GetTokenizeShareRecordsByOwner(ctx, owner1) -// suite.Equal(len(tokenizeShareRecords), 2) - -// tokenizeShareRecords = app.StakingKeeper.GetTokenizeShareRecordsByOwner(ctx, owner2) -// suite.Equal(len(tokenizeShareRecords), 1) -// } +func (suite *KeeperTestSuite) TestGetTokenizeShareRecord() { + ctx, keeper := suite.ctx, suite.stakingKeeper + addrs := simtestutil.CreateIncrementalAccounts(2) + + owner1, owner2 := addrs[0], addrs[1] + tokenizeShareRecord1 := types.TokenizeShareRecord{ + Id: 0, + Owner: owner1.String(), + ModuleAccount: "test-module-account-1", + Validator: "test-validator", + } + tokenizeShareRecord2 := types.TokenizeShareRecord{ + Id: 1, + Owner: owner2.String(), + ModuleAccount: "test-module-account-2", + Validator: "test-validator", + } + tokenizeShareRecord3 := types.TokenizeShareRecord{ + Id: 2, + Owner: owner1.String(), + ModuleAccount: "test-module-account-3", + Validator: "test-validator", + } + err := keeper.AddTokenizeShareRecord(ctx, tokenizeShareRecord1) + suite.NoError(err) + err = keeper.AddTokenizeShareRecord(ctx, tokenizeShareRecord2) + suite.NoError(err) + err = keeper.AddTokenizeShareRecord(ctx, tokenizeShareRecord3) + suite.NoError(err) + + tokenizeShareRecord, err := keeper.GetTokenizeShareRecord(ctx, 2) + suite.NoError(err) + suite.Equal(tokenizeShareRecord, tokenizeShareRecord3) + + tokenizeShareRecord, err = keeper.GetTokenizeShareRecordByDenom(ctx, tokenizeShareRecord2.GetShareTokenDenom()) + suite.NoError(err) + suite.Equal(tokenizeShareRecord, tokenizeShareRecord2) + + tokenizeShareRecords := keeper.GetAllTokenizeShareRecords(ctx) + suite.Equal(len(tokenizeShareRecords), 3) + + tokenizeShareRecords = keeper.GetTokenizeShareRecordsByOwner(ctx, owner1) + suite.Equal(len(tokenizeShareRecords), 2) + + tokenizeShareRecords = keeper.GetTokenizeShareRecordsByOwner(ctx, owner2) + suite.Equal(len(tokenizeShareRecords), 1) +} diff --git a/x/staking/migrations/v3/json_test.go b/x/staking/migrations/v3/json_test.go index c111f366515e..52f3c2ea27ed 100644 --- a/x/staking/migrations/v3/json_test.go +++ b/x/staking/migrations/v3/json_test.go @@ -34,21 +34,34 @@ func TestMigrateJSON(t *testing.T) { indentedBz, err := json.MarshalIndent(jsonObj, "", "\t") require.NoError(t, err) - // Make sure about new param MinCommissionRate. + // Make sure about new params MinCommissionRate. + + // NOTE: the LSM module introduces: + // params: + // - GlobalLiquidStakingCap, ValidatorBondFactor, ValidatorLiquidStakingCap + // states: + // - LastTokenizeShareRecordId, TokenizeShareLocks, TokenizeShareRecords, TotalLiquidStakeTokens expected := `{ "delegations": [], "exported": false, + "last_tokenize_share_record_id": "0", "last_total_power": "0", "last_validator_powers": [], "params": { "bond_denom": "stake", + "global_liquid_staking_cap": "1.000000000000000000", "historical_entries": 10000, "max_entries": 7, "max_validators": 100, "min_commission_rate": "0.000000000000000000", - "unbonding_time": "1814400s" + "unbonding_time": "1814400s", + "validator_bond_factor": "-1.000000000000000000", + "validator_liquid_staking_cap": "1.000000000000000000" }, "redelegations": [], + "tokenize_share_locks": [], + "tokenize_share_records": [], + "total_liquid_staked_tokens": "0", "unbonding_delegations": [], "validators": [] }` diff --git a/x/staking/simulation/genesis.go b/x/staking/simulation/genesis.go index 6a6de6a408bb..2787e532f96a 100644 --- a/x/staking/simulation/genesis.go +++ b/x/staking/simulation/genesis.go @@ -11,7 +11,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/types/simulation" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -42,17 +41,17 @@ func getHistEntries(r *rand.Rand) uint32 { // getGlobalLiquidStakingCap returns randomized GlobalLiquidStakingCap between 0-1. func getGlobalLiquidStakingCap(r *rand.Rand) sdk.Dec { - return simtypes.RandomDecAmount(r, sdk.OneDec()) + return simulation.RandomDecAmount(r, sdk.OneDec()) } // getValidatorLiquidStakingCap returns randomized ValidatorLiquidStakingCap between 0-1. func getValidatorLiquidStakingCap(r *rand.Rand) sdk.Dec { - return simtypes.RandomDecAmount(r, sdk.OneDec()) + return simulation.RandomDecAmount(r, sdk.OneDec()) } // getValidatorBondFactor returns randomized ValidatorBondCap between -1 and 300. func getValidatorBondFactor(r *rand.Rand) sdk.Dec { - return sdk.NewDec(int64(simtypes.RandIntBetween(r, -1, 300))) + return sdk.NewDec(int64(simulation.RandIntBetween(r, -1, 300))) } // RandomizedGenState generates a random GenesisState for staking diff --git a/x/staking/simulation/operations.go b/x/staking/simulation/operations.go index 68680096243b..1f920462638b 100644 --- a/x/staking/simulation/operations.go +++ b/x/staking/simulation/operations.go @@ -4,7 +4,6 @@ import ( "fmt" "math/rand" - "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/testutil" @@ -808,11 +807,11 @@ func SimulateMsgTokenizeShares(ak types.AccountKeeper, bk types.BankKeeper, k *k // check that tokenization would not exceed global cap params := k.GetParams(ctx) - totalStaked := math.LegacyNewDec(k.TotalBondedTokens(ctx).Int64()) + totalStaked := sdk.NewDecFromInt(k.TotalBondedTokens(ctx)) if totalStaked.IsZero() { return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "cannot happened - no validators bonded if stake is 0.0"), nil, nil // skip } - totalLiquidStaked := math.LegacyNewDec(k.GetTotalLiquidStakedTokens(ctx).Add(tokenizeShareAmt).Int64()) + totalLiquidStaked := sdk.NewDecFromInt(k.GetTotalLiquidStakedTokens(ctx).Add(tokenizeShareAmt)) liquidStakedPercent := totalLiquidStaked.Quo(totalStaked) if liquidStakedPercent.GT(params.GlobalLiquidStakingCap) { return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "global liquid staking cap exceeded"), nil, nil diff --git a/x/staking/types/validator.go b/x/staking/types/validator.go index f8467933380b..c3f093ad1703 100644 --- a/x/staking/types/validator.go +++ b/x/staking/types/validator.go @@ -58,6 +58,7 @@ func NewValidator(operator sdk.ValAddress, pubKey cryptotypes.PubKey, descriptio UnbondingHeight: int64(0), UnbondingTime: time.Unix(0, 0).UTC(), Commission: NewCommission(math.LegacyZeroDec(), math.LegacyZeroDec(), math.LegacyZeroDec()), + MinSelfDelegation: sdk.ZeroInt(), UnbondingOnHoldRefCount: 0, ValidatorBondShares: sdk.ZeroDec(), LiquidShares: sdk.ZeroDec(), From 20d96b89c50161d881042a66a54ac7e0b435d60a Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Mon, 11 Dec 2023 14:35:15 +0100 Subject: [PATCH 06/19] update staking docs and revert Makefile changes (#10) --- Makefile | 2 +- x/staking/README.md | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index be69109df5a6..d9313246778c 100644 --- a/Makefile +++ b/Makefile @@ -347,7 +347,7 @@ benchmark: ############################################################################### golangci_lint_cmd=golangci-lint -golangci_version=v1.55.2 +golangci_version=v1.50.1 lint: @echo "--> Running linter" diff --git a/x/staking/README.md b/x/staking/README.md index acc51ee8f0f4..d9637813dbba 100644 --- a/x/staking/README.md +++ b/x/staking/README.md @@ -874,7 +874,6 @@ The staking module emits the following events: | Type | Attribute Key | Attribute Value | | -------------- | ------------------- | ------------------- | | edit_validator | commission_rate | {commissionRate} | -| edit_validator | min_self_delegation | {minSelfDelegation} | | message | module | staking | | message | action | edit_validator | | message | sender | {senderAddress} | From 817c772e6b8009414f740ba3b233b20c91c6073d Mon Sep 17 00:00:00 2001 From: MSalopek Date: Wed, 13 Dec 2023 15:52:40 +0100 Subject: [PATCH 07/19] migration: update migration for x/staking with LSM --- x/staking/migrations/v3/Readme.md | 9 + .../migrations/v3/lsm/migrations_test.go | 310 ++ x/staking/migrations/v3/lsm/store.go | 146 + x/staking/migrations/v3/lsm/test_helpers.go | 85 + x/staking/migrations/v3/lsm/types/keys.go | 39 + x/staking/migrations/v3/lsm/types/staking.go | 90 + .../migrations/v3/lsm/types/staking.pb.go | 3446 +++++++++++++++++ x/staking/migrations/v4/migrations_test.go | 75 +- x/staking/migrations/v4/store.go | 82 +- 9 files changed, 4145 insertions(+), 137 deletions(-) create mode 100644 x/staking/migrations/v3/Readme.md create mode 100644 x/staking/migrations/v3/lsm/migrations_test.go create mode 100644 x/staking/migrations/v3/lsm/store.go create mode 100644 x/staking/migrations/v3/lsm/test_helpers.go create mode 100644 x/staking/migrations/v3/lsm/types/keys.go create mode 100644 x/staking/migrations/v3/lsm/types/staking.go create mode 100644 x/staking/migrations/v3/lsm/types/staking.pb.go diff --git a/x/staking/migrations/v3/Readme.md b/x/staking/migrations/v3/Readme.md new file mode 100644 index 000000000000..2aa89de2f4bb --- /dev/null +++ b/x/staking/migrations/v3/Readme.md @@ -0,0 +1,9 @@ +# IMPORTANT + +The migration history of the cosmos-sdk line with LSM diverges from the mainline cosmos-sdk. + +Migrations in this directory were not executed. + +The cosmos-sdk migration has that was executed on for cosmos-sdk@v0.45.16-ics-slm is in `./lsm` directory. +All files under `./lsm` are excluded from the build process and kept for posterity. + diff --git a/x/staking/migrations/v3/lsm/migrations_test.go b/x/staking/migrations/v3/lsm/migrations_test.go new file mode 100644 index 000000000000..08f9e5b5f1ae --- /dev/null +++ b/x/staking/migrations/v3/lsm/migrations_test.go @@ -0,0 +1,310 @@ +//go:build exclude + +package v3_test + +import ( + "fmt" + "testing" + "time" + + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/simapp" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + "github.com/cosmos/cosmos-sdk/testutil" + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + v3 "github.com/cosmos/cosmos-sdk/x/staking/migrations/v3" + legacytypes "github.com/cosmos/cosmos-sdk/x/staking/migrations/v3/types" + "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/stretchr/testify/require" +) + +// Helper function to write a validator using the old schema +func setLegacyValidator(store sdk.KVStore, cdc codec.BinaryCodec, validator legacytypes.Validator) { + bz := cdc.MustMarshal(&validator) + store.Set(types.GetValidatorKey(validator.GetOperator()), bz) +} + +// Helper function to write a delegation using the old schema +func setLegacyDelegation(store sdk.KVStore, cdc codec.BinaryCodec, delegation legacytypes.Delegation) { + delegatorAddress := sdk.MustAccAddressFromBech32(delegation.DelegatorAddress) + + bz := cdc.MustMarshal(&delegation) + store.Set(types.GetDelegationKey(delegatorAddress, delegation.GetValidatorAddr()), bz) +} + +// Helper function to get unbonding delegation records +func getUBD(store storetypes.KVStore, cdc codec.BinaryCodec, accAddr sdk.AccAddress, valAddr sdk.ValAddress) (ubdRes types.UnbondingDelegation) { + ubdbz := store.Get(types.GetUBDKey(accAddr, valAddr)) + cdc.MustUnmarshal(ubdbz, &ubdRes) + return ubdRes +} + +// createOldStateUnbonding will create the ubd entries with duplicate heights +// 10 duplicate heights and 10 unique ubd with creation height +func createOldUnbondingDelegationRecords(t *testing.T, creationHeight int64, valAddr sdk.ValAddress, accAddr sdk.AccAddress, cdc codec.BinaryCodec, store storetypes.KVStore) error { + unbondBalance := sdk.NewInt(100) + completionTime := time.Now() + ubdEntries := make([]types.UnbondingDelegationEntry, 0, 10) + + for i := int64(0); i < 10; i++ { + ubdEntry := types.UnbondingDelegationEntry{ + CreationHeight: creationHeight, + Balance: unbondBalance, + InitialBalance: unbondBalance, + CompletionTime: completionTime, + } + ubdEntries = append(ubdEntries, ubdEntry) + // creating more entries for testing the creation_heights + ubdEntry.CreationHeight = i + 2 + ubdEntry.CompletionTime = completionTime.Add(time.Minute * 10) + ubdEntries = append(ubdEntries, ubdEntry) + } + + ubd := types.UnbondingDelegation{ + ValidatorAddress: valAddr.String(), + DelegatorAddress: accAddr.String(), + Entries: ubdEntries, + } + + // set the unbond delegation with validator and delegator + bz := types.MustMarshalUBD(cdc, ubd) + key := types.GetUBDKey(accAddr, valAddr) + store.Set(key, bz) + return nil +} + +// Test setting params in the staking module +func TestMigrateParamsStore(t *testing.T) { + cdc := simapp.MakeTestEncodingConfig() + stakingKey := storetypes.NewKVStoreKey(types.ModuleName) + tStakingKey := sdk.NewTransientStoreKey("transient_test") + ctx := testutil.DefaultContext(stakingKey, tStakingKey) + paramstore := paramtypes.NewSubspace(cdc.Marshaler, cdc.Amino, stakingKey, tStakingKey, types.ModuleName) + + // Check there are no LSM params + require.False(t, paramstore.Has(ctx, types.KeyValidatorBondFactor)) + require.False(t, paramstore.Has(ctx, types.KeyGlobalLiquidStakingCap)) + require.False(t, paramstore.Has(ctx, types.KeyValidatorLiquidStakingCap)) + + // Run migrations + v3.MigrateParamsStore(ctx, paramstore) + + // Make sure the new params are set + require.True(t, paramstore.Has(ctx, types.KeyValidatorBondFactor)) + require.True(t, paramstore.Has(ctx, types.KeyGlobalLiquidStakingCap)) + require.True(t, paramstore.Has(ctx, types.KeyValidatorLiquidStakingCap)) + + // Confirm default values are set + var validatorBondFactor sdk.Dec + paramstore.Get(ctx, types.KeyValidatorBondFactor, &validatorBondFactor) + require.Equal(t, types.DefaultValidatorBondFactor, validatorBondFactor) + + var globalLiquidStakingCap sdk.Dec + paramstore.Get(ctx, types.KeyGlobalLiquidStakingCap, &globalLiquidStakingCap) + require.Equal(t, types.DefaultGlobalLiquidStakingCap, globalLiquidStakingCap) + + var validatorLiquidStakingCap sdk.Dec + paramstore.Get(ctx, types.KeyValidatorLiquidStakingCap, &validatorLiquidStakingCap) + require.Equal(t, types.DefaultValidatorLiquidStakingCap, validatorLiquidStakingCap) +} + +// Test setting each validator's ValidatorBondShares and LiquidShares to 0 +func TestMigrateValidators(t *testing.T) { + app := simapp.Setup(false) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + store := ctx.KVStore(app.GetKey(legacytypes.StoreKey)) + + addresses := simapp.AddTestAddrs(app, ctx, 10, sdk.NewInt(1_000_000)) + pubKeys := simapp.CreateTestPubKeys(10) + + // Write each validator with the old type + oldValidators := []legacytypes.Validator{} + for i := int64(0); i < 10; i++ { + valAddress := sdk.ValAddress(addresses[i]).String() + pkAny, err := codectypes.NewAnyWithValue(pubKeys[i]) + require.NoError(t, err) + + dummyTime := time.Date(2023, 1, 1, 0, 0, int(i), 0, time.UTC) + + description := legacytypes.Description{ + Moniker: fmt.Sprintf("moniker-%d", i), + Identity: fmt.Sprintf("identity-%d", i), + Website: fmt.Sprintf("website-%d", i), + SecurityContact: fmt.Sprintf("security-contact-%d", i), + Details: fmt.Sprintf("details-%d", i), + } + + commission := legacytypes.Commission{ + UpdateTime: dummyTime, + CommissionRates: legacytypes.CommissionRates{ + Rate: sdk.NewDec(i), + MaxRate: sdk.NewDec(i), + MaxChangeRate: sdk.NewDec(i), + }, + } + + validator := legacytypes.Validator{ + OperatorAddress: valAddress, + ConsensusPubkey: pkAny, + Jailed: true, + Status: legacytypes.Bonded, + Tokens: sdk.NewInt(1_000_000), + DelegatorShares: sdk.NewDec(1_000_000), + UnbondingHeight: i, + UnbondingTime: dummyTime, + MinSelfDelegation: sdk.NewInt(1_000), + UnbondingOnHoldRefCount: 1, + UnbondingIds: []uint64{uint64(i)}, + Description: description, + Commission: commission, + } + + oldValidators = append(oldValidators, validator) + setLegacyValidator(store, app.AppCodec(), validator) + } + + // Migrate to the new types which adds ValidatorBondShares and LiquidShares + v3.MigrateValidators(ctx, app.StakingKeeper) + + // check that the validator ValidatorBondShares and LiquidShares were correctly set to 0 + for _, val := range app.StakingKeeper.GetAllValidators(ctx) { + require.Equal(t, sdk.ZeroDec(), val.ValidatorBondShares) + require.Equal(t, sdk.ZeroDec(), val.LiquidShares) + } + + // check that the other validator attributes were unchanged + for _, oldValidator := range oldValidators { + newValidator, found := app.StakingKeeper.GetValidator(ctx, oldValidator.GetOperator()) + require.True(t, found) + + require.Equal(t, oldValidator.ConsensusPubkey, newValidator.ConsensusPubkey, "pub key") + require.Equal(t, oldValidator.Jailed, newValidator.Jailed, "jailed") + require.Equal(t, oldValidator.Status.String(), newValidator.Status.String(), "status") + require.Equal(t, oldValidator.Tokens.Int64(), newValidator.Tokens.Int64(), "tokens") + require.Equal(t, oldValidator.DelegatorShares.TruncateInt64(), newValidator.DelegatorShares.TruncateInt64(), "shares") + + require.Equal(t, oldValidator.UnbondingHeight, newValidator.UnbondingHeight, "unbonding height") + require.Equal(t, oldValidator.UnbondingTime, newValidator.UnbondingTime, "unbonding time") + require.Equal(t, oldValidator.UnbondingOnHoldRefCount, newValidator.UnbondingOnHoldRefCount, "unbonding on hold") + require.Equal(t, oldValidator.UnbondingIds, newValidator.UnbondingIds, "unbonding ids") + require.Equal(t, oldValidator.MinSelfDelegation.String(), newValidator.MinSelfDelegation.String(), "min self delegation") + + oldDescription := oldValidator.Description + newDescription := newValidator.Description + require.Equal(t, oldDescription.Moniker, newDescription.Moniker, "moniker") + require.Equal(t, oldDescription.Identity, newDescription.Identity, "identity") + require.Equal(t, oldDescription.Website, newDescription.Website, "website") + require.Equal(t, oldDescription.SecurityContact, newDescription.SecurityContact, "security contact") + require.Equal(t, oldDescription.Details, newDescription.Details, "details") + + oldCommissionRate := oldValidator.Commission.CommissionRates + newCommissionRate := newValidator.Commission.CommissionRates + require.Equal(t, oldValidator.Commission.UpdateTime, newValidator.Commission.UpdateTime, "commission update time") + require.Equal(t, oldCommissionRate.Rate, newCommissionRate.Rate, "commission rate") + require.Equal(t, oldCommissionRate.MaxRate, newCommissionRate.MaxRate, "commission max rate") + require.Equal(t, oldCommissionRate.MaxChangeRate, newCommissionRate.MaxChangeRate, "commission max rate change") + } +} + +// Test setting each delegation's validator bond to false +func TestMigrateDelegations(t *testing.T) { + app := simapp.Setup(false) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + store := ctx.KVStore(app.GetKey(legacytypes.StoreKey)) + + validatorAddresses := simapp.AddTestAddrs(app, ctx, 10, sdk.NewInt(1_000_000)) + delegatorAddresses := simapp.AddTestAddrs(app, ctx, 10, sdk.NewInt(1_000_000)) + + // Write each delegation with the old type + oldDelegations := []legacytypes.Delegation{} + for i := int64(0); i < 10; i++ { + delegation := legacytypes.Delegation{ + DelegatorAddress: delegatorAddresses[i].String(), + ValidatorAddress: sdk.ValAddress(validatorAddresses[i]).String(), + Shares: sdk.NewDec(i * 1000), + } + + oldDelegations = append(oldDelegations, delegation) + setLegacyDelegation(store, app.AppCodec(), delegation) + } + + // Migrate the new delegations which should add the ValidatorBond field + v3.MigrateDelegations(ctx, app.StakingKeeper) + + // check that the delegation is not a validator bond + for _, delegation := range app.StakingKeeper.GetAllDelegations(ctx) { + require.Equal(t, false, delegation.ValidatorBond) + } + + // check that the other delegation attributes were unchanged + for _, oldDelegation := range oldDelegations { + newDelegation, found := app.StakingKeeper.GetDelegation(ctx, oldDelegation.GetDelegatorAddr(), oldDelegation.GetValidatorAddr()) + require.True(t, found) + + require.Equal(t, oldDelegation.DelegatorAddress, newDelegation.DelegatorAddress, "delegator address") + require.Equal(t, oldDelegation.ValidatorAddress, newDelegation.ValidatorAddress, "validator address") + require.Equal(t, oldDelegation.Shares.TruncateInt64(), newDelegation.Shares.TruncateInt64(), "shares") + } +} + +// Tests unbonding delegation records with the same height are removed and combined into a new record +func TestMigrateUBD(t *testing.T) { + cdc := simapp.MakeTestEncodingConfig().Marshaler + + storeKey := sdk.NewKVStoreKey(legacytypes.ModuleName) + tKey := sdk.NewTransientStoreKey("transient_test") + ctx := testutil.DefaultContext(storeKey, tKey) + store := ctx.KVStore(storeKey) + duplicateCreationHeight := int64(1) + + accAddrs := v3.CreateIncrementalAccounts(1) + accAddr := accAddrs[0] + + valAddrs := v3.ConvertAddrsToValAddrs(accAddrs) + valAddr := valAddrs[0] + + // creating 10 ubdEntries with same height and 10 ubdEntries with different creation height + err := createOldUnbondingDelegationRecords(t, duplicateCreationHeight, valAddr, accAddr, cdc, store) + require.NoError(t, err) + + testCases := []struct { + name string + doMigration bool + }{ + { + name: "without state migration", + doMigration: false, + }, + { + name: "with state migration", + doMigration: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + if tc.doMigration { + require.NoError(t, v3.MigrateUBDEntries(ctx, store, cdc)) + } + + ubd := getUBD(store, cdc, accAddr, valAddr) + if tc.doMigration { + // checking the updated balance for duplicateCreationHeight + for _, ubdEntry := range ubd.Entries { + if ubdEntry.CreationHeight == duplicateCreationHeight { + require.Equal(t, sdk.NewInt(100*10), ubdEntry.Balance) + break + } + } + require.Equal(t, 11, len(ubd.Entries)) + } else { + require.Equal(t, true, true) + require.Equal(t, 20, len(ubd.Entries)) + } + }) + } +} diff --git a/x/staking/migrations/v3/lsm/store.go b/x/staking/migrations/v3/lsm/store.go new file mode 100644 index 000000000000..5e796a5d5281 --- /dev/null +++ b/x/staking/migrations/v3/lsm/store.go @@ -0,0 +1,146 @@ +//go:build exclude + +package v3 + +import ( + "sort" + + "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +// subspace contains the method needed for migrations of the +// legacy Params subspace +type subspace interface { + GetParamSet(ctx sdk.Context, ps paramtypes.ParamSet) + HasKeyTable() bool + WithKeyTable(paramtypes.KeyTable) paramtypes.Subspace + Set(ctx sdk.Context, key []byte, value interface{}) +} + +// keeper contains the staking keeper functions required +// for the migration +type keeper interface { + GetAllDelegations(ctx sdk.Context) []types.Delegation + GetAllValidators(ctx sdk.Context) []types.Validator + SetDelegation(ctx sdk.Context, delegation types.Delegation) + SetValidator(ctx sdk.Context, validator types.Validator) + RefreshTotalLiquidStaked(ctx sdk.Context) error +} + +// Adds the following LSM params: +// - ValidatorBondFactor +// - GlobalLiquidStakingCap +// - ValidatorLiquidStakingCap +func MigrateParamsStore(ctx sdk.Context, paramstore subspace) { + if !paramstore.HasKeyTable() { + paramstore.WithKeyTable(types.ParamKeyTable()) + } + paramstore.Set(ctx, types.KeyValidatorBondFactor, types.DefaultValidatorBondFactor) + paramstore.Set(ctx, types.KeyGlobalLiquidStakingCap, types.DefaultGlobalLiquidStakingCap) + paramstore.Set(ctx, types.KeyValidatorLiquidStakingCap, types.DefaultValidatorLiquidStakingCap) +} + +// Set each validator's ValidatorBondShares and LiquidShares to 0 +func MigrateValidators(ctx sdk.Context, k keeper) { + for _, validator := range k.GetAllValidators(ctx) { + validator.ValidatorBondShares = sdk.ZeroDec() + validator.LiquidShares = sdk.ZeroDec() + k.SetValidator(ctx, validator) + } +} + +// Set each delegation's ValidatorBond field to false +func MigrateDelegations(ctx sdk.Context, k keeper) { + for _, delegation := range k.GetAllDelegations(ctx) { + delegation.ValidatorBond = false + k.SetDelegation(ctx, delegation) + } +} + +// migrateUBDEntries will remove the ubdEntries with same creation_height +// and create a new ubdEntry with updated balance and initial_balance +func MigrateUBDEntries(ctx sdk.Context, store storetypes.KVStore, cdc codec.BinaryCodec) error { + iterator := sdk.KVStorePrefixIterator(store, types.UnbondingDelegationKey) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + ubd := types.MustUnmarshalUBD(cdc, iterator.Value()) + + entriesAtSameCreationHeight := make(map[int64][]types.UnbondingDelegationEntry) + for _, ubdEntry := range ubd.Entries { + entriesAtSameCreationHeight[ubdEntry.CreationHeight] = append(entriesAtSameCreationHeight[ubdEntry.CreationHeight], ubdEntry) + } + + creationHeights := make([]int64, 0, len(entriesAtSameCreationHeight)) + for k := range entriesAtSameCreationHeight { + creationHeights = append(creationHeights, k) + } + + sort.Slice(creationHeights, func(i, j int) bool { return creationHeights[i] < creationHeights[j] }) + + ubd.Entries = make([]types.UnbondingDelegationEntry, 0, len(creationHeights)) + + for _, h := range creationHeights { + ubdEntry := types.UnbondingDelegationEntry{ + Balance: sdk.ZeroInt(), + InitialBalance: sdk.ZeroInt(), + } + for _, entry := range entriesAtSameCreationHeight[h] { + ubdEntry.Balance = ubdEntry.Balance.Add(entry.Balance) + ubdEntry.InitialBalance = ubdEntry.InitialBalance.Add(entry.InitialBalance) + ubdEntry.CreationHeight = entry.CreationHeight + ubdEntry.CompletionTime = entry.CompletionTime + } + ubd.Entries = append(ubd.Entries, ubdEntry) + } + + // set the new ubd to the store + setUBDToStore(ctx, store, cdc, ubd) + } + return nil +} + +func setUBDToStore(ctx sdk.Context, store storetypes.KVStore, cdc codec.BinaryCodec, ubd types.UnbondingDelegation) { + delegatorAddress := sdk.MustAccAddressFromBech32(ubd.DelegatorAddress) + + bz := types.MustMarshalUBD(cdc, ubd) + + addr, err := sdk.ValAddressFromBech32(ubd.ValidatorAddress) + if err != nil { + panic(err) + } + + key := types.GetUBDKey(delegatorAddress, addr) + + store.Set(key, bz) +} + +// Peforms the in-place store migration for adding LSM support to v0.45.16-ics, including: +// - Adding params ValidatorBondFactor, GlobalLiquidStakingCap, ValidatorLiquidStakingCap +// - Setting each validator's ValidatorBondShares and LiquidShares to 0 +// - Setting each delegation's ValidatorBond field to false +// - Calculating the total liquid staked by summing the delegations from ICA accounts +func MigrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.BinaryCodec, k keeper, paramstore subspace) error { + store := ctx.KVStore(storeKey) + + ctx.Logger().Info("Staking LSM Migration: Migrating param store") + MigrateParamsStore(ctx, paramstore) + + ctx.Logger().Info("Staking LSM Migration: Migrating validators") + MigrateValidators(ctx, k) + + ctx.Logger().Info("Staking LSM Migration: Migrating delegations") + MigrateDelegations(ctx, k) + + ctx.Logger().Info("Staking LSM Migration: Migrating UBD entries") + if err := MigrateUBDEntries(ctx, store, cdc); err != nil { + return err + } + + ctx.Logger().Info("Staking LSM Migration: Calculating total liquid staked") + return k.RefreshTotalLiquidStaked(ctx) +} diff --git a/x/staking/migrations/v3/lsm/test_helpers.go b/x/staking/migrations/v3/lsm/test_helpers.go new file mode 100644 index 000000000000..3fe9e9c0e28a --- /dev/null +++ b/x/staking/migrations/v3/lsm/test_helpers.go @@ -0,0 +1,85 @@ +//go:build exclude + +// This file contains utility testing functions from SDK 47 that are required for the UBD migration unit test +package v3 + +import ( + "bytes" + "encoding/hex" + "fmt" + "strconv" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// CreateIncrementalAccounts is a strategy used by addTestAddrs() in order to generated addresses in ascending order. +func CreateIncrementalAccounts(accNum int) []sdk.AccAddress { + var addresses []sdk.AccAddress + var buffer bytes.Buffer + + // start at 100 so we can make up to 999 test addresses with valid test addresses + for i := 100; i < (accNum + 100); i++ { + numString := strconv.Itoa(i) + buffer.WriteString("A58856F0FD53BF058B4909A21AEC019107BA6") // base address string + + buffer.WriteString(numString) // adding on final two digits to make addresses unique + res, _ := AccAddressFromHexUnsafe(buffer.String()) + bech := res.String() + addr, _ := CheckHexConversion(buffer.String(), bech) + + addresses = append(addresses, addr) + buffer.Reset() + } + + return addresses +} + +func CheckHexConversion(addr string, bech string) (sdk.AccAddress, error) { + res, err := AccAddressFromHexUnsafe(addr) + if err != nil { + return nil, err + } + bechexpected := res.String() + if bech != bechexpected { + return nil, fmt.Errorf("bech encoding doesn't match reference") + } + + bechres, err := sdk.AccAddressFromBech32(bech) + if err != nil { + return nil, err + } + if !bytes.Equal(bechres, res) { + return nil, err + } + + return res, nil +} + +// ConvertAddrsToValAddrs converts the provided addresses to ValAddress. +func ConvertAddrsToValAddrs(addrs []sdk.AccAddress) []sdk.ValAddress { + valAddrs := make([]sdk.ValAddress, len(addrs)) + + for i, addr := range addrs { + valAddrs[i] = sdk.ValAddress(addr) + } + + return valAddrs +} + +// AccAddressFromHexUnsafe creates an AccAddress from a HEX-encoded string. +// +// Note, this function is considered unsafe as it may produce an AccAddress from +// otherwise invalid input, such as a transaction hash. Please use +// AccAddressFromBech32. +func AccAddressFromHexUnsafe(address string) (addr sdk.AccAddress, err error) { + bz, err := addressBytesFromHexString(address) + return sdk.AccAddress(bz), err +} + +func addressBytesFromHexString(address string) ([]byte, error) { + if len(address) == 0 { + return nil, fmt.Errorf("empty hex address") + } + + return hex.DecodeString(address) +} diff --git a/x/staking/migrations/v3/lsm/types/keys.go b/x/staking/migrations/v3/lsm/types/keys.go new file mode 100644 index 000000000000..0fcfa50df4c7 --- /dev/null +++ b/x/staking/migrations/v3/lsm/types/keys.go @@ -0,0 +1,39 @@ +//go:build exclude + +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" +) + +const ( + // ModuleName is the name of the staking module + ModuleName = "staking" + + // StoreKey is the string store representation + StoreKey = ModuleName +) + +var ( + ValidatorsKey = []byte{0x21} // prefix for each key to a validator + DelegationKey = []byte{0x31} // key for a delegation + ParamsKey = []byte{0x51} // prefix for parameters for module x/staking +) + +// GetValidatorKey creates the key for the validator with address +// VALUE: staking/Validator +func GetValidatorKey(operatorAddr sdk.ValAddress) []byte { + return append(ValidatorsKey, address.MustLengthPrefix(operatorAddr)...) +} + +// GetDelegationKey creates the key for delegator bond with validator +// VALUE: staking/Delegation +func GetDelegationKey(delAddr sdk.AccAddress, valAddr sdk.ValAddress) []byte { + return append(GetDelegationsKey(delAddr), address.MustLengthPrefix(valAddr)...) +} + +// GetDelegationsKey creates the prefix for a delegator for all validators +func GetDelegationsKey(delAddr sdk.AccAddress) []byte { + return append(DelegationKey, address.MustLengthPrefix(delAddr)...) +} diff --git a/x/staking/migrations/v3/lsm/types/staking.go b/x/staking/migrations/v3/lsm/types/staking.go new file mode 100644 index 000000000000..0edc0a862c81 --- /dev/null +++ b/x/staking/migrations/v3/lsm/types/staking.go @@ -0,0 +1,90 @@ +//go:build exclude + +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "gopkg.in/yaml.v2" +) + +// String implements the Stringer interface for a Commission object. +func (c Commission) String() string { + out, _ := yaml.Marshal(c) + return string(out) +} + +// String implements the Stringer interface for a CommissionRates object. +func (cr CommissionRates) String() string { + out, _ := yaml.Marshal(cr) + return string(out) +} + +// String implements the Stringer interface for a Validator object. +func (v Validator) String() string { + out, _ := yaml.Marshal(v) + return string(out) +} + +// String returns a human readable string representation of a Delegation. +func (d Delegation) String() string { + out, _ := yaml.Marshal(d) + return string(out) +} + +// String implements the Stringer interface for a Description object. +func (d Description) String() string { + out, _ := yaml.Marshal(d) + return string(out) +} + +// String returns a human readable string representation of the parameters. +func (p Params) String() string { + out, _ := yaml.Marshal(p) + return string(out) +} + +// unmarshal the current staking params value from store key or panic +func MustUnmarshalParams(cdc *codec.LegacyAmino, value []byte) Params { + params, err := UnmarshalParams(cdc, value) + if err != nil { + panic(err) + } + + return params +} + +// unmarshal the current staking params value from store key +func UnmarshalParams(cdc *codec.LegacyAmino, value []byte) (params Params, err error) { + err = cdc.Unmarshal(value, ¶ms) + if err != nil { + return + } + + return +} + +func (v Validator) GetOperator() sdk.ValAddress { + if v.OperatorAddress == "" { + return nil + } + addr, err := sdk.ValAddressFromBech32(v.OperatorAddress) + if err != nil { + panic(err) + } + return addr +} + +func (d Delegation) GetDelegatorAddr() sdk.AccAddress { + delAddr := sdk.MustAccAddressFromBech32(d.DelegatorAddress) + + return delAddr +} + +func (d Delegation) GetValidatorAddr() sdk.ValAddress { + addr, err := sdk.ValAddressFromBech32(d.ValidatorAddress) + if err != nil { + panic(err) + } + return addr +} diff --git a/x/staking/migrations/v3/lsm/types/staking.pb.go b/x/staking/migrations/v3/lsm/types/staking.pb.go new file mode 100644 index 000000000000..81e016fd13dd --- /dev/null +++ b/x/staking/migrations/v3/lsm/types/staking.pb.go @@ -0,0 +1,3446 @@ +//go:build exclude +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/staking/v1beta1/staking.proto + +package types + +import ( + bytes "bytes" + compress_gzip "compress/gzip" + fmt "fmt" + types1 "github.com/cosmos/cosmos-sdk/codec/types" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/gogo/protobuf/gogoproto" + github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_protoc_gen_gogo_descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" + github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/regen-network/cosmos-proto" + _ "google.golang.org/protobuf/types/known/durationpb" + _ "google.golang.org/protobuf/types/known/timestamppb" + io "io" + io_ioutil "io/ioutil" + math "math" + math_bits "math/bits" + reflect "reflect" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// BondStatus is the status of a validator. +type BondStatus int32 + +const ( + // UNSPECIFIED defines an invalid validator status. + Unspecified BondStatus = 0 + // UNBONDED defines a validator that is not bonded. + Unbonded BondStatus = 1 + // UNBONDING defines a validator that is unbonding. + Unbonding BondStatus = 2 + // BONDED defines a validator that is bonded. + Bonded BondStatus = 3 +) + +var BondStatus_name = map[int32]string{ + 0: "BOND_STATUS_UNSPECIFIED", + 1: "BOND_STATUS_UNBONDED", + 2: "BOND_STATUS_UNBONDING", + 3: "BOND_STATUS_BONDED", +} + +var BondStatus_value = map[string]int32{ + "BOND_STATUS_UNSPECIFIED": 0, + "BOND_STATUS_UNBONDED": 1, + "BOND_STATUS_UNBONDING": 2, + "BOND_STATUS_BONDED": 3, +} + +func (x BondStatus) String() string { + return proto.EnumName(BondStatus_name, int32(x)) +} + +func (BondStatus) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{0} +} + +// CommissionRates defines the initial commission rates to be used for creating +// a validator. +type CommissionRates struct { + // rate is the commission rate charged to delegators, as a fraction. + Rate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=rate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"rate"` + // max_rate defines the maximum commission rate which validator can ever charge, as a fraction. + MaxRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,2,opt,name=max_rate,json=maxRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_rate" yaml:"max_rate"` + // max_change_rate defines the maximum daily increase of the validator commission, as a fraction. + MaxChangeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=max_change_rate,json=maxChangeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_change_rate" yaml:"max_change_rate"` +} + +func (m *CommissionRates) Reset() { *m = CommissionRates{} } +func (*CommissionRates) ProtoMessage() {} +func (*CommissionRates) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{1} +} +func (m *CommissionRates) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CommissionRates) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CommissionRates.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 *CommissionRates) XXX_Merge(src proto.Message) { + xxx_messageInfo_CommissionRates.Merge(m, src) +} +func (m *CommissionRates) XXX_Size() int { + return m.Size() +} +func (m *CommissionRates) XXX_DiscardUnknown() { + xxx_messageInfo_CommissionRates.DiscardUnknown(m) +} + +var xxx_messageInfo_CommissionRates proto.InternalMessageInfo + +// Commission defines commission parameters for a given validator. +type Commission struct { + // commission_rates defines the initial commission rates to be used for creating a validator. + CommissionRates `protobuf:"bytes,1,opt,name=commission_rates,json=commissionRates,proto3,embedded=commission_rates" json:"commission_rates"` + // update_time is the last time the commission rate was changed. + UpdateTime time.Time `protobuf:"bytes,2,opt,name=update_time,json=updateTime,proto3,stdtime" json:"update_time" yaml:"update_time"` +} + +func (m *Commission) Reset() { *m = Commission{} } +func (*Commission) ProtoMessage() {} +func (*Commission) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{2} +} +func (m *Commission) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Commission) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Commission.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 *Commission) XXX_Merge(src proto.Message) { + xxx_messageInfo_Commission.Merge(m, src) +} +func (m *Commission) XXX_Size() int { + return m.Size() +} +func (m *Commission) XXX_DiscardUnknown() { + xxx_messageInfo_Commission.DiscardUnknown(m) +} + +var xxx_messageInfo_Commission proto.InternalMessageInfo + +func (m *Commission) GetUpdateTime() time.Time { + if m != nil { + return m.UpdateTime + } + return time.Time{} +} + +// Description defines a validator description. +type Description struct { + // moniker defines a human-readable name for the validator. + Moniker string `protobuf:"bytes,1,opt,name=moniker,proto3" json:"moniker,omitempty"` + // identity defines an optional identity signature (ex. UPort or Keybase). + Identity string `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` + // website defines an optional website link. + Website string `protobuf:"bytes,3,opt,name=website,proto3" json:"website,omitempty"` + // security_contact defines an optional email for security contact. + SecurityContact string `protobuf:"bytes,4,opt,name=security_contact,json=securityContact,proto3" json:"security_contact,omitempty" yaml:"security_contact"` + // details define other optional details. + Details string `protobuf:"bytes,5,opt,name=details,proto3" json:"details,omitempty"` +} + +func (m *Description) Reset() { *m = Description{} } +func (*Description) ProtoMessage() {} +func (*Description) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{3} +} +func (m *Description) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Description) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Description.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 *Description) XXX_Merge(src proto.Message) { + xxx_messageInfo_Description.Merge(m, src) +} +func (m *Description) XXX_Size() int { + return m.Size() +} +func (m *Description) XXX_DiscardUnknown() { + xxx_messageInfo_Description.DiscardUnknown(m) +} + +var xxx_messageInfo_Description proto.InternalMessageInfo + +func (m *Description) GetMoniker() string { + if m != nil { + return m.Moniker + } + return "" +} + +func (m *Description) GetIdentity() string { + if m != nil { + return m.Identity + } + return "" +} + +func (m *Description) GetWebsite() string { + if m != nil { + return m.Website + } + return "" +} + +func (m *Description) GetSecurityContact() string { + if m != nil { + return m.SecurityContact + } + return "" +} + +func (m *Description) GetDetails() string { + if m != nil { + return m.Details + } + return "" +} + +// Validator defines a validator, together with the total amount of the +// Validator's bond shares and their exchange rate to coins. Slashing results in +// a decrease in the exchange rate, allowing correct calculation of future +// undelegations without iterating over delegators. When coins are delegated to +// this validator, the validator is credited with a delegation whose number of +// bond shares is based on the amount of coins delegated divided by the current +// exchange rate. Voting power can be calculated as total bonded shares +// multiplied by exchange rate. +type Validator struct { + // operator_address defines the address of the validator's operator; bech encoded in JSON. + OperatorAddress string `protobuf:"bytes,1,opt,name=operator_address,json=operatorAddress,proto3" json:"operator_address,omitempty" yaml:"operator_address"` + // consensus_pubkey is the consensus public key of the validator, as a Protobuf Any. + ConsensusPubkey *types1.Any `protobuf:"bytes,2,opt,name=consensus_pubkey,json=consensusPubkey,proto3" json:"consensus_pubkey,omitempty" yaml:"consensus_pubkey"` + // jailed defined whether the validator has been jailed from bonded status or not. + Jailed bool `protobuf:"varint,3,opt,name=jailed,proto3" json:"jailed,omitempty"` + // status is the validator status (bonded/unbonding/unbonded). + Status BondStatus `protobuf:"varint,4,opt,name=status,proto3,enum=cosmos.staking.v1beta1.BondStatus" json:"status,omitempty"` + // tokens define the delegated tokens (incl. self-delegation). + Tokens github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,5,opt,name=tokens,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"tokens"` + // delegator_shares defines total shares issued to a validator's delegators. + DelegatorShares github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,6,opt,name=delegator_shares,json=delegatorShares,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"delegator_shares" yaml:"delegator_shares"` + // description defines the description terms for the validator. + Description Description `protobuf:"bytes,7,opt,name=description,proto3" json:"description"` + // unbonding_height defines, if unbonding, the height at which this validator has begun unbonding. + UnbondingHeight int64 `protobuf:"varint,8,opt,name=unbonding_height,json=unbondingHeight,proto3" json:"unbonding_height,omitempty" yaml:"unbonding_height"` + // unbonding_time defines, if unbonding, the min time for the validator to complete unbonding. + UnbondingTime time.Time `protobuf:"bytes,9,opt,name=unbonding_time,json=unbondingTime,proto3,stdtime" json:"unbonding_time" yaml:"unbonding_time"` + // commission defines the commission parameters. + Commission Commission `protobuf:"bytes,10,opt,name=commission,proto3" json:"commission"` + // min_self_delegation is the validator's self declared minimum self delegation. + MinSelfDelegation github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,11,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation" yaml:"min_self_delegation"` + // strictly positive if this validator's unbonding has been stopped by external modules + UnbondingOnHoldRefCount int64 `protobuf:"varint,12,opt,name=unbonding_on_hold_ref_count,json=unbondingOnHoldRefCount,proto3" json:"unbonding_on_hold_ref_count,omitempty"` + // list of unbonding ids, each uniquely identifing an unbonding of this validator + UnbondingIds []uint64 `protobuf:"varint,13,rep,packed,name=unbonding_ids,json=unbondingIds,proto3" json:"unbonding_ids,omitempty"` +} + +func (m *Validator) Reset() { *m = Validator{} } +func (*Validator) ProtoMessage() {} +func (*Validator) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{4} +} +func (m *Validator) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Validator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Validator.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 *Validator) XXX_Merge(src proto.Message) { + xxx_messageInfo_Validator.Merge(m, src) +} +func (m *Validator) XXX_Size() int { + return m.Size() +} +func (m *Validator) XXX_DiscardUnknown() { + xxx_messageInfo_Validator.DiscardUnknown(m) +} + +var xxx_messageInfo_Validator proto.InternalMessageInfo + +// Delegation represents the bond with tokens held by an account. It is +// owned by one delegator, and is associated with the voting power of one +// validator. +type Delegation struct { + // delegator_address is the bech32-encoded address of the delegator. + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` + // validator_address is the bech32-encoded address of the validator. + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"validator_address"` + // shares define the delegation shares received. + Shares github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=shares,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"shares"` +} + +func (m *Delegation) Reset() { *m = Delegation{} } +func (*Delegation) ProtoMessage() {} +func (*Delegation) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{10} +} +func (m *Delegation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Delegation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Delegation.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 *Delegation) XXX_Merge(src proto.Message) { + xxx_messageInfo_Delegation.Merge(m, src) +} +func (m *Delegation) XXX_Size() int { + return m.Size() +} +func (m *Delegation) XXX_DiscardUnknown() { + xxx_messageInfo_Delegation.DiscardUnknown(m) +} + +var xxx_messageInfo_Delegation proto.InternalMessageInfo + +// Params defines the parameters for the staking module. +type Params struct { + // unbonding_time is the time duration of unbonding. + UnbondingTime time.Duration `protobuf:"bytes,1,opt,name=unbonding_time,json=unbondingTime,proto3,stdduration" json:"unbonding_time" yaml:"unbonding_time"` + // max_validators is the maximum number of validators. + MaxValidators uint32 `protobuf:"varint,2,opt,name=max_validators,json=maxValidators,proto3" json:"max_validators,omitempty" yaml:"max_validators"` + // max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio). + MaxEntries uint32 `protobuf:"varint,3,opt,name=max_entries,json=maxEntries,proto3" json:"max_entries,omitempty" yaml:"max_entries"` + // historical_entries is the number of historical entries to persist. + HistoricalEntries uint32 `protobuf:"varint,4,opt,name=historical_entries,json=historicalEntries,proto3" json:"historical_entries,omitempty" yaml:"historical_entries"` + // bond_denom defines the bondable coin denomination. + BondDenom string `protobuf:"bytes,5,opt,name=bond_denom,json=bondDenom,proto3" json:"bond_denom,omitempty" yaml:"bond_denom"` +} + +func (m *Params) Reset() { *m = Params{} } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{15} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.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 *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetUnbondingTime() time.Duration { + if m != nil { + return m.UnbondingTime + } + return 0 +} + +func (m *Params) GetMaxValidators() uint32 { + if m != nil { + return m.MaxValidators + } + return 0 +} + +func (m *Params) GetMaxEntries() uint32 { + if m != nil { + return m.MaxEntries + } + return 0 +} + +func (m *Params) GetHistoricalEntries() uint32 { + if m != nil { + return m.HistoricalEntries + } + return 0 +} + +func (m *Params) GetBondDenom() string { + if m != nil { + return m.BondDenom + } + return "" +} + +func init() { + proto.RegisterEnum("cosmos.staking.v1beta1.BondStatus.v3", BondStatus_name, BondStatus_value) + proto.RegisterType((*CommissionRates)(nil), "cosmos.staking.v1beta1.CommissionRates.v3") + proto.RegisterType((*Commission)(nil), "cosmos.staking.v1beta1.Commission.v3") + proto.RegisterType((*Description)(nil), "cosmos.staking.v1beta1.Description.v3") + proto.RegisterType((*Validator)(nil), "cosmos.staking.v1beta1.Validator.v3") + proto.RegisterType((*Delegation)(nil), "cosmos.staking.v1beta1.Delegation.v3") + proto.RegisterType((*Params)(nil), "cosmos.staking.v1beta1.Params.v3") +} + +func init() { + proto.RegisterFile("cosmos/staking/v1beta1/staking.proto", fileDescriptor_64c30c6cf92913c9) +} + +var fileDescriptor_64c30c6cf92913c9 = []byte{ + // 2021 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x4f, 0x6c, 0x23, 0x57, + 0x19, 0xf7, 0xd8, 0xae, 0xe3, 0x7c, 0x4e, 0xe2, 0xe4, 0x6d, 0x76, 0xd7, 0xf1, 0x2e, 0xb6, 0x77, + 0x5a, 0x95, 0xb0, 0x6a, 0x1d, 0x36, 0xad, 0x8a, 0x88, 0x90, 0x68, 0x1c, 0x3b, 0x8d, 0xd5, 0x6d, + 0x36, 0x8c, 0x9d, 0x54, 0x40, 0xc5, 0x68, 0x3c, 0xf3, 0xe2, 0x0c, 0xb1, 0x67, 0xcc, 0xbc, 0xe7, + 0x6d, 0x2c, 0xf5, 0xc0, 0xb1, 0x84, 0x03, 0xe5, 0xd6, 0x4b, 0xa4, 0x95, 0x7a, 0x42, 0x42, 0xe2, + 0x82, 0xb8, 0x72, 0x2d, 0x70, 0x59, 0x6e, 0x08, 0x21, 0x83, 0x76, 0x2f, 0x88, 0x03, 0xaa, 0x72, + 0x40, 0xdc, 0x40, 0xef, 0xcf, 0xfc, 0xc9, 0x38, 0xd9, 0xdd, 0xac, 0x2a, 0x54, 0x89, 0x5e, 0x76, + 0xfd, 0xbe, 0xf7, 0x7d, 0xbf, 0xef, 0x7d, 0xff, 0xdf, 0x9b, 0xc0, 0x4b, 0xa6, 0x4b, 0xfa, 0x2e, + 0x59, 0x21, 0xd4, 0x38, 0xb4, 0x9d, 0xee, 0xca, 0xfd, 0x3b, 0x1d, 0x4c, 0x8d, 0x3b, 0xfe, 0xba, + 0x3a, 0xf0, 0x5c, 0xea, 0xa2, 0x6b, 0x82, 0xab, 0xea, 0x53, 0x25, 0x57, 0x71, 0xb1, 0xeb, 0x76, + 0x5d, 0xce, 0xb2, 0xc2, 0x7e, 0x09, 0xee, 0xe2, 0x52, 0xd7, 0x75, 0xbb, 0x3d, 0xbc, 0xc2, 0x57, + 0x9d, 0xe1, 0xfe, 0x8a, 0xe1, 0x8c, 0xe4, 0x56, 0x29, 0xbe, 0x65, 0x0d, 0x3d, 0x83, 0xda, 0xae, + 0x23, 0xf7, 0xcb, 0xf1, 0x7d, 0x6a, 0xf7, 0x31, 0xa1, 0x46, 0x7f, 0xe0, 0x63, 0x8b, 0x93, 0xe8, + 0x42, 0xa9, 0x3c, 0x96, 0xc4, 0x96, 0xa6, 0x74, 0x0c, 0x82, 0x03, 0x3b, 0x4c, 0xd7, 0xf6, 0xb1, + 0x6f, 0x52, 0xec, 0x58, 0xd8, 0xeb, 0xdb, 0x0e, 0x5d, 0xa1, 0xa3, 0x01, 0x26, 0xe2, 0x5f, 0xb9, + 0x7b, 0x23, 0xb2, 0x6b, 0x74, 0x4c, 0x3b, 0xba, 0xa9, 0xfe, 0x44, 0x81, 0xb9, 0x2d, 0x9b, 0x50, + 0xd7, 0xb3, 0x4d, 0xa3, 0xd7, 0x74, 0xf6, 0x5d, 0xf4, 0x06, 0x64, 0x0e, 0xb0, 0x61, 0x61, 0xaf, + 0xa0, 0x54, 0x94, 0xe5, 0xdc, 0x6a, 0xa1, 0x1a, 0x02, 0x54, 0x85, 0xec, 0x16, 0xdf, 0xaf, 0xa5, + 0x3f, 0x1d, 0x97, 0x13, 0x9a, 0xe4, 0x46, 0xdf, 0x86, 0xcc, 0x7d, 0xa3, 0x47, 0x30, 0x2d, 0x24, + 0x2b, 0xa9, 0xe5, 0xdc, 0xea, 0xad, 0xea, 0xf9, 0xbe, 0xad, 0xee, 0x19, 0x3d, 0xdb, 0x32, 0xa8, + 0x1b, 0x00, 0x08, 0x31, 0xf5, 0x57, 0x49, 0xc8, 0x6f, 0xb8, 0xfd, 0xbe, 0x4d, 0x88, 0xed, 0x3a, + 0x9a, 0x41, 0x31, 0x41, 0x35, 0x48, 0x7b, 0x06, 0xc5, 0xfc, 0x28, 0xd3, 0xb5, 0x2a, 0xe3, 0xff, + 0xf3, 0xb8, 0xfc, 0x72, 0xd7, 0xa6, 0x07, 0xc3, 0x4e, 0xd5, 0x74, 0xfb, 0xd2, 0x53, 0xf2, 0xbf, + 0x57, 0x89, 0x75, 0x28, 0xed, 0xab, 0x63, 0x53, 0xe3, 0xb2, 0xe8, 0x3d, 0xc8, 0xf6, 0x8d, 0x23, + 0x9d, 0xe3, 0x24, 0x39, 0xce, 0xfa, 0xe5, 0x70, 0x4e, 0xc7, 0xe5, 0xfc, 0xc8, 0xe8, 0xf7, 0xd6, + 0x54, 0x1f, 0x47, 0xd5, 0xa6, 0xfa, 0xc6, 0x11, 0x3b, 0x22, 0x1a, 0x40, 0x9e, 0x51, 0xcd, 0x03, + 0xc3, 0xe9, 0x62, 0xa1, 0x24, 0xc5, 0x95, 0x6c, 0x5d, 0x5a, 0xc9, 0xb5, 0x50, 0x49, 0x04, 0x4e, + 0xd5, 0x66, 0xfb, 0xc6, 0xd1, 0x06, 0x27, 0x30, 0x8d, 0x6b, 0xd9, 0x8f, 0x1f, 0x94, 0x13, 0x7f, + 0x7f, 0x50, 0x56, 0xd4, 0x3f, 0x2a, 0x00, 0xa1, 0xc7, 0xd0, 0x7b, 0x30, 0x6f, 0x06, 0x2b, 0x2e, + 0x4b, 0x64, 0x0c, 0xbf, 0x7a, 0x51, 0x2c, 0x62, 0xfe, 0xae, 0x65, 0xd9, 0xa1, 0x1f, 0x8e, 0xcb, + 0x8a, 0x96, 0x37, 0x63, 0xa1, 0xf8, 0x3e, 0xe4, 0x86, 0x03, 0xcb, 0xa0, 0x58, 0x67, 0xa9, 0xcb, + 0x3d, 0x99, 0x5b, 0x2d, 0x56, 0x45, 0x5e, 0x57, 0xfd, 0xbc, 0xae, 0xb6, 0xfd, 0xbc, 0xae, 0x95, + 0x18, 0xd6, 0xe9, 0xb8, 0x8c, 0x84, 0x59, 0x11, 0x61, 0xf5, 0xa3, 0xbf, 0x96, 0x15, 0x0d, 0x04, + 0x85, 0x09, 0x44, 0x6c, 0xfa, 0x9d, 0x02, 0xb9, 0x3a, 0x26, 0xa6, 0x67, 0x0f, 0x58, 0xf9, 0xa0, + 0x02, 0x4c, 0xf5, 0x5d, 0xc7, 0x3e, 0x94, 0xf9, 0x38, 0xad, 0xf9, 0x4b, 0x54, 0x84, 0xac, 0x6d, + 0x61, 0x87, 0xda, 0x74, 0x24, 0xe2, 0xaa, 0x05, 0x6b, 0x26, 0xf5, 0x3e, 0xee, 0x10, 0xdb, 0x8f, + 0x86, 0xe6, 0x2f, 0xd1, 0x26, 0xcc, 0x13, 0x6c, 0x0e, 0x3d, 0x9b, 0x8e, 0x74, 0xd3, 0x75, 0xa8, + 0x61, 0xd2, 0x42, 0x9a, 0x07, 0xec, 0xc6, 0xe9, 0xb8, 0x7c, 0x5d, 0x9c, 0x35, 0xce, 0xa1, 0x6a, + 0x79, 0x9f, 0xb4, 0x21, 0x28, 0x4c, 0x83, 0x85, 0xa9, 0x61, 0xf7, 0x48, 0xe1, 0x05, 0xa1, 0x41, + 0x2e, 0x23, 0xb6, 0xfc, 0x2c, 0x0b, 0xd3, 0x41, 0xb6, 0x33, 0xcd, 0xee, 0x00, 0x7b, 0xec, 0xb7, + 0x6e, 0x58, 0x96, 0x87, 0x09, 0x91, 0x79, 0x1d, 0xd1, 0x1c, 0xe7, 0x50, 0xb5, 0xbc, 0x4f, 0x5a, + 0x17, 0x14, 0x44, 0x59, 0x98, 0x1d, 0x82, 0x1d, 0x32, 0x24, 0xfa, 0x60, 0xd8, 0x39, 0xc4, 0x23, + 0x19, 0x8d, 0xc5, 0x89, 0x68, 0xac, 0x3b, 0xa3, 0xda, 0x6b, 0x21, 0x7a, 0x5c, 0x4e, 0xfd, 0xfd, + 0xaf, 0x5f, 0x5d, 0x94, 0xa9, 0x61, 0x7a, 0xa3, 0x01, 0x75, 0xab, 0x3b, 0xc3, 0xce, 0xdb, 0x78, + 0xc4, 0xc2, 0x2f, 0x59, 0x77, 0x38, 0x27, 0xba, 0x06, 0x99, 0x1f, 0x1a, 0x76, 0x0f, 0x5b, 0xdc, + 0xa1, 0x59, 0x4d, 0xae, 0xd0, 0x1a, 0x64, 0x08, 0x35, 0xe8, 0x90, 0x70, 0x2f, 0xce, 0xad, 0xaa, + 0x17, 0xa5, 0x5a, 0xcd, 0x75, 0xac, 0x16, 0xe7, 0xd4, 0xa4, 0x04, 0xda, 0x84, 0x0c, 0x75, 0x0f, + 0xb1, 0x23, 0x5d, 0x78, 0xa9, 0xfa, 0x6e, 0x3a, 0x54, 0x93, 0xd2, 0xcc, 0x23, 0x16, 0xee, 0xe1, + 0x2e, 0x77, 0x1c, 0x39, 0x30, 0x3c, 0x4c, 0x0a, 0x19, 0x8e, 0xd8, 0xbc, 0x74, 0x11, 0x4a, 0x4f, + 0xc5, 0xf1, 0x54, 0x2d, 0x1f, 0x90, 0x5a, 0x9c, 0x82, 0xde, 0x86, 0x9c, 0x15, 0x26, 0x6a, 0x61, + 0x8a, 0x87, 0xe0, 0xc5, 0x8b, 0xcc, 0x8f, 0xe4, 0xb4, 0xec, 0x7b, 0x51, 0x69, 0x96, 0x1c, 0x43, + 0xa7, 0xe3, 0x3a, 0x96, 0xed, 0x74, 0xf5, 0x03, 0x6c, 0x77, 0x0f, 0x68, 0x21, 0x5b, 0x51, 0x96, + 0x53, 0xd1, 0xe4, 0x88, 0x73, 0xa8, 0x5a, 0x3e, 0x20, 0x6d, 0x71, 0x0a, 0xb2, 0x60, 0x2e, 0xe4, + 0xe2, 0x85, 0x3a, 0xfd, 0xd4, 0x42, 0xbd, 0x25, 0x0b, 0xf5, 0x6a, 0x5c, 0x4b, 0x58, 0xab, 0xb3, + 0x01, 0x91, 0x89, 0xa1, 0x2d, 0x80, 0xb0, 0x3d, 0x14, 0x80, 0x6b, 0x50, 0x9f, 0xde, 0x63, 0xa4, + 0xe1, 0x11, 0x59, 0xf4, 0x01, 0x5c, 0xe9, 0xdb, 0x8e, 0x4e, 0x70, 0x6f, 0x5f, 0x97, 0x0e, 0x66, + 0x90, 0x39, 0x1e, 0xbd, 0xbb, 0x97, 0xcb, 0x87, 0xd3, 0x71, 0xb9, 0x28, 0x5b, 0xe8, 0x24, 0xa4, + 0xaa, 0x2d, 0xf4, 0x6d, 0xa7, 0x85, 0x7b, 0xfb, 0xf5, 0x80, 0x86, 0xbe, 0x05, 0x37, 0x42, 0x6b, + 0x5d, 0x47, 0x3f, 0x70, 0x7b, 0x96, 0xee, 0xe1, 0x7d, 0xdd, 0x74, 0x87, 0x0e, 0x2d, 0xcc, 0xb0, + 0x00, 0x68, 0xd7, 0x03, 0x96, 0x7b, 0xce, 0x96, 0xdb, 0xb3, 0x34, 0xbc, 0xbf, 0xc1, 0xb6, 0xd1, + 0x8b, 0x10, 0xba, 0x45, 0xb7, 0x2d, 0x52, 0x98, 0xad, 0xa4, 0x96, 0xd3, 0xda, 0x4c, 0x40, 0x6c, + 0x5a, 0x64, 0x6d, 0xe6, 0xc3, 0x07, 0xe5, 0x84, 0xec, 0x08, 0x09, 0xf5, 0x0d, 0x98, 0xd9, 0x33, + 0x7a, 0xb2, 0x92, 0x31, 0x41, 0x37, 0x61, 0xda, 0xf0, 0x17, 0x05, 0xa5, 0x92, 0x5a, 0x9e, 0xd6, + 0x42, 0x82, 0xe8, 0x24, 0x3f, 0xfe, 0x4b, 0x45, 0x51, 0x7f, 0xa9, 0x40, 0xa6, 0xbe, 0xb7, 0x63, + 0xd8, 0x1e, 0x6a, 0xc2, 0x42, 0x98, 0x9c, 0x67, 0xfb, 0xc8, 0xcd, 0xd3, 0x71, 0xb9, 0x10, 0xcf, + 0xdf, 0xa0, 0x91, 0x84, 0x35, 0xe2, 0x77, 0x92, 0x26, 0x2c, 0xdc, 0xf7, 0xdb, 0x53, 0x00, 0x95, + 0x8c, 0x43, 0x4d, 0xb0, 0xa8, 0xda, 0x7c, 0x40, 0x93, 0x50, 0x31, 0x33, 0x1b, 0x30, 0x25, 0x4e, + 0x4b, 0xd0, 0x1a, 0xbc, 0x30, 0x60, 0x3f, 0xb8, 0x75, 0xb9, 0xd5, 0xd2, 0x85, 0xf5, 0xc1, 0xf9, + 0x65, 0x86, 0x08, 0x11, 0xf5, 0xe7, 0x49, 0x80, 0xfa, 0xde, 0x5e, 0xdb, 0xb3, 0x07, 0x3d, 0x4c, + 0x3f, 0x4f, 0xcb, 0xdb, 0x70, 0x35, 0x34, 0x8b, 0x78, 0x66, 0xcc, 0xfa, 0xca, 0xe9, 0xb8, 0x7c, + 0x33, 0x6e, 0x7d, 0x84, 0x4d, 0xd5, 0xae, 0x04, 0xf4, 0x96, 0x67, 0x9e, 0x8b, 0x6a, 0x11, 0x1a, + 0xa0, 0xa6, 0x2e, 0x46, 0x8d, 0xb0, 0x45, 0x51, 0xeb, 0x84, 0x9e, 0xef, 0xda, 0x16, 0xe4, 0x42, + 0x97, 0x10, 0x54, 0x87, 0x2c, 0x95, 0xbf, 0xa5, 0x87, 0xd5, 0x8b, 0x3d, 0xec, 0x8b, 0x49, 0x2f, + 0x07, 0x92, 0xea, 0xbf, 0x15, 0x80, 0x48, 0x59, 0x7c, 0x21, 0x53, 0x8c, 0x4d, 0x0b, 0xd9, 0xdb, + 0x53, 0xcf, 0x75, 0x1b, 0x94, 0xd2, 0x31, 0x7f, 0xfe, 0x34, 0x09, 0x57, 0x76, 0xfd, 0x82, 0xfd, + 0xc2, 0xfb, 0x60, 0x07, 0xa6, 0xb0, 0x43, 0x3d, 0x9b, 0x3b, 0x81, 0x45, 0xfb, 0xeb, 0x17, 0x45, + 0xfb, 0x1c, 0x9b, 0x1a, 0x0e, 0xf5, 0x46, 0x32, 0xf6, 0x3e, 0x4c, 0xcc, 0x1b, 0x9f, 0xa5, 0xa0, + 0x70, 0x91, 0x24, 0xda, 0x80, 0xbc, 0xe9, 0x61, 0x4e, 0xf0, 0x47, 0x94, 0xc2, 0x47, 0x54, 0x31, + 0xbc, 0xbc, 0xc6, 0x18, 0x54, 0x6d, 0xce, 0xa7, 0xc8, 0x01, 0xd5, 0x05, 0x76, 0xb3, 0x64, 0x69, + 0xc7, 0xb8, 0x9e, 0xf1, 0x2a, 0xa9, 0xca, 0x09, 0xe5, 0x2b, 0x39, 0x0b, 0x20, 0x46, 0xd4, 0x5c, + 0x48, 0xe5, 0x33, 0xea, 0x47, 0x90, 0xb7, 0x1d, 0x9b, 0xda, 0x46, 0x4f, 0xef, 0x18, 0x3d, 0xc3, + 0x31, 0x9f, 0xe7, 0x62, 0x2e, 0xa6, 0x8a, 0x54, 0x1b, 0x83, 0x53, 0xb5, 0x39, 0x49, 0xa9, 0x09, + 0x02, 0xda, 0x82, 0x29, 0x5f, 0x55, 0xfa, 0xb9, 0x2e, 0x34, 0xbe, 0x38, 0xba, 0x05, 0x33, 0xd1, + 0xd1, 0xc2, 0xef, 0x47, 0x69, 0x2d, 0x17, 0x99, 0x2c, 0x4f, 0x9b, 0x5d, 0x99, 0x27, 0xce, 0xae, + 0xc8, 0x25, 0xf5, 0x9f, 0x29, 0x58, 0xd0, 0xb0, 0xf5, 0x65, 0xac, 0x2f, 0x17, 0xeb, 0x77, 0x00, + 0x44, 0x3f, 0x61, 0x1d, 0xfc, 0x39, 0xc2, 0xcd, 0x3a, 0xd2, 0xb4, 0x40, 0xa8, 0x13, 0xfa, 0xbf, + 0x0c, 0xf8, 0x38, 0x09, 0x33, 0xd1, 0x80, 0xff, 0x9f, 0xce, 0x55, 0xd4, 0x0c, 0x7b, 0x69, 0x9a, + 0xf7, 0xd2, 0xaf, 0x5d, 0xd4, 0x4b, 0x27, 0xca, 0xe3, 0xc9, 0x4d, 0xf4, 0x5f, 0x49, 0xc8, 0xec, + 0x18, 0x9e, 0xd1, 0x27, 0xc8, 0x9c, 0xb8, 0x8e, 0x8b, 0x07, 0xf9, 0xd2, 0x44, 0x01, 0xd4, 0xe5, + 0xf7, 0xa2, 0xa7, 0xdc, 0xc6, 0x3f, 0x3e, 0xe7, 0x36, 0xfe, 0x26, 0xcc, 0xf5, 0x8d, 0x23, 0x3d, + 0xb0, 0x51, 0x78, 0x7b, 0xb6, 0xb6, 0x14, 0xa2, 0x9c, 0xdd, 0x17, 0x9f, 0x14, 0x82, 0x97, 0x29, + 0x41, 0xdf, 0x80, 0x1c, 0xe3, 0x08, 0x47, 0x0b, 0x13, 0xbf, 0x16, 0xbe, 0xdd, 0x23, 0x9b, 0xaa, + 0x06, 0x7d, 0xe3, 0xa8, 0x21, 0x16, 0xe8, 0x2e, 0xa0, 0x83, 0xe0, 0xf3, 0x91, 0x1e, 0xba, 0x93, + 0xc9, 0x7f, 0xe5, 0x74, 0x5c, 0x5e, 0x12, 0xf2, 0x93, 0x3c, 0xaa, 0xb6, 0x10, 0x12, 0x7d, 0xb4, + 0xd7, 0x01, 0x98, 0x5d, 0xba, 0x85, 0x1d, 0xb7, 0x2f, 0xdf, 0x84, 0x57, 0x4f, 0xc7, 0xe5, 0x05, + 0x81, 0x12, 0xee, 0xa9, 0xda, 0x34, 0x5b, 0xd4, 0xd9, 0xef, 0x48, 0x66, 0x7f, 0xa2, 0x00, 0x0a, + 0x87, 0x96, 0x86, 0xc9, 0x80, 0x3d, 0x62, 0xd9, 0x6b, 0x25, 0xf2, 0xb4, 0x50, 0x9e, 0xfc, 0x5a, + 0x09, 0xe5, 0xfd, 0xd7, 0x4a, 0xa4, 0x52, 0xbe, 0x19, 0x36, 0xf8, 0xa4, 0x8c, 0xa3, 0x84, 0xe9, + 0x18, 0x04, 0x47, 0x5e, 0x3c, 0xb6, 0x2f, 0xed, 0xf3, 0x07, 0xa7, 0x4c, 0xa8, 0x7f, 0x50, 0x60, + 0x69, 0x22, 0xa3, 0x82, 0xc3, 0xfe, 0x00, 0x90, 0x17, 0xd9, 0xe4, 0xfe, 0x1a, 0xc9, 0x43, 0x5f, + 0x3a, 0x41, 0x17, 0xbc, 0x89, 0xc6, 0xfe, 0xb9, 0xcd, 0xa8, 0xb5, 0x34, 0xf7, 0xf9, 0x6f, 0x15, + 0x58, 0x8c, 0xaa, 0x0f, 0x0c, 0xd9, 0x86, 0x99, 0xa8, 0x76, 0x69, 0xc2, 0x4b, 0xcf, 0x62, 0x82, + 0x3c, 0xfd, 0x19, 0x79, 0xf4, 0x9d, 0xb0, 0x5c, 0xc5, 0x07, 0xc6, 0x3b, 0xcf, 0xec, 0x0d, 0xff, + 0x4c, 0xf1, 0xb2, 0x4d, 0xf3, 0x78, 0xfc, 0x47, 0x81, 0xf4, 0x8e, 0xeb, 0xf6, 0x90, 0x0b, 0x0b, + 0x8e, 0x4b, 0x75, 0x96, 0x59, 0xd8, 0xd2, 0xe5, 0x97, 0x09, 0xd1, 0x07, 0x37, 0x2e, 0xe7, 0xa4, + 0x7f, 0x8c, 0xcb, 0x93, 0x50, 0x5a, 0xde, 0x71, 0x69, 0x8d, 0x53, 0xda, 0xe2, 0xbb, 0xc5, 0x07, + 0x30, 0x7b, 0x56, 0x99, 0xe8, 0x92, 0xef, 0x5e, 0x5a, 0xd9, 0x59, 0x98, 0xd3, 0x71, 0x79, 0x31, + 0xac, 0x98, 0x80, 0xac, 0x6a, 0x33, 0x9d, 0x88, 0xf6, 0xb5, 0x2c, 0x8b, 0xdf, 0x67, 0x2c, 0x86, + 0x6d, 0x98, 0x0f, 0x9a, 0xc1, 0x2e, 0xff, 0x28, 0x47, 0xd0, 0x9b, 0x30, 0x25, 0xbe, 0xcf, 0xf9, + 0xef, 0x8a, 0x4a, 0xf4, 0x3b, 0xb0, 0xd1, 0x31, 0xed, 0x6a, 0x4c, 0xc6, 0xf7, 0xae, 0x14, 0xbb, + 0xfd, 0x1b, 0x05, 0x20, 0xfc, 0xe8, 0x83, 0x5e, 0x81, 0xeb, 0xb5, 0x7b, 0xdb, 0x75, 0xbd, 0xd5, + 0x5e, 0x6f, 0xef, 0xb6, 0xf4, 0xdd, 0xed, 0xd6, 0x4e, 0x63, 0xa3, 0xb9, 0xd9, 0x6c, 0xd4, 0xe7, + 0x13, 0xc5, 0xfc, 0xf1, 0x49, 0x25, 0xb7, 0xeb, 0x90, 0x01, 0x36, 0xed, 0x7d, 0x1b, 0x5b, 0xe8, + 0x65, 0x58, 0x3c, 0xcb, 0xcd, 0x56, 0x8d, 0xfa, 0xbc, 0x52, 0x9c, 0x39, 0x3e, 0xa9, 0x64, 0xc5, + 0x1d, 0x15, 0x5b, 0x68, 0x19, 0xae, 0x4e, 0xf2, 0x35, 0xb7, 0xdf, 0x9a, 0x4f, 0x16, 0x67, 0x8f, + 0x4f, 0x2a, 0xd3, 0xc1, 0x65, 0x16, 0xa9, 0x80, 0xa2, 0x9c, 0x12, 0x2f, 0x55, 0x84, 0xe3, 0x93, + 0x4a, 0x46, 0x84, 0xa5, 0x98, 0xfe, 0xf0, 0x93, 0x52, 0xe2, 0xf6, 0x2f, 0x14, 0x98, 0x6b, 0x3a, + 0xfb, 0x9e, 0x61, 0xf2, 0x0b, 0xc6, 0x68, 0x80, 0xd1, 0xeb, 0x70, 0xa3, 0xb9, 0xbd, 0xa9, 0xad, + 0x6f, 0xb4, 0x9b, 0xf7, 0xb6, 0xf5, 0xf6, 0x77, 0x77, 0x1a, 0x31, 0x03, 0xae, 0x1c, 0x9f, 0x54, + 0xf2, 0xa1, 0x50, 0xa3, 0x3f, 0xa0, 0x23, 0xb4, 0x32, 0x29, 0x55, 0xbf, 0xb7, 0x5b, 0xbb, 0xdb, + 0xd0, 0x5b, 0xcd, 0xb7, 0xb6, 0xe7, 0x95, 0xe2, 0xdc, 0xf1, 0x49, 0x05, 0xea, 0xee, 0xb0, 0xd3, + 0xc3, 0x2d, 0xbb, 0xeb, 0xa0, 0xdb, 0x50, 0x98, 0x14, 0x78, 0x77, 0xbb, 0xdd, 0x7c, 0xa7, 0x31, + 0x9f, 0x14, 0x96, 0xd7, 0xdd, 0xf7, 0x1d, 0x36, 0x09, 0xc4, 0x59, 0x6b, 0x9b, 0x9f, 0x3e, 0x2a, + 0x29, 0x0f, 0x1f, 0x95, 0x94, 0xbf, 0x3d, 0x2a, 0x29, 0x1f, 0x3d, 0x2e, 0x25, 0x1e, 0x3e, 0x2e, + 0x25, 0xfe, 0xf4, 0xb8, 0x94, 0xf8, 0xde, 0x2b, 0x4f, 0xcc, 0x9e, 0xa3, 0xe0, 0x0f, 0x23, 0x3c, + 0x8f, 0x3a, 0x19, 0x3e, 0x88, 0x5e, 0xfb, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0xe2, 0xd3, + 0xf7, 0x37, 0x19, 0x00, 0x00, +} + +func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { + d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} + var gzipped = []byte{ + // 12543 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x74, 0x1c, 0xd7, + 0x75, 0x18, 0x66, 0x3f, 0x80, 0xdd, 0x8b, 0x05, 0xb0, 0x78, 0x00, 0x49, 0x70, 0x49, 0x01, 0xd0, + 0xe8, 0x8b, 0xa2, 0x24, 0x50, 0xa2, 0x44, 0x4a, 0x04, 0x6d, 0xcb, 0xbb, 0xc0, 0x12, 0x80, 0x84, + 0x2f, 0x0d, 0x40, 0x4a, 0x96, 0x3f, 0x26, 0x83, 0xdd, 0x87, 0xc5, 0x88, 0xbb, 0x33, 0xe3, 0x9d, + 0x59, 0x12, 0x50, 0x92, 0x1e, 0xc5, 0x76, 0x52, 0x9b, 0x39, 0x6d, 0xe2, 0xba, 0xa7, 0x51, 0x9c, + 0xd0, 0x95, 0xe3, 0xb4, 0x4e, 0x9c, 0xb4, 0xf9, 0x72, 0xf3, 0xd1, 0xf6, 0xb4, 0x4e, 0x7b, 0xd2, + 0x24, 0x4e, 0xd3, 0x63, 0xb7, 0x39, 0x6d, 0x9a, 0x93, 0xd2, 0xa9, 0xec, 0xb6, 0xae, 0xeb, 0x26, + 0x8e, 0xea, 0x36, 0xe9, 0xf1, 0x49, 0xd3, 0xf3, 0xbe, 0xe6, 0x6b, 0x77, 0x76, 0x76, 0x21, 0xd2, + 0x4e, 0xea, 0xfe, 0x02, 0xde, 0x9d, 0x7b, 0xef, 0x7b, 0xef, 0xbe, 0xfb, 0xee, 0xbd, 0xef, 0xbe, + 0x8f, 0x85, 0x9f, 0xbb, 0x08, 0xb3, 0x35, 0xd3, 0xac, 0xd5, 0xf1, 0x19, 0xab, 0x69, 0x3a, 0xe6, + 0x4e, 0x6b, 0xf7, 0x4c, 0x15, 0xdb, 0x95, 0xa6, 0x6e, 0x39, 0x66, 0x73, 0x8e, 0xc2, 0xd0, 0x18, + 0xc3, 0x98, 0x13, 0x18, 0xf2, 0x1a, 0x8c, 0x5f, 0xd2, 0xeb, 0x78, 0xd1, 0x45, 0xdc, 0xc2, 0x0e, + 0x7a, 0x0a, 0x52, 0xbb, 0x7a, 0x1d, 0x4f, 0x49, 0xb3, 0xc9, 0x53, 0xc3, 0x67, 0xef, 0x9d, 0x0b, + 0x11, 0xcd, 0x05, 0x29, 0x36, 0x09, 0x58, 0xa1, 0x14, 0xf2, 0x97, 0x52, 0x30, 0xd1, 0xe1, 0x2b, + 0x42, 0x90, 0x32, 0xb4, 0x06, 0xe1, 0x28, 0x9d, 0xca, 0x2a, 0xf4, 0x7f, 0x34, 0x05, 0x43, 0x96, + 0x56, 0xb9, 0xaa, 0xd5, 0xf0, 0x54, 0x82, 0x82, 0x45, 0x11, 0x4d, 0x03, 0x54, 0xb1, 0x85, 0x8d, + 0x2a, 0x36, 0x2a, 0x07, 0x53, 0xc9, 0xd9, 0xe4, 0xa9, 0xac, 0xe2, 0x83, 0xa0, 0x87, 0x60, 0xdc, + 0x6a, 0xed, 0xd4, 0xf5, 0x8a, 0xea, 0x43, 0x83, 0xd9, 0xe4, 0xa9, 0xb4, 0x92, 0x67, 0x1f, 0x16, + 0x3d, 0xe4, 0x07, 0x60, 0xec, 0x3a, 0xd6, 0xae, 0xfa, 0x51, 0x87, 0x29, 0xea, 0x28, 0x01, 0xfb, + 0x10, 0x17, 0x20, 0xd7, 0xc0, 0xb6, 0xad, 0xd5, 0xb0, 0xea, 0x1c, 0x58, 0x78, 0x2a, 0x45, 0x7b, + 0x3f, 0xdb, 0xd6, 0xfb, 0x70, 0xcf, 0x87, 0x39, 0xd5, 0xf6, 0x81, 0x85, 0x51, 0x11, 0xb2, 0xd8, + 0x68, 0x35, 0x18, 0x87, 0x74, 0x84, 0xfc, 0xca, 0x46, 0xab, 0x11, 0xe6, 0x92, 0x21, 0x64, 0x9c, + 0xc5, 0x90, 0x8d, 0x9b, 0xd7, 0xf4, 0x0a, 0x9e, 0x1a, 0xa4, 0x0c, 0x1e, 0x68, 0x63, 0xb0, 0xc5, + 0xbe, 0x87, 0x79, 0x08, 0x3a, 0xb4, 0x00, 0x59, 0xbc, 0xef, 0x60, 0xc3, 0xd6, 0x4d, 0x63, 0x6a, + 0x88, 0x32, 0xb9, 0xaf, 0xc3, 0x28, 0xe2, 0x7a, 0x35, 0xcc, 0xc2, 0xa3, 0x43, 0xe7, 0x61, 0xc8, + 0xb4, 0x1c, 0xdd, 0x34, 0xec, 0xa9, 0xcc, 0xac, 0x74, 0x6a, 0xf8, 0xec, 0xc9, 0x8e, 0x8a, 0xb0, + 0xc1, 0x70, 0x14, 0x81, 0x8c, 0x56, 0x20, 0x6f, 0x9b, 0xad, 0x66, 0x05, 0xab, 0x15, 0xb3, 0x8a, + 0x55, 0xdd, 0xd8, 0x35, 0xa7, 0xb2, 0x94, 0xc1, 0x4c, 0x7b, 0x47, 0x28, 0xe2, 0x82, 0x59, 0xc5, + 0x2b, 0xc6, 0xae, 0xa9, 0x8c, 0xda, 0x81, 0x32, 0x3a, 0x0a, 0x83, 0xf6, 0x81, 0xe1, 0x68, 0xfb, + 0x53, 0x39, 0xaa, 0x21, 0xbc, 0x24, 0xff, 0xca, 0x20, 0x8c, 0xf5, 0xa2, 0x62, 0x17, 0x21, 0xbd, + 0x4b, 0x7a, 0x39, 0x95, 0xe8, 0x47, 0x06, 0x8c, 0x26, 0x28, 0xc4, 0xc1, 0x43, 0x0a, 0xb1, 0x08, + 0xc3, 0x06, 0xb6, 0x1d, 0x5c, 0x65, 0x1a, 0x91, 0xec, 0x51, 0xa7, 0x80, 0x11, 0xb5, 0xab, 0x54, + 0xea, 0x50, 0x2a, 0xf5, 0x02, 0x8c, 0xb9, 0x4d, 0x52, 0x9b, 0x9a, 0x51, 0x13, 0xba, 0x79, 0x26, + 0xae, 0x25, 0x73, 0x65, 0x41, 0xa7, 0x10, 0x32, 0x65, 0x14, 0x07, 0xca, 0x68, 0x11, 0xc0, 0x34, + 0xb0, 0xb9, 0xab, 0x56, 0x71, 0xa5, 0x3e, 0x95, 0x89, 0x90, 0xd2, 0x06, 0x41, 0x69, 0x93, 0x92, + 0xc9, 0xa0, 0x95, 0x3a, 0xba, 0xe0, 0xa9, 0xda, 0x50, 0x84, 0xa6, 0xac, 0xb1, 0x49, 0xd6, 0xa6, + 0x6d, 0x97, 0x61, 0xb4, 0x89, 0x89, 0xde, 0xe3, 0x2a, 0xef, 0x59, 0x96, 0x36, 0x62, 0x2e, 0xb6, + 0x67, 0x0a, 0x27, 0x63, 0x1d, 0x1b, 0x69, 0xfa, 0x8b, 0xe8, 0x1e, 0x70, 0x01, 0x2a, 0x55, 0x2b, + 0xa0, 0x56, 0x28, 0x27, 0x80, 0xeb, 0x5a, 0x03, 0x17, 0x5e, 0x86, 0xd1, 0xa0, 0x78, 0xd0, 0x24, + 0xa4, 0x6d, 0x47, 0x6b, 0x3a, 0x54, 0x0b, 0xd3, 0x0a, 0x2b, 0xa0, 0x3c, 0x24, 0xb1, 0x51, 0xa5, + 0x56, 0x2e, 0xad, 0x90, 0x7f, 0xd1, 0xdb, 0xbd, 0x0e, 0x27, 0x69, 0x87, 0xef, 0x6f, 0x1f, 0xd1, + 0x00, 0xe7, 0x70, 0xbf, 0x0b, 0x4f, 0xc2, 0x48, 0xa0, 0x03, 0xbd, 0x56, 0x2d, 0x7f, 0x17, 0x1c, + 0xe9, 0xc8, 0x1a, 0xbd, 0x00, 0x93, 0x2d, 0x43, 0x37, 0x1c, 0xdc, 0xb4, 0x9a, 0x98, 0x68, 0x2c, + 0xab, 0x6a, 0xea, 0xbf, 0x0c, 0x45, 0xe8, 0xdc, 0x65, 0x3f, 0x36, 0xe3, 0xa2, 0x4c, 0xb4, 0xda, + 0x81, 0xa7, 0xb3, 0x99, 0x2f, 0x0f, 0xe5, 0x5f, 0x79, 0xe5, 0x95, 0x57, 0x12, 0xf2, 0xaf, 0x0e, + 0xc2, 0x64, 0xa7, 0x39, 0xd3, 0x71, 0xfa, 0x1e, 0x85, 0x41, 0xa3, 0xd5, 0xd8, 0xc1, 0x4d, 0x2a, + 0xa4, 0xb4, 0xc2, 0x4b, 0xa8, 0x08, 0xe9, 0xba, 0xb6, 0x83, 0xeb, 0x53, 0xa9, 0x59, 0xe9, 0xd4, + 0xe8, 0xd9, 0x87, 0x7a, 0x9a, 0x95, 0x73, 0xab, 0x84, 0x44, 0x61, 0x94, 0xe8, 0x6d, 0x90, 0xe2, + 0x26, 0x9a, 0x70, 0x38, 0xdd, 0x1b, 0x07, 0x32, 0x97, 0x14, 0x4a, 0x87, 0x4e, 0x40, 0x96, 0xfc, + 0x65, 0xba, 0x31, 0x48, 0xdb, 0x9c, 0x21, 0x00, 0xa2, 0x17, 0xa8, 0x00, 0x19, 0x3a, 0x4d, 0xaa, + 0x58, 0xb8, 0x36, 0xb7, 0x4c, 0x14, 0xab, 0x8a, 0x77, 0xb5, 0x56, 0xdd, 0x51, 0xaf, 0x69, 0xf5, + 0x16, 0xa6, 0x0a, 0x9f, 0x55, 0x72, 0x1c, 0x78, 0x85, 0xc0, 0xd0, 0x0c, 0x0c, 0xb3, 0x59, 0xa5, + 0x1b, 0x55, 0xbc, 0x4f, 0xad, 0x67, 0x5a, 0x61, 0x13, 0x6d, 0x85, 0x40, 0x48, 0xf5, 0x2f, 0xd9, + 0xa6, 0x21, 0x54, 0x93, 0x56, 0x41, 0x00, 0xb4, 0xfa, 0x27, 0xc3, 0x86, 0xfb, 0xae, 0xce, 0xdd, + 0x6b, 0x9b, 0x4b, 0x0f, 0xc0, 0x18, 0xc5, 0x78, 0x9c, 0x0f, 0xbd, 0x56, 0x9f, 0x1a, 0x9f, 0x95, + 0x4e, 0x65, 0x94, 0x51, 0x06, 0xde, 0xe0, 0x50, 0xf9, 0x17, 0x13, 0x90, 0xa2, 0x86, 0x65, 0x0c, + 0x86, 0xb7, 0xdf, 0xb1, 0x59, 0x56, 0x17, 0x37, 0x2e, 0x97, 0x56, 0xcb, 0x79, 0x09, 0x8d, 0x02, + 0x50, 0xc0, 0xa5, 0xd5, 0x8d, 0xe2, 0x76, 0x3e, 0xe1, 0x96, 0x57, 0xd6, 0xb7, 0xcf, 0x3f, 0x91, + 0x4f, 0xba, 0x04, 0x97, 0x19, 0x20, 0xe5, 0x47, 0x78, 0xfc, 0x6c, 0x3e, 0x8d, 0xf2, 0x90, 0x63, + 0x0c, 0x56, 0x5e, 0x28, 0x2f, 0x9e, 0x7f, 0x22, 0x3f, 0x18, 0x84, 0x3c, 0x7e, 0x36, 0x3f, 0x84, + 0x46, 0x20, 0x4b, 0x21, 0xa5, 0x8d, 0x8d, 0xd5, 0x7c, 0xc6, 0xe5, 0xb9, 0xb5, 0xad, 0xac, 0xac, + 0x2f, 0xe5, 0xb3, 0x2e, 0xcf, 0x25, 0x65, 0xe3, 0xf2, 0x66, 0x1e, 0x5c, 0x0e, 0x6b, 0xe5, 0xad, + 0xad, 0xe2, 0x52, 0x39, 0x3f, 0xec, 0x62, 0x94, 0xde, 0xb1, 0x5d, 0xde, 0xca, 0xe7, 0x02, 0xcd, + 0x7a, 0xfc, 0x6c, 0x7e, 0xc4, 0xad, 0xa2, 0xbc, 0x7e, 0x79, 0x2d, 0x3f, 0x8a, 0xc6, 0x61, 0x84, + 0x55, 0x21, 0x1a, 0x31, 0x16, 0x02, 0x9d, 0x7f, 0x22, 0x9f, 0xf7, 0x1a, 0xc2, 0xb8, 0x8c, 0x07, + 0x00, 0xe7, 0x9f, 0xc8, 0x23, 0x79, 0x01, 0xd2, 0x54, 0x0d, 0x11, 0x82, 0xd1, 0xd5, 0x62, 0xa9, + 0xbc, 0xaa, 0x6e, 0x6c, 0x6e, 0xaf, 0x6c, 0xac, 0x17, 0x57, 0xf3, 0x92, 0x07, 0x53, 0xca, 0xcf, + 0x5d, 0x5e, 0x51, 0xca, 0x8b, 0xf9, 0x84, 0x1f, 0xb6, 0x59, 0x2e, 0x6e, 0x97, 0x17, 0xf3, 0x49, + 0xb9, 0x02, 0x93, 0x9d, 0x0c, 0x6a, 0xc7, 0x29, 0xe4, 0xd3, 0x85, 0x44, 0x84, 0x2e, 0x50, 0x5e, + 0x61, 0x5d, 0x90, 0xbf, 0x98, 0x80, 0x89, 0x0e, 0x4e, 0xa5, 0x63, 0x25, 0x4f, 0x43, 0x9a, 0xe9, + 0x32, 0x73, 0xb3, 0x0f, 0x76, 0xf4, 0x4e, 0x54, 0xb3, 0xdb, 0x5c, 0x2d, 0xa5, 0xf3, 0x87, 0x1a, + 0xc9, 0x88, 0x50, 0x83, 0xb0, 0x68, 0x53, 0xd8, 0x77, 0xb7, 0x19, 0x7f, 0xe6, 0x1f, 0xcf, 0xf7, + 0xe2, 0x1f, 0x29, 0xac, 0x3f, 0x27, 0x90, 0xee, 0xe0, 0x04, 0x2e, 0xc2, 0x78, 0x1b, 0xa3, 0x9e, + 0x8d, 0xf1, 0xfb, 0x25, 0x98, 0x8a, 0x12, 0x4e, 0x8c, 0x49, 0x4c, 0x04, 0x4c, 0xe2, 0xc5, 0xb0, + 0x04, 0xef, 0x8e, 0x1e, 0x84, 0xb6, 0xb1, 0xfe, 0xa4, 0x04, 0x47, 0x3b, 0x87, 0x94, 0x1d, 0xdb, + 0xf0, 0x36, 0x18, 0x6c, 0x60, 0x67, 0xcf, 0x14, 0x61, 0xd5, 0xfd, 0x1d, 0x9c, 0x35, 0xf9, 0x1c, + 0x1e, 0x6c, 0x4e, 0xe5, 0xf7, 0xf6, 0xc9, 0xa8, 0xb8, 0x90, 0xb5, 0xa6, 0xad, 0xa5, 0x1f, 0x4a, + 0xc0, 0x91, 0x8e, 0xcc, 0x3b, 0x36, 0xf4, 0x2e, 0x00, 0xdd, 0xb0, 0x5a, 0x0e, 0x0b, 0x9d, 0x98, + 0x25, 0xce, 0x52, 0x08, 0x35, 0x5e, 0xc4, 0xca, 0xb6, 0x1c, 0xf7, 0x7b, 0x92, 0x7e, 0x07, 0x06, + 0xa2, 0x08, 0x4f, 0x79, 0x0d, 0x4d, 0xd1, 0x86, 0x4e, 0x47, 0xf4, 0xb4, 0x4d, 0x31, 0x1f, 0x85, + 0x7c, 0xa5, 0xae, 0x63, 0xc3, 0x51, 0x6d, 0xa7, 0x89, 0xb5, 0x86, 0x6e, 0xd4, 0xa8, 0xab, 0xc9, + 0xcc, 0xa7, 0x77, 0xb5, 0xba, 0x8d, 0x95, 0x31, 0xf6, 0x79, 0x4b, 0x7c, 0x25, 0x14, 0x54, 0x81, + 0x9a, 0x3e, 0x8a, 0xc1, 0x00, 0x05, 0xfb, 0xec, 0x52, 0xc8, 0x1f, 0xce, 0xc2, 0xb0, 0x2f, 0x00, + 0x47, 0x77, 0x43, 0xee, 0x25, 0xed, 0x9a, 0xa6, 0x8a, 0x45, 0x15, 0x93, 0xc4, 0x30, 0x81, 0x6d, + 0xf2, 0x85, 0xd5, 0xa3, 0x30, 0x49, 0x51, 0xcc, 0x96, 0x83, 0x9b, 0x6a, 0xa5, 0xae, 0xd9, 0x36, + 0x15, 0x5a, 0x86, 0xa2, 0x22, 0xf2, 0x6d, 0x83, 0x7c, 0x5a, 0x10, 0x5f, 0xd0, 0x39, 0x98, 0xa0, + 0x14, 0x8d, 0x56, 0xdd, 0xd1, 0xad, 0x3a, 0x56, 0xc9, 0x32, 0xcf, 0xa6, 0x2e, 0xc7, 0x6d, 0xd9, + 0x38, 0xc1, 0x58, 0xe3, 0x08, 0xa4, 0x45, 0x36, 0x5a, 0x84, 0xbb, 0x28, 0x59, 0x0d, 0x1b, 0xb8, + 0xa9, 0x39, 0x58, 0xc5, 0xef, 0x6d, 0x69, 0x75, 0x5b, 0xd5, 0x8c, 0xaa, 0xba, 0xa7, 0xd9, 0x7b, + 0x53, 0x93, 0x84, 0x41, 0x29, 0x31, 0x25, 0x29, 0xc7, 0x09, 0xe2, 0x12, 0xc7, 0x2b, 0x53, 0xb4, + 0xa2, 0x51, 0x5d, 0xd6, 0xec, 0x3d, 0x34, 0x0f, 0x47, 0x29, 0x17, 0xdb, 0x69, 0xea, 0x46, 0x4d, + 0xad, 0xec, 0xe1, 0xca, 0x55, 0xb5, 0xe5, 0xec, 0x3e, 0x35, 0x75, 0xc2, 0x5f, 0x3f, 0x6d, 0xe1, + 0x16, 0xc5, 0x59, 0x20, 0x28, 0x97, 0x9d, 0xdd, 0xa7, 0xd0, 0x16, 0xe4, 0xc8, 0x60, 0x34, 0xf4, + 0x97, 0xb1, 0xba, 0x6b, 0x36, 0xa9, 0x0f, 0x1d, 0xed, 0x60, 0x9a, 0x7c, 0x12, 0x9c, 0xdb, 0xe0, + 0x04, 0x6b, 0x66, 0x15, 0xcf, 0xa7, 0xb7, 0x36, 0xcb, 0xe5, 0x45, 0x65, 0x58, 0x70, 0xb9, 0x64, + 0x36, 0x89, 0x42, 0xd5, 0x4c, 0x57, 0xc0, 0xc3, 0x4c, 0xa1, 0x6a, 0xa6, 0x10, 0xef, 0x39, 0x98, + 0xa8, 0x54, 0x58, 0x9f, 0xf5, 0x8a, 0xca, 0x17, 0x63, 0xf6, 0x54, 0x3e, 0x20, 0xac, 0x4a, 0x65, + 0x89, 0x21, 0x70, 0x1d, 0xb7, 0xd1, 0x05, 0x38, 0xe2, 0x09, 0xcb, 0x4f, 0x38, 0xde, 0xd6, 0xcb, + 0x30, 0xe9, 0x39, 0x98, 0xb0, 0x0e, 0xda, 0x09, 0x51, 0xa0, 0x46, 0xeb, 0x20, 0x4c, 0xf6, 0x24, + 0x4c, 0x5a, 0x7b, 0x56, 0x3b, 0xdd, 0x69, 0x3f, 0x1d, 0xb2, 0xf6, 0xac, 0x30, 0xe1, 0x7d, 0x74, + 0x65, 0xde, 0xc4, 0x15, 0xcd, 0xc1, 0xd5, 0xa9, 0x63, 0x7e, 0x74, 0xdf, 0x07, 0x34, 0x07, 0xf9, + 0x4a, 0x45, 0xc5, 0x86, 0xb6, 0x53, 0xc7, 0xaa, 0xd6, 0xc4, 0x86, 0x66, 0x4f, 0xcd, 0x50, 0xe4, + 0x94, 0xd3, 0x6c, 0x61, 0x65, 0xb4, 0x52, 0x29, 0xd3, 0x8f, 0x45, 0xfa, 0x0d, 0x9d, 0x86, 0x71, + 0x73, 0xe7, 0xa5, 0x0a, 0xd3, 0x48, 0xd5, 0x6a, 0xe2, 0x5d, 0x7d, 0x7f, 0xea, 0x5e, 0x2a, 0xde, + 0x31, 0xf2, 0x81, 0xea, 0xe3, 0x26, 0x05, 0xa3, 0x07, 0x21, 0x5f, 0xb1, 0xf7, 0xb4, 0xa6, 0x45, + 0x4d, 0xb2, 0x6d, 0x69, 0x15, 0x3c, 0x75, 0x1f, 0x43, 0x65, 0xf0, 0x75, 0x01, 0x26, 0x33, 0xc2, + 0xbe, 0xae, 0xef, 0x3a, 0x82, 0xe3, 0x03, 0x6c, 0x46, 0x50, 0x18, 0xe7, 0x76, 0x0a, 0xf2, 0x44, + 0x12, 0x81, 0x8a, 0x4f, 0x51, 0xb4, 0x51, 0x6b, 0xcf, 0xf2, 0xd7, 0x7b, 0x0f, 0x8c, 0x10, 0x4c, + 0xaf, 0xd2, 0x07, 0x59, 0xe0, 0x66, 0xed, 0xf9, 0x6a, 0x7c, 0x02, 0x8e, 0x12, 0xa4, 0x06, 0x76, + 0xb4, 0xaa, 0xe6, 0x68, 0x3e, 0xec, 0x87, 0x29, 0x36, 0x11, 0xfb, 0x1a, 0xff, 0x18, 0x68, 0x67, + 0xb3, 0xb5, 0x73, 0xe0, 0x2a, 0xd6, 0x23, 0xac, 0x9d, 0x04, 0x26, 0x54, 0xeb, 0x8e, 0x05, 0xe7, + 0xf2, 0x3c, 0xe4, 0xfc, 0x7a, 0x8f, 0xb2, 0xc0, 0x34, 0x3f, 0x2f, 0x91, 0x20, 0x68, 0x61, 0x63, + 0x91, 0x84, 0x2f, 0x2f, 0x96, 0xf3, 0x09, 0x12, 0x46, 0xad, 0xae, 0x6c, 0x97, 0x55, 0xe5, 0xf2, + 0xfa, 0xf6, 0xca, 0x5a, 0x39, 0x9f, 0xf4, 0x05, 0xf6, 0xcf, 0xa4, 0x32, 0xf7, 0xe7, 0x1f, 0x90, + 0x3f, 0x9f, 0x80, 0xd1, 0xe0, 0x4a, 0x0d, 0xbd, 0x05, 0x8e, 0x89, 0xb4, 0x8a, 0x8d, 0x1d, 0xf5, + 0xba, 0xde, 0xa4, 0x13, 0xb2, 0xa1, 0x31, 0xe7, 0xe8, 0xea, 0xcf, 0x24, 0xc7, 0xda, 0xc2, 0xce, + 0xf3, 0x7a, 0x93, 0x4c, 0xb7, 0x86, 0xe6, 0xa0, 0x55, 0x98, 0x31, 0x4c, 0xd5, 0x76, 0x34, 0xa3, + 0xaa, 0x35, 0xab, 0xaa, 0x97, 0xd0, 0x52, 0xb5, 0x4a, 0x05, 0xdb, 0xb6, 0xc9, 0x1c, 0xa1, 0xcb, + 0xe5, 0xa4, 0x61, 0x6e, 0x71, 0x64, 0xcf, 0x43, 0x14, 0x39, 0x6a, 0x48, 0x7d, 0x93, 0x51, 0xea, + 0x7b, 0x02, 0xb2, 0x0d, 0xcd, 0x52, 0xb1, 0xe1, 0x34, 0x0f, 0x68, 0x7c, 0x9e, 0x51, 0x32, 0x0d, + 0xcd, 0x2a, 0x93, 0xf2, 0x37, 0x65, 0x99, 0xf4, 0x4c, 0x2a, 0x93, 0xc9, 0x67, 0x9f, 0x49, 0x65, + 0xb2, 0x79, 0x90, 0x5f, 0x4f, 0x42, 0xce, 0x1f, 0xaf, 0x93, 0xe5, 0x4f, 0x85, 0x7a, 0x2c, 0x89, + 0xda, 0xb4, 0x7b, 0xba, 0x46, 0xf7, 0x73, 0x0b, 0xc4, 0x95, 0xcd, 0x0f, 0xb2, 0xe0, 0x58, 0x61, + 0x94, 0x24, 0x8c, 0x20, 0xca, 0x86, 0x59, 0x30, 0x92, 0x51, 0x78, 0x09, 0x2d, 0xc1, 0xe0, 0x4b, + 0x36, 0xe5, 0x3d, 0x48, 0x79, 0xdf, 0xdb, 0x9d, 0xf7, 0x33, 0x5b, 0x94, 0x79, 0xf6, 0x99, 0x2d, + 0x75, 0x7d, 0x43, 0x59, 0x2b, 0xae, 0x2a, 0x9c, 0x1c, 0x1d, 0x87, 0x54, 0x5d, 0x7b, 0xf9, 0x20, + 0xe8, 0xf4, 0x28, 0xa8, 0xd7, 0x41, 0x38, 0x0e, 0xa9, 0xeb, 0x58, 0xbb, 0x1a, 0x74, 0x35, 0x14, + 0x74, 0x07, 0x27, 0xc3, 0x19, 0x48, 0x53, 0x79, 0x21, 0x00, 0x2e, 0xb1, 0xfc, 0x00, 0xca, 0x40, + 0x6a, 0x61, 0x43, 0x21, 0x13, 0x22, 0x0f, 0x39, 0x06, 0x55, 0x37, 0x57, 0xca, 0x0b, 0xe5, 0x7c, + 0x42, 0x3e, 0x07, 0x83, 0x4c, 0x08, 0x64, 0xb2, 0xb8, 0x62, 0xc8, 0x0f, 0xf0, 0x22, 0xe7, 0x21, + 0x89, 0xaf, 0x97, 0xd7, 0x4a, 0x65, 0x25, 0x9f, 0x08, 0x0e, 0x75, 0x2a, 0x9f, 0x96, 0x6d, 0xc8, + 0xf9, 0xe3, 0xf0, 0x6f, 0xce, 0x62, 0xfc, 0x33, 0x12, 0x0c, 0xfb, 0xe2, 0x6a, 0x12, 0x10, 0x69, + 0xf5, 0xba, 0x79, 0x5d, 0xd5, 0xea, 0xba, 0x66, 0x73, 0xd5, 0x00, 0x0a, 0x2a, 0x12, 0x48, 0xaf, + 0x43, 0xf7, 0x4d, 0x9a, 0x22, 0xe9, 0xfc, 0xa0, 0xfc, 0x31, 0x09, 0xf2, 0xe1, 0xc0, 0x36, 0xd4, + 0x4c, 0xe9, 0x5b, 0xd9, 0x4c, 0xf9, 0x47, 0x25, 0x18, 0x0d, 0x46, 0xb3, 0xa1, 0xe6, 0xdd, 0xfd, + 0x2d, 0x6d, 0xde, 0x1f, 0x24, 0x60, 0x24, 0x10, 0xc3, 0xf6, 0xda, 0xba, 0xf7, 0xc2, 0xb8, 0x5e, + 0xc5, 0x0d, 0xcb, 0x74, 0xb0, 0x51, 0x39, 0x50, 0xeb, 0xf8, 0x1a, 0xae, 0x4f, 0xc9, 0xd4, 0x68, + 0x9c, 0xe9, 0x1e, 0x25, 0xcf, 0xad, 0x78, 0x74, 0xab, 0x84, 0x6c, 0x7e, 0x62, 0x65, 0xb1, 0xbc, + 0xb6, 0xb9, 0xb1, 0x5d, 0x5e, 0x5f, 0x78, 0x87, 0x7a, 0x79, 0xfd, 0xd9, 0xf5, 0x8d, 0xe7, 0xd7, + 0x95, 0xbc, 0x1e, 0x42, 0xbb, 0x83, 0xd3, 0x7e, 0x13, 0xf2, 0xe1, 0x46, 0xa1, 0x63, 0xd0, 0xa9, + 0x59, 0xf9, 0x01, 0x34, 0x01, 0x63, 0xeb, 0x1b, 0xea, 0xd6, 0xca, 0x62, 0x59, 0x2d, 0x5f, 0xba, + 0x54, 0x5e, 0xd8, 0xde, 0x62, 0x79, 0x0f, 0x17, 0x7b, 0x3b, 0x30, 0xc1, 0xe5, 0x8f, 0x26, 0x61, + 0xa2, 0x43, 0x4b, 0x50, 0x91, 0xaf, 0x58, 0xd8, 0x22, 0xea, 0x91, 0x5e, 0x5a, 0x3f, 0x47, 0x62, + 0x86, 0x4d, 0xad, 0xe9, 0xf0, 0x05, 0xce, 0x83, 0x40, 0xa4, 0x64, 0x38, 0xfa, 0xae, 0x8e, 0x9b, + 0x3c, 0x9f, 0xc4, 0x96, 0x31, 0x63, 0x1e, 0x9c, 0xa5, 0x94, 0x1e, 0x06, 0x64, 0x99, 0xb6, 0xee, + 0xe8, 0xd7, 0xb0, 0xaa, 0x1b, 0x22, 0xf9, 0x44, 0x96, 0x35, 0x29, 0x25, 0x2f, 0xbe, 0xac, 0x18, + 0x8e, 0x8b, 0x6d, 0xe0, 0x9a, 0x16, 0xc2, 0x26, 0xc6, 0x3c, 0xa9, 0xe4, 0xc5, 0x17, 0x17, 0xfb, + 0x6e, 0xc8, 0x55, 0xcd, 0x16, 0x89, 0xf5, 0x18, 0x1e, 0xf1, 0x1d, 0x92, 0x32, 0xcc, 0x60, 0x2e, + 0x0a, 0x8f, 0xe2, 0xbd, 0xac, 0x57, 0x4e, 0x19, 0x66, 0x30, 0x86, 0xf2, 0x00, 0x8c, 0x69, 0xb5, + 0x5a, 0x93, 0x30, 0x17, 0x8c, 0xd8, 0xba, 0x64, 0xd4, 0x05, 0x53, 0xc4, 0xc2, 0x33, 0x90, 0x11, + 0x72, 0x20, 0xae, 0x9a, 0x48, 0x42, 0xb5, 0xd8, 0x62, 0x3b, 0x71, 0x2a, 0xab, 0x64, 0x0c, 0xf1, + 0xf1, 0x6e, 0xc8, 0xe9, 0xb6, 0xea, 0x25, 0xf1, 0x13, 0xb3, 0x89, 0x53, 0x19, 0x65, 0x58, 0xb7, + 0xdd, 0x04, 0xa8, 0xfc, 0xc9, 0x04, 0x8c, 0x06, 0x37, 0x21, 0xd0, 0x22, 0x64, 0xea, 0x66, 0x45, + 0xa3, 0xaa, 0xc5, 0x76, 0xc0, 0x4e, 0xc5, 0xec, 0x5b, 0xcc, 0xad, 0x72, 0x7c, 0xc5, 0xa5, 0x2c, + 0xfc, 0x2b, 0x09, 0x32, 0x02, 0x8c, 0x8e, 0x42, 0xca, 0xd2, 0x9c, 0x3d, 0xca, 0x2e, 0x5d, 0x4a, + 0xe4, 0x25, 0x85, 0x96, 0x09, 0xdc, 0xb6, 0x34, 0x83, 0xaa, 0x00, 0x87, 0x93, 0x32, 0x19, 0xd7, + 0x3a, 0xd6, 0xaa, 0x74, 0xd1, 0x63, 0x36, 0x1a, 0xd8, 0x70, 0x6c, 0x31, 0xae, 0x1c, 0xbe, 0xc0, + 0xc1, 0xe8, 0x21, 0x18, 0x77, 0x9a, 0x9a, 0x5e, 0x0f, 0xe0, 0xa6, 0x28, 0x6e, 0x5e, 0x7c, 0x70, + 0x91, 0xe7, 0xe1, 0xb8, 0xe0, 0x5b, 0xc5, 0x8e, 0x56, 0xd9, 0xc3, 0x55, 0x8f, 0x68, 0x90, 0x26, + 0x37, 0x8e, 0x71, 0x84, 0x45, 0xfe, 0x5d, 0xd0, 0xca, 0x9f, 0x97, 0x60, 0x5c, 0x2c, 0xd3, 0xaa, + 0xae, 0xb0, 0xd6, 0x00, 0x34, 0xc3, 0x30, 0x1d, 0xbf, 0xb8, 0xda, 0x55, 0xb9, 0x8d, 0x6e, 0xae, + 0xe8, 0x12, 0x29, 0x3e, 0x06, 0x85, 0x06, 0x80, 0xf7, 0x25, 0x52, 0x6c, 0x33, 0x30, 0xcc, 0x77, + 0x98, 0xe8, 0x36, 0x25, 0x5b, 0xd8, 0x03, 0x03, 0x91, 0xf5, 0x1c, 0x9a, 0x84, 0xf4, 0x0e, 0xae, + 0xe9, 0x06, 0xcf, 0x1b, 0xb3, 0x82, 0x48, 0xbf, 0xa4, 0xdc, 0xf4, 0x4b, 0xe9, 0xaf, 0xc0, 0x44, + 0xc5, 0x6c, 0x84, 0x9b, 0x5b, 0xca, 0x87, 0x92, 0x0b, 0xf6, 0xb2, 0xf4, 0xe2, 0x23, 0x1c, 0xa9, + 0x66, 0xd6, 0x35, 0xa3, 0x36, 0x67, 0x36, 0x6b, 0xde, 0x36, 0x2b, 0x89, 0x78, 0x6c, 0xdf, 0x66, + 0xab, 0xb5, 0xf3, 0xa7, 0x92, 0xf4, 0x63, 0x89, 0xe4, 0xd2, 0x66, 0xe9, 0x53, 0x89, 0xc2, 0x12, + 0x23, 0xdc, 0x14, 0xc2, 0x50, 0xf0, 0x6e, 0x1d, 0x57, 0x48, 0x07, 0xe1, 0x2b, 0x0f, 0xc1, 0x64, + 0xcd, 0xac, 0x99, 0x94, 0xd3, 0x19, 0xf2, 0x1f, 0xdf, 0xa7, 0xcd, 0xba, 0xd0, 0x42, 0xec, 0xa6, + 0xee, 0xfc, 0x3a, 0x4c, 0x70, 0x64, 0x95, 0x6e, 0x14, 0xb1, 0x65, 0x0c, 0xea, 0x9a, 0x43, 0x9b, + 0xfa, 0xb9, 0x2f, 0x51, 0xf7, 0xad, 0x8c, 0x73, 0x52, 0xf2, 0x8d, 0xad, 0x74, 0xe6, 0x15, 0x38, + 0x12, 0xe0, 0xc7, 0x26, 0x29, 0x6e, 0xc6, 0x70, 0xfc, 0x35, 0xce, 0x71, 0xc2, 0xc7, 0x71, 0x8b, + 0x93, 0xce, 0x2f, 0xc0, 0x48, 0x3f, 0xbc, 0xfe, 0x05, 0xe7, 0x95, 0xc3, 0x7e, 0x26, 0x4b, 0x30, + 0x46, 0x99, 0x54, 0x5a, 0xb6, 0x63, 0x36, 0xa8, 0x05, 0xec, 0xce, 0xe6, 0xd7, 0xbf, 0xc4, 0x66, + 0xcd, 0x28, 0x21, 0x5b, 0x70, 0xa9, 0xe6, 0xe7, 0x81, 0xee, 0x8d, 0x55, 0x71, 0xa5, 0x1e, 0xc3, + 0xe1, 0x37, 0x78, 0x43, 0x5c, 0xfc, 0xf9, 0x2b, 0x30, 0x49, 0xfe, 0xa7, 0x06, 0xca, 0xdf, 0x92, + 0xf8, 0x84, 0xdb, 0xd4, 0xe7, 0xdf, 0xcf, 0x26, 0xe6, 0x84, 0xcb, 0xc0, 0xd7, 0x26, 0xdf, 0x28, + 0xd6, 0xb0, 0xe3, 0xe0, 0xa6, 0xad, 0x6a, 0xf5, 0x4e, 0xcd, 0xf3, 0x65, 0x2c, 0xa6, 0x7e, 0xf8, + 0xab, 0xc1, 0x51, 0x5c, 0x62, 0x94, 0xc5, 0x7a, 0x7d, 0xfe, 0x32, 0x1c, 0xeb, 0xa0, 0x15, 0x3d, + 0xf0, 0xfc, 0x28, 0xe7, 0x39, 0xd9, 0xa6, 0x19, 0x84, 0xed, 0x26, 0x08, 0xb8, 0x3b, 0x96, 0x3d, + 0xf0, 0xfc, 0x11, 0xce, 0x13, 0x71, 0x5a, 0x31, 0xa4, 0x84, 0xe3, 0x33, 0x30, 0x7e, 0x0d, 0x37, + 0x77, 0x4c, 0x9b, 0x67, 0x89, 0x7a, 0x60, 0xf7, 0xa3, 0x9c, 0xdd, 0x18, 0x27, 0xa4, 0x69, 0x23, + 0xc2, 0xeb, 0x02, 0x64, 0x76, 0xb5, 0x0a, 0xee, 0x81, 0xc5, 0x4d, 0xce, 0x62, 0x88, 0xe0, 0x13, + 0xd2, 0x22, 0xe4, 0x6a, 0x26, 0xf7, 0x51, 0xf1, 0xe4, 0x1f, 0xe3, 0xe4, 0xc3, 0x82, 0x86, 0xb3, + 0xb0, 0x4c, 0xab, 0x55, 0x27, 0x0e, 0x2c, 0x9e, 0xc5, 0xdf, 0x16, 0x2c, 0x04, 0x0d, 0x67, 0xd1, + 0x87, 0x58, 0x5f, 0x13, 0x2c, 0x6c, 0x9f, 0x3c, 0x9f, 0x86, 0x61, 0xd3, 0xa8, 0x1f, 0x98, 0x46, + 0x2f, 0x8d, 0xf8, 0x38, 0xe7, 0x00, 0x9c, 0x84, 0x30, 0xb8, 0x08, 0xd9, 0x5e, 0x07, 0xe2, 0xef, + 0x7c, 0x55, 0x4c, 0x0f, 0x31, 0x02, 0x4b, 0x30, 0x26, 0x0c, 0x94, 0x6e, 0x1a, 0x3d, 0xb0, 0xf8, + 0xbb, 0x9c, 0xc5, 0xa8, 0x8f, 0x8c, 0x77, 0xc3, 0xc1, 0xb6, 0x53, 0xc3, 0xbd, 0x30, 0xf9, 0xa4, + 0xe8, 0x06, 0x27, 0xe1, 0xa2, 0xdc, 0xc1, 0x46, 0x65, 0xaf, 0x37, 0x0e, 0x3f, 0x21, 0x44, 0x29, + 0x68, 0x08, 0x8b, 0x05, 0x18, 0x69, 0x68, 0x4d, 0x7b, 0x4f, 0xab, 0xf7, 0x34, 0x1c, 0x3f, 0xc9, + 0x79, 0xe4, 0x5c, 0x22, 0x2e, 0x91, 0x96, 0xd1, 0x0f, 0x9b, 0x4f, 0x09, 0x89, 0xf8, 0xc8, 0xf8, + 0xd4, 0xb3, 0x1d, 0x9a, 0x52, 0xeb, 0x87, 0xdb, 0x4f, 0x89, 0xa9, 0xc7, 0x68, 0xd7, 0xfc, 0x1c, + 0x2f, 0x42, 0xd6, 0xd6, 0x5f, 0xee, 0x89, 0xcd, 0x4f, 0x8b, 0x91, 0xa6, 0x04, 0x84, 0xf8, 0x1d, + 0x70, 0xbc, 0xa3, 0x9b, 0xe8, 0x81, 0xd9, 0xdf, 0xe3, 0xcc, 0x8e, 0x76, 0x70, 0x15, 0xdc, 0x24, + 0xf4, 0xcb, 0xf2, 0xef, 0x0b, 0x93, 0x80, 0x43, 0xbc, 0x36, 0xc9, 0xaa, 0xc1, 0xd6, 0x76, 0xfb, + 0x93, 0xda, 0xcf, 0x08, 0xa9, 0x31, 0xda, 0x80, 0xd4, 0xb6, 0xe1, 0x28, 0xe7, 0xd8, 0xdf, 0xb8, + 0xfe, 0xac, 0x30, 0xac, 0x8c, 0xfa, 0x72, 0x70, 0x74, 0xdf, 0x09, 0x05, 0x57, 0x9c, 0x22, 0x3c, + 0xb5, 0xd5, 0x86, 0x66, 0xf5, 0xc0, 0xf9, 0xe7, 0x38, 0x67, 0x61, 0xf1, 0xdd, 0xf8, 0xd6, 0x5e, + 0xd3, 0x2c, 0xc2, 0xfc, 0x05, 0x98, 0x12, 0xcc, 0x5b, 0x46, 0x13, 0x57, 0xcc, 0x9a, 0xa1, 0xbf, + 0x8c, 0xab, 0x3d, 0xb0, 0xfe, 0xf9, 0xd0, 0x50, 0x5d, 0xf6, 0x91, 0x13, 0xce, 0x2b, 0x90, 0x77, + 0x63, 0x15, 0x55, 0x6f, 0x58, 0x66, 0xd3, 0x89, 0xe1, 0xf8, 0x0b, 0x62, 0xa4, 0x5c, 0xba, 0x15, + 0x4a, 0x36, 0x5f, 0x06, 0xb6, 0xcf, 0xdc, 0xab, 0x4a, 0x7e, 0x9a, 0x33, 0x1a, 0xf1, 0xa8, 0xb8, + 0xe1, 0xa8, 0x98, 0x0d, 0x4b, 0x6b, 0xf6, 0x62, 0xff, 0xfe, 0x81, 0x30, 0x1c, 0x9c, 0x84, 0x1b, + 0x0e, 0x12, 0xd1, 0x11, 0x6f, 0xdf, 0x03, 0x87, 0x5f, 0x14, 0x86, 0x43, 0xd0, 0x70, 0x16, 0x22, + 0x60, 0xe8, 0x81, 0xc5, 0x2f, 0x09, 0x16, 0x82, 0x86, 0xb0, 0x78, 0xce, 0x73, 0xb4, 0x4d, 0x5c, + 0xd3, 0x6d, 0xa7, 0xc9, 0x82, 0xe2, 0xee, 0xac, 0x7e, 0xf9, 0xab, 0xc1, 0x20, 0x4c, 0xf1, 0x91, + 0x12, 0x4b, 0xc4, 0x93, 0xac, 0x74, 0xcd, 0x14, 0xdf, 0xb0, 0x5f, 0x11, 0x96, 0xc8, 0x47, 0x46, + 0xda, 0xe6, 0x8b, 0x10, 0x89, 0xd8, 0x2b, 0x64, 0xa5, 0xd0, 0x03, 0xbb, 0x7f, 0x18, 0x6a, 0xdc, + 0x96, 0xa0, 0x25, 0x3c, 0x7d, 0xf1, 0x4f, 0xcb, 0xb8, 0x8a, 0x0f, 0x7a, 0xd2, 0xce, 0x7f, 0x14, + 0x8a, 0x7f, 0x2e, 0x33, 0x4a, 0x66, 0x43, 0xc6, 0x42, 0xf1, 0x14, 0x8a, 0x3b, 0x55, 0x34, 0xf5, + 0x3d, 0x5f, 0xe7, 0xfd, 0x0d, 0x86, 0x53, 0xf3, 0xab, 0x44, 0xc9, 0x83, 0x41, 0x4f, 0x3c, 0xb3, + 0xf7, 0x7f, 0xdd, 0xd5, 0xf3, 0x40, 0xcc, 0x33, 0x7f, 0x09, 0x46, 0x02, 0x01, 0x4f, 0x3c, 0xab, + 0x0f, 0x70, 0x56, 0x39, 0x7f, 0xbc, 0x33, 0x7f, 0x0e, 0x52, 0x24, 0x78, 0x89, 0x27, 0xff, 0x5e, + 0x4e, 0x4e, 0xd1, 0xe7, 0xdf, 0x0a, 0x19, 0x11, 0xb4, 0xc4, 0x93, 0x7e, 0x1f, 0x27, 0x75, 0x49, + 0x08, 0xb9, 0x08, 0x58, 0xe2, 0xc9, 0xff, 0xaa, 0x20, 0x17, 0x24, 0x84, 0xbc, 0x77, 0x11, 0x7e, + 0xe6, 0xfb, 0x53, 0xdc, 0xe9, 0x08, 0xd9, 0x5d, 0x84, 0x21, 0x1e, 0xa9, 0xc4, 0x53, 0x7f, 0x88, + 0x57, 0x2e, 0x28, 0xe6, 0x9f, 0x84, 0x74, 0x8f, 0x02, 0xff, 0x6b, 0x9c, 0x94, 0xe1, 0xcf, 0x2f, + 0xc0, 0xb0, 0x2f, 0x3a, 0x89, 0x27, 0xff, 0xeb, 0x9c, 0xdc, 0x4f, 0x45, 0x9a, 0xce, 0xa3, 0x93, + 0x78, 0x06, 0x3f, 0x20, 0x9a, 0xce, 0x29, 0x88, 0xd8, 0x44, 0x60, 0x12, 0x4f, 0xfd, 0x83, 0x42, + 0xea, 0x82, 0x64, 0xfe, 0x69, 0xc8, 0xba, 0xce, 0x26, 0x9e, 0xfe, 0xc3, 0x9c, 0xde, 0xa3, 0x21, + 0x12, 0xf0, 0x39, 0xbb, 0x78, 0x16, 0x7f, 0x43, 0x48, 0xc0, 0x47, 0x45, 0xa6, 0x51, 0x38, 0x80, + 0x89, 0xe7, 0xf4, 0x11, 0x31, 0x8d, 0x42, 0xf1, 0x0b, 0x19, 0x4d, 0x6a, 0xf3, 0xe3, 0x59, 0xfc, + 0x4d, 0x31, 0x9a, 0x14, 0x9f, 0x34, 0x23, 0x1c, 0x11, 0xc4, 0xf3, 0xf8, 0x21, 0xd1, 0x8c, 0x50, + 0x40, 0x30, 0xbf, 0x09, 0xa8, 0x3d, 0x1a, 0x88, 0xe7, 0xf7, 0x2a, 0xe7, 0x37, 0xde, 0x16, 0x0c, + 0xcc, 0x3f, 0x0f, 0x47, 0x3b, 0x47, 0x02, 0xf1, 0x5c, 0x7f, 0xf8, 0xeb, 0xa1, 0xb5, 0x9b, 0x3f, + 0x10, 0x98, 0xdf, 0xf6, 0x5c, 0x8a, 0x3f, 0x0a, 0x88, 0x67, 0xfb, 0xd1, 0xaf, 0x07, 0x0d, 0xb7, + 0x3f, 0x08, 0x98, 0x2f, 0x02, 0x78, 0x0e, 0x38, 0x9e, 0xd7, 0x8f, 0x72, 0x5e, 0x3e, 0x22, 0x32, + 0x35, 0xb8, 0xff, 0x8d, 0xa7, 0xbf, 0x29, 0xa6, 0x06, 0xa7, 0x20, 0x53, 0x43, 0xb8, 0xde, 0x78, + 0xea, 0x8f, 0x89, 0xa9, 0x21, 0x48, 0x88, 0x66, 0xfb, 0xbc, 0x5b, 0x3c, 0x87, 0x8f, 0x0b, 0xcd, + 0xf6, 0x51, 0xcd, 0xaf, 0xc3, 0x78, 0x9b, 0x43, 0x8c, 0x67, 0xf5, 0x63, 0x9c, 0x55, 0x3e, 0xec, + 0x0f, 0xfd, 0xce, 0x8b, 0x3b, 0xc3, 0x78, 0x6e, 0x9f, 0x08, 0x39, 0x2f, 0xee, 0x0b, 0xe7, 0x2f, + 0x42, 0xc6, 0x68, 0xd5, 0xeb, 0x64, 0xf2, 0xa0, 0xee, 0x27, 0x01, 0xa7, 0xfe, 0xeb, 0x37, 0xb8, + 0x74, 0x04, 0xc1, 0xfc, 0x39, 0x48, 0xe3, 0xc6, 0x0e, 0xae, 0xc6, 0x51, 0x7e, 0xe5, 0x1b, 0xc2, + 0x60, 0x12, 0xec, 0xf9, 0xa7, 0x01, 0x58, 0x6a, 0x84, 0x6e, 0x06, 0xc6, 0xd0, 0xfe, 0xb7, 0x6f, + 0xf0, 0xa3, 0x37, 0x1e, 0x89, 0xc7, 0x80, 0x1d, 0xe4, 0xe9, 0xce, 0xe0, 0xab, 0x41, 0x06, 0x74, + 0x44, 0x2e, 0xc0, 0xd0, 0x4b, 0xb6, 0x69, 0x38, 0x5a, 0x2d, 0x8e, 0xfa, 0xbf, 0x73, 0x6a, 0x81, + 0x4f, 0x04, 0xd6, 0x30, 0x9b, 0xd8, 0xd1, 0x6a, 0x76, 0x1c, 0xed, 0x1f, 0x72, 0x5a, 0x97, 0x80, + 0x10, 0x57, 0x34, 0xdb, 0xe9, 0xa5, 0xdf, 0x7f, 0x24, 0x88, 0x05, 0x01, 0x69, 0x34, 0xf9, 0xff, + 0x2a, 0x3e, 0x88, 0xa3, 0xfd, 0x9a, 0x68, 0x34, 0xc7, 0x9f, 0x7f, 0x2b, 0x64, 0xc9, 0xbf, 0xec, + 0x3c, 0x5d, 0x0c, 0xf1, 0x1f, 0x73, 0x62, 0x8f, 0x82, 0xd4, 0x6c, 0x3b, 0x55, 0x47, 0x8f, 0x17, + 0xf6, 0x1b, 0x7c, 0xa4, 0x05, 0xfe, 0x7c, 0x11, 0x86, 0x6d, 0xa7, 0x5a, 0x6d, 0xf1, 0xf8, 0x34, + 0x86, 0xfc, 0x7f, 0x7c, 0xc3, 0x4d, 0x59, 0xb8, 0x34, 0x64, 0xb4, 0xaf, 0x5f, 0x75, 0x2c, 0x93, + 0x6e, 0x78, 0xc4, 0x71, 0xf8, 0x3a, 0xe7, 0xe0, 0x23, 0x99, 0x5f, 0x80, 0x1c, 0xe9, 0x4b, 0x13, + 0x5b, 0x98, 0xee, 0x4e, 0xc5, 0xb0, 0xf8, 0x9f, 0x5c, 0x00, 0x01, 0xa2, 0xd2, 0xbb, 0x7f, 0xe3, + 0xf5, 0x69, 0xe9, 0x73, 0xaf, 0x4f, 0x4b, 0x7f, 0xf0, 0xfa, 0xb4, 0xf4, 0x83, 0x5f, 0x9c, 0x1e, + 0xf8, 0xdc, 0x17, 0xa7, 0x07, 0x7e, 0xf7, 0x8b, 0xd3, 0x03, 0x9d, 0xb3, 0xc4, 0xb0, 0x64, 0x2e, + 0x99, 0x2c, 0x3f, 0xfc, 0xa2, 0x5c, 0xd3, 0x9d, 0xbd, 0xd6, 0xce, 0x5c, 0xc5, 0x6c, 0xd0, 0x34, + 0xae, 0x97, 0xad, 0x75, 0x17, 0x39, 0xf0, 0xbe, 0x24, 0x1c, 0xaf, 0x98, 0x76, 0xc3, 0xb4, 0x55, + 0x96, 0xef, 0x65, 0x05, 0x9e, 0xf1, 0xcd, 0xf9, 0x3f, 0xf5, 0x90, 0xf4, 0x5d, 0x86, 0x51, 0xda, + 0x75, 0x9a, 0xee, 0xa2, 0xda, 0x16, 0x6b, 0x20, 0x7e, 0xf3, 0xdf, 0xa6, 0x69, 0xaf, 0x47, 0x5c, + 0x42, 0xba, 0x7b, 0xbf, 0x0d, 0x93, 0x7a, 0xc3, 0xaa, 0x63, 0x9a, 0xe6, 0x57, 0xdd, 0x6f, 0xf1, + 0xfc, 0x3e, 0xcb, 0xf9, 0x4d, 0x78, 0xe4, 0x2b, 0x82, 0x7a, 0x7e, 0x15, 0xc6, 0xb5, 0x4a, 0x05, + 0x5b, 0x01, 0x96, 0x31, 0xc3, 0x22, 0x1a, 0x98, 0xe7, 0x94, 0x2e, 0xb7, 0xd2, 0xd3, 0x51, 0x43, + 0xf3, 0xe2, 0x7d, 0x3e, 0xc9, 0x37, 0x71, 0x0d, 0x1b, 0x8f, 0x18, 0xd8, 0xb9, 0x6e, 0x36, 0xaf, + 0x72, 0xf1, 0x3e, 0xc2, 0xaa, 0x1a, 0x64, 0x27, 0x98, 0xe1, 0x03, 0x49, 0x98, 0x66, 0x1f, 0xce, + 0xec, 0x68, 0x36, 0x3e, 0x73, 0xed, 0xb1, 0x1d, 0xec, 0x68, 0x8f, 0x9d, 0xa9, 0x98, 0xba, 0xc1, + 0x47, 0x62, 0x82, 0x8f, 0x0b, 0xf9, 0x3e, 0xc7, 0xbf, 0x17, 0x3a, 0xa6, 0xe9, 0xe5, 0x25, 0x48, + 0x2d, 0x98, 0xba, 0x81, 0x26, 0x21, 0x5d, 0xc5, 0x86, 0xd9, 0xe0, 0x67, 0xee, 0x58, 0x01, 0xdd, + 0x03, 0x83, 0x5a, 0xc3, 0x6c, 0x19, 0x0e, 0xdb, 0xa1, 0x28, 0x0d, 0xff, 0xc6, 0xad, 0x99, 0x81, + 0xdf, 0xbb, 0x35, 0x93, 0x5c, 0x31, 0x1c, 0x85, 0x7f, 0x9a, 0x4f, 0x7d, 0xf9, 0xb5, 0x19, 0x49, + 0x7e, 0x06, 0x86, 0x16, 0x71, 0xe5, 0x30, 0xbc, 0x16, 0x71, 0x25, 0xc4, 0xeb, 0x41, 0xc8, 0xac, + 0x18, 0x0e, 0x3b, 0x15, 0x79, 0x17, 0x24, 0x75, 0x83, 0x1d, 0xb4, 0x09, 0xd5, 0x4f, 0xe0, 0x04, + 0x75, 0x11, 0x57, 0x5c, 0xd4, 0x2a, 0xae, 0x84, 0x51, 0x09, 0x7b, 0x02, 0x2f, 0x2d, 0xfe, 0xee, + 0x7f, 0x9c, 0x1e, 0x78, 0xe5, 0xf5, 0xe9, 0x81, 0xc8, 0x91, 0xf0, 0xcf, 0x01, 0x2e, 0x62, 0x3e, + 0x04, 0x76, 0xf5, 0x2a, 0xdb, 0x23, 0x71, 0x87, 0xe1, 0xb7, 0x07, 0x41, 0xe6, 0x38, 0xb6, 0xa3, + 0x5d, 0xd5, 0x8d, 0x9a, 0x3b, 0x12, 0x5a, 0xcb, 0xd9, 0x7b, 0x99, 0x0f, 0xc5, 0x51, 0x3e, 0x14, + 0x1c, 0xa7, 0xfb, 0x68, 0x14, 0xa2, 0x67, 0x57, 0x21, 0x66, 0xcc, 0xe5, 0x7f, 0x99, 0x04, 0xb4, + 0xe5, 0x68, 0x57, 0x71, 0xb1, 0xe5, 0xec, 0x99, 0x4d, 0xfd, 0x65, 0x66, 0xcb, 0x30, 0x40, 0x43, + 0xdb, 0x57, 0x1d, 0xf3, 0x2a, 0x36, 0x6c, 0x2a, 0x9a, 0xe1, 0xb3, 0xc7, 0xe7, 0x3a, 0xe8, 0xc7, + 0x1c, 0x19, 0xba, 0xd2, 0x43, 0x9f, 0xfa, 0xc2, 0xcc, 0x03, 0xf1, 0x52, 0xa0, 0xc8, 0x24, 0xb8, + 0xde, 0xdf, 0xa6, 0x8c, 0xd1, 0x15, 0x60, 0x87, 0x2c, 0xd4, 0xba, 0x6e, 0x3b, 0xfc, 0x9c, 0xf6, + 0xb9, 0xb9, 0xce, 0x7d, 0x9f, 0x6b, 0x6f, 0xe6, 0xdc, 0x15, 0xad, 0xae, 0x57, 0x35, 0xc7, 0x6c, + 0xda, 0xcb, 0x03, 0x4a, 0x96, 0xb2, 0x5a, 0xd5, 0x6d, 0x07, 0x6d, 0x43, 0xb6, 0x8a, 0x8d, 0x03, + 0xc6, 0x36, 0xf9, 0xe6, 0xd8, 0x66, 0x08, 0x27, 0xca, 0xf5, 0x05, 0x40, 0x9a, 0x1f, 0x4f, 0x5c, + 0x4c, 0x62, 0xe7, 0x2b, 0x23, 0xd8, 0x07, 0x38, 0xd3, 0x7b, 0x14, 0xe3, 0x5a, 0x18, 0x54, 0xb8, + 0x1f, 0xc0, 0xab, 0x13, 0x4d, 0xc1, 0x90, 0x56, 0xad, 0x36, 0xb1, 0x6d, 0xd3, 0x0d, 0xc0, 0xac, + 0x22, 0x8a, 0xf3, 0xe3, 0xff, 0xfa, 0xd3, 0x8f, 0x8c, 0x04, 0x38, 0x96, 0x72, 0x00, 0xd7, 0x5c, + 0xd2, 0xd3, 0x1f, 0x93, 0x60, 0xbc, 0xad, 0x46, 0x24, 0xc3, 0x74, 0xf1, 0xf2, 0xf6, 0xf2, 0x86, + 0xb2, 0xf2, 0x62, 0x71, 0x7b, 0x65, 0x63, 0x5d, 0x65, 0x47, 0xfe, 0xd7, 0xb7, 0x36, 0xcb, 0x0b, + 0x2b, 0x97, 0x56, 0xca, 0x8b, 0xf9, 0x01, 0x34, 0x03, 0x27, 0x3a, 0xe0, 0x2c, 0x96, 0x57, 0xcb, + 0x4b, 0xc5, 0xed, 0x72, 0x5e, 0x42, 0x77, 0xc3, 0x5d, 0x1d, 0x99, 0xb8, 0x28, 0x89, 0x08, 0x14, + 0xa5, 0xec, 0xa2, 0x24, 0x4b, 0x97, 0x22, 0x67, 0xd1, 0xc3, 0x5d, 0xf5, 0x67, 0xdf, 0x9d, 0x2e, + 0xc1, 0xf9, 0xf4, 0x3d, 0x09, 0x38, 0x1e, 0x76, 0x19, 0x9a, 0x71, 0x10, 0x71, 0xeb, 0x33, 0xc2, + 0x9a, 0x2d, 0x43, 0xb2, 0x68, 0x1c, 0xa0, 0xe3, 0x2c, 0x9e, 0x56, 0x5b, 0xcd, 0x3a, 0xb7, 0x41, + 0x43, 0xa4, 0x7c, 0xb9, 0x59, 0x27, 0xb6, 0x49, 0x1c, 0xf4, 0x97, 0x4e, 0xe5, 0xf8, 0xe9, 0xfd, + 0xf9, 0xfc, 0xab, 0xaf, 0xcd, 0x0c, 0xfc, 0xec, 0x6b, 0x33, 0x03, 0x5f, 0xfb, 0xf8, 0xcc, 0xc0, + 0x2b, 0xbf, 0x3f, 0x3b, 0x50, 0xba, 0x1a, 0xee, 0xde, 0x67, 0x62, 0xbd, 0x69, 0xa6, 0x68, 0x1c, + 0x50, 0x43, 0xb4, 0x29, 0xbd, 0x98, 0xa6, 0x9d, 0x13, 0x1b, 0xa8, 0xd3, 0xe1, 0x0d, 0xd4, 0xe7, + 0x71, 0xbd, 0xfe, 0xac, 0x61, 0x5e, 0xa7, 0xa3, 0xea, 0xc9, 0xe0, 0x23, 0x09, 0x98, 0x6e, 0x73, + 0x9b, 0x3c, 0xc2, 0x88, 0xba, 0xfe, 0x3a, 0x0f, 0x99, 0x45, 0x11, 0xb8, 0x4c, 0xc1, 0x90, 0x8d, + 0x2b, 0xa6, 0x51, 0x65, 0x33, 0x3d, 0xa9, 0x88, 0x22, 0xe9, 0xb6, 0xa1, 0x19, 0xa6, 0xcd, 0xcf, + 0xdc, 0xb3, 0x42, 0xe9, 0x47, 0xa4, 0xfe, 0xe2, 0x85, 0x11, 0x51, 0x93, 0xe8, 0xe6, 0x63, 0xb1, + 0x5b, 0xca, 0x57, 0x49, 0x2f, 0xdd, 0x4e, 0x04, 0xb6, 0x95, 0x7b, 0x95, 0xca, 0x0f, 0x25, 0x60, + 0x26, 0x2c, 0x15, 0x12, 0xb6, 0xd9, 0x8e, 0xd6, 0xb0, 0xa2, 0xc4, 0x72, 0x11, 0xb2, 0xdb, 0x02, + 0xa7, 0x6f, 0xb9, 0xdc, 0xec, 0x53, 0x2e, 0xa3, 0x6e, 0x55, 0x42, 0x30, 0x67, 0x7b, 0x14, 0x8c, + 0xdb, 0x8f, 0x43, 0x49, 0xe6, 0x53, 0x29, 0xb8, 0x8b, 0x5e, 0xca, 0x6a, 0x36, 0x74, 0xc3, 0x39, + 0x53, 0x69, 0x1e, 0x58, 0x0e, 0x0d, 0xdc, 0xcc, 0x5d, 0x2e, 0x97, 0x71, 0xef, 0xf3, 0x1c, 0xfb, + 0x1c, 0x31, 0x73, 0x76, 0x21, 0xbd, 0x49, 0xe8, 0x88, 0x44, 0x1c, 0xd3, 0xd1, 0xea, 0x5c, 0x52, + 0xac, 0x40, 0xa0, 0xec, 0x22, 0x57, 0x82, 0x41, 0x75, 0x71, 0x87, 0xab, 0x8e, 0xb5, 0x5d, 0x76, + 0x1e, 0x3e, 0x49, 0x27, 0x54, 0x86, 0x00, 0xe8, 0xd1, 0xf7, 0x49, 0x48, 0x6b, 0x2d, 0x76, 0x94, + 0x23, 0x49, 0x66, 0x1a, 0x2d, 0xc8, 0xcf, 0xc2, 0x10, 0xdf, 0x50, 0x46, 0x79, 0x48, 0x5e, 0xc5, + 0x07, 0xb4, 0x9e, 0x9c, 0x42, 0xfe, 0x45, 0x73, 0x90, 0xa6, 0x8d, 0xe7, 0x0e, 0x64, 0x6a, 0xae, + 0xad, 0xf5, 0x73, 0xb4, 0x91, 0x0a, 0x43, 0x93, 0x9f, 0x81, 0xcc, 0xa2, 0xd9, 0xd0, 0x0d, 0x33, + 0xc8, 0x2d, 0xcb, 0xb8, 0xd1, 0x36, 0x5b, 0x2d, 0x1e, 0x6f, 0x28, 0xac, 0x80, 0x8e, 0xc2, 0x20, + 0xbb, 0x1f, 0xc1, 0x8f, 0xa3, 0xf0, 0x92, 0xbc, 0x00, 0x43, 0x94, 0xf7, 0x86, 0x85, 0x10, 0xbf, + 0x59, 0xc7, 0x2f, 0x62, 0xd0, 0xd0, 0x94, 0xb3, 0x4f, 0x78, 0x8d, 0x45, 0x90, 0xaa, 0x6a, 0x8e, + 0xc6, 0xfb, 0x4d, 0xff, 0x97, 0xdf, 0x06, 0x19, 0xce, 0xc4, 0x46, 0x67, 0x21, 0x69, 0x5a, 0x36, + 0x3f, 0x50, 0x52, 0x88, 0xea, 0xca, 0x86, 0x55, 0x4a, 0x91, 0x48, 0x45, 0x21, 0xc8, 0x25, 0x25, + 0xd2, 0xa8, 0x3e, 0xe5, 0x33, 0xaa, 0xbe, 0x21, 0xf7, 0xfd, 0xcb, 0x86, 0xb4, 0x4d, 0x1d, 0x5c, + 0x65, 0xf9, 0x78, 0x02, 0xa6, 0x7d, 0x5f, 0xaf, 0xe1, 0xa6, 0xad, 0x9b, 0x06, 0xf7, 0xe7, 0x4c, + 0x5b, 0x90, 0xaf, 0x91, 0xfc, 0x7b, 0x84, 0xba, 0xbc, 0x15, 0x92, 0x45, 0xcb, 0x42, 0x05, 0xc8, + 0xd0, 0x72, 0xc5, 0x64, 0xfa, 0x92, 0x52, 0xdc, 0x32, 0xf9, 0x66, 0x9b, 0xbb, 0xce, 0x75, 0xad, + 0xe9, 0x5e, 0x21, 0x14, 0x65, 0xf9, 0x02, 0x64, 0x17, 0x4c, 0xc3, 0xc6, 0x86, 0xdd, 0xa2, 0x73, + 0x70, 0xa7, 0x6e, 0x56, 0xae, 0x72, 0x0e, 0xac, 0x40, 0x04, 0xae, 0x59, 0x16, 0xa5, 0x4c, 0x29, + 0xe4, 0x5f, 0x16, 0x1b, 0x96, 0xb6, 0x22, 0x45, 0x74, 0xa1, 0x7f, 0x11, 0xf1, 0x4e, 0xba, 0x32, + 0xfa, 0x33, 0x09, 0x4e, 0xb6, 0x4f, 0xa8, 0xab, 0xf8, 0xc0, 0xee, 0x77, 0x3e, 0xbd, 0x00, 0xd9, + 0x4d, 0x7a, 0x8f, 0xff, 0x59, 0x7c, 0x80, 0x0a, 0x30, 0x84, 0xab, 0x67, 0xcf, 0x9d, 0x7b, 0xec, + 0x02, 0xd3, 0xf6, 0xe5, 0x01, 0x45, 0x00, 0xd0, 0x34, 0x64, 0x6d, 0x5c, 0xb1, 0xce, 0x9e, 0x3b, + 0x7f, 0xf5, 0x31, 0xa6, 0x5e, 0x24, 0x02, 0x72, 0x41, 0xf3, 0x19, 0xd2, 0xeb, 0x2f, 0x7f, 0x7c, + 0x46, 0x2a, 0xa5, 0x21, 0x69, 0xb7, 0x1a, 0x77, 0x54, 0x47, 0x3e, 0x9a, 0x86, 0x59, 0x3f, 0x25, + 0xb5, 0x54, 0x6e, 0x54, 0xc2, 0x65, 0x90, 0xf7, 0xc9, 0x80, 0x62, 0x44, 0x04, 0xb3, 0x5d, 0x25, + 0x29, 0xff, 0xbc, 0x04, 0x39, 0x37, 0x54, 0xda, 0xc2, 0x0e, 0xba, 0xe8, 0x8f, 0x7f, 0xf8, 0xb4, + 0x39, 0x31, 0x17, 0xae, 0xcb, 0x0b, 0xe9, 0x14, 0x1f, 0x3a, 0x7a, 0x92, 0x2a, 0xa2, 0x65, 0xda, + 0xfc, 0x5a, 0x59, 0x0c, 0xa9, 0x8b, 0x8c, 0x1e, 0x06, 0x44, 0x2d, 0x9c, 0x7a, 0xcd, 0x74, 0x74, + 0xa3, 0xa6, 0x5a, 0xe6, 0x75, 0x7e, 0x59, 0x37, 0xa9, 0xe4, 0xe9, 0x97, 0x2b, 0xf4, 0xc3, 0x26, + 0x81, 0x93, 0x46, 0x67, 0x5d, 0x2e, 0xc1, 0xf0, 0x8e, 0x18, 0x01, 0x51, 0x44, 0x17, 0x61, 0xc8, + 0x6a, 0xed, 0xa8, 0xc2, 0x62, 0x0c, 0x9f, 0x3d, 0xd9, 0x69, 0xfe, 0x0b, 0xfd, 0xe0, 0x16, 0x60, + 0xd0, 0x6a, 0xed, 0x10, 0x6d, 0xb9, 0x1b, 0x72, 0x1d, 0x1a, 0x33, 0x7c, 0xcd, 0x6b, 0x07, 0x7d, + 0x3e, 0x82, 0xf7, 0x40, 0xb5, 0x9a, 0xba, 0xd9, 0xd4, 0x9d, 0x03, 0x1a, 0xbf, 0x26, 0x95, 0xbc, + 0xf8, 0xb0, 0xc9, 0xe1, 0xf2, 0x55, 0x18, 0xdb, 0xa2, 0xeb, 0x5b, 0xaf, 0xe5, 0xe7, 0xbc, 0xf6, + 0x49, 0xf1, 0xed, 0x8b, 0x6c, 0x59, 0xa2, 0xad, 0x65, 0xa5, 0xe7, 0x22, 0xb5, 0xf3, 0xc9, 0xfe, + 0xb5, 0x33, 0x18, 0x21, 0xfe, 0xd1, 0xf1, 0xc0, 0xe4, 0x64, 0xca, 0xe9, 0x37, 0x5f, 0xbd, 0x2a, + 0x66, 0x5c, 0x34, 0x51, 0xe8, 0xee, 0x54, 0x0b, 0x31, 0x66, 0xb4, 0x10, 0x3b, 0x85, 0xe4, 0x0b, + 0x30, 0xb2, 0xa9, 0x35, 0x9d, 0x2d, 0xec, 0x2c, 0x63, 0xad, 0x8a, 0x9b, 0x41, 0xaf, 0x3b, 0x22, + 0xbc, 0x2e, 0x82, 0x14, 0x75, 0xad, 0xcc, 0xeb, 0xd0, 0xff, 0xe5, 0x3d, 0x48, 0xd1, 0x93, 0xa1, + 0xae, 0x47, 0xe6, 0x14, 0xcc, 0x23, 0x13, 0x5b, 0x7a, 0xe0, 0x60, 0x5b, 0x84, 0xb7, 0xb4, 0x80, + 0x9e, 0x10, 0x7e, 0x35, 0xd9, 0xdd, 0xaf, 0x72, 0x45, 0xe4, 0xde, 0xb5, 0x0e, 0x43, 0x25, 0x62, + 0x8a, 0x57, 0x16, 0xdd, 0x86, 0x48, 0x5e, 0x43, 0xd0, 0x1a, 0x8c, 0x59, 0x5a, 0xd3, 0xa1, 0x57, + 0x62, 0xf6, 0x68, 0x2f, 0xb8, 0xae, 0xcf, 0xb4, 0xcf, 0xbc, 0x40, 0x67, 0x79, 0x2d, 0x23, 0x96, + 0x1f, 0x28, 0xff, 0xe7, 0x14, 0x0c, 0x72, 0x61, 0xbc, 0x15, 0x86, 0xb8, 0x58, 0xb9, 0x76, 0xde, + 0x35, 0xd7, 0xee, 0x98, 0xe6, 0x5c, 0x07, 0xc2, 0xf9, 0x09, 0x1a, 0x74, 0x3f, 0x64, 0x2a, 0x7b, + 0x9a, 0x6e, 0xa8, 0x7a, 0x55, 0xa4, 0x1a, 0x5e, 0xbf, 0x35, 0x33, 0xb4, 0x40, 0x60, 0x2b, 0x8b, + 0xca, 0x10, 0xfd, 0xb8, 0x52, 0x25, 0x91, 0xc0, 0x1e, 0xd6, 0x6b, 0x7b, 0x0e, 0x9f, 0x61, 0xbc, + 0x84, 0x9e, 0x82, 0x14, 0x51, 0x08, 0x7e, 0x61, 0xb2, 0xd0, 0x96, 0xf0, 0x71, 0x83, 0xbd, 0x52, + 0x86, 0x54, 0xfc, 0x83, 0x5f, 0x98, 0x91, 0x14, 0x4a, 0x81, 0x16, 0x60, 0xa4, 0xae, 0xd9, 0x8e, + 0x4a, 0x3d, 0x18, 0xa9, 0x3e, 0xcd, 0xd7, 0xdb, 0x6d, 0x02, 0xe1, 0x82, 0xe5, 0x4d, 0x1f, 0x26, + 0x54, 0x0c, 0x54, 0x45, 0xa7, 0x20, 0x4f, 0x99, 0x54, 0xcc, 0x46, 0x43, 0x77, 0x58, 0x6c, 0x35, + 0x48, 0xe5, 0x3e, 0x4a, 0xe0, 0x0b, 0x14, 0x4c, 0x23, 0xac, 0x13, 0x90, 0xa5, 0x57, 0xb4, 0x28, + 0x0a, 0x3b, 0x8e, 0x9c, 0x21, 0x00, 0xfa, 0xf1, 0x01, 0x18, 0xf3, 0xec, 0x23, 0x43, 0xc9, 0x30, + 0x2e, 0x1e, 0x98, 0x22, 0x3e, 0x0a, 0x93, 0x06, 0xde, 0xa7, 0x07, 0xa4, 0x03, 0xd8, 0x59, 0x8a, + 0x8d, 0xc8, 0xb7, 0x2b, 0x41, 0x8a, 0xfb, 0x60, 0xb4, 0x22, 0x84, 0xcf, 0x70, 0x81, 0xe2, 0x8e, + 0xb8, 0x50, 0x8a, 0x76, 0x1c, 0x32, 0x9a, 0x65, 0x31, 0x84, 0x61, 0x6e, 0x1f, 0x2d, 0x8b, 0x7e, + 0x3a, 0x0d, 0xe3, 0xb4, 0x8f, 0x4d, 0x6c, 0xb7, 0xea, 0x0e, 0x67, 0x92, 0xa3, 0x38, 0x63, 0xe4, + 0x83, 0xc2, 0xe0, 0x14, 0xf7, 0x1e, 0x18, 0xc1, 0xd7, 0xf4, 0x2a, 0x36, 0x2a, 0x98, 0xe1, 0x8d, + 0x50, 0xbc, 0x9c, 0x00, 0x52, 0xa4, 0x07, 0xc1, 0xb5, 0x7b, 0xaa, 0xb0, 0xc9, 0xa3, 0x8c, 0x9f, + 0x80, 0x17, 0x19, 0x58, 0x9e, 0x82, 0xd4, 0xa2, 0xe6, 0x68, 0x24, 0xc0, 0x70, 0xf6, 0x99, 0xa3, + 0xc9, 0x29, 0xe4, 0x5f, 0xf9, 0xcb, 0x09, 0x48, 0x5d, 0x31, 0x1d, 0x8c, 0x1e, 0xf7, 0x05, 0x80, + 0xa3, 0x9d, 0xf4, 0x79, 0x4b, 0xaf, 0x19, 0xb8, 0xba, 0x66, 0xd7, 0x7c, 0xef, 0x29, 0x78, 0xea, + 0x94, 0x08, 0xa8, 0xd3, 0x24, 0xa4, 0x9b, 0x66, 0xcb, 0xa8, 0x8a, 0x93, 0xbc, 0xb4, 0x80, 0xca, + 0x90, 0x71, 0xb5, 0x24, 0x15, 0xa7, 0x25, 0x63, 0x44, 0x4b, 0x88, 0x0e, 0x73, 0x80, 0x32, 0xb4, + 0xc3, 0x95, 0xa5, 0x04, 0x59, 0xd7, 0x78, 0x71, 0x6d, 0xeb, 0x4d, 0x61, 0x3d, 0x32, 0xe2, 0x4c, + 0xdc, 0xb1, 0x77, 0x85, 0xc7, 0x34, 0x2e, 0xef, 0x7e, 0xe0, 0xd2, 0x0b, 0xa8, 0x15, 0x7f, 0xdb, + 0x61, 0x88, 0xf6, 0xcb, 0x53, 0x2b, 0xf6, 0xbe, 0xc3, 0x49, 0xc8, 0xda, 0x7a, 0xcd, 0xd0, 0x9c, + 0x56, 0x13, 0x73, 0xcd, 0xf3, 0x00, 0xf2, 0x67, 0x24, 0x18, 0x64, 0x9a, 0xec, 0x93, 0x9b, 0xd4, + 0x59, 0x6e, 0x89, 0x28, 0xb9, 0x25, 0x0f, 0x2f, 0xb7, 0x22, 0x80, 0xdb, 0x18, 0x9b, 0x5f, 0xb9, + 0xef, 0x10, 0x31, 0xb0, 0x26, 0x6e, 0xe9, 0x35, 0x3e, 0x51, 0x7d, 0x44, 0xf2, 0x7f, 0x90, 0x48, + 0x10, 0xcb, 0xbf, 0xa3, 0x22, 0x8c, 0x88, 0x76, 0xa9, 0xbb, 0x75, 0xad, 0xc6, 0x75, 0xe7, 0xae, + 0xc8, 0xc6, 0x5d, 0xaa, 0x6b, 0x35, 0x65, 0x98, 0xb7, 0x87, 0x14, 0x3a, 0x8f, 0x43, 0x22, 0x62, + 0x1c, 0x02, 0x03, 0x9f, 0x3c, 0xdc, 0xc0, 0x07, 0x86, 0x28, 0x15, 0x1e, 0xa2, 0x5f, 0x48, 0xd0, + 0xc5, 0x8c, 0x65, 0xda, 0x5a, 0xfd, 0x9b, 0x31, 0x23, 0x4e, 0x40, 0xd6, 0x32, 0xeb, 0x2a, 0xfb, + 0xc2, 0x4e, 0xb8, 0x67, 0x2c, 0xb3, 0xae, 0xb4, 0x0d, 0x7b, 0xfa, 0x36, 0x4d, 0x97, 0xc1, 0xdb, + 0x20, 0xb5, 0xa1, 0xb0, 0xd4, 0x9a, 0x90, 0x63, 0xa2, 0xe0, 0xbe, 0xec, 0x51, 0x22, 0x03, 0xea, + 0x1c, 0xa5, 0x76, 0xdf, 0xcb, 0x9a, 0xcd, 0x30, 0x15, 0x8e, 0x47, 0x28, 0x98, 0xe9, 0xef, 0xb4, + 0x0a, 0xf6, 0xab, 0xa5, 0xc2, 0xf1, 0xe4, 0xbf, 0x25, 0x01, 0xac, 0x12, 0xc9, 0xd2, 0xfe, 0x12, + 0x2f, 0x64, 0xd3, 0x26, 0xa8, 0x81, 0x9a, 0xa7, 0xa3, 0x06, 0x8d, 0xd7, 0x9f, 0xb3, 0xfd, 0xed, + 0x5e, 0x80, 0x11, 0x4f, 0x19, 0x6d, 0x2c, 0x1a, 0x33, 0xdd, 0x25, 0xaa, 0xde, 0xc2, 0x8e, 0x92, + 0xbb, 0xe6, 0x2b, 0xc9, 0xff, 0x4c, 0x82, 0x2c, 0x6d, 0xd3, 0x1a, 0x76, 0xb4, 0xc0, 0x18, 0x4a, + 0x87, 0x1f, 0xc3, 0xbb, 0x00, 0x18, 0x1b, 0x5b, 0x7f, 0x19, 0x73, 0xcd, 0xca, 0x52, 0xc8, 0x96, + 0xfe, 0x32, 0x46, 0xe7, 0x5d, 0x81, 0x27, 0xbb, 0x0b, 0x5c, 0x44, 0xdd, 0x5c, 0xec, 0xc7, 0x60, + 0x88, 0x3e, 0x51, 0xb5, 0x6f, 0xf3, 0x40, 0x7a, 0xd0, 0x68, 0x35, 0xb6, 0xf7, 0x6d, 0xf9, 0x25, + 0x18, 0xda, 0xde, 0x67, 0xb9, 0x91, 0x13, 0x90, 0x6d, 0x9a, 0x26, 0xf7, 0xc9, 0x2c, 0x16, 0xca, + 0x10, 0x00, 0x75, 0x41, 0x22, 0x1f, 0x90, 0xf0, 0xf2, 0x01, 0x5e, 0x42, 0x23, 0xd9, 0x53, 0x42, + 0xe3, 0xf4, 0xbf, 0x93, 0x60, 0xd8, 0x67, 0x1f, 0xd0, 0x63, 0x70, 0xa4, 0xb4, 0xba, 0xb1, 0xf0, + 0xac, 0xba, 0xb2, 0xa8, 0x5e, 0x5a, 0x2d, 0x2e, 0x79, 0x77, 0xb8, 0x0a, 0x47, 0x6f, 0xdc, 0x9c, + 0x45, 0x3e, 0xdc, 0xcb, 0x06, 0xcd, 0x28, 0xa1, 0x33, 0x30, 0x19, 0x24, 0x29, 0x96, 0xb6, 0xca, + 0xeb, 0xdb, 0x79, 0xa9, 0x70, 0xe4, 0xc6, 0xcd, 0xd9, 0x71, 0x1f, 0x45, 0x71, 0xc7, 0xc6, 0x86, + 0xd3, 0x4e, 0xb0, 0xb0, 0xb1, 0xb6, 0xb6, 0xb2, 0x9d, 0x4f, 0xb4, 0x11, 0x70, 0x83, 0xfd, 0x20, + 0x8c, 0x07, 0x09, 0xd6, 0x57, 0x56, 0xf3, 0xc9, 0x02, 0xba, 0x71, 0x73, 0x76, 0xd4, 0x87, 0xbd, + 0xae, 0xd7, 0x0b, 0x99, 0x0f, 0x7e, 0x62, 0x7a, 0xe0, 0x27, 0x7e, 0x7c, 0x5a, 0x22, 0x3d, 0x1b, + 0x09, 0xd8, 0x08, 0xf4, 0x30, 0x1c, 0xdb, 0x5a, 0x59, 0x5a, 0x2f, 0x2f, 0xaa, 0x6b, 0x5b, 0x4b, + 0x22, 0x07, 0x2d, 0x7a, 0x37, 0x76, 0xe3, 0xe6, 0xec, 0x30, 0xef, 0x52, 0x14, 0xf6, 0xa6, 0x52, + 0xbe, 0xb2, 0xb1, 0x5d, 0xce, 0x4b, 0x0c, 0x7b, 0xb3, 0x89, 0xaf, 0x99, 0x0e, 0x7b, 0xc3, 0xee, + 0x51, 0x38, 0xde, 0x01, 0xdb, 0xed, 0xd8, 0xf8, 0x8d, 0x9b, 0xb3, 0x23, 0x9b, 0x4d, 0xcc, 0xe6, + 0x0f, 0xa5, 0x98, 0x83, 0xa9, 0x76, 0x8a, 0x8d, 0xcd, 0x8d, 0xad, 0xe2, 0x6a, 0x7e, 0xb6, 0x90, + 0xbf, 0x71, 0x73, 0x36, 0x27, 0x8c, 0x21, 0x4d, 0xf4, 0xbb, 0x3d, 0xbb, 0x93, 0x2b, 0x9e, 0xdf, + 0x1e, 0x0a, 0xe4, 0xf7, 0xd8, 0x5a, 0xc2, 0xd2, 0x9a, 0x5a, 0xa3, 0xdf, 0x25, 0x4f, 0x4c, 0x5a, + 0x59, 0x7e, 0x35, 0x01, 0x63, 0x6e, 0x40, 0xbd, 0x49, 0x6b, 0x40, 0x17, 0xfc, 0x79, 0x99, 0xe1, + 0x48, 0x57, 0xc6, 0xb0, 0xc5, 0xd2, 0x81, 0x25, 0x6f, 0x4a, 0x90, 0x11, 0xe1, 0x19, 0x37, 0x1c, + 0xb3, 0xed, 0xd4, 0x65, 0x8e, 0x11, 0x60, 0xe0, 0xd2, 0xa1, 0x32, 0x64, 0x5d, 0x63, 0xe2, 0xbe, + 0x08, 0x13, 0x6d, 0x7d, 0x02, 0x5c, 0x3c, 0x4a, 0xf4, 0xb4, 0xb7, 0x98, 0x48, 0x45, 0x2d, 0x4f, + 0xae, 0x30, 0x84, 0x00, 0x0b, 0x41, 0x25, 0x63, 0x3e, 0x25, 0xb9, 0x54, 0xe8, 0xcd, 0xfa, 0x7d, + 0x95, 0xad, 0xb2, 0x58, 0xc4, 0x92, 0x69, 0x68, 0xfb, 0x25, 0xba, 0xd0, 0x3a, 0x06, 0x43, 0xe4, + 0x63, 0x8d, 0x5f, 0x3d, 0x4e, 0x2a, 0x83, 0x0d, 0x6d, 0x7f, 0x49, 0xb3, 0xd1, 0x2c, 0xe4, 0x88, + 0x07, 0x51, 0x75, 0xd3, 0xd1, 0xd4, 0x86, 0xcd, 0x57, 0x1c, 0x40, 0x60, 0x2b, 0xa6, 0xa3, 0xad, + 0xd9, 0xf2, 0x4f, 0x4a, 0x30, 0x1a, 0x94, 0x08, 0x7a, 0x08, 0x10, 0xe1, 0xa6, 0xd5, 0xb0, 0x4a, + 0x4c, 0x13, 0x15, 0xad, 0xa8, 0x73, 0xac, 0xa1, 0xed, 0x17, 0x6b, 0x78, 0xbd, 0xd5, 0xa0, 0x8d, + 0xb3, 0xd1, 0x1a, 0xe4, 0x05, 0xb2, 0x18, 0x5b, 0x2e, 0xfa, 0xe3, 0xed, 0xef, 0xc8, 0x71, 0x04, + 0xe6, 0xe0, 0x5e, 0x25, 0x0e, 0x6e, 0x94, 0xf1, 0x73, 0xb7, 0x12, 0x02, 0xdd, 0x4c, 0x06, 0xbb, + 0x29, 0x3f, 0x0d, 0x63, 0x21, 0xb9, 0x23, 0x19, 0x46, 0x78, 0x46, 0x81, 0x6e, 0xa6, 0x89, 0x0d, + 0xaf, 0x61, 0x96, 0x39, 0xa0, 0x69, 0xeb, 0xf9, 0xcc, 0x2f, 0xbf, 0x36, 0x23, 0xd1, 0x0d, 0xde, + 0x79, 0x18, 0x09, 0xc8, 0x9c, 0xde, 0xdb, 0xb6, 0x2c, 0xd5, 0xbf, 0xec, 0x4b, 0x29, 0xa0, 0x59, + 0x16, 0x47, 0xf3, 0xd1, 0xbe, 0x08, 0x39, 0x62, 0x6f, 0x71, 0x95, 0x93, 0xde, 0x0f, 0x63, 0xcc, + 0x1f, 0x84, 0x87, 0x85, 0x05, 0x64, 0x6b, 0x62, 0x6c, 0x64, 0x11, 0xa1, 0x05, 0x47, 0x68, 0x58, + 0x60, 0x2d, 0x69, 0x76, 0xe9, 0xf2, 0x4f, 0xbc, 0x3e, 0x2d, 0xdd, 0xb9, 0xf9, 0x7c, 0x73, 0x19, + 0x4e, 0xf8, 0x3e, 0x6a, 0x3b, 0x15, 0x3d, 0x90, 0xc0, 0x18, 0xf3, 0x69, 0x26, 0xf9, 0x18, 0x97, + 0x88, 0xe8, 0x9a, 0x0e, 0xe9, 0x9e, 0x7f, 0x2b, 0x74, 0x37, 0x2c, 0xf1, 0x39, 0x92, 0xce, 0x69, + 0xcf, 0x0f, 0x67, 0x60, 0x48, 0xc1, 0xef, 0x6d, 0x61, 0xdb, 0x41, 0x67, 0x21, 0x85, 0x2b, 0x7b, + 0x66, 0xa7, 0x0c, 0x13, 0xe9, 0xdc, 0x1c, 0xc7, 0x2b, 0x57, 0xf6, 0xcc, 0xe5, 0x01, 0x85, 0xe2, + 0xa2, 0x73, 0x90, 0xde, 0xad, 0xb7, 0x78, 0xca, 0x23, 0x64, 0x73, 0xfc, 0x44, 0x97, 0x08, 0xd2, + 0xf2, 0x80, 0xc2, 0xb0, 0x49, 0x55, 0xf4, 0x91, 0xce, 0x64, 0xf7, 0xaa, 0x56, 0x8c, 0x5d, 0x5a, + 0x15, 0xc1, 0x45, 0x25, 0x00, 0x1b, 0x3b, 0xe2, 0x06, 0x76, 0xaa, 0xdd, 0xc0, 0xf8, 0x29, 0xb7, + 0xb0, 0xc3, 0x8e, 0x78, 0xb0, 0xe4, 0x2c, 0x2f, 0x10, 0x1e, 0xba, 0xa1, 0x3b, 0x2a, 0x4d, 0x29, + 0xf0, 0xc0, 0xf4, 0xee, 0xe8, 0xda, 0x75, 0x87, 0x26, 0x21, 0x08, 0x0f, 0x5d, 0x14, 0x48, 0x97, + 0xdf, 0xdb, 0xc2, 0xcd, 0x03, 0x1e, 0x8f, 0x46, 0x76, 0xf9, 0x39, 0x82, 0x44, 0xba, 0x4c, 0xb1, + 0x51, 0x19, 0x86, 0xe9, 0x9d, 0x50, 0x66, 0x16, 0xf8, 0xa3, 0x93, 0x72, 0x14, 0x71, 0x89, 0xa0, + 0x52, 0x4b, 0xb1, 0x3c, 0xa0, 0xc0, 0x8e, 0x5b, 0x42, 0x6f, 0x81, 0x0c, 0x7b, 0x94, 0xc8, 0xd9, + 0xe7, 0x4f, 0xed, 0xcd, 0x44, 0xf1, 0xa0, 0x2f, 0x13, 0x6d, 0xef, 0x2f, 0x0f, 0x28, 0x43, 0x15, + 0xf6, 0x2f, 0xe9, 0x7f, 0x15, 0xd7, 0xf5, 0x6b, 0xb8, 0x49, 0xe8, 0xb3, 0xdd, 0xfb, 0xbf, 0xc8, + 0x30, 0x29, 0x87, 0x6c, 0x55, 0x14, 0xd0, 0xd3, 0x90, 0xc5, 0x46, 0x95, 0x77, 0x03, 0xda, 0x9d, + 0x45, 0x40, 0x57, 0x8c, 0xaa, 0xe8, 0x44, 0x06, 0xf3, 0xff, 0xd1, 0x53, 0x6e, 0xc0, 0x3c, 0xdc, + 0x1e, 0xa3, 0x06, 0x3a, 0xc0, 0x52, 0x27, 0x03, 0x22, 0x70, 0x46, 0xeb, 0x30, 0x5a, 0xd7, 0x6d, + 0x47, 0xb5, 0x0d, 0xcd, 0xb2, 0xf7, 0x4c, 0xc7, 0xa6, 0x39, 0x88, 0xe1, 0xb3, 0xf7, 0x45, 0x71, + 0x58, 0xd5, 0x6d, 0x67, 0x4b, 0x20, 0x2f, 0x0f, 0x28, 0x23, 0x75, 0x3f, 0x80, 0xf0, 0x33, 0x77, + 0x77, 0x71, 0xd3, 0x65, 0x48, 0x73, 0x15, 0x5d, 0xf8, 0x6d, 0x10, 0x6c, 0x41, 0x4f, 0xf8, 0x99, + 0x7e, 0x00, 0x7a, 0x27, 0x4c, 0xd4, 0x4d, 0xad, 0xea, 0xb2, 0x53, 0x2b, 0x7b, 0x2d, 0xe3, 0x2a, + 0x4d, 0x6c, 0x0c, 0x9f, 0x7d, 0x30, 0xb2, 0x91, 0xa6, 0x56, 0x15, 0x2c, 0x16, 0x08, 0xc1, 0xf2, + 0x80, 0x32, 0x5e, 0x0f, 0x03, 0xd1, 0x7b, 0x60, 0x52, 0xb3, 0xac, 0xfa, 0x41, 0x98, 0xfb, 0x18, + 0xe5, 0x7e, 0x3a, 0x8a, 0x7b, 0x91, 0xd0, 0x84, 0xd9, 0x23, 0xad, 0x0d, 0x5a, 0x1a, 0xe2, 0x3b, + 0xed, 0xf2, 0x03, 0x30, 0xec, 0x9b, 0xea, 0x68, 0x0a, 0x86, 0xf8, 0xb9, 0x53, 0xb1, 0x37, 0xcf, + 0x8b, 0xf2, 0x28, 0xe4, 0xfc, 0xd3, 0x5b, 0x6e, 0xb8, 0x84, 0xf4, 0xa2, 0xf6, 0x54, 0x30, 0x2d, + 0x98, 0xf5, 0x32, 0x7e, 0xf7, 0x08, 0xd3, 0x2e, 0xbe, 0xb3, 0x5d, 0xa3, 0x1c, 0x05, 0x72, 0x0f, + 0x42, 0x5c, 0x8c, 0x75, 0xd6, 0x73, 0x31, 0x49, 0xe6, 0x62, 0xac, 0xb3, 0xc2, 0xc5, 0xc8, 0xf3, + 0x90, 0x0f, 0xcf, 0xf6, 0xce, 0xbb, 0x8a, 0xde, 0x01, 0x82, 0x2c, 0x3f, 0x40, 0x20, 0xff, 0x56, + 0xc2, 0x25, 0x76, 0xa7, 0xb9, 0x9b, 0x48, 0x94, 0xfa, 0x4e, 0x24, 0x1e, 0x0f, 0xa7, 0x30, 0xbd, + 0xac, 0xe5, 0xb3, 0x90, 0xf7, 0x92, 0x6f, 0xcc, 0x64, 0x73, 0xb3, 0xd7, 0x3e, 0x6b, 0x42, 0x11, + 0x9d, 0x32, 0x56, 0x09, 0x85, 0x78, 0x97, 0x02, 0x7b, 0x2e, 0xe2, 0xb9, 0xe8, 0x30, 0x1b, 0xd7, + 0xd7, 0x5f, 0xb6, 0xaa, 0x9a, 0x83, 0x45, 0x2e, 0xc4, 0xb7, 0xfd, 0x72, 0x3f, 0x8c, 0x11, 0xf7, + 0x6d, 0x3b, 0x9a, 0x83, 0xb9, 0x0f, 0x4e, 0xb3, 0x94, 0xa0, 0x66, 0x59, 0x5b, 0x04, 0xca, 0x7c, + 0xf0, 0x7d, 0x30, 0x4a, 0x0c, 0x9f, 0xae, 0xd5, 0x55, 0x9e, 0x19, 0x18, 0x64, 0xae, 0x9a, 0x43, + 0x97, 0x29, 0x50, 0xae, 0xba, 0x8a, 0x40, 0x8d, 0x9e, 0xbb, 0xb4, 0x92, 0x7c, 0x4b, 0x2b, 0xc4, + 0x6f, 0xd6, 0x33, 0xf1, 0x88, 0xc7, 0x08, 0x3a, 0x67, 0x74, 0x27, 0xe9, 0x32, 0xec, 0x1a, 0x4b, + 0x72, 0x64, 0x14, 0x56, 0x90, 0x3f, 0x90, 0x80, 0xf1, 0x36, 0xf3, 0xd8, 0x31, 0xd5, 0xed, 0xad, + 0x29, 0x13, 0x7d, 0xad, 0x29, 0x37, 0x82, 0xa9, 0x5c, 0x9f, 0x8b, 0x6a, 0x37, 0xb2, 0xab, 0x6e, + 0x6e, 0x97, 0x28, 0x3b, 0x67, 0xe4, 0xcb, 0xf8, 0xd2, 0x29, 0xa0, 0xc0, 0xe4, 0xce, 0xc1, 0xcb, + 0x9a, 0xe1, 0xe8, 0x06, 0x56, 0xdb, 0x46, 0xee, 0x78, 0x1b, 0x53, 0x11, 0x50, 0x72, 0x76, 0x13, + 0x2e, 0xb1, 0x97, 0xd1, 0x95, 0x15, 0x18, 0x0d, 0x1a, 0x78, 0x34, 0x0a, 0x09, 0x67, 0x9f, 0x0b, + 0x20, 0xe1, 0xec, 0xa3, 0x47, 0x79, 0xf2, 0x27, 0x41, 0x93, 0x3f, 0xed, 0xde, 0x95, 0xd3, 0x79, + 0x99, 0x1f, 0x59, 0x76, 0x67, 0x83, 0x6b, 0xf4, 0xc3, 0x5c, 0xe5, 0x07, 0x61, 0x2c, 0x64, 0xd5, + 0xa3, 0x52, 0x81, 0xf2, 0x18, 0x8c, 0x04, 0x4c, 0xb8, 0x7c, 0x14, 0x26, 0x3b, 0x59, 0x64, 0x79, + 0xcf, 0x85, 0x07, 0x2c, 0x2b, 0x3a, 0x07, 0x19, 0xd7, 0x24, 0x77, 0x48, 0x3d, 0xd0, 0x5e, 0x08, + 0x64, 0xc5, 0x45, 0x0d, 0x64, 0xb0, 0x13, 0x81, 0x0c, 0xb6, 0xfc, 0x1d, 0x30, 0x15, 0x65, 0x6e, + 0x43, 0xdd, 0x48, 0xb9, 0x6a, 0x78, 0x14, 0x06, 0xf9, 0xb3, 0x61, 0x09, 0xba, 0x67, 0xc3, 0x4b, + 0x44, 0x3d, 0x99, 0xe9, 0x4d, 0xb2, 0xad, 0x1c, 0x5a, 0x90, 0x55, 0x38, 0x1e, 0x69, 0x72, 0xa3, + 0x77, 0x7f, 0x18, 0x23, 0xbe, 0xfb, 0x53, 0x11, 0xcd, 0xb1, 0x69, 0x5f, 0xc5, 0x89, 0x07, 0x56, + 0x92, 0xff, 0x53, 0x06, 0x32, 0x0a, 0xb6, 0x2d, 0x62, 0x13, 0x50, 0x09, 0xb2, 0x78, 0xbf, 0x82, + 0x2d, 0xc7, 0xdb, 0x75, 0xe9, 0x14, 0x4c, 0x30, 0xec, 0xb2, 0xc0, 0x24, 0x9e, 0xdc, 0x25, 0x43, + 0x8f, 0xf3, 0x80, 0x2f, 0x3a, 0x76, 0xe3, 0xe4, 0xfe, 0x88, 0xef, 0xbc, 0x88, 0xf8, 0x92, 0x91, + 0xce, 0x9b, 0x51, 0x85, 0x42, 0xbe, 0xc7, 0x79, 0xc8, 0x97, 0x8a, 0xa9, 0x2c, 0x10, 0xf3, 0x2d, + 0x04, 0x62, 0xbe, 0x74, 0x4c, 0x37, 0x23, 0x82, 0xbe, 0x85, 0x40, 0xd0, 0x37, 0x18, 0xc3, 0x24, + 0x22, 0xea, 0x3b, 0x2f, 0xa2, 0xbe, 0xa1, 0x98, 0x6e, 0x87, 0xc2, 0xbe, 0x4b, 0xc1, 0xb0, 0x8f, + 0x85, 0x6c, 0xf7, 0x44, 0x52, 0x47, 0xc6, 0x7d, 0x6f, 0xf5, 0xc5, 0x7d, 0xd9, 0xc8, 0xa0, 0x8b, + 0x31, 0xe9, 0x10, 0xf8, 0x2d, 0x04, 0x02, 0x3f, 0x88, 0x91, 0x41, 0x44, 0xe4, 0xf7, 0x76, 0x7f, + 0xe4, 0x37, 0x1c, 0x19, 0x3c, 0x72, 0xa5, 0xe9, 0x14, 0xfa, 0x5d, 0x70, 0x43, 0xbf, 0x5c, 0x64, + 0xec, 0xca, 0xfb, 0x10, 0x8e, 0xfd, 0x36, 0xda, 0x62, 0xbf, 0x11, 0xfe, 0x8c, 0x79, 0x14, 0x8b, + 0x98, 0xe0, 0x6f, 0xa3, 0x2d, 0xf8, 0x1b, 0x8d, 0x61, 0x18, 0x13, 0xfd, 0xbd, 0xab, 0x73, 0xf4, + 0x17, 0x1d, 0x9f, 0xf1, 0x66, 0xf6, 0x16, 0xfe, 0xa9, 0x11, 0xe1, 0x5f, 0x9e, 0xb2, 0x7f, 0x28, + 0x92, 0x7d, 0xff, 0xf1, 0xdf, 0x83, 0xc4, 0xcd, 0x86, 0x0c, 0x07, 0x31, 0x55, 0xb8, 0xd9, 0x34, + 0x9b, 0xe2, 0x8c, 0x38, 0x2d, 0xc8, 0xa7, 0x88, 0xe3, 0xf7, 0x8c, 0x44, 0x97, 0x58, 0x91, 0xba, + 0x04, 0x9f, 0x61, 0x90, 0x7f, 0x59, 0xf2, 0x68, 0xa9, 0xaf, 0xf4, 0x07, 0x0d, 0x59, 0x1e, 0x34, + 0xf8, 0x42, 0xc8, 0x44, 0x30, 0x84, 0x0c, 0x25, 0x20, 0x92, 0xe1, 0x04, 0x84, 0xbb, 0x65, 0xc9, + 0x02, 0x4d, 0x6e, 0xdf, 0x59, 0xa6, 0x78, 0xcc, 0xdd, 0xbe, 0x65, 0xf1, 0x0b, 0x7a, 0x04, 0x26, + 0x7c, 0xb8, 0xae, 0x0b, 0x61, 0x21, 0x51, 0xde, 0xc5, 0x2e, 0x72, 0x5f, 0xb2, 0xe6, 0x09, 0xc8, + 0x8b, 0x3c, 0x11, 0xa4, 0x2a, 0x66, 0x15, 0x73, 0x03, 0x4f, 0xff, 0x27, 0xd1, 0x68, 0xdd, 0xac, + 0x71, 0x33, 0x4e, 0xfe, 0x25, 0x58, 0xae, 0x15, 0xcc, 0x32, 0x23, 0x27, 0xff, 0x73, 0xc9, 0xe3, + 0xe7, 0x05, 0xa3, 0x9d, 0xe2, 0x46, 0xe9, 0xf6, 0xc4, 0x8d, 0x89, 0x43, 0xc7, 0x8d, 0x7e, 0x07, + 0x9b, 0x0c, 0x3a, 0xd8, 0x3f, 0x91, 0xbc, 0x11, 0x76, 0xa3, 0xc0, 0xc3, 0x49, 0xc4, 0xf3, 0x96, + 0x69, 0xff, 0xe9, 0x45, 0x1e, 0xdb, 0x0f, 0x7a, 0x47, 0xfa, 0xdc, 0xd8, 0x7e, 0xc8, 0x77, 0x38, + 0x18, 0x3d, 0x05, 0x59, 0x9a, 0x74, 0x51, 0x4d, 0x4b, 0x3c, 0x47, 0x7f, 0x22, 0xfa, 0x38, 0x9f, + 0x4d, 0x0f, 0x17, 0xb1, 0x23, 0x80, 0x5e, 0x20, 0x90, 0x0d, 0xc4, 0xa3, 0x27, 0x21, 0x4b, 0x5a, + 0xcf, 0x9e, 0x55, 0x05, 0x7e, 0x91, 0x49, 0x00, 0xe4, 0xf7, 0x00, 0x6a, 0x37, 0xdf, 0x68, 0x19, + 0x06, 0xf1, 0x35, 0xfa, 0xca, 0x15, 0x3b, 0x1a, 0x75, 0xb4, 0x43, 0xb0, 0x87, 0x0d, 0xa7, 0x34, + 0x45, 0x84, 0xfc, 0x95, 0x5b, 0x33, 0x79, 0x86, 0xfd, 0xb0, 0xd9, 0xd0, 0x1d, 0xdc, 0xb0, 0x9c, + 0x03, 0x85, 0xd3, 0xcb, 0xbf, 0x9f, 0x20, 0x91, 0x57, 0xc0, 0xb4, 0x77, 0x94, 0x6d, 0xa7, 0x0d, + 0x8d, 0xde, 0xe4, 0x3d, 0x0d, 0x50, 0xd3, 0x6c, 0xf5, 0xba, 0x66, 0x38, 0xb8, 0xca, 0x85, 0xee, + 0x83, 0xa0, 0x02, 0x64, 0x48, 0xa9, 0x65, 0xe3, 0x2a, 0x5f, 0x00, 0xb8, 0x65, 0x5f, 0x3f, 0x87, + 0xde, 0x5c, 0x3f, 0x83, 0x52, 0xce, 0x84, 0xa4, 0xec, 0x8b, 0x8a, 0xb2, 0xfe, 0xa8, 0x88, 0x1d, + 0x69, 0xe4, 0x27, 0xaa, 0x80, 0xb5, 0x4d, 0x94, 0xc9, 0x3a, 0xb3, 0x81, 0x1b, 0x96, 0x69, 0xd6, + 0x55, 0x66, 0xbc, 0xd8, 0xfb, 0xc9, 0x39, 0x0e, 0x2c, 0x53, 0x1b, 0xf6, 0xbd, 0x09, 0x6f, 0xfa, + 0x79, 0xd1, 0xef, 0xb7, 0x9d, 0x80, 0xe5, 0xef, 0xa7, 0x4b, 0xe2, 0xa0, 0xf3, 0x46, 0x5b, 0xfe, + 0x3d, 0xee, 0x16, 0x35, 0x0b, 0x42, 0xa1, 0x7b, 0xb5, 0x1f, 0xde, 0x5e, 0x38, 0x03, 0xdb, 0xe8, + 0x05, 0x38, 0x16, 0x32, 0x6d, 0x2e, 0xeb, 0x44, 0x8f, 0x16, 0xee, 0x48, 0xd0, 0xc2, 0x09, 0xce, + 0x9e, 0xac, 0x92, 0x6f, 0x72, 0xd2, 0xad, 0x90, 0x55, 0x96, 0x3f, 0x14, 0xe9, 0x38, 0xfa, 0xf4, + 0xb9, 0x7e, 0x87, 0x2c, 0xfc, 0x03, 0xeb, 0xd8, 0x1c, 0x03, 0xf2, 0xd5, 0xf1, 0x26, 0x1c, 0xe9, + 0x18, 0x92, 0xa0, 0x27, 0x21, 0xeb, 0x45, 0x33, 0x52, 0xc4, 0x92, 0xd0, 0x5d, 0xe6, 0x78, 0xb8, + 0xf2, 0x3f, 0x91, 0x3c, 0x96, 0xc1, 0x85, 0x53, 0x19, 0x06, 0xd9, 0x19, 0x1d, 0xbe, 0xf3, 0xff, + 0x48, 0x6f, 0xc1, 0xcc, 0x1c, 0x3b, 0xc0, 0xa3, 0x70, 0x62, 0xf9, 0x3d, 0x30, 0xc8, 0x20, 0x68, + 0x18, 0x86, 0xbc, 0x77, 0x28, 0x01, 0x06, 0x8b, 0x0b, 0x0b, 0xe5, 0xcd, 0xed, 0xbc, 0x84, 0xb2, + 0x90, 0x2e, 0x96, 0x36, 0x94, 0xed, 0x7c, 0x82, 0x80, 0x95, 0xf2, 0x33, 0xe5, 0x85, 0xed, 0x7c, + 0x12, 0x8d, 0xc3, 0x08, 0xfb, 0x5f, 0xbd, 0xb4, 0xa1, 0xac, 0x15, 0xb7, 0xf3, 0x29, 0x1f, 0x68, + 0xab, 0xbc, 0xbe, 0x58, 0x56, 0xf2, 0x69, 0xf9, 0x31, 0xb2, 0x56, 0x8a, 0x08, 0x7f, 0xbc, 0x55, + 0x91, 0xe4, 0x5b, 0x15, 0xc9, 0xaf, 0x26, 0xa0, 0x10, 0x1d, 0xd3, 0xa0, 0x67, 0x42, 0x1d, 0x3f, + 0xdb, 0x47, 0x40, 0x14, 0xea, 0x3d, 0xba, 0x0f, 0x46, 0x9b, 0x78, 0x17, 0x3b, 0x95, 0x3d, 0x16, + 0x63, 0x31, 0x8f, 0x39, 0xa2, 0x8c, 0x70, 0x28, 0x25, 0xb2, 0x19, 0xda, 0x4b, 0xb8, 0xe2, 0xa8, + 0xcc, 0x14, 0xd9, 0xfc, 0x77, 0xc3, 0x46, 0x18, 0x74, 0x8b, 0x01, 0xe5, 0xef, 0xe8, 0x4b, 0x96, + 0x59, 0x48, 0x2b, 0xe5, 0x6d, 0xe5, 0x1d, 0xf9, 0x24, 0x42, 0x30, 0x4a, 0xff, 0x55, 0xb7, 0xd6, + 0x8b, 0x9b, 0x5b, 0xcb, 0x1b, 0x44, 0x96, 0x13, 0x30, 0x26, 0x64, 0x29, 0x80, 0x69, 0xf9, 0xcf, + 0xa5, 0xf6, 0xcd, 0xc0, 0xb3, 0xc1, 0xcd, 0xc0, 0xf6, 0x24, 0x80, 0x6f, 0x8f, 0x4c, 0xec, 0x02, + 0xbe, 0xa5, 0xff, 0x5d, 0x40, 0xdf, 0xfe, 0xdf, 0xd3, 0x87, 0xd9, 0xff, 0xf3, 0xef, 0xfc, 0x5d, + 0xe8, 0x77, 0xe7, 0xcf, 0xdb, 0xf3, 0x5b, 0xb8, 0x0d, 0x7b, 0x7e, 0xf2, 0xbb, 0x61, 0x34, 0x98, + 0xd4, 0xf1, 0x0e, 0xbe, 0x48, 0xfe, 0x83, 0x2f, 0xe7, 0x20, 0x7d, 0xcd, 0x64, 0xc6, 0xaa, 0xf3, + 0x94, 0xbd, 0x62, 0x3a, 0xd8, 0x97, 0x14, 0x62, 0xd8, 0xf2, 0xcb, 0x90, 0xa6, 0xc6, 0xa7, 0xe3, + 0x75, 0x85, 0x77, 0x03, 0x68, 0x8e, 0xd3, 0xd4, 0x77, 0x5a, 0x1e, 0xe3, 0x99, 0xce, 0xc6, 0xab, + 0x28, 0xf0, 0x4a, 0x27, 0xb9, 0x15, 0x9b, 0xf4, 0x48, 0x7d, 0x96, 0xcc, 0xc7, 0x50, 0x5e, 0x87, + 0xd1, 0x20, 0x6d, 0x87, 0xcb, 0x1c, 0x1d, 0x6f, 0x5a, 0x79, 0xa1, 0x18, 0xbf, 0x6c, 0x4f, 0x0b, + 0xf2, 0x0d, 0x09, 0x32, 0xdb, 0xfb, 0x5c, 0xad, 0xbb, 0x1c, 0x08, 0xf3, 0xee, 0xa0, 0xb8, 0x39, + 0x0f, 0x96, 0x56, 0x4a, 0xba, 0xc9, 0xaa, 0xb7, 0xbb, 0x13, 0x37, 0xd5, 0xeb, 0xaa, 0x54, 0x64, + 0xed, 0xb8, 0xb1, 0xba, 0xd8, 0xdb, 0x19, 0xef, 0x49, 0x48, 0xfb, 0xcf, 0x67, 0xb3, 0x82, 0x5c, + 0xf5, 0x6d, 0x8d, 0x32, 0x2f, 0xe2, 0x3f, 0x0c, 0x2e, 0xf5, 0x7d, 0x18, 0xdc, 0xad, 0x25, 0xe1, + 0xaf, 0xe5, 0x1a, 0x64, 0x84, 0x52, 0xa0, 0xb7, 0xf9, 0xe7, 0x89, 0x48, 0x35, 0x47, 0xba, 0xd2, + 0xf6, 0x0d, 0xf2, 0xd3, 0x30, 0xce, 0x8f, 0x0b, 0x79, 0x6b, 0x16, 0xfe, 0x70, 0xf6, 0x18, 0xfb, + 0xb0, 0x2a, 0x16, 0x2c, 0xf2, 0x9f, 0x49, 0x90, 0x11, 0x13, 0x16, 0x3d, 0x16, 0x38, 0x13, 0x76, + 0x57, 0x64, 0xf2, 0xd1, 0x77, 0x22, 0x2c, 0xd0, 0xd6, 0x44, 0xff, 0x6d, 0xbd, 0xfd, 0x47, 0x76, + 0x3b, 0x9f, 0xff, 0x4f, 0x47, 0x9c, 0xff, 0x7f, 0x9f, 0x04, 0x19, 0xd7, 0x37, 0xf6, 0x9b, 0xe6, + 0x3b, 0x0a, 0x83, 0xdc, 0xfc, 0xb3, 0x3c, 0x1f, 0x2f, 0xb9, 0x19, 0xe7, 0x94, 0x2f, 0xe3, 0x5c, + 0x80, 0x8c, 0xf8, 0x05, 0x06, 0xbe, 0x6c, 0x74, 0xcb, 0xa7, 0x2f, 0xc0, 0xb0, 0x2f, 0xe3, 0x4a, + 0x66, 0xde, 0x7a, 0xf9, 0xf9, 0xfc, 0x40, 0x61, 0xe8, 0xc6, 0xcd, 0xd9, 0xe4, 0x3a, 0xbe, 0x4e, + 0x74, 0x56, 0x29, 0x2f, 0x2c, 0x97, 0x17, 0x9e, 0xcd, 0x4b, 0x85, 0xe1, 0x1b, 0x37, 0x67, 0x87, + 0x14, 0x4c, 0x13, 0x37, 0xa7, 0x97, 0x21, 0xe7, 0x1f, 0x95, 0xa0, 0x07, 0x41, 0x30, 0xba, 0x78, + 0x79, 0x73, 0x75, 0x65, 0xa1, 0xb8, 0x5d, 0x56, 0xd9, 0xc9, 0x1a, 0x74, 0x0c, 0x26, 0x56, 0x57, + 0x96, 0x96, 0xb7, 0xd5, 0x85, 0xd5, 0x95, 0xf2, 0xfa, 0xb6, 0x5a, 0xdc, 0xde, 0x2e, 0x2e, 0x3c, + 0x9b, 0x4f, 0x9c, 0x7d, 0x3f, 0xc0, 0x58, 0xb1, 0xb4, 0xb0, 0x42, 0xbc, 0x9f, 0xce, 0xdf, 0x08, + 0x5e, 0x80, 0x14, 0x5d, 0xb5, 0x77, 0xdd, 0xea, 0x2d, 0x74, 0xcf, 0x0b, 0xa2, 0x4b, 0x90, 0xa6, + 0x0b, 0x7a, 0xd4, 0x7d, 0xef, 0xb7, 0x10, 0x93, 0x28, 0x24, 0x8d, 0xa1, 0xd3, 0xa3, 0xeb, 0x66, + 0x70, 0xa1, 0x7b, 0xde, 0x10, 0x29, 0x90, 0xf5, 0x56, 0xe4, 0xf1, 0x9b, 0xc3, 0x85, 0x1e, 0x72, + 0x89, 0x84, 0xa7, 0xb7, 0x2c, 0x88, 0xdf, 0x2c, 0x2d, 0xf4, 0x60, 0xc0, 0xd0, 0x2a, 0x0c, 0x89, + 0x95, 0x5c, 0xdc, 0xf6, 0x6d, 0x21, 0x36, 0xcf, 0x47, 0x86, 0x80, 0xad, 0xb8, 0xbb, 0xef, 0x45, + 0x17, 0x62, 0x92, 0x96, 0x68, 0xc5, 0x3d, 0xe3, 0x1b, 0xb3, 0x25, 0x5b, 0x88, 0xcb, 0xdb, 0x11, + 0xa1, 0x79, 0xa9, 0x8c, 0xf8, 0x1d, 0xf6, 0x42, 0x0f, 0xf9, 0x58, 0x74, 0x19, 0xc0, 0xb7, 0xbe, + 0xee, 0x61, 0xeb, 0xbc, 0xd0, 0x4b, 0x9e, 0x15, 0x6d, 0x40, 0xc6, 0x5d, 0xee, 0xc4, 0x6e, 0x64, + 0x17, 0xe2, 0x13, 0x9e, 0xe8, 0x3d, 0x30, 0x12, 0x8c, 0xf3, 0x7b, 0xdb, 0x9e, 0x2e, 0xf4, 0x98, + 0xc9, 0x24, 0xfc, 0x83, 0x41, 0x7f, 0x6f, 0xdb, 0xd5, 0x85, 0x1e, 0x13, 0x9b, 0xe8, 0x25, 0x18, + 0x6f, 0x0f, 0xca, 0x7b, 0xdf, 0xbd, 0x2e, 0xf4, 0x91, 0xea, 0x44, 0x0d, 0x40, 0x1d, 0x82, 0xf9, + 0x3e, 0x36, 0xb3, 0x0b, 0xfd, 0x64, 0x3e, 0x4b, 0xe5, 0xc8, 0xb3, 0x42, 0x0f, 0xc5, 0x9e, 0x15, + 0xf2, 0x4e, 0xff, 0xb8, 0xe7, 0x83, 0x7e, 0xe9, 0x2c, 0xdc, 0x1b, 0xf1, 0xa6, 0x84, 0x78, 0x8d, + 0xe0, 0x50, 0xaf, 0x4a, 0x44, 0xde, 0xab, 0x8f, 0x3b, 0x17, 0x18, 0x7f, 0x0c, 0xe8, 0xf0, 0x2f, + 0x56, 0xc4, 0x9c, 0x5e, 0xea, 0x76, 0x50, 0x4a, 0xfe, 0x90, 0x04, 0xa3, 0xcb, 0xba, 0xed, 0x98, + 0x4d, 0xbd, 0xa2, 0xd5, 0xa9, 0xa9, 0x3e, 0xdf, 0xeb, 0x41, 0xeb, 0xd0, 0x1e, 0xed, 0xd3, 0x30, + 0x78, 0x4d, 0xab, 0xb3, 0x13, 0xce, 0x49, 0xba, 0xc6, 0x88, 0x78, 0xff, 0x21, 0x1c, 0x96, 0x70, + 0x32, 0xf9, 0x67, 0xe8, 0xd1, 0xc9, 0x46, 0x43, 0xb7, 0xd9, 0xef, 0x91, 0x92, 0x35, 0x41, 0x09, + 0x52, 0x4d, 0xcd, 0xe1, 0x21, 0x79, 0x69, 0x8e, 0x3f, 0x45, 0x72, 0x7f, 0x0f, 0x0f, 0x6b, 0x2c, + 0xe2, 0x8a, 0x42, 0x69, 0xd1, 0xbb, 0x80, 0xac, 0x31, 0x54, 0xca, 0x87, 0x5d, 0x63, 0x2a, 0xf6, + 0xc7, 0xe7, 0x8d, 0x5b, 0x33, 0x63, 0x07, 0x5a, 0xa3, 0x3e, 0x2f, 0x0b, 0x3e, 0xb2, 0x42, 0x96, + 0x2a, 0xa4, 0x89, 0xc8, 0x82, 0x31, 0x02, 0xad, 0xec, 0x69, 0x46, 0x0d, 0xb3, 0x4a, 0x68, 0xce, + 0xa9, 0xb4, 0xdc, 0x77, 0x25, 0x47, 0xbd, 0x4a, 0x7c, 0xec, 0x64, 0x65, 0xa4, 0xa1, 0xed, 0x2f, + 0x50, 0x00, 0xa9, 0x71, 0x3e, 0xf3, 0xea, 0x6b, 0x33, 0x03, 0xf4, 0x04, 0xdf, 0xe7, 0x25, 0x00, + 0x4f, 0x62, 0xe8, 0x5d, 0x90, 0xaf, 0xb8, 0x25, 0x4a, 0x2b, 0x32, 0xd3, 0x0f, 0x44, 0x8d, 0x45, + 0x48, 0xde, 0x2c, 0xaa, 0xfb, 0xdc, 0xad, 0x19, 0x49, 0x19, 0xab, 0x84, 0x86, 0xe2, 0x9d, 0x30, + 0xcc, 0x92, 0x41, 0x2a, 0x8d, 0x10, 0x13, 0xb1, 0x11, 0xe2, 0x34, 0xe1, 0xf5, 0xc6, 0xad, 0x19, + 0xc4, 0xba, 0xe5, 0x23, 0x96, 0x69, 0xdc, 0x08, 0x0c, 0x42, 0x08, 0x7c, 0x7d, 0xfa, 0x4d, 0x09, + 0x86, 0x17, 0x7d, 0x0f, 0x2c, 0x4e, 0xc1, 0x50, 0xc3, 0x34, 0xf4, 0xab, 0xb8, 0xe9, 0xee, 0x5c, + 0xb0, 0x22, 0x09, 0xed, 0xd8, 0x2f, 0x5b, 0x38, 0x07, 0xe2, 0x5e, 0xb4, 0x28, 0x13, 0xaa, 0xeb, + 0x78, 0xc7, 0xd6, 0xc5, 0x68, 0x28, 0xa2, 0x88, 0x2e, 0x41, 0xde, 0xc6, 0x95, 0x56, 0x53, 0x77, + 0x0e, 0xd4, 0x8a, 0x69, 0x38, 0x5a, 0x85, 0x2d, 0x70, 0xb2, 0xa5, 0x13, 0x6f, 0xdc, 0x9a, 0x39, + 0xc6, 0xda, 0x1a, 0xc6, 0x90, 0x95, 0x31, 0x01, 0x5a, 0x60, 0x10, 0x52, 0x43, 0x15, 0x3b, 0x9a, + 0x5e, 0x67, 0x27, 0x34, 0xb2, 0x8a, 0x28, 0xfa, 0xfa, 0xf2, 0x03, 0x19, 0xff, 0x0a, 0xe8, 0x12, + 0xe4, 0x4d, 0x0b, 0x37, 0x03, 0xb7, 0x52, 0xa4, 0x70, 0xcd, 0x61, 0x0c, 0x59, 0x19, 0x13, 0x20, + 0x71, 0x63, 0xc5, 0x09, 0x6c, 0x40, 0xb4, 0x76, 0xbc, 0xcb, 0xb1, 0x93, 0x6d, 0xa3, 0x51, 0x34, + 0x0e, 0x4a, 0x8f, 0x7b, 0xdc, 0xc3, 0x74, 0xf2, 0x67, 0x3f, 0xfd, 0xc8, 0x24, 0x57, 0x0d, 0x6f, + 0xfd, 0xf4, 0x2c, 0x3e, 0xf0, 0xef, 0x54, 0x50, 0x4c, 0x12, 0x74, 0xbf, 0xa4, 0xe9, 0x75, 0xf1, + 0x5b, 0x3f, 0x0a, 0x2f, 0xa1, 0x79, 0x18, 0xb4, 0x1d, 0xcd, 0x69, 0xd9, 0xfc, 0xd9, 0x17, 0x39, + 0x4a, 0xd5, 0x4a, 0xa6, 0x51, 0xdd, 0xa2, 0x98, 0x0a, 0xa7, 0x40, 0x97, 0x60, 0x90, 0xbf, 0xa7, + 0x93, 0xee, 0x7b, 0x7e, 0xd3, 0x87, 0x93, 0x18, 0x35, 0x91, 0x48, 0x15, 0xd7, 0x71, 0x8d, 0xdd, + 0xb1, 0xd8, 0xd3, 0x9a, 0x98, 0xdd, 0xbb, 0xca, 0x96, 0x56, 0xfa, 0x9e, 0x84, 0x5c, 0x52, 0x61, + 0x7e, 0xb2, 0x32, 0xe6, 0x82, 0xb6, 0x28, 0x04, 0x3d, 0x1b, 0x78, 0x09, 0x94, 0xef, 0x3f, 0xdf, + 0x13, 0xd5, 0x7d, 0x9f, 0x4e, 0x8b, 0xcb, 0x8a, 0xfe, 0x77, 0x44, 0x2f, 0x41, 0xbe, 0x65, 0xec, + 0x98, 0x06, 0xfd, 0x41, 0x0e, 0xbe, 0x1a, 0xca, 0x90, 0xc5, 0x93, 0x5f, 0x39, 0xc2, 0x18, 0xb2, + 0x32, 0xe6, 0x82, 0xf8, 0x8e, 0x59, 0x15, 0x46, 0x3d, 0x2c, 0x3a, 0x51, 0xb3, 0xb1, 0x13, 0xf5, + 0x6e, 0x3e, 0x51, 0x8f, 0x84, 0x6b, 0xf1, 0xe6, 0xea, 0x88, 0x0b, 0x24, 0x64, 0x68, 0x19, 0xc0, + 0x33, 0x0f, 0xee, 0xae, 0x75, 0xac, 0x8d, 0x11, 0x1b, 0x57, 0x1e, 0x2d, 0xfa, 0x2e, 0x98, 0x68, + 0xe8, 0x86, 0x6a, 0xe3, 0xfa, 0xae, 0xca, 0x05, 0x4c, 0x58, 0xd2, 0xfd, 0x80, 0xd2, 0x6a, 0x7f, + 0xfa, 0xf0, 0xc6, 0xad, 0x99, 0x02, 0x37, 0xa1, 0xed, 0x2c, 0x65, 0x65, 0xbc, 0xa1, 0x1b, 0x5b, + 0xb8, 0xbe, 0xbb, 0xe8, 0xc2, 0xd0, 0x5b, 0xe0, 0x84, 0xd7, 0x5b, 0xd3, 0x50, 0xf7, 0xcc, 0x7a, + 0x55, 0x6d, 0xe2, 0x5d, 0xb5, 0x42, 0xdf, 0xd7, 0xca, 0xd1, 0xd5, 0xeb, 0x31, 0x17, 0x65, 0xc3, + 0x58, 0x36, 0xeb, 0x55, 0x05, 0xef, 0x2e, 0x90, 0xcf, 0xe8, 0x1e, 0xf0, 0xc4, 0xa2, 0xea, 0x55, + 0x7b, 0x6a, 0x64, 0x36, 0x79, 0x2a, 0xa5, 0xe4, 0x5c, 0xe0, 0x4a, 0xd5, 0x9e, 0xcf, 0x7d, 0xf0, + 0xb5, 0x99, 0x01, 0x6e, 0x11, 0x06, 0xe4, 0xf3, 0xf4, 0xae, 0x3e, 0x9f, 0xc9, 0x98, 0x66, 0xfe, + 0x35, 0x51, 0xe0, 0x27, 0xbd, 0x3d, 0x00, 0xb3, 0x24, 0xaf, 0xfc, 0xfe, 0xac, 0x24, 0xff, 0xb4, + 0x04, 0x83, 0x8b, 0x57, 0x36, 0x35, 0xbd, 0x89, 0x56, 0x60, 0xdc, 0x53, 0xce, 0xa0, 0x1d, 0x39, + 0xf9, 0xc6, 0xad, 0x99, 0xa9, 0xb0, 0xfe, 0xba, 0x86, 0xc4, 0x9b, 0x23, 0xc2, 0x92, 0xac, 0x44, + 0x5d, 0x94, 0x0b, 0xb0, 0x6a, 0x43, 0x91, 0xdb, 0xaf, 0xd1, 0x85, 0xba, 0x59, 0x86, 0x21, 0xd6, + 0x5a, 0x1b, 0xcd, 0x43, 0xda, 0x22, 0xff, 0xf0, 0x3c, 0xfa, 0x74, 0xe4, 0xfc, 0xa0, 0xf8, 0xee, + 0xc5, 0x69, 0x42, 0x22, 0x7f, 0x38, 0x01, 0xb0, 0x78, 0xe5, 0xca, 0x76, 0x53, 0xb7, 0xea, 0xd8, + 0xb9, 0x9d, 0x3d, 0xdf, 0x86, 0x23, 0xbe, 0x5b, 0x59, 0xcd, 0x4a, 0xa8, 0xf7, 0xb3, 0x6f, 0xdc, + 0x9a, 0x39, 0x19, 0xee, 0xbd, 0x0f, 0x4d, 0x56, 0x26, 0xbc, 0xfb, 0x59, 0xcd, 0x4a, 0x47, 0xae, + 0x55, 0xdb, 0x71, 0xb9, 0x26, 0xa3, 0xb9, 0xfa, 0xd0, 0xfc, 0x5c, 0x17, 0x6d, 0xa7, 0xb3, 0x68, + 0xb7, 0x60, 0xd8, 0x13, 0x89, 0x8d, 0x16, 0x21, 0xe3, 0xf0, 0xff, 0xb9, 0x84, 0xe5, 0x68, 0x09, + 0x0b, 0x32, 0x71, 0x45, 0x44, 0x50, 0xca, 0x7f, 0x2a, 0x01, 0xf8, 0xa6, 0xc5, 0x5f, 0x48, 0x15, + 0x23, 0xde, 0x82, 0xdb, 0xf6, 0xe4, 0xa1, 0xa2, 0x41, 0x4e, 0x1d, 0x92, 0xe7, 0xf7, 0x27, 0x60, + 0xe2, 0xb2, 0x98, 0xb0, 0x7f, 0xe1, 0x65, 0xb0, 0x09, 0x43, 0xd8, 0x70, 0x9a, 0x3a, 0x16, 0x1b, + 0x69, 0x8f, 0x46, 0x8d, 0x76, 0x87, 0x3e, 0xd1, 0x1f, 0xad, 0x14, 0xb7, 0x72, 0x38, 0x9b, 0x90, + 0x34, 0xbe, 0x96, 0x84, 0xa9, 0x28, 0x4a, 0xb4, 0x00, 0x63, 0x95, 0x26, 0x66, 0x0f, 0xbd, 0xf9, + 0x13, 0xcb, 0xa5, 0x82, 0x17, 0xbc, 0x86, 0x10, 0x64, 0x65, 0x54, 0x40, 0xb8, 0x83, 0xaa, 0x01, + 0x89, 0x2c, 0x89, 0xda, 0xd1, 0xf7, 0xe2, 0x7a, 0x0b, 0x25, 0x65, 0xee, 0xa1, 0x44, 0x25, 0x41, + 0x06, 0xcc, 0x45, 0x8d, 0x7a, 0x50, 0xea, 0xa3, 0xde, 0x0b, 0x63, 0xe2, 0x88, 0xec, 0x8e, 0x56, + 0xd7, 0x8c, 0xca, 0x61, 0x02, 0x73, 0xe6, 0x55, 0x78, 0xb5, 0x21, 0x76, 0xb2, 0x22, 0xce, 0xe0, + 0x96, 0x18, 0x00, 0x2d, 0xc3, 0x90, 0xa8, 0x2a, 0x75, 0xa8, 0x80, 0x46, 0x90, 0xa3, 0xbb, 0x21, + 0xe7, 0x77, 0x2d, 0x34, 0x3e, 0x4a, 0x29, 0xc3, 0x3e, 0xcf, 0x12, 0xe7, 0xbb, 0x06, 0xbb, 0xfa, + 0x2e, 0x5f, 0x90, 0xfa, 0x87, 0x49, 0x18, 0x57, 0x70, 0xf5, 0xff, 0x8f, 0x75, 0x7f, 0x63, 0xbd, + 0x06, 0xc0, 0xec, 0x09, 0xb1, 0xe0, 0x87, 0x18, 0x6e, 0x62, 0x91, 0xb2, 0x8c, 0xc3, 0xa2, 0xed, + 0x7c, 0x33, 0x07, 0xfc, 0x56, 0x02, 0x72, 0xfe, 0x01, 0xff, 0x36, 0xf5, 0xab, 0x68, 0xc5, 0xb3, + 0xa5, 0xec, 0xd8, 0x77, 0xe4, 0x8b, 0x95, 0x6d, 0xd3, 0xa3, 0xbb, 0x11, 0xfd, 0x5f, 0x09, 0x18, + 0xe4, 0x1b, 0x9e, 0x95, 0xb6, 0x70, 0x5c, 0x8a, 0xbb, 0x4a, 0xd8, 0x3d, 0x1a, 0x7f, 0xb5, 0x43, + 0x34, 0xfe, 0x76, 0x18, 0x6d, 0x68, 0xfb, 0x6a, 0xe0, 0x20, 0x99, 0x74, 0x6a, 0xa4, 0x74, 0xdc, + 0xe3, 0x12, 0xfc, 0xce, 0x52, 0x0a, 0x57, 0xfc, 0xaf, 0x3e, 0x0d, 0x13, 0x0c, 0xcf, 0xb5, 0x10, + 0xf2, 0xa3, 0xde, 0xda, 0xdd, 0xf7, 0x51, 0x56, 0xa0, 0xa1, 0xed, 0x97, 0x59, 0x01, 0xad, 0x02, + 0xda, 0x73, 0xd3, 0x47, 0xaa, 0x27, 0x4e, 0x42, 0x7f, 0xd7, 0x1b, 0xb7, 0x66, 0x8e, 0x33, 0xfa, + 0x76, 0x1c, 0x59, 0x19, 0xf7, 0x80, 0x82, 0xdb, 0x13, 0x00, 0xa4, 0x5f, 0x2a, 0x7b, 0xf4, 0x96, + 0xad, 0x09, 0x8f, 0xbc, 0x71, 0x6b, 0x66, 0x9c, 0x71, 0xf1, 0xbe, 0xc9, 0x4a, 0x96, 0x14, 0x16, + 0xc9, 0xff, 0x3e, 0xcd, 0xfe, 0x84, 0x04, 0xc8, 0x73, 0x5a, 0xee, 0x91, 0xec, 0x65, 0x7a, 0xc6, + 0x56, 0x2c, 0x2d, 0xa4, 0xee, 0xab, 0x15, 0x8f, 0x5e, 0xac, 0x56, 0x7c, 0x33, 0xe5, 0x82, 0x67, + 0xe0, 0x13, 0x71, 0x2f, 0xc0, 0x72, 0x15, 0xe1, 0xf8, 0x6e, 0x2b, 0x07, 0xe4, 0xdf, 0x92, 0xe0, + 0x78, 0x9b, 0x46, 0xb9, 0x8d, 0x7d, 0x0f, 0xa0, 0xa6, 0xef, 0x23, 0xff, 0xe5, 0x69, 0x89, 0xdf, + 0x54, 0xea, 0x53, 0x41, 0xc7, 0x9b, 0x6d, 0x86, 0xfd, 0xb6, 0xf9, 0x28, 0xfe, 0xc4, 0xf0, 0x3f, + 0x95, 0x60, 0xd2, 0x5f, 0xbd, 0xdb, 0x91, 0x75, 0xc8, 0xf9, 0x6b, 0xe7, 0x5d, 0xb8, 0xb7, 0x97, + 0x2e, 0xf0, 0xd6, 0x07, 0xe8, 0xd1, 0x73, 0xde, 0x74, 0x65, 0x09, 0xc6, 0xc7, 0x7a, 0x96, 0x86, + 0xbb, 0xb9, 0x10, 0x9a, 0xb6, 0x29, 0x3a, 0x1e, 0x7f, 0x2e, 0x41, 0x6a, 0xd3, 0x34, 0xeb, 0xc8, + 0x84, 0x71, 0xc3, 0x74, 0x54, 0xa2, 0x59, 0xb8, 0xea, 0x7f, 0xe9, 0x37, 0x5b, 0x5a, 0xe8, 0x4f, + 0x48, 0x5f, 0xb9, 0x35, 0xd3, 0xce, 0x4a, 0x19, 0x33, 0x4c, 0xa7, 0x44, 0x21, 0xfc, 0xb1, 0xdf, + 0xef, 0x82, 0x91, 0x60, 0x65, 0xcc, 0x4a, 0x3e, 0xdf, 0x77, 0x65, 0x41, 0x36, 0x6f, 0xdc, 0x9a, + 0x99, 0xf4, 0x66, 0x8c, 0x0b, 0x96, 0x95, 0xdc, 0x8e, 0xaf, 0x76, 0xf6, 0x20, 0xde, 0xd7, 0xc8, + 0x18, 0x6e, 0x43, 0xfe, 0x4a, 0xf8, 0x2c, 0xd8, 0xdb, 0x61, 0xe8, 0x70, 0xc7, 0xca, 0x04, 0xd9, + 0xe9, 0x5f, 0x94, 0x00, 0xbc, 0xa4, 0x0f, 0x7a, 0x18, 0x8e, 0x95, 0x36, 0xd6, 0x17, 0xd5, 0xad, + 0xed, 0xe2, 0xf6, 0xe5, 0xad, 0xe0, 0x5b, 0xbb, 0xe2, 0x99, 0x02, 0xdb, 0xc2, 0x15, 0x7d, 0x57, + 0xc7, 0x55, 0x74, 0x3f, 0x4c, 0x06, 0xb1, 0x49, 0xa9, 0xbc, 0x98, 0x97, 0x0a, 0xb9, 0x1b, 0x37, + 0x67, 0x33, 0x2c, 0x46, 0xc5, 0x55, 0x74, 0x0a, 0x8e, 0xb4, 0xe3, 0xad, 0xac, 0x2f, 0xe5, 0x13, + 0x85, 0x91, 0x1b, 0x37, 0x67, 0xb3, 0x6e, 0x30, 0x8b, 0x64, 0x40, 0x7e, 0x4c, 0xce, 0x2f, 0x59, + 0x80, 0x1b, 0x37, 0x67, 0x07, 0xd9, 0xb0, 0x14, 0x52, 0x1f, 0xfc, 0xc4, 0xf4, 0xc0, 0xe9, 0x9f, + 0x94, 0x60, 0x74, 0xc5, 0xd8, 0x6d, 0x6a, 0x15, 0xf7, 0xbd, 0xe0, 0x27, 0xe0, 0xc4, 0xca, 0xfa, + 0x25, 0xa5, 0xb8, 0x10, 0xf1, 0x58, 0x70, 0x61, 0xe2, 0xc6, 0xcd, 0xd9, 0x31, 0x8f, 0xa8, 0xdc, + 0xb0, 0x9c, 0x03, 0x74, 0xa6, 0x9d, 0x6a, 0x71, 0xe3, 0x72, 0x69, 0xb5, 0xac, 0x6e, 0xad, 0x2c, + 0xad, 0xe7, 0xa5, 0xc2, 0xe8, 0x8d, 0x9b, 0xb3, 0xb0, 0x48, 0x7f, 0x1b, 0x77, 0x4b, 0xaf, 0x19, + 0xe8, 0x34, 0x4c, 0xb5, 0x13, 0x3c, 0xcf, 0x7e, 0x62, 0x3f, 0xc1, 0x7a, 0xbe, 0x68, 0x5e, 0x37, + 0x88, 0x27, 0x60, 0x6d, 0xbd, 0xed, 0xaf, 0x07, 0xff, 0xf1, 0x50, 0xe4, 0xce, 0x49, 0x0d, 0x1b, + 0xd8, 0xd6, 0xed, 0x43, 0xed, 0x9c, 0xf4, 0xb4, 0x1b, 0x23, 0xff, 0x4e, 0x1a, 0x72, 0x4b, 0xac, + 0x16, 0x7a, 0xd7, 0x0d, 0xbd, 0x05, 0x06, 0x03, 0x27, 0xac, 0x23, 0xb3, 0x07, 0x81, 0x17, 0x07, + 0x38, 0x0d, 0xb2, 0xf9, 0xad, 0x31, 0x76, 0x2e, 0xc1, 0x3b, 0xfd, 0x91, 0xeb, 0x2b, 0x2d, 0xc8, + 0xc2, 0x42, 0x9e, 0x81, 0x0b, 0xf3, 0x93, 0xd9, 0xcd, 0xb2, 0x6d, 0x02, 0x61, 0x2f, 0x0a, 0x7e, + 0x40, 0x82, 0x23, 0x14, 0xcb, 0x0b, 0x45, 0x28, 0xa6, 0x58, 0xb0, 0x9d, 0x8e, 0xea, 0xc2, 0xaa, + 0x66, 0x7b, 0xef, 0x83, 0xb1, 0x37, 0x00, 0xef, 0xe5, 0xa1, 0xc0, 0x49, 0x5f, 0xe5, 0x61, 0xb6, + 0xb2, 0x42, 0x8f, 0xc8, 0x07, 0x29, 0x6d, 0xb4, 0xd4, 0xe1, 0x42, 0x62, 0xcf, 0x3b, 0x32, 0xfe, + 0x93, 0xe5, 0xcf, 0xc0, 0xb0, 0x67, 0x4d, 0xed, 0xa9, 0x74, 0x4c, 0x8e, 0x21, 0x6c, 0xc3, 0xfd, + 0xc4, 0xe8, 0xfb, 0x24, 0x38, 0xe2, 0xc5, 0x33, 0x7e, 0xb6, 0x83, 0x94, 0xed, 0x43, 0x7d, 0x2c, + 0x66, 0xc3, 0xc2, 0xe9, 0xc8, 0x57, 0x56, 0x26, 0x5b, 0xed, 0xa4, 0x64, 0x19, 0x3d, 0xe2, 0xf7, + 0x2d, 0xe2, 0x04, 0x6f, 0x3f, 0xce, 0x29, 0xc8, 0x00, 0x15, 0x20, 0x83, 0xf7, 0x2d, 0xb3, 0xe9, + 0xe0, 0x2a, 0xcd, 0xdb, 0x66, 0x14, 0xb7, 0x2c, 0xaf, 0x03, 0x6a, 0x1f, 0xdc, 0xf0, 0x81, 0xa8, + 0x6c, 0x87, 0x03, 0x51, 0xfe, 0xa3, 0x4a, 0xf3, 0x99, 0x0f, 0xf2, 0x00, 0xe2, 0xb6, 0xcf, 0xf9, + 0x2f, 0x24, 0xe0, 0xb4, 0x7f, 0x8b, 0x91, 0x5e, 0x90, 0x72, 0xa7, 0xa8, 0xa5, 0xd5, 0x74, 0xc3, + 0xff, 0x72, 0xf6, 0x71, 0x7f, 0xc8, 0x43, 0x71, 0x85, 0x9c, 0xe4, 0x0f, 0x4a, 0x30, 0xbc, 0xa9, + 0xd5, 0xb0, 0x78, 0xb9, 0xa0, 0xfd, 0x30, 0xdb, 0x51, 0x18, 0x34, 0x77, 0x77, 0xc5, 0x3b, 0x48, + 0x29, 0x85, 0x97, 0x48, 0x9f, 0xeb, 0x7a, 0x43, 0x77, 0xf8, 0x85, 0x11, 0x56, 0x40, 0x33, 0x30, + 0x4c, 0x17, 0x37, 0x6c, 0xca, 0xf1, 0x5b, 0xa7, 0x40, 0x41, 0x74, 0xca, 0x11, 0x21, 0x36, 0xf1, + 0x35, 0xdc, 0xb4, 0xd9, 0x2f, 0x92, 0x67, 0x14, 0x51, 0x94, 0x9f, 0x86, 0x1c, 0x6b, 0x09, 0x0f, + 0x47, 0x8e, 0x43, 0x86, 0xbe, 0xce, 0xe7, 0xb5, 0x67, 0x88, 0x94, 0xf9, 0xd1, 0x30, 0xc6, 0x9f, + 0x35, 0x89, 0x15, 0x4a, 0xa5, 0x48, 0x29, 0x9f, 0x8a, 0xb7, 0x1a, 0x4c, 0x86, 0xae, 0x84, 0x7f, + 0x2d, 0x0d, 0x47, 0xf8, 0x06, 0xb0, 0x66, 0xe9, 0x67, 0xf6, 0x1c, 0x47, 0xbc, 0xb7, 0x0d, 0x7c, + 0x1d, 0xa0, 0x59, 0xba, 0x7c, 0x00, 0xa9, 0x65, 0xc7, 0xb1, 0xd0, 0x69, 0x48, 0x37, 0x5b, 0x75, + 0xd7, 0xf1, 0xba, 0xbb, 0x3a, 0x9a, 0xa5, 0xcf, 0x11, 0x04, 0xa5, 0x55, 0xc7, 0x0a, 0x43, 0x41, + 0x65, 0x98, 0xd9, 0x6d, 0xd5, 0xeb, 0x07, 0x6a, 0x15, 0x57, 0xcc, 0x2a, 0x56, 0x9b, 0xd8, 0xc6, + 0xcd, 0x6b, 0xb8, 0xaa, 0xe2, 0x7d, 0x4b, 0x33, 0xdc, 0x0b, 0x3a, 0x19, 0xe5, 0x24, 0x45, 0x5b, + 0xa4, 0x58, 0x0a, 0x47, 0x2a, 0x0b, 0x1c, 0xf9, 0xf7, 0x12, 0x90, 0x11, 0xac, 0xe9, 0x83, 0xc3, + 0xb8, 0x8e, 0x2b, 0x8e, 0x7b, 0xab, 0xc8, 0x2d, 0x23, 0x04, 0xc9, 0x1a, 0x1f, 0xbc, 0xec, 0xf2, + 0x80, 0x42, 0x0a, 0x04, 0xe6, 0x3e, 0x03, 0x4d, 0x60, 0x56, 0x8b, 0x8c, 0x67, 0xca, 0x32, 0xc5, + 0xc2, 0x78, 0x79, 0x40, 0xa1, 0x25, 0x34, 0x05, 0x83, 0x64, 0xd2, 0x38, 0x6c, 0xb4, 0x08, 0x9c, + 0x97, 0xd1, 0x51, 0x48, 0x5b, 0x9a, 0x53, 0x61, 0x2f, 0x34, 0x92, 0x0f, 0xac, 0x88, 0x9e, 0x84, + 0x41, 0xf6, 0x4b, 0x3e, 0xfc, 0xc2, 0xc8, 0x5d, 0x7e, 0x61, 0xb0, 0x9f, 0x4c, 0x26, 0xed, 0xde, + 0xd4, 0x1c, 0x07, 0x37, 0x0d, 0x7a, 0x2d, 0x8d, 0x02, 0x11, 0x82, 0xd4, 0x8e, 0x59, 0x65, 0xd7, + 0x02, 0xb3, 0x0a, 0xfd, 0x9f, 0x9d, 0x0a, 0x67, 0xfa, 0xa0, 0xd2, 0x8f, 0x39, 0x76, 0xed, 0x40, + 0x00, 0x4b, 0x04, 0xa9, 0x0c, 0x13, 0x5a, 0xb5, 0xaa, 0x13, 0x85, 0x27, 0xeb, 0x7f, 0x9d, 0x1a, + 0x0f, 0x7b, 0x6a, 0xb8, 0xcb, 0x58, 0x20, 0x8f, 0xa0, 0xc4, 0xf1, 0x4b, 0x59, 0x18, 0xb2, 0x58, + 0xa3, 0xe4, 0x8b, 0x30, 0xde, 0xd6, 0x52, 0xd2, 0xbe, 0xab, 0x3a, 0x3f, 0xc1, 0x9a, 0x55, 0xe8, + 0xff, 0x9d, 0xae, 0x62, 0x97, 0xde, 0x17, 0xfd, 0x84, 0xfa, 0xa8, 0xef, 0x09, 0x75, 0xcd, 0xd2, + 0x4b, 0x59, 0xca, 0x9f, 0x3f, 0x9c, 0x5e, 0x6c, 0x7f, 0x38, 0xbd, 0x86, 0x0d, 0xe1, 0x98, 0xc9, + 0x27, 0xcd, 0xd2, 0x6d, 0xaa, 0x8e, 0xde, 0x8f, 0xae, 0xdb, 0x17, 0x7d, 0xff, 0xd3, 0x77, 0xd4, + 0x53, 0x4b, 0xc5, 0xcd, 0x15, 0x57, 0x8f, 0x7f, 0x35, 0x01, 0x27, 0x7d, 0x7a, 0xec, 0x43, 0x6e, + 0x57, 0xe7, 0x42, 0x67, 0x8d, 0xef, 0xe1, 0xf7, 0x6c, 0x9e, 0x85, 0x14, 0xc1, 0x47, 0xd3, 0x1d, + 0x7e, 0x75, 0xc6, 0xd9, 0x33, 0xdd, 0xdf, 0x88, 0xf9, 0xd9, 0xcf, 0xfe, 0x63, 0x39, 0xb8, 0xef, + 0x19, 0x18, 0x15, 0xca, 0xa4, 0xf4, 0x7d, 0xbd, 0xcb, 0x2f, 0xef, 0xfd, 0xde, 0xbc, 0x7d, 0xfb, + 0xc4, 0x18, 0x96, 0xe1, 0x97, 0xce, 0x45, 0xfe, 0xde, 0x09, 0x33, 0xa6, 0xdd, 0xe3, 0xab, 0x3e, + 0x2c, 0x75, 0xd4, 0x73, 0xd2, 0xdd, 0x46, 0xb0, 0xc7, 0x48, 0x6d, 0x1f, 0x8e, 0xd2, 0xa3, 0x69, + 0x5e, 0x0e, 0x41, 0x98, 0xfc, 0xa3, 0xee, 0x7e, 0xb0, 0xc4, 0xaf, 0x03, 0x89, 0xbd, 0x5e, 0xf0, + 0xda, 0xc7, 0x57, 0xcf, 0xf7, 0xcf, 0x45, 0xba, 0x92, 0x39, 0x9f, 0x1b, 0x51, 0x7c, 0x94, 0xf2, + 0x4f, 0x49, 0x70, 0xac, 0xad, 0x6a, 0x6e, 0xe3, 0x97, 0x3a, 0xbc, 0x7c, 0x7d, 0xa8, 0xa0, 0x67, + 0xa9, 0x43, 0x63, 0x1f, 0x88, 0x6d, 0x2c, 0x6b, 0x45, 0xa0, 0xb5, 0x6f, 0x83, 0x23, 0xc1, 0xc6, + 0x0a, 0x31, 0xdd, 0x07, 0xa3, 0xc1, 0x84, 0x3f, 0x17, 0xd7, 0x48, 0x20, 0xe5, 0x2f, 0xab, 0x61, + 0x39, 0xbb, 0x7d, 0x2d, 0xb7, 0x9f, 0x56, 0xee, 0xb9, 0xab, 0x1e, 0xa5, 0xfc, 0x61, 0x09, 0x66, + 0x83, 0x35, 0xf8, 0xe2, 0xa4, 0xfe, 0x1a, 0x7b, 0xdb, 0x86, 0xf8, 0xcb, 0x12, 0xdc, 0xdd, 0xa5, + 0x4d, 0x5c, 0x00, 0x2f, 0xc3, 0xa4, 0x2f, 0x4d, 0x22, 0x4c, 0xb8, 0x18, 0xf6, 0xd3, 0xf1, 0x11, + 0xaa, 0x9b, 0x15, 0x38, 0x41, 0x84, 0xf2, 0xa9, 0x2f, 0xcc, 0x4c, 0xb4, 0x7f, 0xb3, 0x95, 0x89, + 0xf6, 0xd4, 0xc6, 0x6d, 0xd4, 0x8f, 0x8f, 0x4a, 0xf0, 0x60, 0xb0, 0xab, 0x1d, 0x42, 0xdd, 0x6f, + 0xd5, 0x38, 0xfc, 0x7b, 0x09, 0x4e, 0xf7, 0xd2, 0x38, 0x3e, 0x20, 0x3b, 0x30, 0xe1, 0x05, 0xe1, + 0xe1, 0xf1, 0xe8, 0x2b, 0xb4, 0x67, 0x5a, 0x8a, 0x5c, 0x6e, 0x77, 0x40, 0xf0, 0x16, 0x9f, 0x58, + 0xfe, 0x21, 0x77, 0x85, 0x1c, 0x4c, 0x75, 0x0b, 0x21, 0x07, 0x92, 0xdd, 0x1d, 0xc6, 0x22, 0xd1, + 0x61, 0x2c, 0xbc, 0xa8, 0x5d, 0xbe, 0xc6, 0xed, 0x56, 0x87, 0x04, 0xe5, 0x3b, 0x61, 0xa2, 0x83, + 0x2a, 0xf3, 0x59, 0xdd, 0x87, 0x26, 0x2b, 0xa8, 0x5d, 0x59, 0xe5, 0x03, 0x98, 0xa1, 0xf5, 0x76, + 0x10, 0xf4, 0x9d, 0xee, 0x72, 0x83, 0xdb, 0x96, 0x8e, 0x55, 0xf3, 0xbe, 0xaf, 0xc0, 0x20, 0x1b, + 0x67, 0xde, 0xdd, 0x43, 0x28, 0x0a, 0x67, 0x20, 0xff, 0x88, 0xb0, 0x65, 0x8b, 0xa2, 0xd9, 0x9d, + 0xe7, 0x50, 0x2f, 0x7d, 0xbd, 0x4d, 0x73, 0xc8, 0x27, 0x8c, 0xcf, 0x0b, 0xab, 0xd6, 0xb9, 0x75, + 0x5c, 0x1c, 0x95, 0xdb, 0x66, 0xd5, 0xf8, 0x4b, 0x35, 0x77, 0xd4, 0x7c, 0xfd, 0xb8, 0x30, 0x5f, + 0x6e, 0x9f, 0x62, 0xcc, 0xd7, 0xb7, 0x46, 0xf4, 0xae, 0x21, 0x8b, 0x69, 0xe6, 0x5f, 0x46, 0x43, + 0xf6, 0x35, 0x09, 0x8e, 0xd3, 0xbe, 0xf9, 0x73, 0x14, 0xfd, 0x8a, 0xfc, 0x61, 0x40, 0x76, 0xb3, + 0xa2, 0x76, 0x9c, 0xdd, 0x79, 0xbb, 0x59, 0xb9, 0x12, 0xf0, 0x2f, 0x0f, 0x03, 0xaa, 0x06, 0x32, + 0x51, 0x14, 0x9b, 0x9d, 0xb3, 0xcc, 0x57, 0x7d, 0x89, 0x8e, 0x0e, 0xc3, 0x99, 0xba, 0x0d, 0xc3, + 0xf9, 0x39, 0x09, 0x0a, 0x9d, 0xba, 0xcc, 0x87, 0x4f, 0x87, 0xa3, 0x81, 0x1d, 0x94, 0xf0, 0x08, + 0x3e, 0xdc, 0x4b, 0x96, 0x27, 0x34, 0x8d, 0x8e, 0x34, 0xf1, 0x9d, 0x8e, 0x03, 0x66, 0x82, 0x1a, + 0xda, 0x1e, 0x59, 0x7f, 0xcb, 0xa6, 0xcf, 0xa7, 0xdb, 0xec, 0xea, 0x5f, 0x8a, 0xd8, 0x7b, 0x1f, + 0xa6, 0x23, 0x5a, 0x7d, 0xa7, 0xfd, 0xde, 0x5e, 0xe4, 0x60, 0xde, 0xee, 0xf0, 0xfd, 0x09, 0x3e, + 0x13, 0x82, 0x67, 0xf8, 0x7d, 0x6b, 0xb1, 0x8e, 0xcf, 0x80, 0xbd, 0x03, 0x4e, 0x74, 0xa4, 0xe2, + 0x6d, 0x9b, 0x87, 0xd4, 0x9e, 0x6e, 0x8b, 0x07, 0xbe, 0xee, 0x8f, 0x6a, 0x56, 0x88, 0x9a, 0xd2, + 0xc8, 0x08, 0xf2, 0x94, 0xf5, 0xa6, 0x69, 0xd6, 0x79, 0x33, 0xe4, 0x67, 0x61, 0xdc, 0x07, 0xe3, + 0x95, 0x9c, 0x87, 0x94, 0x65, 0xf2, 0x5f, 0xbb, 0x1a, 0x3e, 0x7b, 0x32, 0x32, 0xb1, 0x6f, 0x9a, + 0x75, 0xde, 0x6d, 0x8a, 0x2f, 0x4f, 0x02, 0x62, 0xcc, 0xd8, 0x4d, 0x63, 0x5e, 0xc5, 0x16, 0x4c, + 0x04, 0xa0, 0xbc, 0x92, 0x37, 0xb5, 0x7f, 0x70, 0xf6, 0x2b, 0x47, 0xc4, 0xfd, 0xad, 0x1f, 0x96, + 0x02, 0x3f, 0x47, 0x39, 0x17, 0xc5, 0xa6, 0xf3, 0x9a, 0xb8, 0x70, 0xa6, 0x67, 0x7c, 0x1e, 0xb3, + 0x9d, 0x7e, 0xdf, 0xbf, 0xf9, 0xd2, 0x47, 0x12, 0xf7, 0x22, 0xf9, 0x4c, 0xc4, 0x6a, 0xdc, 0x37, + 0x5f, 0x3e, 0x19, 0xf8, 0x29, 0xa5, 0x47, 0x7a, 0xab, 0x4a, 0xb4, 0x6c, 0xae, 0x57, 0x74, 0xde, + 0xb0, 0x8b, 0xb4, 0x61, 0xe7, 0xd0, 0xe3, 0xf1, 0x0d, 0x3b, 0xf3, 0x9d, 0xc1, 0x49, 0xf3, 0xdd, + 0xe8, 0x77, 0x24, 0x98, 0xec, 0xb4, 0xa4, 0x43, 0x4f, 0xf5, 0xd6, 0x8a, 0xf6, 0x90, 0xa2, 0x70, + 0xe1, 0x10, 0x94, 0xbc, 0x2b, 0x4b, 0xb4, 0x2b, 0x45, 0xf4, 0xf4, 0x21, 0xba, 0x72, 0xc6, 0x9f, + 0xfa, 0xff, 0xdf, 0x12, 0xdc, 0xd5, 0x75, 0x85, 0x84, 0x8a, 0xbd, 0xb5, 0xb2, 0x4b, 0xec, 0x54, + 0x28, 0xbd, 0x19, 0x16, 0xbc, 0xc7, 0xcf, 0xd1, 0x1e, 0x3f, 0x8b, 0x56, 0x0e, 0xd3, 0xe3, 0x8e, + 0xfb, 0x2b, 0xe8, 0xd7, 0x83, 0x07, 0x47, 0xbb, 0xab, 0x53, 0xdb, 0xc2, 0x23, 0x66, 0x62, 0xb4, + 0x07, 0xb5, 0xf2, 0x0b, 0xb4, 0x0b, 0x0a, 0xda, 0x7c, 0x93, 0x83, 0x76, 0xe6, 0x3b, 0x83, 0x86, + 0xff, 0xbb, 0xd1, 0x9f, 0x48, 0x9d, 0xcf, 0x81, 0x3e, 0xd9, 0xb5, 0x89, 0xd1, 0x8b, 0xaa, 0xc2, + 0x53, 0xfd, 0x13, 0xf2, 0x4e, 0x36, 0x68, 0x27, 0x6b, 0x08, 0xdf, 0xee, 0x4e, 0x76, 0x1c, 0x44, + 0xf4, 0x9b, 0x12, 0x4c, 0x76, 0x5a, 0x93, 0xc4, 0x4c, 0xcb, 0x2e, 0x8b, 0xac, 0x98, 0x69, 0xd9, + 0x6d, 0x01, 0x24, 0xbf, 0x85, 0x76, 0xfe, 0x3c, 0x7a, 0x22, 0xaa, 0xf3, 0x5d, 0x47, 0x91, 0xcc, + 0xc5, 0xae, 0x41, 0x7e, 0xcc, 0x5c, 0xec, 0x65, 0x1d, 0x13, 0x33, 0x17, 0x7b, 0x5a, 0x63, 0xc4, + 0xcf, 0x45, 0xb7, 0x67, 0x3d, 0x0e, 0xa3, 0x8d, 0x7e, 0x95, 0x3e, 0xf4, 0xe5, 0x87, 0x3c, 0xd6, + 0xb5, 0xa1, 0x9d, 0x16, 0x0c, 0x85, 0xb3, 0xfd, 0x90, 0xf0, 0xbe, 0xac, 0xd0, 0xbe, 0x2c, 0xa0, + 0xe2, 0x61, 0xfa, 0x12, 0xdc, 0x46, 0xfd, 0x9c, 0x04, 0x13, 0x1d, 0xa2, 0xcc, 0x98, 0x59, 0x18, + 0x1d, 0x34, 0x17, 0x9e, 0xea, 0x9f, 0x90, 0xf7, 0xea, 0x12, 0xed, 0xd5, 0xdb, 0xd1, 0xdb, 0x0e, + 0xd3, 0x2b, 0x9f, 0x7f, 0xbe, 0xe5, 0x1d, 0x4a, 0xf3, 0xd5, 0x83, 0xce, 0xf7, 0xd9, 0x30, 0xd1, + 0xa1, 0x27, 0xfb, 0xa6, 0xe3, 0xfd, 0x79, 0x9e, 0xf6, 0xe7, 0x39, 0xb4, 0xf1, 0xe6, 0xfa, 0xd3, + 0xee, 0xd6, 0x7f, 0xa1, 0xfd, 0x0e, 0x69, 0x77, 0x2d, 0xea, 0x18, 0xac, 0x16, 0x1e, 0xef, 0x8b, + 0x86, 0x77, 0xea, 0x29, 0xda, 0xa9, 0xb3, 0xe8, 0xd1, 0xa8, 0x4e, 0xf9, 0x4e, 0x1e, 0xea, 0xc6, + 0xae, 0x79, 0xe6, 0x3b, 0x59, 0x08, 0xfc, 0xdd, 0xe8, 0x7b, 0xc4, 0xa9, 0xaf, 0x53, 0x5d, 0xeb, + 0xf5, 0xc5, 0xb1, 0x85, 0x07, 0x7b, 0xc0, 0xe4, 0xed, 0xba, 0x97, 0xb6, 0x6b, 0x1a, 0x9d, 0x8c, + 0x6a, 0x17, 0x89, 0x65, 0xd1, 0x87, 0x24, 0xf7, 0xa0, 0xe8, 0xe9, 0xee, 0xbc, 0xfd, 0xc1, 0x6e, + 0xe1, 0xa1, 0x9e, 0x70, 0x79, 0x4b, 0xee, 0xa7, 0x2d, 0x99, 0x45, 0xd3, 0x91, 0x2d, 0x61, 0xa1, + 0xef, 0xed, 0x3e, 0x54, 0xf0, 0x7f, 0x8e, 0xc2, 0x4c, 0x44, 0x8d, 0xce, 0x7e, 0xcc, 0x1e, 0x57, + 0x97, 0x7b, 0xd6, 0x87, 0xfb, 0x39, 0x85, 0x37, 0x73, 0xbb, 0xba, 0xb7, 0x0d, 0xb1, 0xdf, 0x4e, + 0x01, 0x5a, 0xb3, 0x6b, 0x0b, 0x4d, 0xac, 0x39, 0xbe, 0xdf, 0x07, 0x0d, 0xdd, 0x11, 0x94, 0xde, + 0xd4, 0x1d, 0xc1, 0xb5, 0xc0, 0xad, 0xbb, 0x44, 0x7f, 0x37, 0x7b, 0x7b, 0xbe, 0x7a, 0x97, 0xfc, + 0xe6, 0x5c, 0xbd, 0xeb, 0x78, 0xe8, 0x3c, 0x75, 0xfb, 0xee, 0xd7, 0xa4, 0x0f, 0x7b, 0xc7, 0x88, + 0xdf, 0xa8, 0x1d, 0xec, 0x72, 0xa3, 0x76, 0x2a, 0xf2, 0xda, 0x2c, 0xa7, 0xa6, 0x4f, 0x51, 0xb9, + 0x0f, 0x60, 0xf6, 0x70, 0x4c, 0x98, 0xff, 0x7c, 0xbe, 0x97, 0x42, 0x38, 0x09, 0x85, 0x76, 0x75, + 0x72, 0x27, 0xf5, 0x47, 0x92, 0x90, 0x5f, 0xb3, 0x6b, 0xe5, 0xaa, 0xee, 0xdc, 0x21, 0x5d, 0x7b, + 0x3a, 0xfa, 0xce, 0x12, 0x7a, 0xe3, 0xd6, 0xcc, 0x28, 0x93, 0x69, 0x17, 0x49, 0x36, 0x60, 0x2c, + 0x74, 0x19, 0x9d, 0x6b, 0xd6, 0xe2, 0x61, 0xee, 0xc4, 0x87, 0x58, 0xc9, 0xf4, 0x06, 0x88, 0x4f, + 0xbf, 0xd1, 0x7e, 0x67, 0x65, 0x66, 0x0a, 0xb5, 0x7c, 0x07, 0x15, 0xd9, 0x37, 0x66, 0x05, 0x98, + 0x0a, 0x0f, 0x8a, 0x3b, 0x62, 0xaf, 0x4b, 0x30, 0xbc, 0x66, 0x8b, 0x50, 0x10, 0xff, 0x05, 0xbd, + 0x5e, 0xf6, 0x24, 0x0c, 0x6a, 0x0d, 0x7a, 0x9b, 0x24, 0xd9, 0x9b, 0xde, 0x72, 0x74, 0x7e, 0x92, + 0xfa, 0x08, 0x4c, 0xf8, 0xfa, 0xe8, 0xf6, 0xfd, 0xb3, 0x09, 0x6a, 0x1b, 0xe9, 0xd3, 0x2e, 0x6e, + 0x04, 0x89, 0xbf, 0x5d, 0xaf, 0x9d, 0x78, 0x32, 0x4e, 0x1d, 0x46, 0xc6, 0x57, 0xa9, 0x61, 0x08, + 0xc9, 0xd2, 0x4d, 0x78, 0xad, 0xb5, 0xdf, 0xb8, 0xea, 0xe7, 0x47, 0x33, 0x42, 0xf7, 0xaa, 0xe4, + 0x2f, 0x49, 0x30, 0xb2, 0x66, 0xd7, 0x2e, 0x1b, 0xd5, 0xff, 0xa7, 0xf5, 0x76, 0x17, 0x8e, 0x04, + 0x7a, 0x79, 0x87, 0xc4, 0x79, 0xf6, 0xa3, 0x29, 0x48, 0xae, 0xd9, 0x35, 0xf4, 0x5e, 0x18, 0x0b, + 0x07, 0x0a, 0x91, 0xf1, 0x5f, 0xbb, 0x17, 0x88, 0x5e, 0xa3, 0x45, 0x7b, 0x0c, 0x74, 0x15, 0x46, + 0x82, 0xde, 0xe2, 0x54, 0x17, 0x26, 0x01, 0xcc, 0xc2, 0xa3, 0xbd, 0x62, 0xba, 0x95, 0xbd, 0x0b, + 0x32, 0xae, 0xa1, 0xbb, 0xa7, 0x0b, 0xb5, 0x40, 0x8a, 0x8e, 0x68, 0x3b, 0x98, 0x13, 0x22, 0xbd, + 0xb0, 0x29, 0xe9, 0x26, 0xbd, 0x10, 0x6e, 0x57, 0xe9, 0x45, 0x4d, 0xab, 0x1d, 0x00, 0xdf, 0x1c, + 0xb8, 0xaf, 0x0b, 0x07, 0x0f, 0xad, 0xf0, 0x48, 0x4f, 0x68, 0xee, 0x46, 0xd3, 0x6d, 0x0e, 0xc0, + 0xff, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0c, 0x97, 0xcb, 0xb2, 0x05, 0xc2, 0x00, 0x00, + } + r := bytes.NewReader(gzipped) + gzipr, err := compress_gzip.NewReader(r) + if err != nil { + panic(err) + } + ungzipped, err := io_ioutil.ReadAll(gzipr) + if err != nil { + panic(err) + } + if err := github_com_gogo_protobuf_proto.Unmarshal(ungzipped, d); err != nil { + panic(err) + } + return d +} +func (this *CommissionRates) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*CommissionRates) + if !ok { + that2, ok := that.(CommissionRates) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Rate.Equal(that1.Rate) { + return false + } + if !this.MaxRate.Equal(that1.MaxRate) { + return false + } + if !this.MaxChangeRate.Equal(that1.MaxChangeRate) { + return false + } + return true +} +func (this *Commission) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Commission) + if !ok { + that2, ok := that.(Commission) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.CommissionRates.Equal(&that1.CommissionRates) { + return false + } + if !this.UpdateTime.Equal(that1.UpdateTime) { + return false + } + return true +} +func (this *Description) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Description) + if !ok { + that2, ok := that.(Description) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Moniker != that1.Moniker { + return false + } + if this.Identity != that1.Identity { + return false + } + if this.Website != that1.Website { + return false + } + if this.SecurityContact != that1.SecurityContact { + return false + } + if this.Details != that1.Details { + return false + } + return true +} +func (this *Params) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Params) + if !ok { + that2, ok := that.(Params) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.UnbondingTime != that1.UnbondingTime { + return false + } + if this.MaxValidators != that1.MaxValidators { + return false + } + if this.MaxEntries != that1.MaxEntries { + return false + } + if this.HistoricalEntries != that1.HistoricalEntries { + return false + } + if this.BondDenom != that1.BondDenom { + return false + } + return true +} + +func (m *CommissionRates) 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 *CommissionRates) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CommissionRates) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.MaxChangeRate.Size() + i -= size + if _, err := m.MaxChangeRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size := m.MaxRate.Size() + i -= size + if _, err := m.MaxRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size := m.Rate.Size() + i -= size + if _, err := m.Rate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Commission) 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 *Commission) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Commission) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.UpdateTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.UpdateTime):]) + if err2 != nil { + return 0, err2 + } + i -= n2 + i = encodeVarintStaking(dAtA, i, uint64(n2)) + i-- + dAtA[i] = 0x12 + { + size, err := m.CommissionRates.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Description) 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 *Description) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Description) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Details) > 0 { + i -= len(m.Details) + copy(dAtA[i:], m.Details) + i = encodeVarintStaking(dAtA, i, uint64(len(m.Details))) + i-- + dAtA[i] = 0x2a + } + if len(m.SecurityContact) > 0 { + i -= len(m.SecurityContact) + copy(dAtA[i:], m.SecurityContact) + i = encodeVarintStaking(dAtA, i, uint64(len(m.SecurityContact))) + i-- + dAtA[i] = 0x22 + } + if len(m.Website) > 0 { + i -= len(m.Website) + copy(dAtA[i:], m.Website) + i = encodeVarintStaking(dAtA, i, uint64(len(m.Website))) + i-- + dAtA[i] = 0x1a + } + if len(m.Identity) > 0 { + i -= len(m.Identity) + copy(dAtA[i:], m.Identity) + i = encodeVarintStaking(dAtA, i, uint64(len(m.Identity))) + i-- + dAtA[i] = 0x12 + } + if len(m.Moniker) > 0 { + i -= len(m.Moniker) + copy(dAtA[i:], m.Moniker) + i = encodeVarintStaking(dAtA, i, uint64(len(m.Moniker))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Validator) 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 *Validator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.UnbondingIds) > 0 { + dAtA5 := make([]byte, len(m.UnbondingIds)*10) + var j4 int + for _, num := range m.UnbondingIds { + for num >= 1<<7 { + dAtA5[j4] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j4++ + } + dAtA5[j4] = uint8(num) + j4++ + } + i -= j4 + copy(dAtA[i:], dAtA5[:j4]) + i = encodeVarintStaking(dAtA, i, uint64(j4)) + i-- + dAtA[i] = 0x6a + } + if m.UnbondingOnHoldRefCount != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.UnbondingOnHoldRefCount)) + i-- + dAtA[i] = 0x60 + } + { + size := m.MinSelfDelegation.Size() + i -= size + if _, err := m.MinSelfDelegation.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + { + size, err := m.Commission.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.UnbondingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.UnbondingTime):]) + if err7 != nil { + return 0, err7 + } + i -= n7 + i = encodeVarintStaking(dAtA, i, uint64(n7)) + i-- + dAtA[i] = 0x4a + if m.UnbondingHeight != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.UnbondingHeight)) + i-- + dAtA[i] = 0x40 + } + { + size, err := m.Description.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size := m.DelegatorShares.Size() + i -= size + if _, err := m.DelegatorShares.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + { + size := m.Tokens.Size() + i -= size + if _, err := m.Tokens.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if m.Status != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x20 + } + if m.Jailed { + i-- + if m.Jailed { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if m.ConsensusPubkey != nil { + { + size, err := m.ConsensusPubkey.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.OperatorAddress) > 0 { + i -= len(m.OperatorAddress) + copy(dAtA[i:], m.OperatorAddress) + i = encodeVarintStaking(dAtA, i, uint64(len(m.OperatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Delegation) 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 *Delegation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Delegation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.Shares.Size() + i -= size + if _, err := m.Shares.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintStaking(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintStaking(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Params) 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 *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.BondDenom) > 0 { + i -= len(m.BondDenom) + copy(dAtA[i:], m.BondDenom) + i = encodeVarintStaking(dAtA, i, uint64(len(m.BondDenom))) + i-- + dAtA[i] = 0x2a + } + if m.HistoricalEntries != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.HistoricalEntries)) + i-- + dAtA[i] = 0x20 + } + if m.MaxEntries != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.MaxEntries)) + i-- + dAtA[i] = 0x18 + } + if m.MaxValidators != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.MaxValidators)) + i-- + dAtA[i] = 0x10 + } + n12, err12 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.UnbondingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingTime):]) + if err12 != nil { + return 0, err12 + } + i -= n12 + i = encodeVarintStaking(dAtA, i, uint64(n12)) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintStaking(dAtA []byte, offset int, v uint64) int { + offset -= sovStaking(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} + +func (m *CommissionRates) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Rate.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.MaxRate.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.MaxChangeRate.Size() + n += 1 + l + sovStaking(uint64(l)) + return n +} + +func (m *Commission) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.CommissionRates.Size() + n += 1 + l + sovStaking(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.UpdateTime) + n += 1 + l + sovStaking(uint64(l)) + return n +} + +func (m *Description) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Moniker) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = len(m.Identity) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = len(m.Website) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = len(m.SecurityContact) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = len(m.Details) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + return n +} + +func (m *Validator) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.OperatorAddress) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + if m.ConsensusPubkey != nil { + l = m.ConsensusPubkey.Size() + n += 1 + l + sovStaking(uint64(l)) + } + if m.Jailed { + n += 2 + } + if m.Status != 0 { + n += 1 + sovStaking(uint64(m.Status)) + } + l = m.Tokens.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.DelegatorShares.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.Description.Size() + n += 1 + l + sovStaking(uint64(l)) + if m.UnbondingHeight != 0 { + n += 1 + sovStaking(uint64(m.UnbondingHeight)) + } + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.UnbondingTime) + n += 1 + l + sovStaking(uint64(l)) + l = m.Commission.Size() + n += 1 + l + sovStaking(uint64(l)) + l = m.MinSelfDelegation.Size() + n += 1 + l + sovStaking(uint64(l)) + if m.UnbondingOnHoldRefCount != 0 { + n += 1 + sovStaking(uint64(m.UnbondingOnHoldRefCount)) + } + if len(m.UnbondingIds) > 0 { + l = 0 + for _, e := range m.UnbondingIds { + l += sovStaking(uint64(e)) + } + n += 1 + sovStaking(uint64(l)) + l + } + return n +} + +func (m *Delegation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + l = m.Shares.Size() + n += 1 + l + sovStaking(uint64(l)) + return n +} + +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingTime) + n += 1 + l + sovStaking(uint64(l)) + if m.MaxValidators != 0 { + n += 1 + sovStaking(uint64(m.MaxValidators)) + } + if m.MaxEntries != 0 { + n += 1 + sovStaking(uint64(m.MaxEntries)) + } + if m.HistoricalEntries != 0 { + n += 1 + sovStaking(uint64(m.HistoricalEntries)) + } + l = len(m.BondDenom) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + return n +} + +func sovStaking(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozStaking(x uint64) (n int) { + return sovStaking(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} + +func valueToStringStaking(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} + +func (m *CommissionRates) 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 ErrIntOverflowStaking + } + 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: CommissionRates: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CommissionRates: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Rate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxChangeRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxChangeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Commission) 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 ErrIntOverflowStaking + } + 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: Commission: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Commission: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommissionRates", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CommissionRates.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.UpdateTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Description) 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 ErrIntOverflowStaking + } + 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: Description: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Description: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Moniker", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Moniker = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Identity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Identity = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Website", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Website = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecurityContact", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SecurityContact = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Details", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Details = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Validator) 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 ErrIntOverflowStaking + } + 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: Validator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Validator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OperatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OperatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsensusPubkey", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ConsensusPubkey == nil { + m.ConsensusPubkey = &types1.Any{} + } + if err := m.ConsensusPubkey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Jailed", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Jailed = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= BondStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tokens", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Tokens.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorShares", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.DelegatorShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingHeight", wireType) + } + m.UnbondingHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UnbondingHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.UnbondingTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Commission", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Commission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinSelfDelegation", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinSelfDelegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingOnHoldRefCount", wireType) + } + m.UnbondingOnHoldRefCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UnbondingOnHoldRefCount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 13: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.UnbondingIds = append(m.UnbondingIds, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.UnbondingIds) == 0 { + m.UnbondingIds = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.UnbondingIds = append(m.UnbondingIds, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingIds", wireType) + } + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Delegation) 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 ErrIntOverflowStaking + } + 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: Delegation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Delegation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Shares", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Shares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + +func (m *Params) 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 ErrIntOverflowStaking + } + 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: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.UnbondingTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxValidators", wireType) + } + m.MaxValidators = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxValidators |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxEntries", wireType) + } + m.MaxEntries = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxEntries |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HistoricalEntries", wireType) + } + m.HistoricalEntries = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.HistoricalEntries |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BondDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + 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 ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BondDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + +func skipStaking(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowStaking + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowStaking + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowStaking + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthStaking + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupStaking + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthStaking + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthStaking = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowStaking = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupStaking = fmt.Errorf("proto: unexpected end of group") +) \ No newline at end of file diff --git a/x/staking/migrations/v4/migrations_test.go b/x/staking/migrations/v4/migrations_test.go index 1b1ff95f01a3..27707e19e1f7 100644 --- a/x/staking/migrations/v4/migrations_test.go +++ b/x/staking/migrations/v4/migrations_test.go @@ -2,14 +2,10 @@ package v4_test import ( "testing" - "time" "github.com/stretchr/testify/require" - "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/testutil" - "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -30,6 +26,10 @@ func (ms mockSubspace) GetParamSet(ctx sdk.Context, ps paramtypes.ParamSet) { *ps.(*types.Params) = ms.ps } +// no-op required for type coercion +func (ms mockSubspace) Set(ctx sdk.Context, key []byte, value interface{}) { +} + func TestMigrate(t *testing.T) { cdc := moduletestutil.MakeTestEncodingConfig(staking.AppModuleBasic{}).Codec @@ -37,17 +37,6 @@ func TestMigrate(t *testing.T) { tKey := sdk.NewTransientStoreKey("transient_test") ctx := testutil.DefaultContext(storeKey, tKey) store := ctx.KVStore(storeKey) - duplicateCreationHeight := int64(1) - - accAddrs := sims.CreateIncrementalAccounts(1) - accAddr := accAddrs[0] - - valAddrs := sims.ConvertAddrsToValAddrs(accAddrs) - valAddr := valAddrs[0] - - // creating 10 ubdEntries with same height and 10 ubdEntries with different creation height - err := createOldStateUnbonding(t, duplicateCreationHeight, valAddr, accAddr, cdc, store) - require.NoError(t, err) legacySubspace := newMockSubspace(types.DefaultParams()) @@ -71,71 +60,15 @@ func TestMigrate(t *testing.T) { require.NoError(t, v4.MigrateStore(ctx, storeKey, cdc, legacySubspace)) } - ubd := getUBD(t, accAddr, valAddr, store, cdc) if tc.doMigration { var res types.Params bz := store.Get(v4.ParamsKey) require.NoError(t, cdc.Unmarshal(bz, &res)) require.Equal(t, legacySubspace.ps, res) - // checking the updated balance for duplicateCreationHeight - for _, ubdEntry := range ubd.Entries { - if ubdEntry.CreationHeight == duplicateCreationHeight { - require.Equal(t, sdk.NewInt(100*10), ubdEntry.Balance) - break - } - } - require.Equal(t, 11, len(ubd.Entries)) } else { require.Equal(t, true, true) - require.Equal(t, 20, len(ubd.Entries)) } }) } } - -// createOldStateUnbonding will create the ubd entries with duplicate heights -// 10 duplicate heights and 10 unique ubd with creation height -func createOldStateUnbonding(t *testing.T, creationHeight int64, valAddr sdk.ValAddress, accAddr sdk.AccAddress, cdc codec.BinaryCodec, store storetypes.KVStore) error { - unbondBalance := sdk.NewInt(100) - completionTime := time.Now() - ubdEntries := make([]types.UnbondingDelegationEntry, 0, 10) - - for i := int64(0); i < 10; i++ { - ubdEntry := types.UnbondingDelegationEntry{ - CreationHeight: creationHeight, - Balance: unbondBalance, - InitialBalance: unbondBalance, - CompletionTime: completionTime, - } - ubdEntries = append(ubdEntries, ubdEntry) - // creating more entries for testing the creation_heights - ubdEntry.CreationHeight = i + 2 - ubdEntry.CompletionTime = completionTime.Add(time.Minute * 10) - ubdEntries = append(ubdEntries, ubdEntry) - } - - ubd := types.UnbondingDelegation{ - ValidatorAddress: valAddr.String(), - DelegatorAddress: accAddr.String(), - Entries: ubdEntries, - } - - // set the unbond delegation with validator and delegator - bz := types.MustMarshalUBD(cdc, ubd) - key := getUBDKey(accAddr, valAddr) - store.Set(key, bz) - return nil -} - -func getUBD(t *testing.T, accAddr sdk.AccAddress, valAddr sdk.ValAddress, store storetypes.KVStore, cdc codec.BinaryCodec) types.UnbondingDelegation { - // get the unbonding delegations - var ubdRes types.UnbondingDelegation - ubdbz := store.Get(getUBDKey(accAddr, valAddr)) - require.NoError(t, cdc.Unmarshal(ubdbz, &ubdRes)) - return ubdRes -} - -func getUBDKey(accAddr sdk.AccAddress, valAddr sdk.ValAddress) []byte { - return types.GetUBDKey(accAddr, valAddr) -} diff --git a/x/staking/migrations/v4/store.go b/x/staking/migrations/v4/store.go index 9c09ddf60361..638214c2026a 100644 --- a/x/staking/migrations/v4/store.go +++ b/x/staking/migrations/v4/store.go @@ -1,15 +1,20 @@ package v4 import ( - "sort" - "github.com/cosmos/cosmos-sdk/codec" storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "github.com/cosmos/cosmos-sdk/x/staking/exported" "github.com/cosmos/cosmos-sdk/x/staking/types" ) +// subspace contains the method needed for migrations of the legacy Params subspace +type subspace interface { + GetParamSet(ctx sdk.Context, ps paramtypes.ParamSet) + Set(ctx sdk.Context, key []byte, value interface{}) +} + // MigrateStore performs in-place store migrations from v3 to v4. func MigrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.BinaryCodec, legacySubspace exported.Subspace) error { store := ctx.KVStore(storeKey) @@ -19,18 +24,21 @@ func MigrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.Binar return err } - // migrate unbonding delegations - if err := migrateUBDEntries(ctx, store, cdc, legacySubspace); err != nil { - return err - } - return nil } // migrateParams will set the params to store from legacySubspace func migrateParams(ctx sdk.Context, store storetypes.KVStore, cdc codec.BinaryCodec, legacySubspace exported.Subspace) error { var legacyParams types.Params - legacySubspace.GetParamSet(ctx, &legacyParams) + + // cast to type that implements .Set() + // KeyMinCommissionRate was not added in v3 migration in the LSM line + // we need to be set it to avoid unmarshalling errs + extendedLegacySubspace := legacySubspace.(subspace) + extendedLegacySubspace.Set(ctx, types.KeyMinCommissionRate, types.DefaultMinCommissionRate) + + // get all params after setting MinCommissionRate + extendedLegacySubspace.GetParamSet(ctx, &legacyParams) if err := legacyParams.Validate(); err != nil { return err @@ -40,61 +48,3 @@ func migrateParams(ctx sdk.Context, store storetypes.KVStore, cdc codec.BinaryCo store.Set(types.ParamsKey, bz) return nil } - -// migrateUBDEntries will remove the ubdEntries with same creation_height -// and create a new ubdEntry with updated balance and initial_balance -func migrateUBDEntries(ctx sdk.Context, store storetypes.KVStore, cdc codec.BinaryCodec, legacySubspace exported.Subspace) error { - iterator := sdk.KVStorePrefixIterator(store, types.UnbondingDelegationKey) - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - ubd := types.MustUnmarshalUBD(cdc, iterator.Value()) - - entriesAtSameCreationHeight := make(map[int64][]types.UnbondingDelegationEntry) - for _, ubdEntry := range ubd.Entries { - entriesAtSameCreationHeight[ubdEntry.CreationHeight] = append(entriesAtSameCreationHeight[ubdEntry.CreationHeight], ubdEntry) - } - - creationHeights := make([]int64, 0, len(entriesAtSameCreationHeight)) - for k := range entriesAtSameCreationHeight { - creationHeights = append(creationHeights, k) - } - - sort.Slice(creationHeights, func(i, j int) bool { return creationHeights[i] < creationHeights[j] }) - - ubd.Entries = make([]types.UnbondingDelegationEntry, 0, len(creationHeights)) - - for _, h := range creationHeights { - ubdEntry := types.UnbondingDelegationEntry{ - Balance: sdk.ZeroInt(), - InitialBalance: sdk.ZeroInt(), - } - for _, entry := range entriesAtSameCreationHeight[h] { - ubdEntry.Balance = ubdEntry.Balance.Add(entry.Balance) - ubdEntry.InitialBalance = ubdEntry.InitialBalance.Add(entry.InitialBalance) - ubdEntry.CreationHeight = entry.CreationHeight - ubdEntry.CompletionTime = entry.CompletionTime - } - ubd.Entries = append(ubd.Entries, ubdEntry) - } - - // set the new ubd to the store - setUBDToStore(ctx, store, cdc, ubd) - } - return nil -} - -func setUBDToStore(ctx sdk.Context, store storetypes.KVStore, cdc codec.BinaryCodec, ubd types.UnbondingDelegation) { - delegatorAddress := sdk.MustAccAddressFromBech32(ubd.DelegatorAddress) - - bz := types.MustMarshalUBD(cdc, ubd) - - addr, err := sdk.ValAddressFromBech32(ubd.ValidatorAddress) - if err != nil { - panic(err) - } - - key := types.GetUBDKey(delegatorAddress, addr) - - store.Set(key, bz) -} From bd43c01a987ee7b3ec296438246da99768c2646e Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Fri, 15 Dec 2023 10:52:15 +0100 Subject: [PATCH 08/19] Update x/staking/migrations/v3/Readme.md --- x/staking/migrations/v3/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/staking/migrations/v3/Readme.md b/x/staking/migrations/v3/Readme.md index 2aa89de2f4bb..1d2a6a64a5d6 100644 --- a/x/staking/migrations/v3/Readme.md +++ b/x/staking/migrations/v3/Readme.md @@ -4,6 +4,6 @@ The migration history of the cosmos-sdk line with LSM diverges from the mainline Migrations in this directory were not executed. -The cosmos-sdk migration has that was executed on for cosmos-sdk@v0.45.16-ics-slm is in `./lsm` directory. +The cosmos-sdk migration has that was executed on for cosmos-sdk@v0.45.16-ics-lsm is in `./lsm` directory. All files under `./lsm` are excluded from the build process and kept for posterity. From a89aa65be44a25902054305474330700b4700bcf Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Wed, 3 Jan 2024 16:01:22 +0100 Subject: [PATCH 09/19] Add a signer option to all staking tx messages --- proto/cosmos/staking/v1beta1/tx.proto | 21 +++ x/staking/types/tx.pb.go | 197 +++++++++++++------------- 2 files changed, 122 insertions(+), 96 deletions(-) diff --git a/proto/cosmos/staking/v1beta1/tx.proto b/proto/cosmos/staking/v1beta1/tx.proto index 237dadfb0599..78bed71137a5 100644 --- a/proto/cosmos/staking/v1beta1/tx.proto +++ b/proto/cosmos/staking/v1beta1/tx.proto @@ -239,6 +239,9 @@ message MsgUpdateParamsResponse {}; // This allows a validator to stop their services and jail themselves without // experiencing a slash message MsgUnbondValidator { + option (cosmos.msg.v1.signer) = "validator_address"; + option (amino.name) = "cosmos-sdk/x/staking/MsgUnbondValidator"; + string validator_address = 1 [(gogoproto.moretags) = "yaml:\"address\""]; } // MsgUnbondValidatorResponse defines the Msg/UnbondValidator response type. @@ -246,6 +249,9 @@ message MsgUnbondValidatorResponse {} // MsgTokenizeShares tokenizes a delegation message MsgTokenizeShares { + option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgTokenizeShares"; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -262,6 +268,9 @@ message MsgTokenizeSharesResponse { // MsgRedeemTokensForShares redeems a tokenized share back into a native delegation message MsgRedeemTokensForShares { + option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgRedeemTokensForShares"; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -276,6 +285,9 @@ message MsgRedeemTokensForSharesResponse { // MsgTransferTokenizeShareRecord transfer a tokenize share record message MsgTransferTokenizeShareRecord { + option (cosmos.msg.v1.signer) = "sender"; + option (amino.name) = "cosmos-sdk/MsgTransferTokenizeShareRecord"; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -289,6 +301,9 @@ message MsgTransferTokenizeShareRecordResponse {} // MsgDisableTokenizeShares prevents the tokenization of shares for a given address message MsgDisableTokenizeShares { + option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgDisableTokenizeShares"; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -300,6 +315,9 @@ message MsgDisableTokenizeSharesResponse {} // MsgEnableTokenizeShares re-enables tokenization of shares for a given address message MsgEnableTokenizeShares { + option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgEnableTokenizeShares"; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -314,6 +332,9 @@ message MsgEnableTokenizeSharesResponse { // MsgValidatorBond defines a SDK message for performing validator self-bond of delegated coins // from a delegator to a validator. message MsgValidatorBond { + option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgValidatorBond"; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; diff --git a/x/staking/types/tx.pb.go b/x/staking/types/tx.pb.go index fc44791a3eaa..5a96cc98a8e7 100644 --- a/x/staking/types/tx.pb.go +++ b/x/staking/types/tx.pb.go @@ -1240,102 +1240,107 @@ func init() { func init() { proto.RegisterFile("cosmos/staking/v1beta1/tx.proto", fileDescriptor_0926ef28816b35ab) } var fileDescriptor_0926ef28816b35ab = []byte{ - // 1519 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0x4f, 0x6c, 0x14, 0x55, - 0x18, 0xef, 0x6c, 0xff, 0xd8, 0x3e, 0x6c, 0x4b, 0xa7, 0x2d, 0x6c, 0x07, 0xdc, 0x25, 0x03, 0xd2, - 0x5a, 0xed, 0xae, 0x54, 0x43, 0x71, 0x25, 0x28, 0x4b, 0x21, 0x56, 0xdd, 0x48, 0xa6, 0xc0, 0x41, - 0x4d, 0x36, 0xb3, 0x33, 0xaf, 0xd3, 0x49, 0x77, 0xde, 0x5b, 0xe6, 0xcd, 0x02, 0xeb, 0x89, 0xe8, - 0xc5, 0x78, 0x91, 0x03, 0x26, 0x1c, 0x39, 0x72, 0x24, 0x86, 0xb3, 0x37, 0x13, 0xe2, 0x89, 0x70, - 0x32, 0x1e, 0x8a, 0x81, 0x03, 0x9e, 0xb9, 0x78, 0x35, 0xf3, 0xe6, 0xcd, 0x9b, 0x3f, 0x3b, 0x33, - 0xdd, 0xad, 0xd4, 0xa8, 0x97, 0x76, 0xf7, 0xbd, 0xef, 0xfb, 0xde, 0xf7, 0x7e, 0xbf, 0xef, 0xdf, - 0x5b, 0x50, 0xd4, 0x30, 0xb1, 0x30, 0x29, 0x13, 0x47, 0xdd, 0x32, 0x91, 0x51, 0xbe, 0x76, 0xa2, - 0x01, 0x1d, 0xf5, 0x44, 0xd9, 0xb9, 0x51, 0x6a, 0xd9, 0xd8, 0xc1, 0xe2, 0x01, 0x4f, 0xa0, 0xc4, - 0x04, 0x4a, 0x4c, 0x40, 0x9a, 0x33, 0x30, 0x36, 0x9a, 0xb0, 0x4c, 0xa5, 0x1a, 0xed, 0x8d, 0xb2, - 0x8a, 0x3a, 0x9e, 0x8a, 0x54, 0x8c, 0x6f, 0x39, 0xa6, 0x05, 0x89, 0xa3, 0x5a, 0x2d, 0x26, 0x30, - 0x63, 0x60, 0x03, 0xd3, 0x8f, 0x65, 0xf7, 0x13, 0x5b, 0x9d, 0xf3, 0x4e, 0xaa, 0x7b, 0x1b, 0xec, - 0x58, 0x6f, 0xab, 0xc0, 0xbc, 0x6c, 0xa8, 0x04, 0x72, 0x17, 0x35, 0x6c, 0x22, 0xb6, 0x7f, 0x2c, - 0xe5, 0x16, 0xbe, 0xd3, 0x9e, 0xd4, 0x41, 0x26, 0x65, 0x11, 0x57, 0xc2, 0xfd, 0xc7, 0x36, 0xa6, - 0x54, 0xcb, 0x44, 0xb8, 0x4c, 0xff, 0x7a, 0x4b, 0xf2, 0xed, 0x61, 0x20, 0xd6, 0x88, 0x71, 0xce, - 0x86, 0xaa, 0x03, 0xaf, 0xa8, 0x4d, 0x53, 0x57, 0x1d, 0x6c, 0x8b, 0x17, 0xc1, 0x3e, 0x1d, 0x12, - 0xcd, 0x36, 0x5b, 0x8e, 0x89, 0x51, 0x5e, 0x38, 0x22, 0x2c, 0xec, 0x5b, 0x3e, 0x5a, 0x4a, 0xc6, - 0xa8, 0xb4, 0x1a, 0x88, 0x56, 0xc7, 0x1e, 0x6e, 0x17, 0x07, 0xee, 0x3d, 0xbf, 0xbf, 0x28, 0x28, - 0x61, 0x13, 0xa2, 0x02, 0x80, 0x86, 0x2d, 0xcb, 0x24, 0xc4, 0x35, 0x98, 0xa3, 0x06, 0xe7, 0xd3, - 0x0c, 0x9e, 0xe3, 0x92, 0x8a, 0xea, 0x40, 0x12, 0x36, 0x1a, 0xb2, 0x22, 0x22, 0x30, 0x6d, 0x99, - 0xa8, 0x4e, 0x60, 0x73, 0xa3, 0xae, 0xc3, 0x26, 0x34, 0x54, 0xea, 0xed, 0xe0, 0x11, 0x61, 0x61, - 0xac, 0x7a, 0xc6, 0xd5, 0xf9, 0x6d, 0xbb, 0x78, 0xdc, 0x30, 0x9d, 0xcd, 0x76, 0xa3, 0xa4, 0x61, - 0x8b, 0x81, 0xcd, 0xfe, 0x2d, 0x11, 0x7d, 0xab, 0xec, 0x74, 0x5a, 0x90, 0x94, 0xd6, 0x90, 0xf3, - 0xf8, 0xc1, 0x12, 0x60, 0xde, 0xac, 0x21, 0x27, 0x2f, 0x28, 0x53, 0x96, 0x89, 0xd6, 0x61, 0x73, - 0x63, 0x95, 0x1b, 0x16, 0xcf, 0x83, 0x29, 0x76, 0x0c, 0xb6, 0xeb, 0xaa, 0xae, 0xdb, 0x90, 0x90, - 0xfc, 0x10, 0x3d, 0x2d, 0xff, 0xf8, 0xc1, 0xd2, 0x0c, 0xd3, 0x3f, 0xeb, 0xed, 0xac, 0x3b, 0xb6, - 0x89, 0x0c, 0x65, 0x3f, 0x57, 0x61, 0xeb, 0xae, 0x99, 0x6b, 0x3e, 0xd2, 0xdc, 0xcc, 0xf0, 0x4e, - 0x66, 0xb8, 0x8a, 0x6f, 0xe6, 0x02, 0x18, 0x69, 0xb5, 0x1b, 0x5b, 0xb0, 0x93, 0x1f, 0xa1, 0x68, - 0xce, 0x94, 0xbc, 0x78, 0x2c, 0xf9, 0xf1, 0x58, 0x3a, 0x8b, 0x3a, 0xd5, 0xfc, 0x2f, 0x81, 0x45, - 0xcd, 0xee, 0xb4, 0x1c, 0x5c, 0xba, 0xd8, 0x6e, 0x7c, 0x02, 0x3b, 0x0a, 0xd3, 0x16, 0x2b, 0x60, - 0xf8, 0x9a, 0xda, 0x6c, 0xc3, 0xfc, 0x2b, 0xd4, 0xcc, 0x9c, 0x4f, 0x8a, 0x1b, 0x84, 0x21, 0x46, - 0xcc, 0x08, 0xb7, 0x9e, 0x4a, 0xe5, 0xca, 0xb7, 0x77, 0x8b, 0x03, 0x7f, 0xdc, 0x2d, 0x0e, 0x7c, - 0xfd, 0xfc, 0xfe, 0x62, 0x37, 0x38, 0x74, 0xb5, 0xeb, 0xae, 0xdf, 0x3d, 0xbf, 0xbf, 0xf8, 0x5a, - 0x88, 0x83, 0xee, 0xf8, 0x93, 0x0f, 0x03, 0xa9, 0x7b, 0x55, 0x81, 0xa4, 0x85, 0x11, 0x81, 0xf2, - 0x4f, 0x83, 0x60, 0x7f, 0x8d, 0x18, 0xe7, 0x75, 0xd3, 0xd9, 0xcb, 0x90, 0x4d, 0xe4, 0x29, 0xd7, - 0x37, 0x4f, 0x2a, 0x98, 0x0c, 0x62, 0xb6, 0x6e, 0xab, 0x0e, 0x64, 0x11, 0x7a, 0xaa, 0xc7, 0xe8, - 0x5c, 0x85, 0x5a, 0x28, 0x3a, 0x57, 0xa1, 0xa6, 0x4c, 0x68, 0x91, 0x04, 0x49, 0x4b, 0x84, 0xa1, - 0x3d, 0x4a, 0x84, 0xca, 0x99, 0x08, 0xed, 0x89, 0x04, 0x1f, 0x8a, 0x12, 0x1c, 0xe1, 0x4a, 0x96, - 0x40, 0x3e, 0xbe, 0xc6, 0xc9, 0xbd, 0x9d, 0x03, 0xfb, 0x6a, 0xc4, 0x60, 0xa7, 0xc1, 0xe4, 0xa4, - 0x13, 0x5e, 0x4e, 0xd2, 0xf5, 0x4f, 0xe6, 0x69, 0x30, 0xa2, 0x5a, 0xb8, 0x8d, 0x1c, 0xca, 0x61, - 0xaf, 0xd9, 0xc2, 0x74, 0x2a, 0xef, 0x65, 0xa7, 0x8b, 0x8b, 0xdb, 0x81, 0x28, 0x6e, 0x3e, 0x0c, - 0xf2, 0x2c, 0x98, 0x0e, 0x7d, 0xe5, 0x68, 0xfd, 0x99, 0xa3, 0xf5, 0xbb, 0x0a, 0x0d, 0x13, 0x29, - 0x50, 0x7f, 0xc9, 0xa0, 0x7d, 0x0a, 0x66, 0x03, 0xd0, 0x88, 0xad, 0xf5, 0x0c, 0xdc, 0x34, 0x57, - 0x5b, 0xb7, 0xb5, 0x44, 0x6b, 0x3a, 0x71, 0xb8, 0xb5, 0xc1, 0x9e, 0xad, 0xad, 0x12, 0xa7, 0x9b, - 0x89, 0xa1, 0x5d, 0x30, 0xf1, 0xe1, 0xce, 0x4c, 0xc4, 0x4a, 0x54, 0x0c, 0x62, 0xb9, 0x45, 0x4b, - 0x54, 0x6c, 0xd5, 0xe7, 0x45, 0x54, 0x68, 0xd2, 0xb7, 0x9a, 0xd0, 0xcd, 0x97, 0xba, 0x3b, 0x18, - 0xb0, 0x8a, 0x24, 0x75, 0x55, 0xe9, 0x4b, 0xfe, 0xd4, 0x50, 0x1d, 0x77, 0xfd, 0xbc, 0xf5, 0xa4, - 0x28, 0x78, 0xbe, 0x4e, 0x04, 0x16, 0x5c, 0x19, 0xf9, 0x4e, 0x0e, 0x8c, 0xd7, 0x88, 0x71, 0x19, - 0xe9, 0xff, 0xc7, 0xdc, 0x78, 0x7f, 0x67, 0x46, 0xf2, 0x51, 0x46, 0x02, 0x20, 0xe4, 0x2d, 0x30, - 0x1b, 0x59, 0xd8, 0x53, 0x1e, 0x9e, 0xe4, 0xc0, 0x61, 0xb7, 0x3b, 0xa9, 0x48, 0x83, 0xcd, 0xcb, - 0xa8, 0x81, 0x91, 0x6e, 0x22, 0x63, 0xa7, 0x39, 0xe1, 0xbf, 0x49, 0x8b, 0x38, 0x0f, 0x26, 0x35, - 0xb7, 0x0d, 0xbb, 0xf0, 0x6d, 0x42, 0xd3, 0xd8, 0xf4, 0xf2, 0x6d, 0x50, 0x99, 0xf0, 0x97, 0x3f, - 0xa2, 0xab, 0x95, 0x8f, 0x77, 0xe6, 0x6f, 0x3e, 0xd6, 0xf4, 0xd3, 0x00, 0x94, 0x8f, 0x83, 0x63, - 0x59, 0xfb, 0xbc, 0xfa, 0xfd, 0x2c, 0x80, 0x49, 0x97, 0xf7, 0x96, 0xae, 0x3a, 0xf0, 0xa2, 0x6a, - 0xab, 0x16, 0x11, 0x4f, 0x82, 0x31, 0xb5, 0xed, 0x6c, 0x62, 0xdb, 0x74, 0x3a, 0x3b, 0x82, 0x1e, - 0x88, 0x8a, 0x67, 0xc1, 0x48, 0x8b, 0x5a, 0x60, 0xc3, 0x69, 0x21, 0x6d, 0x74, 0xf0, 0xce, 0x89, - 0x60, 0xe5, 0x29, 0x56, 0x56, 0xdc, 0xab, 0x07, 0x26, 0xdd, 0x2b, 0x1f, 0x0b, 0x5d, 0xf9, 0x06, - 0x9f, 0xdb, 0x63, 0x3e, 0xcb, 0x73, 0xe0, 0x60, 0x6c, 0x89, 0x5f, 0xf1, 0x32, 0xad, 0xef, 0x1e, - 0x08, 0xc1, 0xb0, 0xf3, 0x41, 0x52, 0x68, 0x78, 0x97, 0x15, 0x5f, 0x6c, 0x17, 0x27, 0x3a, 0xaa, - 0xd5, 0xac, 0xc8, 0x6c, 0x43, 0xee, 0x0e, 0x0a, 0x36, 0x60, 0xc5, 0xcc, 0xf2, 0x43, 0xef, 0xe6, - 0xc0, 0x54, 0x8d, 0x18, 0x97, 0xf0, 0x16, 0x44, 0xe6, 0x57, 0x70, 0x7d, 0x53, 0xb5, 0x21, 0x11, - 0xd7, 0xd2, 0xc3, 0xfa, 0xf0, 0x8b, 0xed, 0x62, 0xde, 0x3b, 0xb4, 0x4b, 0x44, 0x4e, 0x08, 0xed, - 0xb5, 0xf4, 0xd0, 0x0e, 0x99, 0xea, 0x12, 0x49, 0xb8, 0x89, 0xb8, 0xd2, 0x7b, 0x78, 0x0f, 0xb9, - 0x94, 0xf1, 0xc8, 0x5e, 0x06, 0xb3, 0x0e, 0xbb, 0xa0, 0x5e, 0x27, 0xee, 0x15, 0xeb, 0xf8, 0x3a, - 0x82, 0xb6, 0x37, 0x36, 0x29, 0xd3, 0x7c, 0x93, 0x5e, 0xff, 0x33, 0x77, 0xab, 0x32, 0xea, 0x07, - 0xb9, 0x7c, 0x09, 0xcc, 0x75, 0x21, 0xc4, 0xab, 0x4e, 0xe0, 0x93, 0xd0, 0x97, 0x4f, 0xf2, 0x3d, - 0x81, 0x4e, 0x46, 0x6e, 0x43, 0x81, 0x16, 0x35, 0x4e, 0x2e, 0x60, 0xfb, 0xe5, 0xe3, 0x1f, 0x38, - 0x98, 0xeb, 0xcb, 0xc1, 0x10, 0x00, 0x5f, 0x80, 0x23, 0x69, 0x9e, 0xfe, 0x7d, 0x1c, 0xee, 0x08, - 0xa0, 0xe0, 0xc2, 0x6b, 0xab, 0x88, 0x6c, 0x40, 0x3b, 0x02, 0xb3, 0x02, 0x35, 0x6c, 0xeb, 0xe2, - 0x0a, 0xc8, 0xfb, 0x0c, 0x31, 0xf6, 0x6c, 0xba, 0x51, 0x37, 0x75, 0x7a, 0xda, 0x90, 0xc2, 0xe9, - 0x0d, 0xa9, 0xad, 0xe9, 0xe2, 0x01, 0x30, 0x42, 0x20, 0xd2, 0xa1, 0xed, 0x05, 0x9c, 0xc2, 0xbe, - 0x89, 0x87, 0xc0, 0x18, 0x82, 0xd7, 0x59, 0x0c, 0xd0, 0x91, 0x44, 0x19, 0x45, 0xf0, 0x7a, 0x9c, - 0xf8, 0x05, 0x70, 0x3c, 0xdb, 0x33, 0x9e, 0x45, 0x98, 0x72, 0xb9, 0x6a, 0x12, 0xb5, 0xd1, 0x84, - 0x7b, 0x96, 0x4b, 0x21, 0xd7, 0x64, 0x4a, 0x49, 0xe2, 0x81, 0xdc, 0x29, 0x44, 0x4b, 0xcd, 0x79, - 0xf4, 0x4f, 0xf9, 0xd4, 0x02, 0xc5, 0x94, 0xf3, 0x78, 0x94, 0xd4, 0x76, 0xd3, 0xa3, 0x47, 0xfd, - 0x1e, 0xdd, 0xd5, 0x9e, 0x7f, 0x14, 0xe8, 0xeb, 0x90, 0x57, 0xb5, 0x2a, 0x46, 0xfa, 0xbf, 0xb3, - 0x76, 0x85, 0x60, 0xf2, 0x5e, 0x44, 0x11, 0x9f, 0x7d, 0x7c, 0x96, 0x6f, 0x8f, 0x83, 0xc1, 0x1a, - 0x31, 0xc4, 0xab, 0x60, 0x32, 0xfe, 0x3b, 0xcd, 0x62, 0x5a, 0x93, 0xea, 0x7e, 0x3d, 0x4b, 0xcb, - 0xbd, 0xcb, 0x72, 0x6a, 0xb6, 0xc0, 0x78, 0xf4, 0x95, 0xbd, 0x90, 0x61, 0x24, 0x22, 0x29, 0xbd, - 0xdd, 0xab, 0x24, 0x3f, 0xec, 0x4b, 0x30, 0xca, 0x5f, 0x7d, 0x47, 0x33, 0xb4, 0x7d, 0x21, 0xe9, - 0xcd, 0x1e, 0x84, 0xb8, 0xf5, 0xab, 0x60, 0x32, 0xfe, 0x4a, 0xca, 0x42, 0x2f, 0x26, 0x9b, 0x89, - 0x5e, 0xda, 0x23, 0xa0, 0x01, 0x40, 0x68, 0x58, 0x7f, 0x3d, 0xc3, 0x42, 0x20, 0x26, 0x2d, 0xf5, - 0x24, 0xc6, 0xcf, 0xf8, 0x5e, 0x00, 0x73, 0xe9, 0x93, 0xe8, 0xbb, 0x59, 0x9c, 0xa7, 0x69, 0x49, - 0xa7, 0x77, 0xa3, 0xc5, 0x3d, 0xda, 0x04, 0xaf, 0x46, 0x06, 0xb2, 0xf9, 0xac, 0x0b, 0x85, 0x04, - 0xa5, 0x72, 0x8f, 0x82, 0x61, 0x4a, 0xe3, 0x83, 0xd1, 0x62, 0x26, 0x7a, 0x11, 0xd9, 0x4c, 0x4a, - 0x53, 0x26, 0x23, 0x11, 0x81, 0x89, 0x58, 0xd5, 0x7c, 0x23, 0xc3, 0x4a, 0x54, 0x54, 0x3a, 0xd1, - 0xb3, 0x28, 0x3f, 0xef, 0x1b, 0x01, 0xcc, 0x26, 0x4f, 0x03, 0x59, 0xf9, 0x95, 0xa8, 0x21, 0x9d, - 0xea, 0x57, 0x83, 0x7b, 0xf1, 0x83, 0x00, 0x0e, 0x65, 0xf5, 0xe2, 0x93, 0x59, 0x17, 0x4b, 0xd7, - 0x93, 0xce, 0xec, 0x4e, 0x2f, 0x82, 0x4e, 0x72, 0x7f, 0xcd, 0x42, 0x27, 0x51, 0x23, 0x13, 0x9d, - 0xcc, 0x96, 0x2a, 0xde, 0x14, 0xc0, 0x4c, 0x62, 0x43, 0xcd, 0x0a, 0xe8, 0x24, 0x05, 0x69, 0xa5, - 0x4f, 0x85, 0x70, 0x9d, 0x8e, 0xf6, 0xbb, 0xac, 0x3a, 0x1d, 0x91, 0xcc, 0xac, 0xd3, 0x89, 0xfd, - 0x48, 0x1a, 0xbe, 0xe9, 0xbe, 0x7a, 0xaa, 0x17, 0x1e, 0x3e, 0x2d, 0x08, 0x8f, 0x9e, 0x16, 0x84, - 0xdf, 0x9f, 0x16, 0x84, 0x5b, 0xcf, 0x0a, 0x03, 0x8f, 0x9e, 0x15, 0x06, 0x7e, 0x7d, 0x56, 0x18, - 0xf8, 0xfc, 0xad, 0xcc, 0x5f, 0x1a, 0x83, 0x67, 0x10, 0xfd, 0xcd, 0xb1, 0x31, 0x42, 0xbb, 0xfb, - 0x3b, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xda, 0x6d, 0x3b, 0x00, 0xa3, 0x19, 0x00, 0x00, + // 1588 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0x4d, 0x6c, 0xdc, 0xc4, + 0x17, 0x8f, 0x37, 0x1f, 0xff, 0x66, 0xfa, 0x4f, 0xd2, 0x38, 0x49, 0xbb, 0x71, 0xc3, 0x6e, 0xe5, + 0x96, 0x26, 0x0d, 0x64, 0x97, 0x06, 0xd4, 0x94, 0xa5, 0x6a, 0xc9, 0x36, 0x89, 0x08, 0xb0, 0xa2, + 0x72, 0xda, 0x1e, 0x00, 0x69, 0xe5, 0xb5, 0x27, 0x8e, 0x95, 0xf5, 0x78, 0xeb, 0xf1, 0xb6, 0x5d, + 0x4e, 0x15, 0x5c, 0x10, 0x17, 0x7a, 0x28, 0x12, 0xdc, 0x7a, 0x44, 0x42, 0x48, 0x3d, 0xf4, 0xcc, + 0x0d, 0xa9, 0xe2, 0x54, 0x7a, 0x01, 0x71, 0x48, 0x51, 0x2b, 0xd1, 0x9e, 0x7b, 0xe1, 0x8a, 0x3c, + 0x1e, 0x8f, 0x3f, 0xd6, 0xf6, 0xee, 0x86, 0x44, 0x02, 0x2e, 0xf9, 0x98, 0x79, 0xef, 0xcd, 0x7b, + 0xbf, 0xdf, 0x7b, 0x6f, 0xde, 0x18, 0xe4, 0x15, 0x13, 0x1b, 0x26, 0x2e, 0x62, 0x5b, 0xde, 0xd6, + 0x91, 0x56, 0xbc, 0x7e, 0xba, 0x06, 0x6d, 0xf9, 0x74, 0xd1, 0xbe, 0x59, 0x68, 0x58, 0xa6, 0x6d, + 0xf2, 0x87, 0x5d, 0x81, 0x02, 0x15, 0x28, 0x50, 0x01, 0x61, 0x5a, 0x33, 0x4d, 0xad, 0x0e, 0x8b, + 0x44, 0xaa, 0xd6, 0xdc, 0x2c, 0xca, 0xa8, 0xe5, 0xaa, 0x08, 0xf9, 0xe8, 0x96, 0xad, 0x1b, 0x10, + 0xdb, 0xb2, 0xd1, 0xa0, 0x02, 0x93, 0x9a, 0xa9, 0x99, 0xe4, 0xcf, 0xa2, 0xf3, 0x17, 0x5d, 0x9d, + 0x76, 0x4f, 0xaa, 0xba, 0x1b, 0xf4, 0x58, 0x77, 0x2b, 0x47, 0xbd, 0xac, 0xc9, 0x18, 0x32, 0x17, + 0x15, 0x53, 0x47, 0x74, 0xff, 0x44, 0x42, 0x14, 0x9e, 0xd3, 0xae, 0xd4, 0x11, 0x2a, 0x65, 0x60, + 0x47, 0xc2, 0xf9, 0x45, 0x37, 0xc6, 0x65, 0x43, 0x47, 0x66, 0x91, 0xfc, 0x74, 0x97, 0xc4, 0x3b, + 0x83, 0x80, 0xaf, 0x60, 0xed, 0xa2, 0x05, 0x65, 0x1b, 0x5e, 0x95, 0xeb, 0xba, 0x2a, 0xdb, 0xa6, + 0xc5, 0x5f, 0x02, 0x07, 0x55, 0x88, 0x15, 0x4b, 0x6f, 0xd8, 0xba, 0x89, 0xb2, 0xdc, 0x31, 0x6e, + 0xee, 0xe0, 0xe2, 0xf1, 0x42, 0x3c, 0x46, 0x85, 0x15, 0x5f, 0xb4, 0x3c, 0xfc, 0x60, 0x27, 0xdf, + 0xf7, 0xed, 0xb3, 0x7b, 0xf3, 0x9c, 0x14, 0x34, 0xc1, 0x4b, 0x00, 0x28, 0xa6, 0x61, 0xe8, 0x18, + 0x3b, 0x06, 0x33, 0xc4, 0xe0, 0x6c, 0x92, 0xc1, 0x8b, 0x4c, 0x52, 0x92, 0x6d, 0x88, 0x83, 0x46, + 0x03, 0x56, 0x78, 0x04, 0x26, 0x0c, 0x1d, 0x55, 0x31, 0xac, 0x6f, 0x56, 0x55, 0x58, 0x87, 0x9a, + 0x4c, 0xbc, 0xed, 0x3f, 0xc6, 0xcd, 0x0d, 0x97, 0xcf, 0x3b, 0x3a, 0xbf, 0xed, 0xe4, 0x4f, 0x6a, + 0xba, 0xbd, 0xd5, 0xac, 0x15, 0x14, 0xd3, 0xa0, 0x60, 0xd3, 0x5f, 0x0b, 0x58, 0xdd, 0x2e, 0xda, + 0xad, 0x06, 0xc4, 0x85, 0x75, 0x64, 0x3f, 0xba, 0xbf, 0x00, 0xa8, 0x37, 0xeb, 0xc8, 0xce, 0x72, + 0xd2, 0xb8, 0xa1, 0xa3, 0x0d, 0x58, 0xdf, 0x5c, 0x61, 0x86, 0xf9, 0x55, 0x30, 0x4e, 0x8f, 0x31, + 0xad, 0xaa, 0xac, 0xaa, 0x16, 0xc4, 0x38, 0x3b, 0x40, 0x4e, 0xcb, 0x3e, 0xba, 0xbf, 0x30, 0x49, + 0xf5, 0x97, 0xdd, 0x9d, 0x0d, 0xdb, 0xd2, 0x91, 0x26, 0x1d, 0x62, 0x2a, 0x74, 0xdd, 0x31, 0x73, + 0xdd, 0x43, 0x9a, 0x99, 0x19, 0xec, 0x64, 0x86, 0xa9, 0x78, 0x66, 0xd6, 0xc0, 0x50, 0xa3, 0x59, + 0xdb, 0x86, 0xad, 0xec, 0x10, 0x41, 0x73, 0xb2, 0xe0, 0xe6, 0x63, 0xc1, 0xcb, 0xc7, 0xc2, 0x32, + 0x6a, 0x95, 0xb3, 0x3f, 0xf9, 0x16, 0x15, 0xab, 0xd5, 0xb0, 0xcd, 0xc2, 0xa5, 0x66, 0xed, 0x3d, + 0xd8, 0x92, 0xa8, 0x36, 0x5f, 0x02, 0x83, 0xd7, 0xe5, 0x7a, 0x13, 0x66, 0xff, 0x47, 0xcc, 0x4c, + 0x7b, 0xa4, 0x38, 0x49, 0x18, 0x60, 0x44, 0x0f, 0x71, 0xeb, 0xaa, 0x94, 0xae, 0x7e, 0x7e, 0x37, + 0xdf, 0xf7, 0xfc, 0x6e, 0xbe, 0xef, 0xd3, 0x67, 0xf7, 0xe6, 0xdb, 0xc1, 0x21, 0xab, 0x6d, 0xb1, + 0x7e, 0xf1, 0xec, 0xde, 0xfc, 0x4b, 0x01, 0x0e, 0xda, 0xf3, 0x4f, 0x9c, 0x01, 0x42, 0xfb, 0xaa, + 0x04, 0x71, 0xc3, 0x44, 0x18, 0x8a, 0x3f, 0xf4, 0x83, 0x43, 0x15, 0xac, 0xad, 0xaa, 0xba, 0xbd, + 0x9f, 0x29, 0x1b, 0xcb, 0x53, 0xa6, 0x67, 0x9e, 0x64, 0x30, 0xe6, 0xe7, 0x6c, 0xd5, 0x92, 0x6d, + 0x48, 0x33, 0xf4, 0x6c, 0x97, 0xd9, 0xb9, 0x02, 0x95, 0x40, 0x76, 0xae, 0x40, 0x45, 0x1a, 0x55, + 0x42, 0x05, 0x92, 0x54, 0x08, 0x03, 0xfb, 0x54, 0x08, 0xa5, 0xf3, 0x21, 0xda, 0x63, 0x09, 0x3e, + 0x1a, 0x26, 0x38, 0xc4, 0x95, 0x28, 0x80, 0x6c, 0x74, 0x8d, 0x91, 0x7b, 0x27, 0x03, 0x0e, 0x56, + 0xb0, 0x46, 0x4f, 0x83, 0xf1, 0x45, 0xc7, 0xed, 0x4d, 0xd1, 0xf5, 0x4e, 0xe6, 0x39, 0x30, 0x24, + 0x1b, 0x66, 0x13, 0xd9, 0x84, 0xc3, 0x6e, 0xab, 0x85, 0xea, 0x94, 0xde, 0x4c, 0x2f, 0x17, 0x07, + 0xb7, 0xc3, 0x61, 0xdc, 0x3c, 0x18, 0xc4, 0x29, 0x30, 0x11, 0xf8, 0x97, 0xa1, 0xf5, 0x67, 0x86, + 0xf4, 0xef, 0x32, 0xd4, 0x74, 0x24, 0x41, 0x75, 0x8f, 0x41, 0x7b, 0x1f, 0x4c, 0xf9, 0xa0, 0x61, + 0x4b, 0xe9, 0x1a, 0xb8, 0x09, 0xa6, 0xb6, 0x61, 0x29, 0xb1, 0xd6, 0x54, 0x6c, 0x33, 0x6b, 0xfd, + 0x5d, 0x5b, 0x5b, 0xc1, 0x76, 0x3b, 0x13, 0x03, 0xbb, 0x60, 0xe2, 0xed, 0xce, 0x4c, 0x44, 0x5a, + 0x54, 0x04, 0x62, 0xb1, 0x41, 0x5a, 0x54, 0x64, 0xd5, 0xe3, 0x85, 0x97, 0x48, 0xd1, 0x37, 0xea, + 0xd0, 0xa9, 0x97, 0xaa, 0x33, 0x18, 0xd0, 0x8e, 0x24, 0xb4, 0x75, 0xe9, 0xcb, 0xde, 0xd4, 0x50, + 0x1e, 0x71, 0xfc, 0xbc, 0xfd, 0x38, 0xcf, 0xb9, 0xbe, 0x8e, 0xfa, 0x16, 0x1c, 0x19, 0xf1, 0xeb, + 0x0c, 0x18, 0xa9, 0x60, 0xed, 0x0a, 0x52, 0xff, 0x8b, 0xb5, 0xf1, 0x56, 0x67, 0x46, 0xb2, 0x61, + 0x46, 0x7c, 0x20, 0xc4, 0x6d, 0x30, 0x15, 0x5a, 0xd8, 0x57, 0x1e, 0x1e, 0x67, 0xc0, 0x8c, 0x73, + 0x3b, 0xc9, 0x48, 0x81, 0xf5, 0x2b, 0xa8, 0x66, 0x22, 0x55, 0x47, 0x5a, 0xa7, 0x39, 0xe1, 0xdf, + 0x49, 0x0b, 0x3f, 0x0b, 0xc6, 0x14, 0xe7, 0x1a, 0x76, 0xe0, 0xdb, 0x82, 0xba, 0xb6, 0xe5, 0xd6, + 0x5b, 0xbf, 0x34, 0xea, 0x2d, 0xbf, 0x43, 0x56, 0x4b, 0xef, 0x76, 0xe6, 0x6f, 0x36, 0x72, 0xe9, + 0x27, 0x01, 0x28, 0x9e, 0x04, 0x27, 0xd2, 0xf6, 0x59, 0xf7, 0xfb, 0x91, 0x03, 0x63, 0x0e, 0xef, + 0x0d, 0x55, 0xb6, 0xe1, 0x25, 0xd9, 0x92, 0x0d, 0xcc, 0x9f, 0x01, 0xc3, 0x72, 0xd3, 0xde, 0x32, + 0x2d, 0xdd, 0x6e, 0x75, 0x04, 0xdd, 0x17, 0xe5, 0x97, 0xc1, 0x50, 0x83, 0x58, 0xa0, 0xc3, 0x69, + 0x2e, 0x69, 0x74, 0x70, 0xcf, 0x09, 0x61, 0xe5, 0x2a, 0x96, 0x96, 0x9c, 0xd0, 0x7d, 0x93, 0x4e, + 0xc8, 0x27, 0x02, 0x21, 0xdf, 0x64, 0x73, 0x7b, 0xc4, 0x67, 0x71, 0x1a, 0x1c, 0x89, 0x2c, 0xb1, + 0x10, 0xbf, 0xe1, 0x48, 0x83, 0x77, 0x51, 0xf0, 0xa7, 0x9d, 0x0b, 0x71, 0xb9, 0xe1, 0x46, 0xcb, + 0xbf, 0xd8, 0xc9, 0x8f, 0xb6, 0x64, 0xa3, 0x5e, 0x12, 0xe9, 0x86, 0xd8, 0x9e, 0x15, 0xa5, 0x72, + 0xf2, 0xd5, 0x3d, 0x9b, 0xe8, 0x73, 0xd8, 0x09, 0x3a, 0xa5, 0x45, 0x56, 0x99, 0xe7, 0xbf, 0x64, + 0xc0, 0x78, 0x05, 0x6b, 0x97, 0xcd, 0x6d, 0x88, 0xf4, 0x4f, 0xe0, 0xc6, 0x96, 0x6c, 0x41, 0xcc, + 0xaf, 0x27, 0xd7, 0xc6, 0xcc, 0x8b, 0x9d, 0x7c, 0xd6, 0x75, 0xbc, 0x4d, 0x44, 0x8c, 0xa9, 0x8f, + 0xf5, 0xe4, 0xfa, 0x08, 0x98, 0x6a, 0x13, 0x89, 0x41, 0x83, 0x5f, 0xea, 0xbe, 0x46, 0x06, 0x1c, + 0xde, 0x59, 0x79, 0x2c, 0x82, 0x29, 0x9b, 0x06, 0xa8, 0x56, 0xb1, 0x13, 0x62, 0xd5, 0xbc, 0x81, + 0xa0, 0xe5, 0xce, 0x5e, 0xd2, 0x04, 0xdb, 0x24, 0xe1, 0x7f, 0xe0, 0x6c, 0x95, 0x2e, 0x74, 0xae, + 0x94, 0x99, 0x70, 0xa5, 0x84, 0x31, 0x14, 0x2f, 0x83, 0xe9, 0xb6, 0x45, 0xd6, 0xf1, 0xfc, 0x50, + 0xb8, 0x9e, 0x42, 0x11, 0xff, 0xe0, 0xc8, 0x54, 0xe6, 0x5c, 0x66, 0xd0, 0x20, 0xc6, 0xf1, 0x9a, + 0x69, 0xed, 0x3d, 0x6d, 0xbe, 0x83, 0x99, 0x9e, 0x1c, 0x2c, 0xad, 0x75, 0xc6, 0xed, 0x78, 0x18, + 0xb7, 0xd8, 0x58, 0xc4, 0x8f, 0xc0, 0xb1, 0xa4, 0xbd, 0xbf, 0x8f, 0xe2, 0xcf, 0x1c, 0xc8, 0x39, + 0xe4, 0x58, 0x32, 0xc2, 0x9b, 0xd0, 0x0a, 0x91, 0x24, 0x41, 0xc5, 0xb4, 0x54, 0x7e, 0x09, 0x64, + 0xbd, 0xb4, 0xa0, 0x29, 0x63, 0x91, 0x8d, 0xaa, 0xae, 0x92, 0xd3, 0x06, 0x24, 0x96, 0x53, 0x01, + 0xb5, 0x75, 0x95, 0x3f, 0x0c, 0x86, 0x30, 0x44, 0x2a, 0xb4, 0xdc, 0x2c, 0x97, 0xe8, 0x7f, 0xfc, + 0x51, 0x30, 0x8c, 0xe0, 0x0d, 0x9a, 0x78, 0x64, 0x98, 0x92, 0x0e, 0x20, 0x78, 0xc3, 0xcd, 0xb6, + 0xe5, 0x20, 0x6a, 0x54, 0xc3, 0x81, 0xea, 0x54, 0x24, 0xc5, 0x92, 0x1d, 0x16, 0xe7, 0xc0, 0xc9, + 0x74, 0x09, 0x56, 0xf3, 0xdf, 0xbb, 0x39, 0xb4, 0xa2, 0x63, 0xb9, 0x56, 0x87, 0xfb, 0x56, 0xfa, + 0xbb, 0x48, 0x85, 0x58, 0x97, 0x44, 0x91, 0xa4, 0x42, 0xec, 0x1e, 0x8b, 0xe9, 0x3b, 0x8e, 0x74, + 0xe7, 0x55, 0xb4, 0xbf, 0x21, 0xad, 0x76, 0x0e, 0x49, 0x8c, 0xbc, 0xa9, 0x62, 0x3c, 0x12, 0x1b, + 0x20, 0x9f, 0xb0, 0xc5, 0x72, 0xbb, 0xb2, 0x9b, 0x99, 0xe8, 0x80, 0x37, 0x13, 0xb5, 0x8d, 0x43, + 0xcf, 0x39, 0xf2, 0x1a, 0x67, 0x17, 0x40, 0xd9, 0x44, 0xea, 0x3f, 0xb3, 0xcd, 0x47, 0xde, 0xad, + 0xb1, 0x18, 0x47, 0xde, 0xad, 0xa1, 0xa8, 0xe8, 0xbb, 0x35, 0xb4, 0xe6, 0xa1, 0xba, 0x78, 0x67, + 0x04, 0xf4, 0x57, 0xb0, 0xc6, 0x5f, 0x03, 0x63, 0xd1, 0xaf, 0x69, 0xf3, 0x49, 0xa3, 0x44, 0xfb, + 0x37, 0x0e, 0x61, 0xb1, 0x7b, 0x59, 0x46, 0xe8, 0x36, 0x18, 0x09, 0x7f, 0x0b, 0x99, 0x4b, 0x31, + 0x12, 0x92, 0x14, 0x5e, 0xeb, 0x56, 0x92, 0x1d, 0xf6, 0x31, 0x38, 0xc0, 0xde, 0xe6, 0xc7, 0x53, + 0xb4, 0x3d, 0x21, 0xe1, 0x95, 0x2e, 0x84, 0x98, 0xf5, 0x6b, 0x60, 0x2c, 0xfa, 0x96, 0x4d, 0x43, + 0x2f, 0x22, 0x9b, 0x8a, 0x5e, 0xd2, 0x53, 0xad, 0x06, 0x40, 0xe0, 0x49, 0xf5, 0x72, 0x8a, 0x05, + 0x5f, 0x4c, 0x58, 0xe8, 0x4a, 0x8c, 0x9d, 0xf1, 0x25, 0x07, 0xa6, 0x93, 0xdf, 0x0b, 0x6f, 0xa4, + 0x71, 0x9e, 0xa4, 0x25, 0x9c, 0xdb, 0x8d, 0x16, 0xf3, 0x68, 0x0b, 0xfc, 0x3f, 0x34, 0x36, 0xcf, + 0xa6, 0x05, 0x14, 0x10, 0x14, 0x8a, 0x5d, 0x0a, 0x06, 0x29, 0x8d, 0x4e, 0xaf, 0xf3, 0xa9, 0xe8, + 0x85, 0x64, 0x53, 0x29, 0x4d, 0x18, 0x3d, 0x79, 0x04, 0x46, 0x23, 0x8d, 0xfa, 0x54, 0x8a, 0x95, + 0xb0, 0xa8, 0x70, 0xba, 0x6b, 0x51, 0x76, 0xde, 0x67, 0x1c, 0x98, 0x8a, 0x9f, 0x9b, 0xd2, 0xea, + 0x2b, 0x56, 0x43, 0x38, 0xdb, 0xab, 0x06, 0xf3, 0xe2, 0x2b, 0x0e, 0x1c, 0x4d, 0x9b, 0x3b, 0xce, + 0xa4, 0x05, 0x96, 0xac, 0x27, 0x9c, 0xdf, 0x9d, 0x5e, 0x08, 0x9d, 0xf8, 0x89, 0x20, 0x0d, 0x9d, + 0x58, 0x8d, 0x54, 0x74, 0x52, 0xaf, 0x71, 0xfe, 0x16, 0x07, 0x26, 0x63, 0xef, 0xf0, 0xb4, 0x84, + 0x8e, 0x53, 0x10, 0x96, 0x7a, 0x54, 0x08, 0xf6, 0xe9, 0xf0, 0x2d, 0x99, 0xd6, 0xa7, 0x43, 0x92, + 0xa9, 0x7d, 0x3a, 0xf6, 0x3e, 0x12, 0x06, 0x6f, 0x39, 0x6f, 0xd3, 0xf2, 0xda, 0x83, 0x27, 0x39, + 0xee, 0xe1, 0x93, 0x1c, 0xf7, 0xfb, 0x93, 0x1c, 0x77, 0xfb, 0x69, 0xae, 0xef, 0xe1, 0xd3, 0x5c, + 0xdf, 0xaf, 0x4f, 0x73, 0x7d, 0x1f, 0xbe, 0x9a, 0xfa, 0x3d, 0xd8, 0x7f, 0xf8, 0x91, 0x2f, 0xc3, + 0xb5, 0x21, 0x32, 0x13, 0xbc, 0xfe, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x74, 0x7c, 0x2c, 0xaa, + 0x49, 0x1b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. From 029f97f2679c59e059ebb4cacc247aa970c937e4 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Wed, 3 Jan 2024 16:22:08 +0100 Subject: [PATCH 10/19] fix amino.name option --- api/cosmos/staking/v1beta1/tx.pulsar.go | 380 ++++++----- go.mod | 3 +- go.sum | 2 + proto/cosmos/staking/v1beta1/tx.proto | 2 +- .../migrations/v3/lsm/migrations_test.go | 612 +++++++++--------- x/staking/migrations/v3/lsm/test_helpers.go | 160 ++--- 6 files changed, 594 insertions(+), 565 deletions(-) diff --git a/api/cosmos/staking/v1beta1/tx.pulsar.go b/api/cosmos/staking/v1beta1/tx.pulsar.go index cf3ed905763e..b29de2b47ba3 100644 --- a/api/cosmos/staking/v1beta1/tx.pulsar.go +++ b/api/cosmos/staking/v1beta1/tx.pulsar.go @@ -14550,90 +14550,113 @@ var file_cosmos_staking_v1beta1_tx_proto_rawDesc = []byte{ 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x0a, 0x12, 0x4d, 0x73, 0x67, - 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, - 0x3f, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0xf2, 0xde, 0x1f, 0x0e, - 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x22, 0x1c, 0x0a, 0x1a, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa0, - 0x02, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x49, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, - 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x64, - 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x13, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, - 0x00, 0x22, 0x54, 0x0a, 0x19, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, - 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, - 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xa8, 0x01, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x52, - 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x37, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x12, 0x4d, 0x73, + 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x12, 0x3f, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0xf2, 0xde, 0x1f, + 0x0e, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, + 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x3a, 0x42, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x27, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2f, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x1c, 0x0a, 0x1a, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, + 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xd7, 0x02, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x22, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x37, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, - 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, - 0x1f, 0x00, 0x22, 0x5b, 0x0a, 0x20, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, - 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, - 0x98, 0x01, 0x0a, 0x1e, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x5f, 0x73, - 0x68, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x4f, 0x77, 0x6e, 0x65, 0x72, - 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x28, 0x0a, 0x26, 0x4d, 0x73, - 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, - 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6f, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, + 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x3a, 0x3f, 0x88, 0xa0, + 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, + 0x1c, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x54, 0x0a, + 0x19, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x22, 0xe6, 0x01, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, + 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x08, 0x88, 0xa0, 0x1f, - 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x22, 0x0a, 0x20, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6e, 0x0a, 0x17, 0x4d, 0x73, 0x67, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x37, 0x0a, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x46, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, + 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x23, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, + 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x5b, 0x0a, 0x20, + 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, + 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, + 0x00, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xd1, 0x01, 0x0a, 0x1e, 0x4d, 0x73, + 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x37, 0x0a, 0x18, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1b, 0x0a, + 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6e, 0x65, 0x77, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x3a, 0x41, 0x88, 0xa0, 0x1f, 0x00, + 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x8a, + 0xe7, 0xb0, 0x2a, 0x29, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, + 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, + 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0x28, 0x0a, + 0x26, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x44, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, - 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x70, 0x0a, 0x1f, 0x4d, 0x73, 0x67, + 0x46, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, + 0xe7, 0xb0, 0x2a, 0x23, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, + 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x22, 0x0a, 0x20, 0x4d, 0x73, 0x67, 0x44, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xab, 0x01, 0x0a, 0x17, + 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, + 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x3a, 0x45, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, + 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x22, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, + 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x70, 0x0a, 0x1f, 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xb2, 0x01, 0x0a, 0x10, + 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xe8, 0x01, 0x0a, 0x10, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, @@ -14644,129 +14667,132 @@ var file_cosmos_staking_v1beta1_tx_proto_rawDesc = []byte{ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, - 0x22, 0x1a, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x42, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x94, 0x0d, 0x0a, - 0x03, 0x4d, 0x73, 0x67, 0x12, 0x71, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0d, 0x45, 0x64, 0x69, 0x74, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x3e, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, + 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x22, 0x1a, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x32, 0x94, 0x0d, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x71, 0x0a, 0x0f, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, + 0x0d, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, - 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, - 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, - 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x19, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x08, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x42, 0x65, 0x67, 0x69, + 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3c, 0x2e, + 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x55, + 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x8f, 0x01, 0x0a, 0x19, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x6f, + 0x69, 0x6f, 0x6e, 0x1a, 0x3c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, + 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x55, + 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, + 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, + 0x0a, 0x0e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, + 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, - 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, + 0x01, 0x0a, 0x15, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, + 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, - 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x73, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x64, - 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, - 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x73, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x1b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, - 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, - 0x01, 0x0a, 0x1b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x36, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x3e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x3e, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, + 0x15, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, - 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x73, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, - 0x14, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, + 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x37, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, - 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x6b, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, - 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, + 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x42, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, - 0xb0, 0x2a, 0x01, 0x42, 0xd7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, 0x16, 0x43, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, - 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x22, - 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xd7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, + 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, + 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, + 0x58, 0xaa, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/go.mod b/go.mod index b987c9bccb6b..2e2701dc58c7 100644 --- a/go.mod +++ b/go.mod @@ -49,6 +49,7 @@ require ( github.com/prometheus/client_golang v1.14.0 github.com/prometheus/common v0.42.0 github.com/rakyll/statik v0.1.7 + github.com/regen-network/cosmos-proto v0.3.1 github.com/rs/zerolog v1.30.0 github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.6.1 @@ -62,6 +63,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 google.golang.org/grpc v1.58.3 google.golang.org/protobuf v1.31.0 + gopkg.in/yaml.v2 v2.4.0 gotest.tools/v3 v3.5.0 pgregory.net/rapid v0.5.5 sigs.k8s.io/yaml v1.3.0 @@ -174,7 +176,6 @@ require ( google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect ) diff --git a/go.sum b/go.sum index e25e0e88d632..f263531ebf25 100644 --- a/go.sum +++ b/go.sum @@ -871,6 +871,8 @@ github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Ung github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= +github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= diff --git a/proto/cosmos/staking/v1beta1/tx.proto b/proto/cosmos/staking/v1beta1/tx.proto index 78bed71137a5..95feb618ea3d 100644 --- a/proto/cosmos/staking/v1beta1/tx.proto +++ b/proto/cosmos/staking/v1beta1/tx.proto @@ -240,7 +240,7 @@ message MsgUpdateParamsResponse {}; // experiencing a slash message MsgUnbondValidator { option (cosmos.msg.v1.signer) = "validator_address"; - option (amino.name) = "cosmos-sdk/x/staking/MsgUnbondValidator"; + option (amino.name) = "cosmos-sdk/MsgUnbondValidator"; string validator_address = 1 [(gogoproto.moretags) = "yaml:\"address\""]; } diff --git a/x/staking/migrations/v3/lsm/migrations_test.go b/x/staking/migrations/v3/lsm/migrations_test.go index 08f9e5b5f1ae..406c27c88fd0 100644 --- a/x/staking/migrations/v3/lsm/migrations_test.go +++ b/x/staking/migrations/v3/lsm/migrations_test.go @@ -2,309 +2,309 @@ package v3_test -import ( - "fmt" - "testing" - "time" - - "github.com/cosmos/cosmos-sdk/codec" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/simapp" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - "github.com/cosmos/cosmos-sdk/testutil" - sdk "github.com/cosmos/cosmos-sdk/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" - v3 "github.com/cosmos/cosmos-sdk/x/staking/migrations/v3" - legacytypes "github.com/cosmos/cosmos-sdk/x/staking/migrations/v3/types" - "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/stretchr/testify/require" -) - -// Helper function to write a validator using the old schema -func setLegacyValidator(store sdk.KVStore, cdc codec.BinaryCodec, validator legacytypes.Validator) { - bz := cdc.MustMarshal(&validator) - store.Set(types.GetValidatorKey(validator.GetOperator()), bz) -} - -// Helper function to write a delegation using the old schema -func setLegacyDelegation(store sdk.KVStore, cdc codec.BinaryCodec, delegation legacytypes.Delegation) { - delegatorAddress := sdk.MustAccAddressFromBech32(delegation.DelegatorAddress) - - bz := cdc.MustMarshal(&delegation) - store.Set(types.GetDelegationKey(delegatorAddress, delegation.GetValidatorAddr()), bz) -} - -// Helper function to get unbonding delegation records -func getUBD(store storetypes.KVStore, cdc codec.BinaryCodec, accAddr sdk.AccAddress, valAddr sdk.ValAddress) (ubdRes types.UnbondingDelegation) { - ubdbz := store.Get(types.GetUBDKey(accAddr, valAddr)) - cdc.MustUnmarshal(ubdbz, &ubdRes) - return ubdRes -} - -// createOldStateUnbonding will create the ubd entries with duplicate heights -// 10 duplicate heights and 10 unique ubd with creation height -func createOldUnbondingDelegationRecords(t *testing.T, creationHeight int64, valAddr sdk.ValAddress, accAddr sdk.AccAddress, cdc codec.BinaryCodec, store storetypes.KVStore) error { - unbondBalance := sdk.NewInt(100) - completionTime := time.Now() - ubdEntries := make([]types.UnbondingDelegationEntry, 0, 10) - - for i := int64(0); i < 10; i++ { - ubdEntry := types.UnbondingDelegationEntry{ - CreationHeight: creationHeight, - Balance: unbondBalance, - InitialBalance: unbondBalance, - CompletionTime: completionTime, - } - ubdEntries = append(ubdEntries, ubdEntry) - // creating more entries for testing the creation_heights - ubdEntry.CreationHeight = i + 2 - ubdEntry.CompletionTime = completionTime.Add(time.Minute * 10) - ubdEntries = append(ubdEntries, ubdEntry) - } - - ubd := types.UnbondingDelegation{ - ValidatorAddress: valAddr.String(), - DelegatorAddress: accAddr.String(), - Entries: ubdEntries, - } - - // set the unbond delegation with validator and delegator - bz := types.MustMarshalUBD(cdc, ubd) - key := types.GetUBDKey(accAddr, valAddr) - store.Set(key, bz) - return nil -} - -// Test setting params in the staking module -func TestMigrateParamsStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig() - stakingKey := storetypes.NewKVStoreKey(types.ModuleName) - tStakingKey := sdk.NewTransientStoreKey("transient_test") - ctx := testutil.DefaultContext(stakingKey, tStakingKey) - paramstore := paramtypes.NewSubspace(cdc.Marshaler, cdc.Amino, stakingKey, tStakingKey, types.ModuleName) - - // Check there are no LSM params - require.False(t, paramstore.Has(ctx, types.KeyValidatorBondFactor)) - require.False(t, paramstore.Has(ctx, types.KeyGlobalLiquidStakingCap)) - require.False(t, paramstore.Has(ctx, types.KeyValidatorLiquidStakingCap)) - - // Run migrations - v3.MigrateParamsStore(ctx, paramstore) - - // Make sure the new params are set - require.True(t, paramstore.Has(ctx, types.KeyValidatorBondFactor)) - require.True(t, paramstore.Has(ctx, types.KeyGlobalLiquidStakingCap)) - require.True(t, paramstore.Has(ctx, types.KeyValidatorLiquidStakingCap)) - - // Confirm default values are set - var validatorBondFactor sdk.Dec - paramstore.Get(ctx, types.KeyValidatorBondFactor, &validatorBondFactor) - require.Equal(t, types.DefaultValidatorBondFactor, validatorBondFactor) - - var globalLiquidStakingCap sdk.Dec - paramstore.Get(ctx, types.KeyGlobalLiquidStakingCap, &globalLiquidStakingCap) - require.Equal(t, types.DefaultGlobalLiquidStakingCap, globalLiquidStakingCap) - - var validatorLiquidStakingCap sdk.Dec - paramstore.Get(ctx, types.KeyValidatorLiquidStakingCap, &validatorLiquidStakingCap) - require.Equal(t, types.DefaultValidatorLiquidStakingCap, validatorLiquidStakingCap) -} - -// Test setting each validator's ValidatorBondShares and LiquidShares to 0 -func TestMigrateValidators(t *testing.T) { - app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - store := ctx.KVStore(app.GetKey(legacytypes.StoreKey)) - - addresses := simapp.AddTestAddrs(app, ctx, 10, sdk.NewInt(1_000_000)) - pubKeys := simapp.CreateTestPubKeys(10) - - // Write each validator with the old type - oldValidators := []legacytypes.Validator{} - for i := int64(0); i < 10; i++ { - valAddress := sdk.ValAddress(addresses[i]).String() - pkAny, err := codectypes.NewAnyWithValue(pubKeys[i]) - require.NoError(t, err) - - dummyTime := time.Date(2023, 1, 1, 0, 0, int(i), 0, time.UTC) - - description := legacytypes.Description{ - Moniker: fmt.Sprintf("moniker-%d", i), - Identity: fmt.Sprintf("identity-%d", i), - Website: fmt.Sprintf("website-%d", i), - SecurityContact: fmt.Sprintf("security-contact-%d", i), - Details: fmt.Sprintf("details-%d", i), - } - - commission := legacytypes.Commission{ - UpdateTime: dummyTime, - CommissionRates: legacytypes.CommissionRates{ - Rate: sdk.NewDec(i), - MaxRate: sdk.NewDec(i), - MaxChangeRate: sdk.NewDec(i), - }, - } - - validator := legacytypes.Validator{ - OperatorAddress: valAddress, - ConsensusPubkey: pkAny, - Jailed: true, - Status: legacytypes.Bonded, - Tokens: sdk.NewInt(1_000_000), - DelegatorShares: sdk.NewDec(1_000_000), - UnbondingHeight: i, - UnbondingTime: dummyTime, - MinSelfDelegation: sdk.NewInt(1_000), - UnbondingOnHoldRefCount: 1, - UnbondingIds: []uint64{uint64(i)}, - Description: description, - Commission: commission, - } - - oldValidators = append(oldValidators, validator) - setLegacyValidator(store, app.AppCodec(), validator) - } - - // Migrate to the new types which adds ValidatorBondShares and LiquidShares - v3.MigrateValidators(ctx, app.StakingKeeper) - - // check that the validator ValidatorBondShares and LiquidShares were correctly set to 0 - for _, val := range app.StakingKeeper.GetAllValidators(ctx) { - require.Equal(t, sdk.ZeroDec(), val.ValidatorBondShares) - require.Equal(t, sdk.ZeroDec(), val.LiquidShares) - } - - // check that the other validator attributes were unchanged - for _, oldValidator := range oldValidators { - newValidator, found := app.StakingKeeper.GetValidator(ctx, oldValidator.GetOperator()) - require.True(t, found) - - require.Equal(t, oldValidator.ConsensusPubkey, newValidator.ConsensusPubkey, "pub key") - require.Equal(t, oldValidator.Jailed, newValidator.Jailed, "jailed") - require.Equal(t, oldValidator.Status.String(), newValidator.Status.String(), "status") - require.Equal(t, oldValidator.Tokens.Int64(), newValidator.Tokens.Int64(), "tokens") - require.Equal(t, oldValidator.DelegatorShares.TruncateInt64(), newValidator.DelegatorShares.TruncateInt64(), "shares") - - require.Equal(t, oldValidator.UnbondingHeight, newValidator.UnbondingHeight, "unbonding height") - require.Equal(t, oldValidator.UnbondingTime, newValidator.UnbondingTime, "unbonding time") - require.Equal(t, oldValidator.UnbondingOnHoldRefCount, newValidator.UnbondingOnHoldRefCount, "unbonding on hold") - require.Equal(t, oldValidator.UnbondingIds, newValidator.UnbondingIds, "unbonding ids") - require.Equal(t, oldValidator.MinSelfDelegation.String(), newValidator.MinSelfDelegation.String(), "min self delegation") - - oldDescription := oldValidator.Description - newDescription := newValidator.Description - require.Equal(t, oldDescription.Moniker, newDescription.Moniker, "moniker") - require.Equal(t, oldDescription.Identity, newDescription.Identity, "identity") - require.Equal(t, oldDescription.Website, newDescription.Website, "website") - require.Equal(t, oldDescription.SecurityContact, newDescription.SecurityContact, "security contact") - require.Equal(t, oldDescription.Details, newDescription.Details, "details") - - oldCommissionRate := oldValidator.Commission.CommissionRates - newCommissionRate := newValidator.Commission.CommissionRates - require.Equal(t, oldValidator.Commission.UpdateTime, newValidator.Commission.UpdateTime, "commission update time") - require.Equal(t, oldCommissionRate.Rate, newCommissionRate.Rate, "commission rate") - require.Equal(t, oldCommissionRate.MaxRate, newCommissionRate.MaxRate, "commission max rate") - require.Equal(t, oldCommissionRate.MaxChangeRate, newCommissionRate.MaxChangeRate, "commission max rate change") - } -} - -// Test setting each delegation's validator bond to false -func TestMigrateDelegations(t *testing.T) { - app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - store := ctx.KVStore(app.GetKey(legacytypes.StoreKey)) - - validatorAddresses := simapp.AddTestAddrs(app, ctx, 10, sdk.NewInt(1_000_000)) - delegatorAddresses := simapp.AddTestAddrs(app, ctx, 10, sdk.NewInt(1_000_000)) - - // Write each delegation with the old type - oldDelegations := []legacytypes.Delegation{} - for i := int64(0); i < 10; i++ { - delegation := legacytypes.Delegation{ - DelegatorAddress: delegatorAddresses[i].String(), - ValidatorAddress: sdk.ValAddress(validatorAddresses[i]).String(), - Shares: sdk.NewDec(i * 1000), - } - - oldDelegations = append(oldDelegations, delegation) - setLegacyDelegation(store, app.AppCodec(), delegation) - } - - // Migrate the new delegations which should add the ValidatorBond field - v3.MigrateDelegations(ctx, app.StakingKeeper) - - // check that the delegation is not a validator bond - for _, delegation := range app.StakingKeeper.GetAllDelegations(ctx) { - require.Equal(t, false, delegation.ValidatorBond) - } - - // check that the other delegation attributes were unchanged - for _, oldDelegation := range oldDelegations { - newDelegation, found := app.StakingKeeper.GetDelegation(ctx, oldDelegation.GetDelegatorAddr(), oldDelegation.GetValidatorAddr()) - require.True(t, found) - - require.Equal(t, oldDelegation.DelegatorAddress, newDelegation.DelegatorAddress, "delegator address") - require.Equal(t, oldDelegation.ValidatorAddress, newDelegation.ValidatorAddress, "validator address") - require.Equal(t, oldDelegation.Shares.TruncateInt64(), newDelegation.Shares.TruncateInt64(), "shares") - } -} - -// Tests unbonding delegation records with the same height are removed and combined into a new record -func TestMigrateUBD(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Marshaler - - storeKey := sdk.NewKVStoreKey(legacytypes.ModuleName) - tKey := sdk.NewTransientStoreKey("transient_test") - ctx := testutil.DefaultContext(storeKey, tKey) - store := ctx.KVStore(storeKey) - duplicateCreationHeight := int64(1) - - accAddrs := v3.CreateIncrementalAccounts(1) - accAddr := accAddrs[0] - - valAddrs := v3.ConvertAddrsToValAddrs(accAddrs) - valAddr := valAddrs[0] - - // creating 10 ubdEntries with same height and 10 ubdEntries with different creation height - err := createOldUnbondingDelegationRecords(t, duplicateCreationHeight, valAddr, accAddr, cdc, store) - require.NoError(t, err) - - testCases := []struct { - name string - doMigration bool - }{ - { - name: "without state migration", - doMigration: false, - }, - { - name: "with state migration", - doMigration: true, - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - if tc.doMigration { - require.NoError(t, v3.MigrateUBDEntries(ctx, store, cdc)) - } - - ubd := getUBD(store, cdc, accAddr, valAddr) - if tc.doMigration { - // checking the updated balance for duplicateCreationHeight - for _, ubdEntry := range ubd.Entries { - if ubdEntry.CreationHeight == duplicateCreationHeight { - require.Equal(t, sdk.NewInt(100*10), ubdEntry.Balance) - break - } - } - require.Equal(t, 11, len(ubd.Entries)) - } else { - require.Equal(t, true, true) - require.Equal(t, 20, len(ubd.Entries)) - } - }) - } -} +// import ( +// "fmt" +// "testing" +// "time" + +// "github.com/cosmos/cosmos-sdk/codec" +// codectypes "github.com/cosmos/cosmos-sdk/codec/types" +// "github.com/cosmos/cosmos-sdk/simapp" +// storetypes "github.com/cosmos/cosmos-sdk/store/types" +// "github.com/cosmos/cosmos-sdk/testutil" +// sdk "github.com/cosmos/cosmos-sdk/types" +// paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + +// tmproto "github.com/cometbft/cometbft/proto/tendermint/types" +// v3 "github.com/cosmos/cosmos-sdk/x/staking/migrations/v3" +// legacytypes "github.com/cosmos/cosmos-sdk/x/staking/migrations/v3/types" +// "github.com/cosmos/cosmos-sdk/x/staking/types" +// "github.com/stretchr/testify/require" +// ) + +// // Helper function to write a validator using the old schema +// func setLegacyValidator(store sdk.KVStore, cdc codec.BinaryCodec, validator legacytypes.Validator) { +// bz := cdc.MustMarshal(&validator) +// store.Set(types.GetValidatorKey(validator.GetOperator()), bz) +// } + +// // Helper function to write a delegation using the old schema +// func setLegacyDelegation(store sdk.KVStore, cdc codec.BinaryCodec, delegation legacytypes.Delegation) { +// delegatorAddress := sdk.MustAccAddressFromBech32(delegation.DelegatorAddress) + +// bz := cdc.MustMarshal(&delegation) +// store.Set(types.GetDelegationKey(delegatorAddress, delegation.GetValidatorAddr()), bz) +// } + +// // Helper function to get unbonding delegation records +// func getUBD(store storetypes.KVStore, cdc codec.BinaryCodec, accAddr sdk.AccAddress, valAddr sdk.ValAddress) (ubdRes types.UnbondingDelegation) { +// ubdbz := store.Get(types.GetUBDKey(accAddr, valAddr)) +// cdc.MustUnmarshal(ubdbz, &ubdRes) +// return ubdRes +// } + +// // createOldStateUnbonding will create the ubd entries with duplicate heights +// // 10 duplicate heights and 10 unique ubd with creation height +// func createOldUnbondingDelegationRecords(t *testing.T, creationHeight int64, valAddr sdk.ValAddress, accAddr sdk.AccAddress, cdc codec.BinaryCodec, store storetypes.KVStore) error { +// unbondBalance := sdk.NewInt(100) +// completionTime := time.Now() +// ubdEntries := make([]types.UnbondingDelegationEntry, 0, 10) + +// for i := int64(0); i < 10; i++ { +// ubdEntry := types.UnbondingDelegationEntry{ +// CreationHeight: creationHeight, +// Balance: unbondBalance, +// InitialBalance: unbondBalance, +// CompletionTime: completionTime, +// } +// ubdEntries = append(ubdEntries, ubdEntry) +// // creating more entries for testing the creation_heights +// ubdEntry.CreationHeight = i + 2 +// ubdEntry.CompletionTime = completionTime.Add(time.Minute * 10) +// ubdEntries = append(ubdEntries, ubdEntry) +// } + +// ubd := types.UnbondingDelegation{ +// ValidatorAddress: valAddr.String(), +// DelegatorAddress: accAddr.String(), +// Entries: ubdEntries, +// } + +// // set the unbond delegation with validator and delegator +// bz := types.MustMarshalUBD(cdc, ubd) +// key := types.GetUBDKey(accAddr, valAddr) +// store.Set(key, bz) +// return nil +// } + +// // Test setting params in the staking module +// func TestMigrateParamsStore(t *testing.T) { +// cdc := simapp.MakeTestEncodingConfig() +// stakingKey := storetypes.NewKVStoreKey(types.ModuleName) +// tStakingKey := sdk.NewTransientStoreKey("transient_test") +// ctx := testutil.DefaultContext(stakingKey, tStakingKey) +// paramstore := paramtypes.NewSubspace(cdc.Marshaler, cdc.Amino, stakingKey, tStakingKey, types.ModuleName) + +// // Check there are no LSM params +// require.False(t, paramstore.Has(ctx, types.KeyValidatorBondFactor)) +// require.False(t, paramstore.Has(ctx, types.KeyGlobalLiquidStakingCap)) +// require.False(t, paramstore.Has(ctx, types.KeyValidatorLiquidStakingCap)) + +// // Run migrations +// v3.MigrateParamsStore(ctx, paramstore) + +// // Make sure the new params are set +// require.True(t, paramstore.Has(ctx, types.KeyValidatorBondFactor)) +// require.True(t, paramstore.Has(ctx, types.KeyGlobalLiquidStakingCap)) +// require.True(t, paramstore.Has(ctx, types.KeyValidatorLiquidStakingCap)) + +// // Confirm default values are set +// var validatorBondFactor sdk.Dec +// paramstore.Get(ctx, types.KeyValidatorBondFactor, &validatorBondFactor) +// require.Equal(t, types.DefaultValidatorBondFactor, validatorBondFactor) + +// var globalLiquidStakingCap sdk.Dec +// paramstore.Get(ctx, types.KeyGlobalLiquidStakingCap, &globalLiquidStakingCap) +// require.Equal(t, types.DefaultGlobalLiquidStakingCap, globalLiquidStakingCap) + +// var validatorLiquidStakingCap sdk.Dec +// paramstore.Get(ctx, types.KeyValidatorLiquidStakingCap, &validatorLiquidStakingCap) +// require.Equal(t, types.DefaultValidatorLiquidStakingCap, validatorLiquidStakingCap) +// } + +// // Test setting each validator's ValidatorBondShares and LiquidShares to 0 +// func TestMigrateValidators(t *testing.T) { +// app := simapp.Setup(false) +// ctx := app.BaseApp.NewContext(false, tmproto.Header{}) +// store := ctx.KVStore(app.GetKey(legacytypes.StoreKey)) + +// addresses := simapp.AddTestAddrs(app, ctx, 10, sdk.NewInt(1_000_000)) +// pubKeys := simapp.CreateTestPubKeys(10) + +// // Write each validator with the old type +// oldValidators := []legacytypes.Validator{} +// for i := int64(0); i < 10; i++ { +// valAddress := sdk.ValAddress(addresses[i]).String() +// pkAny, err := codectypes.NewAnyWithValue(pubKeys[i]) +// require.NoError(t, err) + +// dummyTime := time.Date(2023, 1, 1, 0, 0, int(i), 0, time.UTC) + +// description := legacytypes.Description{ +// Moniker: fmt.Sprintf("moniker-%d", i), +// Identity: fmt.Sprintf("identity-%d", i), +// Website: fmt.Sprintf("website-%d", i), +// SecurityContact: fmt.Sprintf("security-contact-%d", i), +// Details: fmt.Sprintf("details-%d", i), +// } + +// commission := legacytypes.Commission{ +// UpdateTime: dummyTime, +// CommissionRates: legacytypes.CommissionRates{ +// Rate: sdk.NewDec(i), +// MaxRate: sdk.NewDec(i), +// MaxChangeRate: sdk.NewDec(i), +// }, +// } + +// validator := legacytypes.Validator{ +// OperatorAddress: valAddress, +// ConsensusPubkey: pkAny, +// Jailed: true, +// Status: legacytypes.Bonded, +// Tokens: sdk.NewInt(1_000_000), +// DelegatorShares: sdk.NewDec(1_000_000), +// UnbondingHeight: i, +// UnbondingTime: dummyTime, +// MinSelfDelegation: sdk.NewInt(1_000), +// UnbondingOnHoldRefCount: 1, +// UnbondingIds: []uint64{uint64(i)}, +// Description: description, +// Commission: commission, +// } + +// oldValidators = append(oldValidators, validator) +// setLegacyValidator(store, app.AppCodec(), validator) +// } + +// // Migrate to the new types which adds ValidatorBondShares and LiquidShares +// v3.MigrateValidators(ctx, app.StakingKeeper) + +// // check that the validator ValidatorBondShares and LiquidShares were correctly set to 0 +// for _, val := range app.StakingKeeper.GetAllValidators(ctx) { +// require.Equal(t, sdk.ZeroDec(), val.ValidatorBondShares) +// require.Equal(t, sdk.ZeroDec(), val.LiquidShares) +// } + +// // check that the other validator attributes were unchanged +// for _, oldValidator := range oldValidators { +// newValidator, found := app.StakingKeeper.GetValidator(ctx, oldValidator.GetOperator()) +// require.True(t, found) + +// require.Equal(t, oldValidator.ConsensusPubkey, newValidator.ConsensusPubkey, "pub key") +// require.Equal(t, oldValidator.Jailed, newValidator.Jailed, "jailed") +// require.Equal(t, oldValidator.Status.String(), newValidator.Status.String(), "status") +// require.Equal(t, oldValidator.Tokens.Int64(), newValidator.Tokens.Int64(), "tokens") +// require.Equal(t, oldValidator.DelegatorShares.TruncateInt64(), newValidator.DelegatorShares.TruncateInt64(), "shares") + +// require.Equal(t, oldValidator.UnbondingHeight, newValidator.UnbondingHeight, "unbonding height") +// require.Equal(t, oldValidator.UnbondingTime, newValidator.UnbondingTime, "unbonding time") +// require.Equal(t, oldValidator.UnbondingOnHoldRefCount, newValidator.UnbondingOnHoldRefCount, "unbonding on hold") +// require.Equal(t, oldValidator.UnbondingIds, newValidator.UnbondingIds, "unbonding ids") +// require.Equal(t, oldValidator.MinSelfDelegation.String(), newValidator.MinSelfDelegation.String(), "min self delegation") + +// oldDescription := oldValidator.Description +// newDescription := newValidator.Description +// require.Equal(t, oldDescription.Moniker, newDescription.Moniker, "moniker") +// require.Equal(t, oldDescription.Identity, newDescription.Identity, "identity") +// require.Equal(t, oldDescription.Website, newDescription.Website, "website") +// require.Equal(t, oldDescription.SecurityContact, newDescription.SecurityContact, "security contact") +// require.Equal(t, oldDescription.Details, newDescription.Details, "details") + +// oldCommissionRate := oldValidator.Commission.CommissionRates +// newCommissionRate := newValidator.Commission.CommissionRates +// require.Equal(t, oldValidator.Commission.UpdateTime, newValidator.Commission.UpdateTime, "commission update time") +// require.Equal(t, oldCommissionRate.Rate, newCommissionRate.Rate, "commission rate") +// require.Equal(t, oldCommissionRate.MaxRate, newCommissionRate.MaxRate, "commission max rate") +// require.Equal(t, oldCommissionRate.MaxChangeRate, newCommissionRate.MaxChangeRate, "commission max rate change") +// } +// } + +// // Test setting each delegation's validator bond to false +// func TestMigrateDelegations(t *testing.T) { +// app := simapp.Setup(false) +// ctx := app.BaseApp.NewContext(false, tmproto.Header{}) +// store := ctx.KVStore(app.GetKey(legacytypes.StoreKey)) + +// validatorAddresses := simapp.AddTestAddrs(app, ctx, 10, sdk.NewInt(1_000_000)) +// delegatorAddresses := simapp.AddTestAddrs(app, ctx, 10, sdk.NewInt(1_000_000)) + +// // Write each delegation with the old type +// oldDelegations := []legacytypes.Delegation{} +// for i := int64(0); i < 10; i++ { +// delegation := legacytypes.Delegation{ +// DelegatorAddress: delegatorAddresses[i].String(), +// ValidatorAddress: sdk.ValAddress(validatorAddresses[i]).String(), +// Shares: sdk.NewDec(i * 1000), +// } + +// oldDelegations = append(oldDelegations, delegation) +// setLegacyDelegation(store, app.AppCodec(), delegation) +// } + +// // Migrate the new delegations which should add the ValidatorBond field +// v3.MigrateDelegations(ctx, app.StakingKeeper) + +// // check that the delegation is not a validator bond +// for _, delegation := range app.StakingKeeper.GetAllDelegations(ctx) { +// require.Equal(t, false, delegation.ValidatorBond) +// } + +// // check that the other delegation attributes were unchanged +// for _, oldDelegation := range oldDelegations { +// newDelegation, found := app.StakingKeeper.GetDelegation(ctx, oldDelegation.GetDelegatorAddr(), oldDelegation.GetValidatorAddr()) +// require.True(t, found) + +// require.Equal(t, oldDelegation.DelegatorAddress, newDelegation.DelegatorAddress, "delegator address") +// require.Equal(t, oldDelegation.ValidatorAddress, newDelegation.ValidatorAddress, "validator address") +// require.Equal(t, oldDelegation.Shares.TruncateInt64(), newDelegation.Shares.TruncateInt64(), "shares") +// } +// } + +// // Tests unbonding delegation records with the same height are removed and combined into a new record +// func TestMigrateUBD(t *testing.T) { +// cdc := simapp.MakeTestEncodingConfig().Marshaler + +// storeKey := sdk.NewKVStoreKey(legacytypes.ModuleName) +// tKey := sdk.NewTransientStoreKey("transient_test") +// ctx := testutil.DefaultContext(storeKey, tKey) +// store := ctx.KVStore(storeKey) +// duplicateCreationHeight := int64(1) + +// accAddrs := v3.CreateIncrementalAccounts(1) +// accAddr := accAddrs[0] + +// valAddrs := v3.ConvertAddrsToValAddrs(accAddrs) +// valAddr := valAddrs[0] + +// // creating 10 ubdEntries with same height and 10 ubdEntries with different creation height +// err := createOldUnbondingDelegationRecords(t, duplicateCreationHeight, valAddr, accAddr, cdc, store) +// require.NoError(t, err) + +// testCases := []struct { +// name string +// doMigration bool +// }{ +// { +// name: "without state migration", +// doMigration: false, +// }, +// { +// name: "with state migration", +// doMigration: true, +// }, +// } + +// for _, tc := range testCases { +// t.Run(tc.name, func(t *testing.T) { +// if tc.doMigration { +// require.NoError(t, v3.MigrateUBDEntries(ctx, store, cdc)) +// } + +// ubd := getUBD(store, cdc, accAddr, valAddr) +// if tc.doMigration { +// // checking the updated balance for duplicateCreationHeight +// for _, ubdEntry := range ubd.Entries { +// if ubdEntry.CreationHeight == duplicateCreationHeight { +// require.Equal(t, sdk.NewInt(100*10), ubdEntry.Balance) +// break +// } +// } +// require.Equal(t, 11, len(ubd.Entries)) +// } else { +// require.Equal(t, true, true) +// require.Equal(t, 20, len(ubd.Entries)) +// } +// }) +// } +// } diff --git a/x/staking/migrations/v3/lsm/test_helpers.go b/x/staking/migrations/v3/lsm/test_helpers.go index 3fe9e9c0e28a..cfed9fa8110c 100644 --- a/x/staking/migrations/v3/lsm/test_helpers.go +++ b/x/staking/migrations/v3/lsm/test_helpers.go @@ -3,83 +3,83 @@ // This file contains utility testing functions from SDK 47 that are required for the UBD migration unit test package v3 -import ( - "bytes" - "encoding/hex" - "fmt" - "strconv" - - sdk "github.com/cosmos/cosmos-sdk/types" -) - -// CreateIncrementalAccounts is a strategy used by addTestAddrs() in order to generated addresses in ascending order. -func CreateIncrementalAccounts(accNum int) []sdk.AccAddress { - var addresses []sdk.AccAddress - var buffer bytes.Buffer - - // start at 100 so we can make up to 999 test addresses with valid test addresses - for i := 100; i < (accNum + 100); i++ { - numString := strconv.Itoa(i) - buffer.WriteString("A58856F0FD53BF058B4909A21AEC019107BA6") // base address string - - buffer.WriteString(numString) // adding on final two digits to make addresses unique - res, _ := AccAddressFromHexUnsafe(buffer.String()) - bech := res.String() - addr, _ := CheckHexConversion(buffer.String(), bech) - - addresses = append(addresses, addr) - buffer.Reset() - } - - return addresses -} - -func CheckHexConversion(addr string, bech string) (sdk.AccAddress, error) { - res, err := AccAddressFromHexUnsafe(addr) - if err != nil { - return nil, err - } - bechexpected := res.String() - if bech != bechexpected { - return nil, fmt.Errorf("bech encoding doesn't match reference") - } - - bechres, err := sdk.AccAddressFromBech32(bech) - if err != nil { - return nil, err - } - if !bytes.Equal(bechres, res) { - return nil, err - } - - return res, nil -} - -// ConvertAddrsToValAddrs converts the provided addresses to ValAddress. -func ConvertAddrsToValAddrs(addrs []sdk.AccAddress) []sdk.ValAddress { - valAddrs := make([]sdk.ValAddress, len(addrs)) - - for i, addr := range addrs { - valAddrs[i] = sdk.ValAddress(addr) - } - - return valAddrs -} - -// AccAddressFromHexUnsafe creates an AccAddress from a HEX-encoded string. -// -// Note, this function is considered unsafe as it may produce an AccAddress from -// otherwise invalid input, such as a transaction hash. Please use -// AccAddressFromBech32. -func AccAddressFromHexUnsafe(address string) (addr sdk.AccAddress, err error) { - bz, err := addressBytesFromHexString(address) - return sdk.AccAddress(bz), err -} - -func addressBytesFromHexString(address string) ([]byte, error) { - if len(address) == 0 { - return nil, fmt.Errorf("empty hex address") - } - - return hex.DecodeString(address) -} +// import ( +// "bytes" +// "encoding/hex" +// "fmt" +// "strconv" + +// sdk "github.com/cosmos/cosmos-sdk/types" +// ) + +// // CreateIncrementalAccounts is a strategy used by addTestAddrs() in order to generated addresses in ascending order. +// func CreateIncrementalAccounts(accNum int) []sdk.AccAddress { +// var addresses []sdk.AccAddress +// var buffer bytes.Buffer + +// // start at 100 so we can make up to 999 test addresses with valid test addresses +// for i := 100; i < (accNum + 100); i++ { +// numString := strconv.Itoa(i) +// buffer.WriteString("A58856F0FD53BF058B4909A21AEC019107BA6") // base address string + +// buffer.WriteString(numString) // adding on final two digits to make addresses unique +// res, _ := AccAddressFromHexUnsafe(buffer.String()) +// bech := res.String() +// addr, _ := CheckHexConversion(buffer.String(), bech) + +// addresses = append(addresses, addr) +// buffer.Reset() +// } + +// return addresses +// } + +// func CheckHexConversion(addr string, bech string) (sdk.AccAddress, error) { +// res, err := AccAddressFromHexUnsafe(addr) +// if err != nil { +// return nil, err +// } +// bechexpected := res.String() +// if bech != bechexpected { +// return nil, fmt.Errorf("bech encoding doesn't match reference") +// } + +// bechres, err := sdk.AccAddressFromBech32(bech) +// if err != nil { +// return nil, err +// } +// if !bytes.Equal(bechres, res) { +// return nil, err +// } + +// return res, nil +// } + +// // ConvertAddrsToValAddrs converts the provided addresses to ValAddress. +// func ConvertAddrsToValAddrs(addrs []sdk.AccAddress) []sdk.ValAddress { +// valAddrs := make([]sdk.ValAddress, len(addrs)) + +// for i, addr := range addrs { +// valAddrs[i] = sdk.ValAddress(addr) +// } + +// return valAddrs +// } + +// // AccAddressFromHexUnsafe creates an AccAddress from a HEX-encoded string. +// // +// // Note, this function is considered unsafe as it may produce an AccAddress from +// // otherwise invalid input, such as a transaction hash. Please use +// // AccAddressFromBech32. +// func AccAddressFromHexUnsafe(address string) (addr sdk.AccAddress, err error) { +// bz, err := addressBytesFromHexString(address) +// return sdk.AccAddress(bz), err +// } + +// func addressBytesFromHexString(address string) ([]byte, error) { +// if len(address) == 0 { +// return nil, fmt.Errorf("empty hex address") +// } + +// return hex.DecodeString(address) +// } From daa9cc5c899a8df320e20dc3475830bc067383f8 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Wed, 3 Jan 2024 16:53:19 +0100 Subject: [PATCH 11/19] clean LSM TODO --- runtime/app.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/runtime/app.go b/runtime/app.go index e6053385e498..fa733fc4ce53 100644 --- a/runtime/app.go +++ b/runtime/app.go @@ -82,7 +82,7 @@ func (a *App) RegisterModules(modules ...module.AppModule) error { // RegisterStores registers the provided store keys. // This method should only be used for registering extra stores -// wiich is necessary for modules that not registered using the app config. +// which is necessary for modules that not registered using the app config. // To be used in combination of RegisterModules. func (a *App) RegisterStores(keys ...storetypes.StoreKey) error { a.storeKeys = append(a.storeKeys, keys...) @@ -121,10 +121,9 @@ func (a *App) Load(loadLatest bool) error { a.SetEndBlocker(a.EndBlocker) } - // TODO LSM refactor fix this - // if len(a.config.OrderMigrations) != 0 { - // a.ModuleManager.SetOrderMigrations(a.config.OrderMigrations...) - // } + if len(a.config.OrderMigrations) != 0 { + a.ModuleManager.SetOrderMigrations(a.config.OrderMigrations...) + } if loadLatest { if err := a.LoadLatestVersion(); err != nil { From ef0fd7193c09523ac22e658d55e5139bb94b1c37 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Wed, 3 Jan 2024 17:22:45 +0100 Subject: [PATCH 12/19] lint + clean LSM left TODO --- snapshots/store.go | 2 +- tests/e2e/distribution/withdraw_all_suite.go | 4 ++-- x/distribution/client/cli/suite_test.go | 6 ------ 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/snapshots/store.go b/snapshots/store.go index 3ceafa2bbe03..1087c826fab2 100644 --- a/snapshots/store.go +++ b/snapshots/store.go @@ -260,7 +260,7 @@ func (s *Store) Save( snapshotHasher := sha256.New() chunkHasher := sha256.New() for chunkBody := range chunks { - defer chunkBody.Close() + defer chunkBody.Close() //nolint:staticcheck dir := s.pathSnapshot(height, format) err = os.MkdirAll(dir, 0o755) if err != nil { diff --git a/tests/e2e/distribution/withdraw_all_suite.go b/tests/e2e/distribution/withdraw_all_suite.go index 25a431d54c1f..658d0e32a4f9 100644 --- a/tests/e2e/distribution/withdraw_all_suite.go +++ b/tests/e2e/distribution/withdraw_all_suite.go @@ -44,8 +44,8 @@ func (s *WithdrawAllTestSuite) TearDownSuite() { s.network.Cleanup() } -// This test requires multiple validators, if I add this test to `E2ETestSuite` by increasing -// `NumValidators` the existing tests are leading to non-determnism so created new suite for this test. +// This test requires multiple validators, if I add this test to `CLITestSuite` by increasing +// `NumValidators` the existing tests are leading to non-determinism so created new suite for this test. func (s *WithdrawAllTestSuite) TestNewWithdrawAllRewardsGenerateOnly() { require := s.Require() val := s.network.Validators[0] diff --git a/x/distribution/client/cli/suite_test.go b/x/distribution/client/cli/suite_test.go index fa426fdadf05..5a500794a2cc 100644 --- a/x/distribution/client/cli/suite_test.go +++ b/x/distribution/client/cli/suite_test.go @@ -720,9 +720,3 @@ func (s *CLITestSuite) TestNewWithdrawAllTokenizeShareRecordRewardCmd() { }) } } - -// This test requires multiple validators, if I add this test to `IntegrationTestSuite` by increasing -// `NumValidators` the existing tests are leading to non-determnism so created new suite for this test. -func (s *CLITestSuite) TestNewWithdrawAllRewardsGenerateOnly() { - // TODO add LSM test -} From 773c61c2c1520962234e3829c1df78ee3d55fee4 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Thu, 4 Jan 2024 09:46:24 +0100 Subject: [PATCH 13/19] add missing test: --- tests/e2e/distribution/withdraw_all_suite.go | 2 +- .../staking/keeper/liquid_stake_test.go | 213 ++++++++++++++++++ 2 files changed, 214 insertions(+), 1 deletion(-) diff --git a/tests/e2e/distribution/withdraw_all_suite.go b/tests/e2e/distribution/withdraw_all_suite.go index 658d0e32a4f9..f63f7e5beefe 100644 --- a/tests/e2e/distribution/withdraw_all_suite.go +++ b/tests/e2e/distribution/withdraw_all_suite.go @@ -38,7 +38,7 @@ func (s *WithdrawAllTestSuite) SetupSuite() { s.Require().NoError(s.network.WaitForNextBlock()) } -// TearDownSuite cleans up the curret test network after _each_ test. +// TearDownSuite cleans up the current test network after _each_ test. func (s *WithdrawAllTestSuite) TearDownSuite() { s.T().Log("tearing down e2e test suite") s.network.Cleanup() diff --git a/tests/integration/staking/keeper/liquid_stake_test.go b/tests/integration/staking/keeper/liquid_stake_test.go index 1f0a96382f16..901b21efccba 100644 --- a/tests/integration/staking/keeper/liquid_stake_test.go +++ b/tests/integration/staking/keeper/liquid_stake_test.go @@ -1,13 +1,16 @@ package keeper_test import ( + "fmt" "testing" "cosmossdk.io/math" + "cosmossdk.io/simapp" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" accountkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" "github.com/cosmos/cosmos-sdk/x/staking/keeper" @@ -37,6 +40,24 @@ func fundPoolBalance(t *testing.T, sk keeper.Keeper, bk bankkeeper.Keeper, ctx s require.NoError(t, err, "no error expected when sending tokens to bonded pool") } +// Helper function to create a module account address from a tokenized share +// Used to mock the delegation owner of a tokenized share +func createTokenizeShareModuleAccount(recordID uint64) sdk.AccAddress { + record := types.TokenizeShareRecord{ + Id: recordID, + ModuleAccount: fmt.Sprintf("%s%d", types.TokenizeShareModuleAccountPrefix, recordID), + } + return record.GetModuleAddress() +} + +// Helper function to create a base account from an account name +// Used to differentiate against liquid staking provider module account +func createBaseAccount(ak accountkeeper.AccountKeeper, ctx sdk.Context, accountName string) sdk.AccAddress { + baseAccountAddress := sdk.AccAddress(accountName) + ak.SetAccount(ctx, authtypes.NewBaseAccountWithAddress(baseAccountAddress)) + return baseAccountAddress +} + // Tests CheckExceedsGlobalLiquidStakingCap func TestCheckExceedsGlobalLiquidStakingCap(t *testing.T) { var ( @@ -272,3 +293,195 @@ func TestSafelyIncreaseTotalLiquidStakedTokens(t *testing.T) { require.NoError(t, err) require.Equal(t, intitialTotalLiquidStaked.Add(increaseAmount), stakingKeeper.GetTotalLiquidStakedTokens(ctx)) } + +// Test RefreshTotalLiquidStaked +func TestRefreshTotalLiquidStaked(t *testing.T) { + _, app, ctx := createTestInput(t) + + var ( + accountKeeper = app.AccountKeeper + stakingKeeper = app.StakingKeeper + ) + + // Set an arbitrary total liquid staked tokens amount that will get overwritten by the refresh + stakingKeeper.SetTotalLiquidStakedTokens(ctx, sdk.NewInt(999)) + + // Add validator's with various exchange rates + validators := []types.Validator{ + { + // Exchange rate of 1 + OperatorAddress: "valA", + Tokens: sdk.NewInt(100), + DelegatorShares: sdk.NewDec(100), + LiquidShares: sdk.NewDec(100), // should be overwritten + }, + { + // Exchange rate of 0.9 + OperatorAddress: "valB", + Tokens: sdk.NewInt(90), + DelegatorShares: sdk.NewDec(100), + LiquidShares: sdk.NewDec(200), // should be overwritten + }, + { + // Exchange rate of 0.75 + OperatorAddress: "valC", + Tokens: sdk.NewInt(75), + DelegatorShares: sdk.NewDec(100), + LiquidShares: sdk.NewDec(300), // should be overwritten + }, + } + + // Add various delegations across the above validator's + // Total Liquid Staked: 1,849 + 922 = 2,771 + // Liquid Shares: + // ValA: 400 + 325 = 725 + // ValB: 860 + 580 = 1,440 + // ValC: 900 + 100 = 1,000 + expectedTotalLiquidStaked := int64(2771) + expectedValidatorLiquidShares := map[string]sdk.Dec{ + "valA": sdk.NewDec(725), + "valB": sdk.NewDec(1440), + "valC": sdk.NewDec(1000), + } + + delegations := []struct { + delegation types.Delegation + isLSTP bool + isTokenized bool + }{ + // Delegator A - Not a liquid staking provider + // Number of tokens/shares is irrelevant for this test + { + isLSTP: false, + delegation: types.Delegation{ + DelegatorAddress: "delA", + ValidatorAddress: "valA", + Shares: sdk.NewDec(100), + }, + }, + { + isLSTP: false, + delegation: types.Delegation{ + DelegatorAddress: "delA", + ValidatorAddress: "valB", + Shares: sdk.NewDec(860), + }, + }, + { + isLSTP: false, + delegation: types.Delegation{ + DelegatorAddress: "delA", + ValidatorAddress: "valC", + Shares: sdk.NewDec(750), + }, + }, + // Delegator B - Liquid staking provider, tokens included in total + // Total liquid staked: 400 + 774 + 675 = 1,849 + { + // Shares: 400 shares, Exchange Rate: 1.0, Tokens: 400 + isLSTP: true, + delegation: types.Delegation{ + DelegatorAddress: "delB-LSTP", + ValidatorAddress: "valA", + Shares: sdk.NewDec(400), + }, + }, + { + // Shares: 860 shares, Exchange Rate: 0.9, Tokens: 774 + isLSTP: true, + delegation: types.Delegation{ + DelegatorAddress: "delB-LSTP", + ValidatorAddress: "valB", + Shares: sdk.NewDec(860), + }, + }, + { + // Shares: 900 shares, Exchange Rate: 0.75, Tokens: 675 + isLSTP: true, + delegation: types.Delegation{ + DelegatorAddress: "delB-LSTP", + ValidatorAddress: "valC", + Shares: sdk.NewDec(900), + }, + }, + // Delegator C - Tokenized shares, tokens included in total + // Total liquid staked: 325 + 522 + 75 = 922 + { + // Shares: 325 shares, Exchange Rate: 1.0, Tokens: 325 + isTokenized: true, + delegation: types.Delegation{ + DelegatorAddress: "delC-LSTP", + ValidatorAddress: "valA", + Shares: sdk.NewDec(325), + }, + }, + { + // Shares: 580 shares, Exchange Rate: 0.9, Tokens: 522 + isTokenized: true, + delegation: types.Delegation{ + DelegatorAddress: "delC-LSTP", + ValidatorAddress: "valB", + Shares: sdk.NewDec(580), + }, + }, + { + // Shares: 100 shares, Exchange Rate: 0.75, Tokens: 75 + isTokenized: true, + delegation: types.Delegation{ + DelegatorAddress: "delC-LSTP", + ValidatorAddress: "valC", + Shares: sdk.NewDec(100), + }, + }, + } + + // Create validators based on the above (must use an actual validator address) + addresses := simapp.AddTestAddrsIncremental(app, ctx, 5, app.StakingKeeper.TokensFromConsensusPower(ctx, 300)) + validatorAddresses := map[string]sdk.ValAddress{ + "valA": sdk.ValAddress(addresses[0]), + "valB": sdk.ValAddress(addresses[1]), + "valC": sdk.ValAddress(addresses[2]), + } + for _, validator := range validators { + validator.OperatorAddress = validatorAddresses[validator.OperatorAddress].String() + app.StakingKeeper.SetValidator(ctx, validator) + } + + // Create the delegations based on the above (must use actual delegator addresses) + for _, delegationCase := range delegations { + var delegatorAddress sdk.AccAddress + switch { + case delegationCase.isLSTP: + delegatorAddress = createICAAccount(ctx, accountKeeper) + case delegationCase.isTokenized: + delegatorAddress = createTokenizeShareModuleAccount(1) + default: + delegatorAddress = createBaseAccount(accountKeeper, ctx, delegationCase.delegation.DelegatorAddress) + } + + delegation := delegationCase.delegation + delegation.DelegatorAddress = delegatorAddress.String() + delegation.ValidatorAddress = validatorAddresses[delegation.ValidatorAddress].String() + app.StakingKeeper.SetDelegation(ctx, delegation) + } + + // Refresh the total liquid staked and validator liquid shares + err := app.StakingKeeper.RefreshTotalLiquidStaked(ctx) + require.NoError(t, err, "no error expected when refreshing total liquid staked") + + // Check the total liquid staked and liquid shares by validator + actualTotalLiquidStaked := app.StakingKeeper.GetTotalLiquidStakedTokens(ctx) + require.Equal(t, expectedTotalLiquidStaked, actualTotalLiquidStaked.Int64(), "total liquid staked tokens") + + for _, moniker := range []string{"valA", "valB", "valC"} { + address := validatorAddresses[moniker] + expectedLiquidShares := expectedValidatorLiquidShares[moniker] + + actualValidator, found := app.StakingKeeper.GetValidator(ctx, address) + require.True(t, found, "validator %s should have been found after refresh", moniker) + + actualLiquidShares := actualValidator.LiquidShares + require.Equal(t, expectedLiquidShares.TruncateInt64(), actualLiquidShares.TruncateInt64(), + "liquid staked shares for validator %s", moniker) + } +} From dc3df2e884c9f14f3c81037f34fc70a41bfde501 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Fri, 5 Jan 2024 09:50:18 +0100 Subject: [PATCH 14/19] fix!: update formula in `CheckValidatorLiquidStakingCap` (#11) * Fix bug in `CheckExceedsValidatorLiquidStakingCap` formula * Update x/staking/keeper/liquid_stake.go Co-authored-by: Marius Poke * fix unit test bug --------- Co-authored-by: Marius Poke --- x/staking/keeper/liquid_stake.go | 22 ++++--- x/staking/keeper/liquid_stake_test.go | 83 +++++++++++++++++++++++---- x/staking/keeper/msg_server.go | 8 +-- 3 files changed, 91 insertions(+), 22 deletions(-) diff --git a/x/staking/keeper/liquid_stake.go b/x/staking/keeper/liquid_stake.go index 62b2473f50fc..2a52d373f0e9 100644 --- a/x/staking/keeper/liquid_stake.go +++ b/x/staking/keeper/liquid_stake.go @@ -96,12 +96,20 @@ func (k Keeper) CheckExceedsValidatorBondCap(ctx sdk.Context, validator types.Va } // CheckExceedsValidatorLiquidStakingCap checks if a liquid delegation could cause the -// total liuquid shares to exceed the liquid staking cap +// total liquid shares to exceed the liquid staking cap // A liquid delegation is defined as either tokenized shares, or a delegation from an ICA Account +// If the liquid delegation's shares are already bonded (e.g. in the event of a tokenized share) +// the tokens are already included in the validator's delegator shares +// If the liquid delegation's shares are not bonded (e.g. normal delegation), +// we need to add the shares to the current validator's delegator shares to get the total shares // Returns true if the cap is exceeded -func (k Keeper) CheckExceedsValidatorLiquidStakingCap(ctx sdk.Context, validator types.Validator, shares sdk.Dec) bool { +func (k Keeper) CheckExceedsValidatorLiquidStakingCap(ctx sdk.Context, validator types.Validator, shares sdk.Dec, sharesAlreadyBonded bool) bool { updatedLiquidShares := validator.LiquidShares.Add(shares) - updatedTotalShares := validator.DelegatorShares.Add(shares) + + updatedTotalShares := validator.DelegatorShares + if !sharesAlreadyBonded { + updatedTotalShares = updatedTotalShares.Add(shares) + } liquidStakePercent := updatedLiquidShares.Quo(updatedTotalShares) liquidStakingCap := k.ValidatorLiquidStakingCap(ctx) @@ -138,9 +146,9 @@ func (k Keeper) DecreaseTotalLiquidStakedTokens(ctx sdk.Context, amount math.Int // // The percentage of validator liquid shares must be less than the ValidatorLiquidStakingCap, // and the total liquid staked shares cannot exceed the validator bond cap -// 1) (TotalLiquidStakedTokens / TotalStakedTokens) <= ValidatorLiquidStakingCap -// 2) LiquidShares <= (ValidatorBondShares * ValidatorBondFactor) -func (k Keeper) SafelyIncreaseValidatorLiquidShares(ctx sdk.Context, valAddress sdk.ValAddress, shares sdk.Dec) (types.Validator, error) { +// 1. (TotalLiquidStakedTokens / TotalStakedTokens) <= ValidatorLiquidStakingCap +// 2. LiquidShares <= (ValidatorBondShares * ValidatorBondFactor) +func (k Keeper) SafelyIncreaseValidatorLiquidShares(ctx sdk.Context, valAddress sdk.ValAddress, shares sdk.Dec, sharesAlreadyBonded bool) (types.Validator, error) { validator, found := k.GetValidator(ctx, valAddress) if !found { return validator, types.ErrNoValidatorFound @@ -150,7 +158,7 @@ func (k Keeper) SafelyIncreaseValidatorLiquidShares(ctx sdk.Context, valAddress if k.CheckExceedsValidatorBondCap(ctx, validator, shares) { return validator, types.ErrInsufficientValidatorBondShares } - if k.CheckExceedsValidatorLiquidStakingCap(ctx, validator, shares) { + if k.CheckExceedsValidatorLiquidStakingCap(ctx, validator, shares, sharesAlreadyBonded) { return validator, types.ErrValidatorLiquidStakingCapExceeded } diff --git a/x/staking/keeper/liquid_stake_test.go b/x/staking/keeper/liquid_stake_test.go index 9e622c815d08..a4870c8419db 100644 --- a/x/staking/keeper/liquid_stake_test.go +++ b/x/staking/keeper/liquid_stake_test.go @@ -218,72 +218,131 @@ func (s *KeeperTestSuite) TestCheckExceedsValidatorLiquidStakingCap() { validatorLiquidShares sdk.Dec validatorTotalShares sdk.Dec newLiquidShares sdk.Dec + tokenizingShares bool expectedExceeds bool }{ { // Cap: 10% - Delegation Below Threshold // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 1 // => Liquid Shares: 5+1=6, Total Shares: 95+1=96 => 6/96 = 6% < 10% cap - name: "10 percent cap _ delegation below cap", + name: "10 percent cap _ native delegation _ below cap", validatorLiquidCap: sdk.MustNewDecFromStr("0.1"), validatorLiquidShares: sdk.NewDec(5), validatorTotalShares: sdk.NewDec(95), newLiquidShares: sdk.NewDec(1), + tokenizingShares: false, expectedExceeds: false, }, { // Cap: 10% - Delegation At Threshold // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 5 // => Liquid Shares: 5+5=10, Total Shares: 95+5=100 => 10/100 = 10% == 10% cap - name: "10 percent cap _ delegation equals cap", + name: "10 percent cap _ native delegation _ equals cap", validatorLiquidCap: sdk.MustNewDecFromStr("0.1"), validatorLiquidShares: sdk.NewDec(5), validatorTotalShares: sdk.NewDec(95), newLiquidShares: sdk.NewDec(4), + tokenizingShares: false, expectedExceeds: false, }, { // Cap: 10% - Delegation Exceeds Threshold // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 6 // => Liquid Shares: 5+6=11, Total Shares: 95+6=101 => 11/101 = 11% > 10% cap - name: "10 percent cap _ delegation exceeds cap", + name: "10 percent cap _ native delegation _ exceeds cap", validatorLiquidCap: sdk.MustNewDecFromStr("0.1"), validatorLiquidShares: sdk.NewDec(5), validatorTotalShares: sdk.NewDec(95), newLiquidShares: sdk.NewDec(6), + tokenizingShares: false, expectedExceeds: true, }, { // Cap: 20% - Delegation Below Threshold // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 29 // => Liquid Shares: 20+29=49, Total Shares: 220+29=249 => 49/249 = 19% < 20% cap - name: "20 percent cap _ delegation below cap", + name: "20 percent cap _ native delegation _ below cap", validatorLiquidCap: sdk.MustNewDecFromStr("0.2"), validatorLiquidShares: sdk.NewDec(20), validatorTotalShares: sdk.NewDec(220), newLiquidShares: sdk.NewDec(29), + tokenizingShares: false, expectedExceeds: false, }, { // Cap: 20% - Delegation At Threshold // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 30 // => Liquid Shares: 20+30=50, Total Shares: 220+30=250 => 50/250 = 20% == 20% cap - name: "20 percent cap _ delegation equals cap", + name: "20 percent cap _ native delegation _ equals cap", validatorLiquidCap: sdk.MustNewDecFromStr("0.2"), validatorLiquidShares: sdk.NewDec(20), validatorTotalShares: sdk.NewDec(220), newLiquidShares: sdk.NewDec(30), + tokenizingShares: false, expectedExceeds: false, }, { // Cap: 20% - Delegation Exceeds Threshold // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 31 // => Liquid Shares: 20+31=51, Total Shares: 220+31=251 => 51/251 = 21% > 20% cap - name: "20 percent cap _ delegation exceeds cap", + name: "20 percent cap _ native delegation _ exceeds cap", validatorLiquidCap: sdk.MustNewDecFromStr("0.2"), validatorLiquidShares: sdk.NewDec(20), validatorTotalShares: sdk.NewDec(220), newLiquidShares: sdk.NewDec(31), + tokenizingShares: false, + expectedExceeds: true, + }, + { + // Cap: 50% - Native Delegation - Delegation At Threshold + // Liquid shares: 0, Total Shares: 100, New Liquid Shares: 50 + // Total Liquid Shares: 0+50=50, Total Shares: 100+50=150 + // => 50/150 = 33% < 50% cap + name: "50 percent cap _ native delegation _ delegation equals cap", + validatorLiquidCap: sdk.MustNewDecFromStr("0.5"), + validatorLiquidShares: sdk.NewDec(0), + validatorTotalShares: sdk.NewDec(100), + newLiquidShares: sdk.NewDec(50), + tokenizingShares: false, + expectedExceeds: false, + }, + { + // Cap: 50% - Tokenized Delegation - Delegation At Threshold + // Liquid shares: 0, Total Shares: 100, New Liquid Shares: 50 + // Total Liquid Shares => 0+50=50, Total Shares: 100, New Liquid Shares: 50 + // => 50 / 100 = 50% == 50% cap + name: "50 percent cap _ tokenized delegation _ delegation equals cap", + validatorLiquidCap: sdk.MustNewDecFromStr("0.5"), + validatorLiquidShares: sdk.NewDec(0), + validatorTotalShares: sdk.NewDec(100), + newLiquidShares: sdk.NewDec(50), + tokenizingShares: true, + expectedExceeds: false, + }, + { + // Cap: 50% - Native Delegation - Delegation At Threshold + // Liquid shares: 0, Total Shares: 100, New Liquid Shares: 51 + // Total Liquid Shares: 0+51=51, Total Shares: 100+51=151 + // => 51/150 = 33% < 50% cap + name: "50 percent cap _ native delegation _ delegation equals cap", + validatorLiquidCap: sdk.MustNewDecFromStr("0.5"), + validatorLiquidShares: sdk.NewDec(0), + validatorTotalShares: sdk.NewDec(100), + newLiquidShares: sdk.NewDec(51), + tokenizingShares: false, + expectedExceeds: false, + }, + { + // Cap: 50% - Tokenized Delegation - Delegation At Threshold + // Liquid shares: 0, Total Shares: 100, New Liquid Shares: 50 + // Total Liquid Shares => 0+51=51, Total Shares: 100, New Liquid Shares: 51 + // => 51 / 100 = 51% > 50% cap + name: "50 percent cap _ tokenized delegation _ delegation equals cap", + validatorLiquidCap: sdk.MustNewDecFromStr("0.5"), + validatorLiquidShares: sdk.NewDec(0), + validatorTotalShares: sdk.NewDec(100), + newLiquidShares: sdk.NewDec(51), + tokenizingShares: true, expectedExceeds: true, }, { @@ -293,6 +352,7 @@ func (s *KeeperTestSuite) TestCheckExceedsValidatorLiquidStakingCap() { validatorLiquidShares: sdk.NewDec(0), validatorTotalShares: sdk.NewDec(1_000_000), newLiquidShares: sdk.NewDec(1), + tokenizingShares: false, expectedExceeds: true, }, { @@ -302,6 +362,7 @@ func (s *KeeperTestSuite) TestCheckExceedsValidatorLiquidStakingCap() { validatorLiquidShares: sdk.NewDec(1), validatorTotalShares: sdk.NewDec(1_000_000), newLiquidShares: sdk.NewDec(1), + tokenizingShares: false, expectedExceeds: false, }, } @@ -320,7 +381,7 @@ func (s *KeeperTestSuite) TestCheckExceedsValidatorLiquidStakingCap() { } // Check whether the cap is exceeded - actualExceeds := keeper.CheckExceedsValidatorLiquidStakingCap(ctx, validator, tc.newLiquidShares) + actualExceeds := keeper.CheckExceedsValidatorLiquidStakingCap(ctx, validator, tc.newLiquidShares, tc.tokenizingShares) require.Equal(tc.expectedExceeds, actualExceeds, tc.name) }) } @@ -386,7 +447,7 @@ func (s *KeeperTestSuite) TestSafelyIncreaseValidatorLiquidShares() { // Attempt to increase the validator liquid shares, it should throw an // error that the validator bond cap was exceeded - _, err := keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, firstIncreaseAmount) + _, err := keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, firstIncreaseAmount, false) require.ErrorIs(err, types.ErrInsufficientValidatorBondShares) checkValidatorLiquidShares(initialLiquidShares, "shares after low bond factor") @@ -396,12 +457,12 @@ func (s *KeeperTestSuite) TestSafelyIncreaseValidatorLiquidShares() { // Try the increase again and check that it succeeded expectedLiquidSharesAfterFirstStake := initialLiquidShares.Add(firstIncreaseAmount) - _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, firstIncreaseAmount) + _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, firstIncreaseAmount, false) require.NoError(err) checkValidatorLiquidShares(expectedLiquidSharesAfterFirstStake, "shares with cap loose bond cap") // Attempt another increase, it should fail from the liquid staking cap - _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, secondIncreaseAmount) + _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, secondIncreaseAmount, false) require.ErrorIs(err, types.ErrValidatorLiquidStakingCapExceeded) checkValidatorLiquidShares(expectedLiquidSharesAfterFirstStake, "shares after liquid staking cap hit") @@ -411,7 +472,7 @@ func (s *KeeperTestSuite) TestSafelyIncreaseValidatorLiquidShares() { // Finally confirm that the increase succeeded this time expectedLiquidSharesAfterSecondStake := expectedLiquidSharesAfterFirstStake.Add(secondIncreaseAmount) - _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, secondIncreaseAmount) + _, err = keeper.SafelyIncreaseValidatorLiquidShares(ctx, valAddress, secondIncreaseAmount, false) require.NoError(err, "no error expected after increasing liquid staking cap") checkValidatorLiquidShares(expectedLiquidSharesAfterSecondStake, "shares after loose liquid stake cap") } diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index b74ad429281e..4feb85c5e369 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -222,7 +222,7 @@ func (k msgServer) Delegate(goCtx context.Context, msg *types.MsgDelegate) (*typ if err := k.SafelyIncreaseTotalLiquidStakedTokens(ctx, tokens, false); err != nil { return nil, err } - validator, err = k.SafelyIncreaseValidatorLiquidShares(ctx, valAddr, shares) + validator, err = k.SafelyIncreaseValidatorLiquidShares(ctx, valAddr, shares, false) if err != nil { return nil, err } @@ -328,7 +328,7 @@ func (k msgServer) BeginRedelegate(goCtx context.Context, msg *types.MsgBeginRed if err != nil { return nil, err } - if _, err := k.SafelyIncreaseValidatorLiquidShares(ctx, valDstAddr, dstShares); err != nil { + if _, err := k.SafelyIncreaseValidatorLiquidShares(ctx, valDstAddr, dstShares, false); err != nil { return nil, err } if _, err := k.DecreaseValidatorLiquidShares(ctx, valSrcAddr, srcShares); err != nil { @@ -540,7 +540,7 @@ func (k msgServer) CancelUnbondingDelegation(goCtx context.Context, msg *types.M if err := k.SafelyIncreaseTotalLiquidStakedTokens(ctx, tokens, false); err != nil { return nil, err } - validator, err = k.SafelyIncreaseValidatorLiquidShares(ctx, valAddr, shares) + validator, err = k.SafelyIncreaseValidatorLiquidShares(ctx, valAddr, shares, false) if err != nil { return nil, err } @@ -724,7 +724,7 @@ func (k msgServer) TokenizeShares(goCtx context.Context, msg *types.MsgTokenizeS if err := k.SafelyIncreaseTotalLiquidStakedTokens(ctx, msg.Amount.Amount, true); err != nil { return nil, err } - validator, err = k.SafelyIncreaseValidatorLiquidShares(ctx, valAddr, shares) + validator, err = k.SafelyIncreaseValidatorLiquidShares(ctx, valAddr, shares, true) if err != nil { return nil, err } From 6f643ef333a954b23d0d1191f2e0039144ace6a8 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Fri, 5 Jan 2024 10:02:41 +0100 Subject: [PATCH 15/19] add shared tokens event --- x/staking/keeper/msg_server.go | 1 + 1 file changed, 1 insertion(+) diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index 4feb85c5e369..eccc6ecf3601 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -808,6 +808,7 @@ func (k msgServer) TokenizeShares(goCtx context.Context, msg *types.MsgTokenizeS sdk.NewAttribute(types.AttributeKeyShareOwner, msg.TokenizedShareOwner), sdk.NewAttribute(types.AttributeKeyShareRecordID, fmt.Sprintf("%d", record.Id)), sdk.NewAttribute(types.AttributeKeyAmount, msg.Amount.String()), + sdk.NewAttribute(types.AttributeKeyNewShares, shareToken.String()), ), ) From 523430c2726f9072f5300969d75918303646fbb0 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Fri, 5 Jan 2024 15:49:15 +0100 Subject: [PATCH 16/19] check that MinCommissionRate param is properly migrated --- x/staking/migrations/v4/migrations_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/staking/migrations/v4/migrations_test.go b/x/staking/migrations/v4/migrations_test.go index 27707e19e1f7..b2d3e5d405a8 100644 --- a/x/staking/migrations/v4/migrations_test.go +++ b/x/staking/migrations/v4/migrations_test.go @@ -65,7 +65,7 @@ func TestMigrate(t *testing.T) { bz := store.Get(v4.ParamsKey) require.NoError(t, cdc.Unmarshal(bz, &res)) require.Equal(t, legacySubspace.ps, res) - + require.Equal(t, types.DefaultMinCommissionRate, legacySubspace.ps.MinCommissionRate) } else { require.Equal(t, true, true) } From 52110cbeabba19441eb7b7672e05dc752d87ebf2 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Tue, 9 Jan 2024 11:24:18 +0100 Subject: [PATCH 17/19] create new attribute for new tokenized shares --- x/staking/keeper/msg_server.go | 2 +- x/staking/types/events.go | 23 ++++++++++++----------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index eccc6ecf3601..ee718aaa2a07 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -808,7 +808,7 @@ func (k msgServer) TokenizeShares(goCtx context.Context, msg *types.MsgTokenizeS sdk.NewAttribute(types.AttributeKeyShareOwner, msg.TokenizedShareOwner), sdk.NewAttribute(types.AttributeKeyShareRecordID, fmt.Sprintf("%d", record.Id)), sdk.NewAttribute(types.AttributeKeyAmount, msg.Amount.String()), - sdk.NewAttribute(types.AttributeKeyNewShares, shareToken.String()), + sdk.NewAttribute(types.AttributeKeyTokenizedShares, shareToken.String()), ), ) diff --git a/x/staking/types/events.go b/x/staking/types/events.go index 431535399094..c6548aa135b3 100644 --- a/x/staking/types/events.go +++ b/x/staking/types/events.go @@ -15,15 +15,16 @@ const ( EventTypeTransferTokenizeShareRecord = "transfer_tokenize_share_record" EventTypeValidatorBondDelegation = "validator_bond_delegation" - AttributeKeyValidator = "validator" - AttributeKeyCommissionRate = "commission_rate" - AttributeKeySrcValidator = "source_validator" - AttributeKeyDstValidator = "destination_validator" - AttributeKeyDelegator = "delegator" - AttributeKeyCreationHeight = "creation_height" - AttributeKeyCompletionTime = "completion_time" - AttributeKeyNewShares = "new_shares" - AttributeKeyShareOwner = "share_owner" - AttributeKeyShareRecordID = "share_record_id" - AttributeKeyAmount = "amount" + AttributeKeyValidator = "validator" + AttributeKeyCommissionRate = "commission_rate" + AttributeKeySrcValidator = "source_validator" + AttributeKeyDstValidator = "destination_validator" + AttributeKeyDelegator = "delegator" + AttributeKeyCreationHeight = "creation_height" + AttributeKeyCompletionTime = "completion_time" + AttributeKeyNewShares = "new_shares" + AttributeKeyShareOwner = "share_owner" + AttributeKeyShareRecordID = "share_record_id" + AttributeKeyAmount = "amount" + AttributeKeyTokenizedShares = "tokenized_shares" ) From d3f2a80684a62b71ce6258b3630fecb991a95a02 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Tue, 9 Jan 2024 17:48:16 +0100 Subject: [PATCH 18/19] chore: update staking doc (#12) * udapte stakind README + ADR * nits --- docs/architecture/adr-061-liquid-staking.md | 383 ++++++++++++++++++-- x/staking/README.md | 338 ++++++++++++++++- 2 files changed, 685 insertions(+), 36 deletions(-) diff --git a/docs/architecture/adr-061-liquid-staking.md b/docs/architecture/adr-061-liquid-staking.md index 56e3f9b0c42b..556b05c80d3d 100644 --- a/docs/architecture/adr-061-liquid-staking.md +++ b/docs/architecture/adr-061-liquid-staking.md @@ -1,16 +1,17 @@ -# ADR ADR-061: Liquid Staking +# ADR 061: Liquid Staking Module ## Changelog * 2022-09-10: Initial Draft (@zmanian) +* 2023-07-10: (@zmanian, @sampocs, @rileyedmunds, @mpoke) ## Status -PROPOSED +ACCEPTED ## Abstract -Add a semi-fungible liquid staking primitive to the default Cosmos SDK staking module. This upgrades proof of stake to enable safe designs with lower overall monetary issuance and integration with numerous liquid staking protocols like Stride, Persistence, Quicksilver, Lido etc. +Add a semi-fungible liquid staking primitive to the default Cosmos SDK staking module. While implemented as changes to existing modules, these additional features are hereinafter referred to as the liquid staking module (LSM). This upgrades proof of stake to enable safe designs with lower overall monetary issuance and integration with numerous liquid staking protocols like Stride, Persistence, Quicksilver, Lido etc. ## Context @@ -24,59 +25,385 @@ The Osmosis team has adopted the idea of Superfluid and Interfluid staking where It's also important to note that Interchain Accounts are available in the default IBC implementation and can be used to [rehypothecate](https://www.investopedia.com/terms/h/hypothecation.asp#toc-what-is-rehypothecation) delegations. Thus liquid staking is already possible and these changes merely improve the UX of liquid staking. Centralized exchanges also rehypothecate staked assets, posing challenges for decentralization. This ADR takes the position that adoption of in-protocol liquid staking is the preferable outcome and provides new levers to incentivize decentralization of stake. -These changes to the staking module have been in development for more than a year and have seen substantial industry adoption who plan to build staking UX. The internal economics at Informal team has also done a review of the impacts of these changes and this review led to the development of the exempt delegation system. This system provides governance with a tuneable parameter for modulating the risks of principal agent problem called the exemption factor. +These changes to the staking module have been in development for more than a year and have seen substantial industry adoption by protocols who plan to build staking UX. The internal economics team at Informal has also done a review of the impact of these changes and this review led to the development of the validator bond system. This system provides governance with a tuneable parameter for modulating the risks of principal agent problem called the validator bond factor. + +Liquid proof of stake systems exacerbate the risk that a single entity - the liquid staking provider - amasses more than ⅓ the total staked supply on a given chain, giving it the power to halt that chain’s block production or censor transactions and proposals. + +Liquid proof of stake may also exacerbate the principal agent risk that exists at the heart of the delegated proof of stake system. The core of the problem is that validators do not actually own the stake that is delegated to them. This leaves them open to perverse incentives to attack the consensus system. Cosmos introduced the idea of min self bond in the staking. This creates a minimum amount of stake the must be bonded by the validators operator key. This feature has very little effect on the behavior of delegates. ## Decision -We implement the semi-fungible liquid staking system and exemption factor system within the cosmos sdk. Though registered as fungible assets, these tokenized shares have extremely limited fungibility, only among the specific delegation record that was created when shares were tokenized. These assets can be used for OTC trades but composability with DeFi is limited. The primary expected use case is improving the user experience of liquid staking providers. +We implement the semi-fungible liquid staking system and validator bond factor system within the cosmos sdk. Though registered as fungible assets, these tokenized shares have extremely limited fungibility, only among the specific delegation record that was created when shares were tokenized. These assets can be used for OTC trades but composability with DeFi is limited. The primary expected use case is improving the user experience of liquid staking providers. + +The LSM is designed to safely and efficiently facilitate the adoption of liquid staking. + +The LSM mitigates liquid staking risks by limiting the total amount of tokens that can be liquid staked to X% of all staked tokens (in the case of the Cosmos Hub, 25% as decided by Governance). + +As additional risk-mitigation features, the LSM introduces a requirement that validators self-bond tokens to be eligible for delegations from liquid staking providers, and that the portion of their liquid staked shares must not exceed X% of their total shares (50% on the Cosmos Hub). -A new governance parameter is introduced that defines the ratio of exempt to issued tokenized shares. This is called the exemption factor. A larger exemption factor allows more tokenized shares to be issued for a smaller amount of exempt delegations. If governance is comfortable with how the liquid staking market is evolving, it makes sense to increase this value. +A new governance parameter is introduced that defines the ratio of validator bonded tokens to issued tokenized shares. This is called the _validator bond factor_. A larger validator bond factor allows more tokenized shares to be issued for a smaller amount of validator bond. If governance is comfortable with how the liquid staking market is evolving, it makes sense to increase this value. -Min self delegation is removed from the staking system with the expectation that it will be replaced by the exempt delegations system. The exempt delegation system allows multiple accounts to demonstrate economic alignment with the validator operator as team members, partners etc. without co-mingling funds. Delegation exemption will likely be required to grow the validators' business under widespread adoption of liquid staking once governance has adjusted the exemption factor. +Min self delegation is removed from the staking system with the expectation that it will be replaced by the validator bond system. The validator bond system allows multiple accounts to demonstrate economic alignment with the validator operator as team members, partners etc. without co-mingling funds. Validator bonding will likely be required to grow the validators' business under widespread adoption of liquid staking once governance has adjusted the validator bond factor. -When shares are tokenized, the underlying shares are transfered to a module account and rewards go to the module account for the TokenizedShareRecord. +When shares are tokenized, the underlying shares are transferred to a module account and rewards go to the module account for the TokenizedShareRecord. There is no longer a mechanism to override the validators vote for TokenizedShares. +Delegations from 32-length addresses and LSM tokenized shares are tracked against the global liquid staking, validator liquid staking cap, and validator bond caps. This requires changing the standard staking transactions to track these variables and ensure safety limits are enforced. The reason for checking the account type is because ICAs and tokenize share record module accounts have 32-length addresses, so in practice this limits liquid staking. To be clear, any ICA or module account staking is counted against this cap - not just ICA delegations from liquid staking providers. -### `MsgTokenizeShares` +### Limiting liquid staking -The MsgTokenizeShares message is used to create tokenize delegated tokens. This message can be executed by any delegator who has positive amount of delegation and after execution the specific amount of delegation disappear from the account and share tokens are provided. Share tokens are denominated in the validator and record id of the underlying delegation. -A user may tokenize some or all of their delegation. +The LSM would limit the percentage of liquid staked tokens by all liquid staking providers to 25% of the total supply of staked tokens. For example, if 100M tokens were currently staked, and if the LSM were installed today then the total liquid staked supply would be limited to a maximum of 25M tokens. -They will receive shares with the denom of `cosmosvaloper1xxxx/5` where 5 is the record id for the validator operator. +This is a key safety feature, as it would prevent liquid staking providers from collectively controlling more than ⅓ of the total staked token supply, which is the threshold at which a group of bad actors could halt block production. -MsgTokenizeShares fails if the account is a VestingAccount. Users will have to move vested tokens to a new account and endure the unbonding period. We view this as an acceptable tradeoff vs. the complex book keeping required to track vested tokens. +Additionally, a separate cap is enforced on each validator's portion of liquid staked shares. Once X% of shares (on the Cosmoshub, 50% based on the parameter value chosen by governance) are liquid, the validator is unable to accept additional liquid stakes. -The total amount of outstanding tokenized shares for the validator is checked against the sum of exempt delegations multiplied by the exemption factor. If the tokenized shares exceeds this limit, execution fails. +Technically speaking, this cap on liquid staked tokens is enforced by limiting the total number of tokens that can be staked via interchain accounts plus the number of tokens that can be tokenized using LSM. Once this joint cap is reached, the LSM prevents interchain accounts from staking any more tokens and prevents tokenization of delegations using LSM. + +Note that the limit of the percentage of liquid staked tokens will not fully hold if the total stake is dropping. As an example, a 25% cap leaves room for over 33% of the non-LS ATOM to unbond before the share of voting power held by liquid staking providers would reach 33%. For example, say there are 100 ATOM total staked, 25 of which are liquid staked; 25 of the 75 remaining ATOM need to unbond for the liquid staked voting power to rise to 33%. + + +### Validator bond + +As an additional security feature, validators who want to receive delegations from liquid staking providers would be required to self-bond a certain amount of tokens. The validator self-bond, or “validator-bond,” means that validators need to have “skin in the game” in order to be entrusted with delegations from liquid staking providers. This disincentivizes malicious behavior and enables the validator to negotiate its relationship with liquid staking providers. + +Technically speaking, the validator-bond is tracked by the LSM. The maximum number of tokens that can be delegated to a validator by a liquid staking provider is equal to the validator-bond multiplied by the “validator-bond factor.” The initial validator bond factor would be set at 250, but can be configured by governance. + +With a validator-bond factor of 250, for every 1 token a validator self-bonds, that validator is eligible to receive up to two-hundred-and-fifty tokens delegated from liquid staking providers. The validator-bond has no impact on anything other than eligibility for delegations from liquid staking providers. + +Without self-bonding tokens, a validator can’t receive delegations from liquid staking providers. And if a validator’s maximum amount of delegated tokens from liquid staking providers has been met, it would have to self-bond more tokens to become eligible for additional liquid staking provider delegations. + +### Instantly liquid staking tokens that are already staked + +Next, let’s discuss how the LSM makes the adoption of liquid staking more efficient, and can help the blockchain that installs it build strong relationships with liquid staking providers. The LSM enables users to instantly liquid stake their staked tokens, without having to wait the unbonding period. This is important, because a very large portion of the token supply on most Cosmos blockchains is currently staked. Liquid staking tokens that are already staked incur a switching cost in the form of forfeited staking rewards over the chain's unbonding period. The LSM eliminates this switching cost. -MsgTokenizeSharesResponse provides the number of tokens generated and their denom. +A user would be able to visit any liquid staking provider that has integrated with the LSM and click a button to convert his staked tokens to liquid staked tokens. It would be as easy as liquid staking unstaked tokens. -### `MsgRedeemTokensforShares` +Technically speaking, this is accomplished by using something called an “LSM share.” Using the liquid staking module, a user can tokenize their staked tokens and turn it into LSM shares. LSM shares can be redeemed for underlying staked tokens and are transferable. After staked tokens are tokenized they can be immediately transferred to a liquid staking provider in exchange for liquid staking tokens - without having to wait for the unbonding period. -The MsgRedeemTokensforShares message is used to redeem the delegation from share tokens. This message can be executed by any user who owns share tokens. After execution delegations will appear to the user. +### LSM share token -### `MsgTransferTokenizeShareRecord` +When tokenizing a delegation, the returned token has a denom of the format `{validatorAddress}/{recordId}`, where `recordId` is a monotonically increasing number that increments every tokenization. As a result, two successive tokenizations to the same validator will yield different denom's. +Additionally, the share tokens returned will map 1:1 with the number of shares of the underlying delegation (e.g. if the delegation of X shares is tokenized, X share tokens be returned). This reduces ambiguity with respect to the value of the token if a slash occurs after tokenization. -The MsgTransferTokenizeShareRecord message is used to transfer the ownership of rewards generated from the tokenized amount of delegation. The tokenize share record is created when a user tokenize his/her delegation and deleted when the full amount of share tokens are redeemed. +### Toggling the ability to tokenize shares -This is designed to work with liquid staking designs that do not redeem the tokenized shares and may instead want to keep the shares tokenized. +Currently LSM facilitates the immediate conversion of staked assets into liquid staked tokens (referred to as "tokenization"). Despite the many benefits that come with this capability, it does inadvertently negate a protective measure available via traditional staking, where an account can stake their tokens to render them illiquid in the event that their wallet is compromised (the attacker would first need to unbond, then transfer out the tokens). +LSM would obviate this safety measure, as an attacker could tokenize and immediately transfer staked tokens to another wallet. So, as an additional protective measure, this proposal incorporates a feature to permit accounts to selectively disable the tokenization of their stake. -### `MsgExemptDelegation` +The LSM grants the ability to enable and disable the ability to tokenizate their stake. When tokenization is disabled, a lock is placed on the account, effectively preventing the conversion of any of their delegations. Re-enabling tokenization would initiate the removal of the lock, but the process is not immediate. The lock removal is queued, with the lock itself persisting throughout the unbonding period. Following the completion of the unbonding period, the lock would be completely removed, restoring the account's ablility to tokenize. For LST protocols that enable the lock, this delay better positions the base layer to coordinate a recovery in the event of an exploit. -The MsgExemptDelegation message is used to exempt a delegation to a validator. If the exemption factor is greater than 0, this will allow more delegation shares to be issued from the validator. +## Economics -This design allows the chain to force an amount of self-delegation by validators participating in liquid staking schemes. +We expect that eventually governance may decide that the principal agent problems between validators and liquid staking are resolved through the existence of mature liquid staking synthetic asset systems and their associate risk framework. Governance can effectively disable the feature by setting the scalar value to -1 and allow unlimited minting and all liquid delegations to be freely undelegated. -## Consequences +During the transitionary period, this creates a market for liquid shares that may serve to help further decentralize the validator set. -### Backwards Compatibility +It also allows multiple participants in a validator business to hold their personal stakes in segregated accounts but all collectively contribute towards demonstrating alignment with the safety of the protocol. -By setting the exemption factor to zero, this module works like legacy staking. The only substantial change is the removal of min-self-bond and without any tokenized shares, there is no incentive to exempt delegation. +## Instructions for validators +Once delegated to a validator, a delegator (or validator operator) can convert their delegation to a validator into Validator Bond by signing a ValidatorBond message. -### Positive +The ValidatorBond message is exposed by the staking module and can be executed as follows: +``` +gaiad tx staking validator-bond cosmosvaloper13h5xdxhsdaugwdrkusf8lkgu406h8t62jkqv3h --from mykey +``` +There are no partial Validator Bonds: when a delegator or validator converts their shares to a particular validator into Validator Bond, their entire delegation to that validator is converted to Validator Bond. If a validator or delegator wishes to convert only some of their delegation to Validator Bond, they should transfer those funds to a separate address and Validator Bond from that address, or redelegate the funds that they do not wish to validator bond to another validator before converting their delegation to validator bond. + +To convert Validator Bond back into a standard delegation, simply unbond the shares. + +## Technical Spec: + +### Software parameters + +New governance parameters are introduced that define the cap on the percentage of delegated shares than can be liquid, namely the `GlobalLiquidStakingCap` and `ValidatorLiquidStakingCap`. The `ValidatorBondFactor` governance parameter defines the number of tokens that can be liquid staked, relative to a validator's validator bond. + +```proto +// Params defines the parameters for the staking module. +message Params { + // ... existing params... + // validator_bond_factor is required as a safety check for tokenizing shares and + // delegations from liquid staking providers + string validator_bond_factor = 7 [ + (gogoproto.moretags) = "yaml:\"validator_bond_factor\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // global_liquid_staking_cap represents a cap on the portion of stake that + // comes from liquid staking providers + string global_liquid_staking_cap = 8 [ + (gogoproto.moretags) = "yaml:\"global_liquid_staking_cap\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // validator_liquid_staking_cap represents a cap on the portion of stake that + // comes from liquid staking providers for a specific validator + string validator_liquid_staking_cap = 9 [ + (gogoproto.moretags) = "yaml:\"validator_liquid_staking_cap\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; +} +``` + +### Data structures + +#### Validator +The `ValidatorBondShares` and `LiquidShares` attributes were added to the `Validator` struct. + +```proto +message Validator { + // ...existing attributes... + // Number of shares self bonded from the validator + string validator_bond_shares = 11 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // Number of shares either tokenized or owned by a liquid staking provider + string liquid_shares = 12 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; +} +``` + +#### Delegation +The `ValidatorBond` attribute was added to the `Delegation` struct. + +```proto +// Delegation represents the bond with tokens held by an account. It is +// owned by one delegator, and is associated with the voting power of one +// validator. +message Delegation { + // ...existing attributes... + // has this delegation been marked as a validator self bond. + bool validator_bond = 4; +} +``` + +#### Toggling the ability to tokenize shares +```proto +// PendingTokenizeShareAuthorizations stores a list of addresses that have their +// tokenize share re-enablement in progress +message PendingTokenizeShareAuthorizations { + repeated string addresses = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} +// Prevents an address from tokenizing any of their delegations +message MsgDisableTokenizeShares { + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// EnableTokenizeShares begins the re-allowing of tokenizing shares for an address, +// which will complete after the unbonding period +// The time at which the lock is completely removed is returned in the response +message MsgEnableTokenizeShares { + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} +``` + + +### Tracking total liquid stake +To monitor the progress towards the global liquid staking cap, the module needs to know two things: the total amount of staked tokens and the total amount of *liquid staked* tokens. The total staked tokens can be found by checking the balance of the "Bonded" pool. The total *liquid staked* tokens are stored separately and can be found under the `TotalLiquidStakedTokensKey` prefix (`[]byte{0x65}`). The value is managed by the following keeper functions: +```go +func (k Keeper) SetTotalLiquidStakedTokens(ctx sdk.Context, tokens sdk.Dec) +func (k Keeper) GetTotalLiquidStakedTokens(ctx sdk.Context) sdk.Dec +``` + +### Tokenizing shares + +The MsgTokenizeShares message is used to create tokenize delegated tokens. This message can be executed by any delegator who has positive amount of delegation and after execution the specific amount of delegation disappear from the account and share tokens are provided. Share tokens are denominated in the validator and record id of the underlying delegation. + +A user may tokenize some or all of their delegation. + +They will receive shares with the denom of `cosmosvaloper1xxxx/5` where 5 is the record id for the validator operator. + +MsgTokenizeShares fails if the account is a VestingAccount and the user does not have enough free delegation to complete the tokenization. + +The total amount of outstanding tokenized shares for the validator is checked against the sum of validator bond delegations multiplied by the validator bond factor. If the tokenized shares exceeds this limit, execution fails. + +MsgTokenizeSharesResponse provides the number of tokens generated and their denom. -This approach should enable integration with liquid staking providers and improved user experience. It provides a pathway to security under non-exponential issuance policies in the baseline staking module. \ No newline at end of file +### Helper functions +In order to identify whether a liquid stake transaction will exceed either the global liquid staking cap or the validator bond cap, the following functions were added: + +```go +// Check if an account is a owned by a liquid staking provider +// Checking for a 32-length address will capture +// ICA accounts, as well as tokenized delegations which are owned by module accounts under the hood +// which will identify the following scenarios: +// - An account has tokenized their shares, and thus the delegation is +// owned by the tokenize share record module account +// - A liquid staking provider is delegating through an ICA account +// +// Both ICA accounts and tokenize share record module accounts have 32-length addresses +func (k Keeper) DelegatorIsLiquidStaker(address sdk.AccAddress) bool + +// SafelyIncreaseTotalLiquidStakedTokens increments the total liquid staked tokens +// if the caps are enabled and the global cap is not surpassed by this delegation +func (k Keeper) SafelyIncreaseTotalLiquidStakedTokens(ctx sdk.Context, amount sdk.Int) error + +// DecreaseTotalLiquidStakedTokens decrements the total liquid staked tokens +// if the caps are enabled +func (k Keeper) DecreaseTotalLiquidStakedTokens(ctx sdk.Context, amount sdk.Int) error + +// SafelyIncreaseValidatorLiquidShares increments the liquid shares on a validator +// if the caps are enabled and the validator bond cap is not surpassed by this delegation +func (k Keeper) SafelyIncreaseValidatorLiquidShares(ctx sdk.Context, validator types.Validator, shares sdk.Dec) error + +// DecreaseValidatorLiquidShares decrements the liquid shares on a validator +// if the caps are enabled +func (k Keeper) DecreaseValidatorLiquidShares(ctx sdk.Context, validator types.Validator, shares sdk.Dec) error + +// SafelyDecreaseValidatorBond decrements the validator's self bond +// so long as it will not cause the current delegations to exceed the threshold +// set by validator bond factor +func (k Keeper) SafelyDecreaseValidatorBond(ctx sdk.Context, validator types.Validator, shares sdk.Dec) error +``` + +### Accounting +Tracking the total liquid stake and total liquid validator shares requires additional accounting changes in the following transactions/events: + +```go +func Delegate() { + ... + // If delegator is a liquid staking provider + // Increment total liquid staked + // Increment validator liquid shares +} + +func Undelegate() { + ... + // If delegator is a liquid staking provider + // Decrement total liquid staked + // Decrement validator liquid shares +} + +func BeginRedelegate() { + ... + // If delegator is a liquid staking provider + // Decrement source validator liquid shares + // Increment destination validator liquid shares +} + +func TokenizeShares() { + ... + // If delegator is a NOT liquid staking provider (otherwise the shares are already included) + // Increment total liquid staked + // Increment validator liquid shares +} + +func RedeemTokens() { + ... + // If delegator is a NOT liquid staking provider + // Decrement total liquid staked + // Decrement validator liquid shares +} + +func Slash() { + ... + // Decrement's the total liquid staked tokens + // The total should be adjusted by slash amount * liquid percentage + // Since a slash only modifies a validator's tokens and not their shares, + // the validator's LiquidShares do not have to be changed during a slash +} +``` + +### Transaction failure cases +With the liquid staking caps in consideration, there are additional scenarios that should cause a transaction to fail: +```go + +func Delegate() { + ... + // If delegator is a liquid staking provider + // Fail transaction if delegation exceeds global liquid staking cap + // Fail transaction if delegation exceeds validator liquid staking cap + // Fail transaction if delegation exceeds validator bond cap +} + +func Undelegate() { + ... + // If the unbonded delegation is a ValidatorBond + // Fail transaction if the reduction in validator bond would cause the + // existing liquid delegation to exceed the cap +} + +func BeginRedelegate() { + ... + // If the delegation is a ValidatorBond + // Fail transaction if the reduction in validator bond would cause the + // existing liquid delegation to exceed the cap + + // If delegator is a liquid staking provider + // Fail transaction if delegation exceeds global liquid staking cap + // Fail transaction if delegation exceeds validator liquid staking cap + // Fail transaction if delegation exceeds validator bond cap +} + +func TokenizeShares() { + ... + // If the delegation is a ValidatorBond + // Fail transaction - ValidatorBond's cannot be tokenized + + // If the sender is NOT a liquid staking provider + // Fail transaction if tokenized shares would exceed the global liquid staking cap + // Fail transaction if tokenized shares would exceed the validator liquid staking cap + // Fail transaction if tokenized shares would exceed the validator bond cap +} +``` + +### Bootstrapping total liquid stake +When upgrading to enable the liquid staking module, the total global liquid stake and total liquid validator shares must be determined. This can be done in the upgrade handler by looping through delegation records and including the delegation in the total if the delegator has a 32-length address. This is implemented by the following function: +```go +func RefreshTotalLiquidStaked() { + // Resets all validator LiquidShares to 0 + // Loops delegation records + // For each delegation, determines if the delegation was from a 32-length address + // If so, increments the global liquid staking cap and validator liquid shares +} +``` + +### Toggling the ability to tokenize shares + +```go +// Adds a lock that prevents tokenizing shares for an account +// The tokenize share lock store is implemented by keying on the account address +// and storing a timestamp as the value. The timestamp is empty when the lock is +// set and gets populated with the unlock completion time once the unlock has started +func AddTokenizeSharesLock(address sdk.AccAddress) + +// Removes the tokenize share lock for an account to enable tokenizing shares +func RemoveTokenizeSharesLock(address sdk.AccAddress) + +// Updates the timestamp associated with a lock to the time at which the lock expires +func SetTokenizeShareUnlockTime(address sdk.AccAddress, completionTime time.Time) + +// Checks if there is currently a tokenize share lock for a given account +// Returns a bool indicating if the account is locked, as well as the unlock time +// which may be empty if an unlock has not been initiated +func IsTokenizeSharesDisabled(address sdk.AccAddress) (disabled bool, unlockTime time.Time) + +// Stores a list of addresses pending tokenize share unlocking at the same time +func SetPendingTokenizeShareAuthorizations(completionTime time.Time, authorizations types.PendingTokenizeShareAuthorizations) + +// Returns a list of addresses pending tokenize share unlocking at the same time +func GetPendingTokenizeShareAuthorizations() PendingTokenizeShareAuthorizations + +// Inserts the address into a queue where it will sit for 1 unbonding period +// before the tokenize share lock is removed +// Returns the completion time +func QueueTokenizeSharesAuthorization(address sdk.AccAddress) time.Time + +// Unlocks all queued tokenize share authorizations that have matured +// (i.e. have waited the full unbonding period) +func RemoveExpiredTokenizeShareLocks(blockTime time.Time) (unlockedAddresses []string) +``` + +## References + +Please see this document for a technical spec for the LSM: https://docs.google.com/document/d/1WYPUHmQii4o-q2225D_XyqE6-1bvM7Q128Y9amqRwqY/edit#heading=h.zcpx47mn67kl \ No newline at end of file diff --git a/x/staking/README.md b/x/staking/README.md index d9637813dbba..b6ce0bbdbcd0 100644 --- a/x/staking/README.md +++ b/x/staking/README.md @@ -32,6 +32,8 @@ network. * [Redelegation](#redelegation) * [Queues](#queues) * [HistoricalInfo](#historicalinfo) + * [TotalLiquidStakedTokens](#totalliquidstakedtokens) + * [PendingTokenizeShareAuthorizations](#pendingtokenizeshareauthorizations) * [State Transitions](#state-transitions) * [Validators](#validators) * [Delegations](#delegations) @@ -45,6 +47,13 @@ network. * [MsgCancelUnbondingDelegation](#msgcancelunbondingdelegation) * [MsgBeginRedelegate](#msgbeginredelegate) * [MsgUpdateParams](#msgupdateparams) + * [MsgTokenizeShares](#msgtokenizeshares) + * [MsgRedeemTokensForShares](#msgredeemtokensforshares) + * [MsgTransferTokenizeShareRecord](#msgtransfertokenizesharerecord) + * [MsgEnableTokenizeShares](#msgenabletokenizeshares) + * [MsgDisableTokenizeShares](#msgdisabletokenizeshares) + * [MsgUnbondValidator](#msgunbondvalidator) + * [MsgValidatorBond](#msgvalidatorbond) * [Begin-Block](#begin-block) * [Historical Info Tracking](#historical-info-tracking) * [End-Block](#end-block) @@ -150,6 +159,10 @@ where `Jailed` is true are not stored within this index. last-block's bonded validators. This index remains constant during a block but is updated during the validator set update process which takes place in [`EndBlock`](#end-block). +`ValidatorBondShares` is the number of shares self bonded from the validator. + +`LiquidShares` is the number of shares either tokenized or owned by a liquid staking provider. + Each validator's state is stored in a `Validator` struct: ```protobuf reference @@ -328,6 +341,22 @@ they are in a deterministic order. The oldest HistoricalEntries will be pruned to ensure that there only exist the parameter-defined number of historical entries. + +### TotalLiquidStakedTokens + +TotalLiquidStakedTokens stores the total liquid staked tokens monitoring the progress towards the `GlobalLiquidStakingCap`. + +* TotalLiquidStakedTokens: `0x85 -> math.Int`. + + +### PendingTokenizeShareAuthorizations + +PendingTokenizeShareAuthorizations stores a queue of addresses that have their tokenize share re-enablement/unlocking in progress. When an address is enqueued, it will sit for 1 unbonding period before the tokenize share lock is removed. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/staking.proto#L417-L421 +``` + ## State Transitions ### Validators @@ -396,6 +425,8 @@ When a delegation occurs both the validator and the delegation objects are affec * transfer the `delegation.Amount` from the delegator's account to the `BondedPool` or the `NotBondedPool` `ModuleAccount` depending if the `validator.Status` is `Bonded` or not * delete the existing record from `ValidatorByPowerIndex` * add an new updated record to the `ValidatorByPowerIndex` +* if the delegator is a liquid staking provider, + increment the `TotalLiquidStakedTokens` and the validator's `LiquidShares`. #### Begin Unbonding @@ -414,6 +445,7 @@ Delegation may be called. * get a unique `unbondingId` and map it to the `UnbondingDelegationEntry` in `UnbondingDelegationByUnbondingId` * call the `AfterUnbondingInitiated(unbondingId)` hook * add the unbonding delegation to `UnbondingDelegationQueue` with the completion time set to `UnbondingTime` +* if delegator is a liquid staking provider, decrement the `TotalLiquidStakedTokens` and the validator's `LiquidShares`. #### Cancel an `UnbondingDelegation` Entry @@ -442,6 +474,8 @@ Redelegations affect the delegation, source and destination validators. * otherwise, if the `sourceValidator.Status` is not `Bonded`, and the `destinationValidator` is `Bonded`, transfer the newly delegated tokens from the `NotBondedPool` to the `BondedPool` `ModuleAccount` * record the token amount in an new entry in the relevant `Redelegation` +* if the delegator is a liquid staking provider, + decrement the source validator's `LiquidShares` increment destination validator's `LiquidShares` From when a redelegation begins until it completes, the delegator is in a state of "pseudo-unbonding", and can still be slashed for infractions that occurred before the redelegation began. @@ -466,6 +500,7 @@ When a Validator is slashed, the following occurs: total slash amount. * The `remaingSlashAmount` is then slashed from the validator's tokens in the `BondedPool` or `NonBondedPool` depending on the validator's status. This reduces the total supply of tokens. +* Decrements the `TotalLiquidStakedTokens` by slash amount * liquid percentage. In the case of a slash due to any infraction that requires evidence to submitted (for example double-sign), the slash occurs at the block where the evidence is included, not at the block where the infraction occured. @@ -580,11 +615,18 @@ This message is expected to fail if: * the `Amount` `Coin` has a denomination different than one defined by `params.BondDenom` * the exchange rate is invalid, meaning the validator has no tokens (due to slashing) but there are outstanding shares * the amount delegated is less than the minimum allowed delegation +* the delegator is a liquid staking provider and the delegation exceeds +either the `GlobalLiquidStakingCap`, the `ValidatorLiquidStakingCap` or the validator bond cap. If an existing `Delegation` object for provided addresses does not already exist then it is created as part of this message otherwise the existing `Delegation` is updated to include the newly received shares. +If the delegation if is a validator bond, the `ValidatorBondShares` of the validator is increased. + +If the delegator is a liquid staking provider, the `TotalLiquidStakedTokens` +and the validator `LiquidShares` are incremented. + The delegator receives newly minted shares at the current exchange rate. The exchange rate is the number of existing shares in the validator divided by the number of currently delegated tokens. @@ -623,9 +665,15 @@ This message is expected to fail if: * the delegation has less shares than the ones worth of `Amount` * existing `UnbondingDelegation` has maximum entries as defined by `params.MaxEntries` * the `Amount` has a denomination different than one defined by `params.BondDenom` +* the unbonded delegation is a `ValidatorBond` and the reduction in validator bond would cause the existing liquid delegation to exceed the cap. When this message is processed the following actions occur: +* if the delegation is a validator bond, the `ValidatorBondShares` of the validator is decreased. + +* if the delegator is a liquid staking provider, the `TotalLiquidStakedTokens` +and the validator's `LiquidShares` are decreased. + * validator's `DelegatorShares` and the delegation's `Shares` are both reduced by the message `SharesAmount` * calculate the token worth of the shares remove that amount tokens held within the validator * with those removed tokens, if the validator is: @@ -690,9 +738,15 @@ This message is expected to fail if: * the source validator has a receiving redelegation which is not matured (aka. the redelegation may be transitive) * existing `Redelegation` has maximum entries as defined by `params.MaxEntries` * the `Amount` `Coin` has a denomination different than one defined by `params.BondDenom` +* the delegation is a `ValidatorBond` and the reduction in validator bond would cause the existing liquid delegation to exceed the cap. +* the delegator is a liquid staking provider and the delegation exceeds +either the `GlobalLiquidStakingCap`, the `ValidatorLiquidStakingCap` or the validator bond cap. When this message is processed the following actions occur: +* if the delegation if is a validator bond, the `ValidatorBondShares` of the source validator is decreased. +* if the delegator is a liquid staking provider, + the source validator's `LiquidShares` increased and the destination validator's `LiquidShares` is decreased. * the source validator's `DelegatorShares` and the delegations `Shares` are both reduced by the message `SharesAmount` * calculate the token worth of the shares remove that amount tokens held within the source validator. * if the source validator is: @@ -705,6 +759,201 @@ When this message is processed the following actions occur: ![Begin redelegation sequence](https://raw.githubusercontent.com/cosmos/cosmos-sdk/release/v0.46.x/docs/uml/svg/begin_redelegation_sequence.svg) +## MsgTokenizeShares + +The `MsgTokenizeShares` message allows users to tokenize their delegated tokens. Share tokens have denom using the validator address and record id of the underlying delegation with the format `{validatorAddress}/{recordId}`. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L49-L50 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L190-L199 +``` + +This message returns a response containing the number of tokens generated: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L201-L204 +``` + +This message is expected to fail if: + +* the delegation is a `ValidatorBond` +* the delegator sender's address has disabled tokenization, meaning that the account +lock status is either `LOCKED` or `LOCK_EXPIRING`. +* the account is a vesting account and the free delegation (non-vesting delegation) is exceeding the tokenized share amount. +* the sender is NOT a liquid staking provider and the tokenized shares exceeds +either the `GlobalLiquidStakingCap`, the `ValidatorLiquidStakingCap` or the validator bond cap. + + +When this message is processed the following actions occur: + +* If delegator is a NOT liquid staking provider (otherwise the shares are already included) + * Increment the `GlobalLiquidStakingCap` + * Increment the validator's `ValidatorLiquidStakingCap` +* Unbond the delegation shares and transfer the coins back to delegator +* Create an equivalent amount of tokenized shares that the initial delegation shares +* Mint the liquid coins and send them to delegator +* Create a tokenized share record +* Get validator to whom the sender delegated his shares +* Send coins to module address and delegate them to the validator + +## MsgRedeemTokensForShares + +The `MsgRedeemTokensForShares` message allows users to redeem their native delegations from share tokens. + + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L52-L54 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L206-L213 +``` + +This message returns a response containing the amount of staked tokens redeemed: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L215-L218 +``` + +This message is expected to fail if: + +* if the sender's balance doesn't have enough liquid tokens + + +When this message is processed the following actions occur: + +* Get the tokenized shares record +* Get the validator that issued the tokenized shares from the record +* Unbond the delegation associated with the tokenized shares +* The delegator is NOT a liquid staking provider: + * Decrease the `ValidatorLiquidStakingCap` + * Decrease the validator's `LiquidShares` +* Burn the liquid coins equivalent of the tokenized shares +* Delete the tokenized shares record +* Send equivalent amount of tokens to the delegator +* Delegate sender's tokens to the validator + +## MsgTransferTokenizeShareRecord + +The `MsgTransferTokenizeShareRecord` message enables users to transfer the ownership of rewards generated from the tokenized amount of delegation. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L56-L58 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L220-L228 +``` + +This message is expected to fail if: + +* the tokenized shares record doesn't exist +* the sender address doesn't match the owner address in the record + +When this message is processed the following actions occur: + +* the tokenized shares record is updated with the new owner address + +## MsgEnableTokenizeShares + +The `MsgEnableTokenizeShares` message begins the countdown after which tokenizing shares by the sender delegator address is re-allowed, which will complete after the unbonding period. + + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L63-L65 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L244-L250 +``` + +This message returns a response containing the time at which the lock is completely removed: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L252-L255 +``` + +This message is expected to fail if: + +* if the sender's account lock status is either equal to `UNLOCKED` or `LOCK_EXPIRING`, +meaning that the tokenized shares aren't currently disabled. + + +When this message is processed the following actions occur: + +* queue the unlock authorization. + +## MsgDisableTokenizeShares + +The `MsgDisableTokenizeShares` message prevents the sender delegator address from tokenizing any of its delegations. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L60-L61 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L233-L239 +``` + +This message is expected to fail if: + +* the sender's account already has the `LOCKED` lock status + + +When this message is processed the following actions occur: + +* if the sender's account lock status is equal to `LOCK_EXPIRING`, +it cancels the pending unlock authorizations by removing them from the queue. +* Create a new tokenization lock for the sender's account. Note that +if there is a lock expiration in progress, it is overridden. + +## MsgValidatorBond + +The `MsgValidatorBond` message designates a delegation as a validator bond. +It enables validators to receive more liquid staking delegations + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L67-L68 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L257-L265 +``` + +This message is expected to fail if: + +* the delegator is a liquid staking provider + +When this message is processed the following actions occur: + +* If the delegation is not already a `ValidatorBond`: + * Enable the delegation's `ValidatorBond` flag + * Update validator's `ValidatorBondShares` + +## MsgUnbondValidator + +The `MsgTransferTokenizeShareRecord` message allows validator to change their +status from transfers from `Bonded` to `Unbonding` without experiencing slashing. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L36-L38 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.45.16-ics-lsm/proto/cosmos/staking/v1beta1/tx.proto#L165-L169 +``` + +This message is expected to fail if: + +* the validator isn't registered or is already jailed + +When this message is processed the following actions occur: + +* the validator is jailed +* the validator status changes from `Bonded` to `Unbonding` ### MsgUpdateParams @@ -927,18 +1176,91 @@ The staking module emits the following events: * [0] Time is formatted in the RFC3339 standard +### MsgTokenizeShares + +| Type | Attribute Key | Attribute Value | +| ----------------------------- | --------------------- | ----------------------- | +| tokenize_shares | delegator | {delegatorAddress} | +| tokenize_shares | validator | {validatorAddress} | +| tokenize_shares | share_owner | {shareOwnerAddress} | +| tokenize_shares | amount | {tokenizeAmount} | +| message | module | staking | +| message | action | tokenize_share | +| message | sender | {senderAddress} | + +### MsgRedeemTokensForShares + +| Type | Attribute Key | Attribute Value | +| ----------------------------- | ------------------ | ------------------------ | +| redeem_tokens_for_shares | delegator | {delegatorAddress} | +| redeem_tokens_for_shares | amount | {redeemAmount} | +| message | module | staking | +| message | action | redeem_tokens | +| message | sender | {senderAddress} | + +### MsgTransferTokenizeShareRecord + +| Type | Attribute Key | Attribute Value | +| ---------------------------------- | ---------------------------- | ----------------------------------- | +| transfer_tokenize_share_record | share_record_id | {shareRecordID} | +| transfer_tokenize_share_record | sender | {senderAddress} | +| transfer_tokenize_share_record | share_owner | {newShareOwnerAddress} | +| message | module | staking | +| message | action | transfer-tokenize-share-record | +| message | sender | {senderAddress} | + +### MsgEnableTokenizeShares + +| Type | Attribute Key | Attribute Value | +| ----------------------------- | ------------------- | ------------------------ | +| enable_tokenize_shares | delegator | {delegatorAddress} | +| message | module | staking | +| message | action | enable_tokenize_shares | +| message | sender | {senderAddress} | + +### MsgDisableTokenizeShares + +| Type | Attribute Key | Attribute Value | +| ----------------------------- | ------------------ | ------------------------ | +| disable_tokenize_shares | delegator | {delegatorAddress} | +| message | module | staking | +| message | action | disable_tokenize_shares | +| message | sender | {senderAddress} | + +### MsgValidatorBond + +| Type | Attribute Key | Attribute Value | +| -------------------- | --------------------- | ------------------------ | +| validator_bond | validator | {validatorAddress} | +| validator_bond | delegator | {delegatorAddress} | +| message | action | validator_bond | +| message | sender | {senderAddress} | + +### MsgUnbondValidator + +| Type | Attribute Key | Attribute Value | +| -------------------- | --------------------- | ------------------------ | +| unbound_validator | validator | {validatorAddress} | +| message | action | unbond_validator | +| message | sender | {senderAddress} | + + ## Parameters The staking module contains the following parameters: -| Key | Type | Example | -|-------------------|------------------|------------------------| -| UnbondingTime | string (time ns) | "259200000000000" | -| MaxValidators | uint16 | 100 | -| KeyMaxEntries | uint16 | 7 | -| HistoricalEntries | uint16 | 3 | -| BondDenom | string | "stake" | -| MinCommissionRate | string | "0.000000000000000000" | +| Key | Type | Example | +|------------------------- |------------------|--------------------------| +| UnbondingTime | string (time ns) | "259200000000000" | +| MaxValidators | uint16 | 100 | +| KeyMaxEntries | uint16 | 7 | +| HistoricalEntries | uint16 | 3 | +| BondDenom | string | "stake" | +| MinCommissionRate | string | "0.000000000000000000" | +| ValidatorBondFactor | string | "250.0000000000000000" | +| GlobalLiquidStakingCap | string | "1.000000000000000000" | +| ValidatorLiquidStakingCap | string | "0.250000000000000000" | + ## Client From caa65a58b152ccbf68fbbf73b4ac4095264f0957 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Wed, 10 Jan 2024 11:00:18 +0100 Subject: [PATCH 19/19] Rename Readme.md to README.md --- x/staking/migrations/v3/{Readme.md => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename x/staking/migrations/v3/{Readme.md => README.md} (100%) diff --git a/x/staking/migrations/v3/Readme.md b/x/staking/migrations/v3/README.md similarity index 100% rename from x/staking/migrations/v3/Readme.md rename to x/staking/migrations/v3/README.md