diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 179584b5a9..4a2a4dcdf1 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -882,10 +882,13 @@ func createEvents(events sdk.Events, msg sdk.Msg) sdk.Events { // PrepareProposal state internally will be discarded. will be // returned if the transaction cannot be encoded. will be returned if // the transaction is valid, otherwise will be returned. -func (app *BaseApp) PrepareProposalVerifyTx(tx sdk.Tx) ([]byte, error) { - bz, err := app.txEncoder(tx) - if err != nil { - return nil, err +func (app *BaseApp) PrepareProposalVerifyTx(tx sdk.Tx, bz []byte) ([]byte, error) { + var err error + if bz == nil { + bz, err = app.txEncoder(tx) + if err != nil { + return nil, err + } } _, _, _, _, err = app.runTx(runTxPrepareProposal, bz) //nolint:dogsled @@ -920,7 +923,7 @@ type ( // that any custom ABCI PrepareProposal and ProcessProposal handler can use // to verify a transaction. ProposalTxVerifier interface { - PrepareProposalVerifyTx(tx sdk.Tx) ([]byte, error) + PrepareProposalVerifyTx(tx sdk.Tx, txBz []byte) ([]byte, error) ProcessProposalVerifyTx(txBz []byte) (sdk.Tx, error) } @@ -961,18 +964,24 @@ func NewDefaultProposalHandler(mp mempool.Mempool, txVerifier ProposalTxVerifier // FIFO order. func (h DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHandler { return func(ctx sdk.Context, req abci.RequestPrepareProposal) abci.ResponsePrepareProposal { + var ( + selectedTxs [][]byte + totalTxBytes int64 + ) + // If the mempool is nil or a no-op mempool, we simply return the transactions // requested from CometBFT, which, by default, should be in FIFO order. _, isNoOp := h.mempool.(mempool.NoOpMempool) if h.mempool == nil || isNoOp { - return abci.ResponsePrepareProposal{Txs: req.Txs} + for _, txBz := range req.Txs { // req.MaxTxBytes has been ensured + bz, err := h.txVerifier.PrepareProposalVerifyTx(nil, txBz) + if err == nil { + selectedTxs = append(selectedTxs, bz) + } + } + return abci.ResponsePrepareProposal{Txs: selectedTxs} } - var ( - selectedTxs [][]byte - totalTxBytes int64 - ) - iterator := h.mempool.Select(ctx, req.Txs) for iterator != nil { @@ -982,7 +991,7 @@ func (h DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHand // which calls mempool.Insert, in theory everything in the pool should be // valid. But some mempool implementations may insert invalid txs, so we // check again. - bz, err := h.txVerifier.PrepareProposalVerifyTx(memTx) + bz, err := h.txVerifier.PrepareProposalVerifyTx(memTx, nil) if err != nil { err := h.mempool.Remove(memTx) if err != nil && !errors.Is(err, mempool.ErrTxNotFound) {