From 1f8bc6f2151f773b657f4f48eec2aa9020d9d4c9 Mon Sep 17 00:00:00 2001 From: Robert Zaremba Date: Mon, 19 Sep 2022 06:46:17 +0100 Subject: [PATCH] perf(ante/fee): optimize requiredFees calculation (#1418) * perf(ante/fee): optimize requiredFees calculation * fix Co-authored-by: toteki <63419657+toteki@users.noreply.github.com> --- ante/fee.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ante/fee.go b/ante/fee.go index 5c871bdf18..daa6ae6673 100644 --- a/ante/fee.go +++ b/ante/fee.go @@ -53,19 +53,20 @@ func checkFees(minGasPrices sdk.DecCoins, fees sdk.Coins, gasLimit uint64) error minGasPrices = sdk.DecCoins{appparams.MinMinGasPrice} } - requiredFees := make(sdk.Coins, len(minGasPrices)) + requiredFees := sdk.NewCoins() // Determine the required fees by multiplying each required minimum gas // price by the gas limit, where fee = ceil(minGasPrice * gasLimit). + // Zero fees are removed. glDec := sdk.NewDec(int64(gasLimit)) - for i, gp := range minGasPrices { + for _, gp := range minGasPrices { + if gasLimit == 0 || gp.IsZero() { + continue + } fee := gp.Amount.Mul(glDec) - requiredFees[i] = sdk.NewCoin(gp.Denom, fee.Ceil().RoundInt()) + requiredFees = append(requiredFees, sdk.NewCoin(gp.Denom, fee.Ceil().RoundInt())) } - // Clear any zero coins from requiredFees in the case of zero min gas price - requiredFees = sdk.NewCoins(requiredFees...) - if !requiredFees.Empty() && !fees.IsAnyGTE(requiredFees) { return sdkerrors.ErrInsufficientFee.Wrapf( "insufficient fees; got: %s required: %s", fees, requiredFees)