Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert "Fix Timing Issues on UpdateClient" #5767

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,11 @@ require (
github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15
github.com/tendermint/go-amino v0.15.1
github.com/tendermint/iavl v0.13.0
github.com/tendermint/tendermint v0.33.1-dev3
github.com/tendermint/tendermint v0.33.1
github.com/tendermint/tm-db v0.4.1
gopkg.in/yaml.v2 v2.2.8
)

replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.2-alpha.regen.1

replace github.com/keybase/go-keychain => github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4

go 1.14
234 changes: 0 additions & 234 deletions go.sum

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion x/ibc/02-client/keeper/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ func (k Keeper) UpdateClient(ctx sdk.Context, clientID string, header exported.H
}

k.SetClientState(ctx, clientState)
k.SetClientConsensusState(ctx, clientID, header.GetHeight()-1, consensusState)
k.SetClientConsensusState(ctx, clientID, header.GetHeight(), consensusState)
k.Logger(ctx).Info(fmt.Sprintf("client %s updated to height %d", clientID, header.GetHeight()))

ctx.EventManager().EmitEvents(sdk.Events{
Expand Down
24 changes: 12 additions & 12 deletions x/ibc/02-client/keeper/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,11 @@ func (suite *KeeperTestSuite) TestUpdateClient() {
// Must create header creation functions since suite.header gets recreated on each test case
createValidUpdateFn := func(s *KeeperTestSuite) ibctmtypes.Header {
return ibctmtypes.CreateTestHeader(testClientID, suite.header.Height+1, suite.header.Time.Add(time.Minute),
suite.valSet, []tmtypes.PrivValidator{suite.privVal})
suite.valSet, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
}
createInvalidUpdateFn := func(s *KeeperTestSuite) ibctmtypes.Header {
return ibctmtypes.CreateTestHeader(testClientID, suite.header.Height-3, suite.header.Time.Add(time.Minute),
suite.valSet, []tmtypes.PrivValidator{suite.privVal})
suite.valSet, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
}
var updateHeader ibctmtypes.Header

Expand Down Expand Up @@ -201,8 +201,8 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
{
"trusting period misbehavior should pass",
ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
ChainID: testClientID,
ClientID: testClientID,
},
Expand All @@ -221,8 +221,8 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
{
"misbehavior at later height should pass",
ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight+5, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight+5, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight+5, suite.ctx.BlockTime(), bothValSet, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight+5, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
ChainID: testClientID,
ClientID: testClientID,
},
Expand All @@ -247,8 +247,8 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
{
"consensus state not found",
ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
ChainID: testClientID,
ClientID: testClientID,
},
Expand All @@ -262,8 +262,8 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
{
"consensus state not found",
ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
ChainID: testClientID,
ClientID: testClientID,
},
Expand All @@ -277,8 +277,8 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() {
{
"misbehaviour check failed",
ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), altValSet, altSigners),
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), altValSet, bothValSet, altSigners),
ChainID: testClientID,
ClientID: testClientID,
},
Expand Down
1 change: 0 additions & 1 deletion x/ibc/02-client/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@ func (k Keeper) SetClientConsensusState(ctx sdk.Context, clientID string, height
store := ctx.KVStore(k.storeKey)
bz := k.cdc.MustMarshalBinaryLengthPrefixed(consensusState)
store.Set(ibctypes.KeyConsensusState(clientID, height), bz)
fmt.Printf("Saving consensus state at %s with hash %v\n", ibctypes.KeyConsensusState(clientID, height), consensusState.GetRoot())
}

// HasClientConsensusState returns if keeper has a ConsensusState for a particular
Expand Down
4 changes: 2 additions & 2 deletions x/ibc/02-client/keeper/keeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func (suite *KeeperTestSuite) SetupTest() {
suite.privVal = tmtypes.NewMockPV()
validator := tmtypes.NewValidator(suite.privVal.GetPubKey(), 1)
suite.valSet = tmtypes.NewValidatorSet([]*tmtypes.Validator{validator})
suite.header = ibctmtypes.CreateTestHeader(testClientID, testClientHeight, now2, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
suite.header = ibctmtypes.CreateTestHeader(testClientID, testClientHeight, now2, suite.valSet, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
suite.consensusState = ibctmtypes.ConsensusState{
Height: testClientHeight,
Timestamp: suite.now,
Expand Down Expand Up @@ -166,7 +166,7 @@ func (suite KeeperTestSuite) TestConsensusStateHelpers() {
ValidatorSet: suite.valSet,
}

header := ibctmtypes.CreateTestHeader(testClientID, testClientHeight+5, suite.header.Time.Add(time.Minute), suite.valSet, []tmtypes.PrivValidator{suite.privVal})
header := ibctmtypes.CreateTestHeader(testClientID, testClientHeight+5, suite.header.Time.Add(time.Minute), suite.valSet, suite.valSet, []tmtypes.PrivValidator{suite.privVal})

// mock update functionality
clientState.LastHeader = header
Expand Down
4 changes: 2 additions & 2 deletions x/ibc/03-connection/keeper/keeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ func NewTestChain(clientID string) *TestChain {
signers := []tmtypes.PrivValidator{privVal}
now := time.Now()

header := ibctmtypes.CreateTestHeader(clientID, 1, now, valSet, signers)
header := ibctmtypes.CreateTestHeader(clientID, 1, now, valSet, valSet, signers)

return &TestChain{
ClientID: clientID,
Expand Down Expand Up @@ -314,5 +314,5 @@ func (chain *TestChain) createChannel(

func nextHeader(chain *TestChain) ibctmtypes.Header {
return ibctmtypes.CreateTestHeader(chain.Header.ChainID, chain.Header.Height+1,
time.Now(), chain.Vals, chain.Signers)
time.Now(), chain.Vals, chain.Vals, chain.Signers)
}
3 changes: 0 additions & 3 deletions x/ibc/03-connection/keeper/verify.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package keeper

import (
"fmt"

sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
clientexported "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported"
Expand Down Expand Up @@ -58,7 +56,6 @@ func (k Keeper) VerifyConnectionState(
ctx, connection.GetClientID(), height,
)
if !found {
fmt.Println("Errored Here")
return sdkerrors.Wrapf(
clienttypes.ErrConsensusStateNotFound,
"clientID (%s), height (%d)", connectionEnd.GetClientID(), height,
Expand Down
4 changes: 2 additions & 2 deletions x/ibc/04-channel/keeper/keeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ func NewTestChain(clientID string) *TestChain {
signers := []tmtypes.PrivValidator{privVal}
now := time.Date(2020, 1, 2, 0, 0, 0, 0, time.UTC)

header := ibctmtypes.CreateTestHeader(clientID, 1, now, valSet, signers)
header := ibctmtypes.CreateTestHeader(clientID, 1, now, valSet, valSet, signers)

return &TestChain{
ClientID: clientID,
Expand Down Expand Up @@ -397,7 +397,7 @@ func (chain *TestChain) createChannel(

func nextHeader(chain *TestChain) ibctmtypes.Header {
return ibctmtypes.CreateTestHeader(chain.Header.ChainID, chain.Header.Height+1,
chain.Header.Time.Add(time.Minute), chain.Vals, chain.Signers)
chain.Header.Time.Add(time.Minute), chain.Vals, chain.Vals, chain.Signers)
}

// Mocked types
Expand Down
25 changes: 12 additions & 13 deletions x/ibc/07-tendermint/misbehaviour_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package tendermint_test

import (
"bytes"
"time"

"github.com/tendermint/tendermint/crypto/tmhash"
tmtypes "github.com/tendermint/tendermint/types"
Expand Down Expand Up @@ -44,8 +43,8 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, suite.header),
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),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
},
Expand All @@ -57,8 +56,8 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, suite.header),
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),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
},
Expand All @@ -70,8 +69,8 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, suite.header),
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),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
},
Expand All @@ -83,8 +82,8 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, suite.header),
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),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, bothValSet, altSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
},
Expand All @@ -96,8 +95,8 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, suite.header),
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),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, bothValSet, altSigners),
ChainID: chainID,
ClientID: chainID,
},
Expand All @@ -109,8 +108,8 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() {
ibctmtypes.NewClientState(chainID, trustingPeriod, ubdPeriod, suite.header),
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),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altValSet, altSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, bothValSet, altSigners),
ChainID: chainID,
ClientID: chainID,
},
Expand Down
2 changes: 1 addition & 1 deletion x/ibc/07-tendermint/tendermint_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func (suite *TendermintTestSuite) SetupTest() {
suite.valSet = tmtypes.NewValidatorSet([]*tmtypes.Validator{val})
// Suite header is intended to be header passed in for initial ClientState
// Thus it should have same height and time as ClientState
suite.header = ibctmtypes.CreateTestHeader(chainID, height, suite.clientTime, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
suite.header = ibctmtypes.CreateTestHeader(chainID, height, suite.clientTime, suite.valSet, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
}

func TestTendermintTestSuite(t *testing.T) {
Expand Down
19 changes: 9 additions & 10 deletions x/ibc/07-tendermint/types/evidence_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package types_test

import (
"bytes"
"time"

"github.com/tendermint/tendermint/crypto/tmhash"
tmbytes "github.com/tendermint/tendermint/libs/bytes"
Expand All @@ -17,7 +16,7 @@ func (suite *TendermintTestSuite) TestEvidence() {

ev := ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, suite.valSet, signers),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, suite.valSet, suite.valSet, signers),
ChainID: chainID,
ClientID: "gaiamainnet",
}
Expand Down Expand Up @@ -60,7 +59,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"valid evidence",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), suite.valSet, signers),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, suite.valSet, bothValSet, signers),
ChainID: chainID,
ClientID: "gaiamainnet",
},
Expand All @@ -71,7 +70,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"invalid client ID ",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, suite.valSet, signers),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, suite.valSet, bothValSet, signers),
ChainID: chainID,
ClientID: "GAIA",
},
Expand All @@ -82,7 +81,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"wrong chainID on header1",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader("ethermint", height, suite.now, suite.valSet, signers),
Header2: ibctmtypes.CreateTestHeader("ethermint", height, suite.now, suite.valSet, bothValSet, signers),
ChainID: "ethermint",
ClientID: "gaiamainnet",
},
Expand All @@ -93,7 +92,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"wrong chainID on header2",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader("ethermint", height, suite.now, suite.valSet, signers),
Header2: ibctmtypes.CreateTestHeader("ethermint", height, suite.now, suite.valSet, bothValSet, signers),
ChainID: chainID,
ClientID: "gaiamainnet",
},
Expand All @@ -104,7 +103,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"mismatched heights",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, 6, suite.now, suite.valSet, signers),
Header2: ibctmtypes.CreateTestHeader(chainID, 6, suite.now, suite.valSet, bothValSet, signers),
ChainID: chainID,
ClientID: "gaiamainnet",
},
Expand All @@ -125,7 +124,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
{
"header 1 doesn't have 2/3 majority",
ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
Header2: suite.header,
ChainID: chainID,
ClientID: "gaiamainnet",
Expand All @@ -143,7 +142,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"header 2 doesn't have 2/3 majority",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: "gaiamainnet",
},
Expand All @@ -160,7 +159,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"validators sign off on wrong commit",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
ChainID: chainID,
ClientID: "gaiamainnet",
},
Expand Down
7 changes: 7 additions & 0 deletions x/ibc/07-tendermint/types/header.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ var _ clientexported.Header = Header{}
type Header struct {
tmtypes.SignedHeader // contains the commitment root
ValidatorSet *tmtypes.ValidatorSet `json:"validator_set" yaml:"validator_set"`
NextValidatorSet *tmtypes.ValidatorSet `json:"next_validator_set" yaml:"next_validator_set"`
}

// ClientType defines that the Header is a Tendermint consensus algorithm
Expand Down Expand Up @@ -51,9 +52,15 @@ func (h Header) ValidateBasic(chainID string) error {
if h.ValidatorSet == nil {
return sdkerrors.Wrap(clienttypes.ErrInvalidHeader, "validator set is nil")
}
if h.NextValidatorSet == nil {
return sdkerrors.Wrap(clienttypes.ErrInvalidHeader, "next validator set is nil")
}
if !bytes.Equal(h.ValidatorsHash, h.ValidatorSet.Hash()) {
return sdkerrors.Wrap(clienttypes.ErrInvalidHeader, "validator set does not match hash")
}
if !bytes.Equal(h.NextValidatorsHash, h.NextValidatorSet.Hash()) {
return sdkerrors.Wrap(clienttypes.ErrInvalidHeader, "next validator set does not match hash")
}
return nil
}

Expand Down
2 changes: 1 addition & 1 deletion x/ibc/07-tendermint/types/header_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ func (suite *TendermintTestSuite) TestHeaderValidateBasic() {
}{
{"valid header", suite.header, chainID, true},
{"signed header basic validation failed", suite.header, "chainID", false},
{"validator set nil", ibctmtypes.Header{suite.header.SignedHeader, nil}, chainID, false},
{"validator set nil", ibctmtypes.Header{suite.header.SignedHeader, nil, nil}, chainID, false},
}

suite.Require().Equal(clientexported.Tendermint, suite.header.ClientType())
Expand Down
Loading