From 5b6dee573fee3541d0f3b3ee5dd1b14a6b060318 Mon Sep 17 00:00:00 2001 From: Josh Klopfenstein Date: Thu, 5 Dec 2024 15:24:52 -0600 Subject: [PATCH] Only allow deposit messages from monomer The important change is in helpers/ante.go. Before, we were only blocking deposit transactions from the Monomer mempool. This meant that standard auth txs could contain deposit messages, minting arbitrary amounts of eth. We fix this by checking for deposit messages in all transactions in helpers/ante.go. --- mempool/mempool.go | 8 -------- mempool/mempool_test.go | 14 -------------- x/rollup/tx/helpers/ante.go | 7 +++++++ x/rollup/types/deposit_msg.go | 8 ++++++++ 4 files changed, 15 insertions(+), 22 deletions(-) create mode 100644 x/rollup/types/deposit_msg.go diff --git a/mempool/mempool.go b/mempool/mempool.go index e7cbb28d..d401f37f 100644 --- a/mempool/mempool.go +++ b/mempool/mempool.go @@ -8,7 +8,6 @@ import ( comettypes "github.com/cometbft/cometbft/types" dbm "github.com/cosmos/cosmos-db" - "github.com/polymerdao/monomer" "github.com/polymerdao/monomer/utils" ) @@ -39,13 +38,6 @@ func (p *Pool) Enqueue(userTxn comettypes.Tx) (err error) { // Unfortunately, comet's DB interface doesn't support it. // Moving to a different DB interface is left for future work. - // Attempt to adapt the Cosmos transaction to an Ethereum deposit transaction. - // If the adaptation succeeds, it indicates that the - // user transaction is a deposit transaction, which is not allowed in the pool. - if _, err := monomer.GetDepositTxs(userTxn); err == nil { - return errors.New("deposit txs are not allowed in the pool") - } - batch := p.db.NewBatch() defer func() { err = utils.WrapCloseErr(err, batch) diff --git a/mempool/mempool_test.go b/mempool/mempool_test.go index deadac62..e3bc57be 100644 --- a/mempool/mempool_test.go +++ b/mempool/mempool_test.go @@ -4,8 +4,6 @@ import ( "testing" comettypes "github.com/cometbft/cometbft/types" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/polymerdao/monomer" "github.com/polymerdao/monomer/mempool" "github.com/polymerdao/monomer/testutils" "github.com/stretchr/testify/assert" @@ -24,18 +22,6 @@ func TestMempool(t *testing.T) { require.Error(t, err) }) - t.Run("deposit transaction", func(t *testing.T) { - l1AttributesTx, depositTx, _ := testutils.GenerateEthTxs(t) - l1AttributesTxBytes, err := l1AttributesTx.MarshalBinary() - require.NoError(t, err) - depositTxBytes, err := depositTx.MarshalBinary() - require.NoError(t, err) - - cosmosTxs, err := monomer.AdaptPayloadTxsToCosmosTxs([]hexutil.Bytes{l1AttributesTxBytes, depositTxBytes}) - require.NoError(t, err) - require.ErrorContains(t, pool.Enqueue(cosmosTxs[0]), "deposit txs are not allowed in the pool") - }) - // enqueue multiple to empty for i := byte(0); i < 3; i++ { require.NoError(t, pool.Enqueue(comettypes.Tx([]byte{i}))) diff --git a/x/rollup/tx/helpers/ante.go b/x/rollup/tx/helpers/ante.go index eb1a20ab..29f87cc4 100644 --- a/x/rollup/tx/helpers/ante.go +++ b/x/rollup/tx/helpers/ante.go @@ -1,6 +1,7 @@ package helpers import ( + "errors" "fmt" sdktypes "github.com/cosmos/cosmos-sdk/types" @@ -43,6 +44,12 @@ func (a *AnteHandler) AnteHandle( } return newCtx, err default: // Unfortunately, the Cosmos SDK does not export its default tx type. + for _, msg := range tx.GetMsgs() { + if _, ok := msg.(rolluptypes.DepositMsg); ok { + return ctx, errors.New("transaction contains deposit message") + } + } + newCtx, err := a.authAnteHandler(ctx, tx, simulate) if err != nil { return newCtx, fmt.Errorf("auth ante handle: %v", err) diff --git a/x/rollup/types/deposit_msg.go b/x/rollup/types/deposit_msg.go new file mode 100644 index 00000000..ef2effb9 --- /dev/null +++ b/x/rollup/types/deposit_msg.go @@ -0,0 +1,8 @@ +package types + +type DepositMsg interface { + isDeposit() +} + +func (*MsgSetL1Attributes) isDeposit() {} +func (*MsgApplyUserDeposit) isDeposit() {}