fix(baseapp): avoid header height overwrite block height (#20107)
This commit is contained in:
parent
06a2ae38be
commit
b97caa35c8
@ -117,6 +117,7 @@ Every module contains its own CHANGELOG.md. Please refer to the module you are i
|
||||
* (x/bank) [#20028](https://github.com/cosmos/cosmos-sdk/pull/20028) Align query with multi denoms for send-enabled.
|
||||
* (cli) [#20020](https://github.com/cosmos/cosmos-sdk/pull/20020) Make bootstrap-state command support both new and legacy genesis format.
|
||||
* (baseapp) [#19616](https://github.com/cosmos/cosmos-sdk/pull/19616) Don't share gas meter in tx execution.
|
||||
* (baseapp) [#20107](https://github.com/cosmos/cosmos-sdk/pull/20107) Allow height overwrite BlockHeight in header.
|
||||
|
||||
### API Breaking Changes
|
||||
|
||||
|
||||
@ -1250,13 +1250,13 @@ func (app *BaseApp) CreateQueryContext(height int64, prove bool) (sdk.Context, e
|
||||
// branch the commit multi-store for safety
|
||||
ctx := sdk.NewContext(cacheMS, true, app.logger).
|
||||
WithMinGasPrices(app.minGasPrices).
|
||||
WithBlockHeight(height).
|
||||
WithGasMeter(storetypes.NewGasMeter(app.queryGasLimit)).
|
||||
WithHeaderInfo(coreheader.Info{
|
||||
ChainID: app.chainID,
|
||||
Height: height,
|
||||
}).
|
||||
WithBlockHeader(app.checkState.Context().BlockHeader())
|
||||
WithBlockHeader(app.checkState.Context().BlockHeader()).
|
||||
WithBlockHeight(height)
|
||||
|
||||
if height != lastBlockHeight {
|
||||
rms, ok := app.cms.(*rootmulti.Store)
|
||||
|
||||
@ -709,24 +709,33 @@ func TestABCI_CreateQueryContext(t *testing.T) {
|
||||
_, err = app.Commit()
|
||||
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())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user