Skip to content

Commit

Permalink
feat(x/intent): add sanity check to Action.Msg signer
Browse files Browse the repository at this point in the history
  • Loading branch information
Pitasi committed Jun 3, 2024
1 parent 730b1c4 commit 9798f43
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 4 deletions.
22 changes: 22 additions & 0 deletions warden/x/intent/keeper/actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"
"runtime/debug"

errorsmod "cosmossdk.io/errors"
"github.com/cosmos/cosmos-sdk/baseapp"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
Expand Down Expand Up @@ -145,6 +146,10 @@ type actionCreatorKey struct{}
// The action is created with the provided creator as the first approver.
// This function also tries to execute the action immediately if it's ready.
func (k Keeper) AddAction(ctx context.Context, creator string, msg sdk.Msg, intent types.Intent, timeoutHeight uint64) (*types.Action, error) {
if err := k.validateActionMsgSigners(msg); err != nil {
return nil, err
}

wrappedMsg, err := codectypes.NewAnyWithValue(msg)
if err != nil {
return nil, err
Expand Down Expand Up @@ -197,3 +202,20 @@ func (k Keeper) AddAction(ctx context.Context, creator string, msg sdk.Msg, inte

return act, nil
}

// assert that the x/intent module account is the only signer of the message
func (k Keeper) validateActionMsgSigners(msg sdk.Msg) error {
signers, _, err := k.cdc.GetMsgV1Signers(msg)
if err != nil {
return err
}
if len(signers) != 1 {
return types.ErrInvalidSigner
}

if sdk.AccAddress(signers[0]).String() != k.GetAuthority() {
return errorsmod.Wrapf(types.ErrInvalidActionMsgSigner, sdk.AccAddress(signers[0]).String())
}

return nil
}
4 changes: 2 additions & 2 deletions warden/x/intent/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (

type (
Keeper struct {
cdc codec.BinaryCodec
cdc codec.Codec
storeService store.KVStoreService
logger log.Logger
router baseapp.MessageRouter
Expand All @@ -44,7 +44,7 @@ var (
)

func NewKeeper(
cdc codec.BinaryCodec,
cdc codec.Codec,
storeService store.KVStoreService,
logger log.Logger,
router baseapp.MessageRouter,
Expand Down
5 changes: 3 additions & 2 deletions warden/x/intent/types/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

// x/intent module sentinel errors
var (
ErrInvalidSigner = sdkerrors.Register(ModuleName, 1100, "expected gov account as only signer for proposal message")
ErrSample = sdkerrors.Register(ModuleName, 1101, "sample error")
ErrInvalidSigner = sdkerrors.Register(ModuleName, 1100, "expected gov account as only signer for proposal message")
ErrSample = sdkerrors.Register(ModuleName, 1101, "sample error")
ErrInvalidActionMsgSigner = sdkerrors.Register(ModuleName, 1102, "expected x/intent account as only signer for action message")
)

0 comments on commit 9798f43

Please sign in to comment.