forked from cerc-io/laconicd-deprecated
fix: GasMeter reset in AnteHandler EthGasConsumeDecorator (#964)
* Fix GasMeter reset in AnteHandler - EthGasConsumeDecorator Conforming to the spec: https://github.com/cosmos/cosmos-sdk/blob/e7066c4271ff3d33dc426dc6313c82a1201ae3c6/docs/basics/gas-fees.md > Set newCtx.GasMeter to 0, with a limit of GasWanted. > This step is extremely important, as it not only makes sure the transaction cannot consume infinite gas, > but also that ctx.GasMeter is reset in-between each DeliverTx > (ctx is set to newCtx after anteHandler is run, and the anteHandler is run each time DeliverTx is called). * Compute gasWanted in ante handler based on msg gas * Tests - check gas meter limit after EthGasConsumeDecorator ante handler runs * Update CHANGELOG.md * EthGasConsumeDecorator ante handler resets the gas meter only for CheckTx * Reset the gas meter in Keeper.EthereumTx to an infinite gas meter * Fix TestOutOfGasWhenDeployContract error check * Move gas meter reset to the innermost EthAnteHandle * add NewInfiniteGasMeterWithLimit for setting the user provided gas limit Fixes block's consumed gas calculation in the block creation phase. * Fix lint * Fix lint Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
This commit is contained in:
co-authored by
Federico Kunze Küllmer
parent
805b2eada5
commit
77d9e29923
@@ -369,7 +369,7 @@ func (k *Keeper) ApplyMessageWithConfig(ctx sdk.Context, msg core.Message, trace
|
||||
}
|
||||
leftoverGas := msg.Gas() - intrinsicGas
|
||||
|
||||
// access list preparaion is moved from ante handler to here, because it's needed when `ApplyMessage` is called
|
||||
// access list preparation is moved from ante handler to here, because it's needed when `ApplyMessage` is called
|
||||
// under contexts where ante handlers are not run, for example `eth_call` and `eth_estimateGas`.
|
||||
if rules := cfg.ChainConfig.Rules(big.NewInt(ctx.BlockHeight()), cfg.ChainConfig.MergeForkBlock != nil); rules.IsBerlin {
|
||||
stateDB.PrepareAccessList(msg.From(), msg.To(), vm.ActivePrecompiles(rules), msg.AccessList())
|
||||
|
||||
Reference in New Issue
Block a user