diff --git a/proto/interchain_security/ccv/v1/ccv.proto b/proto/interchain_security/ccv/v1/ccv.proto index ffae373aa6..1f3722a234 100644 --- a/proto/interchain_security/ccv/v1/ccv.proto +++ b/proto/interchain_security/ccv/v1/ccv.proto @@ -84,4 +84,42 @@ enum ConsumerPacketDataType { // VSCMatured packet CONSUMER_PACKET_TYPE_VSCM = 2 [ (gogoproto.enumvalue_customname) = "VscMaturedPacket" ]; -} \ No newline at end of file +} + +// ConsumerPacketData contains a consumer packet data and a type tag +// that is compatible with ICS v1 and v2 over the wire. It is not used for internal storage. +message ConsumerPacketDataV1 { + ConsumerPacketDataType type = 1; + + oneof data { + SlashPacketDataV1 slashPacketData = 2; + VSCMaturedPacketData vscMaturedPacketData = 3; + } +} + +// This packet is sent from the consumer chain to the provider chain +// It is backward compatible with the ICS v1 and v2 version of the packet. +message SlashPacketDataV1 { + tendermint.abci.Validator validator = 1 [ + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"validator\"" + ]; + // map to the infraction block height on the provider + uint64 valset_update_id = 2; + // tell if the slashing is for a downtime or a double-signing infraction + InfractionType infraction = 3; +} + +// InfractionType indicates the infraction type a validator commited. +// NOTE: ccv.InfractionType to maintain compatibility between ICS versions +// using different versions of the cosmos-sdk and ibc-go modules. +enum InfractionType { + option (gogoproto.goproto_enum_prefix) = false; + + // UNSPECIFIED defines an empty infraction type. + INFRACTION_TYPE_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "InfractionEmpty"]; + // DOUBLE_SIGN defines a validator that double-signs a block. + INFRACTION_TYPE_DOUBLE_SIGN = 1 [(gogoproto.enumvalue_customname) = "DoubleSign"]; + // DOWNTIME defines a validator that missed signing too many blocks. + INFRACTION_TYPE_DOWNTIME = 2 [(gogoproto.enumvalue_customname) = "Downtime"]; +} diff --git a/x/ccv/consumer/keeper/relay_test.go b/x/ccv/consumer/keeper/relay_test.go index 299d316d21..fa282c71ec 100644 --- a/x/ccv/consumer/keeper/relay_test.go +++ b/x/ccv/consumer/keeper/relay_test.go @@ -21,6 +21,7 @@ import ( testkeeper "github.com/cosmos/interchain-security/v3/testutil/keeper" consumertypes "github.com/cosmos/interchain-security/v3/x/ccv/consumer/types" "github.com/cosmos/interchain-security/v3/x/ccv/types" + ccv "github.com/cosmos/interchain-security/v3/x/ccv/types" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" @@ -307,3 +308,19 @@ func TestSendPacketsFailure(t *testing.T) { consumerKeeper.SendPackets(ctx) require.Equal(t, 3, len(consumerKeeper.GetPendingPackets(ctx).List)) } +func TestSlashPacketDataJSON(t *testing.T) { + spd := types.NewSlashPacketData( + abci.Validator{Address: bytes.HexBytes{}, Power: int64(1)}, + uint64(1), + stakingtypes.Infraction_INFRACTION_DOWNTIME, + ) + cpd := ccv.ConsumerPacketData{ + Type: ccv.SlashPacket, + Data: &ccv.ConsumerPacketData_SlashPacketData{ + SlashPacketData: spd, + }, + } + bz := cpd.GetBytes() + str := string(bz) + fmt.Println(str) +} diff --git a/x/ccv/types/ccv.go b/x/ccv/types/ccv.go index 62111a7b65..4bcb4556c2 100644 --- a/x/ccv/types/ccv.go +++ b/x/ccv/types/ccv.go @@ -59,6 +59,23 @@ func NewSlashPacketData(validator abci.Validator, valUpdateId uint64, infraction } } +// NewSlashPacketDataV1 creates a new SlashPacketDataV1 that uses ccv.InfractionTypes to maintain backward compatibility. +func NewSlashPacketDataV1(validator abci.Validator, valUpdateId uint64, infractionType stakingtypes.Infraction) *SlashPacketDataV1 { + v1Type := InfractionEmpty + switch infractionType { + case stakingtypes.Infraction_INFRACTION_DOWNTIME: + v1Type = Downtime + case stakingtypes.Infraction_INFRACTION_DOUBLE_SIGN: + v1Type = DoubleSign + } + + return &SlashPacketDataV1{ + Validator: validator, + ValsetUpdateId: valUpdateId, + Infraction: v1Type, + } +} + func (vdt SlashPacketData) ValidateBasic() error { if len(vdt.Validator.Address) == 0 || vdt.Validator.Power == 0 { return errorsmod.Wrap(ErrInvalidPacketData, "validator fields cannot be empty") @@ -99,7 +116,27 @@ func (cp ConsumerPacketData) ValidateBasic() (err error) { return } +// Convert to bytes while maintaining over the wire compatibility with previous versions. func (cp ConsumerPacketData) GetBytes() []byte { - bytes := ModuleCdc.MustMarshalJSON(&cp) + return cp.ToV1Bytes() +} + +// ToV1Bytes converts the ConsumerPacketData to JSON byte array compatible +// with the format used by ICS versions using cosmos-sdk v45 (ICS v1 and ICS v2). +func (cp ConsumerPacketData) ToV1Bytes() []byte { + if cp.Type != SlashPacket { + bytes := ModuleCdc.MustMarshalJSON(&cp) + return bytes + } + + sp := cp.GetSlashPacketData() + spdv1 := NewSlashPacketDataV1(sp.Validator, sp.ValsetUpdateId, sp.Infraction) + cpv1 := ConsumerPacketDataV1{ + Type: cp.Type, + Data: &ConsumerPacketDataV1_SlashPacketData{ + SlashPacketData: spdv1, + }, + } + bytes := ModuleCdc.MustMarshalJSON(&cpv1) return bytes } diff --git a/x/ccv/types/ccv.pb.go b/x/ccv/types/ccv.pb.go index 21d0b32f0b..c2f0bd3ecc 100644 --- a/x/ccv/types/ccv.pb.go +++ b/x/ccv/types/ccv.pb.go @@ -57,6 +57,40 @@ func (ConsumerPacketDataType) EnumDescriptor() ([]byte, []int) { return fileDescriptor_68bd5f3242e6f29c, []int{0} } +// InfractionType indicates the infraction type a validator commited. +// NOTE: ccv.InfractionType to maintain compatibility between ICS versions +// using different versions of the cosmos-sdk and ibc-go modules. +type InfractionType int32 + +const ( + // UNSPECIFIED defines an empty infraction type. + InfractionEmpty InfractionType = 0 + // DOUBLE_SIGN defines a validator that double-signs a block. + DoubleSign InfractionType = 1 + // DOWNTIME defines a validator that missed signing too many blocks. + Downtime InfractionType = 2 +) + +var InfractionType_name = map[int32]string{ + 0: "INFRACTION_TYPE_UNSPECIFIED", + 1: "INFRACTION_TYPE_DOUBLE_SIGN", + 2: "INFRACTION_TYPE_DOWNTIME", +} + +var InfractionType_value = map[string]int32{ + "INFRACTION_TYPE_UNSPECIFIED": 0, + "INFRACTION_TYPE_DOUBLE_SIGN": 1, + "INFRACTION_TYPE_DOWNTIME": 2, +} + +func (x InfractionType) String() string { + return proto.EnumName(InfractionType_name, int32(x)) +} + +func (InfractionType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_68bd5f3242e6f29c, []int{1} +} + // This packet is sent from provider chain to consumer chain if the validator // set for consumer chain changes (due to new bonding/unbonding messages or // slashing events) A VSCMatured packet from consumer chain will be sent @@ -466,8 +500,168 @@ func (m *ConsumerPacketDataList) GetList() []ConsumerPacketData { return nil } +// ConsumerPacketData contains a consumer packet data and a type tag +// that is compatible with ICS v1 and v2 over the wire. It is not used for internal storage. +type ConsumerPacketDataV1 struct { + Type ConsumerPacketDataType `protobuf:"varint,1,opt,name=type,proto3,enum=interchain_security.ccv.v1.ConsumerPacketDataType" json:"type,omitempty"` + // Types that are valid to be assigned to Data: + // *ConsumerPacketDataV1_SlashPacketData + // *ConsumerPacketDataV1_VscMaturedPacketData + Data isConsumerPacketDataV1_Data `protobuf_oneof:"data"` +} + +func (m *ConsumerPacketDataV1) Reset() { *m = ConsumerPacketDataV1{} } +func (m *ConsumerPacketDataV1) String() string { return proto.CompactTextString(m) } +func (*ConsumerPacketDataV1) ProtoMessage() {} +func (*ConsumerPacketDataV1) Descriptor() ([]byte, []int) { + return fileDescriptor_68bd5f3242e6f29c, []int{7} +} +func (m *ConsumerPacketDataV1) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConsumerPacketDataV1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ConsumerPacketDataV1.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 *ConsumerPacketDataV1) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConsumerPacketDataV1.Merge(m, src) +} +func (m *ConsumerPacketDataV1) XXX_Size() int { + return m.Size() +} +func (m *ConsumerPacketDataV1) XXX_DiscardUnknown() { + xxx_messageInfo_ConsumerPacketDataV1.DiscardUnknown(m) +} + +var xxx_messageInfo_ConsumerPacketDataV1 proto.InternalMessageInfo + +type isConsumerPacketDataV1_Data interface { + isConsumerPacketDataV1_Data() + MarshalTo([]byte) (int, error) + Size() int +} + +type ConsumerPacketDataV1_SlashPacketData struct { + SlashPacketData *SlashPacketDataV1 `protobuf:"bytes,2,opt,name=slashPacketData,proto3,oneof" json:"slashPacketData,omitempty"` +} +type ConsumerPacketDataV1_VscMaturedPacketData struct { + VscMaturedPacketData *VSCMaturedPacketData `protobuf:"bytes,3,opt,name=vscMaturedPacketData,proto3,oneof" json:"vscMaturedPacketData,omitempty"` +} + +func (*ConsumerPacketDataV1_SlashPacketData) isConsumerPacketDataV1_Data() {} +func (*ConsumerPacketDataV1_VscMaturedPacketData) isConsumerPacketDataV1_Data() {} + +func (m *ConsumerPacketDataV1) GetData() isConsumerPacketDataV1_Data { + if m != nil { + return m.Data + } + return nil +} + +func (m *ConsumerPacketDataV1) GetType() ConsumerPacketDataType { + if m != nil { + return m.Type + } + return UnspecifiedPacket +} + +func (m *ConsumerPacketDataV1) GetSlashPacketData() *SlashPacketDataV1 { + if x, ok := m.GetData().(*ConsumerPacketDataV1_SlashPacketData); ok { + return x.SlashPacketData + } + return nil +} + +func (m *ConsumerPacketDataV1) GetVscMaturedPacketData() *VSCMaturedPacketData { + if x, ok := m.GetData().(*ConsumerPacketDataV1_VscMaturedPacketData); ok { + return x.VscMaturedPacketData + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ConsumerPacketDataV1) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ConsumerPacketDataV1_SlashPacketData)(nil), + (*ConsumerPacketDataV1_VscMaturedPacketData)(nil), + } +} + +// This packet is sent from the consumer chain to the provider chain +// It is backward compatible with the ICS v1 and v2 version of the packet. +type SlashPacketDataV1 struct { + Validator types.Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator" yaml:"validator"` + // map to the infraction block height on the provider + ValsetUpdateId uint64 `protobuf:"varint,2,opt,name=valset_update_id,json=valsetUpdateId,proto3" json:"valset_update_id,omitempty"` + // tell if the slashing is for a downtime or a double-signing infraction + Infraction InfractionType `protobuf:"varint,3,opt,name=infraction,proto3,enum=interchain_security.ccv.v1.InfractionType" json:"infraction,omitempty"` +} + +func (m *SlashPacketDataV1) Reset() { *m = SlashPacketDataV1{} } +func (m *SlashPacketDataV1) String() string { return proto.CompactTextString(m) } +func (*SlashPacketDataV1) ProtoMessage() {} +func (*SlashPacketDataV1) Descriptor() ([]byte, []int) { + return fileDescriptor_68bd5f3242e6f29c, []int{8} +} +func (m *SlashPacketDataV1) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SlashPacketDataV1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SlashPacketDataV1.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 *SlashPacketDataV1) XXX_Merge(src proto.Message) { + xxx_messageInfo_SlashPacketDataV1.Merge(m, src) +} +func (m *SlashPacketDataV1) XXX_Size() int { + return m.Size() +} +func (m *SlashPacketDataV1) XXX_DiscardUnknown() { + xxx_messageInfo_SlashPacketDataV1.DiscardUnknown(m) +} + +var xxx_messageInfo_SlashPacketDataV1 proto.InternalMessageInfo + +func (m *SlashPacketDataV1) GetValidator() types.Validator { + if m != nil { + return m.Validator + } + return types.Validator{} +} + +func (m *SlashPacketDataV1) GetValsetUpdateId() uint64 { + if m != nil { + return m.ValsetUpdateId + } + return 0 +} + +func (m *SlashPacketDataV1) GetInfraction() InfractionType { + if m != nil { + return m.Infraction + } + return InfractionEmpty +} + func init() { proto.RegisterEnum("interchain_security.ccv.v1.ConsumerPacketDataType", ConsumerPacketDataType_name, ConsumerPacketDataType_value) + proto.RegisterEnum("interchain_security.ccv.v1.InfractionType", InfractionType_name, InfractionType_value) proto.RegisterType((*ValidatorSetChangePacketData)(nil), "interchain_security.ccv.v1.ValidatorSetChangePacketData") proto.RegisterType((*ValidatorSetChangePackets)(nil), "interchain_security.ccv.v1.ValidatorSetChangePackets") proto.RegisterType((*VSCMaturedPacketData)(nil), "interchain_security.ccv.v1.VSCMaturedPacketData") @@ -475,6 +669,8 @@ func init() { proto.RegisterType((*MaturedUnbondingOps)(nil), "interchain_security.ccv.v1.MaturedUnbondingOps") proto.RegisterType((*ConsumerPacketData)(nil), "interchain_security.ccv.v1.ConsumerPacketData") proto.RegisterType((*ConsumerPacketDataList)(nil), "interchain_security.ccv.v1.ConsumerPacketDataList") + proto.RegisterType((*ConsumerPacketDataV1)(nil), "interchain_security.ccv.v1.ConsumerPacketDataV1") + proto.RegisterType((*SlashPacketDataV1)(nil), "interchain_security.ccv.v1.SlashPacketDataV1") } func init() { @@ -482,51 +678,60 @@ func init() { } var fileDescriptor_68bd5f3242e6f29c = []byte{ - // 697 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xcf, 0x6a, 0xdb, 0x4a, - 0x14, 0xc6, 0xa5, 0x58, 0x04, 0x32, 0x86, 0x44, 0xd1, 0xf5, 0xbd, 0x38, 0xba, 0xad, 0x22, 0x44, - 0xa0, 0xa6, 0xa5, 0x52, 0xad, 0x74, 0x51, 0xda, 0x4d, 0x63, 0xc7, 0xc1, 0xa6, 0xf9, 0x63, 0xa4, - 0x38, 0xa5, 0xdd, 0x88, 0xb1, 0x34, 0xb1, 0x07, 0xdb, 0x1a, 0xa3, 0x19, 0x8b, 0xfa, 0x0d, 0x4a, - 0x56, 0x7d, 0x81, 0xac, 0x4a, 0x1f, 0xa4, 0xbb, 0x2c, 0x03, 0xdd, 0x64, 0x15, 0x4a, 0xf2, 0x06, - 0x7d, 0x82, 0x22, 0x59, 0x76, 0x1c, 0x5b, 0x31, 0x64, 0xe5, 0xf1, 0x99, 0x73, 0x3e, 0xf1, 0xfd, - 0xe6, 0xe3, 0x80, 0x2d, 0xec, 0x33, 0x14, 0xb8, 0x6d, 0x88, 0x7d, 0x87, 0x22, 0x77, 0x10, 0x60, - 0x36, 0x34, 0x5c, 0x37, 0x34, 0xc2, 0x62, 0xf4, 0xa3, 0xf7, 0x03, 0xc2, 0x88, 0x24, 0xa7, 0x74, - 0xe9, 0xd1, 0x75, 0x58, 0x94, 0xb7, 0x5c, 0x42, 0x7b, 0x84, 0x1a, 0x94, 0xc1, 0x0e, 0xf6, 0x5b, - 0x46, 0x58, 0x6c, 0x22, 0x06, 0x8b, 0xe3, 0xff, 0x23, 0x05, 0x39, 0xd7, 0x22, 0x2d, 0x12, 0x1f, - 0x8d, 0xe8, 0x94, 0x54, 0xff, 0x67, 0xc8, 0xf7, 0x50, 0xd0, 0xc3, 0x3e, 0x33, 0x60, 0xd3, 0xc5, - 0x06, 0x1b, 0xf6, 0x11, 0x1d, 0x5d, 0x6a, 0x57, 0x3c, 0x78, 0x72, 0x02, 0xbb, 0xd8, 0x83, 0x8c, - 0x04, 0x36, 0x62, 0xe5, 0x36, 0xf4, 0x5b, 0xa8, 0x0e, 0xdd, 0x0e, 0x62, 0xbb, 0x90, 0x41, 0x89, - 0x80, 0xf5, 0x70, 0x7c, 0xef, 0x0c, 0xfa, 0x1e, 0x64, 0x88, 0xe6, 0x79, 0x35, 0x53, 0xc8, 0x9a, - 0xaa, 0x7e, 0xa7, 0xac, 0x47, 0xca, 0xfa, 0x44, 0xa9, 0x11, 0x37, 0x96, 0xd4, 0x8b, 0xeb, 0x4d, - 0xee, 0xcf, 0xf5, 0x66, 0x7e, 0x08, 0x7b, 0xdd, 0xb7, 0xda, 0x9c, 0x90, 0x66, 0x89, 0xe1, 0xfd, - 0x11, 0x2a, 0x15, 0x40, 0x54, 0xa3, 0x88, 0x25, 0x4d, 0x0e, 0xf6, 0xf2, 0x4b, 0x2a, 0x5f, 0x10, - 0xac, 0xd5, 0x51, 0x7d, 0xd4, 0x58, 0xf3, 0xa4, 0xa7, 0x00, 0xd0, 0x2e, 0xa4, 0x6d, 0x07, 0xba, - 0x1d, 0x9a, 0xcf, 0xa8, 0x99, 0xc2, 0x8a, 0xb5, 0x12, 0x57, 0x76, 0xdc, 0x0e, 0xd5, 0x08, 0xd8, - 0x78, 0xc8, 0x19, 0x95, 0x2c, 0x20, 0x74, 0x31, 0x65, 0x89, 0x93, 0x37, 0xfa, 0xc3, 0xec, 0xf5, - 0x45, 0x78, 0x4a, 0x42, 0xe4, 0xd0, 0x8a, 0xb5, 0xb4, 0xf7, 0x20, 0x77, 0x62, 0x97, 0x0f, 0x20, - 0x1b, 0x04, 0xc8, 0x9b, 0x42, 0x98, 0xe6, 0x88, 0x4f, 0x73, 0xa4, 0xfd, 0xe2, 0xc1, 0x9a, 0x1d, - 0x19, 0x98, 0x9a, 0xb6, 0xc0, 0xca, 0x84, 0x51, 0x3c, 0x96, 0x35, 0xe5, 0x87, 0xc1, 0x97, 0xf2, - 0x09, 0x72, 0x71, 0x06, 0xb9, 0x66, 0xdd, 0xc9, 0x3c, 0x82, 0x71, 0x09, 0x00, 0xec, 0x9f, 0x06, - 0xd0, 0x65, 0x98, 0xf8, 0xf9, 0x8c, 0xca, 0x17, 0x56, 0x4d, 0x4d, 0x1f, 0xa5, 0x51, 0x1f, 0xa7, - 0x2f, 0x49, 0xa3, 0x5e, 0x9b, 0x74, 0x5a, 0x53, 0x53, 0xda, 0x33, 0xf0, 0x4f, 0x02, 0xa5, 0xe1, - 0x37, 0x89, 0xef, 0x61, 0xbf, 0x75, 0xd4, 0xa7, 0x92, 0x08, 0x32, 0xd8, 0x1b, 0x65, 0x49, 0xb0, - 0xa2, 0xa3, 0xf6, 0x63, 0x09, 0x48, 0x65, 0xe2, 0xd3, 0x41, 0x0f, 0x05, 0x53, 0x04, 0xf6, 0x80, - 0x10, 0x45, 0x36, 0x36, 0xbf, 0x6a, 0x9a, 0x8b, 0xde, 0x6a, 0x7e, 0xfa, 0x78, 0xd8, 0x47, 0x56, - 0x3c, 0x2f, 0x7d, 0x04, 0x6b, 0xf4, 0x3e, 0xdc, 0xd8, 0x74, 0xd6, 0x7c, 0xb1, 0x48, 0x72, 0xe6, - 0x3d, 0xaa, 0x9c, 0x35, 0xab, 0x22, 0x9d, 0x82, 0x5c, 0x48, 0xdd, 0xb9, 0x87, 0x8f, 0x71, 0x65, - 0xcd, 0x57, 0x0b, 0xc3, 0x95, 0x12, 0x98, 0x2a, 0x67, 0xa5, 0xea, 0x95, 0x96, 0x81, 0xe0, 0x41, - 0x06, 0xb5, 0x26, 0xf8, 0x6f, 0xde, 0xe8, 0x3e, 0xa6, 0x4c, 0xaa, 0xde, 0x8b, 0xb5, 0xfe, 0x38, - 0x54, 0xd3, 0x61, 0x7e, 0xfe, 0x93, 0x4f, 0xfb, 0x48, 0x44, 0x53, 0x7a, 0x07, 0xd4, 0xf2, 0xd1, - 0xa1, 0xdd, 0x38, 0xa8, 0x58, 0x4e, 0x7d, 0xa7, 0xfc, 0xa1, 0x72, 0xec, 0x1c, 0x7f, 0xaa, 0x57, - 0x9c, 0xc6, 0xa1, 0x5d, 0xaf, 0x94, 0x6b, 0x7b, 0xb5, 0xca, 0xae, 0xc8, 0xc9, 0xff, 0x9e, 0x9d, - 0xab, 0xeb, 0x0d, 0x9f, 0xf6, 0x91, 0x8b, 0x4f, 0xf1, 0xd8, 0x87, 0x64, 0x00, 0x39, 0x75, 0xd8, - 0xde, 0xdf, 0xb1, 0xab, 0x22, 0x2f, 0xaf, 0x9d, 0x9d, 0xab, 0xd9, 0x29, 0xe6, 0xd2, 0x36, 0xd8, - 0x48, 0x1d, 0x88, 0xc8, 0x89, 0x4b, 0x72, 0xee, 0xec, 0x5c, 0x15, 0x4f, 0x66, 0x68, 0xc9, 0xc2, - 0xd7, 0xef, 0x0a, 0x57, 0x3a, 0xbc, 0xb8, 0x51, 0xf8, 0xcb, 0x1b, 0x85, 0xff, 0x7d, 0xa3, 0xf0, - 0xdf, 0x6e, 0x15, 0xee, 0xf2, 0x56, 0xe1, 0xae, 0x6e, 0x15, 0xee, 0xf3, 0xeb, 0x16, 0x66, 0xed, - 0x41, 0x53, 0x77, 0x49, 0xcf, 0x48, 0x56, 0xeb, 0x1d, 0xaa, 0x97, 0x93, 0x1d, 0x1d, 0x6e, 0x1b, - 0x5f, 0xe2, 0x45, 0x1d, 0xaf, 0xcc, 0xe6, 0x72, 0xbc, 0x33, 0xb7, 0xff, 0x06, 0x00, 0x00, 0xff, - 0xff, 0xc0, 0xe2, 0x3f, 0x59, 0xd0, 0x05, 0x00, 0x00, + // 836 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xcf, 0x6e, 0xe2, 0x46, + 0x1c, 0xb6, 0x01, 0xad, 0x9a, 0xa1, 0x22, 0xce, 0x2c, 0xad, 0x58, 0x6f, 0xcb, 0x5a, 0xd6, 0x4a, + 0x45, 0xa9, 0xd6, 0x2e, 0x64, 0x0f, 0x55, 0x7b, 0x69, 0x00, 0xa7, 0x71, 0x9b, 0x90, 0xc8, 0x06, + 0x56, 0xdb, 0x8b, 0x35, 0xd8, 0x13, 0x32, 0x0a, 0xd8, 0xc8, 0x33, 0xb8, 0xe5, 0x0d, 0x2a, 0x4e, + 0x7d, 0x01, 0x4e, 0x55, 0x0f, 0xfb, 0x18, 0xbd, 0xed, 0x71, 0xa5, 0x5e, 0xf6, 0xd2, 0xa8, 0x4a, + 0xde, 0xa0, 0x4f, 0x50, 0xd9, 0xfc, 0xc7, 0x06, 0x29, 0x52, 0xa5, 0xf6, 0x84, 0x19, 0xff, 0xbe, + 0x4f, 0xf3, 0xfd, 0x19, 0x79, 0xc0, 0x73, 0xe2, 0x32, 0xec, 0xdb, 0xd7, 0x88, 0xb8, 0x16, 0xc5, + 0xf6, 0xd0, 0x27, 0x6c, 0xa4, 0xda, 0x76, 0xa0, 0x06, 0xe5, 0xf0, 0x47, 0x19, 0xf8, 0x1e, 0xf3, + 0xa0, 0x98, 0x30, 0xa5, 0x84, 0xaf, 0x83, 0xb2, 0xf8, 0xdc, 0xf6, 0x68, 0xdf, 0xa3, 0x2a, 0x65, + 0xe8, 0x86, 0xb8, 0x5d, 0x35, 0x28, 0x77, 0x30, 0x43, 0xe5, 0xf9, 0xff, 0x29, 0x83, 0x98, 0xef, + 0x7a, 0x5d, 0x2f, 0x7a, 0x54, 0xc3, 0xa7, 0xd9, 0xea, 0x53, 0x86, 0x5d, 0x07, 0xfb, 0x7d, 0xe2, + 0x32, 0x15, 0x75, 0x6c, 0xa2, 0xb2, 0xd1, 0x00, 0xd3, 0xe9, 0x4b, 0xf9, 0x3d, 0x0f, 0x3e, 0x69, + 0xa3, 0x1e, 0x71, 0x10, 0xf3, 0x7c, 0x13, 0xb3, 0xda, 0x35, 0x72, 0xbb, 0xf8, 0x12, 0xd9, 0x37, + 0x98, 0xd5, 0x11, 0x43, 0xd0, 0x03, 0x07, 0xc1, 0xfc, 0xbd, 0x35, 0x1c, 0x38, 0x88, 0x61, 0x5a, + 0xe0, 0xa5, 0x74, 0x29, 0x5b, 0x91, 0x94, 0x25, 0xb3, 0x12, 0x32, 0x2b, 0x0b, 0xa6, 0x56, 0x34, + 0x58, 0x95, 0xde, 0xde, 0x3e, 0xe3, 0xfe, 0xbe, 0x7d, 0x56, 0x18, 0xa1, 0x7e, 0xef, 0x2b, 0x39, + 0x46, 0x24, 0x1b, 0x42, 0xb0, 0x0e, 0xa1, 0xb0, 0x04, 0xc2, 0x35, 0x8a, 0xd9, 0x6c, 0xc8, 0x22, + 0x4e, 0x21, 0x25, 0xf1, 0xa5, 0x8c, 0x91, 0x9b, 0xae, 0x4f, 0x07, 0x75, 0x07, 0x7e, 0x0a, 0x00, + 0xed, 0x21, 0x7a, 0x6d, 0x21, 0xfb, 0x86, 0x16, 0xd2, 0x52, 0xba, 0xb4, 0x67, 0xec, 0x45, 0x2b, + 0xc7, 0xf6, 0x0d, 0x95, 0x3d, 0xf0, 0x64, 0x9b, 0x32, 0x0a, 0x0d, 0x90, 0xe9, 0x11, 0xca, 0x66, + 0x4a, 0xbe, 0x54, 0xb6, 0x7b, 0xaf, 0xec, 0xb2, 0xa7, 0x9a, 0x09, 0x15, 0x1a, 0x11, 0x97, 0xfc, + 0x0d, 0xc8, 0xb7, 0xcd, 0xda, 0x39, 0x62, 0x43, 0x1f, 0x3b, 0x2b, 0x16, 0x26, 0x29, 0xe2, 0x93, + 0x14, 0xc9, 0x7f, 0xf0, 0x60, 0xdf, 0x0c, 0x05, 0xac, 0xa0, 0x0d, 0xb0, 0xb7, 0xf0, 0x28, 0x82, + 0x65, 0x2b, 0xe2, 0x76, 0xe3, 0xab, 0x85, 0x99, 0xe5, 0xc2, 0x86, 0xe5, 0xb2, 0xb1, 0xa4, 0x79, + 0x80, 0xc7, 0x55, 0x00, 0x88, 0x7b, 0xe5, 0x23, 0x9b, 0x11, 0xcf, 0x2d, 0xa4, 0x25, 0xbe, 0x94, + 0xab, 0xc8, 0xca, 0xb4, 0x8d, 0xca, 0xbc, 0x7d, 0xb3, 0x36, 0x2a, 0xfa, 0x62, 0xd2, 0x58, 0x41, + 0xc9, 0x9f, 0x81, 0xc7, 0x33, 0x53, 0x5a, 0x6e, 0xc7, 0x73, 0x1d, 0xe2, 0x76, 0x2f, 0x06, 0x14, + 0x0a, 0x20, 0x4d, 0x9c, 0x69, 0x97, 0x32, 0x46, 0xf8, 0x28, 0xff, 0x96, 0x02, 0xb0, 0xe6, 0xb9, + 0x74, 0xd8, 0xc7, 0xfe, 0x8a, 0x03, 0x27, 0x20, 0x13, 0x56, 0x36, 0x12, 0x9f, 0xab, 0x54, 0x76, + 0x65, 0x15, 0x47, 0x37, 0x47, 0x03, 0x6c, 0x44, 0x78, 0xf8, 0x0a, 0xec, 0xd3, 0x75, 0x73, 0x23, + 0xd1, 0xd9, 0xca, 0xe7, 0xbb, 0x28, 0x37, 0xf2, 0x38, 0xe5, 0x8c, 0x4d, 0x16, 0x78, 0x05, 0xf2, + 0x01, 0xb5, 0x63, 0xc1, 0x47, 0x76, 0x65, 0x2b, 0x5f, 0xec, 0x2c, 0x57, 0x42, 0x61, 0x4e, 0x39, + 0x23, 0x91, 0xaf, 0xfa, 0x08, 0x64, 0x1c, 0xc4, 0x90, 0xdc, 0x01, 0x1f, 0xc7, 0x85, 0x9e, 0x11, + 0xca, 0xe0, 0xe9, 0x5a, 0xad, 0x95, 0x87, 0x59, 0xb5, 0x56, 0xe6, 0x37, 0x29, 0x90, 0x8f, 0x8f, + 0xb4, 0xcb, 0xff, 0x5a, 0x1a, 0xaf, 0xb7, 0xa5, 0xf1, 0xe2, 0x01, 0x69, 0xb4, 0xcb, 0xff, 0x87, + 0x3c, 0xfe, 0xe4, 0xc1, 0x41, 0x6c, 0x63, 0xff, 0xf1, 0xc1, 0xfd, 0x2e, 0xe1, 0xe0, 0x1e, 0xee, + 0x52, 0xbe, 0x3c, 0xbc, 0x51, 0x48, 0x2b, 0xe8, 0xc3, 0xdf, 0xf9, 0xa4, 0xc2, 0x85, 0x63, 0xf0, + 0x6b, 0x20, 0xd5, 0x2e, 0x1a, 0x66, 0xeb, 0x5c, 0x33, 0xac, 0xcb, 0xe3, 0xda, 0xf7, 0x5a, 0xd3, + 0x6a, 0xbe, 0xbe, 0xd4, 0xac, 0x56, 0xc3, 0xbc, 0xd4, 0x6a, 0xfa, 0x89, 0xae, 0xd5, 0x05, 0x4e, + 0xfc, 0x68, 0x3c, 0x91, 0x0e, 0x5a, 0x2e, 0x1d, 0x60, 0x9b, 0x5c, 0x91, 0xb9, 0x87, 0x50, 0x05, + 0x62, 0x22, 0xd8, 0x3c, 0x3b, 0x36, 0x4f, 0x05, 0x5e, 0xdc, 0x1f, 0x4f, 0xa4, 0xec, 0x8a, 0xb1, + 0xf0, 0x08, 0x3c, 0x49, 0x04, 0x84, 0xa9, 0x09, 0x29, 0x31, 0x3f, 0x9e, 0x48, 0x42, 0x7b, 0x23, + 0x29, 0x31, 0xf3, 0xf3, 0xaf, 0x45, 0xee, 0xf0, 0x0d, 0x0f, 0x72, 0xeb, 0x12, 0xe1, 0x4b, 0xf0, + 0x54, 0x6f, 0x9c, 0x18, 0xc7, 0xb5, 0xa6, 0x7e, 0xd1, 0x48, 0xda, 0xf6, 0xe3, 0xf1, 0x44, 0xda, + 0x5f, 0x82, 0xb4, 0xfe, 0x80, 0x8d, 0xa0, 0x1a, 0x47, 0xd5, 0x2f, 0x5a, 0xd5, 0x33, 0xcd, 0x32, + 0xf5, 0x6f, 0x1b, 0x02, 0x2f, 0xe6, 0xc6, 0x13, 0x09, 0xd4, 0xbd, 0x61, 0xa7, 0x87, 0x4d, 0xd2, + 0x75, 0xe1, 0x21, 0x28, 0xc4, 0x01, 0xaf, 0x1a, 0x4d, 0xfd, 0x5c, 0x13, 0x52, 0xe2, 0x87, 0xe3, + 0x89, 0xf4, 0x41, 0xdd, 0xfb, 0xd1, 0x65, 0xa4, 0x8f, 0xa7, 0x7b, 0xad, 0x36, 0xde, 0xde, 0x15, + 0xf9, 0x77, 0x77, 0x45, 0xfe, 0xaf, 0xbb, 0x22, 0xff, 0xcb, 0x7d, 0x91, 0x7b, 0x77, 0x5f, 0xe4, + 0xde, 0xdf, 0x17, 0xb9, 0x1f, 0x5e, 0x76, 0x09, 0xbb, 0x1e, 0x76, 0x14, 0xdb, 0xeb, 0xab, 0xb3, + 0x2b, 0xc1, 0x32, 0xd2, 0x17, 0x8b, 0xbb, 0x45, 0x70, 0xa4, 0xfe, 0x14, 0x5d, 0x30, 0xa2, 0x4f, + 0x7d, 0xe7, 0x51, 0xf4, 0xad, 0x3f, 0xfa, 0x27, 0x00, 0x00, 0xff, 0xff, 0x8f, 0xbf, 0xfc, 0xd2, + 0x88, 0x08, 0x00, 0x00, } func (m *ValidatorSetChangePacketData) Marshal() (dAtA []byte, err error) { @@ -845,6 +1050,128 @@ func (m *ConsumerPacketDataList) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } +func (m *ConsumerPacketDataV1) 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 *ConsumerPacketDataV1) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConsumerPacketDataV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Data != nil { + { + size := m.Data.Size() + i -= size + if _, err := m.Data.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + if m.Type != 0 { + i = encodeVarintCcv(dAtA, i, uint64(m.Type)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ConsumerPacketDataV1_SlashPacketData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConsumerPacketDataV1_SlashPacketData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.SlashPacketData != nil { + { + size, err := m.SlashPacketData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCcv(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + return len(dAtA) - i, nil +} +func (m *ConsumerPacketDataV1_VscMaturedPacketData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConsumerPacketDataV1_VscMaturedPacketData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.VscMaturedPacketData != nil { + { + size, err := m.VscMaturedPacketData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCcv(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + return len(dAtA) - i, nil +} +func (m *SlashPacketDataV1) 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 *SlashPacketDataV1) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SlashPacketDataV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Infraction != 0 { + i = encodeVarintCcv(dAtA, i, uint64(m.Infraction)) + i-- + dAtA[i] = 0x18 + } + if m.ValsetUpdateId != 0 { + i = encodeVarintCcv(dAtA, i, uint64(m.ValsetUpdateId)) + i-- + dAtA[i] = 0x10 + } + { + size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCcv(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func encodeVarintCcv(dAtA []byte, offset int, v uint64) int { offset -= sovCcv(v) base := offset @@ -994,13 +1321,69 @@ func (m *ConsumerPacketDataList) Size() (n int) { return n } -func sovCcv(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 +func (m *ConsumerPacketDataV1) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Type != 0 { + n += 1 + sovCcv(uint64(m.Type)) + } + if m.Data != nil { + n += m.Data.Size() + } + return n } -func sozCcv(x uint64) (n int) { - return sovCcv(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + +func (m *ConsumerPacketDataV1_SlashPacketData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SlashPacketData != nil { + l = m.SlashPacketData.Size() + n += 1 + l + sovCcv(uint64(l)) + } + return n } -func (m *ValidatorSetChangePacketData) Unmarshal(dAtA []byte) error { +func (m *ConsumerPacketDataV1_VscMaturedPacketData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.VscMaturedPacketData != nil { + l = m.VscMaturedPacketData.Size() + n += 1 + l + sovCcv(uint64(l)) + } + return n +} +func (m *SlashPacketDataV1) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Validator.Size() + n += 1 + l + sovCcv(uint64(l)) + if m.ValsetUpdateId != 0 { + n += 1 + sovCcv(uint64(m.ValsetUpdateId)) + } + if m.Infraction != 0 { + n += 1 + sovCcv(uint64(m.Infraction)) + } + return n +} + +func sovCcv(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozCcv(x uint64) (n int) { + return sovCcv(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ValidatorSetChangePacketData) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1758,6 +2141,266 @@ func (m *ConsumerPacketDataList) Unmarshal(dAtA []byte) error { } return nil } +func (m *ConsumerPacketDataV1) 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 ErrIntOverflowCcv + } + 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: ConsumerPacketDataV1: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConsumerPacketDataV1: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + m.Type = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCcv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Type |= ConsumerPacketDataType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SlashPacketData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCcv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCcv + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCcv + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &SlashPacketDataV1{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Data = &ConsumerPacketDataV1_SlashPacketData{v} + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VscMaturedPacketData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCcv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCcv + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCcv + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &VSCMaturedPacketData{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Data = &ConsumerPacketDataV1_VscMaturedPacketData{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCcv(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCcv + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SlashPacketDataV1) 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 ErrIntOverflowCcv + } + 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: SlashPacketDataV1: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SlashPacketDataV1: 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 ErrIntOverflowCcv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCcv + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCcv + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ValsetUpdateId", wireType) + } + m.ValsetUpdateId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCcv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ValsetUpdateId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Infraction", wireType) + } + m.Infraction = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCcv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Infraction |= InfractionType(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipCcv(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCcv + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipCcv(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0