diff --git a/CHANGELOG.md b/CHANGELOG.md index 766fac648838..81ffdae1d139 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/baseapp/abci.go b/baseapp/abci.go index 911610358169..2ea6c76b9eb0 100644 --- a/baseapp/abci.go +++ b/baseapp/abci.go @@ -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) diff --git a/baseapp/baseapp_test.go b/baseapp/baseapp_test.go index 910be1a93e84..b6bcc4eed2ba 100644 --- a/baseapp/baseapp_test.go +++ b/baseapp/baseapp_test.go @@ -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()) } }) }