ibc/07-tendermint: variable trust-level (#6206)
* ibc/07-tendermint: variable trust-level * update client state and tests * fix tests * address comments from review * cli: define trust-level as flag
This commit is contained in:
parent
b93300288e
commit
a08aa41213
|
@ -5,6 +5,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
|
"github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
|
||||||
|
@ -37,12 +38,12 @@ func (suite *KeeperTestSuite) TestCreateClient() {
|
||||||
i := i
|
i := i
|
||||||
if tc.expPanic {
|
if tc.expPanic {
|
||||||
suite.Require().Panics(func() {
|
suite.Require().Panics(func() {
|
||||||
clientState, err := ibctmtypes.Initialize(tc.clientID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState, err := ibctmtypes.Initialize(tc.clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
suite.Require().NoError(err, "err on client state initialization")
|
suite.Require().NoError(err, "err on client state initialization")
|
||||||
suite.keeper.CreateClient(suite.ctx, clientState, suite.consensusState)
|
suite.keeper.CreateClient(suite.ctx, clientState, suite.consensusState)
|
||||||
}, "Msg %d didn't panic: %s", i, tc.msg)
|
}, "Msg %d didn't panic: %s", i, tc.msg)
|
||||||
} else {
|
} else {
|
||||||
clientState, err := ibctmtypes.Initialize(tc.clientID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState, err := ibctmtypes.Initialize(tc.clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
if tc.expPass {
|
if tc.expPass {
|
||||||
suite.Require().NoError(err, "errored on initialization")
|
suite.Require().NoError(err, "errored on initialization")
|
||||||
suite.Require().NotNil(clientState, "valid test case %d failed: %s", i, tc.msg)
|
suite.Require().NotNil(clientState, "valid test case %d failed: %s", i, tc.msg)
|
||||||
|
@ -79,7 +80,7 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() {
|
||||||
expPass bool
|
expPass bool
|
||||||
}{
|
}{
|
||||||
{"valid update", func() error {
|
{"valid update", func() error {
|
||||||
clientState, err := ibctmtypes.Initialize(testClientID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState, err := ibctmtypes.Initialize(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -113,7 +114,7 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() {
|
||||||
return nil
|
return nil
|
||||||
}, false},
|
}, false},
|
||||||
{"invalid header", func() error {
|
{"invalid header", func() error {
|
||||||
clientState, err := ibctmtypes.Initialize(testClientID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState, err := ibctmtypes.Initialize(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -228,7 +229,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
|
||||||
},
|
},
|
||||||
func() error {
|
func() error {
|
||||||
suite.consensusState.ValidatorSet = bothValSet
|
suite.consensusState.ValidatorSet = bothValSet
|
||||||
clientState, err := ibctmtypes.Initialize(testClientID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState, err := ibctmtypes.Initialize(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -248,7 +249,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
|
||||||
},
|
},
|
||||||
func() error {
|
func() error {
|
||||||
suite.consensusState.ValidatorSet = bothValSet
|
suite.consensusState.ValidatorSet = bothValSet
|
||||||
clientState, err := ibctmtypes.Initialize(testClientID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState, err := ibctmtypes.Initialize(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -303,7 +304,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
|
||||||
ClientID: testClientID,
|
ClientID: testClientID,
|
||||||
},
|
},
|
||||||
func() error {
|
func() error {
|
||||||
clientState, err := ibctmtypes.Initialize(testClientID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState, err := ibctmtypes.Initialize(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
@ -89,7 +90,7 @@ func TestKeeperTestSuite(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *KeeperTestSuite) TestSetClientState() {
|
func (suite *KeeperTestSuite) TestSetClientState() {
|
||||||
clientState := ibctmtypes.NewClientState(testClientID, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{})
|
clientState := ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{})
|
||||||
suite.keeper.SetClientState(suite.ctx, clientState)
|
suite.keeper.SetClientState(suite.ctx, clientState)
|
||||||
|
|
||||||
retrievedState, found := suite.keeper.GetClientState(suite.ctx, testClientID)
|
retrievedState, found := suite.keeper.GetClientState(suite.ctx, testClientID)
|
||||||
|
@ -120,9 +121,9 @@ func (suite *KeeperTestSuite) TestSetClientConsensusState() {
|
||||||
|
|
||||||
func (suite KeeperTestSuite) TestGetAllClients() {
|
func (suite KeeperTestSuite) TestGetAllClients() {
|
||||||
expClients := []exported.ClientState{
|
expClients := []exported.ClientState{
|
||||||
ibctmtypes.NewClientState(testClientID2, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
ibctmtypes.NewClientState(testClientID2, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
||||||
ibctmtypes.NewClientState(testClientID3, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
ibctmtypes.NewClientState(testClientID3, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
||||||
ibctmtypes.NewClientState(testClientID, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range expClients {
|
for i := range expClients {
|
||||||
|
@ -167,7 +168,7 @@ func (suite KeeperTestSuite) TestGetConsensusState() {
|
||||||
|
|
||||||
func (suite KeeperTestSuite) TestConsensusStateHelpers() {
|
func (suite KeeperTestSuite) TestConsensusStateHelpers() {
|
||||||
// initial setup
|
// initial setup
|
||||||
clientState, err := ibctmtypes.Initialize(testClientID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState, err := ibctmtypes.Initialize(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
|
|
||||||
suite.keeper.SetClientState(suite.ctx, clientState)
|
suite.keeper.SetClientState(suite.ctx, clientState)
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
|
"github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
|
||||||
|
@ -49,7 +50,7 @@ func TestValidateGenesis(t *testing.T) {
|
||||||
name: "valid genesis",
|
name: "valid genesis",
|
||||||
genState: types.NewGenesisState(
|
genState: types.NewGenesisState(
|
||||||
[]exported.ClientState{
|
[]exported.ClientState{
|
||||||
ibctmtypes.NewClientState(clientID, trustingPeriod, ubdPeriod, maxClockDrift, header),
|
ibctmtypes.NewClientState(clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header),
|
||||||
localhosttypes.NewClientState("chaindID", 10),
|
localhosttypes.NewClientState("chaindID", 10),
|
||||||
},
|
},
|
||||||
[]types.ClientConsensusStates{
|
[]types.ClientConsensusStates{
|
||||||
|
@ -70,7 +71,7 @@ func TestValidateGenesis(t *testing.T) {
|
||||||
name: "invalid client",
|
name: "invalid client",
|
||||||
genState: types.NewGenesisState(
|
genState: types.NewGenesisState(
|
||||||
[]exported.ClientState{
|
[]exported.ClientState{
|
||||||
ibctmtypes.NewClientState(clientID, trustingPeriod, ubdPeriod, maxClockDrift, header),
|
ibctmtypes.NewClientState(clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header),
|
||||||
localhosttypes.NewClientState("chaindID", 0),
|
localhosttypes.NewClientState("chaindID", 0),
|
||||||
},
|
},
|
||||||
nil,
|
nil,
|
||||||
|
@ -82,7 +83,7 @@ func TestValidateGenesis(t *testing.T) {
|
||||||
name: "invalid consensus state",
|
name: "invalid consensus state",
|
||||||
genState: types.NewGenesisState(
|
genState: types.NewGenesisState(
|
||||||
[]exported.ClientState{
|
[]exported.ClientState{
|
||||||
ibctmtypes.NewClientState(clientID, trustingPeriod, ubdPeriod, maxClockDrift, header),
|
ibctmtypes.NewClientState(clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header),
|
||||||
localhosttypes.NewClientState("chaindID", 10),
|
localhosttypes.NewClientState("chaindID", 10),
|
||||||
},
|
},
|
||||||
[]types.ClientConsensusStates{
|
[]types.ClientConsensusStates{
|
||||||
|
@ -103,7 +104,7 @@ func TestValidateGenesis(t *testing.T) {
|
||||||
name: "invalid consensus state",
|
name: "invalid consensus state",
|
||||||
genState: types.NewGenesisState(
|
genState: types.NewGenesisState(
|
||||||
[]exported.ClientState{
|
[]exported.ClientState{
|
||||||
ibctmtypes.NewClientState(clientID, trustingPeriod, ubdPeriod, maxClockDrift, header),
|
ibctmtypes.NewClientState(clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header),
|
||||||
localhosttypes.NewClientState("chaindID", 10),
|
localhosttypes.NewClientState("chaindID", 10),
|
||||||
},
|
},
|
||||||
[]types.ClientConsensusStates{
|
[]types.ClientConsensusStates{
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
@ -128,9 +129,9 @@ func (suite KeeperTestSuite) TestGetAllConnections() {
|
||||||
|
|
||||||
func (suite KeeperTestSuite) TestGetAllClientConnectionPaths() {
|
func (suite KeeperTestSuite) TestGetAllClientConnectionPaths() {
|
||||||
clients := []clientexported.ClientState{
|
clients := []clientexported.ClientState{
|
||||||
ibctmtypes.NewClientState(testClientIDA, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
ibctmtypes.NewClientState(testClientIDA, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
||||||
ibctmtypes.NewClientState(testClientIDB, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
ibctmtypes.NewClientState(testClientIDB, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
||||||
ibctmtypes.NewClientState(testClientID3, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
ibctmtypes.NewClientState(testClientID3, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range clients {
|
for i := range clients {
|
||||||
|
@ -260,7 +261,7 @@ func (chain *TestChain) CreateClient(client *TestChain) error {
|
||||||
ctxTarget := chain.GetContext()
|
ctxTarget := chain.GetContext()
|
||||||
|
|
||||||
// create client
|
// create client
|
||||||
clientState, err := ibctmtypes.Initialize(client.ClientID, trustingPeriod, ubdPeriod, maxClockDrift, client.Header)
|
clientState, err := ibctmtypes.Initialize(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -336,7 +337,7 @@ func (chain *TestChain) updateClient(client *TestChain) {
|
||||||
ctxTarget, client.ClientID, client.Header.GetHeight(), consensusState,
|
ctxTarget, client.ClientID, client.Header.GetHeight(), consensusState,
|
||||||
)
|
)
|
||||||
chain.App.IBCKeeper.ClientKeeper.SetClientState(
|
chain.App.IBCKeeper.ClientKeeper.SetClientState(
|
||||||
ctxTarget, ibctmtypes.NewClientState(client.ClientID, trustingPeriod, ubdPeriod, maxClockDrift, client.Header),
|
ctxTarget, ibctmtypes.NewClientState(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header),
|
||||||
)
|
)
|
||||||
|
|
||||||
// _, _, err := simapp.SignCheckDeliver(
|
// _, _, err := simapp.SignCheckDeliver(
|
||||||
|
|
|
@ -9,6 +9,7 @@ import (
|
||||||
|
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
@ -316,7 +317,7 @@ func (chain *TestChain) CreateClient(client *TestChain) error {
|
||||||
ctxTarget := chain.GetContext()
|
ctxTarget := chain.GetContext()
|
||||||
|
|
||||||
// create client
|
// create client
|
||||||
clientState, err := ibctmtypes.Initialize(client.ClientID, trustingPeriod, ubdPeriod, maxClockDrift, client.Header)
|
clientState, err := ibctmtypes.Initialize(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -384,7 +385,7 @@ func (chain *TestChain) updateClient(client *TestChain) {
|
||||||
ctxTarget, client.ClientID, client.Header.GetHeight(), consensusState,
|
ctxTarget, client.ClientID, client.Header.GetHeight(), consensusState,
|
||||||
)
|
)
|
||||||
chain.App.IBCKeeper.ClientKeeper.SetClientState(
|
chain.App.IBCKeeper.ClientKeeper.SetClientState(
|
||||||
ctxTarget, ibctmtypes.NewClientState(client.ClientID, trustingPeriod, ubdPeriod, maxClockDrift, client.Header),
|
ctxTarget, ibctmtypes.NewClientState(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header),
|
||||||
)
|
)
|
||||||
|
|
||||||
// _, _, err := simapp.SignCheckDeliver(
|
// _, _, err := simapp.SignCheckDeliver(
|
||||||
|
|
|
@ -4,12 +4,17 @@ import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
|
||||||
|
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/context"
|
"github.com/cosmos/cosmos-sdk/client/context"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
|
@ -22,19 +27,17 @@ import (
|
||||||
ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types"
|
ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const flagTrustLevel = "trust-level"
|
||||||
|
|
||||||
// GetCmdCreateClient defines the command to create a new IBC Client as defined
|
// GetCmdCreateClient defines the command to create a new IBC Client as defined
|
||||||
// in https://github.com/cosmos/ics/tree/master/spec/ics-002-client-semantics#create
|
// in https://github.com/cosmos/ics/tree/master/spec/ics-002-client-semantics#create
|
||||||
func GetCmdCreateClient(cdc *codec.Codec) *cobra.Command {
|
func GetCmdCreateClient(cdc *codec.Codec) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "create [client-id] [path/to/consensus_state.json] [trusting_period] [unbonding_period] [max_clock_drift]",
|
Use: "create [client-id] [path/to/consensus_state.json] [trusting_period] [unbonding_period] [max_clock_drift]",
|
||||||
Short: "create new client with a consensus state",
|
Short: "create new tendermint client",
|
||||||
Long: strings.TrimSpace(fmt.Sprintf(`create new client with a specified identifier and consensus state:
|
Long: "create new tendermint client. Trust level can be a fraction (eg: '1/3') or 'default'",
|
||||||
|
Example: fmt.Sprintf("%s tx ibc client create [client-id] [path/to/consensus_state.json] [trusting_period] [unbonding_period] [max_clock_drift] --trust-level default --from node0 --home ../node0/<app>cli --chain-id $CID", version.ClientName),
|
||||||
Example:
|
Args: cobra.ExactArgs(6),
|
||||||
$ %s tx ibc client create [client-id] [path/to/consensus_state.json] [trusting_period] [unbonding_period] [max_clock_drift] --from node0 --home ../node0/<app>cli --chain-id $CID
|
|
||||||
`, version.ClientName),
|
|
||||||
),
|
|
||||||
Args: cobra.ExactArgs(5),
|
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
inBuf := bufio.NewReader(cmd.InOrStdin())
|
inBuf := bufio.NewReader(cmd.InOrStdin())
|
||||||
txBldr := authtypes.NewTxBuilderFromCLI(inBuf).WithTxEncoder(authclient.GetTxEncoder(cdc))
|
txBldr := authtypes.NewTxBuilderFromCLI(inBuf).WithTxEncoder(authclient.GetTxEncoder(cdc))
|
||||||
|
@ -54,23 +57,39 @@ $ %s tx ibc client create [client-id] [path/to/consensus_state.json] [trusting_p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
trustingPeriod, err := time.ParseDuration(args[2])
|
var (
|
||||||
|
trustLevel tmmath.Fraction
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
lvl := viper.GetString(flagTrustLevel)
|
||||||
|
|
||||||
|
if lvl == "default" {
|
||||||
|
trustLevel = lite.DefaultTrustLevel
|
||||||
|
} else {
|
||||||
|
trustLevel, err = parseFraction(args[2])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trustingPeriod, err := time.ParseDuration(args[3])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
ubdPeriod, err := time.ParseDuration(args[3])
|
ubdPeriod, err := time.ParseDuration(args[4])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
maxClockDrift, err := time.ParseDuration(args[4])
|
maxClockDrift, err := time.ParseDuration(args[5])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := ibctmtypes.NewMsgCreateClient(
|
msg := ibctmtypes.NewMsgCreateClient(
|
||||||
clientID, header, trustingPeriod, ubdPeriod, maxClockDrift, cliCtx.GetFromAddress(),
|
clientID, header, trustLevel, trustingPeriod, ubdPeriod, maxClockDrift, cliCtx.GetFromAddress(),
|
||||||
)
|
)
|
||||||
|
|
||||||
if err := msg.ValidateBasic(); err != nil {
|
if err := msg.ValidateBasic(); err != nil {
|
||||||
|
@ -80,7 +99,7 @@ $ %s tx ibc client create [client-id] [path/to/consensus_state.json] [trusting_p
|
||||||
return authclient.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg})
|
return authclient.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg})
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
cmd.Flags().String(flagTrustLevel, "default", "light client trust level fraction for header updates")
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,3 +189,25 @@ $ %s tx ibc client misbehaviour [path/to/evidence.json] --from node0 --home ../n
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseFraction(fraction string) (tmmath.Fraction, error) {
|
||||||
|
fr := strings.Split(fraction, "/")
|
||||||
|
if len(fr) != 2 || fr[0] == fraction {
|
||||||
|
return tmmath.Fraction{}, fmt.Errorf("fraction must have format 'numerator/denominator' got %s", fraction)
|
||||||
|
}
|
||||||
|
|
||||||
|
numerator, err := strconv.ParseInt(fr[0], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return tmmath.Fraction{}, fmt.Errorf("invalid trust-level numerator: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
denominator, err := strconv.ParseInt(fr[1], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return tmmath.Fraction{}, fmt.Errorf("invalid trust-level denominator: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return tmmath.Fraction{
|
||||||
|
Numerator: numerator,
|
||||||
|
Denominator: denominator,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,8 @@ import (
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
|
||||||
|
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/context"
|
"github.com/cosmos/cosmos-sdk/client/context"
|
||||||
"github.com/cosmos/cosmos-sdk/types/rest"
|
"github.com/cosmos/cosmos-sdk/types/rest"
|
||||||
evidenceexported "github.com/cosmos/cosmos-sdk/x/evidence/exported"
|
evidenceexported "github.com/cosmos/cosmos-sdk/x/evidence/exported"
|
||||||
|
@ -27,7 +29,8 @@ type CreateClientReq struct {
|
||||||
BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"`
|
BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"`
|
||||||
ClientID string `json:"client_id" yaml:"client_id"`
|
ClientID string `json:"client_id" yaml:"client_id"`
|
||||||
ChainID string `json:"chain_id" yaml:"chain_id"`
|
ChainID string `json:"chain_id" yaml:"chain_id"`
|
||||||
Header ibctmtypes.Header `json:"consensus_state" yaml:"consensus_state"`
|
Header ibctmtypes.Header `json:"header" yaml:"header"`
|
||||||
|
TrustLevel tmmath.Fraction `json:"trust_level" yaml:"trust_level"`
|
||||||
TrustingPeriod time.Duration `json:"trusting_period" yaml:"trusting_period"`
|
TrustingPeriod time.Duration `json:"trusting_period" yaml:"trusting_period"`
|
||||||
UnbondingPeriod time.Duration `json:"unbonding_period" yaml:"unbonding_period"`
|
UnbondingPeriod time.Duration `json:"unbonding_period" yaml:"unbonding_period"`
|
||||||
MaxClockDrift time.Duration `json:"max_clock_drift" yaml:"max_clock_drift"`
|
MaxClockDrift time.Duration `json:"max_clock_drift" yaml:"max_clock_drift"`
|
||||||
|
|
|
@ -17,7 +17,7 @@ import (
|
||||||
func registerTxRoutes(cliCtx context.CLIContext, r *mux.Router) {
|
func registerTxRoutes(cliCtx context.CLIContext, r *mux.Router) {
|
||||||
r.HandleFunc("/ibc/clients/tendermint", createClientHandlerFn(cliCtx)).Methods("POST")
|
r.HandleFunc("/ibc/clients/tendermint", createClientHandlerFn(cliCtx)).Methods("POST")
|
||||||
r.HandleFunc(fmt.Sprintf("/ibc/clients/{%s}/update", RestClientID), updateClientHandlerFn(cliCtx)).Methods("POST")
|
r.HandleFunc(fmt.Sprintf("/ibc/clients/{%s}/update", RestClientID), updateClientHandlerFn(cliCtx)).Methods("POST")
|
||||||
r.HandleFunc("/ibc/clients/{%s}/misbehaviour", submitMisbehaviourHandlerFn(cliCtx)).Methods("POST")
|
r.HandleFunc(fmt.Sprintf("/ibc/clients/{%s}/misbehaviour", RestClientID), submitMisbehaviourHandlerFn(cliCtx)).Methods("POST")
|
||||||
}
|
}
|
||||||
|
|
||||||
// createClientHandlerFn implements a create client handler
|
// createClientHandlerFn implements a create client handler
|
||||||
|
@ -50,8 +50,7 @@ func createClientHandlerFn(cliCtx context.CLIContext) http.HandlerFunc {
|
||||||
|
|
||||||
// create the message
|
// create the message
|
||||||
msg := ibctmtypes.NewMsgCreateClient(
|
msg := ibctmtypes.NewMsgCreateClient(
|
||||||
req.ClientID,
|
req.ClientID, req.Header, req.TrustLevel,
|
||||||
req.Header,
|
|
||||||
req.TrustingPeriod, req.UnbondingPeriod, req.MaxClockDrift,
|
req.TrustingPeriod, req.UnbondingPeriod, req.MaxClockDrift,
|
||||||
fromAddr,
|
fromAddr,
|
||||||
)
|
)
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/tendermint/tendermint/crypto/tmhash"
|
"github.com/tendermint/tendermint/crypto/tmhash"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
tendermint "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint"
|
tendermint "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint"
|
||||||
|
@ -48,7 +49,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
"valid misbehavior evidence",
|
"valid misbehavior evidence",
|
||||||
ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||||
ibctmtypes.Evidence{
|
ibctmtypes.Evidence{
|
||||||
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
||||||
|
@ -61,7 +62,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"valid misbehavior at height greater than last consensusState",
|
"valid misbehavior at height greater than last consensusState",
|
||||||
ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
ibctmtypes.ConsensusState{Timestamp: suite.now, Height: height - 1, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
ibctmtypes.ConsensusState{Timestamp: suite.now, Height: height - 1, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||||
ibctmtypes.Evidence{
|
ibctmtypes.Evidence{
|
||||||
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
||||||
|
@ -74,7 +75,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"consensus state's valset hash different from evidence should still pass",
|
"consensus state's valset hash different from evidence should still pass",
|
||||||
ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
ibctmtypes.ConsensusState{Timestamp: suite.now, Height: height - 1, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: suite.valSet},
|
ibctmtypes.ConsensusState{Timestamp: suite.now, Height: height - 1, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: suite.valSet},
|
||||||
ibctmtypes.Evidence{
|
ibctmtypes.Evidence{
|
||||||
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
||||||
|
@ -87,7 +88,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"first valset has too much change",
|
"first valset has too much change",
|
||||||
ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||||
ibctmtypes.Evidence{
|
ibctmtypes.Evidence{
|
||||||
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners),
|
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners),
|
||||||
|
@ -100,7 +101,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"second valset has too much change",
|
"second valset has too much change",
|
||||||
ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||||
ibctmtypes.Evidence{
|
ibctmtypes.Evidence{
|
||||||
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
||||||
|
@ -113,7 +114,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"both valsets have too much change",
|
"both valsets have too much change",
|
||||||
ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||||
ibctmtypes.Evidence{
|
ibctmtypes.Evidence{
|
||||||
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners),
|
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners),
|
||||||
|
|
|
@ -18,6 +18,8 @@ import (
|
||||||
commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types"
|
commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types"
|
||||||
host "github.com/cosmos/cosmos-sdk/x/ibc/24-host"
|
host "github.com/cosmos/cosmos-sdk/x/ibc/24-host"
|
||||||
ibctypes "github.com/cosmos/cosmos-sdk/x/ibc/types"
|
ibctypes "github.com/cosmos/cosmos-sdk/x/ibc/types"
|
||||||
|
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ clientexported.ClientState = ClientState{}
|
var _ clientexported.ClientState = ClientState{}
|
||||||
|
@ -28,6 +30,8 @@ type ClientState struct {
|
||||||
// Client ID
|
// Client ID
|
||||||
ID string `json:"id" yaml:"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
|
// Duration of the period since the LastestTimestamp during which the
|
||||||
// submitted headers are valid for upgrade
|
// submitted headers are valid for upgrade
|
||||||
TrustingPeriod time.Duration `json:"trusting_period" yaml:"trusting_period"`
|
TrustingPeriod time.Duration `json:"trusting_period" yaml:"trusting_period"`
|
||||||
|
@ -49,31 +53,37 @@ type ClientState struct {
|
||||||
// InitializeFromMsg creates a tendermint client state from a CreateClientMsg
|
// InitializeFromMsg creates a tendermint client state from a CreateClientMsg
|
||||||
func InitializeFromMsg(msg MsgCreateClient) (ClientState, error) {
|
func InitializeFromMsg(msg MsgCreateClient) (ClientState, error) {
|
||||||
return Initialize(
|
return Initialize(
|
||||||
msg.GetClientID(), msg.TrustingPeriod, msg.UnbondingPeriod, msg.MaxClockDrift, msg.Header,
|
msg.GetClientID(), msg.TrustLevel,
|
||||||
|
msg.TrustingPeriod, msg.UnbondingPeriod, msg.MaxClockDrift,
|
||||||
|
msg.Header,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize creates a client state and validates its contents, checking that
|
// Initialize creates a client state and validates its contents, checking that
|
||||||
// the provided consensus state is from the same client type.
|
// the provided consensus state is from the same client type.
|
||||||
func Initialize(
|
func Initialize(
|
||||||
id string, trustingPeriod, ubdPeriod, maxClockDrift time.Duration, header Header,
|
id string, trustLevel tmmath.Fraction,
|
||||||
|
trustingPeriod, ubdPeriod, maxClockDrift time.Duration,
|
||||||
|
header Header,
|
||||||
) (ClientState, error) {
|
) (ClientState, error) {
|
||||||
|
|
||||||
if trustingPeriod >= ubdPeriod {
|
if trustingPeriod >= ubdPeriod {
|
||||||
return ClientState{}, errors.New("trusting period should be < unbonding period")
|
return ClientState{}, errors.New("trusting period should be < unbonding period")
|
||||||
}
|
}
|
||||||
|
|
||||||
clientState := NewClientState(id, trustingPeriod, ubdPeriod, maxClockDrift, header)
|
clientState := NewClientState(id, trustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header)
|
||||||
return clientState, nil
|
return clientState, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewClientState creates a new ClientState instance
|
// NewClientState creates a new ClientState instance
|
||||||
func NewClientState(
|
func NewClientState(
|
||||||
id string, trustingPeriod, ubdPeriod, maxClockDrift time.Duration, header Header,
|
id string, trustLevel tmmath.Fraction,
|
||||||
|
trustingPeriod, ubdPeriod, maxClockDrift time.Duration,
|
||||||
|
header Header,
|
||||||
) ClientState {
|
) ClientState {
|
||||||
|
|
||||||
return ClientState{
|
return ClientState{
|
||||||
ID: id,
|
ID: id,
|
||||||
|
TrustLevel: trustLevel,
|
||||||
TrustingPeriod: trustingPeriod,
|
TrustingPeriod: trustingPeriod,
|
||||||
UnbondingPeriod: ubdPeriod,
|
UnbondingPeriod: ubdPeriod,
|
||||||
MaxClockDrift: maxClockDrift,
|
MaxClockDrift: maxClockDrift,
|
||||||
|
@ -120,6 +130,9 @@ func (cs ClientState) Validate() error {
|
||||||
if err := host.DefaultClientIdentifierValidator(cs.ID); err != nil {
|
if err := host.DefaultClientIdentifierValidator(cs.ID); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := lite.ValidateTrustLevel(cs.TrustLevel); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if cs.TrustingPeriod == 0 {
|
if cs.TrustingPeriod == 0 {
|
||||||
return errors.New("trusting period cannot be zero")
|
return errors.New("trusting period cannot be zero")
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,8 @@ import (
|
||||||
ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types"
|
ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types"
|
||||||
commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types"
|
commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types"
|
||||||
ibctypes "github.com/cosmos/cosmos-sdk/x/ibc/types"
|
ibctypes "github.com/cosmos/cosmos-sdk/x/ibc/types"
|
||||||
|
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -25,32 +27,37 @@ func (suite *TendermintTestSuite) TestValidate() {
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "valid client",
|
name: "valid client",
|
||||||
clientState: ibctmtypes.NewClientState(testClientID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
expPass: true,
|
expPass: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "invalid client id",
|
name: "invalid client id",
|
||||||
clientState: ibctmtypes.NewClientState("testClientID", trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState("testClientID", lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
|
expPass: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "invalid trust level",
|
||||||
|
clientState: ibctmtypes.NewClientState(testClientID, tmmath.Fraction{Numerator: 0, Denominator: 1}, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
expPass: false,
|
expPass: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "invalid trusting period",
|
name: "invalid trusting period",
|
||||||
clientState: ibctmtypes.NewClientState(testClientID, 0, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, suite.header),
|
||||||
expPass: false,
|
expPass: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "invalid unbonding period",
|
name: "invalid unbonding period",
|
||||||
clientState: ibctmtypes.NewClientState(testClientID, trustingPeriod, 0, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, suite.header),
|
||||||
expPass: false,
|
expPass: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "invalid max clock drift",
|
name: "invalid max clock drift",
|
||||||
clientState: ibctmtypes.NewClientState(testClientID, trustingPeriod, ubdPeriod, 0, suite.header),
|
clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, 0, suite.header),
|
||||||
expPass: false,
|
expPass: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "invalid header",
|
name: "invalid header",
|
||||||
clientState: ibctmtypes.NewClientState(testClientID, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
clientState: ibctmtypes.NewClientState(testClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}),
|
||||||
expPass: false,
|
expPass: false,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -86,7 +93,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() {
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "ApplyPrefix failed",
|
name: "ApplyPrefix failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
},
|
},
|
||||||
|
@ -95,7 +102,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "latest client height < height",
|
name: "latest client height < height",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
},
|
},
|
||||||
|
@ -113,7 +120,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "proof verification failed",
|
name: "proof verification failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
ValidatorSet: suite.valSet,
|
ValidatorSet: suite.valSet,
|
||||||
|
@ -165,7 +172,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() {
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "ApplyPrefix failed",
|
name: "ApplyPrefix failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
connection: conn,
|
connection: conn,
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
|
@ -175,7 +182,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "latest client height < height",
|
name: "latest client height < height",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
connection: conn,
|
connection: conn,
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
|
@ -195,7 +202,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "proof verification failed",
|
name: "proof verification failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
connection: conn,
|
connection: conn,
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
|
@ -248,7 +255,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() {
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "ApplyPrefix failed",
|
name: "ApplyPrefix failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
channel: ch,
|
channel: ch,
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
|
@ -258,7 +265,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "latest client height < height",
|
name: "latest client height < height",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
channel: ch,
|
channel: ch,
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
|
@ -278,7 +285,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "proof verification failed",
|
name: "proof verification failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
channel: ch,
|
channel: ch,
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
|
@ -328,7 +335,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() {
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "ApplyPrefix failed",
|
name: "ApplyPrefix failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
commitment: []byte{},
|
commitment: []byte{},
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
|
@ -338,7 +345,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "latest client height < height",
|
name: "latest client height < height",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
commitment: []byte{},
|
commitment: []byte{},
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
|
@ -358,7 +365,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "proof verification failed",
|
name: "proof verification failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
commitment: []byte{},
|
commitment: []byte{},
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
|
@ -408,7 +415,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() {
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "ApplyPrefix failed",
|
name: "ApplyPrefix failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
ack: []byte{},
|
ack: []byte{},
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
|
@ -418,7 +425,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "latest client height < height",
|
name: "latest client height < height",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
ack: []byte{},
|
ack: []byte{},
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
|
@ -438,7 +445,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "proof verification failed",
|
name: "proof verification failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
ack: []byte{},
|
ack: []byte{},
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
|
@ -487,7 +494,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() {
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "ApplyPrefix failed",
|
name: "ApplyPrefix failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
},
|
},
|
||||||
|
@ -496,7 +503,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "latest client height < height",
|
name: "latest client height < height",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
},
|
},
|
||||||
|
@ -514,7 +521,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "proof verification failed",
|
name: "proof verification failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
ValidatorSet: suite.valSet,
|
ValidatorSet: suite.valSet,
|
||||||
|
@ -562,7 +569,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() {
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "ApplyPrefix failed",
|
name: "ApplyPrefix failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
},
|
},
|
||||||
|
@ -571,7 +578,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "latest client height < height",
|
name: "latest client height < height",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
},
|
},
|
||||||
|
@ -589,7 +596,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "proof verification failed",
|
name: "proof verification failed",
|
||||||
clientState: ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
consensusState: ibctmtypes.ConsensusState{
|
consensusState: ibctmtypes.ConsensusState{
|
||||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||||
ValidatorSet: suite.valSet,
|
ValidatorSet: suite.valSet,
|
||||||
|
|
|
@ -3,6 +3,9 @@ package types
|
||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
evidenceexported "github.com/cosmos/cosmos-sdk/x/evidence/exported"
|
evidenceexported "github.com/cosmos/cosmos-sdk/x/evidence/exported"
|
||||||
|
@ -30,6 +33,7 @@ var (
|
||||||
type MsgCreateClient struct {
|
type MsgCreateClient struct {
|
||||||
ClientID string `json:"client_id" yaml:"client_id"`
|
ClientID string `json:"client_id" yaml:"client_id"`
|
||||||
Header Header `json:"header" yaml:"header"`
|
Header Header `json:"header" yaml:"header"`
|
||||||
|
TrustLevel tmmath.Fraction `json:"trust_level" yaml:"trust_level"`
|
||||||
TrustingPeriod time.Duration `json:"trusting_period" yaml:"trusting_period"`
|
TrustingPeriod time.Duration `json:"trusting_period" yaml:"trusting_period"`
|
||||||
UnbondingPeriod time.Duration `json:"unbonding_period" yaml:"unbonding_period"`
|
UnbondingPeriod time.Duration `json:"unbonding_period" yaml:"unbonding_period"`
|
||||||
MaxClockDrift time.Duration `json:"max_clock_drift" yaml:"max_clock_drift"`
|
MaxClockDrift time.Duration `json:"max_clock_drift" yaml:"max_clock_drift"`
|
||||||
|
@ -38,13 +42,14 @@ type MsgCreateClient struct {
|
||||||
|
|
||||||
// NewMsgCreateClient creates a new MsgCreateClient instance
|
// NewMsgCreateClient creates a new MsgCreateClient instance
|
||||||
func NewMsgCreateClient(
|
func NewMsgCreateClient(
|
||||||
id string, header Header,
|
id string, header Header, trustLevel tmmath.Fraction,
|
||||||
trustingPeriod, unbondingPeriod, maxClockDrift time.Duration, signer sdk.AccAddress,
|
trustingPeriod, unbondingPeriod, maxClockDrift time.Duration, signer sdk.AccAddress,
|
||||||
) MsgCreateClient {
|
) MsgCreateClient {
|
||||||
|
|
||||||
return MsgCreateClient{
|
return MsgCreateClient{
|
||||||
ClientID: id,
|
ClientID: id,
|
||||||
Header: header,
|
Header: header,
|
||||||
|
TrustLevel: trustLevel,
|
||||||
TrustingPeriod: trustingPeriod,
|
TrustingPeriod: trustingPeriod,
|
||||||
UnbondingPeriod: unbondingPeriod,
|
UnbondingPeriod: unbondingPeriod,
|
||||||
MaxClockDrift: maxClockDrift,
|
MaxClockDrift: maxClockDrift,
|
||||||
|
@ -67,6 +72,9 @@ func (msg MsgCreateClient) ValidateBasic() error {
|
||||||
if msg.TrustingPeriod == 0 {
|
if msg.TrustingPeriod == 0 {
|
||||||
return sdkerrors.Wrap(ErrInvalidTrustingPeriod, "duration cannot be 0")
|
return sdkerrors.Wrap(ErrInvalidTrustingPeriod, "duration cannot be 0")
|
||||||
}
|
}
|
||||||
|
if err := lite.ValidateTrustLevel(msg.TrustLevel); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if msg.UnbondingPeriod == 0 {
|
if msg.UnbondingPeriod == 0 {
|
||||||
return sdkerrors.Wrap(ErrInvalidUnbondingPeriod, "duration cannot be 0")
|
return sdkerrors.Wrap(ErrInvalidUnbondingPeriod, "duration cannot be 0")
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,9 @@ package types_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/tendermint/tendermint/crypto/secp256k1"
|
"github.com/tendermint/tendermint/crypto/secp256k1"
|
||||||
|
"github.com/tendermint/tendermint/libs/math"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
|
"github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
|
||||||
|
@ -11,18 +14,22 @@ import (
|
||||||
func (suite *TendermintTestSuite) TestMsgCreateClientValidateBasic() {
|
func (suite *TendermintTestSuite) TestMsgCreateClientValidateBasic() {
|
||||||
privKey := secp256k1.GenPrivKey()
|
privKey := secp256k1.GenPrivKey()
|
||||||
signer := sdk.AccAddress(privKey.PubKey().Address())
|
signer := sdk.AccAddress(privKey.PubKey().Address())
|
||||||
|
invalidHeader := ibctmtypes.CreateTestHeader(suite.header.ChainID, height, suite.now, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
|
||||||
|
invalidHeader.ValidatorSet = nil
|
||||||
|
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
msg ibctmtypes.MsgCreateClient
|
msg ibctmtypes.MsgCreateClient
|
||||||
expPass bool
|
expPass bool
|
||||||
errMsg string
|
errMsg string
|
||||||
}{
|
}{
|
||||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, trustingPeriod, ubdPeriod, maxClockDrift, signer), true, "success msg should pass"},
|
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, signer), true, "success msg should pass"},
|
||||||
{ibctmtypes.NewMsgCreateClient("BADCHAIN", suite.header, trustingPeriod, ubdPeriod, maxClockDrift, signer), false, "invalid client id passed"},
|
{ibctmtypes.NewMsgCreateClient("BADCHAIN", suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, signer), false, "invalid client id passed"},
|
||||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, 0, ubdPeriod, maxClockDrift, signer), false, "zero trusting period passed"},
|
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, math.Fraction{Numerator: 0, Denominator: 1}, trustingPeriod, ubdPeriod, maxClockDrift, signer), false, "invalid trust level"},
|
||||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, trustingPeriod, 0, maxClockDrift, signer), false, "zero unbonding period passed"},
|
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, signer), false, "zero trusting period passed"},
|
||||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, trustingPeriod, ubdPeriod, maxClockDrift, nil), false, "Empty address passed"},
|
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, signer), false, "zero unbonding period passed"},
|
||||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, ibctmtypes.Header{}, trustingPeriod, ubdPeriod, maxClockDrift, signer), false, "nil header"},
|
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, nil), false, "Empty address passed"},
|
||||||
|
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, ibctmtypes.Header{}, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, signer), false, "nil header"},
|
||||||
|
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, invalidHeader, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, signer), false, "invalid header"},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tc := range cases {
|
for i, tc := range cases {
|
||||||
|
|
|
@ -88,7 +88,7 @@ func checkValidity(
|
||||||
err := lite.Verify(
|
err := lite.Verify(
|
||||||
clientState.GetChainID(), &clientState.LastHeader.SignedHeader,
|
clientState.GetChainID(), &clientState.LastHeader.SignedHeader,
|
||||||
clientState.LastHeader.ValidatorSet, &header.SignedHeader, header.ValidatorSet,
|
clientState.LastHeader.ValidatorSet, &header.SignedHeader, header.ValidatorSet,
|
||||||
clientState.TrustingPeriod, currentTimestamp, clientState.MaxClockDrift, lite.DefaultTrustLevel,
|
clientState.TrustingPeriod, currentTimestamp, clientState.MaxClockDrift, clientState.TrustLevel,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return sdkerrors.Wrap(clienttypes.ErrInvalidHeader, err.Error())
|
return sdkerrors.Wrap(clienttypes.ErrInvalidHeader, err.Error())
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
tendermint "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint"
|
tendermint "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint"
|
||||||
|
@ -53,7 +54,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||||
{
|
{
|
||||||
name: "successful update with next height and same validator set",
|
name: "successful update with next height and same validator set",
|
||||||
setup: func() {
|
setup: func() {
|
||||||
clientState = ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers)
|
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers)
|
||||||
currentTime = suite.now
|
currentTime = suite.now
|
||||||
},
|
},
|
||||||
|
@ -62,7 +63,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||||
{
|
{
|
||||||
name: "successful update with future height and different validator set",
|
name: "successful update with future height and different validator set",
|
||||||
setup: func() {
|
setup: func() {
|
||||||
clientState = ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+5, suite.headerTime, bothValSet, bothSigners)
|
newHeader = ibctmtypes.CreateTestHeader(chainID, height+5, suite.headerTime, bothValSet, bothSigners)
|
||||||
currentTime = suite.now
|
currentTime = suite.now
|
||||||
},
|
},
|
||||||
|
@ -71,7 +72,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||||
{
|
{
|
||||||
name: "unsuccessful update with next height: update header mismatches nextValSetHash",
|
name: "unsuccessful update with next height: update header mismatches nextValSetHash",
|
||||||
setup: func() {
|
setup: func() {
|
||||||
clientState = ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, bothValSet, bothSigners)
|
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, bothValSet, bothSigners)
|
||||||
currentTime = suite.now
|
currentTime = suite.now
|
||||||
},
|
},
|
||||||
|
@ -80,7 +81,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||||
{
|
{
|
||||||
name: "unsuccessful update with future height: too much change in validator set",
|
name: "unsuccessful update with future height: too much change in validator set",
|
||||||
setup: func() {
|
setup: func() {
|
||||||
clientState = ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+5, suite.headerTime, altValSet, altSigners)
|
newHeader = ibctmtypes.CreateTestHeader(chainID, height+5, suite.headerTime, altValSet, altSigners)
|
||||||
currentTime = suite.now
|
currentTime = suite.now
|
||||||
},
|
},
|
||||||
|
@ -89,7 +90,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||||
{
|
{
|
||||||
name: "unsuccessful update: trusting period has passed since last client timestamp",
|
name: "unsuccessful update: trusting period has passed since last client timestamp",
|
||||||
setup: func() {
|
setup: func() {
|
||||||
clientState = ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers)
|
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers)
|
||||||
// make current time pass trusting period from last timestamp on clientstate
|
// make current time pass trusting period from last timestamp on clientstate
|
||||||
currentTime = suite.now.Add(ubdPeriod)
|
currentTime = suite.now.Add(ubdPeriod)
|
||||||
|
@ -99,7 +100,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||||
{
|
{
|
||||||
name: "unsuccessful update: header timestamp is past current timestamp",
|
name: "unsuccessful update: header timestamp is past current timestamp",
|
||||||
setup: func() {
|
setup: func() {
|
||||||
clientState = ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.now.Add(time.Minute), suite.valSet, signers)
|
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.now.Add(time.Minute), suite.valSet, signers)
|
||||||
currentTime = suite.now
|
currentTime = suite.now
|
||||||
},
|
},
|
||||||
|
@ -108,7 +109,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||||
{
|
{
|
||||||
name: "unsuccessful update: header timestamp is not past last client timestamp",
|
name: "unsuccessful update: header timestamp is not past last client timestamp",
|
||||||
setup: func() {
|
setup: func() {
|
||||||
clientState = ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.clientTime, suite.valSet, signers)
|
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.clientTime, suite.valSet, signers)
|
||||||
currentTime = suite.now
|
currentTime = suite.now
|
||||||
},
|
},
|
||||||
|
@ -117,7 +118,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||||
{
|
{
|
||||||
name: "header basic validation failed",
|
name: "header basic validation failed",
|
||||||
setup: func() {
|
setup: func() {
|
||||||
clientState = ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers)
|
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
|
// cause new header to fail validatebasic by changing commit height to mismatch header height
|
||||||
newHeader.SignedHeader.Commit.Height = height - 1
|
newHeader.SignedHeader.Commit.Height = height - 1
|
||||||
|
@ -128,7 +129,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||||
{
|
{
|
||||||
name: "header height < latest client height",
|
name: "header height < latest client height",
|
||||||
setup: func() {
|
setup: func() {
|
||||||
clientState = ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header)
|
||||||
// Make new header at height less than latest client state
|
// Make new header at height less than latest client state
|
||||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height-1, suite.headerTime, suite.valSet, signers)
|
newHeader = ibctmtypes.CreateTestHeader(chainID, height-1, suite.headerTime, suite.valSet, signers)
|
||||||
currentTime = suite.now
|
currentTime = suite.now
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
@ -188,7 +189,7 @@ func (chain *TestChain) CreateClient(client *TestChain) error {
|
||||||
ctxTarget := chain.GetContext()
|
ctxTarget := chain.GetContext()
|
||||||
|
|
||||||
// create client
|
// create client
|
||||||
clientState, err := ibctmtypes.Initialize(client.ClientID, trustingPeriod, ubdPeriod, maxClockDrift, client.Header)
|
clientState, err := ibctmtypes.Initialize(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -257,7 +258,7 @@ func (chain *TestChain) updateClient(client *TestChain) {
|
||||||
ctxTarget, client.ClientID, uint64(client.Header.SignedHeader.Header.Height), consensusState,
|
ctxTarget, client.ClientID, uint64(client.Header.SignedHeader.Header.Height), consensusState,
|
||||||
)
|
)
|
||||||
chain.App.IBCKeeper.ClientKeeper.SetClientState(
|
chain.App.IBCKeeper.ClientKeeper.SetClientState(
|
||||||
ctxTarget, ibctmtypes.NewClientState(client.ClientID, trustingPeriod, ubdPeriod, maxClockDrift, client.Header),
|
ctxTarget, ibctmtypes.NewClientState(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header),
|
||||||
)
|
)
|
||||||
|
|
||||||
// _, _, err := simapp.SignCheckDeliver(
|
// _, _, err := simapp.SignCheckDeliver(
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
"github.com/tendermint/tendermint/crypto"
|
"github.com/tendermint/tendermint/crypto"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
@ -164,7 +165,7 @@ func (chain *TestChain) CreateClient(client *TestChain) error {
|
||||||
ctxTarget := chain.GetContext()
|
ctxTarget := chain.GetContext()
|
||||||
|
|
||||||
// create client
|
// create client
|
||||||
clientState, err := ibctmtypes.Initialize(client.ClientID, trustingPeriod, ubdPeriod, maxClockDrift, client.Header)
|
clientState, err := ibctmtypes.Initialize(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -233,7 +234,7 @@ func (chain *TestChain) updateClient(client *TestChain) {
|
||||||
ctxTarget, client.ClientID, client.Header.GetHeight(), consensusState,
|
ctxTarget, client.ClientID, client.Header.GetHeight(), consensusState,
|
||||||
)
|
)
|
||||||
chain.App.IBCKeeper.ClientKeeper.SetClientState(
|
chain.App.IBCKeeper.ClientKeeper.SetClientState(
|
||||||
ctxTarget, ibctmtypes.NewClientState(client.ClientID, trustingPeriod, ubdPeriod, maxClockDrift, client.Header),
|
ctxTarget, ibctmtypes.NewClientState(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header),
|
||||||
)
|
)
|
||||||
|
|
||||||
// _, _, err := simapp.SignCheckDeliver(
|
// _, _, err := simapp.SignCheckDeliver(
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
|
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
@ -239,7 +240,7 @@ func (chain *TestChain) CreateClient(client *TestChain) error {
|
||||||
ctxTarget := chain.GetContext()
|
ctxTarget := chain.GetContext()
|
||||||
|
|
||||||
// create client
|
// create client
|
||||||
clientState, err := ibctmtypes.Initialize(client.ClientID, trustingPeriod, ubdPeriod, maxClockDrift, client.Header)
|
clientState, err := ibctmtypes.Initialize(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -307,7 +308,7 @@ func (chain *TestChain) updateClient(client *TestChain) {
|
||||||
ctxTarget, client.ClientID, uint64(client.Header.Height-1), consensusState,
|
ctxTarget, client.ClientID, uint64(client.Header.Height-1), consensusState,
|
||||||
)
|
)
|
||||||
chain.App.IBCKeeper.ClientKeeper.SetClientState(
|
chain.App.IBCKeeper.ClientKeeper.SetClientState(
|
||||||
ctxTarget, ibctmtypes.NewClientState(client.ClientID, trustingPeriod, ubdPeriod, maxClockDrift, client.Header),
|
ctxTarget, ibctmtypes.NewClientState(client.ClientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, client.Header),
|
||||||
)
|
)
|
||||||
|
|
||||||
// _, _, err := simapp.SignCheckDeliver(
|
// _, _, err := simapp.SignCheckDeliver(
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
localhosttypes "github.com/cosmos/cosmos-sdk/x/ibc/09-localhost/types"
|
localhosttypes "github.com/cosmos/cosmos-sdk/x/ibc/09-localhost/types"
|
||||||
commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types"
|
commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types"
|
||||||
ibctypes "github.com/cosmos/cosmos-sdk/x/ibc/types"
|
ibctypes "github.com/cosmos/cosmos-sdk/x/ibc/types"
|
||||||
|
lite "github.com/tendermint/tendermint/lite2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (suite *IBCTestSuite) TestValidateGenesis() {
|
func (suite *IBCTestSuite) TestValidateGenesis() {
|
||||||
|
@ -28,7 +29,7 @@ func (suite *IBCTestSuite) TestValidateGenesis() {
|
||||||
genState: ibc.GenesisState{
|
genState: ibc.GenesisState{
|
||||||
ClientGenesis: client.NewGenesisState(
|
ClientGenesis: client.NewGenesisState(
|
||||||
[]exported.ClientState{
|
[]exported.ClientState{
|
||||||
ibctmtypes.NewClientState(clientID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
ibctmtypes.NewClientState(clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
localhosttypes.NewClientState("chaindID", 10),
|
localhosttypes.NewClientState("chaindID", 10),
|
||||||
},
|
},
|
||||||
[]client.ConsensusStates{
|
[]client.ConsensusStates{
|
||||||
|
@ -81,7 +82,7 @@ func (suite *IBCTestSuite) TestValidateGenesis() {
|
||||||
genState: ibc.GenesisState{
|
genState: ibc.GenesisState{
|
||||||
ClientGenesis: client.NewGenesisState(
|
ClientGenesis: client.NewGenesisState(
|
||||||
[]exported.ClientState{
|
[]exported.ClientState{
|
||||||
ibctmtypes.NewClientState(clientID, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
ibctmtypes.NewClientState(clientID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header),
|
||||||
localhosttypes.NewClientState("chaindID", 0),
|
localhosttypes.NewClientState("chaindID", 0),
|
||||||
},
|
},
|
||||||
nil,
|
nil,
|
||||||
|
|
Loading…
Reference in New Issue