From 35574f7f27d2b95884a1a8e08c6585db3584345a Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Wed, 2 Nov 2022 12:03:22 +0100 Subject: [PATCH 1/4] allow writeCache functionality to propagate events by not creating a new event manager in handlers --- baseapp/msg_service_router.go | 1 - 1 file changed, 1 deletion(-) diff --git a/baseapp/msg_service_router.go b/baseapp/msg_service_router.go index 2df4e113d839..44dac3a7b181 100644 --- a/baseapp/msg_service_router.go +++ b/baseapp/msg_service_router.go @@ -107,7 +107,6 @@ func (msr *MsgServiceRouter) RegisterService(sd *grpc.ServiceDesc, handler inter } msr.routes[requestTypeName] = func(ctx sdk.Context, req sdk.Msg) (*sdk.Result, error) { - ctx = ctx.WithEventManager(sdk.NewEventManager()) interceptor := func(goCtx context.Context, _ interface{}, _ *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { goCtx = context.WithValue(goCtx, sdk.SdkContextKey, ctx) return handler(goCtx, req) From 61d4437a448e5898d3d421d3eacee2043537683a Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Wed, 2 Nov 2022 15:48:33 +0100 Subject: [PATCH 2/4] readd new event manager in baseapp --- baseapp/msg_service_router.go | 1 + 1 file changed, 1 insertion(+) diff --git a/baseapp/msg_service_router.go b/baseapp/msg_service_router.go index 44dac3a7b181..2df4e113d839 100644 --- a/baseapp/msg_service_router.go +++ b/baseapp/msg_service_router.go @@ -107,6 +107,7 @@ func (msr *MsgServiceRouter) RegisterService(sd *grpc.ServiceDesc, handler inter } msr.routes[requestTypeName] = func(ctx sdk.Context, req sdk.Msg) (*sdk.Result, error) { + ctx = ctx.WithEventManager(sdk.NewEventManager()) interceptor := func(goCtx context.Context, _ interface{}, _ *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { goCtx = context.WithValue(goCtx, sdk.SdkContextKey, ctx) return handler(goCtx, req) From bc538282483bac3e69ba89ae13b5150dad077d50 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Wed, 2 Nov 2022 15:59:53 +0100 Subject: [PATCH 3/4] propagate msg events to current context in x/gov proposal execution --- x/gov/abci.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/x/gov/abci.go b/x/gov/abci.go index cc49b808f81f..79efc725bfe7 100644 --- a/x/gov/abci.go +++ b/x/gov/abci.go @@ -58,8 +58,9 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) { if passes { var ( - idx int - msg sdk.Msg + idx int + events sdk.Events + msg sdk.Msg ) // attempt to execute all messages within the passed proposal @@ -71,10 +72,12 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) { if err == nil { for idx, msg = range messages { handler := keeper.Router().Handler(msg) - _, err = handler(cacheCtx, msg) + res, err := handler(cacheCtx, msg) if err != nil { break } + + events = append(events, res.GetEvents()...) } } @@ -87,6 +90,9 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) { // write state to the underlying multi-store writeCache() + + // propagate the msg events to the current context + ctx.EventManager().EmitEvents(events) } else { proposal.Status = v1.StatusFailed tagValue = types.AttributeValueProposalFailed From 01aac4fe15492c2d72d6d5c9f76408712b967608 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Wed, 2 Nov 2022 16:38:16 +0100 Subject: [PATCH 4/4] adding changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c733cc385a6d..a3053a2f5b65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -175,6 +175,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (x/gov) [#13051](https://github.com/cosmos/cosmos-sdk/pull/13051) In SubmitPropsal, when a legacy msg fails it's handler call, wrap the error as ErrInvalidProposalContent (instead of ErrNoProposalHandlerExists). * (x/gov) [#13045](https://github.com/cosmos/cosmos-sdk/pull/13045) Fix gov migrations for v3(0.46). * (snapshot) [#13400](https://github.com/cosmos/cosmos-sdk/pull/13400) Fix snapshot checksum issue in golang 1.19. +* (x/gov) [#13728](https://github.com/cosmos/cosmos-sdk/pull/13728) Fix propagation of message events to the current context in `EndBlocker`. ### Deprecated