From 41b188d64e1c11cb4f4da035b2a7ec6b174c39be Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 7 Feb 2024 00:30:52 +0100 Subject: [PATCH] fix(x/feegrant): fix sims (#19362) --- x/feegrant/CHANGELOG.md | 2 +- x/feegrant/keeper/keeper.go | 26 ++++++++++---------------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/x/feegrant/CHANGELOG.md b/x/feegrant/CHANGELOG.md index 22d484a015..ac94e0889d 100644 --- a/x/feegrant/CHANGELOG.md +++ b/x/feegrant/CHANGELOG.md @@ -46,4 +46,4 @@ Ref: https://keepachangelog.com/en/1.0.0/ * [#15347](https://github.com/cosmos/cosmos-sdk/pull/15347) `ValidateBasic` is treated as a no op now with with acceptance of RFC001 * [#17869](https://github.com/cosmos/cosmos-sdk/pull/17869) `NewGrant`, `NewMsgGrantAllowance` & `NewMsgRevokeAllowance` takes strings instead of `sdk.AccAddress` * [#16535](https://github.com/cosmos/cosmos-sdk/pull/16535) Use collections for `FeeAllowance`, `FeeAllowanceQueue`. -* [#18815](https://github.com/cosmos/cosmos-sdk/pull/18815) Add the implementation of the `UpdatePeriodReset` interface to update the value of the `PeriodReset` field. \ No newline at end of file +* [#18815](https://github.com/cosmos/cosmos-sdk/pull/18815) Add the implementation of the `UpdatePeriodReset` interface to update the value of the `PeriodReset` field. diff --git a/x/feegrant/keeper/keeper.go b/x/feegrant/keeper/keeper.go index 08e8f4510f..7cad3c0c35 100644 --- a/x/feegrant/keeper/keeper.go +++ b/x/feegrant/keeper/keeper.go @@ -9,12 +9,10 @@ import ( "cosmossdk.io/core/store" errorsmod "cosmossdk.io/errors" "cosmossdk.io/log" - storetypes "cosmossdk.io/store/types" "cosmossdk.io/x/auth/ante" "cosmossdk.io/x/feegrant" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -85,7 +83,8 @@ func (k Keeper) GrantAllowance(ctx context.Context, granter, grantee sdk.AccAddr // expiration shouldn't be in the past. sdkCtx := sdk.UnwrapSDKContext(ctx) - if exp != nil && exp.Before(sdkCtx.HeaderInfo().Time) { + now := sdkCtx.HeaderInfo().Time + if exp != nil && exp.Before(now) { return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "expiration is before current block time") } @@ -106,9 +105,13 @@ func (k Keeper) GrantAllowance(ctx context.Context, granter, grantee sdk.AccAddr return err } - err = feeAllowance.UpdatePeriodReset(sdkCtx.HeaderInfo().Time) - if err != nil { - return err + // if block time is not zero, update the period reset + // if it is zero, it could be genesis initialization, so we don't need to update the period reset + if !now.IsZero() { + err = feeAllowance.UpdatePeriodReset(now) + if err != nil { + return err + } } grant, err := feegrant.NewGrant(granterStr, granteeStr, feeAllowance) @@ -224,18 +227,9 @@ func (k Keeper) GetAllowance(ctx context.Context, granter, grantee sdk.AccAddres // Callback to get all data, returns true to stop, false to keep reading // Calling this without pagination is very expensive and only designed for export genesis func (k Keeper) IterateAllFeeAllowances(ctx context.Context, cb func(grant feegrant.Grant) bool) error { - store := k.storeService.OpenKVStore(ctx) - iter := storetypes.KVStorePrefixIterator(runtime.KVStoreAdapter(store), feegrant.FeeAllowanceKeyPrefix) - defer iter.Close() - - err := k.FeeAllowance.Walk(ctx, nil, func(key collections.Pair[sdk.AccAddress, sdk.AccAddress], grant feegrant.Grant) (stop bool, err error) { + return k.FeeAllowance.Walk(ctx, nil, func(key collections.Pair[sdk.AccAddress, sdk.AccAddress], grant feegrant.Grant) (stop bool, err error) { return cb(grant), nil }) - if err != nil { - return err - } - - return nil } // UseGrantedFees will try to pay the given fee from the granter's account as requested by the grantee