Remove ID from ClientState (#6823)
* remove id from clients, build works * fix client state tests * fix tests * address @fedekunze review * Apply suggestions from code review Co-authored-by: colin axner <25233464+colin-axner@users.noreply.github.com> * lint * remove commented-out test case * Update x/ibc/02-client/keeper/keeper_test.go Co-authored-by: colin axner <25233464+colin-axner@users.noreply.github.com> Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Co-authored-by: colin axner <25233464+colin-axner@users.noreply.github.com>
This commit is contained in:
parent
e9534b0935
commit
5676e7293f
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
},
|
||||
|
|
|
@ -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
|
||||
})
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -21,7 +21,6 @@ func TestDecodeStore(t *testing.T) {
|
|||
clientID := "clientidone"
|
||||
|
||||
clientState := ibctmtypes.ClientState{
|
||||
ID: clientID,
|
||||
FrozenHeight: 10,
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
})
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -28,7 +28,6 @@ func TestDecodeStore(t *testing.T) {
|
|||
portID := "portidone"
|
||||
|
||||
clientState := ibctmtypes.ClientState{
|
||||
ID: clientID,
|
||||
FrozenHeight: 10,
|
||||
}
|
||||
connection := connectiontypes.ConnectionEnd{
|
||||
|
|
|
@ -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")
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue