diff --git a/CHANGELOG.md b/CHANGELOG.md index e2225e03952..e68c1a222da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,10 @@ Ref: https://keepachangelog.com/en/1.0.0/ ## [Unreleased] +### Testing + +* [\#7430](https://github.com/cosmos/ibc-go/pull/7430) Update the block proposer in test chains for each block. + ### Dependencies * [\#7247](https://github.com/cosmos/ibc-go/pull/7247) Bump CometBFT to v0.38.12. diff --git a/testing/chain.go b/testing/chain.go index e7b254db2ee..a898b64fd3d 100644 --- a/testing/chain.go +++ b/testing/chain.go @@ -323,6 +323,9 @@ func (chain *TestChain) commitBlock(res *abci.ResponseFinalizeBlock) { chain.Vals = chain.NextVals chain.NextVals = ApplyValSetChanges(chain, chain.Vals, res.ValidatorUpdates) + // increment the proposer priority of validators + chain.Vals.IncrementProposerPriority(1) + // increment the current header chain.ProposedHeader = cmtproto.Header{ ChainID: chain.ChainID, @@ -333,7 +336,7 @@ func (chain *TestChain) commitBlock(res *abci.ResponseFinalizeBlock) { Time: chain.ProposedHeader.Time, ValidatorsHash: chain.Vals.Hash(), NextValidatorsHash: chain.NextVals.Hash(), - ProposerAddress: chain.ProposedHeader.ProposerAddress, + ProposerAddress: chain.Vals.Proposer.Address, } } diff --git a/testing/chain_test.go b/testing/chain_test.go index 512e426eaca..e72057765b3 100644 --- a/testing/chain_test.go +++ b/testing/chain_test.go @@ -7,6 +7,7 @@ import ( sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking/types" ibctesting "github.com/cosmos/ibc-go/v9/testing" @@ -41,3 +42,36 @@ func TestChangeValSet(t *testing.T) { err = path.EndpointB.UpdateClient() require.NoError(t, err) } + +func TestJailProposerValidator(t *testing.T) { + coord := ibctesting.NewCoordinator(t, 2) + chainA := coord.GetChain(ibctesting.GetChainID(1)) + chainB := coord.GetChain(ibctesting.GetChainID(2)) + + path := ibctesting.NewPath(chainA, chainB) + coord.Setup(path) + + // save valset length before jailing + valsetLen := len(chainA.Vals.Validators) + + // jail the proposer validator in chain A + propAddr := sdk.ConsAddress(chainA.Vals.Proposer.Address) + + err := chainA.GetSimApp().StakingKeeper.Jail( + chainA.GetContext(), propAddr) + require.NoError(t, err) + + coord.CommitBlock(chainA) + + // verify that update clients works even after validator update goes into effect + err = path.EndpointB.UpdateClient() + require.NoError(t, err) + err = path.EndpointB.UpdateClient() + require.NoError(t, err) + + // check that the jailing has taken effect in chain A + require.Equal(t, valsetLen-1, len(chainA.Vals.Validators)) + + // check that the valset in chain A has a new proposer + require.False(t, propAddr.Equals(sdk.ConsAddress(chainA.Vals.Proposer.Address))) +}