fix(baseapp): avoid header height overwrite block height (backport #20107) (#20129)

Co-authored-by: mmsqe <mavis@crypto.com>
Co-authored-by: Julien Robert <julien@rbrt.fr>
This commit is contained in:
mergify[bot] 2024-04-22 13:36:31 +02:00 committed by GitHub
parent 3437fd5006
commit 7828a00244
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 25 additions and 11 deletions

View File

@ -38,6 +38,10 @@ Ref: https://keepachangelog.com/en/1.0.0/
## [Unreleased]
### Bug Fixes
* (baseapp) [#20107](https://github.com/cosmos/cosmos-sdk/pull/20107) Avoid header height overwrite block height.
## [v0.50.6](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.50.6) - 2024-04-22
### Features

View File

@ -1230,8 +1230,9 @@ func (app *BaseApp) CreateQueryContext(height int64, prove bool) (sdk.Context, e
header := app.checkState.Context().BlockHeader()
ctx := sdk.NewContext(cacheMS, header, true, app.logger).
WithMinGasPrices(app.minGasPrices).
WithBlockHeight(height).
WithGasMeter(storetypes.NewGasMeter(app.queryGasLimit)).WithBlockHeader(header)
WithGasMeter(storetypes.NewGasMeter(app.queryGasLimit)).
WithBlockHeader(header).
WithBlockHeight(height)
if height != lastBlockHeight {
rms, ok := app.cms.(*rootmulti.Store)

View File

@ -702,24 +702,33 @@ func TestABCI_CreateQueryContext(t *testing.T) {
require.NoError(t, err)
testCases := []struct {
name string
height int64
prove bool
expErr bool
name string
height int64
headerHeight int64
prove bool
expErr bool
}{
{"valid height", 2, true, false},
{"future height", 10, true, true},
{"negative height, prove=true", -1, true, true},
{"negative height, prove=false", -1, false, true},
{"valid height", 2, 2, true, false},
{"valid height with different initial height", 2, 1, true, false},
{"future height", 10, 10, true, true},
{"negative height, prove=true", -1, -1, true, true},
{"negative height, prove=false", -1, -1, false, true},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
_, err := app.CreateQueryContext(tc.height, tc.prove)
if tc.headerHeight != tc.height {
_, err := app.InitChain(&abci.RequestInitChain{
InitialHeight: tc.headerHeight,
})
require.NoError(t, err)
}
ctx, err := app.CreateQueryContext(tc.height, tc.prove)
if tc.expErr {
require.Error(t, err)
} else {
require.NoError(t, err)
require.Equal(t, tc.height, ctx.BlockHeight())
}
})
}