diff --git a/CHANGELOG.md b/CHANGELOG.md index a8c03ba96ee6..1dcaa9002272 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ It is strongly recommended to upgrade to these releases as well. ### Improvements +* [#12668](https://github.com/cosmos/cosmos-sdk/pull/12668) Add `authz_msg_index` event attribute to message events emitted when executing via `MsgExec` through `x/authz`. * [#12626](https://github.com/cosmos/cosmos-sdk/pull/12626) Upgrade IAVL to v0.19.0 with fast index and error propagation. NOTE: first start will take a while to propagate into new model. * [#12649](https://github.com/cosmos/cosmos-sdk/pull/12649) Bump tendermint to v0.34.20. diff --git a/x/authz/keeper/keeper.go b/x/authz/keeper/keeper.go index 5b86b647a6bb..80d8ffe6f0b6 100644 --- a/x/authz/keeper/keeper.go +++ b/x/authz/keeper/keeper.go @@ -81,6 +81,7 @@ func (k Keeper) updateGrant(ctx context.Context, grantee, granter sdk.AccAddress // grants from the message signer to the grantee. func (k Keeper) DispatchActions(ctx sdk.Context, grantee sdk.AccAddress, msgs []sdk.Msg) ([][]byte, error) { results := make([][]byte, len(msgs)) + now := ctx.BlockTime() for i, msg := range msgs { signers, _, err := k.cdc.GetMsgSigners(msg) diff --git a/x/authz/keeper/msg_server.go b/x/authz/keeper/msg_server.go index 88afed3c308a..ce4c4e282804 100644 --- a/x/authz/keeper/msg_server.go +++ b/x/authz/keeper/msg_server.go @@ -19,7 +19,14 @@ func (k Keeper) Grant(goCtx context.Context, msg *authz.MsgGrant) (*authz.MsgGra ctx := sdk.UnwrapSDKContext(goCtx) grantee, err := sdk.AccAddressFromBech32(msg.Grantee) if err != nil { - return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid grantee address: %s", err) + return nil, err + } + + // create the account if it is not in account state + granteeAcc := k.authKeeper.GetAccount(ctx, grantee) + if granteeAcc == nil { + granteeAcc = k.authKeeper.NewAccountWithAddress(ctx, grantee) + k.authKeeper.SetAccount(ctx, granteeAcc) } granter, err := sdk.AccAddressFromBech32(msg.Granter) @@ -107,10 +114,6 @@ func (k Keeper) Exec(ctx context.Context, msg *authz.MsgExec) (*authz.MsgExecRes return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid grantee address: %s", err) } - if len(msg.Msgs) == 0 { - return nil, sdkerrors.ErrInvalidRequest.Wrapf("messages cannot be empty") - } - msgs, err := msg.GetMessages() if err != nil { return nil, err