migrate tm evidence to proto (#7145)

* migrate tm evidence to proto

* Update proto/ibc/tendermint/tendermint.proto

Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>
Co-authored-by: Aditya <adityasripal@gmail.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
This commit is contained in:
colin axnér 2020-08-24 23:12:47 +02:00 committed by GitHub
parent 49e4d059ae
commit d52c17bb74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 532 additions and 196 deletions

View File

@ -68,6 +68,26 @@ message ConsensusState {
];
}
// Evidence is a wrapper over two conflicting Headers
// that implements Evidence interface expected by ICS-02
message Evidence {
option (gogoproto.goproto_getters) = false;
option (gogoproto.goproto_stringer) = false;
string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""];
string chain_id = 2 [(gogoproto.moretags) = "yaml:\"chain_id\""];
Header header_1 = 3 [
(gogoproto.customname) = "Header1",
(gogoproto.nullable) = false,
(gogoproto.moretags) = "yaml:\"header_1\""
];
Header header_2 = 4 [
(gogoproto.customname) = "Header2",
(gogoproto.nullable) = false,
(gogoproto.moretags) = "yaml:\"header_2\""
];
}
// Header defines the Tendermint client consensus Header.
// It encapsulates all the information necessary to update from a trusted
// Tendermint ConsensusState. The inclusion of TrustedHeight and

View File

@ -267,17 +267,17 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
testCases := []struct {
name string
evidence ibctmtypes.Evidence
evidence *ibctmtypes.Evidence
malleate func() error
expPass bool
}{
{
"trusting period misbehavior should pass",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testChainID, testClientHeight, testClientHeight, altTime, bothValSet, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testChainID, testClientHeight, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
ChainID: testChainID,
ClientID: testClientID,
ChainId: testChainID,
ClientId: testClientID,
},
func() error {
suite.consensusState.NextValidatorsHash = bothValsHash
@ -290,11 +290,11 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
},
{
"misbehavior at later height should pass",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testChainID, testClientHeight+5, testClientHeight, altTime, bothValSet, valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testChainID, testClientHeight+5, testClientHeight, suite.ctx.BlockTime(), bothValSet, valSet, bothSigners),
ChainID: testChainID,
ClientID: testClientID,
ChainId: testChainID,
ClientId: testClientID,
},
func() error {
suite.consensusState.NextValidatorsHash = valsHash
@ -318,11 +318,11 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
},
{
"misbehavior at later height with different trusted heights should pass",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testChainID, testClientHeight+5, testClientHeight, altTime, bothValSet, valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testChainID, testClientHeight+5, testClientHeight+3, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
ChainID: testChainID,
ClientID: testClientID,
ChainId: testChainID,
ClientId: testClientID,
},
func() error {
suite.consensusState.NextValidatorsHash = valsHash
@ -346,11 +346,11 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
},
{
"misbehaviour fails validatebasic",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testChainID, testClientHeight+1, testClientHeight, altTime, bothValSet, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testChainID, testClientHeight, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
ChainID: testChainID,
ClientID: testClientID,
ChainId: testChainID,
ClientId: testClientID,
},
func() error {
suite.consensusState.NextValidatorsHash = bothValsHash
@ -363,11 +363,11 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
},
{
"trusted ConsensusState1 not found",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testChainID, testClientHeight+5, testClientHeight+3, altTime, bothValSet, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testChainID, testClientHeight+5, testClientHeight, suite.ctx.BlockTime(), bothValSet, valSet, bothSigners),
ChainID: testChainID,
ClientID: testClientID,
ChainId: testChainID,
ClientId: testClientID,
},
func() error {
suite.consensusState.NextValidatorsHash = valsHash
@ -380,11 +380,11 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
},
{
"trusted ConsensusState2 not found",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testChainID, testClientHeight+5, testClientHeight, altTime, bothValSet, valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testChainID, testClientHeight+5, testClientHeight+3, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
ChainID: testChainID,
ClientID: testClientID,
ChainId: testChainID,
ClientId: testClientID,
},
func() error {
suite.consensusState.NextValidatorsHash = valsHash
@ -398,17 +398,17 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
{
"client state not found",
ibctmtypes.Evidence{},
&ibctmtypes.Evidence{},
func() error { return nil },
false,
},
{
"client already frozen at earlier height",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testChainID, testClientHeight, testClientHeight, altTime, bothValSet, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testChainID, testClientHeight, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
ChainID: testChainID,
ClientID: testClientID,
ChainId: testChainID,
ClientId: testClientID,
},
func() error {
suite.consensusState.NextValidatorsHash = bothValsHash
@ -425,11 +425,11 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
{
"misbehaviour check failed",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testChainID, testClientHeight, testClientHeight, altTime, bothValSet, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testChainID, testClientHeight, testClientHeight, suite.ctx.BlockTime(), altValSet, bothValSet, altSigners),
ChainID: testChainID,
ClientID: testClientID,
ChainId: testChainID,
ClientId: testClientID,
},
func() error {
clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs())

View File

@ -4,6 +4,7 @@ import (
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
evidenceexported "github.com/cosmos/cosmos-sdk/x/evidence/exported"
clientexported "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
)
@ -30,6 +31,10 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
(*clientexported.ConsensusState)(nil),
&ConsensusState{},
)
registry.RegisterImplementations(
(*evidenceexported.Evidence)(nil),
&Evidence{},
)
}
var (

View File

@ -23,13 +23,15 @@ var (
_ clientexported.Misbehaviour = Evidence{}
)
// Evidence is a wrapper over tendermint's DuplicateVoteEvidence
// that implements Evidence interface expected by ICS-02
type Evidence struct {
ClientID string `json:"client_id" yaml:"client_id"`
Header1 Header `json:"header1" yaml:"header1"`
Header2 Header `json:"header2" yaml:"header2"`
ChainID string `json:"chain_id" yaml:"chain_id"`
// NewEvidence creates a new Evidence instance.
func NewEvidence(clientID, chainID string, header1, header2 Header) *Evidence {
return &Evidence{
ClientId: clientID,
ChainId: chainID,
Header1: header1,
Header2: header2,
}
}
// ClientType is Tendermint light client
@ -39,7 +41,7 @@ func (ev Evidence) ClientType() clientexported.ClientType {
// GetClientID returns the ID of the client that committed a misbehaviour.
func (ev Evidence) GetClientID() string {
return ev.ClientID
return ev.ClientId
}
// Route implements Evidence interface
@ -64,8 +66,7 @@ func (ev Evidence) String() string {
// Hash implements Evidence interface
func (ev Evidence) Hash() tmbytes.HexBytes {
// TODO use submodule cdc
bz := amino.MustMarshalBinaryBare(ev)
bz := SubModuleCdc.MustMarshalBinaryBare(&ev)
return tmhash.Sum(bz)
}
@ -99,18 +100,18 @@ func (ev Evidence) ValidateBasic() error {
return sdkerrors.Wrap(ErrInvalidValidatorSet, "trusted validator set in Header2 cannot be empty")
}
if err := host.ClientIdentifierValidator(ev.ClientID); err != nil {
if err := host.ClientIdentifierValidator(ev.ClientId); err != nil {
return sdkerrors.Wrap(err, "evidence client ID is invalid")
}
// ValidateBasic on both validators
if err := ev.Header1.ValidateBasic(ev.ChainID); err != nil {
if err := ev.Header1.ValidateBasic(ev.ChainId); err != nil {
return sdkerrors.Wrap(
clienttypes.ErrInvalidEvidence,
sdkerrors.Wrap(err, "header 1 failed validation").Error(),
)
}
if err := ev.Header2.ValidateBasic(ev.ChainID); err != nil {
if err := ev.Header2.ValidateBasic(ev.ChainId); err != nil {
return sdkerrors.Wrap(
clienttypes.ErrInvalidEvidence,
sdkerrors.Wrap(err, "header 2 failed validation").Error(),
@ -134,10 +135,10 @@ func (ev Evidence) ValidateBasic() error {
if blockID1.Equals(*blockID2) {
return sdkerrors.Wrap(clienttypes.ErrInvalidEvidence, "headers blockIDs are not equal")
}
if err := ValidCommit(ev.ChainID, ev.Header1.Commit, ev.Header1.ValidatorSet); err != nil {
if err := ValidCommit(ev.ChainId, ev.Header1.Commit, ev.Header1.ValidatorSet); err != nil {
return err
}
if err := ValidCommit(ev.ChainID, ev.Header2.Commit, ev.Header2.ValidatorSet); err != nil {
if err := ValidCommit(ev.ChainId, ev.Header2.Commit, ev.Header2.ValidatorSet); err != nil {
return err
}
return nil

View File

@ -4,6 +4,7 @@ import (
"time"
"github.com/tendermint/tendermint/crypto/tmhash"
tmbytes "github.com/tendermint/tendermint/libs/bytes"
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
tmtypes "github.com/tendermint/tendermint/types"
@ -15,19 +16,18 @@ import (
func (suite *TendermintTestSuite) TestEvidence() {
signers := []tmtypes.PrivValidator{suite.privVal}
ev := ibctmtypes.Evidence{
ev := &ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, height-1, suite.now, suite.valSet, suite.valSet, signers),
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
}
suite.Require().Equal(ev.ClientType(), clientexported.Tendermint)
suite.Require().Equal(ev.GetClientID(), clientID)
suite.Require().Equal(ev.Route(), "client")
suite.Require().Equal(ev.Type(), "client_misbehaviour")
// uncomment when evidence is migrated to proto
// suite.Require().Equal(ev.Hash(), tmbytes.HexBytes(tmhash.Sum(suite.aminoCdc.MustMarshalBinaryBare(ev))))
suite.Require().Equal(ev.Hash(), tmbytes.HexBytes(tmhash.Sum(suite.cdc.MustMarshalBinaryBare(ev))))
suite.Require().Equal(ev.GetHeight(), int64(height))
}
@ -53,138 +53,138 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
testCases := []struct {
name string
evidence ibctmtypes.Evidence
evidence *ibctmtypes.Evidence
malleateEvidence func(ev *ibctmtypes.Evidence) error
expPass bool
}{
{
"valid evidence",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, height-1, suite.now.Add(time.Minute), suite.valSet, suite.valSet, signers),
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error { return nil },
true,
},
{
"valid evidence with different trusted headers",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, height-3, suite.now.Add(time.Minute), suite.valSet, bothValSet, signers),
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error { return nil },
true,
},
{
"trusted height is 0 in Header1",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(chainID, height, 0, suite.now.Add(time.Minute), suite.valSet, suite.valSet, signers),
Header2: suite.header,
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error { return nil },
false,
},
{
"trusted height is 0 in Header2",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, 0, suite.now.Add(time.Minute), suite.valSet, suite.valSet, signers),
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error { return nil },
false,
},
{
"trusted valset is nil in Header1",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(chainID, height, height-1, suite.now.Add(time.Minute), suite.valSet, nil, signers),
Header2: suite.header,
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error { return nil },
false,
},
{
"trusted valset is nil in Header2",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, height-1, suite.now.Add(time.Minute), suite.valSet, nil, signers),
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error { return nil },
false,
},
{
"invalid client ID ",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, height-1, suite.now, suite.valSet, suite.valSet, signers),
ChainID: chainID,
ClientID: "GAIA",
ChainId: chainID,
ClientId: "GAIA",
},
func(ev *ibctmtypes.Evidence) error { return nil },
false,
},
{
"wrong chainID on header1",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader("ethermint", height, height-1, suite.now, suite.valSet, suite.valSet, signers),
ChainID: "ethermint",
ClientID: clientID,
ChainId: "ethermint",
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error { return nil },
false,
},
{
"wrong chainID on header2",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader("ethermint", height, height-1, suite.now, suite.valSet, suite.valSet, signers),
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error { return nil },
false,
},
{
"mismatched heights",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, 6, 4, suite.now, suite.valSet, suite.valSet, signers),
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error { return nil },
false,
},
{
"same block id",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: suite.header,
Header2: suite.header,
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error { return nil },
false,
},
{
"header 1 doesn't have 2/3 majority",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(chainID, height, height-1, suite.now, bothValSet, suite.valSet, bothSigners),
Header2: suite.header,
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error {
// voteSet contains only altVal which is less than 2/3 of total power (height/1height)
@ -202,11 +202,11 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
},
{
"header 2 doesn't have 2/3 majority",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, height-1, suite.now, bothValSet, suite.valSet, bothSigners),
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error {
// voteSet contains only altVal which is less than 2/3 of total power (height/1height)
@ -224,11 +224,11 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
},
{
"validators sign off on wrong commit",
ibctmtypes.Evidence{
&ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, height-1, suite.now, bothValSet, suite.valSet, bothSigners),
ChainID: chainID,
ClientID: clientID,
ChainId: chainID,
ClientId: clientID,
},
func(ev *ibctmtypes.Evidence) error {
tmBlockID := ibctmtypes.MakeBlockID(tmhash.Sum([]byte("other_hash")), 3, tmhash.Sum([]byte("other_partset")))
@ -242,7 +242,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
for i, tc := range testCases {
tc := tc
err := tc.malleateEvidence(&tc.evidence)
err := tc.malleateEvidence(tc.evidence)
suite.Require().NoError(err)
if tc.expPass {

View File

@ -32,9 +32,9 @@ func (cs ClientState) CheckMisbehaviourAndUpdateState(
"client is already frozen at earlier height %d than misbehaviour height %d", cs.FrozenHeight, misbehaviour.GetHeight())
}
tmEvidence, ok := misbehaviour.(Evidence)
tmEvidence, ok := misbehaviour.(*Evidence)
if !ok {
return nil, sdkerrors.Wrapf(clienttypes.ErrInvalidClientType, "expected type %T, got %T", misbehaviour, Evidence{})
return nil, sdkerrors.Wrapf(clienttypes.ErrInvalidClientType, "expected type %T, got %T", misbehaviour, &Evidence{})
}
// Retrieve trusted consensus states for each Header in misbehaviour

View File

@ -47,11 +47,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height, suite.now, bothValSet, bothValSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height, suite.now.Add(time.Minute), bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
true,
@ -61,11 +61,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height-1, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height-1, bothValsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height-1, suite.now, bothValSet, bothValSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height-1, suite.now.Add(time.Minute), bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
true,
@ -75,11 +75,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height-1, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height-3, suite.valsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height-1, suite.now, bothValSet, bothValSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height-3, suite.now.Add(time.Minute), bothValSet, suite.valSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
true,
@ -89,11 +89,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, suite.valsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, suite.valsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height, suite.now, bothValSet, suite.valSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height, suite.now.Add(time.Minute), bothValSet, suite.valSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
true,
@ -103,11 +103,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height-1, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height-3, suite.valsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height-1, suite.now, bothValSet, bothValSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height, suite.now.Add(time.Minute), bothValSet, suite.valSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
false,
@ -117,11 +117,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height-1, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height-3, suite.valsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height-1, suite.now, bothValSet, bothValSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height-3, suite.now.Add(time.Minute), bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
false,
@ -131,11 +131,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.ClientState{FrozenHeight: 1},
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height, suite.now, bothValSet, bothValSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height, suite.now.Add(time.Minute), bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
false,
@ -145,11 +145,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
nil, // consensus state for trusted height - 1 does not exist in store
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height-1, suite.now, bothValSet, bothValSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height, suite.now.Add(time.Minute), bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
false,
@ -168,11 +168,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height, suite.now, bothValSet, bothValSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height, suite.now.Add(time.Minute), bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now.Add(2 * time.Minute).Add(simapp.DefaultConsensusParams.Evidence.MaxAgeDuration),
false,
@ -182,11 +182,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, uint64(height+simapp.DefaultConsensusParams.Evidence.MaxAgeNumBlocks+1), commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height, suite.now, bothValSet, bothValSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height, suite.now.Add(time.Minute), bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now.Add(time.Hour),
false,
@ -196,11 +196,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height-1, suite.now, bothValSet, bothValSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height-1, suite.now.Add(time.Minute), bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
false,
@ -210,11 +210,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
&types.ConsensusState{Timestamp: time.Time{}, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), NextValidatorsHash: bothValsHash},
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height, suite.now, bothValSet, bothValSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height, suite.now.Add(time.Minute), bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now.Add(ubdPeriod),
false,
@ -224,11 +224,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height, suite.now, bothValSet, suite.valSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height, suite.now.Add(time.Minute), bothValSet, suite.valSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
false,
@ -238,11 +238,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height, suite.now, altValSet, bothValSet, altSigners),
Header2: types.CreateTestHeader(chainID, height, height, suite.now.Add(time.Minute), bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
false,
@ -252,11 +252,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height, suite.now, bothValSet, bothValSet, bothSigners),
Header2: types.CreateTestHeader(chainID, height, height, suite.now.Add(time.Minute), altValSet, bothValSet, altSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
false,
@ -266,11 +266,11 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() {
types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), height, bothValsHash),
types.Evidence{
&types.Evidence{
Header1: types.CreateTestHeader(chainID, height, height, suite.now, altValSet, bothValSet, altSigners),
Header2: types.CreateTestHeader(chainID, height, height, suite.now.Add(time.Minute), altValSet, bothValSet, altSigners),
ChainID: chainID,
ClientID: chainID,
ChainId: chainID,
ClientId: chainID,
},
suite.now,
false,

View File

@ -130,6 +130,47 @@ func (m *ConsensusState) XXX_DiscardUnknown() {
var xxx_messageInfo_ConsensusState proto.InternalMessageInfo
// Evidence is a wrapper over tendermint's DuplicateVoteEvidence
// that implements Evidence interface expected by ICS-02
type Evidence struct {
ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty" yaml:"client_id"`
ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty" yaml:"chain_id"`
Header1 Header `protobuf:"bytes,3,opt,name=header_1,json=header1,proto3" json:"header_1" yaml:"header_1"`
Header2 Header `protobuf:"bytes,4,opt,name=header_2,json=header2,proto3" json:"header_2" yaml:"header_2"`
}
func (m *Evidence) Reset() { *m = Evidence{} }
func (*Evidence) ProtoMessage() {}
func (*Evidence) Descriptor() ([]byte, []int) {
return fileDescriptor_76a953d5a747dd66, []int{2}
}
func (m *Evidence) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *Evidence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_Evidence.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 *Evidence) XXX_Merge(src proto.Message) {
xxx_messageInfo_Evidence.Merge(m, src)
}
func (m *Evidence) XXX_Size() int {
return m.Size()
}
func (m *Evidence) XXX_DiscardUnknown() {
xxx_messageInfo_Evidence.DiscardUnknown(m)
}
var xxx_messageInfo_Evidence proto.InternalMessageInfo
// Header defines the Tendermint client consensus Header.
// It encapsulates all the information necessary to update from a trusted
// Tendermint ConsensusState. The inclusion of TrustedHeight and
@ -153,7 +194,7 @@ func (m *Header) Reset() { *m = Header{} }
func (m *Header) String() string { return proto.CompactTextString(m) }
func (*Header) ProtoMessage() {}
func (*Header) Descriptor() ([]byte, []int) {
return fileDescriptor_76a953d5a747dd66, []int{2}
return fileDescriptor_76a953d5a747dd66, []int{3}
}
func (m *Header) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -213,7 +254,7 @@ 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{3}
return fileDescriptor_76a953d5a747dd66, []int{4}
}
func (m *Fraction) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -259,6 +300,7 @@ func (m *Fraction) GetDenominator() int64 {
func init() {
proto.RegisterType((*ClientState)(nil), "ibc.tendermint.ClientState")
proto.RegisterType((*ConsensusState)(nil), "ibc.tendermint.ConsensusState")
proto.RegisterType((*Evidence)(nil), "ibc.tendermint.Evidence")
proto.RegisterType((*Header)(nil), "ibc.tendermint.Header")
proto.RegisterType((*Fraction)(nil), "ibc.tendermint.Fraction")
}
@ -266,60 +308,67 @@ func init() {
func init() { proto.RegisterFile("ibc/tendermint/tendermint.proto", fileDescriptor_76a953d5a747dd66) }
var fileDescriptor_76a953d5a747dd66 = []byte{
// 845 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0xcd, 0x6e, 0xe4, 0x44,
0x10, 0x1e, 0x27, 0xb3, 0xd9, 0xa4, 0x67, 0x26, 0x59, 0x9a, 0x10, 0x9c, 0x61, 0xb1, 0x47, 0xe6,
0x92, 0xcb, 0xda, 0x28, 0xbb, 0x02, 0x69, 0x25, 0x24, 0xe4, 0xac, 0x50, 0x16, 0x81, 0x14, 0x79,
0xf8, 0x91, 0x90, 0x90, 0xe5, 0x9f, 0x1e, 0xbb, 0x15, 0xbb, 0xdb, 0x72, 0xf7, 0x44, 0x13, 0x9e,
0x60, 0xb9, 0xed, 0x91, 0x23, 0x0f, 0xc1, 0x43, 0xec, 0x31, 0x47, 0x4e, 0x06, 0x25, 0x6f, 0x30,
0x47, 0x0e, 0x08, 0x75, 0xbb, 0x3d, 0xf6, 0xcc, 0x46, 0x5a, 0x71, 0x49, 0xba, 0xbe, 0xfa, 0xaa,
0xca, 0x55, 0xfd, 0x55, 0x0f, 0x30, 0x71, 0x18, 0x39, 0x1c, 0x91, 0x18, 0x95, 0x39, 0x26, 0xbc,
0x73, 0xb4, 0x8b, 0x92, 0x72, 0x0a, 0xf7, 0x71, 0x18, 0xd9, 0x2d, 0x3a, 0x9e, 0x74, 0xc9, 0xd7,
0x05, 0x62, 0xce, 0x55, 0x90, 0xe1, 0x38, 0xe0, 0xb4, 0xac, 0x23, 0xc6, 0x8f, 0xdf, 0x62, 0xc8,
0xbf, 0xca, 0xfb, 0x7e, 0x44, 0xc9, 0x0c, 0x53, 0xa7, 0x28, 0x29, 0x9d, 0x35, 0xa0, 0x91, 0x50,
0x9a, 0x64, 0xc8, 0x91, 0x56, 0x38, 0x9f, 0x39, 0xf1, 0xbc, 0x0c, 0x38, 0xa6, 0x44, 0xf9, 0xcd,
0x4d, 0x3f, 0xc7, 0x39, 0x62, 0x3c, 0xc8, 0x8b, 0x86, 0x20, 0xda, 0x88, 0x68, 0x9e, 0x63, 0x9e,
0x23, 0xc2, 0x3b, 0x47, 0x45, 0x38, 0x4c, 0x68, 0x42, 0xe5, 0xd1, 0x11, 0xa7, 0x1a, 0xb5, 0x5e,
0x3d, 0x00, 0x83, 0xb3, 0x0c, 0x23, 0xc2, 0xa7, 0x3c, 0xe0, 0x08, 0x1e, 0x83, 0xdd, 0x28, 0x0d,
0x30, 0xf1, 0x71, 0xac, 0x6b, 0x13, 0xed, 0x64, 0xcf, 0x7b, 0x28, 0xed, 0x97, 0x31, 0xfc, 0x1e,
0x0c, 0x78, 0x39, 0x67, 0xdc, 0xcf, 0xd0, 0x15, 0xca, 0xf4, 0xad, 0x89, 0x76, 0x32, 0x38, 0xd5,
0xed, 0xf5, 0xe9, 0xd8, 0x5f, 0x95, 0x41, 0x24, 0xbe, 0xdb, 0x1d, 0xbf, 0xa9, 0xcc, 0xde, 0xb2,
0x32, 0xe1, 0x75, 0x90, 0x67, 0xcf, 0xad, 0x4e, 0xa8, 0xe5, 0x01, 0x69, 0x7d, 0x23, 0x0c, 0x38,
0x03, 0x07, 0xd2, 0xc2, 0x24, 0xf1, 0x0b, 0x54, 0x62, 0x1a, 0xeb, 0xdb, 0x32, 0xf5, 0xb1, 0x5d,
0xf7, 0x6c, 0x37, 0x3d, 0xdb, 0x2f, 0xd4, 0x4c, 0x5c, 0x4b, 0xe5, 0x3e, 0xea, 0xe4, 0x6e, 0xe3,
0xad, 0xdf, 0xfe, 0x32, 0x35, 0x6f, 0xbf, 0x41, 0x2f, 0x24, 0x08, 0x31, 0x78, 0x34, 0x27, 0x21,
0x25, 0x71, 0xa7, 0x50, 0xff, 0x5d, 0x85, 0x3e, 0x51, 0x85, 0x3e, 0xac, 0x0b, 0x6d, 0x26, 0xa8,
0x2b, 0x1d, 0xac, 0x60, 0x55, 0x0a, 0x81, 0x83, 0x3c, 0x58, 0xf8, 0x51, 0x46, 0xa3, 0x4b, 0x3f,
0x2e, 0xf1, 0x8c, 0xeb, 0x0f, 0xfe, 0x67, 0x4b, 0x1b, 0xf1, 0x75, 0xa1, 0x51, 0x1e, 0x2c, 0xce,
0x04, 0xf8, 0x42, 0x60, 0xf0, 0x0b, 0x30, 0x9a, 0x95, 0xf4, 0x17, 0x44, 0xfc, 0x14, 0xe1, 0x24,
0xe5, 0xfa, 0xce, 0x44, 0x3b, 0xe9, 0xbb, 0xfa, 0xb2, 0x32, 0x0f, 0xeb, 0x2c, 0x6b, 0x6e, 0xcb,
0x1b, 0xd6, 0xf6, 0xb9, 0x34, 0x45, 0x78, 0x16, 0x70, 0xc4, 0x78, 0x13, 0xfe, 0x70, 0x33, 0x7c,
0xcd, 0x6d, 0x79, 0xc3, 0xda, 0x56, 0xe1, 0x2f, 0xc1, 0x40, 0x2a, 0xd8, 0x67, 0x05, 0x8a, 0x98,
0xbe, 0x3b, 0xd9, 0x3e, 0x19, 0x9c, 0x3e, 0xb2, 0x71, 0xc4, 0x4e, 0x9f, 0xda, 0x17, 0xc2, 0x33,
0x2d, 0x50, 0xe4, 0x1e, 0xb5, 0x12, 0xe8, 0xd0, 0x2d, 0x0f, 0x14, 0x0d, 0x85, 0x3d, 0xef, 0xbf,
0xfa, 0xdd, 0xec, 0x59, 0x7f, 0x6c, 0x81, 0xfd, 0x33, 0x4a, 0x18, 0x22, 0x6c, 0xce, 0x6a, 0x35,
0xba, 0x60, 0x6f, 0xa5, 0x73, 0x29, 0xc7, 0xc1, 0xe9, 0xf8, 0xad, 0x11, 0x7e, 0xd7, 0x30, 0xdc,
0x5d, 0x31, 0xc3, 0xd7, 0x62, 0x52, 0x6d, 0x18, 0x7c, 0x06, 0xfa, 0x25, 0xa5, 0x5c, 0xe9, 0x75,
0x2c, 0xf5, 0xda, 0x59, 0x8e, 0x6f, 0x51, 0x79, 0x99, 0x21, 0x8f, 0x52, 0xee, 0xf6, 0x45, 0xb8,
0x27, 0xd9, 0xf0, 0x08, 0xec, 0xa8, 0xa9, 0x08, 0x31, 0xf6, 0x3d, 0x65, 0xc1, 0x5f, 0x35, 0x70,
0x48, 0xd0, 0x82, 0xfb, 0xab, 0x9d, 0x67, 0x7e, 0x1a, 0xb0, 0x54, 0x4a, 0x69, 0xe8, 0xfe, 0xb8,
0xac, 0xcc, 0x8f, 0xea, 0x6e, 0xef, 0x63, 0x59, 0xff, 0x54, 0xe6, 0xb3, 0x04, 0xf3, 0x74, 0x1e,
0x8a, 0x6f, 0xb8, 0xff, 0xd9, 0x71, 0x32, 0x1c, 0x32, 0x27, 0xbc, 0xe6, 0x88, 0xd9, 0xe7, 0x68,
0xe1, 0x8a, 0x83, 0x07, 0x45, 0xba, 0x1f, 0x56, 0xd9, 0xce, 0x03, 0x96, 0xaa, 0xb1, 0xfd, 0xbb,
0x05, 0x76, 0xce, 0x51, 0x10, 0xa3, 0x12, 0x22, 0x30, 0x62, 0x38, 0x21, 0x28, 0xf6, 0x53, 0x09,
0xa8, 0x91, 0x19, 0xdd, 0xfd, 0xac, 0x5f, 0xa2, 0xa9, 0xa4, 0xd5, 0x61, 0xee, 0x44, 0xf4, 0x7d,
0x53, 0x99, 0x5a, 0x7b, 0xf3, 0x6b, 0x69, 0x2c, 0x6f, 0xc8, 0x3a, 0x7c, 0xf8, 0x33, 0x18, 0xad,
0xfa, 0xf2, 0x19, 0x6a, 0x46, 0x7b, 0x4f, 0x99, 0xd5, 0x07, 0x4f, 0x11, 0xef, 0x0a, 0x6b, 0x2d,
0xdc, 0xf2, 0x86, 0x57, 0x1d, 0x1e, 0xfc, 0x12, 0xd4, 0xab, 0x2b, 0xeb, 0xb7, 0x57, 0xe0, 0x1e,
0x2f, 0x2b, 0xf3, 0x83, 0xce, 0xc2, 0xaf, 0xfc, 0x96, 0x37, 0x52, 0x80, 0x92, 0x66, 0x06, 0x60,
0xc3, 0x68, 0x2f, 0x40, 0x2d, 0xfb, 0xbb, 0xbe, 0xf2, 0xe3, 0x65, 0x65, 0x1e, 0xaf, 0x57, 0x69,
0x73, 0x58, 0xde, 0x7b, 0x0a, 0x6c, 0xaf, 0xc2, 0xfa, 0x1a, 0xec, 0x36, 0x8f, 0x1e, 0x7c, 0x0c,
0xf6, 0xc8, 0x3c, 0x47, 0xa5, 0xf0, 0xc8, 0xe9, 0x6f, 0x7b, 0x2d, 0x00, 0x27, 0x60, 0x10, 0x23,
0x42, 0x73, 0x4c, 0xa4, 0x7f, 0x4b, 0xfa, 0xbb, 0x90, 0x7b, 0xf1, 0xe6, 0xd6, 0xd0, 0x6e, 0x6e,
0x0d, 0xed, 0xef, 0x5b, 0x43, 0x7b, 0x7d, 0x67, 0xf4, 0x6e, 0xee, 0x8c, 0xde, 0x9f, 0x77, 0x46,
0xef, 0xa7, 0xcf, 0x3a, 0xb2, 0x89, 0x28, 0xcb, 0x29, 0x53, 0xff, 0x9e, 0xb0, 0xf8, 0xd2, 0x59,
0x38, 0xe2, 0xf9, 0xff, 0xf4, 0xf3, 0x27, 0x9b, 0xbf, 0x3c, 0xe1, 0x8e, 0xdc, 0x93, 0xa7, 0xff,
0x05, 0x00, 0x00, 0xff, 0xff, 0xa1, 0x78, 0x14, 0xd9, 0xe7, 0x06, 0x00, 0x00,
// 945 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0x4d, 0x6f, 0xe3, 0x44,
0x18, 0xae, 0xd3, 0x6c, 0x9b, 0x4e, 0x92, 0xb6, 0xcc, 0x96, 0x92, 0x86, 0x25, 0x8e, 0xcc, 0xa5,
0x97, 0xb5, 0x69, 0x76, 0x05, 0x52, 0x25, 0x24, 0xe4, 0x2e, 0xa8, 0x45, 0x20, 0x55, 0x2e, 0x1f,
0x12, 0x12, 0xb2, 0x1c, 0x7b, 0x92, 0x8c, 0x6a, 0xcf, 0x44, 0x9e, 0x49, 0x95, 0xf2, 0x0b, 0x96,
0xdb, 0x1e, 0xf7, 0xc8, 0x85, 0x7f, 0xc0, 0x8f, 0xd8, 0x63, 0x8f, 0x9c, 0x0c, 0x6a, 0xff, 0x41,
0x8e, 0x1c, 0x10, 0x9a, 0x0f, 0x7f, 0x24, 0xad, 0xb4, 0xec, 0xa5, 0x9d, 0xf7, 0xe3, 0x79, 0xde,
0x99, 0x37, 0xcf, 0xfb, 0x1a, 0x98, 0x78, 0x18, 0x3a, 0x1c, 0x91, 0x08, 0xa5, 0x09, 0x26, 0xbc,
0x72, 0xb4, 0xa7, 0x29, 0xe5, 0x14, 0x6e, 0xe3, 0x61, 0x68, 0x97, 0xde, 0x6e, 0xbf, 0x9a, 0x7c,
0x3d, 0x45, 0xcc, 0xb9, 0x0a, 0x62, 0x1c, 0x05, 0x9c, 0xa6, 0x0a, 0xd1, 0x7d, 0x72, 0x2f, 0x43,
0xfe, 0xd5, 0xd1, 0xc7, 0x21, 0x25, 0x23, 0x4c, 0x9d, 0x69, 0x4a, 0xe9, 0x28, 0x77, 0xf6, 0xc6,
0x94, 0x8e, 0x63, 0xe4, 0x48, 0x6b, 0x38, 0x1b, 0x39, 0xd1, 0x2c, 0x0d, 0x38, 0xa6, 0x44, 0xc7,
0xcd, 0xd5, 0x38, 0xc7, 0x09, 0x62, 0x3c, 0x48, 0xa6, 0x79, 0x82, 0x78, 0x46, 0x48, 0x93, 0x04,
0xf3, 0x04, 0x11, 0x5e, 0x39, 0xea, 0x84, 0xbd, 0x31, 0x1d, 0x53, 0x79, 0x74, 0xc4, 0x49, 0x79,
0xad, 0x97, 0x8f, 0x40, 0xf3, 0x24, 0xc6, 0x88, 0xf0, 0x0b, 0x1e, 0x70, 0x04, 0x0f, 0x40, 0x23,
0x9c, 0x04, 0x98, 0xf8, 0x38, 0xea, 0x18, 0x7d, 0xe3, 0x70, 0xcb, 0xdb, 0x94, 0xf6, 0x59, 0x04,
0xbf, 0x07, 0x4d, 0x9e, 0xce, 0x18, 0xf7, 0x63, 0x74, 0x85, 0xe2, 0x4e, 0xad, 0x6f, 0x1c, 0x36,
0x07, 0x1d, 0x7b, 0xb9, 0x3b, 0xf6, 0x57, 0x69, 0x10, 0x8a, 0x7b, 0xbb, 0xdd, 0x37, 0x99, 0xb9,
0xb6, 0xc8, 0x4c, 0x78, 0x1d, 0x24, 0xf1, 0xb1, 0x55, 0x81, 0x5a, 0x1e, 0x90, 0xd6, 0x37, 0xc2,
0x80, 0x23, 0xb0, 0x23, 0x2d, 0x4c, 0xc6, 0xfe, 0x14, 0xa5, 0x98, 0x46, 0x9d, 0x75, 0x49, 0x7d,
0x60, 0xab, 0x37, 0xdb, 0xf9, 0x9b, 0xed, 0x17, 0xba, 0x27, 0xae, 0xa5, 0xb9, 0xf7, 0x2b, 0xdc,
0x25, 0xde, 0x7a, 0xfd, 0x97, 0x69, 0x78, 0xdb, 0xb9, 0xf7, 0x5c, 0x3a, 0x21, 0x06, 0xbb, 0x33,
0x32, 0xa4, 0x24, 0xaa, 0x14, 0xaa, 0xbf, 0xad, 0xd0, 0xc7, 0xba, 0xd0, 0x07, 0xaa, 0xd0, 0x2a,
0x81, 0xaa, 0xb4, 0x53, 0xb8, 0x75, 0x29, 0x04, 0x76, 0x92, 0x60, 0xee, 0x87, 0x31, 0x0d, 0x2f,
0xfd, 0x28, 0xc5, 0x23, 0xde, 0x79, 0xf4, 0x8e, 0x4f, 0x5a, 0xc1, 0xab, 0x42, 0xed, 0x24, 0x98,
0x9f, 0x08, 0xe7, 0x0b, 0xe1, 0x83, 0x9f, 0x83, 0xf6, 0x28, 0xa5, 0xbf, 0x20, 0xe2, 0x4f, 0x10,
0x1e, 0x4f, 0x78, 0x67, 0xa3, 0x6f, 0x1c, 0xd6, 0xdd, 0xce, 0x22, 0x33, 0xf7, 0x14, 0xcb, 0x52,
0xd8, 0xf2, 0x5a, 0xca, 0x3e, 0x95, 0xa6, 0x80, 0xc7, 0x01, 0x47, 0x8c, 0xe7, 0xf0, 0xcd, 0x55,
0xf8, 0x52, 0xd8, 0xf2, 0x5a, 0xca, 0xd6, 0xf0, 0x33, 0xd0, 0x94, 0x0a, 0xf6, 0xd9, 0x14, 0x85,
0xac, 0xd3, 0xe8, 0xaf, 0x1f, 0x36, 0x07, 0xbb, 0x36, 0x0e, 0xd9, 0xe0, 0x99, 0x7d, 0x2e, 0x22,
0x17, 0x53, 0x14, 0xba, 0xfb, 0xa5, 0x04, 0x2a, 0xe9, 0x96, 0x07, 0xa6, 0x79, 0x0a, 0x3b, 0xae,
0xbf, 0xfc, 0xcd, 0x5c, 0xb3, 0xfe, 0xa8, 0x81, 0xed, 0x13, 0x4a, 0x18, 0x22, 0x6c, 0xc6, 0x94,
0x1a, 0x5d, 0xb0, 0x55, 0xe8, 0x5c, 0xca, 0xb1, 0x39, 0xe8, 0xde, 0x6b, 0xe1, 0x77, 0x79, 0x86,
0xdb, 0x10, 0x3d, 0x7c, 0x25, 0x3a, 0x55, 0xc2, 0xe0, 0x73, 0x50, 0x4f, 0x29, 0xe5, 0x5a, 0xaf,
0x5d, 0xa9, 0xd7, 0xca, 0x70, 0x7c, 0x8b, 0xd2, 0xcb, 0x18, 0x79, 0x94, 0x72, 0xb7, 0x2e, 0xe0,
0x9e, 0xcc, 0x86, 0xfb, 0x60, 0x43, 0x77, 0x45, 0x88, 0xb1, 0xee, 0x69, 0x0b, 0xfe, 0x6a, 0x80,
0x3d, 0x82, 0xe6, 0xdc, 0x2f, 0x66, 0x9e, 0xf9, 0x93, 0x80, 0x4d, 0xa4, 0x94, 0x5a, 0xee, 0x8f,
0x8b, 0xcc, 0xfc, 0x50, 0xbd, 0xf6, 0xa1, 0x2c, 0xeb, 0x9f, 0xcc, 0x7c, 0x3e, 0xc6, 0x7c, 0x32,
0x1b, 0x8a, 0x3b, 0x3c, 0xbc, 0x76, 0x9c, 0x18, 0x0f, 0x99, 0x33, 0xbc, 0xe6, 0x88, 0xd9, 0xa7,
0x68, 0xee, 0x8a, 0x83, 0x07, 0x05, 0xdd, 0x0f, 0x05, 0xdb, 0x69, 0xc0, 0x26, 0xba, 0x6d, 0xbf,
0xd7, 0x40, 0xe3, 0xcb, 0x2b, 0x1c, 0x21, 0x12, 0x22, 0x78, 0x04, 0xb6, 0x42, 0x39, 0xcd, 0xc5,
0xfc, 0xba, 0x7b, 0x8b, 0xcc, 0xdc, 0x55, 0x57, 0x2a, 0x42, 0x96, 0xd7, 0x50, 0xe7, 0xb3, 0x08,
0xda, 0x95, 0x89, 0xaf, 0x49, 0xc4, 0xe3, 0x45, 0x66, 0xee, 0x68, 0x84, 0x8e, 0x58, 0xd5, 0x35,
0xd0, 0x98, 0xa0, 0x20, 0x42, 0xa9, 0x7f, 0xa4, 0x07, 0x75, 0x7f, 0x75, 0x07, 0x9c, 0xca, 0xb8,
0x92, 0xf4, 0x6d, 0x66, 0x6e, 0x2a, 0xfb, 0xa8, 0xa4, 0xcd, 0x09, 0x2c, 0x6f, 0x53, 0x1d, 0x8f,
0x2a, 0xb4, 0x03, 0x3d, 0x96, 0xff, 0x93, 0x76, 0x70, 0x8f, 0x76, 0x50, 0xd0, 0x0e, 0x8e, 0x1b,
0xa2, 0x47, 0xaf, 0x45, 0x9f, 0xfe, 0xad, 0x81, 0x0d, 0x85, 0x80, 0x08, 0xb4, 0x19, 0x1e, 0x13,
0x14, 0xf9, 0x2a, 0x4d, 0x4b, 0xab, 0x57, 0x2d, 0xa6, 0x36, 0xf6, 0x85, 0x4c, 0xd3, 0x85, 0xfb,
0xa2, 0xf0, 0x4d, 0x66, 0x1a, 0xe5, 0x84, 0x2c, 0xd1, 0x58, 0x5e, 0x8b, 0x55, 0xf2, 0xe1, 0xcf,
0xa0, 0x5d, 0xfc, 0xfe, 0x3e, 0x43, 0xb9, 0x04, 0x1f, 0x28, 0x53, 0xfc, 0xb0, 0x17, 0x88, 0x57,
0x07, 0x70, 0x09, 0x6e, 0x79, 0xad, 0xab, 0x4a, 0x1e, 0xfc, 0x02, 0xa8, 0x15, 0x27, 0xeb, 0x97,
0x52, 0x75, 0x0f, 0x16, 0x99, 0xf9, 0x7e, 0x65, 0x31, 0x16, 0x71, 0xcb, 0x6b, 0x6b, 0x87, 0x1e,
0xe1, 0x18, 0xc0, 0x3c, 0xa3, 0x14, 0xaa, 0xee, 0xfe, 0xdb, 0x6e, 0xf9, 0xd1, 0x22, 0x33, 0x0f,
0x96, 0xab, 0x94, 0x1c, 0x96, 0xf7, 0x9e, 0x76, 0x96, 0x92, 0xb5, 0xbe, 0x06, 0x8d, 0xfc, 0xe3,
0x00, 0x9f, 0x80, 0x2d, 0x32, 0x4b, 0x50, 0x2a, 0x22, 0xb2, 0xfb, 0xeb, 0x5e, 0xe9, 0x80, 0x7d,
0xd0, 0x8c, 0x10, 0xa1, 0x09, 0x26, 0x32, 0x5e, 0x93, 0xf1, 0xaa, 0xcb, 0x3d, 0x7f, 0x73, 0xdb,
0x33, 0x6e, 0x6e, 0x7b, 0xc6, 0xdf, 0xb7, 0x3d, 0xe3, 0xd5, 0x5d, 0x6f, 0xed, 0xe6, 0xae, 0xb7,
0xf6, 0xe7, 0x5d, 0x6f, 0xed, 0xa7, 0x4f, 0x2b, 0xe3, 0x15, 0x52, 0x96, 0x50, 0xa6, 0xff, 0x3d,
0x65, 0xd1, 0xa5, 0x33, 0x77, 0xc4, 0x67, 0xf2, 0x93, 0xcf, 0x9e, 0xae, 0x7e, 0xa1, 0x87, 0x1b,
0x72, 0x9f, 0x3c, 0xfb, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x47, 0x40, 0xa0, 0xf1, 0x0f, 0x08, 0x00,
0x00,
}
func (m *ClientState) Marshal() (dAtA []byte, err error) {
@ -463,6 +512,63 @@ func (m *ConsensusState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
func (m *Evidence) 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 *Evidence) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *Evidence) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
{
size, err := m.Header2.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintTendermint(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x22
{
size, err := m.Header1.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintTendermint(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x1a
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] = 0x12
}
if len(m.ClientId) > 0 {
i -= len(m.ClientId)
copy(dAtA[i:], m.ClientId)
i = encodeVarintTendermint(dAtA, i, uint64(len(m.ClientId)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *Header) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -622,6 +728,27 @@ func (m *ConsensusState) Size() (n int) {
return n
}
func (m *Evidence) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.ClientId)
if l > 0 {
n += 1 + l + sovTendermint(uint64(l))
}
l = len(m.ChainId)
if l > 0 {
n += 1 + l + sovTendermint(uint64(l))
}
l = m.Header1.Size()
n += 1 + l + sovTendermint(uint64(l))
l = m.Header2.Size()
n += 1 + l + sovTendermint(uint64(l))
return n
}
func (m *Header) Size() (n int) {
if m == nil {
return 0
@ -1126,6 +1253,189 @@ func (m *ConsensusState) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *Evidence) 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: Evidence: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: Evidence: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ClientId", 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.ClientId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
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 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Header1", 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.Header1.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 4:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Header2", 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.Header2.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 *Header) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0