diff --git a/x/ibc-transfer/handler_test.go b/x/ibc-transfer/handler_test.go index 97153941f5..74afce049d 100644 --- a/x/ibc-transfer/handler_test.go +++ b/x/ibc-transfer/handler_test.go @@ -190,11 +190,11 @@ func (chain *TestChain) CreateClient(client *TestChain) error { ctxTarget := chain.GetContext() // create client - clientState, err := ibctmtypes.Initialize(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header, commitmenttypes.GetSDKSpecs()) if err != nil { return err } - _, err = chain.App.IBCKeeper.ClientKeeper.CreateClient(ctxTarget, clientState, client.Header.ConsensusState()) + _, err = chain.App.IBCKeeper.ClientKeeper.CreateClient(ctxTarget, client.ClientID, clientState, client.Header.ConsensusState()) if err != nil { return err } @@ -259,7 +259,7 @@ func (chain *TestChain) updateClient(client *TestChain) { ctxTarget, client.ClientID, uint64(client.Header.SignedHeader.Header.Height), consensusState, ) chain.App.IBCKeeper.ClientKeeper.SetClientState( - ctxTarget, ibctmtypes.NewClientState(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header, commitmenttypes.GetSDKSpecs()), + ctxTarget, client.ClientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header, commitmenttypes.GetSDKSpecs()), ) // _, _, err := simapp.SignCheckDeliver( diff --git a/x/ibc-transfer/keeper/keeper_test.go b/x/ibc-transfer/keeper/keeper_test.go index 3ce58f0a79..52fd41f040 100644 --- a/x/ibc-transfer/keeper/keeper_test.go +++ b/x/ibc-transfer/keeper/keeper_test.go @@ -165,11 +165,11 @@ func (chain *TestChain) CreateClient(client *TestChain) error { ctxTarget := chain.GetContext() // create client - clientState, err := ibctmtypes.Initialize(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header, commitmenttypes.GetSDKSpecs()) if err != nil { return err } - _, err = chain.App.IBCKeeper.ClientKeeper.CreateClient(ctxTarget, clientState, client.Header.ConsensusState()) + _, err = chain.App.IBCKeeper.ClientKeeper.CreateClient(ctxTarget, client.ClientID, clientState, client.Header.ConsensusState()) if err != nil { return err } @@ -234,7 +234,7 @@ func (chain *TestChain) updateClient(client *TestChain) { ctxTarget, client.ClientID, client.Header.GetHeight(), consensusState, ) chain.App.IBCKeeper.ClientKeeper.SetClientState( - ctxTarget, ibctmtypes.NewClientState(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header, commitmenttypes.GetSDKSpecs()), + ctxTarget, client.ClientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header, commitmenttypes.GetSDKSpecs()), ) // _, _, err := simapp.SignCheckDeliver( diff --git a/x/ibc/02-client/abci.go b/x/ibc/02-client/abci.go index 97982b06b6..e0a02699f0 100644 --- a/x/ibc/02-client/abci.go +++ b/x/ibc/02-client/abci.go @@ -8,13 +8,13 @@ import ( // BeginBlocker updates an existing localhost client with the latest block height. func BeginBlocker(ctx sdk.Context, k keeper.Keeper) { - localhostClient, found := k.GetClientState(ctx, exported.ClientTypeLocalHost) + _, found := k.GetClientState(ctx, exported.ClientTypeLocalHost) if !found { return } // update the localhost client with the latest block height - _, err := k.UpdateClient(ctx, localhostClient.GetID(), nil) + _, err := k.UpdateClient(ctx, exported.ClientTypeLocalHost, nil) if err != nil { panic(err) } diff --git a/x/ibc/02-client/exported/exported.go b/x/ibc/02-client/exported/exported.go index 306ab65a10..aab2b61d03 100644 --- a/x/ibc/02-client/exported/exported.go +++ b/x/ibc/02-client/exported/exported.go @@ -17,7 +17,6 @@ import ( // ClientState defines the required common functions for light clients. type ClientState interface { - GetID() string GetChainID() string ClientType() ClientType GetLatestHeight() uint64 diff --git a/x/ibc/02-client/genesis.go b/x/ibc/02-client/genesis.go index a368fa770e..448a910a88 100644 --- a/x/ibc/02-client/genesis.go +++ b/x/ibc/02-client/genesis.go @@ -12,8 +12,8 @@ import ( // state. func InitGenesis(ctx sdk.Context, k keeper.Keeper, gs types.GenesisState) { for _, client := range gs.Clients { - k.SetClientState(ctx, client) - k.SetClientType(ctx, client.GetID(), client.ClientType()) + k.SetClientState(ctx, client.ClientID, client.ClientState) + k.SetClientType(ctx, client.ClientID, client.ClientState.ClientType()) } for _, cs := range gs.ClientsConsensus { for _, consState := range cs.ConsensusStates { @@ -34,7 +34,7 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, gs types.GenesisState) { // client id is always "localhost" clientState := localhosttypes.NewClientState(ctx.ChainID(), ctx.BlockHeight()) - _, err := k.CreateClient(ctx, clientState, nil) + _, err := k.CreateClient(ctx, exported.ClientTypeLocalHost, clientState, nil) if err != nil { panic(err) } @@ -43,7 +43,7 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, gs types.GenesisState) { // ExportGenesis returns the ibc client submodule's exported genesis. func ExportGenesis(ctx sdk.Context, k keeper.Keeper) types.GenesisState { return types.GenesisState{ - Clients: k.GetAllClients(ctx), + Clients: k.GetAllGenesisClients(ctx), ClientsConsensus: k.GetAllConsensusStates(ctx), CreateLocalhost: true, } diff --git a/x/ibc/02-client/handler.go b/x/ibc/02-client/handler.go index 398f59766b..d270458c5c 100644 --- a/x/ibc/02-client/handler.go +++ b/x/ibc/02-client/handler.go @@ -45,7 +45,7 @@ func HandleMsgCreateClient(ctx sdk.Context, k keeper.Keeper, msg exported.MsgCre } _, err := k.CreateClient( - ctx, clientState, msg.GetConsensusState(), + ctx, msg.GetClientID(), clientState, msg.GetConsensusState(), ) if err != nil { return nil, err diff --git a/x/ibc/02-client/keeper/client.go b/x/ibc/02-client/keeper/client.go index 49e6446d9d..eb40d30d54 100644 --- a/x/ibc/02-client/keeper/client.go +++ b/x/ibc/02-client/keeper/client.go @@ -17,9 +17,8 @@ import ( // // CONTRACT: ClientState was constructed correctly from given initial consensusState func (k Keeper) CreateClient( - ctx sdk.Context, clientState exported.ClientState, consensusState exported.ConsensusState, + ctx sdk.Context, clientID string, clientState exported.ClientState, consensusState exported.ConsensusState, ) (exported.ClientState, error) { - clientID := clientState.GetID() _, found := k.GetClientState(ctx, clientID) if found { return nil, sdkerrors.Wrapf(types.ErrClientExists, "cannot create client with ID %s", clientID) @@ -34,7 +33,7 @@ func (k Keeper) CreateClient( k.SetClientConsensusState(ctx, clientID, consensusState.GetHeight(), consensusState) } - k.SetClientState(ctx, clientState) + k.SetClientState(ctx, clientID, clientState) k.SetClientType(ctx, clientID, clientState.ClientType()) k.Logger(ctx).Info(fmt.Sprintf("client %s created at height %d", clientID, clientState.GetLatestHeight())) @@ -90,7 +89,7 @@ func (k Keeper) UpdateClient(ctx sdk.Context, clientID string, header exported.H return nil, sdkerrors.Wrapf(err, "cannot update client with ID %s", clientID) } - k.SetClientState(ctx, clientState) + k.SetClientState(ctx, clientID, clientState) // we don't set consensus state for localhost client if header != nil && clientType != exported.Localhost { @@ -141,7 +140,7 @@ func (k Keeper) CheckMisbehaviourAndUpdateState(ctx sdk.Context, misbehaviour ex return err } - k.SetClientState(ctx, clientState) + k.SetClientState(ctx, misbehaviour.GetClientID(), clientState) k.Logger(ctx).Info(fmt.Sprintf("client %s frozen due to misbehaviour", misbehaviour.GetClientID())) return nil diff --git a/x/ibc/02-client/keeper/client_test.go b/x/ibc/02-client/keeper/client_test.go index d343be6446..1578910394 100644 --- a/x/ibc/02-client/keeper/client_test.go +++ b/x/ibc/02-client/keeper/client_test.go @@ -38,19 +38,19 @@ func (suite *KeeperTestSuite) TestCreateClient() { i := i if tc.expPanic { suite.Require().Panics(func() { - clientState, err := ibctmtypes.Initialize(tc.clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) suite.Require().NoError(err, "err on client state initialization") - suite.keeper.CreateClient(suite.ctx, clientState, suite.consensusState) + suite.keeper.CreateClient(suite.ctx, tc.clientID, clientState, suite.consensusState) }, "Msg %d didn't panic: %s", i, tc.msg) } else { - clientState, err := ibctmtypes.Initialize(tc.clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) if tc.expPass { suite.Require().NoError(err, "errored on initialization") suite.Require().NotNil(clientState, "valid test case %d failed: %s", i, tc.msg) } // If we were able to initialize clientstate successfully, try persisting it to state if err == nil { - _, err = suite.keeper.CreateClient(suite.ctx, clientState, suite.consensusState) + _, err = suite.keeper.CreateClient(suite.ctx, tc.clientID, clientState, suite.consensusState) } if tc.expPass { @@ -80,11 +80,11 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() { expPass bool }{ {"valid update", func() error { - clientState, err := ibctmtypes.Initialize(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) if err != nil { return err } - _, err = suite.keeper.CreateClient(suite.ctx, clientState, suite.consensusState) + _, err = suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) updateHeader = createValidUpdateFn(suite) return err }, true}, @@ -106,19 +106,19 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() { return nil }, false}, {"frozen client", func() error { - clientState := ibctmtypes.ClientState{FrozenHeight: 1, ID: testClientID, LastHeader: suite.header} - suite.keeper.SetClientState(suite.ctx, clientState) + clientState := ibctmtypes.ClientState{FrozenHeight: 1, LastHeader: suite.header} + suite.keeper.SetClientState(suite.ctx, testClientID, clientState) suite.keeper.SetClientType(suite.ctx, testClientID, exported.Tendermint) updateHeader = createValidUpdateFn(suite) return nil }, false}, {"invalid header", func() error { - clientState, err := ibctmtypes.Initialize(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) if err != nil { return err } - _, err = suite.keeper.CreateClient(suite.ctx, clientState, suite.consensusState) + _, err = suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) if err != nil { return err } @@ -185,7 +185,6 @@ func (suite *KeeperTestSuite) TestUpdateClientLocalhost() { updatedClientState, err := suite.keeper.UpdateClient(suite.ctx, exported.ClientTypeLocalHost, nil) suite.Require().NoError(err, err) - suite.Require().Equal(localhostClient.GetID(), updatedClientState.GetID()) suite.Require().Equal(localhostClient.GetLatestHeight()+1, updatedClientState.GetLatestHeight()) } @@ -229,11 +228,11 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { }, func() error { suite.consensusState.ValidatorSet = bothValSet - clientState, err := ibctmtypes.Initialize(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) if err != nil { return err } - _, err = suite.keeper.CreateClient(suite.ctx, clientState, suite.consensusState) + _, err = suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) return err }, @@ -249,11 +248,11 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { }, func() error { suite.consensusState.ValidatorSet = bothValSet - clientState, err := ibctmtypes.Initialize(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) if err != nil { return err } - _, err = suite.keeper.CreateClient(suite.ctx, clientState, suite.consensusState) + _, err = suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) return err }, @@ -274,8 +273,8 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { ClientID: testClientID, }, func() error { - clientState := ibctmtypes.ClientState{FrozenHeight: 1, ID: testClientID, LastHeader: suite.header} - suite.keeper.SetClientState(suite.ctx, clientState) + clientState := ibctmtypes.ClientState{FrozenHeight: 1, LastHeader: suite.header} + suite.keeper.SetClientState(suite.ctx, testClientID, clientState) return nil }, false, @@ -289,8 +288,8 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { ClientID: testClientID, }, func() error { - clientState := ibctmtypes.ClientState{FrozenHeight: 1, ID: testClientID, LastHeader: suite.header} - suite.keeper.SetClientState(suite.ctx, clientState) + clientState := ibctmtypes.ClientState{FrozenHeight: 1, LastHeader: suite.header} + suite.keeper.SetClientState(suite.ctx, testClientID, clientState) return nil }, false, @@ -304,11 +303,11 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { ClientID: testClientID, }, func() error { - clientState, err := ibctmtypes.Initialize(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) if err != nil { return err } - _, err = suite.keeper.CreateClient(suite.ctx, clientState, suite.consensusState) + _, err = suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) return err }, diff --git a/x/ibc/02-client/keeper/keeper.go b/x/ibc/02-client/keeper/keeper.go index af023cba2b..e568d7d5bf 100644 --- a/x/ibc/02-client/keeper/keeper.go +++ b/x/ibc/02-client/keeper/keeper.go @@ -54,8 +54,8 @@ func (k Keeper) GetClientState(ctx sdk.Context, clientID string) (exported.Clien } // SetClientState sets a particular Client to the store -func (k Keeper) SetClientState(ctx sdk.Context, clientState exported.ClientState) { - store := k.ClientStore(ctx, clientState.GetID()) +func (k Keeper) SetClientState(ctx sdk.Context, clientID string, clientState exported.ClientState) { + store := k.ClientStore(ctx, clientID) bz := k.cdc.MustMarshalBinaryBare(clientState) store.Set(host.KeyClientState(), bz) } @@ -122,6 +122,19 @@ func (k Keeper) IterateConsensusStates(ctx sdk.Context, cb func(clientID string, } } +// GetAllGenesisClients returns all the clients in state with their client ids returned as GenesisClientState +func (k Keeper) GetAllGenesisClients(ctx sdk.Context) (genClients []types.GenesisClientState) { + k.IterateClients(ctx, func(clientID string, cs exported.ClientState) bool { + gc := types.GenesisClientState{ + ClientID: clientID, + ClientState: cs, + } + genClients = append(genClients, gc) + return false + }) + return +} + // GetAllConsensusStates returns all stored client consensus states. // NOTE: non deterministic. func (k Keeper) GetAllConsensusStates(ctx sdk.Context) (clientConsStates []types.ClientConsensusStates) { @@ -209,7 +222,7 @@ func (k Keeper) GetSelfConsensusState(ctx sdk.Context, height uint64) (exported. // IterateClients provides an iterator over all stored light client State // objects. For each State object, cb will be called. If the cb returns true, // the iterator will close and stop. -func (k Keeper) IterateClients(ctx sdk.Context, cb func(exported.ClientState) bool) { +func (k Keeper) IterateClients(ctx sdk.Context, cb func(clientID string, cs exported.ClientState) bool) { store := ctx.KVStore(k.storeKey) iterator := sdk.KVStorePrefixIterator(store, host.KeyClientStorePrefix) @@ -222,7 +235,9 @@ func (k Keeper) IterateClients(ctx sdk.Context, cb func(exported.ClientState) bo var clientState exported.ClientState k.cdc.MustUnmarshalBinaryBare(iterator.Value(), &clientState) - if cb(clientState) { + // key is ibc/{clientid}/clientState + // Thus, keySplit[1] is clientID + if cb(keySplit[1], clientState) { break } } @@ -230,7 +245,7 @@ func (k Keeper) IterateClients(ctx sdk.Context, cb func(exported.ClientState) bo // GetAllClients returns all stored light client State objects. func (k Keeper) GetAllClients(ctx sdk.Context) (states []exported.ClientState) { - k.IterateClients(ctx, func(state exported.ClientState) bool { + k.IterateClients(ctx, func(_ string, state exported.ClientState) bool { states = append(states, state) return false }) diff --git a/x/ibc/02-client/keeper/keeper_test.go b/x/ibc/02-client/keeper/keeper_test.go index 2153a255d5..67d94872f3 100644 --- a/x/ibc/02-client/keeper/keeper_test.go +++ b/x/ibc/02-client/keeper/keeper_test.go @@ -90,8 +90,8 @@ func TestKeeperTestSuite(t *testing.T) { } func (suite *KeeperTestSuite) TestSetClientState() { - clientState := ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()) - suite.keeper.SetClientState(suite.ctx, clientState) + clientState := ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()) + suite.keeper.SetClientState(suite.ctx, testClientID, clientState) retrievedState, found := suite.keeper.GetClientState(suite.ctx, testClientID) suite.Require().True(found, "GetClientState failed") @@ -120,14 +120,17 @@ func (suite *KeeperTestSuite) TestSetClientConsensusState() { } func (suite KeeperTestSuite) TestGetAllClients() { + clientIDs := []string{ + testClientID2, testClientID3, testClientID, + } expClients := []exported.ClientState{ - ibctmtypes.NewClientState(testClientID2, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), - ibctmtypes.NewClientState(testClientID3, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), - ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), } for i := range expClients { - suite.keeper.SetClientState(suite.ctx, expClients[i]) + suite.keeper.SetClientState(suite.ctx, clientIDs[i], expClients[i]) } // add localhost client @@ -140,6 +143,33 @@ func (suite KeeperTestSuite) TestGetAllClients() { suite.Require().Equal(expClients, clients) } +func (suite KeeperTestSuite) TestGetAllGenesisClients() { + clientIDs := []string{ + testClientID2, testClientID3, testClientID, + } + expClients := []exported.ClientState{ + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + } + + expGenClients := make([]types.GenesisClientState, len(expClients)) + + for i := range expClients { + suite.keeper.SetClientState(suite.ctx, clientIDs[i], expClients[i]) + expGenClients[i] = types.NewGenesisClientState(clientIDs[i], expClients[i]) + } + + // add localhost client + localHostClient, found := suite.keeper.GetClientState(suite.ctx, exported.ClientTypeLocalHost) + suite.Require().True(found) + expGenClients = append(expGenClients, types.NewGenesisClientState(exported.ClientTypeLocalHost, localHostClient)) + + genClients := suite.keeper.GetAllGenesisClients(suite.ctx) + + suite.Require().Equal(expGenClients, genClients) +} + func (suite KeeperTestSuite) TestGetConsensusState() { suite.ctx = suite.ctx.WithBlockHeight(10) cases := []struct { @@ -168,10 +198,10 @@ func (suite KeeperTestSuite) TestGetConsensusState() { func (suite KeeperTestSuite) TestConsensusStateHelpers() { // initial setup - clientState, err := ibctmtypes.Initialize(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) suite.Require().NoError(err) - suite.keeper.SetClientState(suite.ctx, clientState) + suite.keeper.SetClientState(suite.ctx, testClientID, clientState) suite.keeper.SetClientConsensusState(suite.ctx, testClientID, testClientHeight, suite.consensusState) nextState := ibctmtypes.ConsensusState{ @@ -186,7 +216,7 @@ func (suite KeeperTestSuite) TestConsensusStateHelpers() { // mock update functionality clientState.LastHeader = header suite.keeper.SetClientConsensusState(suite.ctx, testClientID, testClientHeight+5, nextState) - suite.keeper.SetClientState(suite.ctx, clientState) + suite.keeper.SetClientState(suite.ctx, testClientID, clientState) latest, ok := suite.keeper.GetLatestClientConsensusState(suite.ctx, testClientID) // recalculate cached totalVotingPower for equality check diff --git a/x/ibc/02-client/simulation/decoder_test.go b/x/ibc/02-client/simulation/decoder_test.go index fed0cc74f8..3ed65399b5 100644 --- a/x/ibc/02-client/simulation/decoder_test.go +++ b/x/ibc/02-client/simulation/decoder_test.go @@ -21,7 +21,6 @@ func TestDecodeStore(t *testing.T) { clientID := "clientidone" clientState := ibctmtypes.ClientState{ - ID: clientID, FrozenHeight: 10, } diff --git a/x/ibc/02-client/types/genesis.go b/x/ibc/02-client/types/genesis.go index 74a584f103..cecdf6a8c8 100644 --- a/x/ibc/02-client/types/genesis.go +++ b/x/ibc/02-client/types/genesis.go @@ -7,6 +7,18 @@ import ( host "github.com/cosmos/cosmos-sdk/x/ibc/24-host" ) +type GenesisClientState struct { + ClientID string `json:"client_id" yaml:"client_id"` + ClientState exported.ClientState `json:"client_state" yaml:"client_state"` +} + +func NewGenesisClientState(id string, cs exported.ClientState) GenesisClientState { + return GenesisClientState{ + ClientID: id, + ClientState: cs, + } +} + // ClientConsensusStates defines all the stored consensus states for a given client. type ClientConsensusStates struct { ClientID string `json:"client_id" yaml:"client_id"` @@ -23,14 +35,14 @@ func NewClientConsensusStates(id string, states []exported.ConsensusState) Clien // GenesisState defines the ibc client submodule's genesis state. type GenesisState struct { - Clients []exported.ClientState `json:"clients" yaml:"clients"` + Clients []GenesisClientState `json:"clients" yaml:"clients"` ClientsConsensus []ClientConsensusStates `json:"clients_consensus" yaml:"clients_consensus"` CreateLocalhost bool `json:"create_localhost" yaml:"create_localhost"` } // NewGenesisState creates a GenesisState instance. func NewGenesisState( - clients []exported.ClientState, clientsConsensus []ClientConsensusStates, createLocalhost bool, + clients []GenesisClientState, clientsConsensus []ClientConsensusStates, createLocalhost bool, ) GenesisState { return GenesisState{ Clients: clients, @@ -42,7 +54,7 @@ func NewGenesisState( // DefaultGenesisState returns the ibc client submodule's default genesis state. func DefaultGenesisState() GenesisState { return GenesisState{ - Clients: []exported.ClientState{}, + Clients: []GenesisClientState{}, ClientsConsensus: []ClientConsensusStates{}, CreateLocalhost: true, } @@ -52,7 +64,10 @@ func DefaultGenesisState() GenesisState { // failure. func (gs GenesisState) Validate() error { for i, client := range gs.Clients { - if err := client.Validate(); err != nil { + if err := host.ClientIdentifierValidator(client.ClientID); err != nil { + return fmt.Errorf("invalid client consensus state identifier %s index %d: %w", client.ClientID, i, err) + } + if err := client.ClientState.Validate(); err != nil { return fmt.Errorf("invalid client %v index %d: %w", client, i, err) } } diff --git a/x/ibc/02-client/types/genesis_test.go b/x/ibc/02-client/types/genesis_test.go index 55aca40880..0b790b8c38 100644 --- a/x/ibc/02-client/types/genesis_test.go +++ b/x/ibc/02-client/types/genesis_test.go @@ -49,9 +49,13 @@ func TestValidateGenesis(t *testing.T) { { name: "valid genesis", genState: types.NewGenesisState( - []exported.ClientState{ - ibctmtypes.NewClientState(clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), - localhosttypes.NewClientState("chaindID", 10), + []types.GenesisClientState{ + types.NewGenesisClientState( + clientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), + ), + types.NewGenesisClientState( + exported.ClientTypeLocalHost, localhosttypes.NewClientState("chainID", 10), + ), }, []types.ClientConsensusStates{ { @@ -67,12 +71,40 @@ func TestValidateGenesis(t *testing.T) { ), expPass: true, }, + { + name: "invalid clientid", + genState: types.NewGenesisState( + []types.GenesisClientState{ + types.NewGenesisClientState( + "/~@$*", ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), + ), + types.NewGenesisClientState( + exported.ClientTypeLocalHost, localhosttypes.NewClientState("chainID", 10), + ), + }, + []types.ClientConsensusStates{ + { + clientID, + []exported.ConsensusState{ + ibctmtypes.NewConsensusState( + header.Time, commitmenttypes.NewMerkleRoot(header.AppHash), header.GetHeight(), header.ValidatorSet, + ), + }, + }, + }, + true, + ), + expPass: false, + }, + { name: "invalid client", genState: types.NewGenesisState( - []exported.ClientState{ - ibctmtypes.NewClientState(clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), - localhosttypes.NewClientState("chaindID", 0), + []types.GenesisClientState{ + types.NewGenesisClientState( + clientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), + ), + types.NewGenesisClientState(exported.ClientTypeLocalHost, localhosttypes.NewClientState("chaindID", 0)), }, nil, true, @@ -82,9 +114,13 @@ func TestValidateGenesis(t *testing.T) { { name: "invalid consensus state", genState: types.NewGenesisState( - []exported.ClientState{ - ibctmtypes.NewClientState(clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), - localhosttypes.NewClientState("chaindID", 10), + []types.GenesisClientState{ + types.NewGenesisClientState( + clientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), + ), + types.NewGenesisClientState( + exported.ClientTypeLocalHost, localhosttypes.NewClientState("chaindID", 10), + ), }, []types.ClientConsensusStates{ { @@ -103,9 +139,13 @@ func TestValidateGenesis(t *testing.T) { { name: "invalid consensus state", genState: types.NewGenesisState( - []exported.ClientState{ - ibctmtypes.NewClientState(clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), - localhosttypes.NewClientState("chaindID", 10), + []types.GenesisClientState{ + types.NewGenesisClientState( + clientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), + ), + types.NewGenesisClientState( + exported.ClientTypeLocalHost, localhosttypes.NewClientState("chaindID", 10), + ), }, []types.ClientConsensusStates{ types.NewClientConsensusStates( diff --git a/x/ibc/03-connection/keeper/keeper.go b/x/ibc/03-connection/keeper/keeper.go index 1c709f83da..85abbf7455 100644 --- a/x/ibc/03-connection/keeper/keeper.go +++ b/x/ibc/03-connection/keeper/keeper.go @@ -113,13 +113,13 @@ func (k Keeper) SetClientConnectionPaths(ctx sdk.Context, clientID string, paths // no paths are stored. func (k Keeper) GetAllClientConnectionPaths(ctx sdk.Context) []types.ConnectionPaths { var allConnectionPaths []types.ConnectionPaths - k.clientKeeper.IterateClients(ctx, func(cs clientexported.ClientState) bool { - paths, found := k.GetClientConnectionPaths(ctx, cs.GetID()) + k.clientKeeper.IterateClients(ctx, func(clientID string, cs clientexported.ClientState) bool { + paths, found := k.GetClientConnectionPaths(ctx, clientID) if !found { // continue when connection handshake is not initialized return false } - connPaths := types.NewConnectionPaths(cs.GetID(), paths) + connPaths := types.NewConnectionPaths(clientID, paths) allConnectionPaths = append(allConnectionPaths, connPaths) return false }) diff --git a/x/ibc/03-connection/types/expected_keepers.go b/x/ibc/03-connection/types/expected_keepers.go index 0d39a3df7e..122596808d 100644 --- a/x/ibc/03-connection/types/expected_keepers.go +++ b/x/ibc/03-connection/types/expected_keepers.go @@ -10,6 +10,6 @@ type ClientKeeper interface { GetClientState(ctx sdk.Context, clientID string) (clientexported.ClientState, bool) GetClientConsensusState(ctx sdk.Context, clientID string, height uint64) (clientexported.ConsensusState, bool) GetSelfConsensusState(ctx sdk.Context, height uint64) (clientexported.ConsensusState, bool) - IterateClients(ctx sdk.Context, cb func(clientexported.ClientState) bool) + IterateClients(ctx sdk.Context, cb func(string, clientexported.ClientState) bool) ClientStore(ctx sdk.Context, clientID string) sdk.KVStore } diff --git a/x/ibc/07-tendermint/misbehaviour_test.go b/x/ibc/07-tendermint/misbehaviour_test.go index 5cd54baa66..a207cc89e8 100644 --- a/x/ibc/07-tendermint/misbehaviour_test.go +++ b/x/ibc/07-tendermint/misbehaviour_test.go @@ -54,7 +54,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }{ { "valid misbehavior evidence", - ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -69,7 +69,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "valid misbehavior at height greater than last consensusState", - ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Height: height - 1, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -84,7 +84,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "consensus state's valset hash different from evidence should still pass", - ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Height: height - 1, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: suite.valSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -129,7 +129,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "invalid tendermint consensus state", - ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), nil, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners), @@ -144,7 +144,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "invalid tendermint misbehaviour evidence", - ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, nil, simapp.DefaultConsensusParams, @@ -154,7 +154,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "rejected misbehaviour due to expired age", - ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -169,7 +169,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "provided height ≠ header height", - ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -184,7 +184,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "unbonding period expired", - ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: time.Time{}, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -199,7 +199,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "first valset has too much change", - ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners), @@ -214,7 +214,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "second valset has too much change", - ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -229,7 +229,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "both valsets have too much change", - ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners), diff --git a/x/ibc/07-tendermint/types/client_state.go b/x/ibc/07-tendermint/types/client_state.go index df4c58eb8a..9b5bee8f79 100644 --- a/x/ibc/07-tendermint/types/client_state.go +++ b/x/ibc/07-tendermint/types/client_state.go @@ -26,9 +26,6 @@ var _ clientexported.ClientState = ClientState{} // ClientState from Tendermint tracks the current validator set, latest height, // and a possible frozen height. type ClientState struct { - // Client ID - ID string `json:"id" yaml:"id"` - TrustLevel tmmath.Fraction `json:"trust_level" yaml:"trust_level"` // Duration of the period since the LastestTimestamp during which the @@ -54,7 +51,7 @@ type ClientState struct { // InitializeFromMsg creates a tendermint client state from a CreateClientMsg func InitializeFromMsg(msg *MsgCreateClient) (ClientState, error) { return Initialize( - msg.GetClientID(), msg.TrustLevel, + msg.TrustLevel, msg.TrustingPeriod, msg.UnbondingPeriod, msg.MaxClockDrift, msg.Header, msg.ProofSpecs, ) @@ -63,23 +60,22 @@ func InitializeFromMsg(msg *MsgCreateClient) (ClientState, error) { // Initialize creates a client state and validates its contents, checking that // the provided consensus state is from the same client type. func Initialize( - id string, trustLevel tmmath.Fraction, + trustLevel tmmath.Fraction, trustingPeriod, ubdPeriod, maxClockDrift time.Duration, header Header, specs []*ics23.ProofSpec, ) (ClientState, error) { - clientState := NewClientState(id, trustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, specs) + clientState := NewClientState(trustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, specs) return clientState, nil } // NewClientState creates a new ClientState instance func NewClientState( - id string, trustLevel tmmath.Fraction, + trustLevel tmmath.Fraction, trustingPeriod, ubdPeriod, maxClockDrift time.Duration, header Header, specs []*ics23.ProofSpec, ) ClientState { return ClientState{ - ID: id, TrustLevel: trustLevel, TrustingPeriod: trustingPeriod, UnbondingPeriod: ubdPeriod, @@ -90,11 +86,6 @@ func NewClientState( } } -// GetID returns the tendermint client state identifier. -func (cs ClientState) GetID() string { - return cs.ID -} - // GetChainID returns the chain-id from the last header func (cs ClientState) GetChainID() string { if cs.LastHeader.SignedHeader.Header == nil { @@ -125,9 +116,6 @@ func (cs ClientState) IsFrozen() bool { // Validate performs a basic validation of the client state fields. func (cs ClientState) Validate() error { - if err := host.ClientIdentifierValidator(cs.ID); err != nil { - return err - } if err := lite.ValidateTrustLevel(cs.TrustLevel); err != nil { return err } @@ -420,7 +408,7 @@ func sanitizeVerificationArgs( if cs.GetLatestHeight() < height { return commitmenttypes.MerkleProof{}, sdkerrors.Wrapf( sdkerrors.ErrInvalidHeight, - "client state (%s) height < proof height (%d < %d)", cs.ID, cs.GetLatestHeight(), height, + "client state height < proof height (%d < %d)", cs.GetLatestHeight(), height, ) } diff --git a/x/ibc/07-tendermint/types/client_state_test.go b/x/ibc/07-tendermint/types/client_state_test.go index e17ef89b7c..1175e8072d 100644 --- a/x/ibc/07-tendermint/types/client_state_test.go +++ b/x/ibc/07-tendermint/types/client_state_test.go @@ -28,52 +28,47 @@ func (suite *TendermintTestSuite) TestValidate() { }{ { name: "valid client", - clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), expPass: true, }, - { - name: "invalid client id", - clientState: ibctmtypes.NewClientState("(testClientID)", lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), - expPass: false, - }, { name: "invalid trust level", - clientState: ibctmtypes.NewClientState(testClientID, tmmath.Fraction{Numerator: 0, Denominator: 1}, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(tmmath.Fraction{Numerator: 0, Denominator: 1}, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "invalid trusting period", - clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "invalid unbonding period", - clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "invalid max clock drift", - clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, 0, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, 0, suite.header, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "invalid header", - clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "trusting period not less than unbonding period", - clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "proof specs is nil", - clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, suite.header, nil), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, suite.header, nil), expPass: false, }, { name: "proof specs contains nil", - clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, suite.header, []*ics23.ProofSpec{ics23.TendermintSpec, nil}), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, suite.header, []*ics23.ProofSpec{ics23.TendermintSpec, nil}), expPass: false, }, } @@ -100,7 +95,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() { // FIXME: uncomment // { // name: "successful verification", - // clientState: ibctmtypes.NewClientState(chainID, chainID, height, commitmenttypes.GetSDKSpecs()), + // clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), // consensusState: ibctmtypes.ConsensusState{ // Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), // }, @@ -109,7 +104,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -118,7 +113,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -127,7 +122,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() { }, { name: "client is frozen", - clientState: ibctmtypes.ClientState{ID: chainID, LastHeader: suite.header, FrozenHeight: height - 1}, + clientState: ibctmtypes.ClientState{LastHeader: suite.header, FrozenHeight: height - 1}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -136,7 +131,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), ValidatorSet: suite.valSet, @@ -188,7 +183,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), connection: conn, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -198,7 +193,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), connection: conn, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -208,7 +203,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() { }, { name: "client is frozen", - clientState: ibctmtypes.ClientState{ID: chainID, LastHeader: suite.header, FrozenHeight: height - 1}, + clientState: ibctmtypes.ClientState{LastHeader: suite.header, FrozenHeight: height - 1}, connection: conn, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -218,7 +213,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), connection: conn, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -271,7 +266,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), channel: ch, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -281,7 +276,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), channel: ch, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -291,7 +286,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() { }, { name: "client is frozen", - clientState: ibctmtypes.ClientState{ID: chainID, LastHeader: suite.header, FrozenHeight: height - 1}, + clientState: ibctmtypes.ClientState{LastHeader: suite.header, FrozenHeight: height - 1}, channel: ch, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -301,7 +296,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), channel: ch, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -351,7 +346,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), commitment: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -361,7 +356,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), commitment: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -371,7 +366,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() { }, { name: "client is frozen", - clientState: ibctmtypes.ClientState{ID: chainID, LastHeader: suite.header, FrozenHeight: height - 1}, + clientState: ibctmtypes.ClientState{LastHeader: suite.header, FrozenHeight: height - 1}, commitment: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -381,7 +376,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), commitment: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -421,7 +416,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() { // FIXME: uncomment // { // name: "successful verification", - // clientState: ibctmtypes.NewClientState(chainID, chainID, height, commitmenttypes.GetSDKSpecs()), + // clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), // connection: conn, // consensusState: ibctmtypes.ConsensusState{ // Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -431,7 +426,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ack: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -441,7 +436,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ack: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -451,7 +446,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() { }, { name: "client is frozen", - clientState: ibctmtypes.ClientState{ID: chainID, LastHeader: suite.header, FrozenHeight: height - 1}, + clientState: ibctmtypes.ClientState{LastHeader: suite.header, FrozenHeight: height - 1}, ack: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -461,7 +456,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ack: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -510,7 +505,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -519,7 +514,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -528,7 +523,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() { }, { name: "client is frozen", - clientState: ibctmtypes.ClientState{ID: chainID, LastHeader: suite.header, FrozenHeight: height - 1}, + clientState: ibctmtypes.ClientState{LastHeader: suite.header, FrozenHeight: height - 1}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -537,7 +532,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), ValidatorSet: suite.valSet, @@ -575,7 +570,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() { // FIXME: uncomment // { // name: "successful verification", - // clientState: ibctmtypes.NewClientState(chainID, chainID, height, commitmenttypes.GetSDKSpecs()), + // clientState: ibctmtypes.NewClientState(chainID, height, commitmenttypes.GetSDKSpecs()), // connection: conn, // consensusState: ibctmtypes.ConsensusState{ // Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -585,7 +580,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -594,7 +589,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -603,7 +598,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() { }, { name: "client is frozen", - clientState: ibctmtypes.ClientState{ID: chainID, LastHeader: suite.header, FrozenHeight: height - 1}, + clientState: ibctmtypes.ClientState{LastHeader: suite.header, FrozenHeight: height - 1}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -612,7 +607,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), ValidatorSet: suite.valSet, diff --git a/x/ibc/07-tendermint/update_test.go b/x/ibc/07-tendermint/update_test.go index c2c48e135f..2b21ed0896 100644 --- a/x/ibc/07-tendermint/update_test.go +++ b/x/ibc/07-tendermint/update_test.go @@ -54,7 +54,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "successful update with next height and same validator set", setup: func() { - clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers) currentTime = suite.now }, @@ -63,7 +63,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "successful update with future height and different validator set", setup: func() { - clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+5, suite.headerTime, bothValSet, bothSigners) currentTime = suite.now }, @@ -72,7 +72,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "unsuccessful update with next height: update header mismatches nextValSetHash", setup: func() { - clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, bothValSet, bothSigners) currentTime = suite.now }, @@ -81,7 +81,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "unsuccessful update with future height: too much change in validator set", setup: func() { - clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+5, suite.headerTime, altValSet, altSigners) currentTime = suite.now }, @@ -90,7 +90,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "unsuccessful update: trusting period has passed since last client timestamp", setup: func() { - clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers) // make current time pass trusting period from last timestamp on clientstate currentTime = suite.now.Add(ubdPeriod) @@ -100,7 +100,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "unsuccessful update: header timestamp is past current timestamp", setup: func() { - clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.now.Add(time.Minute), suite.valSet, signers) currentTime = suite.now }, @@ -109,7 +109,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "unsuccessful update: header timestamp is not past last client timestamp", setup: func() { - clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.clientTime, suite.valSet, signers) currentTime = suite.now }, @@ -118,7 +118,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "header basic validation failed", setup: func() { - clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers) // cause new header to fail validatebasic by changing commit height to mismatch header height newHeader.SignedHeader.Commit.Height = height - 1 @@ -129,7 +129,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "header height < latest client height", setup: func() { - clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) // Make new header at height less than latest client state newHeader = ibctmtypes.CreateTestHeader(chainID, height-1, suite.headerTime, suite.valSet, signers) currentTime = suite.now diff --git a/x/ibc/09-localhost/types/client_state.go b/x/ibc/09-localhost/types/client_state.go index 9fc686e91c..eba3e63f74 100644 --- a/x/ibc/09-localhost/types/client_state.go +++ b/x/ibc/09-localhost/types/client_state.go @@ -3,7 +3,6 @@ package types import ( "bytes" "encoding/binary" - "fmt" "strings" ics23 "github.com/confio/ics23/go" @@ -26,7 +25,6 @@ var _ clientexported.ClientState = ClientState{} // ClientState requires (read-only) access to keys outside the client prefix. type ClientState struct { - ID string `json:"id" yaml:"id"` ChainID string `json:"chain_id" yaml:"chain_id"` Height int64 `json:"height" yaml:"height"` } @@ -34,17 +32,11 @@ type ClientState struct { // NewClientState creates a new ClientState instance func NewClientState(chainID string, height int64) ClientState { return ClientState{ - ID: clientexported.Localhost.String(), ChainID: chainID, Height: height, } } -// GetID returns the loop-back client state identifier. -func (cs ClientState) GetID() string { - return cs.ID -} - // GetChainID returns an empty string func (cs ClientState) GetChainID() string { return cs.ChainID @@ -73,7 +65,7 @@ func (cs ClientState) Validate() error { if cs.Height <= 0 { return sdkerrors.Wrapf(sdkerrors.ErrInvalidHeight, "height must be positive: %d", cs.Height) } - return host.ClientIdentifierValidator(cs.ID) + return nil } // GetProofSpecs returns nil since localhost does not have to verify proofs @@ -97,7 +89,7 @@ func (cs ClientState) VerifyClientConsensusState( _ []byte, consensusState clientexported.ConsensusState, ) error { - path, err := commitmenttypes.ApplyPrefix(prefix, consensusStatePath(cs.GetID())) + path, err := commitmenttypes.ApplyPrefix(prefix, clientexported.ClientTypeLocalHost) if err != nil { return err } @@ -327,9 +319,3 @@ func (cs ClientState) VerifyNextSequenceRecv( return nil } - -// consensusStatePath takes an Identifier and returns a Path under which to -// store the consensus state of a client. -func consensusStatePath(clientID string) string { - return fmt.Sprintf("consensusState/%s", clientID) -} diff --git a/x/ibc/genesis_test.go b/x/ibc/genesis_test.go index 3814884425..48fc7d1296 100644 --- a/x/ibc/genesis_test.go +++ b/x/ibc/genesis_test.go @@ -30,9 +30,13 @@ func (suite *IBCTestSuite) TestValidateGenesis() { name: "valid genesis", genState: types.GenesisState{ ClientGenesis: clienttypes.NewGenesisState( - []exported.ClientState{ - ibctmtypes.NewClientState(clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), - localhosttypes.NewClientState("chaindID", 10), + []clienttypes.GenesisClientState{ + clienttypes.NewGenesisClientState( + clientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ), + clienttypes.NewGenesisClientState( + exported.ClientTypeLocalHost, localhosttypes.NewClientState("chaindID", 10), + ), }, []clienttypes.ClientConsensusStates{ clienttypes.NewClientConsensusStates( @@ -86,9 +90,13 @@ func (suite *IBCTestSuite) TestValidateGenesis() { name: "invalid client genesis", genState: types.GenesisState{ ClientGenesis: clienttypes.NewGenesisState( - []exported.ClientState{ - ibctmtypes.NewClientState(clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), - localhosttypes.NewClientState("(chaindID)", 0), + []clienttypes.GenesisClientState{ + clienttypes.NewGenesisClientState( + clientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ), + clienttypes.NewGenesisClientState( + exported.ClientTypeLocalHost, localhosttypes.NewClientState("(chaindID)", 0), + ), }, nil, false, diff --git a/x/ibc/simulation/decoder_test.go b/x/ibc/simulation/decoder_test.go index 0dc926d142..df6684360a 100644 --- a/x/ibc/simulation/decoder_test.go +++ b/x/ibc/simulation/decoder_test.go @@ -28,7 +28,6 @@ func TestDecodeStore(t *testing.T) { portID := "portidone" clientState := ibctmtypes.ClientState{ - ID: clientID, FrozenHeight: 10, } connection := connectiontypes.ConnectionEnd{ diff --git a/x/ibc/simulation/genesis_test.go b/x/ibc/simulation/genesis_test.go index 503f6c6012..ccd2e5fc62 100644 --- a/x/ibc/simulation/genesis_test.go +++ b/x/ibc/simulation/genesis_test.go @@ -53,25 +53,3 @@ func TestRandomizedGenState(t *testing.T) { // or a bug.) } - -// TestRandomizedGenState tests the execution of RandomizedGenState -// without registering the IBC client interfaces and types. -// We expect the test to panic. -func TestRandomizedGenState1(t *testing.T) { - cdc := codec.New() - s := rand.NewSource(1) - r := rand.New(s) - - simState := module.SimulationState{ - AppParams: make(simtypes.AppParams), - Cdc: cdc, - Rand: r, - NumBonded: 3, - Accounts: simtypes.RandomAccounts(r, 3), - InitialStake: 1000, - GenState: make(map[string]json.RawMessage), - } - - require.Panicsf(t, func() { simulation.RandomizedGenState(&simState) }, "failed to marshal JSON: Unregistered interface exported.ClientState") - -}