Skip to content

Commit

Permalink
sdk-v50 - ante wip fix types
Browse files Browse the repository at this point in the history
  • Loading branch information
MalteHerrmann committed Sep 19, 2024
1 parent 19b60dc commit 7649fa8
Show file tree
Hide file tree
Showing 32 changed files with 2,582 additions and 542 deletions.
2 changes: 1 addition & 1 deletion ante/cosmos/authz.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func NewAuthzLimiterDecorator(disabledMsgTypes ...string) AuthzLimiterDecorator

func (ald AuthzLimiterDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) {
if err := ald.checkDisabledMsgs(tx.GetMsgs(), false, 1); err != nil {
return ctx, errorsmod.Wrap(errortypes.ErrUnauthorized, err.Error())
return ctx, errorsmod.Wrapf(errortypes.ErrUnauthorized, "%s", err.Error())
}
return next(ctx, tx, simulate)
}
Expand Down
92 changes: 60 additions & 32 deletions ante/cosmos/authz_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,28 @@ import (

"cosmossdk.io/math"
abci "github.com/cometbft/cometbft/abci/types"
"github.com/stretchr/testify/require"

sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
sdkvesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
"github.com/cosmos/cosmos-sdk/x/authz"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"

ethtypes "github.com/ethereum/go-ethereum/core/types"
cosmosante "github.com/evmos/os/ante/cosmos"
cosmosante "github.com/evmos/os/app/ante/cosmos"
"github.com/evmos/os/testutil"
"github.com/evmos/os/testutil/integration/common/factory"
"github.com/evmos/os/testutil/integration/os/network"

utiltx "github.com/evmos/os/testutil/tx"
evmtypes "github.com/evmos/os/x/evm/types"
"github.com/stretchr/testify/require"
)

func TestAuthzLimiterDecorator(t *testing.T) {
nw := network.New()
txCfg := nw.GetEncodingConfig().TxConfig
testPrivKeys, testAddresses, err := generatePrivKeyAddressPairs(5)
require.NoError(t, err)

Expand Down Expand Up @@ -52,7 +59,7 @@ func TestAuthzLimiterDecorator(t *testing.T) {
banktypes.NewMsgSend(
testAddresses[0],
testAddresses[1],
sdk.NewCoins(sdk.NewInt64Coin(testutil.ExampleAttoDenom, 100e6)),
sdk.NewCoins(sdk.NewInt64Coin(evmtypes.DefaultEVMDenom, 100e6)),
),
},
false,
Expand Down Expand Up @@ -134,7 +141,7 @@ func TestAuthzLimiterDecorator(t *testing.T) {
[]sdk.Msg{banktypes.NewMsgSend(
testAddresses[0],
testAddresses[3],
sdk.NewCoins(sdk.NewInt64Coin(testutil.ExampleAttoDenom, 100e6)),
sdk.NewCoins(sdk.NewInt64Coin(evmtypes.DefaultEVMDenom, 100e6)),
)}),
},
false,
Expand Down Expand Up @@ -168,7 +175,7 @@ func TestAuthzLimiterDecorator(t *testing.T) {
banktypes.NewMsgSend(
testAddresses[0],
testAddresses[3],
sdk.NewCoins(sdk.NewInt64Coin(testutil.ExampleAttoDenom, 100e6)),
sdk.NewCoins(sdk.NewInt64Coin(evmtypes.DefaultEVMDenom, 100e6)),
),
&evmtypes.MsgEthereumTx{},
},
Expand Down Expand Up @@ -219,7 +226,7 @@ func TestAuthzLimiterDecorator(t *testing.T) {
banktypes.NewMsgSend(
testAddresses[0],
testAddresses[3],
sdk.NewCoins(sdk.NewInt64Coin(testutil.ExampleAttoDenom, 100e6)),
sdk.NewCoins(sdk.NewInt64Coin(evmtypes.DefaultEVMDenom, 100e6)),
),
},
),
Expand All @@ -237,7 +244,7 @@ func TestAuthzLimiterDecorator(t *testing.T) {
banktypes.NewMsgSend(
testAddresses[0],
testAddresses[3],
sdk.NewCoins(sdk.NewInt64Coin(testutil.ExampleAttoDenom, 100e6)),
sdk.NewCoins(sdk.NewInt64Coin(evmtypes.DefaultEVMDenom, 100e6)),
),
},
),
Expand All @@ -248,7 +255,7 @@ func TestAuthzLimiterDecorator(t *testing.T) {
banktypes.NewMsgSend(
testAddresses[0],
testAddresses[3],
sdk.NewCoins(sdk.NewInt64Coin(testutil.ExampleAttoDenom, 100e6)),
sdk.NewCoins(sdk.NewInt64Coin(evmtypes.DefaultEVMDenom, 100e6)),
),
},
),
Expand All @@ -261,10 +268,10 @@ func TestAuthzLimiterDecorator(t *testing.T) {
for _, tc := range testCases {
t.Run(fmt.Sprintf("Case %s", tc.name), func(t *testing.T) {
ctx := sdk.Context{}.WithIsCheckTx(tc.checkTx)
tx, err := createTx(testPrivKeys[0], tc.msgs...)
tx, err := createTx(ctx, txCfg, testPrivKeys[0], tc.msgs...)
require.NoError(t, err)

_, err = decorator.AnteHandle(ctx, tx, false, testutil.NoOpNextFn)
_, err = decorator.AnteHandle(ctx, tx, false, testutil.NextFn)
if tc.expectedErr != nil {
require.Error(t, err)
require.ErrorIs(t, err, tc.expectedErr)
Expand All @@ -279,15 +286,17 @@ func (suite *AnteTestSuite) TestRejectMsgsInAuthz() {
_, testAddresses, err := generatePrivKeyAddressPairs(10)
suite.Require().NoError(err)

var gasLimit uint64 = 1000000
distantFuture := time.Date(9000, 1, 1, 0, 0, 0, 0, time.UTC)

nw := suite.GetNetwork()
// create a dummy MsgEthereumTx for the test
// otherwise throws error that cannot unpack tx data
msgEthereumTx := evmtypes.NewTx(&evmtypes.EvmTxArgs{
ChainID: big.NewInt(9000),
ChainID: nw.GetEIP155ChainID(),
Nonce: 0,
GasLimit: 1000000,
GasFeeCap: suite.app.FeeMarketKeeper.GetBaseFee(suite.ctx),
GasLimit: gasLimit,
GasFeeCap: nw.App.FeeMarketKeeper.GetBaseFee(nw.GetContext()),
GasTipCap: big.NewInt(1),
Input: nil,
Accesses: &ethtypes.AccessList{},
Expand Down Expand Up @@ -337,7 +346,7 @@ func (suite *AnteTestSuite) TestRejectMsgsInAuthz() {
banktypes.NewMsgSend(
testAddresses[0],
testAddresses[3],
sdk.NewCoins(sdk.NewInt64Coin(testutil.ExampleAttoDenom, 100e6)),
sdk.NewCoins(sdk.NewInt64Coin(evmtypes.DefaultEVMDenom, 100e6)),
),
msgEthereumTx,
},
Expand Down Expand Up @@ -368,7 +377,7 @@ func (suite *AnteTestSuite) TestRejectMsgsInAuthz() {
banktypes.NewMsgSend(
testAddresses[0],
testAddresses[3],
sdk.NewCoins(sdk.NewInt64Coin(testutil.ExampleAttoDenom, 100e6)),
sdk.NewCoins(sdk.NewInt64Coin(evmtypes.DefaultEVMDenom, 100e6)),
),
},
),
Expand All @@ -385,7 +394,7 @@ func (suite *AnteTestSuite) TestRejectMsgsInAuthz() {
banktypes.NewMsgSend(
testAddresses[0],
testAddresses[3],
sdk.NewCoins(sdk.NewInt64Coin(testutil.ExampleAttoDenom, 100e6)),
sdk.NewCoins(sdk.NewInt64Coin(evmtypes.DefaultEVMDenom, 100e6)),
),
},
),
Expand All @@ -396,7 +405,7 @@ func (suite *AnteTestSuite) TestRejectMsgsInAuthz() {
banktypes.NewMsgSend(
testAddresses[0],
testAddresses[3],
sdk.NewCoins(sdk.NewInt64Coin(testutil.ExampleAttoDenom, 100e6)),
sdk.NewCoins(sdk.NewInt64Coin(evmtypes.DefaultEVMDenom, 100e6)),
),
},
),
Expand All @@ -408,54 +417,73 @@ func (suite *AnteTestSuite) TestRejectMsgsInAuthz() {
for _, tc := range testcases {
suite.Run(fmt.Sprintf("Case %s", tc.name), func() {
suite.SetupTest()
nw = suite.GetNetwork()
var (
tx sdk.Tx
err error
)
ctx := nw.GetContext()
priv := suite.GetKeyring().GetPrivKey(0)

if tc.isEIP712 {
coinAmount := sdk.NewCoin(testutil.ExampleAttoDenom, math.NewInt(20))
coinAmount := sdk.NewCoin(evmtypes.DefaultEVMDenom, math.NewInt(20))
fees := sdk.NewCoins(coinAmount)
cosmosTxArgs := utiltx.CosmosTxArgs{
TxCfg: suite.clientCtx.TxConfig,
Priv: suite.priv,
ChainID: suite.ctx.ChainID(),
TxCfg: suite.GetClientCtx().TxConfig,
Priv: priv,
ChainID: ctx.ChainID(),
Gas: 200000,
Fees: fees,
Msgs: tc.msgs,
}

tx, err = utiltx.CreateEIP712CosmosTx(
suite.ctx,
suite.app,
ctx,
nw.App,
utiltx.EIP712TxArgs{
CosmosTxArgs: cosmosTxArgs,
UseLegacyTypedData: true,
},
)
} else {
tx, err = createTx(suite.priv, tc.msgs...)
tx, err = suite.GetTxFactory().BuildCosmosTx(
priv,
factory.CosmosTxArgs{
Gas: &gasLimit,
Msgs: tc.msgs,
},
)
}
suite.Require().NoError(err)

txEncoder := suite.clientCtx.TxConfig.TxEncoder()
txEncoder := suite.GetClientCtx().TxConfig.TxEncoder()
bz, err := txEncoder(tx)
suite.Require().NoError(err)

resCheckTx := suite.app.CheckTx(
abci.RequestCheckTx{
resCheckTx, err := nw.App.CheckTx(
&abci.RequestCheckTx{
Tx: bz,
Type: abci.CheckTxType_New,
},
)
suite.Require().Equal(tc.expectedCode, resCheckTx.Code, resCheckTx.Log)
suite.Require().NoError(err)
suite.Require().Equal(resCheckTx.Code, tc.expectedCode, resCheckTx.Log)

resDeliverTx := suite.app.DeliverTx(
abci.RequestDeliverTx{
Tx: bz,
header := ctx.BlockHeader()
blockRes, err := nw.App.FinalizeBlock(
&abci.RequestFinalizeBlock{
Height: ctx.BlockHeight() + 1,
Txs: [][]byte{bz},
Hash: header.AppHash,
NextValidatorsHash: header.NextValidatorsHash,
ProposerAddress: header.ProposerAddress,
Time: header.Time.Add(time.Second),
},
)
suite.Require().Equal(tc.expectedCode, resDeliverTx.Code, resDeliverTx.Log)
suite.Require().NoError(err)
suite.Require().Len(blockRes.TxResults, 1)
txRes := blockRes.TxResults[0]
suite.Require().Equal(txRes.Code, tc.expectedCode, txRes.Log)
})
}
}
17 changes: 8 additions & 9 deletions ante/cosmos/eip712.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,18 +40,15 @@ func init() {
// CONTRACT: Pubkeys are set in context for all signers before this decorator runs
// CONTRACT: Tx must implement SigVerifiableTx interface
type LegacyEip712SigVerificationDecorator struct {
ak evmtypes.AccountKeeper
signModeHandler authsigning.SignModeHandler
ak evmtypes.AccountKeeper
}

// Deprecated: NewLegacyEip712SigVerificationDecorator creates a new LegacyEip712SigVerificationDecorator
func NewLegacyEip712SigVerificationDecorator(
ak evmtypes.AccountKeeper,
signModeHandler authsigning.SignModeHandler,
) LegacyEip712SigVerificationDecorator {
return LegacyEip712SigVerificationDecorator{
ak: ak,
signModeHandler: signModeHandler,
ak: ak,
}
}

Expand Down Expand Up @@ -84,7 +81,10 @@ func (svd LegacyEip712SigVerificationDecorator) AnteHandle(ctx sdk.Context,
return ctx, err
}

signerAddrs := sigTx.GetSigners()
signerAddrs, err := sigTx.GetSigners()
if err != nil {
return ctx, err
}

// EIP712 allows just one signature
if len(sigs) != 1 {
Expand Down Expand Up @@ -142,7 +142,7 @@ func (svd LegacyEip712SigVerificationDecorator) AnteHandle(ctx sdk.Context,
return next(ctx, tx, simulate)
}

if err := VerifySignature(pubKey, signerData, sig.Data, svd.signModeHandler, authSignTx); err != nil {
if err := VerifySignature(pubKey, signerData, sig.Data, authSignTx); err != nil {
errMsg := fmt.Errorf("signature verification failed; please verify account number (%d) and chain-id (%s): %w", accNum, chainID, err)
return ctx, errorsmod.Wrap(errortypes.ErrUnauthorized, errMsg.Error())
}
Expand All @@ -156,7 +156,6 @@ func VerifySignature(
pubKey cryptotypes.PubKey,
signerData authsigning.SignerData,
sigData signing.SignatureData,
_ authsigning.SignModeHandler,
tx authsigning.Tx,
) error {
switch data := sigData.(type) {
Expand Down Expand Up @@ -187,7 +186,7 @@ func VerifySignature(
Amount: tx.GetFee(),
Gas: tx.GetGas(),
},
msgs, tx.GetMemo(), tx.GetTip(),
msgs, tx.GetMemo(),
)

signerChainID, err := types.ParseChainID(signerData.ChainID)
Expand Down
Loading

0 comments on commit 7649fa8

Please sign in to comment.