From 2be79d715f4dc738cea07b20982bf9d3fff8a302 Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Tue, 11 Jul 2023 10:09:56 +0200 Subject: [PATCH] update ICS misbehaviour test --- .../ccv/provider/v1/tx.proto | 3 +- tests/e2e/actions.go | 2 - tests/integration/misbehaviour.go | 133 +++++++++++++----- x/ccv/provider/client/cli/tx.go | 8 +- x/ccv/provider/keeper/misbehaviour.go | 14 +- x/ccv/provider/keeper/msg_server.go | 9 +- x/ccv/provider/types/codec.go | 5 + x/ccv/provider/types/msg.go | 19 ++- x/ccv/provider/types/tx.pb.go | 79 +++++------ 9 files changed, 179 insertions(+), 93 deletions(-) diff --git a/proto/interchain_security/ccv/provider/v1/tx.proto b/proto/interchain_security/ccv/provider/v1/tx.proto index 61be3064ea..dafd1cee79 100644 --- a/proto/interchain_security/ccv/provider/v1/tx.proto +++ b/proto/interchain_security/ccv/provider/v1/tx.proto @@ -7,7 +7,6 @@ import "google/api/annotations.proto"; import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; import "google/protobuf/any.proto"; -import "ibc/lightclients/tendermint/v1/tendermint.proto"; // Msg defines the Msg service. service Msg { @@ -55,7 +54,7 @@ message MsgSubmitConsumerMisbehaviour { string submitter = 1; // The Misbehaviour of the consumer chain wrapping // two conflicting IBC headers - ibc.lightclients.tendermint.v1.Misbehaviour misbehaviour = 2; + google.protobuf.Any misbehaviour = 2; } message MsgSubmitConsumerMisbehaviourResponse {} diff --git a/tests/e2e/actions.go b/tests/e2e/actions.go index 2e1863f070..b48d20b687 100644 --- a/tests/e2e/actions.go +++ b/tests/e2e/actions.go @@ -840,8 +840,6 @@ func (tr TestRun) addChainToHermes( } saveMnemonicCommand := fmt.Sprintf(`echo '%s' > %s`, mnemonic, "/root/.hermes/mnemonic.txt") - fmt.Println("Add to hermes", action.validator) - fmt.Println(mnemonic) //#nosec G204 -- Bypass linter warning for spawning subprocess with cmd arguments. bz, err = exec.Command("docker", "exec", tr.containerConfig.instanceName, "bash", "-c", saveMnemonicCommand, diff --git a/tests/integration/misbehaviour.go b/tests/integration/misbehaviour.go index 13ad7e6230..1628bf890c 100644 --- a/tests/integration/misbehaviour.go +++ b/tests/integration/misbehaviour.go @@ -4,66 +4,123 @@ import ( "time" sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/cosmos/interchain-security/v2/x/ccv/provider/types" ibctmtypes "github.com/cosmos/ibc-go/v4/modules/light-clients/07-tendermint/types" tmtypes "github.com/tendermint/tendermint/types" ) +// TestHandleConsumerMisbehaviour verifies first that ICS misbehaviour is handled +// only if its conlflicting headers are valid. Then, it checks +// that validators who signed the incorrect header are jailed and tombstoned. func (s *CCVTestSuite) TestHandleConsumerMisbehaviour() { s.SetupCCVChannel(s.path) // required to have the consumer client revision height greater than 0 s.SendEmptyVSCPacket() + // create signing info for all validators for _, v := range s.providerChain.Vals.Validators { s.setDefaultValSigningInfo(*v) } - altTime := s.providerCtx().BlockTime().Add(time.Minute) + // create a new header timestamp + headerTs := s.providerCtx().BlockTime().Add(time.Minute) + // get trusted validators and height clientHeight := s.consumerChain.LastHeader.TrustedHeight clientTMValset := tmtypes.NewValidatorSet(s.consumerChain.Vals.Validators) clientSigners := s.consumerChain.Signers + // create an alternative validator set using more than 1/3 of the trusted validator set altValset := tmtypes.NewValidatorSet(s.consumerChain.Vals.Validators[0:2]) altSigners := make(map[string]tmtypes.PrivValidator, 1) altSigners[clientTMValset.Validators[0].Address.String()] = clientSigners[clientTMValset.Validators[0].Address.String()] altSigners[clientTMValset.Validators[1].Address.String()] = clientSigners[clientTMValset.Validators[1].Address.String()] - - misb := &ibctmtypes.Misbehaviour{ - ClientId: s.path.EndpointA.ClientID, - Header1: s.consumerChain.CreateTMClientHeader( - s.consumerChain.ChainID, - int64(clientHeight.RevisionHeight+1), - clientHeight, - altTime, - clientTMValset, - clientTMValset, - clientTMValset, - clientSigners, - ), - Header2: s.consumerChain.CreateTMClientHeader( - s.consumerChain.ChainID, - int64(clientHeight.RevisionHeight+1), - clientHeight, - altTime, - altValset, - altValset, - clientTMValset, - altSigners, - ), + testCases := []struct { + name string + misbehaviour *ibctmtypes.Misbehaviour + expPass bool + }{ + { + "invalid misbehaviour with empty header1 - shouldn't pass", + &ibctmtypes.Misbehaviour{ + Header1: &ibctmtypes.Header{}, + Header2: s.consumerChain.CreateTMClientHeader( + s.consumerChain.ChainID, + int64(clientHeight.RevisionHeight+1), + clientHeight, + headerTs, + altValset, + altValset, + clientTMValset, + altSigners, + ), + }, + false, + }, + { + "valid misbehaviour - should pass", + &ibctmtypes.Misbehaviour{ + ClientId: s.path.EndpointA.ClientID, + Header1: s.consumerChain.CreateTMClientHeader( + s.consumerChain.ChainID, + int64(clientHeight.RevisionHeight+1), + clientHeight, + headerTs, + clientTMValset, + clientTMValset, + clientTMValset, + clientSigners, + ), + // the resulting Header2 will have a different BlockID + // than Header1 since doesn't share the same valset and signers + Header2: s.consumerChain.CreateTMClientHeader( + s.consumerChain.ChainID, + int64(clientHeight.RevisionHeight+1), + clientHeight, + headerTs, + altValset, + altValset, + clientTMValset, + altSigners, + ), + }, + true, + }, } - err := s.providerApp.GetProviderKeeper().HandleConsumerMisbehaviour(s.providerCtx(), *misb) - s.NoError(err) - - for _, v := range altValset.Validators { - consuAddr := sdk.ConsAddress(v.Address.Bytes()) - provAddr := s.providerApp.GetProviderKeeper().GetProviderAddrFromConsumerAddr(s.providerCtx(), s.consumerChain.ChainID, types.NewConsumerConsAddress(consuAddr)) - val, ok := s.providerApp.GetTestStakingKeeper().GetValidatorByConsAddr(s.providerCtx(), provAddr.Address) - s.Require().True(ok) - s.Require().True(val.Jailed) - s.Require().True(s.providerApp.GetTestSlashingKeeper().IsTombstoned(s.providerCtx(), provAddr.Address)) + for _, tc := range testCases { + s.Run(tc.name, func() { + err := s.providerApp.GetProviderKeeper().HandleConsumerMisbehaviour(s.providerCtx(), tc.misbehaviour) + if tc.expPass { + s.NoError(err) + // Check that only the validators of the alternate validator set + // , i.e. altValset, are jailed and tombstoned on the provider + for _, consuVal := range clientTMValset.Validators { + provVal := s.getProviderValFromConsumerVal(*consuVal) + provConsAddr, err := provVal.GetConsAddr() + s.Require().NoError(err) + if _, ok := altSigners[consuVal.Address.String()]; ok { + s.Require().True(provVal.Jailed) + s.Require().True(s.providerApp.GetTestSlashingKeeper().IsTombstoned(s.providerCtx(), provConsAddr)) + } else { + s.Require().False(provVal.Jailed) + s.Require().False(s.providerApp.GetTestSlashingKeeper().IsTombstoned(s.providerCtx(), provConsAddr)) + } + } + } else { + // Check that no validators are jailed or tombstoned on the provider + for _, consuVal := range clientTMValset.Validators { + s.Error(err) + provVal := s.getProviderValFromConsumerVal(*consuVal) + s.Require().False(provVal.Jailed) + provConsAddr, err := provVal.GetConsAddr() + s.Require().NoError(err) + s.Require().False(s.providerApp.GetTestSlashingKeeper().IsTombstoned(s.providerCtx(), provConsAddr)) + } + } + }) } } @@ -234,3 +291,11 @@ func (s *CCVTestSuite) TestConstructLightClientEvidence() { }) } } + +func (s *CCVTestSuite) getProviderValFromConsumerVal(valAddr tmtypes.Validator) stakingtypes.Validator { + consuAddr := types.NewConsumerConsAddress(sdk.ConsAddress(valAddr.Address.Bytes())) + provAddr := s.providerApp.GetProviderKeeper().GetProviderAddrFromConsumerAddr(s.providerCtx(), s.consumerChain.ChainID, consuAddr) + val, ok := s.providerApp.GetTestStakingKeeper().GetValidatorByConsAddr(s.providerCtx(), provAddr.Address) + s.Require().True(ok) + return val +} diff --git a/x/ccv/provider/client/cli/tx.go b/x/ccv/provider/client/cli/tx.go index 87b4179b0b..f6776fc1f9 100644 --- a/x/ccv/provider/client/cli/tx.go +++ b/x/ccv/provider/client/cli/tx.go @@ -12,7 +12,7 @@ import ( "github.com/cosmos/cosmos-sdk/version" sdk "github.com/cosmos/cosmos-sdk/types" - ibctmtypes "github.com/cosmos/ibc-go/v4/modules/light-clients/07-tendermint/types" + "github.com/cosmos/ibc-go/v4/modules/core/exported" "github.com/cosmos/interchain-security/v2/x/ccv/provider/types" ) @@ -117,12 +117,12 @@ func NewSubmitConsumerMisbehaviourCmd() *cobra.Command { WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) submitter := clientCtx.GetFromAddress() - var misbehavior ibctmtypes.Misbehaviour - if err := clientCtx.Codec.UnmarshalInterfaceJSON([]byte(args[1]), &misbehavior); err != nil { + var misbehaviour exported.Misbehaviour + if err := clientCtx.Codec.UnmarshalInterfaceJSON([]byte(args[1]), misbehaviour); err != nil { return err } - msg, err := types.NewMsgSubmitConsumerMisbehaviour(submitter, &misbehavior) + msg, err := types.NewMsgSubmitConsumerMisbehaviour(submitter, misbehaviour) if err != nil { return err } diff --git a/x/ccv/provider/keeper/misbehaviour.go b/x/ccv/provider/keeper/misbehaviour.go index e285adf652..61748d615f 100644 --- a/x/ccv/provider/keeper/misbehaviour.go +++ b/x/ccv/provider/keeper/misbehaviour.go @@ -8,6 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types" + "github.com/cosmos/ibc-go/v4/modules/core/exported" ibctmtypes "github.com/cosmos/ibc-go/v4/modules/light-clients/07-tendermint/types" tmtypes "github.com/tendermint/tendermint/types" ) @@ -15,20 +16,25 @@ import ( // HandleConsumerMisbehaviour checks whether the given IBC misbehaviour is valid and, if they are, the misbehaving // CheckConsumerMisbehaviour check that the given IBC misbehaviour headers forms a valid light client attack evidence. // proceed to the jailing and tombstoning of the bzyantine validators. -func (k Keeper) HandleConsumerMisbehaviour(ctx sdk.Context, misbehaviour ibctmtypes.Misbehaviour) error { +func (k Keeper) HandleConsumerMisbehaviour(ctx sdk.Context, misbehaviour exported.Misbehaviour) error { logger := ctx.Logger() - if err := k.clientKeeper.CheckMisbehaviourAndUpdateState(ctx, &misbehaviour); err != nil { + // Check that the validity of the misbehaviour + if err := k.clientKeeper.CheckMisbehaviourAndUpdateState(ctx, misbehaviour); err != nil { logger.Info("Misbehaviour rejected", err.Error()) return err } + + // Assign the Tendermint client misbehaviour concrete type + tmMisbehaviour := misbehaviour.(*ibctmtypes.Misbehaviour) + // Since the misbehaviour packet was received within the trusting period // w.r.t to the last trusted consensus it entails that the infraction age // isn't too old. see ibc-go/modules/light-clients/07-tendermint/types/misbehaviour_handle.go // construct a ligth client attack evidence - evidence, err := k.ConstructLightClientEvidence(ctx, misbehaviour) + evidence, err := k.ConstructLightClientEvidence(ctx, *tmMisbehaviour) if err != nil { return err } @@ -39,7 +45,7 @@ func (k Keeper) HandleConsumerMisbehaviour(ctx sdk.Context, misbehaviour ibctmty for _, v := range evidence.ByzantineValidators { // convert consumer consensus address consuAddr := sdk.ConsAddress(v.Address.Bytes()) - provAddr := k.GetProviderAddrFromConsumerAddr(ctx, misbehaviour.Header1.Header.ChainID, types.NewConsumerConsAddress(consuAddr)) + provAddr := k.GetProviderAddrFromConsumerAddr(ctx, tmMisbehaviour.Header1.Header.ChainID, types.NewConsumerConsAddress(consuAddr)) k.stakingKeeper.ValidatorByConsAddr(ctx, consuAddr) val, ok := k.stakingKeeper.GetValidatorByConsAddr(ctx, provAddr.Address) diff --git a/x/ccv/provider/keeper/msg_server.go b/x/ccv/provider/keeper/msg_server.go index ca22b66f0d..d11ba91685 100644 --- a/x/ccv/provider/keeper/msg_server.go +++ b/x/ccv/provider/keeper/msg_server.go @@ -7,6 +7,7 @@ import ( errorsmod "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + clienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" "github.com/cosmos/interchain-security/v2/x/ccv/provider/types" ccvtypes "github.com/cosmos/interchain-security/v2/x/ccv/types" tmprotocrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" @@ -129,7 +130,13 @@ func (k msgServer) RegisterConsumerRewardDenom(goCtx context.Context, msg *types func (k msgServer) SubmitConsumerMisbehaviour(goCtx context.Context, msg *types.MsgSubmitConsumerMisbehaviour) (*types.MsgSubmitConsumerMisbehaviourResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - if err := k.Keeper.HandleConsumerMisbehaviour(ctx, *msg.Misbehaviour); err != nil { + + misbehaviour, err := clienttypes.UnpackMisbehaviour(msg.Misbehaviour) + if err != nil { + return nil, err + } + + if err := k.Keeper.HandleConsumerMisbehaviour(ctx, misbehaviour); err != nil { return &types.MsgSubmitConsumerMisbehaviourResponse{}, err } diff --git a/x/ccv/provider/types/codec.go b/x/ccv/provider/types/codec.go index 0ef3c2d296..2f28b398f5 100644 --- a/x/ccv/provider/types/codec.go +++ b/x/ccv/provider/types/codec.go @@ -6,6 +6,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/cosmos/ibc-go/v4/modules/core/exported" ) // RegisterLegacyAminoCodec registers the necessary x/ibc transfer interfaces and concrete types @@ -40,6 +41,10 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) { (*sdk.Msg)(nil), &MsgSubmitConsumerMisbehaviour{}, ) + registry.RegisterInterface( + "ibc.core.client.v1.Misbehaviour", + (*exported.Misbehaviour)(nil), + ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } diff --git a/x/ccv/provider/types/msg.go b/x/ccv/provider/types/msg.go index 9496122342..d3d5a8a60b 100644 --- a/x/ccv/provider/types/msg.go +++ b/x/ccv/provider/types/msg.go @@ -6,8 +6,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - - ibctmtypes "github.com/cosmos/ibc-go/v4/modules/light-clients/07-tendermint/types" + ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" + "github.com/cosmos/ibc-go/v4/modules/core/exported" ) // provider message types @@ -147,8 +147,13 @@ func (msg MsgRegisterConsumerRewardDenom) ValidateBasic() error { return nil } -func NewMsgSubmitConsumerMisbehaviour(submitter sdk.AccAddress, m *ibctmtypes.Misbehaviour) (*MsgSubmitConsumerMisbehaviour, error) { - return &MsgSubmitConsumerMisbehaviour{Submitter: submitter.String(), Misbehaviour: m}, nil +func NewMsgSubmitConsumerMisbehaviour(submitter sdk.AccAddress, misbehaviour exported.Misbehaviour) (*MsgSubmitConsumerMisbehaviour, error) { + anyMisbehaviour, err := ibcclienttypes.PackMisbehaviour(misbehaviour) + if err != nil { + return nil, err + } + + return &MsgSubmitConsumerMisbehaviour{Submitter: submitter.String(), Misbehaviour: anyMisbehaviour}, nil } // Route implements the sdk.Msg interface. @@ -164,7 +169,11 @@ func (msg MsgSubmitConsumerMisbehaviour) ValidateBasic() error { if msg.Submitter == "" { return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Submitter) } - if err := msg.Misbehaviour.ValidateBasic(); err != nil { + misbehaviour, err := ibcclienttypes.UnpackMisbehaviour(msg.Misbehaviour) + if err != nil { + return err + } + if err := misbehaviour.ValidateBasic(); err != nil { return err } return nil diff --git a/x/ccv/provider/types/tx.pb.go b/x/ccv/provider/types/tx.pb.go index f27ab52533..84f93dc4b1 100644 --- a/x/ccv/provider/types/tx.pb.go +++ b/x/ccv/provider/types/tx.pb.go @@ -6,8 +6,7 @@ package types import ( context "context" fmt "fmt" - _ "github.com/cosmos/cosmos-sdk/codec/types" - types "github.com/cosmos/ibc-go/v4/modules/light-clients/07-tendermint/types" + types "github.com/cosmos/cosmos-sdk/codec/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" @@ -199,7 +198,7 @@ type MsgSubmitConsumerMisbehaviour struct { Submitter string `protobuf:"bytes,1,opt,name=submitter,proto3" json:"submitter,omitempty"` // The Misbehaviour of the consumer chain wrapping // two conflicting IBC headers - Misbehaviour *types.Misbehaviour `protobuf:"bytes,2,opt,name=misbehaviour,proto3" json:"misbehaviour,omitempty"` + Misbehaviour *types.Any `protobuf:"bytes,2,opt,name=misbehaviour,proto3" json:"misbehaviour,omitempty"` } func (m *MsgSubmitConsumerMisbehaviour) Reset() { *m = MsgSubmitConsumerMisbehaviour{} } @@ -285,43 +284,41 @@ func init() { } var fileDescriptor_43221a4391e9fbf4 = []byte{ - // 568 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x3f, 0x6f, 0x13, 0x4f, - 0x10, 0xf5, 0xfd, 0xa2, 0x1f, 0x24, 0x9b, 0x80, 0xc4, 0xc9, 0x85, 0x73, 0x98, 0x33, 0x18, 0x01, - 0x29, 0xc2, 0xae, 0x6c, 0x0a, 0x44, 0x24, 0x0a, 0x3b, 0x34, 0x10, 0x59, 0x42, 0x47, 0x81, 0x44, - 0x81, 0x75, 0xb7, 0xbb, 0xac, 0x57, 0xf8, 0x76, 0x4f, 0xbb, 0x7b, 0x47, 0xee, 0x1b, 0x50, 0x42, - 0x85, 0xe8, 0xf2, 0x01, 0x90, 0xf8, 0x1a, 0x94, 0x29, 0xa9, 0x10, 0xb2, 0x1b, 0x6a, 0x4a, 0x2a, - 0xe4, 0xfb, 0x63, 0x5f, 0x84, 0xb1, 0x2c, 0xa0, 0xdb, 0x99, 0x79, 0xfb, 0xde, 0x1b, 0xcd, 0x68, - 0xc0, 0x3e, 0x17, 0x86, 0x2a, 0x3c, 0xf2, 0xb9, 0x18, 0x6a, 0x8a, 0x63, 0xc5, 0x4d, 0x8a, 0x30, - 0x4e, 0x50, 0xa4, 0x64, 0xc2, 0x09, 0x55, 0x28, 0xe9, 0x20, 0x73, 0x0c, 0x23, 0x25, 0x8d, 0xb4, - 0xaf, 0x2f, 0x41, 0x43, 0x8c, 0x13, 0x58, 0xa2, 0x61, 0xd2, 0x71, 0x9a, 0x4c, 0x4a, 0x36, 0xa6, - 0xc8, 0x8f, 0x38, 0xf2, 0x85, 0x90, 0xc6, 0x37, 0x5c, 0x0a, 0x9d, 0x53, 0x38, 0x75, 0x26, 0x99, - 0xcc, 0x9e, 0x68, 0xf6, 0x2a, 0xb2, 0xbb, 0x58, 0xea, 0x50, 0xea, 0x61, 0x5e, 0xc8, 0x83, 0xb2, - 0x54, 0xd0, 0x65, 0x51, 0x10, 0xbf, 0x40, 0xbe, 0x48, 0x8b, 0x12, 0xe2, 0x01, 0x46, 0x63, 0xce, - 0x46, 0x06, 0x8f, 0x39, 0x15, 0x46, 0x23, 0x43, 0x05, 0xa1, 0x2a, 0xe4, 0xc2, 0x64, 0xbe, 0xe7, - 0x51, 0xfe, 0xa1, 0xfd, 0xce, 0x02, 0xf5, 0x81, 0x66, 0x3d, 0xad, 0x39, 0x13, 0x87, 0x52, 0xe8, - 0x38, 0xa4, 0xea, 0x88, 0xa6, 0xf6, 0x2e, 0xd8, 0xcc, 0xbb, 0xe2, 0xa4, 0x61, 0x5d, 0xb5, 0xf6, - 0xb6, 0xbc, 0xf3, 0x59, 0xfc, 0x90, 0xd8, 0x77, 0xc1, 0x85, 0xb2, 0xbb, 0xa1, 0x4f, 0x88, 0x6a, - 0xfc, 0x37, 0xab, 0xf7, 0xed, 0xef, 0x5f, 0x5a, 0x17, 0x53, 0x3f, 0x1c, 0x1f, 0xb4, 0x67, 0x59, - 0xaa, 0x75, 0xdb, 0xdb, 0x29, 0x81, 0x3d, 0x42, 0x94, 0x7d, 0x0d, 0xec, 0xe0, 0x42, 0x62, 0xf8, - 0x92, 0xa6, 0x8d, 0x8d, 0x8c, 0x77, 0x1b, 0x2f, 0x64, 0x0f, 0x36, 0x5f, 0x9f, 0xb4, 0x6a, 0xdf, - 0x4e, 0x5a, 0xb5, 0xb6, 0x0b, 0x9a, 0xcb, 0x8c, 0x79, 0x54, 0x47, 0x52, 0x68, 0xda, 0x7e, 0x0e, - 0xdc, 0x81, 0x66, 0x1e, 0x65, 0x5c, 0x1b, 0xaa, 0x4a, 0x84, 0x47, 0x5f, 0xf9, 0x8a, 0x3c, 0xa0, - 0x42, 0x86, 0x76, 0x1d, 0xfc, 0x4f, 0x66, 0x8f, 0xc2, 0x7f, 0x1e, 0xd8, 0x4d, 0xb0, 0x45, 0x68, - 0x24, 0x35, 0x37, 0xb2, 0x70, 0xee, 0x2d, 0x12, 0x15, 0xfd, 0x3d, 0x70, 0x73, 0x35, 0xff, 0xdc, - 0xc9, 0x7b, 0x0b, 0x5c, 0x19, 0x68, 0xf6, 0x24, 0x0e, 0x42, 0x6e, 0x4a, 0xe0, 0x80, 0xeb, 0x80, - 0x8e, 0xfc, 0x84, 0xcb, 0x58, 0xcd, 0x34, 0x75, 0x56, 0x35, 0x54, 0x15, 0x6e, 0x16, 0x09, 0xfb, - 0x31, 0xd8, 0x09, 0x2b, 0xe8, 0xcc, 0xd4, 0x76, 0x77, 0x1f, 0xf2, 0x00, 0xc3, 0xea, 0x2c, 0x61, - 0x65, 0x7a, 0x49, 0x07, 0x56, 0x15, 0xbc, 0x33, 0x0c, 0x95, 0x2e, 0x6e, 0x81, 0x1b, 0x2b, 0xad, - 0x95, 0x4d, 0x74, 0x7f, 0x6c, 0x80, 0x8d, 0x81, 0x66, 0xf6, 0x5b, 0x0b, 0x5c, 0xfa, 0x75, 0x1b, - 0xee, 0xc1, 0x35, 0xf6, 0x1c, 0x2e, 0x9b, 0x97, 0xd3, 0xfb, 0xe3, 0xaf, 0xa5, 0x37, 0xfb, 0xa3, - 0x05, 0x2e, 0xaf, 0x1a, 0xf4, 0xe1, 0xba, 0x12, 0x2b, 0x48, 0x9c, 0xa3, 0x7f, 0x40, 0x32, 0x77, - 0xfc, 0xc1, 0x02, 0xce, 0x8a, 0x7d, 0xe8, 0xaf, 0xab, 0xf5, 0x7b, 0x0e, 0xe7, 0xd1, 0xdf, 0x73, - 0x94, 0x76, 0xfb, 0x4f, 0x3f, 0x4d, 0x5c, 0xeb, 0x74, 0xe2, 0x5a, 0x5f, 0x27, 0xae, 0xf5, 0x66, - 0xea, 0xd6, 0x4e, 0xa7, 0x6e, 0xed, 0xf3, 0xd4, 0xad, 0x3d, 0xbb, 0xcf, 0xb8, 0x19, 0xc5, 0x01, - 0xc4, 0x32, 0x2c, 0x8e, 0x10, 0x5a, 0xc8, 0xde, 0x9e, 0xdf, 0xc7, 0xa4, 0x8b, 0x8e, 0xcf, 0x1e, - 0x49, 0x93, 0x46, 0x54, 0x07, 0xe7, 0xb2, 0x2b, 0x73, 0xe7, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xe3, 0x4f, 0x57, 0x26, 0x55, 0x05, 0x00, 0x00, + // 534 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0xb1, 0x6f, 0xd3, 0x40, + 0x14, 0xc6, 0x63, 0x22, 0xa0, 0xbd, 0x06, 0x24, 0xac, 0x0c, 0xa9, 0x09, 0x0e, 0x04, 0x01, 0x1d, + 0xc0, 0x56, 0xc3, 0x00, 0x54, 0x62, 0x48, 0xca, 0x02, 0x55, 0x16, 0x33, 0x20, 0x31, 0x10, 0x39, + 0x77, 0xc7, 0xe5, 0x44, 0x7d, 0x67, 0xdd, 0x3b, 0x9b, 0x7a, 0x64, 0x63, 0x84, 0x89, 0xb5, 0x7f, + 0x00, 0x12, 0xff, 0x06, 0x63, 0x47, 0x26, 0x84, 0x92, 0x85, 0x99, 0x91, 0x09, 0xc5, 0xf6, 0x25, + 0xa9, 0x08, 0x51, 0x04, 0x6c, 0xf7, 0xde, 0xfb, 0xfc, 0x7d, 0x3f, 0xe9, 0x59, 0x0f, 0xdd, 0xe6, + 0x42, 0x53, 0x85, 0x47, 0x21, 0x17, 0x03, 0xa0, 0x38, 0x51, 0x5c, 0x67, 0x3e, 0xc6, 0xa9, 0x1f, + 0x2b, 0x99, 0x72, 0x42, 0x95, 0x9f, 0xee, 0xfa, 0xfa, 0xc8, 0x8b, 0x95, 0xd4, 0xd2, 0xbe, 0xbe, + 0x44, 0xed, 0x61, 0x9c, 0x7a, 0x46, 0xed, 0xa5, 0xbb, 0x4e, 0x93, 0x49, 0xc9, 0x0e, 0xa9, 0x1f, + 0xc6, 0xdc, 0x0f, 0x85, 0x90, 0x3a, 0xd4, 0x5c, 0x0a, 0x28, 0x2c, 0x9c, 0x3a, 0x93, 0x4c, 0xe6, + 0x4f, 0x7f, 0xfa, 0x2a, 0xbb, 0xdb, 0x58, 0x42, 0x24, 0x61, 0x50, 0x0c, 0x8a, 0xc2, 0x8c, 0x4a, + 0xbb, 0xbc, 0x1a, 0x26, 0x2f, 0xfd, 0x50, 0x64, 0xc5, 0xa8, 0xfd, 0xc1, 0x42, 0xf5, 0x3e, 0xb0, + 0x2e, 0x00, 0x67, 0x62, 0x5f, 0x0a, 0x48, 0x22, 0xaa, 0x0e, 0x68, 0x66, 0x6f, 0xa3, 0x8d, 0x02, + 0x92, 0x93, 0x86, 0x75, 0xd5, 0xda, 0xd9, 0x0c, 0xce, 0xe7, 0xf5, 0x63, 0x62, 0xdf, 0x43, 0x17, + 0x0c, 0xec, 0x20, 0x24, 0x44, 0x35, 0xce, 0x4c, 0xe7, 0x3d, 0xfb, 0xc7, 0xd7, 0xd6, 0xc5, 0x2c, + 0x8c, 0x0e, 0xf7, 0xda, 0xd3, 0x2e, 0x05, 0x68, 0x07, 0x35, 0x23, 0xec, 0x12, 0xa2, 0xec, 0x6b, + 0xa8, 0x86, 0xcb, 0x88, 0xc1, 0x2b, 0x9a, 0x35, 0xaa, 0xb9, 0xef, 0x16, 0x9e, 0xc7, 0xee, 0x6d, + 0xbc, 0x3d, 0x6e, 0x55, 0xbe, 0x1f, 0xb7, 0x2a, 0x6d, 0x17, 0x35, 0x97, 0x81, 0x05, 0x14, 0x62, + 0x29, 0x80, 0xb6, 0x5f, 0x20, 0xb7, 0x0f, 0x2c, 0xa0, 0x8c, 0x83, 0xa6, 0xca, 0x28, 0x02, 0xfa, + 0x3a, 0x54, 0xe4, 0x11, 0x15, 0x32, 0xb2, 0xeb, 0xe8, 0x2c, 0x99, 0x3e, 0x4a, 0xfe, 0xa2, 0xb0, + 0x9b, 0x68, 0x93, 0xd0, 0x58, 0x02, 0xd7, 0xb2, 0x24, 0x0f, 0xe6, 0x8d, 0x85, 0xfc, 0x1d, 0x74, + 0x73, 0xb5, 0xff, 0x8c, 0xe4, 0x8d, 0x85, 0xae, 0xf4, 0x81, 0x3d, 0x4d, 0x86, 0x11, 0xd7, 0x46, + 0xd8, 0xe7, 0x30, 0xa4, 0xa3, 0x30, 0xe5, 0x32, 0x51, 0xd3, 0x4c, 0xc8, 0xa7, 0x9a, 0xaa, 0x92, + 0x66, 0xde, 0xb0, 0xef, 0xa3, 0x5a, 0xb4, 0xa0, 0xce, 0xa1, 0xb6, 0x3a, 0x75, 0xaf, 0xd8, 0x9a, + 0x67, 0xb6, 0xe6, 0x75, 0x45, 0x16, 0x9c, 0x52, 0x2e, 0xd0, 0xde, 0x42, 0x37, 0x56, 0x22, 0x18, + 0xd8, 0xce, 0xcf, 0x2a, 0xaa, 0xf6, 0x81, 0xd9, 0xef, 0x2d, 0x74, 0xe9, 0xf7, 0xad, 0x3f, 0xf0, + 0xd6, 0xf8, 0x3d, 0xbd, 0x65, 0x7b, 0x71, 0xba, 0x7f, 0xfd, 0xa9, 0x61, 0xb3, 0x3f, 0x59, 0xe8, + 0xf2, 0xaa, 0x85, 0xee, 0xaf, 0x1b, 0xb1, 0xc2, 0xc4, 0x39, 0xf8, 0x0f, 0x26, 0x33, 0xe2, 0x8f, + 0x16, 0x72, 0x56, 0xec, 0xbd, 0xb7, 0x6e, 0xd6, 0x9f, 0x3d, 0x9c, 0x27, 0xff, 0xee, 0x61, 0x70, + 0x7b, 0xcf, 0x3e, 0x8f, 0x5d, 0xeb, 0x64, 0xec, 0x5a, 0xdf, 0xc6, 0xae, 0xf5, 0x6e, 0xe2, 0x56, + 0x4e, 0x26, 0x6e, 0xe5, 0xcb, 0xc4, 0xad, 0x3c, 0x7f, 0xc8, 0xb8, 0x1e, 0x25, 0x43, 0x0f, 0xcb, + 0xa8, 0xbc, 0x1d, 0xfe, 0x3c, 0xf6, 0xce, 0xec, 0xac, 0xa5, 0x1d, 0xff, 0xe8, 0xf4, 0x6d, 0xd3, + 0x59, 0x4c, 0x61, 0x78, 0x2e, 0xff, 0x49, 0xef, 0xfe, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x48, 0x5a, + 0xaf, 0x54, 0x0c, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1218,7 +1215,7 @@ func (m *MsgSubmitConsumerMisbehaviour) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Misbehaviour == nil { - m.Misbehaviour = &types.Misbehaviour{} + m.Misbehaviour = &types.Any{} } if err := m.Misbehaviour.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err