Skip to content

Commit f1f216e

Browse files
author
Alex Johnson
authored
fix: allow for no bank balances in all simulations (#137)
* init * recreate and fix bug * helper * ante tests * ok * fix via gas consume call during simulation * test * revert * lint fix * retract more * replace linter * set lint to what we use
1 parent 1aac4a6 commit f1f216e

File tree

11 files changed

+1916
-71
lines changed

11 files changed

+1916
-71
lines changed

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
uses: golangci/golangci-lint-action@v3
2525
with:
2626
# Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version
27-
version: latest
27+
version: v1.59.1
2828
only-new-issues: true
2929
lint-markdown:
3030
name: Lint markdown

.golangci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ linters:
99
disable-all: true
1010
enable:
1111
- dogsled
12-
- exportloopref
12+
- copyloopvar
1313
- goconst
1414
- gocritic
1515
- gofumpt

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,5 +352,5 @@ replace (
352352
github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
353353
)
354354

355-
// simulation and fee UX
356-
retract [v1.0.0, v1.0.2]
355+
// simulation and fee UX, blackberry fix
356+
retract [v1.0.0, v1.0.4]

x/feemarket/ante/expected_keepers.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"cosmossdk.io/core/address"
77
sdk "github.com/cosmos/cosmos-sdk/types"
88
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
9+
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
910

1011
feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types"
1112
)
@@ -35,11 +36,7 @@ type FeeGrantKeeper interface {
3536
//
3637
//go:generate mockery --name BankKeeper --filename mock_bank_keeper.go
3738
type BankKeeper interface {
38-
IsSendEnabledCoins(ctx context.Context, coins ...sdk.Coin) error
39-
SendCoins(ctx context.Context, from, to sdk.AccAddress, amt sdk.Coins) error
40-
SendCoinsFromAccountToModule(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error
41-
SendCoinsFromModuleToModule(ctx context.Context, senderModule, recipientModule string, amt sdk.Coins) error
42-
SendCoinsFromModuleToAccount(ctx context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error
39+
bankkeeper.Keeper
4340
}
4441

4542
// FeeMarketKeeper defines the expected feemarket keeper.

x/feemarket/ante/fee.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -109,18 +109,17 @@ func (dfd feeMarketCheckDecorator) anteHandle(ctx sdk.Context, tx sdk.Tx, simula
109109
return ctx, errorsmod.Wrapf(feemarkettypes.ErrTooManyFeeCoins, "got length %d", len(feeCoins))
110110
}
111111

112-
var feeCoin sdk.Coin
113-
if simulate && len(feeCoins) == 0 {
114-
// if simulating and user did not provider a fee - create a dummy value for them
115-
feeCoin = sdk.NewCoin(params.FeeDenom, sdkmath.OneInt())
116-
} else {
117-
feeCoin = feeCoins[0]
112+
// if simulating - create a dummy zero value for the user
113+
payCoin := sdk.NewCoin(params.FeeDenom, sdkmath.ZeroInt())
114+
if !simulate {
115+
payCoin = feeCoins[0]
118116
}
117+
119118
feeGas := int64(feeTx.GetGas())
120119

121-
minGasPrice, err := dfd.feemarketKeeper.GetMinGasPrice(ctx, feeCoin.GetDenom())
120+
minGasPrice, err := dfd.feemarketKeeper.GetMinGasPrice(ctx, payCoin.GetDenom())
122121
if err != nil {
123-
return ctx, errorsmod.Wrapf(err, "unable to get min gas price for denom %s", feeCoin.GetDenom())
122+
return ctx, errorsmod.Wrapf(err, "unable to get min gas price for denom %s", payCoin.GetDenom())
124123
}
125124

126125
ctx.Logger().Info("fee deduct ante handle",
@@ -132,19 +131,19 @@ func (dfd feeMarketCheckDecorator) anteHandle(ctx sdk.Context, tx sdk.Tx, simula
132131
ctx = ctx.WithMinGasPrices(sdk.NewDecCoins(minGasPrice))
133132

134133
if !simulate {
135-
_, _, err := CheckTxFee(ctx, minGasPrice, feeCoin, feeGas, true)
134+
_, _, err := CheckTxFee(ctx, minGasPrice, payCoin, feeGas, true)
136135
if err != nil {
137136
return ctx, errorsmod.Wrapf(err, "error checking fee")
138137
}
139138
}
140139

141140
// escrow the entire amount that the account provided as fee (feeCoin)
142-
err = dfd.EscrowFunds(ctx, tx, feeCoin)
141+
err = dfd.EscrowFunds(ctx, tx, payCoin)
143142
if err != nil {
144143
return ctx, errorsmod.Wrapf(err, "error escrowing funds")
145144
}
146145

147-
priorityFee, err := dfd.resolveTxPriorityCoins(ctx, feeCoin, params.FeeDenom)
146+
priorityFee, err := dfd.resolveTxPriorityCoins(ctx, payCoin, params.FeeDenom)
148147
if err != nil {
149148
return ctx, errorsmod.Wrapf(err, "error resolving fee priority")
150149
}
@@ -194,7 +193,8 @@ func (dfd feeMarketCheckDecorator) EscrowFunds(ctx sdk.Context, sdkTx sdk.Tx, pr
194193
return sdkerrors.ErrInvalidRequest.Wrap("fee grants are not enabled")
195194
} else if !bytes.Equal(feeGranter, feePayer) {
196195
if !providedFee.IsNil() {
197-
err := dfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, sdk.NewCoins(providedFee), sdkTx.GetMsgs())
196+
err := dfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, sdk.NewCoins(providedFee),
197+
sdkTx.GetMsgs())
198198
if err != nil {
199199
return errorsmod.Wrapf(err, "%s does not allow to pay fees for %s", feeGranter, feePayer)
200200
}

0 commit comments

Comments
 (0)