Skip to content

Commit

Permalink
Merge pull request #5764 from cosmos/aditya/robust-timing
Browse files Browse the repository at this point in the history
Fix Timing Issues on UpdateClient
Remove NextValidatorSet from Header
  • Loading branch information
AdityaSripal authored Mar 9, 2020
2 parents 3818571 + 69be1cf commit aed047d
Show file tree
Hide file tree
Showing 21 changed files with 316 additions and 88 deletions.
4 changes: 3 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,13 @@ 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
github.com/tendermint/tendermint v0.33.1-dev3
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: 234 additions & 0 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(), consensusState)
k.SetClientConsensusState(ctx, clientID, header.GetHeight()-1, 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, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
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, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
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, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), 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, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight+5, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight+5, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight+5, suite.ctx.BlockTime(), 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, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), 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, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), 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, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), altValSet, bothValSet, altSigners),
Header1: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(testClientID, testClientHeight, suite.ctx.BlockTime(), altValSet, altSigners),
ChainID: testClientID,
ClientID: testClientID,
},
Expand Down
1 change: 1 addition & 0 deletions x/ibc/02-client/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ 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, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
suite.header = ibctmtypes.CreateTestHeader(testClientID, testClientHeight, now2, 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, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
header := ibctmtypes.CreateTestHeader(testClientID, testClientHeight+5, suite.header.Time.Add(time.Minute), 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, valSet, signers)
header := ibctmtypes.CreateTestHeader(clientID, 1, now, 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.Vals, chain.Signers)
time.Now(), chain.Vals, chain.Signers)
}
3 changes: 3 additions & 0 deletions x/ibc/03-connection/keeper/verify.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
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 @@ -56,6 +58,7 @@ 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, valSet, signers)
header := ibctmtypes.CreateTestHeader(clientID, 1, now, 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.Vals, chain.Signers)
chain.Header.Time.Add(time.Minute), chain.Vals, chain.Signers)
}

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

import (
"bytes"
"time"

"github.com/tendermint/tendermint/crypto/tmhash"
tmtypes "github.com/tendermint/tendermint/types"
Expand Down Expand Up @@ -43,8 +44,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, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
},
Expand All @@ -56,8 +57,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, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
},
Expand All @@ -69,8 +70,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, suite.valSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
},
Expand All @@ -82,8 +83,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, bothValSet, altSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), bothValSet, bothSigners),
ChainID: chainID,
ClientID: chainID,
},
Expand All @@ -95,8 +96,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, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, bothValSet, altSigners),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), altValSet, altSigners),
ChainID: chainID,
ClientID: chainID,
},
Expand All @@ -108,8 +109,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, altValSet, altSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, bothValSet, altSigners),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), altValSet, 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, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
suite.header = ibctmtypes.CreateTestHeader(chainID, height, suite.clientTime, suite.valSet, []tmtypes.PrivValidator{suite.privVal})
}

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

import (
"bytes"
"time"

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

ev := ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, suite.valSet, suite.valSet, signers),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, suite.valSet, signers),
ChainID: chainID,
ClientID: "gaiamainnet",
}
Expand Down Expand Up @@ -59,7 +60,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"valid evidence",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, suite.valSet, bothValSet, signers),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now.Add(time.Minute), suite.valSet, signers),
ChainID: chainID,
ClientID: "gaiamainnet",
},
Expand All @@ -70,7 +71,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"invalid client ID ",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, suite.valSet, bothValSet, signers),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, suite.valSet, signers),
ChainID: chainID,
ClientID: "GAIA",
},
Expand All @@ -81,7 +82,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"wrong chainID on header1",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader("ethermint", height, suite.now, suite.valSet, bothValSet, signers),
Header2: ibctmtypes.CreateTestHeader("ethermint", height, suite.now, suite.valSet, signers),
ChainID: "ethermint",
ClientID: "gaiamainnet",
},
Expand All @@ -92,7 +93,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"wrong chainID on header2",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader("ethermint", height, suite.now, suite.valSet, bothValSet, signers),
Header2: ibctmtypes.CreateTestHeader("ethermint", height, suite.now, suite.valSet, signers),
ChainID: chainID,
ClientID: "gaiamainnet",
},
Expand All @@ -103,7 +104,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"mismatched heights",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, 6, suite.now, suite.valSet, bothValSet, signers),
Header2: ibctmtypes.CreateTestHeader(chainID, 6, suite.now, suite.valSet, signers),
ChainID: chainID,
ClientID: "gaiamainnet",
},
Expand All @@ -124,7 +125,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
{
"header 1 doesn't have 2/3 majority",
ibctmtypes.Evidence{
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
Header2: suite.header,
ChainID: chainID,
ClientID: "gaiamainnet",
Expand All @@ -142,7 +143,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, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
ChainID: chainID,
ClientID: "gaiamainnet",
},
Expand All @@ -159,7 +160,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() {
"validators sign off on wrong commit",
ibctmtypes.Evidence{
Header1: suite.header,
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothValSet, bothSigners),
Header2: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners),
ChainID: chainID,
ClientID: "gaiamainnet",
},
Expand Down
7 changes: 0 additions & 7 deletions x/ibc/07-tendermint/types/header.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ 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 @@ -52,15 +51,9 @@ 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, nil}, chainID, false},
{"validator set nil", ibctmtypes.Header{suite.header.SignedHeader, nil}, chainID, false},
}

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

0 comments on commit aed047d

Please sign in to comment.