@@ -285,12 +285,19 @@ func (h *DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHan
285285 return & abci.ResponsePrepareProposal {Txs : h .txSelector .SelectedTxs (ctx )}, nil
286286 }
287287
288- selectedTxsSignersSeqs := make (map [string ]uint64 )
288+ type invalidTx struct {
289+ tx sdk.Tx
290+ err error
291+ }
292+
289293 var (
290- resError error
291- selectedTxsNums int
292- invalidTxs []sdk.Tx // invalid txs to be removed out of the loop to avoid dead lock
294+ // invalid txs to be removed out of the loop to avoid dead lock
295+ invalidTxs []invalidTx
296+ resError error
297+ selectedTxsNums int
298+ selectedTxsSignersSeqs = make (map [string ]uint64 )
293299 )
300+
294301 mempool .SelectBy (ctx , h .mempool , req .Txs , func (memTx sdk.Tx ) bool {
295302 unorderedTx , ok := memTx .(sdk.TxWithUnordered )
296303 isUnordered := ok && unorderedTx .GetUnordered ()
@@ -335,7 +342,7 @@ func (h *DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHan
335342 // check again.
336343 txBz , err := h .txVerifier .PrepareProposalVerifyTx (memTx )
337344 if err != nil {
338- invalidTxs = append (invalidTxs , memTx )
345+ invalidTxs = append (invalidTxs , invalidTx { tx : memTx , err : err } )
339346 } else {
340347 stop := h .txSelector .SelectTxForProposal (ctx , uint64 (req .MaxTxBytes ), maxBlockGas , memTx , txBz )
341348 if stop {
@@ -370,8 +377,13 @@ func (h *DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHan
370377 return nil , resError
371378 }
372379
373- for _ , tx := range invalidTxs {
374- err := h .mempool .Remove (tx )
380+ for _ , invalidTx := range invalidTxs {
381+ reason := mempool.RemoveReason {
382+ Caller : "prepare_proposal.remove_invalid_tx" ,
383+ Error : invalidTx .err ,
384+ }
385+
386+ err := mempool .RemoveWithReason (ctx , h .mempool , invalidTx .tx , reason )
375387 if err != nil && ! errors .Is (err , mempool .ErrTxNotFound ) {
376388 return nil , err
377389 }
0 commit comments