From bd0319760d3b31cb699d29bf5ccd3ebad756bce0 Mon Sep 17 00:00:00 2001 From: Tomas Guerra <54514587+GAtom22@users.noreply.github.com> Date: Thu, 22 Dec 2022 05:07:52 -0300 Subject: [PATCH] fix(ante): fix reCheckTx gas wanted (#1566) * fix(abci): fix reCheckTx gas wanted' * fix(ante): add changelog entry --- CHANGELOG.md | 2 +- app/ante/eth.go | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 68ad34f0..679e05c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -107,7 +107,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (analytics) [#1434](https://github.com/evmos/ethermint/pull/1434) Remove unbound labels from custom tendermint metrics. * (rpc) [#1484](https://github.com/evmos/ethermint/pull/1484) Align empty account result for old blocks as ethereum instead of return account not found error. * (rpc) [#1503](https://github.com/evmos/ethermint/pull/1503) Fix block hashes returned on JSON-RPC filter `eth_newBlockFilter`. - +* (ante) [#1566](https://github.com/evmos/ethermint/pull/1566) Fix `gasWanted` on `EthGasConsumeDecorator` ante handler when running transaction in `ReCheckMode` ## [v0.19.3] - 2022-10-14 diff --git a/app/ante/eth.go b/app/ante/eth.go index fb58bb13..9f19edf0 100644 --- a/app/ante/eth.go +++ b/app/ante/eth.go @@ -135,10 +135,18 @@ func NewEthGasConsumeDecorator( // - sets the gas meter limit // - gas limit is greater than the block gas meter limit func (egcd EthGasConsumeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { + gasWanted := uint64(0) // gas consumption limit already checked during CheckTx so there's no need to // verify it again during ReCheckTx if ctx.IsReCheckTx() { - return next(ctx, tx, simulate) + // Use new context with gasWanted = 0 + // Otherwise, there's an error on txmempool.postCheck (tendermint) + // that is not bubbled up. Thus, the Tx never runs on DeliverMode + // Error: "gas wanted -1 is negative" + // For more information, see issue #1554 + // https://github.com/evmos/ethermint/issues/1554 + newCtx := ctx.WithGasMeter(ethermint.NewInfiniteGasMeterWithLimit(gasWanted)) + return next(newCtx, tx, simulate) } chainCfg := egcd.evmKeeper.GetChainConfig(ctx) @@ -147,7 +155,6 @@ func (egcd EthGasConsumeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula blockHeight := big.NewInt(ctx.BlockHeight()) homestead := ethCfg.IsHomestead(blockHeight) istanbul := ethCfg.IsIstanbul(blockHeight) - gasWanted := uint64(0) var events sdk.Events // Use the lowest priority of all the messages as the final one.