github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/app/ante/GasLimitDecorator.go (about) 1 package ante 2 3 import ( 4 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 5 sdkerrors "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors" 6 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/innertx" 7 evmtypes "github.com/fibonacci-chain/fbc/x/evm/types" 8 ) 9 10 // EVMKeeper defines the expected keeper interface used on the Eth AnteHandler 11 type EVMKeeper interface { 12 innertx.InnerTxKeeper 13 GetParams(ctx sdk.Context) evmtypes.Params 14 IsAddressBlocked(ctx sdk.Context, addr sdk.AccAddress) bool 15 } 16 17 // NewGasLimitDecorator creates a new GasLimitDecorator. 18 func NewGasLimitDecorator(evm EVMKeeper) GasLimitDecorator { 19 return GasLimitDecorator{ 20 evm: evm, 21 } 22 } 23 24 type GasLimitDecorator struct { 25 evm EVMKeeper 26 } 27 28 func (g GasLimitDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { 29 pinAnte(ctx.AnteTracer(), "GasLimitDecorator") 30 31 currentGasMeter := ctx.GasMeter() // avoid race 32 infGasMeter := sdk.GetReusableInfiniteGasMeter() 33 ctx.SetGasMeter(infGasMeter) 34 if tx.GetGas() > g.evm.GetParams(ctx).MaxGasLimitPerTx { 35 ctx.SetGasMeter(currentGasMeter) 36 sdk.ReturnInfiniteGasMeter(infGasMeter) 37 return ctx, sdkerrors.Wrapf(sdkerrors.ErrTxTooLarge, "too large gas limit, it must be less than %d", g.evm.GetParams(ctx).MaxGasLimitPerTx) 38 } 39 40 ctx.SetGasMeter(currentGasMeter) 41 sdk.ReturnInfiniteGasMeter(infGasMeter) 42 return next(ctx, tx, simulate) 43 }