Skip to content

Commit

Permalink
update ante
Browse files Browse the repository at this point in the history
  • Loading branch information
jhernandezb committed Jun 19, 2024
1 parent 8df81a5 commit 003c250
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 20 deletions.
2 changes: 1 addition & 1 deletion app/ante.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler),
ante.NewIncrementSequenceDecorator(options.AccountKeeper),
ibcante.NewRedundantRelayDecorator(options.keeper),
sgante.NewCheckDecorator(),
sgante.NewCheckDecorator(options.Codec),
}

return sdk.ChainAnteDecorators(anteDecorators...), nil
Expand Down
62 changes: 43 additions & 19 deletions internal/ante/ante.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package ante

import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/authz"

errorsmod "cosmossdk.io/errors"
"github.com/cosmos/cosmos-sdk/codec"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types"
ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types"
Expand All @@ -16,33 +18,55 @@ const (
)

type CheckDecorator struct {
cdc codec.BinaryCodec
}

func NewCheckDecorator() CheckDecorator {
return CheckDecorator{}
func NewCheckDecorator(cdc codec.BinaryCodec) CheckDecorator {
return CheckDecorator{
cdc: cdc,
}
}

func (cdc CheckDecorator) CheckMessage(m sdk.Msg) error {
switch msg := m.(type) {
case *ibctransfertypes.MsgTransfer:
if len(msg.Receiver) > MaximumReceiverLength {
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid receiver")
}
if len(msg.Memo) > MaximumMemoLength {
return errorsmod.Wrap(sdkerrors.ErrInvalidType, "invalid memo")
}
case *icacontrollertypes.MsgSendTx:
if len(msg.Owner) > MaximumOwnerLength {
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid owner")
}
case *icacontrollertypes.MsgRegisterInterchainAccount:
if len(msg.Owner) > MaximumOwnerLength {
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid owner")
}
}
return nil
}

func (cd CheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) {

Check warning on line 51 in internal/ante/ante.go

View workflow job for this annotation

GitHub Actions / golangci-lint

receiver-naming: receiver name cd should be consistent with previous receiver name cdc for CheckDecorator (revive)

Check warning on line 51 in internal/ante/ante.go

View workflow job for this annotation

GitHub Actions / golangci-lint

receiver-naming: receiver name cd should be consistent with previous receiver name cdc for CheckDecorator (revive)
if ctx.IsCheckTx() {
for _, m := range tx.GetMsgs() {
switch msg := m.(type) {
case *ibctransfertypes.MsgTransfer:
if len(msg.Receiver) > MaximumReceiverLength {
return ctx, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid receiver")
}
if len(msg.Memo) > MaximumMemoLength {
return ctx, errorsmod.Wrap(sdkerrors.ErrInvalidType, "invalid memo")
}
case *icacontrollertypes.MsgSendTx:
if len(msg.Owner) > MaximumOwnerLength {
return ctx, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid owner")
}
case *icacontrollertypes.MsgRegisterInterchainAccount:
if len(msg.Owner) > MaximumOwnerLength {
return ctx, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid owner")
err := cd.CheckMessage(m)
if err != nil {
return ctx, err
}
if msg, ok := m.(*authz.MsgExec); ok {
for _, v := range msg.Msgs {
var wrappedMsg sdk.Msg
err := cd.cdc.UnpackAny(v, &wrappedMsg)
if err != nil {
return ctx, errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "error decoding authz messages")
}
err = cd.CheckMessage(wrappedMsg)
if err != nil {
return ctx, err
}
}
default:
return next(ctx, tx, simulate)
}
}
}
Expand Down

0 comments on commit 003c250

Please sign in to comment.