Migrate Tendermint client state to proto (#6932)
* add tm client state proto file * migrate tm client state to proto * bump ics23 dep * add issue link to makefile
This commit is contained in:
parent
662aa7fa01
commit
79cee06967
10
Makefile
10
Makefile
@ -338,12 +338,14 @@ proto-check-breaking-docker:
|
||||
TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.33.1
|
||||
GOGO_PROTO_URL = https://raw.githubusercontent.com/regen-network/protobuf/cosmos
|
||||
COSMOS_PROTO_URL = https://raw.githubusercontent.com/regen-network/cosmos-proto/master
|
||||
CONFIO_URL = https://raw.githubusercontent.com/confio/ics23/master
|
||||
|
||||
TM_KV_TYPES = third_party/proto/tendermint/libs/kv
|
||||
TM_MERKLE_TYPES = third_party/proto/tendermint/crypto/merkle
|
||||
TM_ABCI_TYPES = third_party/proto/tendermint/abci/types
|
||||
GOGO_PROTO_TYPES = third_party/proto/gogoproto
|
||||
COSMOS_PROTO_TYPES = third_party/proto/cosmos_proto
|
||||
CONFIO_TYPES = third_party/proto/confio
|
||||
|
||||
proto-update-deps:
|
||||
@mkdir -p $(GOGO_PROTO_TYPES)
|
||||
@ -370,6 +372,14 @@ proto-update-deps:
|
||||
@curl -sSL $(TM_URL)/crypto/merkle/merkle.proto > $(TM_MERKLE_TYPES)/merkle.proto
|
||||
@sed -i '' '7 s|third_party/proto/||g' $(TM_MERKLE_TYPES)/merkle.proto
|
||||
|
||||
@mkdir -p $(CONFIO_TYPES)
|
||||
@curl -sSL $(CONFIO_URL)/proofs.proto > $(CONFIO_TYPES)/proofs.proto
|
||||
## insert go package option into proofs.proto file
|
||||
## Issue link: https://github.com/confio/ics23/issues/32
|
||||
@sed -i '4ioption go_package = "github.com/confio/ics23/go";' $(CONFIO_TYPES)/proofs.proto
|
||||
|
||||
|
||||
|
||||
|
||||
.PHONY: proto-all proto-gen proto-lint proto-check-breaking proto-update-deps
|
||||
|
||||
|
||||
2
go.mod
2
go.mod
@ -8,7 +8,7 @@ require (
|
||||
github.com/bgentry/speakeasy v0.1.0
|
||||
github.com/btcsuite/btcd v0.20.1-beta
|
||||
github.com/confio/ics23-iavl v0.6.0
|
||||
github.com/confio/ics23/go v0.0.0-20200604202538-6e2c36a74465
|
||||
github.com/confio/ics23/go v0.0.0-20200804135649-a9fbc744ca3d
|
||||
github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d
|
||||
github.com/cosmos/ledger-cosmos-go v0.11.1
|
||||
github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25
|
||||
|
||||
4
go.sum
4
go.sum
@ -86,8 +86,8 @@ github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE
|
||||
github.com/confio/ics23-iavl v0.6.0 h1:vVRCuVaP38FCw1kTeEdFuGuiY+2vAGTBQoH7Zxkq/ws=
|
||||
github.com/confio/ics23-iavl v0.6.0/go.mod h1:mmXAxD1vWoO0VP8YHu6mM1QHGv71NQqa1iSVm4HeKcY=
|
||||
github.com/confio/ics23/go v0.0.0-20200323120010-7d9a00f0a2fa/go.mod h1:W1I3XC8d9N8OTu/ct5VJ84ylcOunZwMXsWkd27nvVts=
|
||||
github.com/confio/ics23/go v0.0.0-20200604202538-6e2c36a74465 h1:tyK54ttJ14HaHaKjB6sQqkZaUSe/LUXKHjfgJNtcj20=
|
||||
github.com/confio/ics23/go v0.0.0-20200604202538-6e2c36a74465/go.mod h1:W1I3XC8d9N8OTu/ct5VJ84ylcOunZwMXsWkd27nvVts=
|
||||
github.com/confio/ics23/go v0.0.0-20200804135649-a9fbc744ca3d h1:VbtIIE3NDC6/aIRUR9FdmRE4l0B5IDgYHiFi8pw0QOc=
|
||||
github.com/confio/ics23/go v0.0.0-20200804135649-a9fbc744ca3d/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg=
|
||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||
|
||||
52
proto/ibc/tendermint/tendermint.proto
Normal file
52
proto/ibc/tendermint/tendermint.proto
Normal file
@ -0,0 +1,52 @@
|
||||
syntax = "proto3";
|
||||
package ibc.tendermint;
|
||||
|
||||
option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types";
|
||||
|
||||
import "confio/proofs.proto";
|
||||
import "google/protobuf/duration.proto";
|
||||
import "gogoproto/gogo.proto";
|
||||
|
||||
// ClientState from Tendermint tracks the current validator set, latest height,
|
||||
// and a possible frozen height.
|
||||
message ClientState {
|
||||
option (gogoproto.goproto_getters) = false;
|
||||
|
||||
string chain_id = 1 [(gogoproto.customname) = "ChainID"];
|
||||
Fraction trust_level = 2 [
|
||||
(gogoproto.nullable) = false,
|
||||
(gogoproto.moretags) = "yaml:\"trust_level\""
|
||||
];
|
||||
// duration of the period since the LastestTimestamp during which the
|
||||
// submitted headers are valid for upgrade
|
||||
google.protobuf.Duration trusting_period = 3 [
|
||||
(gogoproto.nullable) = false,
|
||||
(gogoproto.stdduration) = true,
|
||||
(gogoproto.moretags) = "yaml:\"trusting_period\""
|
||||
];
|
||||
// duration of the staking unbonding period
|
||||
google.protobuf.Duration unbonding_period = 4 [
|
||||
(gogoproto.nullable) = false,
|
||||
(gogoproto.stdduration) = true,
|
||||
(gogoproto.moretags) = "yaml:\"unbonding_period\""
|
||||
];
|
||||
// defines how much new (untrusted) header's Time can drift into the future.
|
||||
google.protobuf.Duration max_clock_drift = 5 [
|
||||
(gogoproto.nullable) = false,
|
||||
(gogoproto.stdduration) = true,
|
||||
(gogoproto.moretags) = "yaml:\"max_clock_drift\""
|
||||
];
|
||||
// Block height when the client was frozen due to a misbehaviour
|
||||
uint64 frozen_height = 6 [(gogoproto.moretags) = "yaml:\"frozen_height\""];
|
||||
// Latest height the client was updated to
|
||||
uint64 latest_height = 7 [(gogoproto.moretags) = "yaml:\"latest_height\""];
|
||||
// Proof specifications used in verifying counterparty state
|
||||
repeated ics23.ProofSpec proof_specs = 8
|
||||
[(gogoproto.moretags) = "yaml:\"proof_specs\""];
|
||||
}
|
||||
|
||||
// Fraction defines the protobuf message type for tmmath.Fraction
|
||||
message Fraction {
|
||||
int64 numerator = 1;
|
||||
int64 denominator = 2;
|
||||
}
|
||||
234
third_party/proto/confio/proofs.proto
vendored
Normal file
234
third_party/proto/confio/proofs.proto
vendored
Normal file
@ -0,0 +1,234 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package ics23;
|
||||
option go_package = "github.com/confio/ics23/go";
|
||||
|
||||
enum HashOp {
|
||||
// NO_HASH is the default if no data passed. Note this is an illegal argument some places.
|
||||
NO_HASH = 0;
|
||||
SHA256 = 1;
|
||||
SHA512 = 2;
|
||||
KECCAK = 3;
|
||||
RIPEMD160 = 4;
|
||||
BITCOIN = 5; // ripemd160(sha256(x))
|
||||
}
|
||||
|
||||
/**
|
||||
LengthOp defines how to process the key and value of the LeafOp
|
||||
to include length information. After encoding the length with the given
|
||||
algorithm, the length will be prepended to the key and value bytes.
|
||||
(Each one with it's own encoded length)
|
||||
*/
|
||||
enum LengthOp {
|
||||
// NO_PREFIX don't include any length info
|
||||
NO_PREFIX = 0;
|
||||
// VAR_PROTO uses protobuf (and go-amino) varint encoding of the length
|
||||
VAR_PROTO = 1;
|
||||
// VAR_RLP uses rlp int encoding of the length
|
||||
VAR_RLP = 2;
|
||||
// FIXED32_BIG uses big-endian encoding of the length as a 32 bit integer
|
||||
FIXED32_BIG = 3;
|
||||
// FIXED32_LITTLE uses little-endian encoding of the length as a 32 bit integer
|
||||
FIXED32_LITTLE = 4;
|
||||
// FIXED64_BIG uses big-endian encoding of the length as a 64 bit integer
|
||||
FIXED64_BIG = 5;
|
||||
// FIXED64_LITTLE uses little-endian encoding of the length as a 64 bit integer
|
||||
FIXED64_LITTLE = 6;
|
||||
// REQUIRE_32_BYTES is like NONE, but will fail if the input is not exactly 32 bytes (sha256 output)
|
||||
REQUIRE_32_BYTES = 7;
|
||||
// REQUIRE_64_BYTES is like NONE, but will fail if the input is not exactly 64 bytes (sha512 output)
|
||||
REQUIRE_64_BYTES = 8;
|
||||
}
|
||||
|
||||
/**
|
||||
ExistenceProof takes a key and a value and a set of steps to perform on it.
|
||||
The result of peforming all these steps will provide a "root hash", which can
|
||||
be compared to the value in a header.
|
||||
|
||||
Since it is computationally infeasible to produce a hash collission for any of the used
|
||||
cryptographic hash functions, if someone can provide a series of operations to transform
|
||||
a given key and value into a root hash that matches some trusted root, these key and values
|
||||
must be in the referenced merkle tree.
|
||||
|
||||
The only possible issue is maliablity in LeafOp, such as providing extra prefix data,
|
||||
which should be controlled by a spec. Eg. with lengthOp as NONE,
|
||||
prefix = FOO, key = BAR, value = CHOICE
|
||||
and
|
||||
prefix = F, key = OOBAR, value = CHOICE
|
||||
would produce the same value.
|
||||
|
||||
With LengthOp this is tricker but not impossible. Which is why the "leafPrefixEqual" field
|
||||
in the ProofSpec is valuable to prevent this mutability. And why all trees should
|
||||
length-prefix the data before hashing it.
|
||||
*/
|
||||
message ExistenceProof {
|
||||
bytes key = 1;
|
||||
bytes value = 2;
|
||||
LeafOp leaf = 3;
|
||||
repeated InnerOp path = 4;
|
||||
}
|
||||
|
||||
/*
|
||||
NonExistenceProof takes a proof of two neighbors, one left of the desired key,
|
||||
one right of the desired key. If both proofs are valid AND they are neighbors,
|
||||
then there is no valid proof for the given key.
|
||||
*/
|
||||
message NonExistenceProof {
|
||||
bytes key = 1; // TODO: remove this as unnecessary??? we prove a range
|
||||
ExistenceProof left = 2;
|
||||
ExistenceProof right = 3;
|
||||
}
|
||||
|
||||
/*
|
||||
CommitmentProof is either an ExistenceProof or a NonExistenceProof, or a Batch of such messages
|
||||
*/
|
||||
message CommitmentProof {
|
||||
oneof proof {
|
||||
ExistenceProof exist = 1;
|
||||
NonExistenceProof nonexist = 2;
|
||||
BatchProof batch = 3;
|
||||
CompressedBatchProof compressed = 4;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
LeafOp represents the raw key-value data we wish to prove, and
|
||||
must be flexible to represent the internal transformation from
|
||||
the original key-value pairs into the basis hash, for many existing
|
||||
merkle trees.
|
||||
|
||||
key and value are passed in. So that the signature of this operation is:
|
||||
leafOp(key, value) -> output
|
||||
|
||||
To process this, first prehash the keys and values if needed (ANY means no hash in this case):
|
||||
hkey = prehashKey(key)
|
||||
hvalue = prehashValue(value)
|
||||
|
||||
Then combine the bytes, and hash it
|
||||
output = hash(prefix || length(hkey) || hkey || length(hvalue) || hvalue)
|
||||
*/
|
||||
message LeafOp {
|
||||
HashOp hash = 1;
|
||||
HashOp prehash_key = 2;
|
||||
HashOp prehash_value = 3;
|
||||
LengthOp length = 4;
|
||||
// prefix is a fixed bytes that may optionally be included at the beginning to differentiate
|
||||
// a leaf node from an inner node.
|
||||
bytes prefix = 5;
|
||||
}
|
||||
|
||||
/**
|
||||
InnerOp represents a merkle-proof step that is not a leaf.
|
||||
It represents concatenating two children and hashing them to provide the next result.
|
||||
|
||||
The result of the previous step is passed in, so the signature of this op is:
|
||||
innerOp(child) -> output
|
||||
|
||||
The result of applying InnerOp should be:
|
||||
output = op.hash(op.prefix || child || op.suffix)
|
||||
|
||||
where the || operator is concatenation of binary data,
|
||||
and child is the result of hashing all the tree below this step.
|
||||
|
||||
Any special data, like prepending child with the length, or prepending the entire operation with
|
||||
some value to differentiate from leaf nodes, should be included in prefix and suffix.
|
||||
If either of prefix or suffix is empty, we just treat it as an empty string
|
||||
*/
|
||||
message InnerOp {
|
||||
HashOp hash = 1;
|
||||
bytes prefix = 2;
|
||||
bytes suffix = 3;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
ProofSpec defines what the expected parameters are for a given proof type.
|
||||
This can be stored in the client and used to validate any incoming proofs.
|
||||
|
||||
verify(ProofSpec, Proof) -> Proof | Error
|
||||
|
||||
As demonstrated in tests, if we don't fix the algorithm used to calculate the
|
||||
LeafHash for a given tree, there are many possible key-value pairs that can
|
||||
generate a given hash (by interpretting the preimage differently).
|
||||
We need this for proper security, requires client knows a priori what
|
||||
tree format server uses. But not in code, rather a configuration object.
|
||||
*/
|
||||
message ProofSpec {
|
||||
// any field in the ExistenceProof must be the same as in this spec.
|
||||
// except Prefix, which is just the first bytes of prefix (spec can be longer)
|
||||
LeafOp leaf_spec = 1;
|
||||
InnerSpec inner_spec = 2;
|
||||
// max_depth (if > 0) is the maximum number of InnerOps allowed (mainly for fixed-depth tries)
|
||||
int32 max_depth = 3;
|
||||
// min_depth (if > 0) is the minimum number of InnerOps allowed (mainly for fixed-depth tries)
|
||||
int32 min_depth = 4;
|
||||
}
|
||||
|
||||
/*
|
||||
InnerSpec contains all store-specific structure info to determine if two proofs from a
|
||||
given store are neighbors.
|
||||
|
||||
This enables:
|
||||
|
||||
isLeftMost(spec: InnerSpec, op: InnerOp)
|
||||
isRightMost(spec: InnerSpec, op: InnerOp)
|
||||
isLeftNeighbor(spec: InnerSpec, left: InnerOp, right: InnerOp)
|
||||
*/
|
||||
message InnerSpec {
|
||||
// Child order is the ordering of the children node, must count from 0
|
||||
// iavl tree is [0, 1] (left then right)
|
||||
// merk is [0, 2, 1] (left, right, here)
|
||||
repeated int32 child_order = 1;
|
||||
int32 child_size = 2;
|
||||
int32 min_prefix_length = 3;
|
||||
int32 max_prefix_length = 4;
|
||||
// empty child is the prehash image that is used when one child is nil (eg. 20 bytes of 0)
|
||||
bytes empty_child = 5;
|
||||
// hash is the algorithm that must be used for each InnerOp
|
||||
HashOp hash = 6;
|
||||
}
|
||||
|
||||
/*
|
||||
BatchProof is a group of multiple proof types than can be compressed
|
||||
*/
|
||||
message BatchProof {
|
||||
repeated BatchEntry entries = 1;
|
||||
}
|
||||
|
||||
// Use BatchEntry not CommitmentProof, to avoid recursion
|
||||
message BatchEntry {
|
||||
oneof proof {
|
||||
ExistenceProof exist = 1;
|
||||
NonExistenceProof nonexist = 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/****** all items here are compressed forms *******/
|
||||
|
||||
message CompressedBatchProof {
|
||||
repeated CompressedBatchEntry entries = 1;
|
||||
repeated InnerOp lookup_inners = 2;
|
||||
}
|
||||
|
||||
// Use BatchEntry not CommitmentProof, to avoid recursion
|
||||
message CompressedBatchEntry {
|
||||
oneof proof {
|
||||
CompressedExistenceProof exist = 1;
|
||||
CompressedNonExistenceProof nonexist = 2;
|
||||
}
|
||||
}
|
||||
|
||||
message CompressedExistenceProof {
|
||||
bytes key = 1;
|
||||
bytes value = 2;
|
||||
LeafOp leaf = 3;
|
||||
// these are indexes into the lookup_inners table in CompressedBatchProof
|
||||
repeated int32 path = 4;
|
||||
}
|
||||
|
||||
message CompressedNonExistenceProof {
|
||||
bytes key = 1; // TODO: remove this as unnecessary??? we prove a range
|
||||
CompressedExistenceProof left = 2;
|
||||
CompressedExistenceProof right = 3;
|
||||
}
|
||||
@ -29,12 +29,8 @@ func HandleMsgCreateClient(ctx sdk.Context, k keeper.Keeper, msg exported.MsgCre
|
||||
if !ok {
|
||||
return nil, sdkerrors.Wrapf(types.ErrInvalidClientType, "got %T, expected %T", msg, &ibctmtypes.MsgCreateClient{})
|
||||
}
|
||||
var err error
|
||||
|
||||
clientState, err = ibctmtypes.InitializeFromMsg(tmMsg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
clientState = ibctmtypes.InitializeFromMsg(tmMsg)
|
||||
consensusHeight = msg.GetConsensusState().GetHeight()
|
||||
case exported.Localhost:
|
||||
// msg client id is always "localhost"
|
||||
|
||||
@ -5,7 +5,6 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
lite "github.com/tendermint/tendermint/lite2"
|
||||
tmtypes "github.com/tendermint/tendermint/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
|
||||
@ -38,20 +37,16 @@ func (suite *KeeperTestSuite) TestCreateClient() {
|
||||
i := i
|
||||
if tc.expPanic {
|
||||
suite.Require().Panics(func() {
|
||||
clientState, err := ibctmtypes.Initialize(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
suite.Require().NoError(err, "err on client state initialization")
|
||||
clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
suite.keeper.CreateClient(suite.ctx, tc.clientID, clientState, suite.consensusState)
|
||||
}, "Msg %d didn't panic: %s", i, tc.msg)
|
||||
} else {
|
||||
clientState, err := ibctmtypes.Initialize(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, 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, tc.clientID, clientState, suite.consensusState)
|
||||
}
|
||||
// If we were able to NewClientState clientstate successfully, try persisting it to state
|
||||
_, err := suite.keeper.CreateClient(suite.ctx, tc.clientID, clientState, suite.consensusState)
|
||||
|
||||
if tc.expPass {
|
||||
suite.Require().NoError(err, "valid test case %d failed: %s", i, tc.msg)
|
||||
@ -75,7 +70,6 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() {
|
||||
var (
|
||||
updateHeader ibctmtypes.Header
|
||||
clientState ibctmtypes.ClientState
|
||||
err error
|
||||
)
|
||||
|
||||
cases := []struct {
|
||||
@ -84,20 +78,15 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() {
|
||||
expPass bool
|
||||
}{
|
||||
{"valid update", func() error {
|
||||
clientState, err = ibctmtypes.Initialize(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState)
|
||||
clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
_, err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState)
|
||||
updateHeader = createFutureUpdateFn(suite)
|
||||
return err
|
||||
}, true},
|
||||
{"valid past update", func() error {
|
||||
clientState, err = ibctmtypes.Initialize(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState)
|
||||
clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
_, err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
// store previous consensus state
|
||||
prevConsState := ibctmtypes.ConsensusState{
|
||||
@ -131,10 +120,7 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() {
|
||||
return nil
|
||||
}, false},
|
||||
{"consensus state not found", func() error {
|
||||
clientState, err = ibctmtypes.Initialize(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
suite.keeper.SetClientState(suite.ctx, testClientID, clientState)
|
||||
suite.keeper.SetClientType(suite.ctx, testClientID, exported.Tendermint)
|
||||
updateHeader = createFutureUpdateFn(suite)
|
||||
@ -150,12 +136,10 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() {
|
||||
return nil
|
||||
}, false},
|
||||
{"valid past update before client was frozen", func() error {
|
||||
clientState, err = ibctmtypes.Initialize(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
clientState.FrozenHeight = testClientHeight - 1
|
||||
_, err = suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState)
|
||||
_, err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
// store previous consensus state
|
||||
prevConsState := ibctmtypes.ConsensusState{
|
||||
@ -172,14 +156,9 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() {
|
||||
return nil
|
||||
}, true},
|
||||
{"invalid header", func() error {
|
||||
clientState, err = ibctmtypes.Initialize(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
_, err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState)
|
||||
suite.Require().NoError(err)
|
||||
updateHeader = createPastUpdateFn(suite)
|
||||
|
||||
return nil
|
||||
@ -291,11 +270,8 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
|
||||
},
|
||||
func() error {
|
||||
suite.consensusState.ValidatorSet = bothValSet
|
||||
clientState, err := ibctmtypes.Initialize(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState)
|
||||
clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
_, err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState)
|
||||
|
||||
return err
|
||||
},
|
||||
@ -311,11 +287,8 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
|
||||
},
|
||||
func() error {
|
||||
suite.consensusState.ValidatorSet = bothValSet
|
||||
clientState, err := ibctmtypes.Initialize(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState)
|
||||
clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
_, err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState)
|
||||
|
||||
return err
|
||||
},
|
||||
@ -366,7 +339,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
|
||||
ClientID: testClientID,
|
||||
},
|
||||
func() error {
|
||||
clientState, err := ibctmtypes.Initialize(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -8,7 +8,6 @@ import (
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
lite "github.com/tendermint/tendermint/lite2"
|
||||
tmtypes "github.com/tendermint/tendermint/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
@ -95,7 +94,7 @@ func TestKeeperTestSuite(t *testing.T) {
|
||||
}
|
||||
|
||||
func (suite *KeeperTestSuite) TestSetClientState() {
|
||||
clientState := ibctmtypes.NewClientState(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs())
|
||||
clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs())
|
||||
suite.keeper.SetClientState(suite.ctx, testClientID, clientState)
|
||||
|
||||
retrievedState, found := suite.keeper.GetClientState(suite.ctx, testClientID)
|
||||
@ -129,9 +128,9 @@ func (suite KeeperTestSuite) TestGetAllClients() {
|
||||
testClientID2, testClientID3, testClientID,
|
||||
}
|
||||
expClients := []exported.ClientState{
|
||||
ibctmtypes.NewClientState(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
ibctmtypes.NewClientState(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
ibctmtypes.NewClientState(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
}
|
||||
|
||||
for i := range expClients {
|
||||
@ -153,9 +152,9 @@ func (suite KeeperTestSuite) TestGetAllGenesisClients() {
|
||||
testClientID2, testClientID3, testClientID,
|
||||
}
|
||||
expClients := []exported.ClientState{
|
||||
ibctmtypes.NewClientState(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
ibctmtypes.NewClientState(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
ibctmtypes.NewClientState(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
}
|
||||
|
||||
expGenClients := make([]types.GenesisClientState, len(expClients))
|
||||
@ -203,8 +202,7 @@ func (suite KeeperTestSuite) TestGetConsensusState() {
|
||||
|
||||
func (suite KeeperTestSuite) TestConsensusStateHelpers() {
|
||||
// initial setup
|
||||
clientState, err := ibctmtypes.Initialize(testChainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
suite.Require().NoError(err)
|
||||
clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())
|
||||
|
||||
suite.keeper.SetClientState(suite.ctx, testClientID, clientState)
|
||||
suite.keeper.SetClientConsensusState(suite.ctx, testClientID, testClientHeight, suite.consensusState)
|
||||
|
||||
@ -6,7 +6,6 @@ import (
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
lite "github.com/tendermint/tendermint/lite2"
|
||||
tmtypes "github.com/tendermint/tendermint/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
|
||||
@ -54,7 +53,7 @@ func TestValidateGenesis(t *testing.T) {
|
||||
genState: types.NewGenesisState(
|
||||
[]types.GenesisClientState{
|
||||
types.NewGenesisClientState(
|
||||
clientID, ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
),
|
||||
types.NewGenesisClientState(
|
||||
exported.ClientTypeLocalHost, localhosttypes.NewClientState("chainID", 10),
|
||||
@ -79,7 +78,7 @@ func TestValidateGenesis(t *testing.T) {
|
||||
genState: types.NewGenesisState(
|
||||
[]types.GenesisClientState{
|
||||
types.NewGenesisClientState(
|
||||
"/~@$*", ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
"/~@$*", ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
),
|
||||
types.NewGenesisClientState(
|
||||
exported.ClientTypeLocalHost, localhosttypes.NewClientState("chainID", 10),
|
||||
@ -105,7 +104,7 @@ func TestValidateGenesis(t *testing.T) {
|
||||
genState: types.NewGenesisState(
|
||||
[]types.GenesisClientState{
|
||||
types.NewGenesisClientState(
|
||||
clientID, ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
),
|
||||
types.NewGenesisClientState(exported.ClientTypeLocalHost, localhosttypes.NewClientState("chaindID", 0)),
|
||||
},
|
||||
@ -119,7 +118,7 @@ func TestValidateGenesis(t *testing.T) {
|
||||
genState: types.NewGenesisState(
|
||||
[]types.GenesisClientState{
|
||||
types.NewGenesisClientState(
|
||||
clientID, ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
),
|
||||
types.NewGenesisClientState(
|
||||
exported.ClientTypeLocalHost, localhosttypes.NewClientState("chaindID", 10),
|
||||
@ -144,7 +143,7 @@ func TestValidateGenesis(t *testing.T) {
|
||||
genState: types.NewGenesisState(
|
||||
[]types.GenesisClientState{
|
||||
types.NewGenesisClientState(
|
||||
clientID, ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
),
|
||||
types.NewGenesisClientState(
|
||||
exported.ClientTypeLocalHost, localhosttypes.NewClientState("chaindID", 10),
|
||||
|
||||
@ -12,7 +12,6 @@ import (
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||
lite "github.com/tendermint/tendermint/lite2"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
@ -62,14 +61,14 @@ func NewCreateClientCmd() *cobra.Command {
|
||||
}
|
||||
|
||||
var (
|
||||
trustLevel tmmath.Fraction
|
||||
trustLevel ibctmtypes.Fraction
|
||||
specs []*ics23.ProofSpec
|
||||
)
|
||||
|
||||
lvl, _ := cmd.Flags().GetString(flagTrustLevel)
|
||||
|
||||
if lvl == "default" {
|
||||
trustLevel = lite.DefaultTrustLevel
|
||||
trustLevel = ibctmtypes.NewFractionFromTm(lite.DefaultTrustLevel)
|
||||
} else {
|
||||
trustLevel, err = parseFraction(lvl)
|
||||
if err != nil {
|
||||
@ -218,23 +217,23 @@ func NewSubmitMisbehaviourCmd() *cobra.Command {
|
||||
return cmd
|
||||
}
|
||||
|
||||
func parseFraction(fraction string) (tmmath.Fraction, error) {
|
||||
func parseFraction(fraction string) (ibctmtypes.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)
|
||||
return ibctmtypes.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)
|
||||
return ibctmtypes.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 ibctmtypes.Fraction{}, fmt.Errorf("invalid trust-level denominator: %w", err)
|
||||
}
|
||||
|
||||
return tmmath.Fraction{
|
||||
return ibctmtypes.Fraction{
|
||||
Numerator: numerator,
|
||||
Denominator: denominator,
|
||||
}, nil
|
||||
|
||||
@ -6,8 +6,6 @@ import (
|
||||
ics23 "github.com/confio/ics23/go"
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/types/rest"
|
||||
evidenceexported "github.com/cosmos/cosmos-sdk/x/evidence/exported"
|
||||
@ -27,15 +25,15 @@ func RegisterRoutes(clientCtx client.Context, r *mux.Router) {
|
||||
|
||||
// CreateClientReq defines the properties of a create client request's body.
|
||||
type CreateClientReq struct {
|
||||
BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"`
|
||||
ClientID string `json:"client_id" yaml:"client_id"`
|
||||
ChainID string `json:"chain_id" yaml:"chain_id"`
|
||||
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"`
|
||||
UnbondingPeriod time.Duration `json:"unbonding_period" yaml:"unbonding_period"`
|
||||
MaxClockDrift time.Duration `json:"max_clock_drift" yaml:"max_clock_drift"`
|
||||
ProofSpecs []*ics23.ProofSpec `json:"proof_specs" yaml:"proof_specs"`
|
||||
BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"`
|
||||
ClientID string `json:"client_id" yaml:"client_id"`
|
||||
ChainID string `json:"chain_id" yaml:"chain_id"`
|
||||
Header ibctmtypes.Header `json:"header" yaml:"header"`
|
||||
TrustLevel ibctmtypes.Fraction `json:"trust_level" yaml:"trust_level"`
|
||||
TrustingPeriod time.Duration `json:"trusting_period" yaml:"trusting_period"`
|
||||
UnbondingPeriod time.Duration `json:"unbonding_period" yaml:"unbonding_period"`
|
||||
MaxClockDrift time.Duration `json:"max_clock_drift" yaml:"max_clock_drift"`
|
||||
ProofSpecs []*ics23.ProofSpec `json:"proof_specs" yaml:"proof_specs"`
|
||||
}
|
||||
|
||||
// UpdateClientReq defines the properties of a update client request's body.
|
||||
|
||||
@ -110,14 +110,14 @@ func checkMisbehaviour(
|
||||
// - ValidatorSets on both headers are valid given the last trusted ValidatorSet
|
||||
if err := consensusState.ValidatorSet.VerifyCommitLightTrusting(
|
||||
evidence.ChainID, evidence.Header1.Commit.BlockID, evidence.Header1.Height,
|
||||
evidence.Header1.Commit, clientState.TrustLevel,
|
||||
evidence.Header1.Commit, clientState.TrustLevel.ToTendermint(),
|
||||
); err != nil {
|
||||
return sdkerrors.Wrapf(clienttypes.ErrInvalidEvidence, "validator set in header 1 has too much change from last known validator set: %v", err)
|
||||
}
|
||||
|
||||
if err := consensusState.ValidatorSet.VerifyCommitLightTrusting(
|
||||
evidence.ChainID, evidence.Header2.Commit.BlockID, evidence.Header2.Height,
|
||||
evidence.Header2.Commit, clientState.TrustLevel,
|
||||
evidence.Header2.Commit, clientState.TrustLevel.ToTendermint(),
|
||||
); err != nil {
|
||||
return sdkerrors.Wrapf(clienttypes.ErrInvalidEvidence, "validator set in header 2 has too much change from last known validator set: %v", err)
|
||||
}
|
||||
|
||||
@ -6,13 +6,12 @@ import (
|
||||
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
"github.com/tendermint/tendermint/crypto/tmhash"
|
||||
lite "github.com/tendermint/tendermint/lite2"
|
||||
tmtypes "github.com/tendermint/tendermint/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
clientexported "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
|
||||
tendermint "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint"
|
||||
ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types"
|
||||
commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types"
|
||||
)
|
||||
|
||||
@ -54,11 +53,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
}{
|
||||
{
|
||||
"valid misbehavior evidence",
|
||||
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, 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),
|
||||
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
types.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||
types.Evidence{
|
||||
Header1: types.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
||||
Header2: types.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
ChainID: chainID,
|
||||
ClientID: chainID,
|
||||
},
|
||||
@ -69,11 +68,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
},
|
||||
{
|
||||
"valid misbehavior at height greater than last consensusState",
|
||||
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, 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),
|
||||
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
types.ConsensusState{Timestamp: suite.now, Height: height - 1, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||
types.Evidence{
|
||||
Header1: types.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
||||
Header2: types.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
ChainID: chainID,
|
||||
ClientID: chainID,
|
||||
},
|
||||
@ -84,11 +83,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
},
|
||||
{
|
||||
"consensus state's valset hash different from evidence should still pass",
|
||||
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, 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),
|
||||
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
types.ConsensusState{Timestamp: suite.now, Height: height - 1, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: suite.valSet},
|
||||
types.Evidence{
|
||||
Header1: types.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
||||
Header2: types.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
ChainID: chainID,
|
||||
ClientID: chainID,
|
||||
},
|
||||
@ -100,10 +99,10 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
{
|
||||
"invalid tendermint client state",
|
||||
nil,
|
||||
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),
|
||||
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
types.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||
types.Evidence{
|
||||
Header1: types.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners),
|
||||
Header2: types.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
ChainID: chainID,
|
||||
ClientID: chainID,
|
||||
},
|
||||
@ -114,11 +113,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
},
|
||||
{
|
||||
"already frozen client state",
|
||||
ibctmtypes.ClientState{FrozenHeight: 1},
|
||||
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),
|
||||
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
types.ClientState{FrozenHeight: 1},
|
||||
types.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||
types.Evidence{
|
||||
Header1: types.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
||||
Header2: types.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
ChainID: chainID,
|
||||
ClientID: chainID,
|
||||
},
|
||||
@ -129,11 +128,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
},
|
||||
{
|
||||
"invalid tendermint consensus state",
|
||||
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
nil,
|
||||
ibctmtypes.Evidence{
|
||||
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners),
|
||||
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
types.Evidence{
|
||||
Header1: types.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners),
|
||||
Header2: types.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
ChainID: chainID,
|
||||
ClientID: chainID,
|
||||
},
|
||||
@ -144,8 +143,8 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
},
|
||||
{
|
||||
"invalid tendermint misbehaviour evidence",
|
||||
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
types.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||
nil,
|
||||
simapp.DefaultConsensusParams,
|
||||
height,
|
||||
@ -154,11 +153,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
},
|
||||
{
|
||||
"rejected misbehaviour due to expired age",
|
||||
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, 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),
|
||||
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
types.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||
types.Evidence{
|
||||
Header1: types.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
||||
Header2: types.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
ChainID: chainID,
|
||||
ClientID: chainID,
|
||||
},
|
||||
@ -169,11 +168,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
},
|
||||
{
|
||||
"provided height ≠ header height",
|
||||
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, 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),
|
||||
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
types.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||
types.Evidence{
|
||||
Header1: types.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
||||
Header2: types.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
ChainID: chainID,
|
||||
ClientID: chainID,
|
||||
},
|
||||
@ -184,11 +183,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
},
|
||||
{
|
||||
"unbonding period expired",
|
||||
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, 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),
|
||||
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
types.ConsensusState{Timestamp: time.Time{}, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||
types.Evidence{
|
||||
Header1: types.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
||||
Header2: types.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
ChainID: chainID,
|
||||
ClientID: chainID,
|
||||
},
|
||||
@ -199,11 +198,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
},
|
||||
{
|
||||
"first valset has too much change",
|
||||
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, 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),
|
||||
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
types.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||
types.Evidence{
|
||||
Header1: types.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners),
|
||||
Header2: types.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
|
||||
ChainID: chainID,
|
||||
ClientID: chainID,
|
||||
},
|
||||
@ -214,11 +213,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
},
|
||||
{
|
||||
"second valset has too much change",
|
||||
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, 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),
|
||||
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), altValSet, altSigners),
|
||||
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
types.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||
types.Evidence{
|
||||
Header1: types.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
|
||||
Header2: types.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), altValSet, altSigners),
|
||||
ChainID: chainID,
|
||||
ClientID: chainID,
|
||||
},
|
||||
@ -229,11 +228,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
|
||||
},
|
||||
{
|
||||
"both valsets have too much change",
|
||||
ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, 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),
|
||||
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), altValSet, altSigners),
|
||||
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
types.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet},
|
||||
types.Evidence{
|
||||
Header1: types.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners),
|
||||
Header2: types.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), altValSet, altSigners),
|
||||
ChainID: chainID,
|
||||
ClientID: chainID,
|
||||
},
|
||||
|
||||
@ -5,7 +5,6 @@ import (
|
||||
"time"
|
||||
|
||||
ics23 "github.com/confio/ics23/go"
|
||||
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||
lite "github.com/tendermint/tendermint/lite2"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
@ -24,60 +23,17 @@ import (
|
||||
|
||||
var _ clientexported.ClientState = ClientState{}
|
||||
|
||||
// ClientState from Tendermint tracks the current validator set, latest height,
|
||||
// and a possible frozen height.
|
||||
type ClientState struct {
|
||||
ChainID string `json:"chain_id" yaml:"chain_id"`
|
||||
|
||||
TrustLevel tmmath.Fraction `json:"trust_level" yaml:"trust_level"`
|
||||
|
||||
// Duration of the period since the LastestTimestamp during which the
|
||||
// submitted headers are valid for upgrade
|
||||
TrustingPeriod time.Duration `json:"trusting_period" yaml:"trusting_period"`
|
||||
|
||||
// Duration of the staking unbonding period
|
||||
UnbondingPeriod time.Duration `json:"unbonding_period" yaml:"unbonding_period"`
|
||||
|
||||
// MaxClockDrift defines how much new (untrusted) header's Time can drift into
|
||||
// the future.
|
||||
MaxClockDrift time.Duration
|
||||
|
||||
// Block height when the client was frozen due to a misbehaviour
|
||||
FrozenHeight uint64 `json:"frozen_height" yaml:"frozen_height"`
|
||||
|
||||
// Latest height the client was updated up to
|
||||
LatestHeight uint64 `json:"latest_height" yaml:"latest_height"`
|
||||
|
||||
ProofSpecs []*ics23.ProofSpec `json:"proof_specs" yaml:"proof_specs"`
|
||||
}
|
||||
|
||||
// InitializeFromMsg creates a tendermint client state from a CreateClientMsg
|
||||
func InitializeFromMsg(msg *MsgCreateClient) (ClientState, error) {
|
||||
return Initialize(
|
||||
msg.Header.ChainID,
|
||||
msg.TrustLevel,
|
||||
func InitializeFromMsg(msg *MsgCreateClient) ClientState {
|
||||
return NewClientState(msg.Header.ChainID, msg.TrustLevel,
|
||||
msg.TrustingPeriod, msg.UnbondingPeriod, msg.MaxClockDrift,
|
||||
uint64(msg.Header.Height), msg.ProofSpecs,
|
||||
)
|
||||
}
|
||||
|
||||
// Initialize creates a client state and validates its contents, checking that
|
||||
// the provided consensus state is from the same client type.
|
||||
func Initialize(
|
||||
chainID string,
|
||||
trustLevel tmmath.Fraction,
|
||||
trustingPeriod, ubdPeriod, maxClockDrift time.Duration,
|
||||
latestHeight uint64, specs []*ics23.ProofSpec,
|
||||
) (ClientState, error) {
|
||||
clientState := NewClientState(chainID, trustLevel, trustingPeriod, ubdPeriod, maxClockDrift, latestHeight, specs)
|
||||
|
||||
return clientState, nil
|
||||
}
|
||||
|
||||
// NewClientState creates a new ClientState instance
|
||||
func NewClientState(
|
||||
chainID string,
|
||||
trustLevel tmmath.Fraction,
|
||||
chainID string, trustLevel Fraction,
|
||||
trustingPeriod, ubdPeriod, maxClockDrift time.Duration,
|
||||
latestHeight uint64, specs []*ics23.ProofSpec,
|
||||
) ClientState {
|
||||
@ -124,7 +80,7 @@ func (cs ClientState) Validate() error {
|
||||
if strings.TrimSpace(cs.ChainID) == "" {
|
||||
return sdkerrors.Wrap(ErrInvalidChainID, "chain id cannot be empty string")
|
||||
}
|
||||
if err := lite.ValidateTrustLevel(cs.TrustLevel); err != nil {
|
||||
if err := lite.ValidateTrustLevel(cs.TrustLevel.ToTendermint()); err != nil {
|
||||
return err
|
||||
}
|
||||
if cs.TrustingPeriod == 0 {
|
||||
|
||||
@ -2,8 +2,6 @@ package types_test
|
||||
|
||||
import (
|
||||
ics23 "github.com/confio/ics23/go"
|
||||
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||
lite "github.com/tendermint/tendermint/lite2"
|
||||
|
||||
connectiontypes "github.com/cosmos/cosmos-sdk/x/ibc/03-connection/types"
|
||||
channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/04-channel/types"
|
||||
@ -28,52 +26,52 @@ func (suite *TendermintTestSuite) TestValidate() {
|
||||
}{
|
||||
{
|
||||
name: "valid client",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
expPass: true,
|
||||
},
|
||||
{
|
||||
name: "invalid chainID",
|
||||
clientState: ibctmtypes.NewClientState(" ", lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(" ", types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
expPass: false,
|
||||
},
|
||||
{
|
||||
name: "invalid trust level",
|
||||
clientState: ibctmtypes.NewClientState(chainID, tmmath.Fraction{Numerator: 0, Denominator: 1}, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.Fraction{Numerator: 0, Denominator: 1}, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
expPass: false,
|
||||
},
|
||||
{
|
||||
name: "invalid trusting period",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
expPass: false,
|
||||
},
|
||||
{
|
||||
name: "invalid unbonding period",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
expPass: false,
|
||||
},
|
||||
{
|
||||
name: "invalid max clock drift",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, 0, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, 0, height, commitmenttypes.GetSDKSpecs()),
|
||||
expPass: false,
|
||||
},
|
||||
{
|
||||
name: "invalid height",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()),
|
||||
expPass: false,
|
||||
},
|
||||
{
|
||||
name: "trusting period not less than unbonding period",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
expPass: false,
|
||||
},
|
||||
{
|
||||
name: "proof specs is nil",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, nil),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, nil),
|
||||
expPass: false,
|
||||
},
|
||||
{
|
||||
name: "proof specs contains nil",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, []*ics23.ProofSpec{ics23.TendermintSpec, nil}),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, []*ics23.ProofSpec{ics23.TendermintSpec, nil}),
|
||||
expPass: false,
|
||||
},
|
||||
}
|
||||
@ -100,7 +98,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() {
|
||||
// FIXME: uncomment
|
||||
// {
|
||||
// name: "successful verification",
|
||||
// clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
// clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
// consensusState: ibctmtypes.ConsensusState{
|
||||
// Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
// },
|
||||
@ -109,7 +107,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() {
|
||||
// },
|
||||
{
|
||||
name: "ApplyPrefix failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
},
|
||||
@ -118,7 +116,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() {
|
||||
},
|
||||
{
|
||||
name: "latest client height < height",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
},
|
||||
@ -136,7 +134,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() {
|
||||
},
|
||||
{
|
||||
name: "proof verification failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
ValidatorSet: suite.valSet,
|
||||
@ -188,7 +186,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() {
|
||||
// },
|
||||
{
|
||||
name: "ApplyPrefix failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
connection: conn,
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -198,7 +196,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() {
|
||||
},
|
||||
{
|
||||
name: "latest client height < height",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
connection: conn,
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -218,7 +216,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() {
|
||||
},
|
||||
{
|
||||
name: "proof verification failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
connection: conn,
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -271,7 +269,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() {
|
||||
// },
|
||||
{
|
||||
name: "ApplyPrefix failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
channel: ch,
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -281,7 +279,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() {
|
||||
},
|
||||
{
|
||||
name: "latest client height < height",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
channel: ch,
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -301,7 +299,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() {
|
||||
},
|
||||
{
|
||||
name: "proof verification failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
channel: ch,
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -351,7 +349,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() {
|
||||
// },
|
||||
{
|
||||
name: "ApplyPrefix failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
commitment: []byte{},
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -361,7 +359,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() {
|
||||
},
|
||||
{
|
||||
name: "latest client height < height",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
commitment: []byte{},
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -381,7 +379,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() {
|
||||
},
|
||||
{
|
||||
name: "proof verification failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
commitment: []byte{},
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -421,7 +419,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() {
|
||||
// FIXME: uncomment
|
||||
// {
|
||||
// name: "successful verification",
|
||||
// clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
// clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
// connection: conn,
|
||||
// consensusState: ibctmtypes.ConsensusState{
|
||||
// Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -431,7 +429,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() {
|
||||
// },
|
||||
{
|
||||
name: "ApplyPrefix failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
ack: []byte{},
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -441,7 +439,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() {
|
||||
},
|
||||
{
|
||||
name: "latest client height < height",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
ack: []byte{},
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -461,7 +459,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() {
|
||||
},
|
||||
{
|
||||
name: "proof verification failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
ack: []byte{},
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
@ -510,7 +508,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() {
|
||||
// },
|
||||
{
|
||||
name: "ApplyPrefix failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
},
|
||||
@ -519,7 +517,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() {
|
||||
},
|
||||
{
|
||||
name: "latest client height < height",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
},
|
||||
@ -537,7 +535,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() {
|
||||
},
|
||||
{
|
||||
name: "proof verification failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
ValidatorSet: suite.valSet,
|
||||
@ -585,7 +583,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() {
|
||||
// },
|
||||
{
|
||||
name: "ApplyPrefix failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
},
|
||||
@ -594,7 +592,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() {
|
||||
},
|
||||
{
|
||||
name: "latest client height < height",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
},
|
||||
@ -612,7 +610,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() {
|
||||
},
|
||||
{
|
||||
name: "proof verification failed",
|
||||
clientState: ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
consensusState: ibctmtypes.ConsensusState{
|
||||
Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash),
|
||||
ValidatorSet: suite.valSet,
|
||||
|
||||
@ -2,19 +2,13 @@ package types
|
||||
|
||||
import (
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
cdctypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||
clientexported "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
|
||||
)
|
||||
|
||||
// SubModuleCdc defines the IBC tendermint client codec.
|
||||
var SubModuleCdc *codec.Codec
|
||||
|
||||
func init() {
|
||||
SubModuleCdc = codec.New()
|
||||
cryptocodec.RegisterCrypto(SubModuleCdc)
|
||||
RegisterCodec(SubModuleCdc)
|
||||
}
|
||||
|
||||
// RegisterCodec registers the Tendermint types
|
||||
// RegisterCodec registers the necessary x/ibc/07-tendermint interfaces and conrete types
|
||||
// on the provided Amino codec. These types are used for Amino JSON serialization.
|
||||
func RegisterCodec(cdc *codec.Codec) {
|
||||
cdc.RegisterConcrete(ClientState{}, "ibc/client/tendermint/ClientState", nil)
|
||||
cdc.RegisterConcrete(ConsensusState{}, "ibc/client/tendermint/ConsensusState", nil)
|
||||
@ -24,3 +18,30 @@ func RegisterCodec(cdc *codec.Codec) {
|
||||
cdc.RegisterConcrete(&MsgUpdateClient{}, "ibc/client/tendermint/MsgUpdateClient", nil)
|
||||
cdc.RegisterConcrete(&MsgSubmitClientMisbehaviour{}, "ibc/client/tendermint/MsgSubmitClientMisbehaviour", nil)
|
||||
}
|
||||
|
||||
// RegisterInterfaces registers the tendermint concrete evidence and client-related
|
||||
// implementations and interfaces.
|
||||
func RegisterInterfaces(registry cdctypes.InterfaceRegistry) {
|
||||
registry.RegisterImplementations(
|
||||
(*clientexported.ClientState)(nil),
|
||||
&ClientState{},
|
||||
)
|
||||
}
|
||||
|
||||
var (
|
||||
amino = codec.New()
|
||||
|
||||
// SubModuleCdc references the global x/ibc/07-tendermint module codec. Note, the codec should
|
||||
// ONLY be used in certain instances of tests and for JSON encoding as Amino is
|
||||
// still used for that purpose.
|
||||
//
|
||||
// The actual codec used for serialization should be provided to x/ibc/07-tendermint and
|
||||
// defined at the application level.
|
||||
SubModuleCdc = codec.NewHybridCodec(amino, cdctypes.NewInterfaceRegistry())
|
||||
)
|
||||
|
||||
func init() {
|
||||
cryptocodec.RegisterCrypto(amino)
|
||||
RegisterCodec(amino)
|
||||
amino.Seal()
|
||||
}
|
||||
|
||||
@ -63,7 +63,8 @@ func (ev Evidence) String() string {
|
||||
|
||||
// Hash implements Evidence interface
|
||||
func (ev Evidence) Hash() tmbytes.HexBytes {
|
||||
bz := SubModuleCdc.MustMarshalBinaryBare(ev)
|
||||
// TODO use submodule cdc
|
||||
bz := amino.MustMarshalBinaryBare(ev)
|
||||
return tmhash.Sum(bz)
|
||||
}
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ func (suite *TendermintTestSuite) TestEvidence() {
|
||||
suite.Require().Equal(ev.GetClientID(), "gaiamainnet")
|
||||
suite.Require().Equal(ev.Route(), "client")
|
||||
suite.Require().Equal(ev.Type(), "client_misbehaviour")
|
||||
suite.Require().Equal(ev.Hash(), tmbytes.HexBytes(tmhash.Sum(ibctmtypes.SubModuleCdc.MustMarshalBinaryBare(ev))))
|
||||
suite.Require().Equal(ev.Hash(), tmbytes.HexBytes(tmhash.Sum(suite.aminoCdc.MustMarshalBinaryBare(ev))))
|
||||
suite.Require().Equal(ev.GetHeight(), int64(height))
|
||||
}
|
||||
|
||||
|
||||
25
x/ibc/07-tendermint/types/fraction.go
Normal file
25
x/ibc/07-tendermint/types/fraction.go
Normal file
@ -0,0 +1,25 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||
lite "github.com/tendermint/tendermint/lite2"
|
||||
)
|
||||
|
||||
// DefaultTrustLevel is the tendermint light client default trust level
|
||||
var DefaultTrustLevel = NewFractionFromTm(lite.DefaultTrustLevel)
|
||||
|
||||
// NewFractionFromTm returns a new Fraction instance from a tmmath.Fraction
|
||||
func NewFractionFromTm(f tmmath.Fraction) Fraction {
|
||||
return Fraction{
|
||||
Numerator: f.Numerator,
|
||||
Denominator: f.Denominator,
|
||||
}
|
||||
}
|
||||
|
||||
// ToTendermint converts Fraction to tmmath.Fraction
|
||||
func (f Fraction) ToTendermint() tmmath.Fraction {
|
||||
return tmmath.Fraction{
|
||||
Numerator: f.Numerator,
|
||||
Denominator: f.Denominator,
|
||||
}
|
||||
}
|
||||
@ -4,7 +4,6 @@ import (
|
||||
"time"
|
||||
|
||||
ics23 "github.com/confio/ics23/go"
|
||||
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||
lite "github.com/tendermint/tendermint/lite2"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
@ -24,16 +23,16 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
_ clientexported.MsgCreateClient = &MsgCreateClient{}
|
||||
_ clientexported.MsgUpdateClient = &MsgUpdateClient{}
|
||||
_ evidenceexported.MsgSubmitEvidence = &MsgSubmitClientMisbehaviour{}
|
||||
_ clientexported.MsgCreateClient = (*MsgCreateClient)(nil)
|
||||
_ clientexported.MsgUpdateClient = (*MsgUpdateClient)(nil)
|
||||
_ evidenceexported.MsgSubmitEvidence = (*MsgSubmitClientMisbehaviour)(nil)
|
||||
)
|
||||
|
||||
// MsgCreateClient defines a message to create an IBC client
|
||||
type MsgCreateClient struct {
|
||||
ClientID string `json:"client_id" yaml:"client_id"`
|
||||
Header Header `json:"header" yaml:"header"`
|
||||
TrustLevel tmmath.Fraction `json:"trust_level" yaml:"trust_level"`
|
||||
TrustLevel Fraction `json:"trust_level" yaml:"trust_level"`
|
||||
TrustingPeriod time.Duration `json:"trusting_period" yaml:"trusting_period"`
|
||||
UnbondingPeriod time.Duration `json:"unbonding_period" yaml:"unbonding_period"`
|
||||
MaxClockDrift time.Duration `json:"max_clock_drift" yaml:"max_clock_drift"`
|
||||
@ -51,7 +50,7 @@ func (msg *MsgCreateClient) ProtoMessage() {}
|
||||
|
||||
// NewMsgCreateClient creates a new MsgCreateClient instance
|
||||
func NewMsgCreateClient(
|
||||
id string, header Header, trustLevel tmmath.Fraction,
|
||||
id string, header Header, trustLevel Fraction,
|
||||
trustingPeriod, unbondingPeriod, maxClockDrift time.Duration,
|
||||
specs []*ics23.ProofSpec, signer sdk.AccAddress,
|
||||
) *MsgCreateClient {
|
||||
@ -83,8 +82,8 @@ func (msg MsgCreateClient) ValidateBasic() error {
|
||||
if msg.TrustingPeriod == 0 {
|
||||
return sdkerrors.Wrap(ErrInvalidTrustingPeriod, "duration cannot be 0")
|
||||
}
|
||||
if err := lite.ValidateTrustLevel(msg.TrustLevel); err != nil {
|
||||
return err
|
||||
if err := lite.ValidateTrustLevel(msg.TrustLevel.ToTendermint()); err != nil {
|
||||
return sdkerrors.Wrap(err, "invalid trust level for tendermint light client")
|
||||
}
|
||||
if msg.UnbondingPeriod == 0 {
|
||||
return sdkerrors.Wrap(ErrInvalidUnbondingPeriod, "duration cannot be 0")
|
||||
|
||||
@ -3,38 +3,36 @@ package types_test
|
||||
import (
|
||||
ics23 "github.com/confio/ics23/go"
|
||||
"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"
|
||||
"github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
|
||||
ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types"
|
||||
types "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types"
|
||||
commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types"
|
||||
)
|
||||
|
||||
func (suite *TendermintTestSuite) TestMsgCreateClientValidateBasic() {
|
||||
privKey := secp256k1.GenPrivKey()
|
||||
signer := sdk.AccAddress(privKey.PubKey().Address())
|
||||
invalidHeader := ibctmtypes.CreateTestHeader(suite.header.ChainID, height, suite.now, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
|
||||
invalidHeader := types.CreateTestHeader(suite.header.ChainID, height, suite.now, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
|
||||
invalidHeader.ValidatorSet = nil
|
||||
|
||||
cases := []struct {
|
||||
msg *ibctmtypes.MsgCreateClient
|
||||
msg *types.MsgCreateClient
|
||||
expPass bool
|
||||
errMsg string
|
||||
}{
|
||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), true, "success msg should pass"},
|
||||
{ibctmtypes.NewMsgCreateClient("(BADCHAIN)", suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "invalid client id passed"},
|
||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, math.Fraction{Numerator: 0, Denominator: 1}, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "invalid trust level"},
|
||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "zero trusting period passed"},
|
||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "zero unbonding period passed"},
|
||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), nil), false, "Empty address passed"},
|
||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, ibctmtypes.Header{}, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "nil header"},
|
||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, invalidHeader, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "invalid header"},
|
||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, []*ics23.ProofSpec{nil}, signer), false, "invalid proof specs"},
|
||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, nil, signer), false, "nil proof specs"},
|
||||
{ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "trusting period not less than unbonding period"},
|
||||
{types.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), true, "success msg should pass"},
|
||||
{types.NewMsgCreateClient("(BADCHAIN)", suite.header, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "invalid client id passed"},
|
||||
{types.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, types.Fraction{Numerator: 0, Denominator: 1}, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "invalid trust level"},
|
||||
{types.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, types.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "zero trusting period passed"},
|
||||
{types.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, types.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "zero unbonding period passed"},
|
||||
{types.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), nil), false, "Empty address passed"},
|
||||
{types.NewMsgCreateClient(exported.ClientTypeTendermint, types.Header{}, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "nil header"},
|
||||
{types.NewMsgCreateClient(exported.ClientTypeTendermint, invalidHeader, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "invalid header"},
|
||||
{types.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, []*ics23.ProofSpec{nil}, signer), false, "invalid proof specs"},
|
||||
{types.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, nil, signer), false, "nil proof specs"},
|
||||
{types.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "trusting period not less than unbonding period"},
|
||||
}
|
||||
|
||||
for i, tc := range cases {
|
||||
@ -52,13 +50,13 @@ func (suite *TendermintTestSuite) TestMsgUpdateClient() {
|
||||
signer := sdk.AccAddress(privKey.PubKey().Address())
|
||||
|
||||
cases := []struct {
|
||||
msg *ibctmtypes.MsgUpdateClient
|
||||
msg *types.MsgUpdateClient
|
||||
expPass bool
|
||||
errMsg string
|
||||
}{
|
||||
{ibctmtypes.NewMsgUpdateClient(exported.ClientTypeTendermint, ibctmtypes.Header{}, signer), true, "success msg should pass"},
|
||||
{ibctmtypes.NewMsgUpdateClient("(badClient)", ibctmtypes.Header{}, signer), false, "invalid client id passed"},
|
||||
{ibctmtypes.NewMsgUpdateClient(exported.ClientTypeTendermint, ibctmtypes.Header{}, nil), false, "Empty address passed"},
|
||||
{types.NewMsgUpdateClient(exported.ClientTypeTendermint, types.Header{}, signer), true, "success msg should pass"},
|
||||
{types.NewMsgUpdateClient("(badClient)", types.Header{}, signer), false, "invalid client id passed"},
|
||||
{types.NewMsgUpdateClient(exported.ClientTypeTendermint, types.Header{}, nil), false, "Empty address passed"},
|
||||
}
|
||||
|
||||
for i, tc := range cases {
|
||||
|
||||
831
x/ibc/07-tendermint/types/tendermint.pb.go
Normal file
831
x/ibc/07-tendermint/types/tendermint.pb.go
Normal file
@ -0,0 +1,831 @@
|
||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
||||
// source: ibc/tendermint/tendermint.proto
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
fmt "fmt"
|
||||
_go "github.com/confio/ics23/go"
|
||||
_ "github.com/gogo/protobuf/gogoproto"
|
||||
proto "github.com/gogo/protobuf/proto"
|
||||
github_com_gogo_protobuf_types "github.com/gogo/protobuf/types"
|
||||
_ "github.com/golang/protobuf/ptypes/duration"
|
||||
io "io"
|
||||
math "math"
|
||||
math_bits "math/bits"
|
||||
time "time"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
var _ = time.Kitchen
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
// A compilation error at this line likely means your copy of the
|
||||
// proto package needs to be updated.
|
||||
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
|
||||
|
||||
// ClientState from Tendermint tracks the current validator set, latest height,
|
||||
// and a possible frozen height.
|
||||
type ClientState struct {
|
||||
ChainID string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"`
|
||||
TrustLevel Fraction `protobuf:"bytes,2,opt,name=trust_level,json=trustLevel,proto3" json:"trust_level" yaml:"trust_level"`
|
||||
// duration of the period since the LastestTimestamp during which the
|
||||
// submitted headers are valid for upgrade
|
||||
TrustingPeriod time.Duration `protobuf:"bytes,3,opt,name=trusting_period,json=trustingPeriod,proto3,stdduration" json:"trusting_period" yaml:"trusting_period"`
|
||||
// duration of the staking unbonding period
|
||||
UnbondingPeriod time.Duration `protobuf:"bytes,4,opt,name=unbonding_period,json=unbondingPeriod,proto3,stdduration" json:"unbonding_period" yaml:"unbonding_period"`
|
||||
// defines how much new (untrusted) header's Time can drift into the future.
|
||||
MaxClockDrift time.Duration `protobuf:"bytes,5,opt,name=max_clock_drift,json=maxClockDrift,proto3,stdduration" json:"max_clock_drift" yaml:"max_clock_drift"`
|
||||
// Block height when the client was frozen due to a misbehaviour
|
||||
FrozenHeight uint64 `protobuf:"varint,6,opt,name=frozen_height,json=frozenHeight,proto3" json:"frozen_height,omitempty" yaml:"frozen_height"`
|
||||
// Latest height the client was updated to
|
||||
LatestHeight uint64 `protobuf:"varint,7,opt,name=latest_height,json=latestHeight,proto3" json:"latest_height,omitempty" yaml:"latest_height"`
|
||||
// Proof specifications used in verifying counterparty state
|
||||
ProofSpecs []*_go.ProofSpec `protobuf:"bytes,8,rep,name=proof_specs,json=proofSpecs,proto3" json:"proof_specs,omitempty" yaml:"proof_specs"`
|
||||
}
|
||||
|
||||
func (m *ClientState) Reset() { *m = ClientState{} }
|
||||
func (m *ClientState) String() string { return proto.CompactTextString(m) }
|
||||
func (*ClientState) ProtoMessage() {}
|
||||
func (*ClientState) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_76a953d5a747dd66, []int{0}
|
||||
}
|
||||
func (m *ClientState) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *ClientState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_ClientState.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *ClientState) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_ClientState.Merge(m, src)
|
||||
}
|
||||
func (m *ClientState) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *ClientState) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_ClientState.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_ClientState proto.InternalMessageInfo
|
||||
|
||||
// Fraction defines the protobuf message type for tmmath.Fraction
|
||||
type Fraction struct {
|
||||
Numerator int64 `protobuf:"varint,1,opt,name=numerator,proto3" json:"numerator,omitempty"`
|
||||
Denominator int64 `protobuf:"varint,2,opt,name=denominator,proto3" json:"denominator,omitempty"`
|
||||
}
|
||||
|
||||
func (m *Fraction) Reset() { *m = Fraction{} }
|
||||
func (m *Fraction) String() string { return proto.CompactTextString(m) }
|
||||
func (*Fraction) ProtoMessage() {}
|
||||
func (*Fraction) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_76a953d5a747dd66, []int{1}
|
||||
}
|
||||
func (m *Fraction) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *Fraction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_Fraction.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *Fraction) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_Fraction.Merge(m, src)
|
||||
}
|
||||
func (m *Fraction) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *Fraction) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_Fraction.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_Fraction proto.InternalMessageInfo
|
||||
|
||||
func (m *Fraction) GetNumerator() int64 {
|
||||
if m != nil {
|
||||
return m.Numerator
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Fraction) GetDenominator() int64 {
|
||||
if m != nil {
|
||||
return m.Denominator
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*ClientState)(nil), "ibc.tendermint.ClientState")
|
||||
proto.RegisterType((*Fraction)(nil), "ibc.tendermint.Fraction")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("ibc/tendermint/tendermint.proto", fileDescriptor_76a953d5a747dd66) }
|
||||
|
||||
var fileDescriptor_76a953d5a747dd66 = []byte{
|
||||
// 541 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0x31, 0x6f, 0xd3, 0x40,
|
||||
0x18, 0x8d, 0x9b, 0xb4, 0x49, 0xcf, 0x6d, 0x53, 0x99, 0xaa, 0x98, 0x08, 0xd9, 0x91, 0x91, 0x50,
|
||||
0x96, 0xda, 0x28, 0x95, 0x40, 0xaa, 0xc4, 0xe2, 0x44, 0x88, 0x20, 0x86, 0xc8, 0x15, 0x0b, 0x8b,
|
||||
0x65, 0x9f, 0xcf, 0xce, 0xa9, 0xf6, 0x9d, 0xe5, 0x3b, 0xa3, 0x94, 0x5f, 0xc0, 0xc8, 0x82, 0xc4,
|
||||
0xc8, 0xcf, 0xe9, 0xd8, 0x91, 0x29, 0xa0, 0xe4, 0x1f, 0xf4, 0x17, 0x20, 0x9f, 0x1d, 0xe2, 0x64,
|
||||
0x41, 0x4c, 0xbe, 0xf7, 0xde, 0xf7, 0xbe, 0x77, 0x9f, 0xfc, 0x1d, 0xd0, 0xb1, 0x0f, 0x2d, 0x8e,
|
||||
0x48, 0x80, 0xb2, 0x04, 0x13, 0x5e, 0x3b, 0x9a, 0x69, 0x46, 0x39, 0x55, 0x4e, 0xb0, 0x0f, 0xcd,
|
||||
0x0d, 0xdb, 0x7b, 0x04, 0x29, 0x09, 0x31, 0xb5, 0xd2, 0x8c, 0xd2, 0x90, 0x95, 0x45, 0x3d, 0x2d,
|
||||
0xa2, 0x34, 0x8a, 0x91, 0x25, 0x90, 0x9f, 0x87, 0x56, 0x90, 0x67, 0x1e, 0xc7, 0x94, 0x54, 0xfa,
|
||||
0x59, 0x44, 0x23, 0x2a, 0x8e, 0x56, 0x71, 0x2a, 0x59, 0xe3, 0xdb, 0x3e, 0x90, 0x47, 0x31, 0x46,
|
||||
0x84, 0x5f, 0x73, 0x8f, 0x23, 0xe5, 0x39, 0xe8, 0xc0, 0x99, 0x87, 0x89, 0x8b, 0x03, 0x55, 0xea,
|
||||
0x4b, 0x83, 0x43, 0x5b, 0x5e, 0x2e, 0xf4, 0xf6, 0xa8, 0xe0, 0x26, 0x63, 0xa7, 0x2d, 0xc4, 0x49,
|
||||
0xa0, 0x7c, 0x00, 0x32, 0xcf, 0x72, 0xc6, 0xdd, 0x18, 0x7d, 0x42, 0xb1, 0xba, 0xd7, 0x97, 0x06,
|
||||
0xf2, 0x50, 0x35, 0xb7, 0x2f, 0x6a, 0xbe, 0xc9, 0x3c, 0x58, 0x5c, 0xc1, 0xee, 0xdd, 0x2d, 0xf4,
|
||||
0xc6, 0xc3, 0x42, 0x57, 0x6e, 0xbd, 0x24, 0xbe, 0x32, 0x6a, 0x56, 0xc3, 0x01, 0x02, 0xbd, 0x2f,
|
||||
0x80, 0x12, 0x82, 0xae, 0x40, 0x98, 0x44, 0x6e, 0x8a, 0x32, 0x4c, 0x03, 0xb5, 0x29, 0x5a, 0x3f,
|
||||
0x31, 0xcb, 0xf1, 0xcc, 0xf5, 0x78, 0xe6, 0xb8, 0x1a, 0xcf, 0x36, 0xaa, 0xde, 0xe7, 0xb5, 0xde,
|
||||
0x1b, 0xbf, 0xf1, 0xfd, 0x97, 0x2e, 0x39, 0x27, 0x6b, 0x76, 0x2a, 0x48, 0x05, 0x83, 0xd3, 0x9c,
|
||||
0xf8, 0x94, 0x04, 0xb5, 0xa0, 0xd6, 0xbf, 0x82, 0x9e, 0x55, 0x41, 0x8f, 0xcb, 0xa0, 0xdd, 0x06,
|
||||
0x65, 0x52, 0xf7, 0x2f, 0x5d, 0x45, 0x21, 0xd0, 0x4d, 0xbc, 0xb9, 0x0b, 0x63, 0x0a, 0x6f, 0xdc,
|
||||
0x20, 0xc3, 0x21, 0x57, 0xf7, 0xff, 0x73, 0xa4, 0x1d, 0x7f, 0x19, 0x74, 0x9c, 0x78, 0xf3, 0x51,
|
||||
0x41, 0x8e, 0x0b, 0x4e, 0x79, 0x0d, 0x8e, 0xc3, 0x8c, 0x7e, 0x46, 0xc4, 0x9d, 0x21, 0x1c, 0xcd,
|
||||
0xb8, 0x7a, 0xd0, 0x97, 0x06, 0x2d, 0x5b, 0x7d, 0x58, 0xe8, 0x67, 0x65, 0x97, 0x2d, 0xd9, 0x70,
|
||||
0x8e, 0x4a, 0xfc, 0x56, 0xc0, 0xc2, 0x1e, 0x7b, 0x1c, 0x31, 0xbe, 0xb6, 0xb7, 0x77, 0xed, 0x5b,
|
||||
0xb2, 0xe1, 0x1c, 0x95, 0xb8, 0xb2, 0x4f, 0x80, 0x2c, 0x96, 0xd1, 0x65, 0x29, 0x82, 0x4c, 0xed,
|
||||
0xf4, 0x9b, 0x03, 0x79, 0x78, 0x6a, 0x62, 0xc8, 0x86, 0x97, 0xe6, 0xb4, 0x50, 0xae, 0x53, 0x04,
|
||||
0xed, 0xf3, 0xcd, 0x0a, 0xd4, 0xca, 0x0d, 0x07, 0xa4, 0xeb, 0x12, 0x76, 0xd5, 0xfa, 0xf2, 0x43,
|
||||
0x6f, 0x18, 0xef, 0x40, 0x67, 0xbd, 0x3c, 0xca, 0x53, 0x70, 0x48, 0xf2, 0x04, 0x65, 0x1e, 0xa7,
|
||||
0x99, 0x58, 0xca, 0xa6, 0xb3, 0x21, 0x94, 0x3e, 0x90, 0x03, 0x44, 0x68, 0x82, 0x89, 0xd0, 0xf7,
|
||||
0x84, 0x5e, 0xa7, 0xec, 0xe9, 0xdd, 0x52, 0x93, 0xee, 0x97, 0x9a, 0xf4, 0x7b, 0xa9, 0x49, 0x5f,
|
||||
0x57, 0x5a, 0xe3, 0x7e, 0xa5, 0x35, 0x7e, 0xae, 0xb4, 0xc6, 0xc7, 0x97, 0x11, 0xe6, 0xb3, 0xdc,
|
||||
0x37, 0x21, 0x4d, 0x2c, 0x48, 0x59, 0x42, 0x59, 0xf5, 0xb9, 0x60, 0xc1, 0x8d, 0x35, 0xb7, 0x8a,
|
||||
0x87, 0xf9, 0xe2, 0xd5, 0x45, 0xfd, 0x6d, 0xde, 0xa6, 0x88, 0xf9, 0x07, 0xe2, 0x97, 0x5d, 0xfe,
|
||||
0x09, 0x00, 0x00, 0xff, 0xff, 0x5b, 0xb0, 0x3c, 0xfa, 0xba, 0x03, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (m *ClientState) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *ClientState) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *ClientState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.ProofSpecs) > 0 {
|
||||
for iNdEx := len(m.ProofSpecs) - 1; iNdEx >= 0; iNdEx-- {
|
||||
{
|
||||
size, err := m.ProofSpecs[iNdEx].MarshalToSizedBuffer(dAtA[:i])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i -= size
|
||||
i = encodeVarintTendermint(dAtA, i, uint64(size))
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x42
|
||||
}
|
||||
}
|
||||
if m.LatestHeight != 0 {
|
||||
i = encodeVarintTendermint(dAtA, i, uint64(m.LatestHeight))
|
||||
i--
|
||||
dAtA[i] = 0x38
|
||||
}
|
||||
if m.FrozenHeight != 0 {
|
||||
i = encodeVarintTendermint(dAtA, i, uint64(m.FrozenHeight))
|
||||
i--
|
||||
dAtA[i] = 0x30
|
||||
}
|
||||
n1, err1 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.MaxClockDrift, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxClockDrift):])
|
||||
if err1 != nil {
|
||||
return 0, err1
|
||||
}
|
||||
i -= n1
|
||||
i = encodeVarintTendermint(dAtA, i, uint64(n1))
|
||||
i--
|
||||
dAtA[i] = 0x2a
|
||||
n2, err2 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.UnbondingPeriod, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingPeriod):])
|
||||
if err2 != nil {
|
||||
return 0, err2
|
||||
}
|
||||
i -= n2
|
||||
i = encodeVarintTendermint(dAtA, i, uint64(n2))
|
||||
i--
|
||||
dAtA[i] = 0x22
|
||||
n3, err3 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TrustingPeriod, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TrustingPeriod):])
|
||||
if err3 != nil {
|
||||
return 0, err3
|
||||
}
|
||||
i -= n3
|
||||
i = encodeVarintTendermint(dAtA, i, uint64(n3))
|
||||
i--
|
||||
dAtA[i] = 0x1a
|
||||
{
|
||||
size, err := m.TrustLevel.MarshalToSizedBuffer(dAtA[:i])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i -= size
|
||||
i = encodeVarintTendermint(dAtA, i, uint64(size))
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
if len(m.ChainID) > 0 {
|
||||
i -= len(m.ChainID)
|
||||
copy(dAtA[i:], m.ChainID)
|
||||
i = encodeVarintTendermint(dAtA, i, uint64(len(m.ChainID)))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *Fraction) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *Fraction) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *Fraction) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if m.Denominator != 0 {
|
||||
i = encodeVarintTendermint(dAtA, i, uint64(m.Denominator))
|
||||
i--
|
||||
dAtA[i] = 0x10
|
||||
}
|
||||
if m.Numerator != 0 {
|
||||
i = encodeVarintTendermint(dAtA, i, uint64(m.Numerator))
|
||||
i--
|
||||
dAtA[i] = 0x8
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func encodeVarintTendermint(dAtA []byte, offset int, v uint64) int {
|
||||
offset -= sovTendermint(v)
|
||||
base := offset
|
||||
for v >= 1<<7 {
|
||||
dAtA[offset] = uint8(v&0x7f | 0x80)
|
||||
v >>= 7
|
||||
offset++
|
||||
}
|
||||
dAtA[offset] = uint8(v)
|
||||
return base
|
||||
}
|
||||
func (m *ClientState) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
l = len(m.ChainID)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovTendermint(uint64(l))
|
||||
}
|
||||
l = m.TrustLevel.Size()
|
||||
n += 1 + l + sovTendermint(uint64(l))
|
||||
l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TrustingPeriod)
|
||||
n += 1 + l + sovTendermint(uint64(l))
|
||||
l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingPeriod)
|
||||
n += 1 + l + sovTendermint(uint64(l))
|
||||
l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxClockDrift)
|
||||
n += 1 + l + sovTendermint(uint64(l))
|
||||
if m.FrozenHeight != 0 {
|
||||
n += 1 + sovTendermint(uint64(m.FrozenHeight))
|
||||
}
|
||||
if m.LatestHeight != 0 {
|
||||
n += 1 + sovTendermint(uint64(m.LatestHeight))
|
||||
}
|
||||
if len(m.ProofSpecs) > 0 {
|
||||
for _, e := range m.ProofSpecs {
|
||||
l = e.Size()
|
||||
n += 1 + l + sovTendermint(uint64(l))
|
||||
}
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *Fraction) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if m.Numerator != 0 {
|
||||
n += 1 + sovTendermint(uint64(m.Numerator))
|
||||
}
|
||||
if m.Denominator != 0 {
|
||||
n += 1 + sovTendermint(uint64(m.Denominator))
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func sovTendermint(x uint64) (n int) {
|
||||
return (math_bits.Len64(x|1) + 6) / 7
|
||||
}
|
||||
func sozTendermint(x uint64) (n int) {
|
||||
return sovTendermint(uint64((x << 1) ^ uint64((int64(x) >> 63))))
|
||||
}
|
||||
func (m *ClientState) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: ClientState: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: ClientState: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field ChainID", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.ChainID = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
case 2:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field TrustLevel", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if err := m.TrustLevel.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 3:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field TrustingPeriod", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TrustingPeriod, dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 4:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field UnbondingPeriod", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.UnbondingPeriod, dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 5:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field MaxClockDrift", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.MaxClockDrift, dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 6:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field FrozenHeight", wireType)
|
||||
}
|
||||
m.FrozenHeight = 0
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
m.FrozenHeight |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 7:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field LatestHeight", wireType)
|
||||
}
|
||||
m.LatestHeight = 0
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
m.LatestHeight |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 8:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field ProofSpecs", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.ProofSpecs = append(m.ProofSpecs, &_go.ProofSpec{})
|
||||
if err := m.ProofSpecs[len(m.ProofSpecs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipTendermint(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if skippy < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
if (iNdEx + skippy) < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *Fraction) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: Fraction: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: Fraction: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Numerator", wireType)
|
||||
}
|
||||
m.Numerator = 0
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
m.Numerator |= int64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 2:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Denominator", wireType)
|
||||
}
|
||||
m.Denominator = 0
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
m.Denominator |= int64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipTendermint(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if skippy < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
if (iNdEx + skippy) < 0 {
|
||||
return ErrInvalidLengthTendermint
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func skipTendermint(dAtA []byte) (n int, err error) {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
depth := 0
|
||||
for iNdEx < l {
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= (uint64(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
wireType := int(wire & 0x7)
|
||||
switch wireType {
|
||||
case 0:
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx++
|
||||
if dAtA[iNdEx-1] < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 1:
|
||||
iNdEx += 8
|
||||
case 2:
|
||||
var length int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowTendermint
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
length |= (int(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if length < 0 {
|
||||
return 0, ErrInvalidLengthTendermint
|
||||
}
|
||||
iNdEx += length
|
||||
case 3:
|
||||
depth++
|
||||
case 4:
|
||||
if depth == 0 {
|
||||
return 0, ErrUnexpectedEndOfGroupTendermint
|
||||
}
|
||||
depth--
|
||||
case 5:
|
||||
iNdEx += 4
|
||||
default:
|
||||
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
|
||||
}
|
||||
if iNdEx < 0 {
|
||||
return 0, ErrInvalidLengthTendermint
|
||||
}
|
||||
if depth == 0 {
|
||||
return iNdEx, nil
|
||||
}
|
||||
}
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
|
||||
var (
|
||||
ErrInvalidLengthTendermint = fmt.Errorf("proto: negative length found during unmarshaling")
|
||||
ErrIntOverflowTendermint = fmt.Errorf("proto: integer overflow")
|
||||
ErrUnexpectedEndOfGroupTendermint = fmt.Errorf("proto: unexpected end of group")
|
||||
)
|
||||
@ -118,7 +118,7 @@ func checkValidity(
|
||||
err := lite.Verify(
|
||||
clientState.GetChainID(), &signedHeader,
|
||||
consState.ValidatorSet, &header.SignedHeader, header.ValidatorSet,
|
||||
clientState.TrustingPeriod, currentTimestamp, clientState.MaxClockDrift, clientState.TrustLevel,
|
||||
clientState.TrustingPeriod, currentTimestamp, clientState.MaxClockDrift, clientState.TrustLevel.ToTendermint(),
|
||||
)
|
||||
if err != nil {
|
||||
return sdkerrors.Wrap(err, "failed to verify header")
|
||||
|
||||
@ -4,19 +4,18 @@ import (
|
||||
"bytes"
|
||||
"time"
|
||||
|
||||
lite "github.com/tendermint/tendermint/lite2"
|
||||
tmtypes "github.com/tendermint/tendermint/types"
|
||||
|
||||
tendermint "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint"
|
||||
ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types"
|
||||
types "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types"
|
||||
commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types"
|
||||
)
|
||||
|
||||
func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||
var (
|
||||
clientState ibctmtypes.ClientState
|
||||
consensusState ibctmtypes.ConsensusState
|
||||
newHeader ibctmtypes.Header
|
||||
clientState types.ClientState
|
||||
consensusState types.ConsensusState
|
||||
newHeader types.Header
|
||||
currentTime time.Time
|
||||
)
|
||||
|
||||
@ -55,9 +54,9 @@ 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, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = ibctmtypes.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers)
|
||||
clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = types.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers)
|
||||
currentTime = suite.now
|
||||
},
|
||||
expPass: true,
|
||||
@ -65,9 +64,9 @@ 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, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = ibctmtypes.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+5, suite.headerTime, bothValSet, bothSigners)
|
||||
clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = types.CreateTestHeader(chainID, height+5, suite.headerTime, bothValSet, bothSigners)
|
||||
currentTime = suite.now
|
||||
},
|
||||
expPass: true,
|
||||
@ -75,9 +74,9 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||
{
|
||||
name: "successful update with next height and different validator set",
|
||||
setup: func() {
|
||||
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = ibctmtypes.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, bothValSet.Hash(), suite.valSet)
|
||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, bothValSet, bothSigners)
|
||||
clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, bothValSet.Hash(), suite.valSet)
|
||||
newHeader = types.CreateTestHeader(chainID, height+1, suite.headerTime, bothValSet, bothSigners)
|
||||
currentTime = suite.now
|
||||
},
|
||||
expPass: true,
|
||||
@ -85,9 +84,9 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||
{
|
||||
name: "successful update for a previous height",
|
||||
setup: func() {
|
||||
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = ibctmtypes.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height-3, bothValSet.Hash(), suite.valSet)
|
||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height-1, suite.headerTime, bothValSet, bothSigners)
|
||||
clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height-3, bothValSet.Hash(), suite.valSet)
|
||||
newHeader = types.CreateTestHeader(chainID, height-1, suite.headerTime, bothValSet, bothSigners)
|
||||
currentTime = suite.now
|
||||
},
|
||||
expPass: true,
|
||||
@ -95,9 +94,9 @@ 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, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = ibctmtypes.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, bothValSet, bothSigners)
|
||||
clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = types.CreateTestHeader(chainID, height+1, suite.headerTime, bothValSet, bothSigners)
|
||||
currentTime = suite.now
|
||||
},
|
||||
expPass: false,
|
||||
@ -105,9 +104,9 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||
{
|
||||
name: "unsuccessful update with next height: update header mismatches different nextValSetHash",
|
||||
setup: func() {
|
||||
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = ibctmtypes.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, bothValSet.Hash(), suite.valSet)
|
||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers)
|
||||
clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, bothValSet.Hash(), suite.valSet)
|
||||
newHeader = types.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers)
|
||||
currentTime = suite.now
|
||||
},
|
||||
expPass: false,
|
||||
@ -115,9 +114,9 @@ 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, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = ibctmtypes.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+5, suite.headerTime, altValSet, altSigners)
|
||||
clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = types.CreateTestHeader(chainID, height+5, suite.headerTime, altValSet, altSigners)
|
||||
currentTime = suite.now
|
||||
},
|
||||
expPass: false,
|
||||
@ -125,9 +124,9 @@ 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, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = ibctmtypes.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers)
|
||||
clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = types.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers)
|
||||
// make current time pass trusting period from last timestamp on clientstate
|
||||
currentTime = suite.now.Add(trustingPeriod)
|
||||
},
|
||||
@ -136,9 +135,9 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||
{
|
||||
name: "unsuccessful update: header timestamp is past current timestamp",
|
||||
setup: func() {
|
||||
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = ibctmtypes.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.now.Add(time.Minute), suite.valSet, signers)
|
||||
clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = types.CreateTestHeader(chainID, height+1, suite.now.Add(time.Minute), suite.valSet, signers)
|
||||
currentTime = suite.now
|
||||
},
|
||||
expPass: false,
|
||||
@ -146,9 +145,9 @@ 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, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = ibctmtypes.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.clientTime, suite.valSet, signers)
|
||||
clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = types.CreateTestHeader(chainID, height+1, suite.clientTime, suite.valSet, signers)
|
||||
currentTime = suite.now
|
||||
},
|
||||
expPass: false,
|
||||
@ -156,9 +155,9 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||
{
|
||||
name: "header basic validation failed",
|
||||
setup: func() {
|
||||
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = ibctmtypes.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers)
|
||||
clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
newHeader = types.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
|
||||
currentTime = suite.now
|
||||
@ -168,10 +167,10 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||
{
|
||||
name: "header height < consensus height",
|
||||
setup: func() {
|
||||
clientState = ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height+5, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = ibctmtypes.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height+5, commitmenttypes.GetSDKSpecs())
|
||||
consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.AppHash), height, suite.valSet.Hash(), suite.valSet)
|
||||
// Make new header at height less than latest client state
|
||||
newHeader = ibctmtypes.CreateTestHeader(chainID, height-1, suite.headerTime, suite.valSet, signers)
|
||||
newHeader = types.CreateTestHeader(chainID, height-1, suite.headerTime, suite.valSet, signers)
|
||||
currentTime = suite.now
|
||||
},
|
||||
expPass: false,
|
||||
@ -183,7 +182,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() {
|
||||
// setup test
|
||||
tc.setup()
|
||||
|
||||
expectedConsensus := ibctmtypes.ConsensusState{
|
||||
expectedConsensus := types.ConsensusState{
|
||||
Height: uint64(newHeader.Height),
|
||||
Timestamp: newHeader.Time,
|
||||
Root: commitmenttypes.NewMerkleRoot(newHeader.AppHash),
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
package ibc_test
|
||||
|
||||
import (
|
||||
lite "github.com/tendermint/tendermint/lite2"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
|
||||
clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/02-client/types"
|
||||
connectiontypes "github.com/cosmos/cosmos-sdk/x/ibc/03-connection/types"
|
||||
@ -32,7 +30,7 @@ func (suite *IBCTestSuite) TestValidateGenesis() {
|
||||
ClientGenesis: clienttypes.NewGenesisState(
|
||||
[]clienttypes.GenesisClientState{
|
||||
clienttypes.NewGenesisClientState(
|
||||
clientID, ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
),
|
||||
clienttypes.NewGenesisClientState(
|
||||
exported.ClientTypeLocalHost, localhosttypes.NewClientState("chaindID", 10),
|
||||
@ -92,7 +90,7 @@ func (suite *IBCTestSuite) TestValidateGenesis() {
|
||||
ClientGenesis: clienttypes.NewGenesisState(
|
||||
[]clienttypes.GenesisClientState{
|
||||
clienttypes.NewGenesisClientState(
|
||||
clientID, ibctmtypes.NewClientState(chainID, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
|
||||
),
|
||||
clienttypes.NewGenesisClientState(
|
||||
exported.ClientTypeLocalHost, localhosttypes.NewClientState("(chaindID)", 0),
|
||||
|
||||
@ -13,8 +13,6 @@ import (
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/crypto/secp256k1"
|
||||
"github.com/tendermint/tendermint/crypto/tmhash"
|
||||
tmmath "github.com/tendermint/tendermint/libs/math"
|
||||
lite "github.com/tendermint/tendermint/lite2"
|
||||
tmtypes "github.com/tendermint/tendermint/types"
|
||||
"github.com/tendermint/tendermint/version"
|
||||
|
||||
@ -52,9 +50,9 @@ const (
|
||||
|
||||
// Default params variables used to create a TM client
|
||||
var (
|
||||
DefaultTrustLevel tmmath.Fraction = lite.DefaultTrustLevel
|
||||
TestHash = []byte("TESTING HASH")
|
||||
TestCoin = sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100))
|
||||
DefaultTrustLevel ibctmtypes.Fraction = ibctmtypes.DefaultTrustLevel
|
||||
TestHash = []byte("TESTING HASH")
|
||||
TestCoin = sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100))
|
||||
|
||||
ConnectionVersion = connectiontypes.GetCompatibleEncodedVersions()[0]
|
||||
)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user