From 758743c7aa85c77bf1676556f4434523f0d7b7ed Mon Sep 17 00:00:00 2001 From: "Masih H. Derkani" Date: Thu, 4 Sep 2025 10:34:59 +0100 Subject: [PATCH 1/3] Return error if any in mempool `CheckTx` and fix callback When call to the underlying (cosmos) `CheckTx` fails make sure that the error is returned from mempool `CheckTx`. Fix check for callback to assure result is non-nil before callback function is executed. --- internal/mempool/mempool.go | 41 ++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/internal/mempool/mempool.go b/internal/mempool/mempool.go index a078e7865..8839ca9ad 100644 --- a/internal/mempool/mempool.go +++ b/internal/mempool/mempool.go @@ -363,6 +363,7 @@ func (txmp *TxMempool) CheckTx( if err != nil { removeHandler(true) res.Log = txmp.AppendCheckTxErr(res.Log, err.Error()) + return err } wtx := &WrappedTx{ @@ -377,27 +378,25 @@ func (txmp *TxMempool) CheckTx( estimatedGas: res.GasEstimated, } - if err == nil { - // only add new transaction if checkTx passes and is not pending - if !res.IsPendingTransaction { - err = txmp.addNewTransaction(wtx, res.ResponseCheckTx, txInfo) - if err != nil { - return err - } - } else { - // otherwise add to pending txs store - if res.Checker == nil { - return errors.New("no checker available for pending transaction") - } - if err := txmp.canAddPendingTx(wtx); err != nil { - // TODO: eviction strategy for pending transactions - removeHandler(true) - return err - } - atomic.AddInt64(&txmp.pendingSizeBytes, int64(wtx.Size())) - if err := txmp.pendingTxs.Insert(wtx, res, txInfo); err != nil { - return err - } + // only add new transaction if checkTx passes and is not pending + if !res.IsPendingTransaction { + err = txmp.addNewTransaction(wtx, res.ResponseCheckTx, txInfo) + if err != nil { + return err + } + } else { + // otherwise add to pending txs store + if res.Checker == nil { + return errors.New("no checker available for pending transaction") + } + if err := txmp.canAddPendingTx(wtx); err != nil { + // TODO: eviction strategy for pending transactions + removeHandler(true) + return err + } + atomic.AddInt64(&txmp.pendingSizeBytes, int64(wtx.Size())) + if err := txmp.pendingTxs.Insert(wtx, res, txInfo); err != nil { + return err } } From e139fc91f987c40b125801fc88840109cb80878b Mon Sep 17 00:00:00 2001 From: "Masih H. Derkani" Date: Thu, 4 Sep 2025 14:15:33 +0100 Subject: [PATCH 2/3] Increment pending size only if insertion is successful --- internal/mempool/mempool.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/mempool/mempool.go b/internal/mempool/mempool.go index 8839ca9ad..2bd6296eb 100644 --- a/internal/mempool/mempool.go +++ b/internal/mempool/mempool.go @@ -394,10 +394,10 @@ func (txmp *TxMempool) CheckTx( removeHandler(true) return err } - atomic.AddInt64(&txmp.pendingSizeBytes, int64(wtx.Size())) if err := txmp.pendingTxs.Insert(wtx, res, txInfo); err != nil { return err } + atomic.AddInt64(&txmp.pendingSizeBytes, int64(wtx.Size())) } if cb != nil { From 7ae635d7524d135829b938f561ccf5b91b4dfe51 Mon Sep 17 00:00:00 2001 From: "Masih H. Derkani" Date: Fri, 5 Sep 2025 09:06:44 +0100 Subject: [PATCH 3/3] Remove unnecessary error log add and fix nil check --- internal/mempool/mempool.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/mempool/mempool.go b/internal/mempool/mempool.go index 2bd6296eb..767c712db 100644 --- a/internal/mempool/mempool.go +++ b/internal/mempool/mempool.go @@ -355,14 +355,13 @@ func (txmp *TxMempool) CheckTx( if removeFromCache { txmp.cache.Remove(txHash) } - if res.ExpireTxHandler != nil { + if res != nil && res.ExpireTxHandler != nil { res.ExpireTxHandler() } } if err != nil { removeHandler(true) - res.Log = txmp.AppendCheckTxErr(res.Log, err.Error()) return err }