From cf3a72098827c88350aec89687ef15f376affcef Mon Sep 17 00:00:00 2001 From: Callum Waters Date: Tue, 12 Jan 2021 14:41:16 +0100 Subject: [PATCH] state sync: correctly set last consensus params height (#5889) --- CHANGELOG_PENDING.md | 1 + state/store.go | 3 ++- statesync/stateprovider.go | 11 ++++++----- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 171050ea7..c3a1bc4f4 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -27,3 +27,4 @@ Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermi - [evidence] \#5890 Add a buffer to evidence from consensus to avoid broadcasting and proposing evidence before the height of such an evidence has finished (@cmwaters) +- [statesync] \#5889 Set `LastHeightConsensusParamsChanged` when bootstrapping Tendermint state (@cmwaters) diff --git a/state/store.go b/state/store.go index 5bd2d9fc7..550c2cbff 100644 --- a/state/store.go +++ b/state/store.go @@ -205,7 +205,8 @@ func (store dbStore) Bootstrap(state State) error { return err } - if err := store.saveConsensusParamsInfo(height, height, state.ConsensusParams); err != nil { + if err := store.saveConsensusParamsInfo(height, + state.LastHeightConsensusParamsChanged, state.ConsensusParams); err != nil { return err } diff --git a/statesync/stateprovider.go b/statesync/stateprovider.go index 4b1c75e32..c89052dbd 100644 --- a/statesync/stateprovider.go +++ b/statesync/stateprovider.go @@ -150,7 +150,7 @@ func (s *lightClientStateProvider) State(ctx context.Context, height uint64) (sm if err != nil { return sm.State{}, err } - curLightBlock, err := s.lc.VerifyLightBlockAtHeight(ctx, int64(height+1), time.Now()) + currentLightBlock, err := s.lc.VerifyLightBlockAtHeight(ctx, int64(height+1), time.Now()) if err != nil { return sm.State{}, err } @@ -162,10 +162,10 @@ func (s *lightClientStateProvider) State(ctx context.Context, height uint64) (sm state.LastBlockHeight = lastLightBlock.Height state.LastBlockTime = lastLightBlock.Time state.LastBlockID = lastLightBlock.Commit.BlockID - state.AppHash = curLightBlock.AppHash - state.LastResultsHash = curLightBlock.LastResultsHash + state.AppHash = currentLightBlock.AppHash + state.LastResultsHash = currentLightBlock.LastResultsHash state.LastValidators = lastLightBlock.ValidatorSet - state.Validators = curLightBlock.ValidatorSet + state.Validators = currentLightBlock.ValidatorSet state.NextValidators = nextLightBlock.ValidatorSet state.LastHeightValidatorsChanged = nextLightBlock.Height @@ -179,12 +179,13 @@ func (s *lightClientStateProvider) State(ctx context.Context, height uint64) (sm return sm.State{}, fmt.Errorf("unable to create RPC client: %w", err) } rpcclient := lightrpc.NewClient(primaryRPC, s.lc) - result, err := rpcclient.ConsensusParams(ctx, &nextLightBlock.Height) + result, err := rpcclient.ConsensusParams(ctx, ¤tLightBlock.Height) if err != nil { return sm.State{}, fmt.Errorf("unable to fetch consensus parameters for height %v: %w", nextLightBlock.Height, err) } state.ConsensusParams = result.ConsensusParams + state.LastHeightConsensusParamsChanged = currentLightBlock.Height return state, nil }