diff --git a/.mergify.yml b/.mergify.yml index 57109505..33b4df7e 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -15,4 +15,12 @@ pull_request_rules: commit_message_template: > {{ title }} (#{{ number }}) - {{ body }} \ No newline at end of file + {{ body }} + - name: backport patches to v0.47.x branch + conditions: + - base=cosmos/v0.50.x + - label=backport/v0.47.x + actions: + backport: + branches: + - cosmos/v0.47.x \ No newline at end of file diff --git a/modules/module.go b/modules/module.go index 8b717a4e..37231f38 100644 --- a/modules/module.go +++ b/modules/module.go @@ -4,11 +4,8 @@ import ( "encoding/json" "strings" - "github.com/cosmos/cosmos-sdk/x/authz" - tmctypes "github.com/cometbft/cometbft/rpc/core/types" tmtypes "github.com/cometbft/cometbft/types" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/go-co-op/gocron" "github.com/forbole/juno/v6/types" @@ -106,5 +103,5 @@ type AuthzMessageModule interface { // are passed as well. // NOTE. The returned error will be logged using the MsgError method. All other modules' handlers // will still be called. - HandleMsgExec(index int, msgExec *authz.MsgExec, authzMsgIndex int, executedMsg sdk.Msg, tx *types.Transaction) error + HandleMsgExec(index int, authzMsgIndex int, executedMsg types.Message, tx *types.Transaction) error } diff --git a/node/builder/builder.go b/node/builder/builder.go index f6f1003c..397c5422 100644 --- a/node/builder/builder.go +++ b/node/builder/builder.go @@ -5,6 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" + "github.com/forbole/juno/v6/node" nodeconfig "github.com/forbole/juno/v6/node/config" "github.com/forbole/juno/v6/node/local" diff --git a/parser/worker.go b/parser/worker.go index 7b039878..ebda1cf9 100644 --- a/parser/worker.go +++ b/parser/worker.go @@ -295,6 +295,35 @@ func (w Worker) handleMessage(index int, msg types.Message, tx *types.Transactio w.logger.MsgError(module, tx, msg, err) } } + + // If it's a MsgExecute, we need to make sure the included messages are handled as well + if msg.GetType() == "/cosmos.authz.v1beta1.MsgExec" { + var msgExec struct { + Msgs []json.RawMessage `json:"msgs"` + } + + err := json.Unmarshal(msg.GetBytes(), &msgExec) + if err != nil { + w.logger.Error("unable to unmarshal MsgExec inner messages", "error", err) + return + } + + for authzIndex, msgAny := range msgExec.Msgs { + executedMsg, err := types.UnmarshalMessage(authzIndex, msgAny) + if err != nil { + w.logger.Error("unable to unpack MsgExec inner message", "index", authzIndex, "error", err) + } + + for _, module := range w.modules { + if messageModule, ok := module.(modules.AuthzMessageModule); ok { + err = messageModule.HandleMsgExec(index, authzIndex, executedMsg, tx) + if err != nil { + w.logger.MsgError(module, tx, executedMsg, err) + } + } + } + } + } } } diff --git a/types/config/config.go b/types/config/config.go index cf3a1495..a7532429 100644 --- a/types/config/config.go +++ b/types/config/config.go @@ -3,11 +3,12 @@ package config import ( "strings" + "gopkg.in/yaml.v3" + databaseconfig "github.com/forbole/juno/v6/database/config" loggingconfig "github.com/forbole/juno/v6/logging/config" nodeconfig "github.com/forbole/juno/v6/node/config" parserconfig "github.com/forbole/juno/v6/parser/config" - "gopkg.in/yaml.v3" ) var (