From 942f03de31c499fc560560712e6ce05a90f9729e Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Wed, 10 Aug 2022 12:36:31 +0200 Subject: [PATCH 1/3] fix(x/groups) propagate events correctly to current context --- x/group/keeper/msg_server.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/x/group/keeper/msg_server.go b/x/group/keeper/msg_server.go index dde4bb222c51..90679d1c040b 100644 --- a/x/group/keeper/msg_server.go +++ b/x/group/keeper/msg_server.go @@ -747,20 +747,26 @@ func (k Keeper) Exec(goCtx context.Context, req *group.MsgExec) (*group.MsgExecR var logs string if proposal.Status == group.PROPOSAL_STATUS_ACCEPTED && proposal.ExecutorResult != group.PROPOSAL_EXECUTOR_RESULT_SUCCESS { // Caching context so that we don't update the store in case of failure. - ctx, flush := ctx.CacheContext() + cacheCtx, flush := ctx.CacheContext() addr, err := sdk.AccAddressFromBech32(policyInfo.Address) if err != nil { return nil, err } - _, err = k.doExecuteMsgs(ctx, k.router, proposal, addr) + + results, err := k.doExecuteMsgs(cacheCtx, k.router, proposal, addr) if err != nil { proposal.ExecutorResult = group.PROPOSAL_EXECUTOR_RESULT_FAILURE logs = fmt.Sprintf("proposal execution failed on proposal %d, because of error %s", id, err.Error()) - k.Logger(ctx).Info("proposal execution failed", "cause", err, "proposalID", id) + k.Logger(cacheCtx).Info("proposal execution failed", "cause", err, "proposalID", id) } else { proposal.ExecutorResult = group.PROPOSAL_EXECUTOR_RESULT_SUCCESS flush() + + for _, res := range results { + // NOTE: The sdk msg handler creates a new EventManager, so events must be correctly propagated back to the current context + ctx.EventManager().EmitEvents(res.GetEvents()) + } } } From 77452e402f25d3708416c4f63484fc3ee4af73de Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Wed, 10 Aug 2022 13:02:20 +0200 Subject: [PATCH 2/3] update to use current context on logger --- x/group/keeper/msg_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/group/keeper/msg_server.go b/x/group/keeper/msg_server.go index 90679d1c040b..fb1ab258901c 100644 --- a/x/group/keeper/msg_server.go +++ b/x/group/keeper/msg_server.go @@ -758,7 +758,7 @@ func (k Keeper) Exec(goCtx context.Context, req *group.MsgExec) (*group.MsgExecR if err != nil { proposal.ExecutorResult = group.PROPOSAL_EXECUTOR_RESULT_FAILURE logs = fmt.Sprintf("proposal execution failed on proposal %d, because of error %s", id, err.Error()) - k.Logger(cacheCtx).Info("proposal execution failed", "cause", err, "proposalID", id) + k.Logger(ctx).Info("proposal execution failed", "cause", err, "proposalID", id) } else { proposal.ExecutorResult = group.PROPOSAL_EXECUTOR_RESULT_SUCCESS flush() From f33e7cac99f3329dced2b03bbc01c6374f8bb62b Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Wed, 10 Aug 2022 13:02:28 +0200 Subject: [PATCH 3/3] adding changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6dc151f972e..cdc2aa1f8ab8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -114,6 +114,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (x/staking) [#12303](https://github.com/cosmos/cosmos-sdk/pull/12303) Use bytes instead of string comparison in delete validator queue * (x/auth/tx) [#12474](https://github.com/cosmos/cosmos-sdk/pull/12474) Remove condition in GetTxsEvent that disallowed multiple equal signs, which would break event queries with base64 strings (i.e. query by signature). * (store/rootmulti) [#12487](https://github.com/cosmos/cosmos-sdk/pull/12487) Fix non-deterministic map iteration. +* (x/group) [#12888](https://github.com/cosmos/cosmos-sdk/pull/12888) Fix event propagation to the current context of `x/group` message execution `[]sdk.Result`. ### Deprecated