Skip to content

Commit 0ca8b94

Browse files
committed
Streamline EndBlock
1 parent 2d58dad commit 0ca8b94

File tree

26 files changed

+214
-388
lines changed

26 files changed

+214
-388
lines changed

app/abci.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
"github.com/cosmos/cosmos-sdk/telemetry"
88
sdk "github.com/cosmos/cosmos-sdk/types"
9+
"github.com/cosmos/cosmos-sdk/types/legacytm"
910
"github.com/sei-protocol/sei-chain/app/legacyabci"
1011
"github.com/sei-protocol/sei-chain/utils/metrics"
1112
abci "github.com/tendermint/tendermint/abci/types"
@@ -50,11 +51,21 @@ func (app *App) MidBlock(ctx sdk.Context, height int64) []abci.Event {
5051
return app.BaseApp.MidBlock(ctx, height)
5152
}
5253

53-
func (app *App) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) (res abci.ResponseEndBlock) {
54+
func (app *App) EndBlock(ctx sdk.Context, height int64, blockGasUsed int64) (res abci.ResponseEndBlock) {
5455
spanCtx, span := app.GetBaseApp().TracingInfo.StartWithContext("EndBlock", ctx.TraceSpanContext())
5556
defer span.End()
5657
ctx = ctx.WithTraceSpanContext(spanCtx)
57-
return app.BaseApp.EndBlock(ctx, req)
58+
// Clear DeliverTx Events
59+
ctx.MultiStore().ResetEvents()
60+
defer telemetry.MeasureSince(time.Now(), "abci", "end_block")
61+
ctx = ctx.WithEventManager(sdk.NewEventManager())
62+
defer telemetry.MeasureSince(time.Now(), "module", "total_end_block")
63+
res.ValidatorUpdates = legacyabci.EndBlock(ctx, height, blockGasUsed, app.EndBlockKeepers)
64+
res.Events = sdk.MarkEventsToIndex(ctx.EventManager().ABCIEvents(), app.IndexEvents)
65+
if cp := app.GetConsensusParams(ctx); cp != nil {
66+
res.ConsensusParamUpdates = legacytm.ABCIToLegacyConsensusParams(cp)
67+
}
68+
return res
5869
}
5970

6071
func (app *App) CheckTx(ctx context.Context, req *abci.RequestCheckTx) (*abci.ResponseCheckTxV2, error) {

app/app.go

Lines changed: 10 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,7 @@ type App struct {
353353
TokenFactoryKeeper tokenfactorykeeper.Keeper
354354

355355
BeginBlockKeepers legacyabci.BeginBlockKeepers
356+
EndBlockKeepers legacyabci.EndBlockKeepers
356357

357358
// mm is the module manager
358359
mm *module.Manager
@@ -776,38 +777,19 @@ func New(
776777
IBCKeeper: app.IBCKeeper,
777778
EvmKeeper: &app.EvmKeeper,
778779
}
780+
app.EndBlockKeepers = legacyabci.EndBlockKeepers{
781+
CrisisKeeper: &app.CrisisKeeper,
782+
GovKeeper: &app.GovKeeper,
783+
StakingKeeper: &app.StakingKeeper,
784+
OracleKeeper: &app.OracleKeeper,
785+
EvmKeeper: &app.EvmKeeper,
786+
AccessControlKeeper: &app.AccessControlKeeper,
787+
}
779788

780789
app.mm.SetOrderMidBlockers(
781790
oracletypes.ModuleName,
782791
)
783792

784-
app.mm.SetOrderEndBlockers(
785-
crisistypes.ModuleName,
786-
govtypes.ModuleName,
787-
stakingtypes.ModuleName,
788-
capabilitytypes.ModuleName,
789-
authtypes.ModuleName,
790-
banktypes.ModuleName,
791-
distrtypes.ModuleName,
792-
slashingtypes.ModuleName,
793-
minttypes.ModuleName,
794-
genutiltypes.ModuleName,
795-
evidencetypes.ModuleName,
796-
authz.ModuleName,
797-
feegrant.ModuleName,
798-
paramstypes.ModuleName,
799-
upgradetypes.ModuleName,
800-
vestingtypes.ModuleName,
801-
ibchost.ModuleName,
802-
ibctransfertypes.ModuleName,
803-
oracletypes.ModuleName,
804-
epochmoduletypes.ModuleName,
805-
evmtypes.ModuleName,
806-
wasm.ModuleName,
807-
tokenfactorytypes.ModuleName,
808-
acltypes.ModuleName,
809-
)
810-
811793
// NOTE: The genutils module must occur after staking so that pools are
812794
// properly initialized with tokens from genesis accounts.
813795
// NOTE: Capability module must occur first so that it can initialize any capabilities
@@ -897,7 +879,6 @@ func New(
897879
app.SetAnteHandler(anteHandler)
898880
app.SetAnteDepGenerator(anteDepGenerator)
899881
app.SetMidBlocker(app.MidBlocker)
900-
app.SetEndBlocker(app.EndBlocker)
901882
app.SetPrepareProposalHandler(app.PrepareProposalHandler)
902883
app.SetProcessProposalHandler(app.ProcessProposalHandler)
903884
app.SetFinalizeBlocker(app.FinalizeBlocker)
@@ -1048,11 +1029,6 @@ func (app *App) MidBlocker(ctx sdk.Context, height int64) []abci.Event {
10481029
return app.mm.MidBlock(ctx, height)
10491030
}
10501031

1051-
// EndBlocker application updates every end block
1052-
func (app *App) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock {
1053-
return app.mm.EndBlock(ctx, req)
1054-
}
1055-
10561032
// InitChainer application update at chain initialization
10571033
func (app *App) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain {
10581034
var genesisState GenesisState
@@ -1638,10 +1614,7 @@ func (app *App) ProcessBlock(ctx sdk.Context, txs [][]byte, req BlockProcessRequ
16381614
}
16391615
}
16401616

1641-
endBlockResp = app.EndBlock(ctx, abci.RequestEndBlock{
1642-
Height: req.GetHeight(),
1643-
BlockGasUsed: evmTotalGasUsed,
1644-
})
1617+
endBlockResp = app.EndBlock(ctx, req.GetHeight(), evmTotalGasUsed)
16451618

16461619
events = append(events, endBlockResp.Events...)
16471620
return events, txResults, endBlockResp, nil

app/apptesting/test_suite.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,7 @@ func (s *KeeperTestHelper) SetupTokenFactory() {
120120

121121
// EndBlock ends the block.
122122
func (s *KeeperTestHelper) EndBlock() {
123-
reqEndBlock := abci.RequestEndBlock{Height: s.Ctx.BlockHeight()}
124-
s.App.EndBlocker(s.Ctx, reqEndBlock)
123+
legacyabci.EndBlock(s.Ctx, s.Ctx.BlockHeight(), 0, s.App.EndBlockKeepers)
125124
}
126125

127126
// AllocateRewardsToValidator allocates reward tokens to a distribution module then allocates rewards to the validator address.

app/legacyabci/end_block.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package legacyabci
2+
3+
import (
4+
sdk "github.com/cosmos/cosmos-sdk/types"
5+
accesscontrolkeeper "github.com/cosmos/cosmos-sdk/x/accesscontrol/keeper"
6+
"github.com/cosmos/cosmos-sdk/x/crisis"
7+
crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper"
8+
"github.com/cosmos/cosmos-sdk/x/gov"
9+
govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
10+
"github.com/cosmos/cosmos-sdk/x/staking"
11+
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
12+
evmkeeper "github.com/sei-protocol/sei-chain/x/evm/keeper"
13+
"github.com/sei-protocol/sei-chain/x/oracle"
14+
oraclekeeper "github.com/sei-protocol/sei-chain/x/oracle/keeper"
15+
abci "github.com/tendermint/tendermint/abci/types"
16+
)
17+
18+
type EndBlockKeepers struct {
19+
CrisisKeeper *crisiskeeper.Keeper
20+
GovKeeper *govkeeper.Keeper
21+
StakingKeeper *stakingkeeper.Keeper
22+
OracleKeeper *oraclekeeper.Keeper
23+
EvmKeeper *evmkeeper.Keeper
24+
AccessControlKeeper *accesscontrolkeeper.Keeper
25+
}
26+
27+
func EndBlock(ctx sdk.Context, height int64, blockGasUsed int64, keepers EndBlockKeepers) []abci.ValidatorUpdate {
28+
crisis.EndBlocker(ctx, *keepers.CrisisKeeper)
29+
gov.EndBlocker(ctx, *keepers.GovKeeper)
30+
vals := staking.EndBlocker(ctx, *keepers.StakingKeeper)
31+
oracle.EndBlocker(ctx, *keepers.OracleKeeper)
32+
keepers.EvmKeeper.EndBlock(ctx, height, blockGasUsed)
33+
keepers.AccessControlKeeper.EndBlock(ctx)
34+
return vals
35+
}

app/test_helpers.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,7 @@ func (s *TestWrapper) BeginBlock() {
200200
}
201201

202202
func (s *TestWrapper) EndBlock() {
203-
reqEndBlock := abci.RequestEndBlock{Height: s.Ctx.BlockHeight()}
204-
s.App.EndBlocker(s.Ctx, reqEndBlock)
203+
legacyabci.EndBlock(s.Ctx, s.Ctx.BlockHeight(), 0, s.App.EndBlockKeepers)
205204
}
206205

207206
func setupReceiptStore() (seidbtypes.StateStore, error) {

sei-cosmos/tests/mocks/types_module_module.go

Lines changed: 0 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sei-cosmos/types/module/module.go

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -258,19 +258,13 @@ func (gam GenesisOnlyAppModule) RegisterServices(Configurator) {}
258258
// ConsensusVersion implements AppModule/ConsensusVersion.
259259
func (gam GenesisOnlyAppModule) ConsensusVersion() uint64 { return 1 }
260260

261-
// EndBlock returns an empty module end-block
262-
func (GenesisOnlyAppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {
263-
return []abci.ValidatorUpdate{}
264-
}
265-
266261
// Manager defines a module manager that provides the high level utility for managing and executing
267262
// operations for a group of modules
268263
type Manager struct {
269264
Modules map[string]AppModule
270265
OrderInitGenesis []string
271266
OrderExportGenesis []string
272267
OrderMidBlockers []string
273-
OrderEndBlockers []string
274268
OrderMigrations []string
275269
}
276270

@@ -288,7 +282,6 @@ func NewManager(modules ...AppModule) *Manager {
288282
Modules: moduleMap,
289283
OrderInitGenesis: modulesStr,
290284
OrderExportGenesis: modulesStr,
291-
OrderEndBlockers: modulesStr,
292285
}
293286
}
294287

@@ -309,12 +302,6 @@ func (m *Manager) SetOrderMidBlockers(moduleNames ...string) {
309302
m.OrderMidBlockers = moduleNames
310303
}
311304

312-
// SetOrderEndBlockers sets the order of set end-blocker calls
313-
func (m *Manager) SetOrderEndBlockers(moduleNames ...string) {
314-
m.assertNoForgottenModules("SetOrderEndBlockers", moduleNames)
315-
m.OrderEndBlockers = moduleNames
316-
}
317-
318305
// SetOrderMigrations sets the order of migrations to be run. If not set
319306
// then migrations will be run with an order defined in `DefaultMigrationsOrder`.
320307
func (m *Manager) SetOrderMigrations(moduleNames ...string) {
@@ -604,39 +591,6 @@ func (m *Manager) MidBlock(ctx sdk.Context, height int64) []abci.Event {
604591
return ctx.EventManager().ABCIEvents()
605592
}
606593

607-
// EndBlock performs end block functionality for all modules. It creates a
608-
// child context with an event manager to aggregate events emitted from all
609-
// modules.
610-
func (m *Manager) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock {
611-
ctx = ctx.WithEventManager(sdk.NewEventManager())
612-
validatorUpdates := []abci.ValidatorUpdate{}
613-
defer telemetry.MeasureSince(time.Now(), "module", "total_end_block")
614-
for _, moduleName := range m.OrderEndBlockers {
615-
module, ok := m.Modules[moduleName].(EndBlockAppModule)
616-
if !ok {
617-
continue
618-
}
619-
moduleStartTime := time.Now()
620-
moduleValUpdates := module.EndBlock(ctx, req)
621-
telemetry.ModuleMeasureSince(moduleName, moduleStartTime, "module", "end_block")
622-
// use these validator updates if provided, the module manager assumes
623-
// only one module will update the validator set
624-
if len(moduleValUpdates) > 0 {
625-
if len(validatorUpdates) > 0 {
626-
panic("validator EndBlock updates already set by a previous module")
627-
}
628-
629-
validatorUpdates = moduleValUpdates
630-
}
631-
632-
}
633-
634-
return abci.ResponseEndBlock{
635-
ValidatorUpdates: validatorUpdates,
636-
Events: ctx.EventManager().ABCIEvents(),
637-
}
638-
}
639-
640594
// GetVersionMap gets consensus version from all modules
641595
func (m *Manager) GetVersionMap() VersionMap {
642596
vermap := make(VersionMap)

sei-cosmos/types/module/module_test.go

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,6 @@ func TestManagerOrderSetters(t *testing.T) {
111111
require.Empty(t, mm.OrderMidBlockers)
112112
mm.SetOrderMidBlockers("module2", "module1")
113113
require.Equal(t, []string{"module2", "module1"}, mm.OrderMidBlockers)
114-
115-
require.Equal(t, []string{"module1", "module2"}, mm.OrderEndBlockers)
116-
mm.SetOrderEndBlockers("module2", "module1")
117-
require.Equal(t, []string{"module2", "module1"}, mm.OrderEndBlockers)
118114
}
119115

120116
func TestManager_RegisterInvariants(t *testing.T) {
@@ -262,28 +258,3 @@ func TestManager_MidBlock(t *testing.T) {
262258
mockAppModule2.EXPECT().MidBlock(gomock.Any(), gomock.Eq(height)).Times(1)
263259
mm.MidBlock(sdk.NewContext(nil, tmproto.Header{}, false, nil), height)
264260
}
265-
266-
func TestManager_EndBlock(t *testing.T) {
267-
mockCtrl := gomock.NewController(t)
268-
t.Cleanup(mockCtrl.Finish)
269-
270-
mockAppModule1 := mocks.NewMockAppModule(mockCtrl)
271-
mockAppModule2 := mocks.NewMockAppModule(mockCtrl)
272-
mockAppModule1.EXPECT().Name().Times(2).Return("module1")
273-
mockAppModule2.EXPECT().Name().Times(2).Return("module2")
274-
mm := module.NewManager(mockAppModule1, mockAppModule2)
275-
require.NotNil(t, mm)
276-
require.Equal(t, 2, len(mm.Modules))
277-
278-
req := abci.RequestEndBlock{Height: 10}
279-
280-
mockAppModule1.EXPECT().EndBlock(gomock.Any(), gomock.Eq(req)).Times(1).Return([]abci.ValidatorUpdate{{}})
281-
mockAppModule2.EXPECT().EndBlock(gomock.Any(), gomock.Eq(req)).Times(1)
282-
ret := mm.EndBlock(sdk.NewContext(nil, tmproto.Header{}, false, nil), req)
283-
require.Equal(t, []abci.ValidatorUpdate{{}}, ret.ValidatorUpdates)
284-
285-
// test panic
286-
mockAppModule1.EXPECT().EndBlock(gomock.Any(), gomock.Eq(req)).Times(1).Return([]abci.ValidatorUpdate{{}})
287-
mockAppModule2.EXPECT().EndBlock(gomock.Any(), gomock.Eq(req)).Times(1).Return([]abci.ValidatorUpdate{{}})
288-
require.Panics(t, func() { mm.EndBlock(sdk.NewContext(nil, tmproto.Header{}, false, nil), req) })
289-
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package keeper
2+
3+
import (
4+
sdk "github.com/cosmos/cosmos-sdk/types"
5+
"github.com/cosmos/cosmos-sdk/x/accesscontrol/constants"
6+
)
7+
8+
func (k *Keeper) EndBlock(ctx sdk.Context) {
9+
badWasmDependencyAddresses := ctx.Context().Value(constants.BadWasmDependencyAddressesKey)
10+
if badWasmDependencyAddresses != nil {
11+
typedBadWasmDependencyAddresses, ok := badWasmDependencyAddresses.([]sdk.AccAddress)
12+
if ok && typedBadWasmDependencyAddresses != nil {
13+
for _, addr := range typedBadWasmDependencyAddresses {
14+
k.ResetWasmDependencyMapping(ctx, addr, constants.ResetReasonBadWasmDependency)
15+
}
16+
}
17+
}
18+
}

sei-cosmos/x/accesscontrol/module.go

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
sdk "github.com/cosmos/cosmos-sdk/types"
1717
"github.com/cosmos/cosmos-sdk/types/module"
1818
cli "github.com/cosmos/cosmos-sdk/x/accesscontrol/client/cli"
19-
"github.com/cosmos/cosmos-sdk/x/accesscontrol/constants"
2019
"github.com/cosmos/cosmos-sdk/x/accesscontrol/keeper"
2120
"github.com/cosmos/cosmos-sdk/x/accesscontrol/migrations"
2221
"github.com/cosmos/cosmos-sdk/x/accesscontrol/types"
@@ -169,18 +168,3 @@ func (am AppModule) ExportGenesisStream(ctx sdk.Context, cdc codec.JSONCodec) <-
169168

170169
// ConsensusVersion implements AppModule/ConsensusVersion.
171170
func (AppModule) ConsensusVersion() uint64 { return 2 }
172-
173-
// EndBlock returns the end blocker for the accesscontrol module. It returns no validator
174-
// updates.
175-
func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {
176-
badWasmDependencyAddresses := ctx.Context().Value(constants.BadWasmDependencyAddressesKey)
177-
if badWasmDependencyAddresses != nil {
178-
typedBadWasmDependencyAddresses, ok := badWasmDependencyAddresses.([]sdk.AccAddress)
179-
if ok && typedBadWasmDependencyAddresses != nil {
180-
for _, addr := range typedBadWasmDependencyAddresses {
181-
am.keeper.ResetWasmDependencyMapping(ctx, addr, constants.ResetReasonBadWasmDependency)
182-
}
183-
}
184-
}
185-
return []abci.ValidatorUpdate{}
186-
}

0 commit comments

Comments
 (0)