From 2c5587ac2b379f882809d7364fa27a31e2b55ba4 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Mon, 8 Jan 2024 18:43:49 -0500 Subject: [PATCH 01/26] wip --- x/feemarket/ante/expected_keepers.go | 2 +- x/feemarket/ante/fee.go | 100 +++++++++++++++------------ x/feemarket/keeper/feemarket.go | 12 ++-- x/feemarket/post/fee.go | 12 ++-- x/feemarket/types/errors.go | 7 ++ 5 files changed, 77 insertions(+), 56 deletions(-) create mode 100644 x/feemarket/types/errors.go diff --git a/x/feemarket/ante/expected_keepers.go b/x/feemarket/ante/expected_keepers.go index f879ae95..b697bbec 100644 --- a/x/feemarket/ante/expected_keepers.go +++ b/x/feemarket/ante/expected_keepers.go @@ -41,8 +41,8 @@ type BankKeeper interface { //go:generate mockery --name FeeMarketKeeper --filename mock_feemarket_keeper.go type FeeMarketKeeper interface { GetState(ctx sdk.Context) (feemarkettypes.State, error) - GetMinGasPrices(ctx sdk.Context) (sdk.Coins, error) GetParams(ctx sdk.Context) (feemarkettypes.Params, error) SetState(ctx sdk.Context, state feemarkettypes.State) error SetParams(ctx sdk.Context, params feemarkettypes.Params) error + GetMinGasPrice(ctx sdk.Context) (sdk.Coin, error) } diff --git a/x/feemarket/ante/fee.go b/x/feemarket/ante/fee.go index 307055ac..21ace8ed 100644 --- a/x/feemarket/ante/fee.go +++ b/x/feemarket/ante/fee.go @@ -8,6 +8,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" ) // FeeMarketCheckDecorator checks sufficient fees from the fee payer based off of the current @@ -27,6 +29,8 @@ func NewFeeMarketCheckDecorator(fmk FeeMarketKeeper) FeeMarketCheckDecorator { // AnteHandle checks if the tx provides sufficient fee to cover the required fee from the fee market. func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { + var feeCoin sdk.Coin + // GenTx consume no fee if ctx.BlockHeight() == 0 { return next(ctx, tx, simulate) @@ -41,43 +45,55 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula return ctx, sdkerrors.ErrInvalidGasLimit.Wrapf("must provide positive gas") } - minGasPrices, err := dfd.feemarketKeeper.GetMinGasPrices(ctx) + minGasPrice, err := dfd.feemarketKeeper.GetMinGasPrice(ctx) if err != nil { return ctx, errorsmod.Wrapf(err, "unable to get fee market state") } - fee := feeTx.GetFee() + feeCoins := feeTx.GetFee() gas := feeTx.GetGas() // use provided gas limit + if len(feeCoins) > 1 { + return ctx, feemarkettypes.ErrTooManyFeeCoins + } + + // If there is a fee attached to the tx, make sure the fee denom is a denom accepted by the chain + if len(feeCoins) == 1 { + feeDenom := feeCoins.GetDenomByIndex(0) + if feeDenom != minGasPrice.Denom { + return ctx, err + } + } + ctx.Logger().Info("fee deduct ante handle", - "min gas prices", minGasPrices, - "fee", fee, + "min gas prices", minGasPrice, + "fee", feeCoins, "gas limit", gas, ) if !simulate { - fee, _, err = CheckTxFees(ctx, minGasPrices, feeTx, true) + feeCoin, _, err = CheckTxFee(ctx, minGasPrice, feeTx, true) if err != nil { return ctx, errorsmod.Wrapf(err, "error checking fee") } } - minGasPricesDecCoins := sdk.NewDecCoinsFromCoins(minGasPrices...) - newCtx := ctx.WithPriority(getTxPriority(fee, int64(gas))).WithMinGasPrices(minGasPricesDecCoins) + minGasPricesDecCoin := sdk.NewDecCoinFromCoin(minGasPrice) + newCtx := ctx.WithPriority(getTxPriority(feeCoin, int64(gas))).WithMinGasPrices(sdk.NewDecCoins(minGasPricesDecCoin)) return next(newCtx, tx, simulate) } -// CheckTxFees implements the logic for the fee market to check if a Tx has provided sufficient +// CheckTxFee implements the logic for the fee market to check if a Tx has provided sufficient // fees given the current state of the fee market. Returns an error if insufficient fees. -func CheckTxFees(ctx sdk.Context, minFees sdk.Coins, feeTx sdk.FeeTx, isCheck bool) (feeCoins sdk.Coins, tip sdk.Coins, err error) { - minFeesDecCoins := sdk.NewDecCoinsFromCoins(minFees...) - feeCoins = feeTx.GetFee() +func CheckTxFee(ctx sdk.Context, minFee sdk.Coin, feeTx sdk.FeeTx, isCheck bool) (feeCoin sdk.Coin, tip sdk.Coin, err error) { + minFeesDecCoin := sdk.NewDecCoinFromCoin(minFee) + feeCoin = feeTx.GetFee()[0] // Ensure that the provided fees meet the minimum - minGasPrices := minFeesDecCoins - if !minGasPrices.IsZero() { - requiredFees := make(sdk.Coins, len(minGasPrices)) - consumedFees := make(sdk.Coins, len(minGasPrices)) + minGasPrice := minFeesDecCoin + if !minGasPrice.IsZero() { + var requiredFee sdk.Coin + var consumedFee sdk.Coin // Determine the required fees by multiplying each required minimum gas // price by the gas, where fee = ceil(minGasPrice * gas). @@ -85,52 +101,48 @@ func CheckTxFees(ctx sdk.Context, minFees sdk.Coins, feeTx sdk.FeeTx, isCheck bo gcDec := sdkmath.LegacyNewDec(gasConsumed) glDec := sdkmath.LegacyNewDec(int64(feeTx.GetGas())) - for i, gp := range minGasPrices { - consumedFee := gp.Amount.Mul(gcDec) - limitFee := gp.Amount.Mul(glDec) - consumedFees[i] = sdk.NewCoin(gp.Denom, consumedFee.Ceil().RoundInt()) - requiredFees[i] = sdk.NewCoin(gp.Denom, limitFee.Ceil().RoundInt()) - } - - if !feeCoins.IsAnyGTE(requiredFees) { - return nil, nil, sdkerrors.ErrInsufficientFee.Wrapf( - "got: %s required: %s, minGasPrices: %s, gas: %d", - feeCoins, - requiredFees, - minGasPrices, + consumedFeeAmount := minGasPrice.Amount.Mul(gcDec) + limitFee := minGasPrice.Amount.Mul(glDec) + consumedFee = sdk.NewCoin(minGasPrice.Denom, consumedFeeAmount.Ceil().RoundInt()) + requiredFee = sdk.NewCoin(minGasPrice.Denom, limitFee.Ceil().RoundInt()) + + if !feeCoin.IsGTE(requiredFee) { + return sdk.Coin{}, sdk.Coin{}, sdkerrors.ErrInsufficientFee.Wrapf( + "got: %s required: %s, minGasPrice: %s, gas: %d", + feeCoin, + requiredFee, + minGasPrice, gasConsumed, ) } if isCheck { // set fee coins to be required amount if checking - feeCoins = requiredFees + feeCoin = requiredFee } else { - // tip is the difference between feeCoins and the required fees - tip = feeCoins.Sub(requiredFees...) - // set fee coins to be ONLY the consumed amount if we are calculated consumed fee to deduct - feeCoins = consumedFees + // tip is the difference between feeCoin and the required fee + tip = feeCoin.Sub(requiredFee) + // set fee coin to be ONLY the consumed amount if we are calculated consumed fee to deduct + feeCoin = consumedFee } } - return feeCoins, tip, nil + return feeCoin, tip, nil } // getTxPriority returns a naive tx priority based on the amount of the smallest denomination of the gas price // provided in a transaction. // NOTE: This implementation should be used with a great consideration as it opens potential attack vectors // where txs with multiple coins could not be prioritized as expected. -func getTxPriority(fee sdk.Coins, gas int64) int64 { +func getTxPriority(fee sdk.Coin, gas int64) int64 { var priority int64 - for _, c := range fee { - p := int64(math.MaxInt64) - gasPrice := c.Amount.QuoRaw(gas) - if gasPrice.IsInt64() { - p = gasPrice.Int64() - } - if priority == 0 || p < priority { - priority = p - } + p := int64(math.MaxInt64) + gasPrice := fee.Amount.QuoRaw(gas) + if gasPrice.IsInt64() { + p = gasPrice.Int64() + } + if priority == 0 || p < priority { + priority = p } return priority diff --git a/x/feemarket/keeper/feemarket.go b/x/feemarket/keeper/feemarket.go index d95d725f..c530bfb0 100644 --- a/x/feemarket/keeper/feemarket.go +++ b/x/feemarket/keeper/feemarket.go @@ -68,20 +68,18 @@ func (k *Keeper) GetLearningRate(ctx sdk.Context) (math.LegacyDec, error) { return state.LearningRate, nil } -// GetMinGasPrices returns the mininum gas prices as sdk.Coins from the fee market state. -func (k *Keeper) GetMinGasPrices(ctx sdk.Context) (sdk.Coins, error) { +// GetMinGasPrice returns the minimum gas prices as sdk.Coins from the fee market state. +func (k *Keeper) GetMinGasPrice(ctx sdk.Context) (sdk.Coin, error) { baseFee, err := k.GetBaseFee(ctx) if err != nil { - return sdk.NewCoins(), err + return sdk.Coin{}, err } params, err := k.GetParams(ctx) if err != nil { - return sdk.NewCoins(), err + return sdk.Coin{}, err } fee := sdk.NewCoin(params.FeeDenom, baseFee) - minGasPrices := sdk.NewCoins(fee) - - return minGasPrices, nil + return fee, nil } diff --git a/x/feemarket/post/fee.go b/x/feemarket/post/fee.go index 1e308f0d..303871f5 100644 --- a/x/feemarket/post/fee.go +++ b/x/feemarket/post/fee.go @@ -75,27 +75,31 @@ func (dfd FeeMarketDeductDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simul baseFee := sdk.NewCoin(params.FeeDenom, state.BaseFee) minGasPrices := sdk.NewCoins(baseFee) - fee := feeTx.GetFee() + feeCoins := feeTx.GetFee() gas := ctx.GasMeter().GasConsumed() // use context gas consumed + if len(feeCoins) > 1 { + return ctx, feemarkettypes.ErrTooManyFeeCoins + } + ctx.Logger().Info("fee deduct post handle", "min gas prices", minGasPrices, "gas consumed", gas, ) if !simulate { - fee, tip, err = ante.CheckTxFees(ctx, minGasPrices, feeTx, false) + feeCoins, tip, err = ante.CheckTxFees(ctx, minGasPrices, feeTx, false) if err != nil { return ctx, err } } ctx.Logger().Info("fee deduct post handle", - "fee", fee, + "fee", feeCoins, "tip", tip, ) - if err := dfd.DeductFeeAndTip(ctx, tx, fee, tip); err != nil { + if err := dfd.DeductFeeAndTip(ctx, tx, feeCoins, tip); err != nil { return ctx, err } diff --git a/x/feemarket/types/errors.go b/x/feemarket/types/errors.go new file mode 100644 index 00000000..a9298ac9 --- /dev/null +++ b/x/feemarket/types/errors.go @@ -0,0 +1,7 @@ +package types + +import ( + sdkerrors "cosmossdk.io/errors" +) + +var ErrTooManyFeeCoins = sdkerrors.New(ModuleName, 1, "too many fee coins provided. Only one fee coin may be provided") From 3f09cfcc1a27368c2645e1b4cf0bd1cbbc8ad712 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Tue, 9 Jan 2024 09:57:26 -0500 Subject: [PATCH 02/26] fix proto --- proto/feemarket/feemarket/v1/query.proto | 8 +- x/feemarket/keeper/query_server.go | 4 +- x/feemarket/types/query.pb.go | 101 ++++++++++------------- 3 files changed, 48 insertions(+), 65 deletions(-) diff --git a/proto/feemarket/feemarket/v1/query.proto b/proto/feemarket/feemarket/v1/query.proto index 95b8372f..8d168743 100644 --- a/proto/feemarket/feemarket/v1/query.proto +++ b/proto/feemarket/feemarket/v1/query.proto @@ -51,10 +51,6 @@ message BaseFeeRequest {} // StateResponse is the response type for the Query/BaseFee RPC method. message BaseFeeResponse { - repeated cosmos.base.v1beta1.Coin fees = 1 [ - (gogoproto.nullable) = false, - (amino.dont_omitempty) = true, - (amino.encoding) = "legacy_coins", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; + cosmos.base.v1beta1.Coin fees = 1 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; } diff --git a/x/feemarket/keeper/query_server.go b/x/feemarket/keeper/query_server.go index 35640ba0..dec2cabd 100644 --- a/x/feemarket/keeper/query_server.go +++ b/x/feemarket/keeper/query_server.go @@ -40,6 +40,6 @@ func (q QueryServer) State(goCtx context.Context, _ *types.StateRequest) (*types func (q QueryServer) BaseFee(goCtx context.Context, _ *types.BaseFeeRequest) (*types.BaseFeeResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - fees, err := q.k.GetMinGasPrices(ctx) - return &types.BaseFeeResponse{Fees: fees}, err + fee, err := q.k.GetMinGasPrice(ctx) + return &types.BaseFeeResponse{Fees: fee}, err } diff --git a/x/feemarket/types/query.pb.go b/x/feemarket/types/query.pb.go index 0c08ba2c..7a14a67e 100644 --- a/x/feemarket/types/query.pb.go +++ b/x/feemarket/types/query.pb.go @@ -6,7 +6,6 @@ package types import ( context "context" fmt "fmt" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" @@ -235,7 +234,7 @@ var xxx_messageInfo_BaseFeeRequest proto.InternalMessageInfo // StateResponse is the response type for the Query/BaseFee RPC method. type BaseFeeResponse struct { - Fees github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=fees,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"fees"` + Fees types.Coin `protobuf:"bytes,1,opt,name=fees,proto3" json:"fees"` } func (m *BaseFeeResponse) Reset() { *m = BaseFeeResponse{} } @@ -271,11 +270,11 @@ func (m *BaseFeeResponse) XXX_DiscardUnknown() { var xxx_messageInfo_BaseFeeResponse proto.InternalMessageInfo -func (m *BaseFeeResponse) GetFees() github_com_cosmos_cosmos_sdk_types.Coins { +func (m *BaseFeeResponse) GetFees() types.Coin { if m != nil { return m.Fees } - return nil + return types.Coin{} } func init() { @@ -292,39 +291,36 @@ func init() { } var fileDescriptor_d683b3b0d8494138 = []byte{ - // 505 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0x41, 0x6f, 0x12, 0x41, - 0x14, 0x66, 0x6b, 0xc1, 0x64, 0xda, 0x52, 0x1d, 0x2b, 0xa9, 0x58, 0xa7, 0x66, 0x6d, 0x95, 0x34, - 0xe9, 0x4c, 0xc0, 0x93, 0x89, 0x27, 0x4c, 0x9a, 0xe8, 0xc1, 0x28, 0xde, 0xbc, 0x34, 0x03, 0x3e, - 0xd6, 0x0d, 0xdd, 0x9d, 0x85, 0x99, 0x25, 0xe2, 0xd1, 0x93, 0x47, 0x13, 0x6f, 0xfe, 0x02, 0xe3, - 0xa9, 0x3f, 0xa3, 0xc7, 0x26, 0x5e, 0x3c, 0xa9, 0x01, 0x93, 0x9e, 0xfc, 0x0f, 0xcd, 0xce, 0x3c, - 0x28, 0x24, 0xa5, 0x5c, 0xe0, 0xf1, 0xe6, 0x7b, 0xdf, 0x37, 0xef, 0xfb, 0x06, 0xe2, 0xb7, 0x01, - 0x22, 0xd9, 0xeb, 0x80, 0x11, 0x17, 0x55, 0xbf, 0x2a, 0xba, 0x29, 0xf4, 0x06, 0x3c, 0xe9, 0x29, - 0xa3, 0x68, 0x69, 0x72, 0xc2, 0x2f, 0xaa, 0x7e, 0xb5, 0xbc, 0x11, 0xa8, 0x40, 0x59, 0x88, 0xc8, - 0x2a, 0x87, 0x2e, 0x6f, 0x05, 0x4a, 0x05, 0x47, 0x20, 0x64, 0x12, 0x0a, 0x19, 0xc7, 0xca, 0x48, - 0x13, 0xaa, 0x58, 0xe3, 0x29, 0x6b, 0x29, 0x1d, 0x29, 0x2d, 0x9a, 0x52, 0x83, 0xe8, 0x57, 0x9b, - 0x60, 0x64, 0x55, 0xb4, 0x54, 0x18, 0xe3, 0xf9, 0x4d, 0x19, 0x85, 0xb1, 0x12, 0xf6, 0x13, 0x5b, - 0x0f, 0xe6, 0x5c, 0x31, 0x91, 0x3d, 0x19, 0x8d, 0x79, 0x77, 0xe6, 0x80, 0x02, 0x88, 0x41, 0x87, - 0x88, 0xf2, 0xd7, 0xc9, 0xda, 0x2b, 0x3b, 0xd5, 0x80, 0x6e, 0x0a, 0xda, 0xf8, 0x2f, 0x49, 0x71, - 0xdc, 0xd0, 0x89, 0x8a, 0x35, 0xd0, 0xa7, 0xa4, 0xe0, 0x88, 0x37, 0xbd, 0xfb, 0x5e, 0x65, 0xa5, - 0xc6, 0xf8, 0xe5, 0xdb, 0x73, 0x37, 0x57, 0x5f, 0x3e, 0xf9, 0xbd, 0x9d, 0x6b, 0xe0, 0x8c, 0x5f, - 0x24, 0xab, 0x6f, 0x8c, 0x34, 0x30, 0xe6, 0x7f, 0x41, 0xd6, 0xf0, 0x37, 0xd2, 0x3f, 0x21, 0x79, - 0x9d, 0x35, 0x90, 0xfd, 0xde, 0x3c, 0x76, 0x3b, 0x85, 0xe4, 0x6e, 0xc2, 0xbf, 0x41, 0x8a, 0x75, - 0xa9, 0xe1, 0x00, 0x26, 0xec, 0x9f, 0x3d, 0xb2, 0x3e, 0x69, 0xa1, 0x40, 0x4a, 0x96, 0xdb, 0x00, - 0xd9, 0xed, 0xaf, 0x55, 0x56, 0x6a, 0x77, 0xb8, 0xf3, 0x9b, 0x67, 0x7e, 0x73, 0xf4, 0x9b, 0x3f, - 0x53, 0x61, 0x5c, 0x3f, 0xc8, 0xb8, 0x7f, 0xfc, 0xd9, 0xae, 0x04, 0xa1, 0x79, 0x9f, 0x36, 0x79, - 0x4b, 0x45, 0x02, 0xc3, 0x71, 0x5f, 0xfb, 0xfa, 0x5d, 0x47, 0x98, 0x41, 0x02, 0xda, 0x0e, 0xe8, - 0x6f, 0x67, 0xc7, 0x7b, 0xab, 0x47, 0x10, 0xc8, 0xd6, 0xe0, 0x30, 0x4b, 0x4c, 0x7f, 0x3f, 0x3b, - 0xde, 0xf3, 0x1a, 0x56, 0xae, 0xf6, 0x7f, 0x89, 0xe4, 0x5f, 0x67, 0x6f, 0x86, 0xa6, 0xa4, 0xe0, - 0xac, 0xa1, 0xbb, 0x57, 0x5b, 0x87, 0x5b, 0x94, 0x1f, 0x2e, 0x82, 0xb9, 0xcd, 0xfc, 0xad, 0x4f, - 0x3f, 0xff, 0x7d, 0x5d, 0x2a, 0xd1, 0x8d, 0xcb, 0x9e, 0x01, 0xed, 0x92, 0xbc, 0xf5, 0x8c, 0xee, - 0x5c, 0x69, 0xe9, 0x58, 0x74, 0x77, 0x01, 0x0a, 0x35, 0xef, 0x5a, 0xcd, 0xdb, 0xf4, 0xd6, 0xac, - 0xa6, 0x0d, 0x84, 0x7e, 0x24, 0xd7, 0xd1, 0x7d, 0x3a, 0x77, 0x87, 0xd9, 0xc4, 0xca, 0x8f, 0x16, - 0xe2, 0x50, 0x98, 0x59, 0xe1, 0x4d, 0x5a, 0x9a, 0x15, 0xce, 0x62, 0x3c, 0x6c, 0x03, 0xd4, 0x9f, - 0x9f, 0x0c, 0x99, 0x77, 0x3a, 0x64, 0xde, 0xdf, 0x21, 0xf3, 0xbe, 0x8c, 0x58, 0xee, 0x74, 0xc4, - 0x72, 0xbf, 0x46, 0x2c, 0xf7, 0x56, 0x4c, 0xe5, 0xa9, 0x3b, 0x61, 0xb2, 0x1f, 0x41, 0x7f, 0x8a, - 0xe4, 0xc3, 0x54, 0x6d, 0xc3, 0x6d, 0x16, 0xec, 0x7f, 0xe3, 0xf1, 0x79, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xc1, 0x87, 0x84, 0x41, 0x0b, 0x04, 0x00, 0x00, + // 463 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x4f, 0x6b, 0xd4, 0x40, + 0x14, 0xdf, 0x94, 0xee, 0x8a, 0xa3, 0xdd, 0xea, 0x58, 0x97, 0x1a, 0xeb, 0x28, 0xb1, 0x55, 0x11, + 0x9c, 0x21, 0xf5, 0xa2, 0xe0, 0x29, 0x82, 0xa0, 0x82, 0xe8, 0x7a, 0xf3, 0x22, 0x93, 0xe5, 0x6d, + 0x1c, 0x6a, 0x66, 0xb2, 0x99, 0x49, 0xb0, 0x1e, 0xfd, 0x04, 0x82, 0x5f, 0xc2, 0xa3, 0x1f, 0xa3, + 0xc7, 0x82, 0x17, 0x4f, 0x22, 0xbb, 0x82, 0x27, 0xbf, 0x43, 0xc9, 0x64, 0xb2, 0xed, 0x42, 0xd3, + 0xbd, 0x2c, 0x6f, 0xdf, 0xfc, 0xfe, 0xbc, 0xf7, 0x7b, 0x41, 0xc1, 0x18, 0x20, 0xe5, 0xf9, 0x1e, + 0x18, 0x76, 0x5c, 0x95, 0x21, 0x9b, 0x14, 0x90, 0xef, 0xd3, 0x2c, 0x57, 0x46, 0xe1, 0xc1, 0xfc, + 0x85, 0x1e, 0x57, 0x65, 0xe8, 0x6f, 0x24, 0x2a, 0x51, 0x16, 0xc2, 0xaa, 0xaa, 0x46, 0xfb, 0x5b, + 0x89, 0x52, 0xc9, 0x47, 0x60, 0x3c, 0x13, 0x8c, 0x4b, 0xa9, 0x0c, 0x37, 0x42, 0x49, 0xed, 0x5e, + 0xc9, 0x48, 0xe9, 0x54, 0x69, 0x16, 0x73, 0x0d, 0xac, 0x0c, 0x63, 0x30, 0x3c, 0x64, 0x23, 0x25, + 0xa4, 0x7b, 0xbf, 0xcc, 0x53, 0x21, 0x15, 0xb3, 0xbf, 0xae, 0x75, 0xbb, 0x65, 0xc4, 0x8c, 0xe7, + 0x3c, 0x6d, 0x74, 0xb7, 0x5b, 0x40, 0x09, 0x48, 0xd0, 0xc2, 0xa1, 0x82, 0x75, 0xb4, 0xf6, 0xda, + 0xb2, 0x86, 0x30, 0x29, 0x40, 0x9b, 0xe0, 0x15, 0xea, 0x37, 0x0d, 0x9d, 0x29, 0xa9, 0x01, 0x3f, + 0x41, 0xbd, 0x5a, 0x78, 0xd3, 0xbb, 0xe5, 0xdd, 0xbb, 0xb0, 0x4b, 0xe8, 0xe9, 0xdb, 0xd3, 0x9a, + 0x17, 0xad, 0x1e, 0xfc, 0xbe, 0xd9, 0x19, 0x3a, 0x4e, 0xd0, 0x47, 0x17, 0xdf, 0x1a, 0x6e, 0xa0, + 0xd1, 0x7f, 0x81, 0xd6, 0xdc, 0x7f, 0x27, 0xff, 0x18, 0x75, 0x75, 0xd5, 0x70, 0xea, 0x37, 0xda, + 0xd4, 0x2d, 0xcb, 0x89, 0xd7, 0x8c, 0xe0, 0x12, 0xea, 0x47, 0x5c, 0xc3, 0x33, 0x98, 0xab, 0xbf, + 0x44, 0xeb, 0xf3, 0x8e, 0xd3, 0x7f, 0x84, 0x56, 0xc7, 0x00, 0xcd, 0xf0, 0xd7, 0x68, 0x1d, 0x37, + 0xad, 0xe2, 0xa6, 0x2e, 0x6e, 0xfa, 0x54, 0x09, 0x19, 0x9d, 0xaf, 0xa4, 0xbf, 0xff, 0xfb, 0x71, + 0xdf, 0x1b, 0x5a, 0xc6, 0xee, 0xff, 0x15, 0xd4, 0x7d, 0x53, 0x5d, 0x1d, 0x17, 0xa8, 0x57, 0x2f, + 0x87, 0x77, 0xce, 0x5e, 0xde, 0xcd, 0xe1, 0xdf, 0x59, 0x06, 0xab, 0x87, 0x0b, 0xb6, 0xbe, 0xfc, + 0xfc, 0xfb, 0x6d, 0x65, 0x80, 0x37, 0x4e, 0x3b, 0x24, 0x9e, 0xa0, 0xae, 0xdd, 0x1a, 0x6f, 0x9f, + 0x19, 0x4a, 0x63, 0xba, 0xb3, 0x04, 0xe5, 0x3c, 0xaf, 0x5b, 0xcf, 0xab, 0xf8, 0xca, 0xa2, 0xa7, + 0x8d, 0x14, 0x7f, 0x46, 0xe7, 0x5c, 0x80, 0xb8, 0x75, 0x87, 0xc5, 0xcc, 0xfd, 0xbb, 0x4b, 0x71, + 0xce, 0x98, 0x58, 0xe3, 0x4d, 0x3c, 0x58, 0x34, 0xae, 0x2e, 0xf1, 0x7e, 0x0c, 0x10, 0x3d, 0x3f, + 0x98, 0x12, 0xef, 0x70, 0x4a, 0xbc, 0x3f, 0x53, 0xe2, 0x7d, 0x9d, 0x91, 0xce, 0xe1, 0x8c, 0x74, + 0x7e, 0xcd, 0x48, 0xe7, 0x1d, 0x4b, 0x84, 0xf9, 0x50, 0xc4, 0x74, 0xa4, 0x52, 0xa6, 0xf7, 0x44, + 0xf6, 0x20, 0x85, 0xf2, 0x84, 0xc8, 0xa7, 0x13, 0xb5, 0xd9, 0xcf, 0x40, 0xc7, 0x3d, 0xfb, 0x75, + 0x3f, 0x3c, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x78, 0x15, 0xb9, 0xcd, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -640,20 +636,16 @@ func (m *BaseFeeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Fees) > 0 { - for iNdEx := len(m.Fees) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Fees[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + { + size, err := m.Fees.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -723,12 +715,8 @@ func (m *BaseFeeResponse) Size() (n int) { } var l int _ = l - if len(m.Fees) > 0 { - for _, e := range m.Fees { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } + l = m.Fees.Size() + n += 1 + l + sovQuery(uint64(l)) return n } @@ -1112,8 +1100,7 @@ func (m *BaseFeeResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Fees = append(m.Fees, types.Coin{}) - if err := m.Fees[len(m.Fees)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Fees.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex From 5de8f818b125b596f6d975c76bb597d58f88ee55 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Tue, 9 Jan 2024 10:52:26 -0500 Subject: [PATCH 03/26] keeper --- x/feemarket/keeper/feemarket_test.go | 8 ++++---- x/feemarket/keeper/query_server_test.go | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/x/feemarket/keeper/feemarket_test.go b/x/feemarket/keeper/feemarket_test.go index 2b94c69d..150f049e 100644 --- a/x/feemarket/keeper/feemarket_test.go +++ b/x/feemarket/keeper/feemarket_test.go @@ -436,9 +436,9 @@ func (s *KeeperTestSuite) TestGetMinGasPrices() { gs := types.DefaultGenesisState() s.feeMarketKeeper.InitGenesis(s.ctx, *gs) - expected := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, gs.State.BaseFee)) + expected := sdk.NewCoin(sdk.DefaultBondDenom, gs.State.BaseFee) - mgp, err := s.feeMarketKeeper.GetMinGasPrices(s.ctx) + mgp, err := s.feeMarketKeeper.GetMinGasPrice(s.ctx) s.Require().NoError(err) s.Require().Equal(expected, mgp) }) @@ -447,9 +447,9 @@ func (s *KeeperTestSuite) TestGetMinGasPrices() { gs := types.DefaultAIMDGenesisState() s.feeMarketKeeper.InitGenesis(s.ctx, *gs) - expected := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, gs.State.BaseFee)) + expected := sdk.NewCoin(sdk.DefaultBondDenom, gs.State.BaseFee) - mgp, err := s.feeMarketKeeper.GetMinGasPrices(s.ctx) + mgp, err := s.feeMarketKeeper.GetMinGasPrice(s.ctx) s.Require().NoError(err) s.Require().Equal(expected, mgp) }) diff --git a/x/feemarket/keeper/query_server_test.go b/x/feemarket/keeper/query_server_test.go index 23aac7c8..2869edad 100644 --- a/x/feemarket/keeper/query_server_test.go +++ b/x/feemarket/keeper/query_server_test.go @@ -98,10 +98,10 @@ func (s *KeeperTestSuite) TestBaseFeeRequest() { s.Require().NoError(err) s.Require().NotNil(resp) - fees, err := s.feeMarketKeeper.GetMinGasPrices(s.ctx) + fee, err := s.feeMarketKeeper.GetMinGasPrice(s.ctx) s.Require().NoError(err) - s.Require().Equal(resp.Fees, fees) + s.Require().Equal(resp.Fees, fee) }) s.Run("can get updated base fee", func() { @@ -122,9 +122,9 @@ func (s *KeeperTestSuite) TestBaseFeeRequest() { s.Require().NoError(err) s.Require().NotNil(resp) - fees, err := s.feeMarketKeeper.GetMinGasPrices(s.ctx) + fee, err := s.feeMarketKeeper.GetMinGasPrice(s.ctx) s.Require().NoError(err) - s.Require().Equal(resp.Fees, fees) + s.Require().Equal(resp.Fees, fee) }) } From 51b98f7c0d511a0b40be888903dfa0b39c2b9b1b Mon Sep 17 00:00:00 2001 From: aljo242 Date: Tue, 9 Jan 2024 10:52:36 -0500 Subject: [PATCH 04/26] post --- x/feemarket/post/expected_keeper.go | 2 +- x/feemarket/post/fee.go | 20 +++---- .../post/mocks/mock_feemarket_keeper.go | 52 ++++++++++++++++--- 3 files changed, 56 insertions(+), 18 deletions(-) diff --git a/x/feemarket/post/expected_keeper.go b/x/feemarket/post/expected_keeper.go index dfa94ffb..99e99367 100644 --- a/x/feemarket/post/expected_keeper.go +++ b/x/feemarket/post/expected_keeper.go @@ -44,5 +44,5 @@ type FeeMarketKeeper interface { GetParams(ctx sdk.Context) (feemarkettypes.Params, error) SetParams(ctx sdk.Context, params feemarkettypes.Params) error SetState(ctx sdk.Context, state feemarkettypes.State) error - GetMinGasPrices(ctx sdk.Context) (sdk.Coins, error) + GetMinGasPrice(ctx sdk.Context) (sdk.Coin, error) } diff --git a/x/feemarket/post/fee.go b/x/feemarket/post/fee.go index 303871f5..5a2082d6 100644 --- a/x/feemarket/post/fee.go +++ b/x/feemarket/post/fee.go @@ -53,7 +53,10 @@ func (dfd FeeMarketDeductDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simul return ctx, errorsmod.Wrap(sdkerrors.ErrInvalidGasLimit, "must provide positive gas") } - var tip sdk.Coins + var ( + tip sdk.Coin + feeCoin sdk.Coin + ) // update fee market params params, err := dfd.feemarketKeeper.GetParams(ctx) @@ -73,7 +76,6 @@ func (dfd FeeMarketDeductDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simul } baseFee := sdk.NewCoin(params.FeeDenom, state.BaseFee) - minGasPrices := sdk.NewCoins(baseFee) feeCoins := feeTx.GetFee() gas := ctx.GasMeter().GasConsumed() // use context gas consumed @@ -83,12 +85,12 @@ func (dfd FeeMarketDeductDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simul } ctx.Logger().Info("fee deduct post handle", - "min gas prices", minGasPrices, + "min gas prices", baseFee, "gas consumed", gas, ) if !simulate { - feeCoins, tip, err = ante.CheckTxFees(ctx, minGasPrices, feeTx, false) + feeCoin, tip, err = ante.CheckTxFee(ctx, baseFee, feeTx, false) if err != nil { return ctx, err } @@ -99,7 +101,7 @@ func (dfd FeeMarketDeductDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simul "tip", tip, ) - if err := dfd.DeductFeeAndTip(ctx, tx, feeCoins, tip); err != nil { + if err := dfd.DeductFeeAndTip(ctx, tx, feeCoin, tip); err != nil { return ctx, err } @@ -118,7 +120,7 @@ func (dfd FeeMarketDeductDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simul // DeductFeeAndTip deducts the provided fee and tip from the fee payer. // If the tx uses a feegranter, the fee granter address will pay the fee instead of the tx signer. -func (dfd FeeMarketDeductDecorator) DeductFeeAndTip(ctx sdk.Context, sdkTx sdk.Tx, fee, tip sdk.Coins) error { +func (dfd FeeMarketDeductDecorator) DeductFeeAndTip(ctx sdk.Context, sdkTx sdk.Tx, fee, tip sdk.Coin) error { feeTx, ok := sdkTx.(sdk.FeeTx) if !ok { return errorsmod.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") @@ -138,7 +140,7 @@ func (dfd FeeMarketDeductDecorator) DeductFeeAndTip(ctx sdk.Context, sdkTx sdk.T if dfd.feegrantKeeper == nil { return sdkerrors.ErrInvalidRequest.Wrap("fee grants are not enabled") } else if !feeGranter.Equals(feePayer) { - err := dfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, fee, sdkTx.GetMsgs()) + err := dfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, sdk.NewCoins(fee), sdkTx.GetMsgs()) if err != nil { return errorsmod.Wrapf(err, "%s does not allow to pay fees for %s", feeGranter, feePayer) } @@ -156,7 +158,7 @@ func (dfd FeeMarketDeductDecorator) DeductFeeAndTip(ctx sdk.Context, sdkTx sdk.T // deduct the fees and tip if !fee.IsZero() { - err := DeductCoins(dfd.bankKeeper, ctx, deductFeesFromAcc, fee) + err := DeductCoins(dfd.bankKeeper, ctx, deductFeesFromAcc, sdk.NewCoins(fee)) if err != nil { return err } @@ -170,7 +172,7 @@ func (dfd FeeMarketDeductDecorator) DeductFeeAndTip(ctx sdk.Context, sdkTx sdk.T proposer := sdk.AccAddress(ctx.BlockHeader().ProposerAddress) if !tip.IsZero() { - err := SendTip(dfd.bankKeeper, ctx, deductFeesFromAcc.GetAddress(), proposer, tip) + err := SendTip(dfd.bankKeeper, ctx, deductFeesFromAcc.GetAddress(), proposer, sdk.NewCoins(tip)) if err != nil { return err } diff --git a/x/feemarket/post/mocks/mock_feemarket_keeper.go b/x/feemarket/post/mocks/mock_feemarket_keeper.go index ccdd104a..decf2284 100644 --- a/x/feemarket/post/mocks/mock_feemarket_keeper.go +++ b/x/feemarket/post/mocks/mock_feemarket_keeper.go @@ -15,21 +15,43 @@ type FeeMarketKeeper struct { mock.Mock } -// GetMinGasPrices provides a mock function with given fields: ctx -func (_m *FeeMarketKeeper) GetMinGasPrices(ctx types.Context) (types.Coins, error) { +// GetMinGasPrice provides a mock function with given fields: ctx +func (_m *FeeMarketKeeper) GetMinGasPrice(ctx types.Context) (types.Coin, error) { ret := _m.Called(ctx) - var r0 types.Coins + var r0 types.Coin var r1 error - if rf, ok := ret.Get(0).(func(types.Context) (types.Coins, error)); ok { + if rf, ok := ret.Get(0).(func(types.Context) (types.Coin, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(types.Context) types.Coins); ok { + if rf, ok := ret.Get(0).(func(types.Context) types.Coin); ok { r0 = rf(ctx) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(types.Coins) - } + r0 = ret.Get(0).(types.Coin) + } + + if rf, ok := ret.Get(1).(func(types.Context) error); ok { + r1 = rf(ctx) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetParams provides a mock function with given fields: ctx +func (_m *FeeMarketKeeper) GetParams(ctx types.Context) (feemarkettypes.Params, error) { + ret := _m.Called(ctx) + + var r0 feemarkettypes.Params + var r1 error + if rf, ok := ret.Get(0).(func(types.Context) (feemarkettypes.Params, error)); ok { + return rf(ctx) + } + if rf, ok := ret.Get(0).(func(types.Context) feemarkettypes.Params); ok { + r0 = rf(ctx) + } else { + r0 = ret.Get(0).(feemarkettypes.Params) } if rf, ok := ret.Get(1).(func(types.Context) error); ok { @@ -65,6 +87,20 @@ func (_m *FeeMarketKeeper) GetState(ctx types.Context) (feemarkettypes.State, er return r0, r1 } +// SetParams provides a mock function with given fields: ctx, params +func (_m *FeeMarketKeeper) SetParams(ctx types.Context, params feemarkettypes.Params) error { + ret := _m.Called(ctx, params) + + var r0 error + if rf, ok := ret.Get(0).(func(types.Context, feemarkettypes.Params) error); ok { + r0 = rf(ctx, params) + } else { + r0 = ret.Error(0) + } + + return r0 +} + // SetState provides a mock function with given fields: ctx, state func (_m *FeeMarketKeeper) SetState(ctx types.Context, state feemarkettypes.State) error { ret := _m.Called(ctx, state) From e42cfa151d6c9dfa50fc010bbe3022f9fd712cf5 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Tue, 9 Jan 2024 11:10:31 -0500 Subject: [PATCH 05/26] interface --- x/feemarket/types/resolver.go | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 x/feemarket/types/resolver.go diff --git a/x/feemarket/types/resolver.go b/x/feemarket/types/resolver.go new file mode 100644 index 00000000..11132d60 --- /dev/null +++ b/x/feemarket/types/resolver.go @@ -0,0 +1,9 @@ +package types + +import sdk "github.com/cosmos/cosmos-sdk/types" + +// DenomResolver is an interface to convert a given token to the feemarket's base token. +type DenomResolver interface { + // ConvertToBaseToken converts feeCoin into the equivalent amount of the token denominated in baseDenom. + ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) +} From 76f2efdddc8be5d1b1e9c2f09ec76549c19aafde Mon Sep 17 00:00:00 2001 From: aljo242 Date: Tue, 9 Jan 2024 12:04:29 -0500 Subject: [PATCH 06/26] add resolver: --- tests/app/app.go | 6 +++++- testutils/keeper/keeper.go | 1 + x/feemarket/keeper/keeper.go | 26 ++++++++++++++++++++++---- x/feemarket/module.go | 1 + x/feemarket/types/errors.go | 5 ++++- x/feemarket/types/resolver.go | 26 ++++++++++++++++++++++++-- 6 files changed, 57 insertions(+), 8 deletions(-) diff --git a/tests/app/app.go b/tests/app/app.go index 29af1446..99bf9c1b 100644 --- a/tests/app/app.go +++ b/tests/app/app.go @@ -3,6 +3,7 @@ package app //nolint:revive import ( _ "embed" + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" "io" "os" "path/filepath" @@ -182,7 +183,7 @@ func New( // authtypes.RandomGenesisAccountsFn(simulation.RandomGenesisAccounts), // For providing a custom a base account type add it below. - // By default the auth module uses authtypes.ProtoBaseAccount(). + // By default, the auth module uses authtypes.ProtoBaseAccount(). // // func() authtypes.AccountI { return authtypes.ProtoBaseAccount() }, @@ -251,6 +252,9 @@ func New( app.App = appBuilder.Build(logger, db, traceStore, baseAppOptions...) + // set denom resolver to test variant. + app.FeeMarketKeeper.SetDenomResolver(&feemarkettypes.TestDenomResolver{}) + // Create a global ante handler that will be called on each transaction when // proposals are being built and verified. anteHandlerOptions := ante.HandlerOptions{ diff --git a/testutils/keeper/keeper.go b/testutils/keeper/keeper.go index a8c069ae..9f214b1f 100644 --- a/testutils/keeper/keeper.go +++ b/testutils/keeper/keeper.go @@ -83,6 +83,7 @@ func FeeMarket( initializer.Codec, storeKey, authKeeper, + &feemarkettypes.TestDenomResolver{}, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) } diff --git a/x/feemarket/keeper/keeper.go b/x/feemarket/keeper/keeper.go index 8522d662..921ce0c9 100644 --- a/x/feemarket/keeper/keeper.go +++ b/x/feemarket/keeper/keeper.go @@ -11,10 +11,12 @@ import ( "github.com/skip-mev/feemarket/x/feemarket/types" ) +// Keeper is the x/feemarket keeper. type Keeper struct { cdc codec.BinaryCodec storeKey storetypes.StoreKey ak types.AccountKeeper + resolver types.DenomResolver // The address that is capable of executing a MsgParams message. // Typically, this will be the governance module's address. @@ -26,6 +28,7 @@ func NewKeeper( cdc codec.BinaryCodec, storeKey storetypes.StoreKey, authKeeper types.AccountKeeper, + resolver types.DenomResolver, authority string, ) *Keeper { if _, err := sdk.AccAddressFromBech32(authority); err != nil { @@ -33,10 +36,11 @@ func NewKeeper( } k := &Keeper{ - cdc, - storeKey, - authKeeper, - authority, + cdc: cdc, + storeKey: storeKey, + ak: authKeeper, + resolver: resolver, + authority: authority, } return k @@ -52,6 +56,20 @@ func (k *Keeper) GetAuthority() string { return k.authority } +// ResolveToBaseDenom converts the given fee coin to the given base denomination. +func (k *Keeper) ResolveToBaseDenom(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) { + if k.resolver == nil { + return sdk.Coin{}, types.ErrResolverNotSet + } + + return k.resolver.ConvertToBaseToken(ctx, feeCoin, baseDenom) +} + +// SetDenomResolver sets the keeper's denom resolver. +func (k *Keeper) SetDenomResolver(resolver types.DenomResolver) { + k.resolver = resolver +} + // GetState returns the feemarket module's state. func (k *Keeper) GetState(ctx sdk.Context) (types.State, error) { store := ctx.KVStore(k.storeKey) diff --git a/x/feemarket/module.go b/x/feemarket/module.go index d531d9a2..7bbd8cac 100644 --- a/x/feemarket/module.go +++ b/x/feemarket/module.go @@ -189,6 +189,7 @@ func ProvideModule(in Inputs) Outputs { in.Cdc, in.Key, in.AccountKeeper, + nil, authority.String(), ) diff --git a/x/feemarket/types/errors.go b/x/feemarket/types/errors.go index a9298ac9..2c93144c 100644 --- a/x/feemarket/types/errors.go +++ b/x/feemarket/types/errors.go @@ -4,4 +4,7 @@ import ( sdkerrors "cosmossdk.io/errors" ) -var ErrTooManyFeeCoins = sdkerrors.New(ModuleName, 1, "too many fee coins provided. Only one fee coin may be provided") +var ( + ErrTooManyFeeCoins = sdkerrors.New(ModuleName, 1, "too many fee coins provided. Only one fee coin may be provided") + ErrResolverNotSet = sdkerrors.New(ModuleName, 2, "denom resolver interface not set") +) diff --git a/x/feemarket/types/resolver.go b/x/feemarket/types/resolver.go index 11132d60..2cbf8335 100644 --- a/x/feemarket/types/resolver.go +++ b/x/feemarket/types/resolver.go @@ -1,9 +1,31 @@ package types -import sdk "github.com/cosmos/cosmos-sdk/types" +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" +) // DenomResolver is an interface to convert a given token to the feemarket's base token. type DenomResolver interface { // ConvertToBaseToken converts feeCoin into the equivalent amount of the token denominated in baseDenom. - ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) + ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) +} + +// TestDenomResolver is a test implementation of the DenomResolver interface. It returns "1atom" for all inputs. +// NOTE: DO NOT USE THIS IN PRODUCTION +type TestDenomResolver struct{} + +// ConvertToBaseToken returns "1atom" for all inputs. +func (r *TestDenomResolver) ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) { + return sdk.NewCoin("atom", sdk.OneInt()), nil +} + +// ErrorDenomResolver is a test implementation of the DenomResolver interface. It returns an error for all inputs. +// NOTE: DO NOT USE THIS IN PRODUCTION +type ErrorDenomResolver struct{} + +// ConvertToBaseToken returns an error for all inputs. +func (r *ErrorDenomResolver) ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) { + return sdk.Coin{}, fmt.Errorf("error resolving denom") } From e0a76d0135108f1879bb63b69f4e485cea233583 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Tue, 9 Jan 2024 12:16:09 -0500 Subject: [PATCH 07/26] add resolver --- tests/app/app.go | 3 ++- x/feemarket/ante/fee.go | 16 ++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/tests/app/app.go b/tests/app/app.go index 99bf9c1b..cc665980 100644 --- a/tests/app/app.go +++ b/tests/app/app.go @@ -3,12 +3,13 @@ package app //nolint:revive import ( _ "embed" - feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" "io" "os" "path/filepath" "reflect" + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" + "cosmossdk.io/depinject" dbm "github.com/cometbft/cometbft-db" "github.com/cometbft/cometbft/libs/log" diff --git a/x/feemarket/ante/fee.go b/x/feemarket/ante/fee.go index 21ace8ed..30466f9a 100644 --- a/x/feemarket/ante/fee.go +++ b/x/feemarket/ante/fee.go @@ -45,7 +45,7 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula return ctx, sdkerrors.ErrInvalidGasLimit.Wrapf("must provide positive gas") } - minGasPrice, err := dfd.feemarketKeeper.GetMinGasPrice(ctx) + requiredBaseFee, err := dfd.feemarketKeeper.GetMinGasPrice(ctx) if err != nil { return ctx, errorsmod.Wrapf(err, "unable to get fee market state") } @@ -60,34 +60,38 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula // If there is a fee attached to the tx, make sure the fee denom is a denom accepted by the chain if len(feeCoins) == 1 { feeDenom := feeCoins.GetDenomByIndex(0) - if feeDenom != minGasPrice.Denom { + if feeDenom != requiredBaseFee.Denom { return ctx, err } } ctx.Logger().Info("fee deduct ante handle", - "min gas prices", minGasPrice, + "min gas prices", requiredBaseFee, "fee", feeCoins, "gas limit", gas, ) if !simulate { - feeCoin, _, err = CheckTxFee(ctx, minGasPrice, feeTx, true) + feeCoin, _, err = CheckTxFee(ctx, requiredBaseFee, feeTx, true) if err != nil { return ctx, errorsmod.Wrapf(err, "error checking fee") } } - minGasPricesDecCoin := sdk.NewDecCoinFromCoin(minGasPrice) + minGasPricesDecCoin := sdk.NewDecCoinFromCoin(requiredBaseFee) newCtx := ctx.WithPriority(getTxPriority(feeCoin, int64(gas))).WithMinGasPrices(sdk.NewDecCoins(minGasPricesDecCoin)) return next(newCtx, tx, simulate) } // CheckTxFee implements the logic for the fee market to check if a Tx has provided sufficient // fees given the current state of the fee market. Returns an error if insufficient fees. -func CheckTxFee(ctx sdk.Context, minFee sdk.Coin, feeTx sdk.FeeTx, isCheck bool) (feeCoin sdk.Coin, tip sdk.Coin, err error) { +func CheckTxFee(ctx sdk.Context, minFee sdk.Coin, feeTx sdk.FeeTx, isCheck bool, resolver feemarkettypes.DenomResolver) (feeCoin sdk.Coin, tip sdk.Coin, err error) { minFeesDecCoin := sdk.NewDecCoinFromCoin(minFee) feeCoin = feeTx.GetFee()[0] + feeCoin, err = resolver.ConvertToBaseToken(ctx, feeCoin, minFee.Denom) + if err != nil { + return sdk.Coin{}, sdk.Coin{}, err + } // Ensure that the provided fees meet the minimum minGasPrice := minFeesDecCoin From 61ff14e86b1ebd4910e6338b79de8012663c6c7b Mon Sep 17 00:00:00 2001 From: aljo242 Date: Tue, 9 Jan 2024 12:37:46 -0500 Subject: [PATCH 08/26] integrate --- x/feemarket/ante/expected_keepers.go | 1 + x/feemarket/ante/fee.go | 4 +- x/feemarket/ante/mocks/mock_account_keeper.go | 3 +- x/feemarket/ante/mocks/mock_bank_keeper.go | 3 +- .../ante/mocks/mock_feegrant_keeper.go | 3 +- .../ante/mocks/mock_feemarket_keeper.go | 104 ++++++++++++++---- x/feemarket/keeper/keeper.go | 5 + x/feemarket/post/expected_keeper.go | 1 + x/feemarket/post/fee.go | 2 +- x/feemarket/post/mocks/mock_account_keeper.go | 3 +- x/feemarket/post/mocks/mock_bank_keeper.go | 3 +- .../post/mocks/mock_feegrant_keeper.go | 3 +- .../post/mocks/mock_feemarket_keeper.go | 68 +++++++----- x/feemarket/types/resolver.go | 18 ++- 14 files changed, 154 insertions(+), 67 deletions(-) diff --git a/x/feemarket/ante/expected_keepers.go b/x/feemarket/ante/expected_keepers.go index b697bbec..c009ca38 100644 --- a/x/feemarket/ante/expected_keepers.go +++ b/x/feemarket/ante/expected_keepers.go @@ -45,4 +45,5 @@ type FeeMarketKeeper interface { SetState(ctx sdk.Context, state feemarkettypes.State) error SetParams(ctx sdk.Context, params feemarkettypes.Params) error GetMinGasPrice(ctx sdk.Context) (sdk.Coin, error) + GetDenomResolver() feemarkettypes.DenomResolver } diff --git a/x/feemarket/ante/fee.go b/x/feemarket/ante/fee.go index 30466f9a..7ac02019 100644 --- a/x/feemarket/ante/fee.go +++ b/x/feemarket/ante/fee.go @@ -72,7 +72,7 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula ) if !simulate { - feeCoin, _, err = CheckTxFee(ctx, requiredBaseFee, feeTx, true) + feeCoin, _, err = CheckTxFee(ctx, requiredBaseFee, feeTx, true, dfd.feemarketKeeper.GetDenomResolver()) if err != nil { return ctx, errorsmod.Wrapf(err, "error checking fee") } @@ -110,7 +110,7 @@ func CheckTxFee(ctx sdk.Context, minFee sdk.Coin, feeTx sdk.FeeTx, isCheck bool, consumedFee = sdk.NewCoin(minGasPrice.Denom, consumedFeeAmount.Ceil().RoundInt()) requiredFee = sdk.NewCoin(minGasPrice.Denom, limitFee.Ceil().RoundInt()) - if !feeCoin.IsGTE(requiredFee) { + if feeCoin.Denom != requiredFee.Denom || !feeCoin.IsGTE(requiredFee) { return sdk.Coin{}, sdk.Coin{}, sdkerrors.ErrInsufficientFee.Wrapf( "got: %s required: %s, minGasPrice: %s, gas: %d", feeCoin, diff --git a/x/feemarket/ante/mocks/mock_account_keeper.go b/x/feemarket/ante/mocks/mock_account_keeper.go index fb833d3b..207e219b 100644 --- a/x/feemarket/ante/mocks/mock_account_keeper.go +++ b/x/feemarket/ante/mocks/mock_account_keeper.go @@ -102,8 +102,7 @@ func (_m *AccountKeeper) SetAccount(ctx types.Context, acc authtypes.AccountI) { func NewAccountKeeper(t interface { mock.TestingT Cleanup(func()) -}, -) *AccountKeeper { +}) *AccountKeeper { mock := &AccountKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/ante/mocks/mock_bank_keeper.go b/x/feemarket/ante/mocks/mock_bank_keeper.go index 1cbcf2a2..351bafa3 100644 --- a/x/feemarket/ante/mocks/mock_bank_keeper.go +++ b/x/feemarket/ante/mocks/mock_bank_keeper.go @@ -66,8 +66,7 @@ func (_m *BankKeeper) SendCoinsFromAccountToModule(ctx types.Context, senderAddr func NewBankKeeper(t interface { mock.TestingT Cleanup(func()) -}, -) *BankKeeper { +}) *BankKeeper { mock := &BankKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/ante/mocks/mock_feegrant_keeper.go b/x/feemarket/ante/mocks/mock_feegrant_keeper.go index 2a654891..355ecd51 100644 --- a/x/feemarket/ante/mocks/mock_feegrant_keeper.go +++ b/x/feemarket/ante/mocks/mock_feegrant_keeper.go @@ -31,8 +31,7 @@ func (_m *FeeGrantKeeper) UseGrantedFees(ctx types.Context, granter types.AccAdd func NewFeeGrantKeeper(t interface { mock.TestingT Cleanup(func()) -}, -) *FeeGrantKeeper { +}) *FeeGrantKeeper { mock := &FeeGrantKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/ante/mocks/mock_feemarket_keeper.go b/x/feemarket/ante/mocks/mock_feemarket_keeper.go index aa598956..4a2acec4 100644 --- a/x/feemarket/ante/mocks/mock_feemarket_keeper.go +++ b/x/feemarket/ante/mocks/mock_feemarket_keeper.go @@ -3,11 +3,10 @@ package mocks import ( + cosmos_sdktypes "github.com/cosmos/cosmos-sdk/types" mock "github.com/stretchr/testify/mock" - feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" - - types "github.com/cosmos/cosmos-sdk/types" + types "github.com/skip-mev/feemarket/x/feemarket/types" ) // FeeMarketKeeper is an autogenerated mock type for the FeeMarketKeeper type @@ -15,24 +14,62 @@ type FeeMarketKeeper struct { mock.Mock } -// GetMinGasPrices provides a mock function with given fields: ctx -func (_m *FeeMarketKeeper) GetMinGasPrices(ctx types.Context) (types.Coins, error) { +// GetDenomResolver provides a mock function with given fields: +func (_m *FeeMarketKeeper) GetDenomResolver() types.DenomResolver { + ret := _m.Called() + + var r0 types.DenomResolver + if rf, ok := ret.Get(0).(func() types.DenomResolver); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(types.DenomResolver) + } + } + + return r0 +} + +// GetMinGasPrice provides a mock function with given fields: ctx +func (_m *FeeMarketKeeper) GetMinGasPrice(ctx cosmos_sdktypes.Context) (cosmos_sdktypes.Coin, error) { ret := _m.Called(ctx) - var r0 types.Coins + var r0 cosmos_sdktypes.Coin var r1 error - if rf, ok := ret.Get(0).(func(types.Context) (types.Coins, error)); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) (cosmos_sdktypes.Coin, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(types.Context) types.Coins); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) cosmos_sdktypes.Coin); ok { r0 = rf(ctx) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(types.Coins) - } + r0 = ret.Get(0).(cosmos_sdktypes.Coin) + } + + if rf, ok := ret.Get(1).(func(cosmos_sdktypes.Context) error); ok { + r1 = rf(ctx) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetParams provides a mock function with given fields: ctx +func (_m *FeeMarketKeeper) GetParams(ctx cosmos_sdktypes.Context) (types.Params, error) { + ret := _m.Called(ctx) + + var r0 types.Params + var r1 error + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) (types.Params, error)); ok { + return rf(ctx) + } + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) types.Params); ok { + r0 = rf(ctx) + } else { + r0 = ret.Get(0).(types.Params) } - if rf, ok := ret.Get(1).(func(types.Context) error); ok { + if rf, ok := ret.Get(1).(func(cosmos_sdktypes.Context) error); ok { r1 = rf(ctx) } else { r1 = ret.Error(1) @@ -42,21 +79,21 @@ func (_m *FeeMarketKeeper) GetMinGasPrices(ctx types.Context) (types.Coins, erro } // GetState provides a mock function with given fields: ctx -func (_m *FeeMarketKeeper) GetState(ctx types.Context) (feemarkettypes.State, error) { +func (_m *FeeMarketKeeper) GetState(ctx cosmos_sdktypes.Context) (types.State, error) { ret := _m.Called(ctx) - var r0 feemarkettypes.State + var r0 types.State var r1 error - if rf, ok := ret.Get(0).(func(types.Context) (feemarkettypes.State, error)); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) (types.State, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(types.Context) feemarkettypes.State); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) types.State); ok { r0 = rf(ctx) } else { - r0 = ret.Get(0).(feemarkettypes.State) + r0 = ret.Get(0).(types.State) } - if rf, ok := ret.Get(1).(func(types.Context) error); ok { + if rf, ok := ret.Get(1).(func(cosmos_sdktypes.Context) error); ok { r1 = rf(ctx) } else { r1 = ret.Error(1) @@ -65,13 +102,40 @@ func (_m *FeeMarketKeeper) GetState(ctx types.Context) (feemarkettypes.State, er return r0, r1 } +// SetParams provides a mock function with given fields: ctx, params +func (_m *FeeMarketKeeper) SetParams(ctx cosmos_sdktypes.Context, params types.Params) error { + ret := _m.Called(ctx, params) + + var r0 error + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context, types.Params) error); ok { + r0 = rf(ctx, params) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// SetState provides a mock function with given fields: ctx, state +func (_m *FeeMarketKeeper) SetState(ctx cosmos_sdktypes.Context, state types.State) error { + ret := _m.Called(ctx, state) + + var r0 error + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context, types.State) error); ok { + r0 = rf(ctx, state) + } else { + r0 = ret.Error(0) + } + + return r0 +} + // NewFeeMarketKeeper creates a new instance of FeeMarketKeeper. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewFeeMarketKeeper(t interface { mock.TestingT Cleanup(func()) -}, -) *FeeMarketKeeper { +}) *FeeMarketKeeper { mock := &FeeMarketKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/keeper/keeper.go b/x/feemarket/keeper/keeper.go index 921ce0c9..6ba5923f 100644 --- a/x/feemarket/keeper/keeper.go +++ b/x/feemarket/keeper/keeper.go @@ -70,6 +70,11 @@ func (k *Keeper) SetDenomResolver(resolver types.DenomResolver) { k.resolver = resolver } +// GetDenomResolver gets the keeper's denom resolver. +func (k *Keeper) GetDenomResolver() types.DenomResolver { + return k.resolver +} + // GetState returns the feemarket module's state. func (k *Keeper) GetState(ctx sdk.Context) (types.State, error) { store := ctx.KVStore(k.storeKey) diff --git a/x/feemarket/post/expected_keeper.go b/x/feemarket/post/expected_keeper.go index 99e99367..2b075749 100644 --- a/x/feemarket/post/expected_keeper.go +++ b/x/feemarket/post/expected_keeper.go @@ -45,4 +45,5 @@ type FeeMarketKeeper interface { SetParams(ctx sdk.Context, params feemarkettypes.Params) error SetState(ctx sdk.Context, state feemarkettypes.State) error GetMinGasPrice(ctx sdk.Context) (sdk.Coin, error) + GetDenomResolver() feemarkettypes.DenomResolver } diff --git a/x/feemarket/post/fee.go b/x/feemarket/post/fee.go index 5a2082d6..38ec0a49 100644 --- a/x/feemarket/post/fee.go +++ b/x/feemarket/post/fee.go @@ -90,7 +90,7 @@ func (dfd FeeMarketDeductDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simul ) if !simulate { - feeCoin, tip, err = ante.CheckTxFee(ctx, baseFee, feeTx, false) + feeCoin, tip, err = ante.CheckTxFee(ctx, baseFee, feeTx, false, dfd.feemarketKeeper.GetDenomResolver()) if err != nil { return ctx, err } diff --git a/x/feemarket/post/mocks/mock_account_keeper.go b/x/feemarket/post/mocks/mock_account_keeper.go index fb833d3b..207e219b 100644 --- a/x/feemarket/post/mocks/mock_account_keeper.go +++ b/x/feemarket/post/mocks/mock_account_keeper.go @@ -102,8 +102,7 @@ func (_m *AccountKeeper) SetAccount(ctx types.Context, acc authtypes.AccountI) { func NewAccountKeeper(t interface { mock.TestingT Cleanup(func()) -}, -) *AccountKeeper { +}) *AccountKeeper { mock := &AccountKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/post/mocks/mock_bank_keeper.go b/x/feemarket/post/mocks/mock_bank_keeper.go index 26d98075..9cae7d70 100644 --- a/x/feemarket/post/mocks/mock_bank_keeper.go +++ b/x/feemarket/post/mocks/mock_bank_keeper.go @@ -67,8 +67,7 @@ func (_m *BankKeeper) SendCoinsFromAccountToModule(ctx types.Context, senderAddr func NewBankKeeper(t interface { mock.TestingT Cleanup(func()) -}, -) *BankKeeper { +}) *BankKeeper { mock := &BankKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/post/mocks/mock_feegrant_keeper.go b/x/feemarket/post/mocks/mock_feegrant_keeper.go index aefc832a..ddff891c 100644 --- a/x/feemarket/post/mocks/mock_feegrant_keeper.go +++ b/x/feemarket/post/mocks/mock_feegrant_keeper.go @@ -32,8 +32,7 @@ func (_m *FeeGrantKeeper) UseGrantedFees(ctx types.Context, granter types.AccAdd func NewFeeGrantKeeper(t interface { mock.TestingT Cleanup(func()) -}, -) *FeeGrantKeeper { +}) *FeeGrantKeeper { mock := &FeeGrantKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/post/mocks/mock_feemarket_keeper.go b/x/feemarket/post/mocks/mock_feemarket_keeper.go index decf2284..4a2acec4 100644 --- a/x/feemarket/post/mocks/mock_feemarket_keeper.go +++ b/x/feemarket/post/mocks/mock_feemarket_keeper.go @@ -3,11 +3,10 @@ package mocks import ( + cosmos_sdktypes "github.com/cosmos/cosmos-sdk/types" mock "github.com/stretchr/testify/mock" - feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" - - types "github.com/cosmos/cosmos-sdk/types" + types "github.com/skip-mev/feemarket/x/feemarket/types" ) // FeeMarketKeeper is an autogenerated mock type for the FeeMarketKeeper type @@ -15,22 +14,38 @@ type FeeMarketKeeper struct { mock.Mock } +// GetDenomResolver provides a mock function with given fields: +func (_m *FeeMarketKeeper) GetDenomResolver() types.DenomResolver { + ret := _m.Called() + + var r0 types.DenomResolver + if rf, ok := ret.Get(0).(func() types.DenomResolver); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(types.DenomResolver) + } + } + + return r0 +} + // GetMinGasPrice provides a mock function with given fields: ctx -func (_m *FeeMarketKeeper) GetMinGasPrice(ctx types.Context) (types.Coin, error) { +func (_m *FeeMarketKeeper) GetMinGasPrice(ctx cosmos_sdktypes.Context) (cosmos_sdktypes.Coin, error) { ret := _m.Called(ctx) - var r0 types.Coin + var r0 cosmos_sdktypes.Coin var r1 error - if rf, ok := ret.Get(0).(func(types.Context) (types.Coin, error)); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) (cosmos_sdktypes.Coin, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(types.Context) types.Coin); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) cosmos_sdktypes.Coin); ok { r0 = rf(ctx) } else { - r0 = ret.Get(0).(types.Coin) + r0 = ret.Get(0).(cosmos_sdktypes.Coin) } - if rf, ok := ret.Get(1).(func(types.Context) error); ok { + if rf, ok := ret.Get(1).(func(cosmos_sdktypes.Context) error); ok { r1 = rf(ctx) } else { r1 = ret.Error(1) @@ -40,21 +55,21 @@ func (_m *FeeMarketKeeper) GetMinGasPrice(ctx types.Context) (types.Coin, error) } // GetParams provides a mock function with given fields: ctx -func (_m *FeeMarketKeeper) GetParams(ctx types.Context) (feemarkettypes.Params, error) { +func (_m *FeeMarketKeeper) GetParams(ctx cosmos_sdktypes.Context) (types.Params, error) { ret := _m.Called(ctx) - var r0 feemarkettypes.Params + var r0 types.Params var r1 error - if rf, ok := ret.Get(0).(func(types.Context) (feemarkettypes.Params, error)); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) (types.Params, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(types.Context) feemarkettypes.Params); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) types.Params); ok { r0 = rf(ctx) } else { - r0 = ret.Get(0).(feemarkettypes.Params) + r0 = ret.Get(0).(types.Params) } - if rf, ok := ret.Get(1).(func(types.Context) error); ok { + if rf, ok := ret.Get(1).(func(cosmos_sdktypes.Context) error); ok { r1 = rf(ctx) } else { r1 = ret.Error(1) @@ -64,21 +79,21 @@ func (_m *FeeMarketKeeper) GetParams(ctx types.Context) (feemarkettypes.Params, } // GetState provides a mock function with given fields: ctx -func (_m *FeeMarketKeeper) GetState(ctx types.Context) (feemarkettypes.State, error) { +func (_m *FeeMarketKeeper) GetState(ctx cosmos_sdktypes.Context) (types.State, error) { ret := _m.Called(ctx) - var r0 feemarkettypes.State + var r0 types.State var r1 error - if rf, ok := ret.Get(0).(func(types.Context) (feemarkettypes.State, error)); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) (types.State, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(types.Context) feemarkettypes.State); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) types.State); ok { r0 = rf(ctx) } else { - r0 = ret.Get(0).(feemarkettypes.State) + r0 = ret.Get(0).(types.State) } - if rf, ok := ret.Get(1).(func(types.Context) error); ok { + if rf, ok := ret.Get(1).(func(cosmos_sdktypes.Context) error); ok { r1 = rf(ctx) } else { r1 = ret.Error(1) @@ -88,11 +103,11 @@ func (_m *FeeMarketKeeper) GetState(ctx types.Context) (feemarkettypes.State, er } // SetParams provides a mock function with given fields: ctx, params -func (_m *FeeMarketKeeper) SetParams(ctx types.Context, params feemarkettypes.Params) error { +func (_m *FeeMarketKeeper) SetParams(ctx cosmos_sdktypes.Context, params types.Params) error { ret := _m.Called(ctx, params) var r0 error - if rf, ok := ret.Get(0).(func(types.Context, feemarkettypes.Params) error); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context, types.Params) error); ok { r0 = rf(ctx, params) } else { r0 = ret.Error(0) @@ -102,11 +117,11 @@ func (_m *FeeMarketKeeper) SetParams(ctx types.Context, params feemarkettypes.Pa } // SetState provides a mock function with given fields: ctx, state -func (_m *FeeMarketKeeper) SetState(ctx types.Context, state feemarkettypes.State) error { +func (_m *FeeMarketKeeper) SetState(ctx cosmos_sdktypes.Context, state types.State) error { ret := _m.Called(ctx, state) var r0 error - if rf, ok := ret.Get(0).(func(types.Context, feemarkettypes.State) error); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context, types.State) error); ok { r0 = rf(ctx, state) } else { r0 = ret.Error(0) @@ -120,8 +135,7 @@ func (_m *FeeMarketKeeper) SetState(ctx types.Context, state feemarkettypes.Stat func NewFeeMarketKeeper(t interface { mock.TestingT Cleanup(func()) -}, -) *FeeMarketKeeper { +}) *FeeMarketKeeper { mock := &FeeMarketKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/types/resolver.go b/x/feemarket/types/resolver.go index 2cbf8335..c0394cf8 100644 --- a/x/feemarket/types/resolver.go +++ b/x/feemarket/types/resolver.go @@ -12,20 +12,28 @@ type DenomResolver interface { ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) } -// TestDenomResolver is a test implementation of the DenomResolver interface. It returns "1atom" for all inputs. +// TestDenomResolver is a test implementation of the DenomResolver interface. It returns "1atom" for all coins that are not the baseDenom. // NOTE: DO NOT USE THIS IN PRODUCTION type TestDenomResolver struct{} -// ConvertToBaseToken returns "1atom" for all inputs. +// ConvertToBaseToken returns "1000000baseDenom" for all coins that are not the baseDenom. func (r *TestDenomResolver) ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) { - return sdk.NewCoin("atom", sdk.OneInt()), nil + if feeCoin.Denom == baseDenom { + return feeCoin, nil + } + + return sdk.NewCoin(baseDenom, sdk.NewInt(1_000_000)), nil } -// ErrorDenomResolver is a test implementation of the DenomResolver interface. It returns an error for all inputs. +// ErrorDenomResolver is a test implementation of the DenomResolver interface. It returns an error for all coins that are not the baseDenom. // NOTE: DO NOT USE THIS IN PRODUCTION type ErrorDenomResolver struct{} -// ConvertToBaseToken returns an error for all inputs. +// ConvertToBaseToken returns an error for all coins that are not the baseDenom. func (r *ErrorDenomResolver) ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) { + if feeCoin.Denom == baseDenom { + return feeCoin, nil + } + return sdk.Coin{}, fmt.Errorf("error resolving denom") } From 143d1a0c9db4c10b81774f37448d2dd024dc4098 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Tue, 9 Jan 2024 12:48:52 -0500 Subject: [PATCH 09/26] test: --- x/feemarket/ante/fee.go | 1 + x/feemarket/ante/fee_test.go | 34 +++++++++++++++++++ x/feemarket/ante/mocks/mock_account_keeper.go | 3 +- x/feemarket/ante/mocks/mock_bank_keeper.go | 3 +- .../ante/mocks/mock_feegrant_keeper.go | 3 +- .../ante/mocks/mock_feemarket_keeper.go | 3 +- x/feemarket/post/fee_test.go | 33 +++++++++++++++--- x/feemarket/post/mocks/mock_account_keeper.go | 3 +- x/feemarket/post/mocks/mock_bank_keeper.go | 3 +- .../post/mocks/mock_feegrant_keeper.go | 3 +- .../post/mocks/mock_feemarket_keeper.go | 3 +- x/feemarket/types/resolver.go | 10 +++--- 12 files changed, 85 insertions(+), 17 deletions(-) diff --git a/x/feemarket/ante/fee.go b/x/feemarket/ante/fee.go index 7ac02019..e20e87f5 100644 --- a/x/feemarket/ante/fee.go +++ b/x/feemarket/ante/fee.go @@ -88,6 +88,7 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula func CheckTxFee(ctx sdk.Context, minFee sdk.Coin, feeTx sdk.FeeTx, isCheck bool, resolver feemarkettypes.DenomResolver) (feeCoin sdk.Coin, tip sdk.Coin, err error) { minFeesDecCoin := sdk.NewDecCoinFromCoin(minFee) feeCoin = feeTx.GetFee()[0] + feeCoin, err = resolver.ConvertToBaseToken(ctx, feeCoin, minFee.Denom) if err != nil { return sdk.Coin{}, sdk.Coin{}, err diff --git a/x/feemarket/ante/fee_test.go b/x/feemarket/ante/fee_test.go index 34d6fea9..99b2782c 100644 --- a/x/feemarket/ante/fee_test.go +++ b/x/feemarket/ante/fee_test.go @@ -18,6 +18,7 @@ func TestAnteHandle(t *testing.T) { gasLimit := antesuite.NewTestGasLimit() validFeeAmount := types.DefaultMinBaseFee.MulRaw(int64(gasLimit)) validFee := sdk.NewCoins(sdk.NewCoin("stake", validFeeAmount)) + validFeeDifferentDenom := sdk.NewCoins(sdk.NewCoin("atom", validFeeAmount)) testCases := []antesuite.TestCase{ { @@ -37,6 +38,23 @@ func TestAnteHandle(t *testing.T) { ExpPass: false, ExpErr: sdkerrors.ErrInvalidGasLimit, }, + { + Name: "0 gas given should fail with resolvable denom", + Malleate: func(suite *antesuite.TestSuite) antesuite.TestCaseArgs { + accs := suite.CreateTestAccounts(1) + + return antesuite.TestCaseArgs{ + Msgs: []sdk.Msg{testdata.NewTestMsg(accs[0].Account.GetAddress())}, + GasLimit: 0, + FeeAmount: validFeeDifferentDenom, + } + }, + RunAnte: true, + RunPost: false, + Simulate: false, + ExpPass: false, + ExpErr: sdkerrors.ErrInvalidGasLimit, + }, { Name: "signer has enough funds, should pass", Malleate: func(suite *antesuite.TestSuite) antesuite.TestCaseArgs { @@ -53,6 +71,22 @@ func TestAnteHandle(t *testing.T) { ExpPass: true, ExpErr: nil, }, + { + Name: "signer has enough funds in resolvable denom, should pass", + Malleate: func(suite *antesuite.TestSuite) antesuite.TestCaseArgs { + accs := suite.CreateTestAccounts(1) + return antesuite.TestCaseArgs{ + Msgs: []sdk.Msg{testdata.NewTestMsg(accs[0].Account.GetAddress())}, + GasLimit: gasLimit, + FeeAmount: validFeeDifferentDenom, + } + }, + RunAnte: true, + RunPost: false, + Simulate: false, + ExpPass: true, + ExpErr: nil, + }, } for _, tc := range testCases { diff --git a/x/feemarket/ante/mocks/mock_account_keeper.go b/x/feemarket/ante/mocks/mock_account_keeper.go index 207e219b..fb833d3b 100644 --- a/x/feemarket/ante/mocks/mock_account_keeper.go +++ b/x/feemarket/ante/mocks/mock_account_keeper.go @@ -102,7 +102,8 @@ func (_m *AccountKeeper) SetAccount(ctx types.Context, acc authtypes.AccountI) { func NewAccountKeeper(t interface { mock.TestingT Cleanup(func()) -}) *AccountKeeper { +}, +) *AccountKeeper { mock := &AccountKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/ante/mocks/mock_bank_keeper.go b/x/feemarket/ante/mocks/mock_bank_keeper.go index 351bafa3..1cbcf2a2 100644 --- a/x/feemarket/ante/mocks/mock_bank_keeper.go +++ b/x/feemarket/ante/mocks/mock_bank_keeper.go @@ -66,7 +66,8 @@ func (_m *BankKeeper) SendCoinsFromAccountToModule(ctx types.Context, senderAddr func NewBankKeeper(t interface { mock.TestingT Cleanup(func()) -}) *BankKeeper { +}, +) *BankKeeper { mock := &BankKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/ante/mocks/mock_feegrant_keeper.go b/x/feemarket/ante/mocks/mock_feegrant_keeper.go index 355ecd51..2a654891 100644 --- a/x/feemarket/ante/mocks/mock_feegrant_keeper.go +++ b/x/feemarket/ante/mocks/mock_feegrant_keeper.go @@ -31,7 +31,8 @@ func (_m *FeeGrantKeeper) UseGrantedFees(ctx types.Context, granter types.AccAdd func NewFeeGrantKeeper(t interface { mock.TestingT Cleanup(func()) -}) *FeeGrantKeeper { +}, +) *FeeGrantKeeper { mock := &FeeGrantKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/ante/mocks/mock_feemarket_keeper.go b/x/feemarket/ante/mocks/mock_feemarket_keeper.go index 4a2acec4..4d53c56d 100644 --- a/x/feemarket/ante/mocks/mock_feemarket_keeper.go +++ b/x/feemarket/ante/mocks/mock_feemarket_keeper.go @@ -135,7 +135,8 @@ func (_m *FeeMarketKeeper) SetState(ctx cosmos_sdktypes.Context, state types.Sta func NewFeeMarketKeeper(t interface { mock.TestingT Cleanup(func()) -}) *FeeMarketKeeper { +}, +) *FeeMarketKeeper { mock := &FeeMarketKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/post/fee_test.go b/x/feemarket/post/fee_test.go index 79334b83..e74f18f4 100644 --- a/x/feemarket/post/fee_test.go +++ b/x/feemarket/post/fee_test.go @@ -101,11 +101,18 @@ func TestSendTip(t *testing.T) { func TestPostHandle(t *testing.T) { // Same data for every test case + const ( + baseDenom = "stake" + resolvableDenom = "atom" + ) + gasLimit := antesuite.NewTestGasLimit() validFeeAmount := types.DefaultMinBaseFee.MulRaw(int64(gasLimit)) validFeeAmountWithTip := validFeeAmount.Add(sdk.NewInt(100)) - validFee := sdk.NewCoins(sdk.NewCoin("stake", validFeeAmount)) - validFeeWithTip := sdk.NewCoins(sdk.NewCoin("stake", validFeeAmountWithTip)) + validFee := sdk.NewCoins(sdk.NewCoin(baseDenom, validFeeAmount)) + validFeeWithTip := sdk.NewCoins(sdk.NewCoin(baseDenom, validFeeAmountWithTip)) + validResolvableFee := sdk.NewCoins(sdk.NewCoin(resolvableDenom, validFeeAmount)) + validResolvableFeeWithTip := sdk.NewCoins(sdk.NewCoin(resolvableDenom, validFeeAmountWithTip)) testCases := []antesuite.TestCase{ { @@ -181,7 +188,25 @@ func TestPostHandle(t *testing.T) { ExpErr: nil, }, { - Name: "signer has enough funds, should pass with tip", + Name: "signer has enough funds, should pass, no tip - resolvable denom", + Malleate: func(s *antesuite.TestSuite) antesuite.TestCaseArgs { + accs := s.CreateTestAccounts(1) + s.MockBankKeeper.On("SendCoinsFromAccountToModule", mock.Anything, accs[0].Account.GetAddress(), types.FeeCollectorName, mock.Anything).Return(nil) + + return antesuite.TestCaseArgs{ + Msgs: []sdk.Msg{testdata.NewTestMsg(accs[0].Account.GetAddress())}, + GasLimit: gasLimit, + FeeAmount: validResolvableFee, + } + }, + RunAnte: true, + RunPost: true, + Simulate: false, + ExpPass: true, + ExpErr: nil, + }, + { + Name: "signer has enough funds, should pass with tip - resolvable denom", Malleate: func(s *antesuite.TestSuite) antesuite.TestCaseArgs { accs := s.CreateTestAccounts(1) s.MockBankKeeper.On("SendCoinsFromAccountToModule", mock.Anything, accs[0].Account.GetAddress(), types.FeeCollectorName, mock.Anything).Return(nil) @@ -190,7 +215,7 @@ func TestPostHandle(t *testing.T) { return antesuite.TestCaseArgs{ Msgs: []sdk.Msg{testdata.NewTestMsg(accs[0].Account.GetAddress())}, GasLimit: gasLimit, - FeeAmount: validFeeWithTip, + FeeAmount: validResolvableFeeWithTip, } }, RunAnte: true, diff --git a/x/feemarket/post/mocks/mock_account_keeper.go b/x/feemarket/post/mocks/mock_account_keeper.go index 207e219b..fb833d3b 100644 --- a/x/feemarket/post/mocks/mock_account_keeper.go +++ b/x/feemarket/post/mocks/mock_account_keeper.go @@ -102,7 +102,8 @@ func (_m *AccountKeeper) SetAccount(ctx types.Context, acc authtypes.AccountI) { func NewAccountKeeper(t interface { mock.TestingT Cleanup(func()) -}) *AccountKeeper { +}, +) *AccountKeeper { mock := &AccountKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/post/mocks/mock_bank_keeper.go b/x/feemarket/post/mocks/mock_bank_keeper.go index 9cae7d70..26d98075 100644 --- a/x/feemarket/post/mocks/mock_bank_keeper.go +++ b/x/feemarket/post/mocks/mock_bank_keeper.go @@ -67,7 +67,8 @@ func (_m *BankKeeper) SendCoinsFromAccountToModule(ctx types.Context, senderAddr func NewBankKeeper(t interface { mock.TestingT Cleanup(func()) -}) *BankKeeper { +}, +) *BankKeeper { mock := &BankKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/post/mocks/mock_feegrant_keeper.go b/x/feemarket/post/mocks/mock_feegrant_keeper.go index ddff891c..aefc832a 100644 --- a/x/feemarket/post/mocks/mock_feegrant_keeper.go +++ b/x/feemarket/post/mocks/mock_feegrant_keeper.go @@ -32,7 +32,8 @@ func (_m *FeeGrantKeeper) UseGrantedFees(ctx types.Context, granter types.AccAdd func NewFeeGrantKeeper(t interface { mock.TestingT Cleanup(func()) -}) *FeeGrantKeeper { +}, +) *FeeGrantKeeper { mock := &FeeGrantKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/post/mocks/mock_feemarket_keeper.go b/x/feemarket/post/mocks/mock_feemarket_keeper.go index 4a2acec4..4d53c56d 100644 --- a/x/feemarket/post/mocks/mock_feemarket_keeper.go +++ b/x/feemarket/post/mocks/mock_feemarket_keeper.go @@ -135,7 +135,8 @@ func (_m *FeeMarketKeeper) SetState(ctx cosmos_sdktypes.Context, state types.Sta func NewFeeMarketKeeper(t interface { mock.TestingT Cleanup(func()) -}) *FeeMarketKeeper { +}, +) *FeeMarketKeeper { mock := &FeeMarketKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/types/resolver.go b/x/feemarket/types/resolver.go index c0394cf8..f4d6b62b 100644 --- a/x/feemarket/types/resolver.go +++ b/x/feemarket/types/resolver.go @@ -12,17 +12,17 @@ type DenomResolver interface { ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) } -// TestDenomResolver is a test implementation of the DenomResolver interface. It returns "1atom" for all coins that are not the baseDenom. +// TestDenomResolver is a test implementation of the DenomResolver interface. It returns "feeCoin.Amount baseDenom" for all coins that are not the baseDenom. // NOTE: DO NOT USE THIS IN PRODUCTION type TestDenomResolver struct{} -// ConvertToBaseToken returns "1000000baseDenom" for all coins that are not the baseDenom. -func (r *TestDenomResolver) ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) { +// ConvertToBaseToken returns "feeCoin.Amount baseDenom" for all coins that are not the baseDenom. +func (r *TestDenomResolver) ConvertToBaseToken(_ sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) { if feeCoin.Denom == baseDenom { return feeCoin, nil } - return sdk.NewCoin(baseDenom, sdk.NewInt(1_000_000)), nil + return sdk.NewCoin(baseDenom, feeCoin.Amount), nil } // ErrorDenomResolver is a test implementation of the DenomResolver interface. It returns an error for all coins that are not the baseDenom. @@ -30,7 +30,7 @@ func (r *TestDenomResolver) ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin type ErrorDenomResolver struct{} // ConvertToBaseToken returns an error for all coins that are not the baseDenom. -func (r *ErrorDenomResolver) ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) { +func (r *ErrorDenomResolver) ConvertToBaseToken(_ sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) { if feeCoin.Denom == baseDenom { return feeCoin, nil } From a66bb1ffa356a2c8e8d0454f0f1448504c633226 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Tue, 9 Jan 2024 12:53:36 -0500 Subject: [PATCH 10/26] format --- tests/app/app.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/app/app.go b/tests/app/app.go index cc665980..ab3de821 100644 --- a/tests/app/app.go +++ b/tests/app/app.go @@ -8,8 +8,6 @@ import ( "path/filepath" "reflect" - feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" - "cosmossdk.io/depinject" dbm "github.com/cometbft/cometbft-db" "github.com/cometbft/cometbft/libs/log" @@ -68,6 +66,7 @@ import ( feemarketmodule "github.com/skip-mev/feemarket/x/feemarket" feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" ) const ( From eb1bcfdbeb886604c510a95c48761fba3d7ada71 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Fri, 12 Jan 2024 16:00:56 -0500 Subject: [PATCH 11/26] fix --- x/feemarket/ante/fee.go | 41 +++++++++++++++++++++++++++-------- x/feemarket/keeper/keeper.go | 6 ++--- x/feemarket/types/resolver.go | 22 +++++++++---------- 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/x/feemarket/ante/fee.go b/x/feemarket/ante/fee.go index e20e87f5..8fc2aaa3 100644 --- a/x/feemarket/ante/fee.go +++ b/x/feemarket/ante/fee.go @@ -85,20 +85,28 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula // CheckTxFee implements the logic for the fee market to check if a Tx has provided sufficient // fees given the current state of the fee market. Returns an error if insufficient fees. -func CheckTxFee(ctx sdk.Context, minFee sdk.Coin, feeTx sdk.FeeTx, isCheck bool, resolver feemarkettypes.DenomResolver) (feeCoin sdk.Coin, tip sdk.Coin, err error) { +func CheckTxFee(ctx sdk.Context, minFee sdk.Coin, feeTx sdk.FeeTx, isCheck bool, resolver feemarkettypes.DenomResolver) (payCoin sdk.Coin, tip sdk.Coin, err error) { minFeesDecCoin := sdk.NewDecCoinFromCoin(minFee) - feeCoin = feeTx.GetFee()[0] + if len(feeTx.GetFee()) != 1 { + return sdk.Coin{}, sdk.Coin{}, feemarkettypes.ErrTooManyFeeCoins + } - feeCoin, err = resolver.ConvertToBaseToken(ctx, feeCoin, minFee.Denom) - if err != nil { - return sdk.Coin{}, sdk.Coin{}, err + feeCoin := feeTx.GetFee()[0] + coinWithBaseDenom := feeCoin + if feeCoin.Denom != minFee.Denom { + coinWithBaseDenom, err = resolver.ConvertToDenom(ctx, feeCoin, minFee.Denom) + if err != nil { + return sdk.Coin{}, sdk.Coin{}, err + } } // Ensure that the provided fees meet the minimum minGasPrice := minFeesDecCoin if !minGasPrice.IsZero() { - var requiredFee sdk.Coin - var consumedFee sdk.Coin + var ( + requiredFee sdk.Coin + consumedFee sdk.Coin + ) // Determine the required fees by multiplying each required minimum gas // price by the gas, where fee = ceil(minGasPrice * gas). @@ -111,16 +119,31 @@ func CheckTxFee(ctx sdk.Context, minFee sdk.Coin, feeTx sdk.FeeTx, isCheck bool, consumedFee = sdk.NewCoin(minGasPrice.Denom, consumedFeeAmount.Ceil().RoundInt()) requiredFee = sdk.NewCoin(minGasPrice.Denom, limitFee.Ceil().RoundInt()) - if feeCoin.Denom != requiredFee.Denom || !feeCoin.IsGTE(requiredFee) { + if coinWithBaseDenom.Denom != requiredFee.Denom || !coinWithBaseDenom.IsGTE(requiredFee) { return sdk.Coin{}, sdk.Coin{}, sdkerrors.ErrInsufficientFee.Wrapf( "got: %s required: %s, minGasPrice: %s, gas: %d", - feeCoin, + coinWithBaseDenom, requiredFee, minGasPrice, gasConsumed, ) } + // convert back to given denom is not base denom + if feeCoin.Denom != requiredFee.Denom { + requiredFee, err = resolver.ConvertToDenom(ctx, requiredFee, feeCoin.Denom) + if err != nil { + return sdk.Coin{}, sdk.Coin{}, err + } + + if !isCheck { + consumedFee, err = resolver.ConvertToDenom(ctx, consumedFee, feeCoin.Denom) + if err != nil { + return sdk.Coin{}, sdk.Coin{}, err + } + } + } + if isCheck { // set fee coins to be required amount if checking feeCoin = requiredFee diff --git a/x/feemarket/keeper/keeper.go b/x/feemarket/keeper/keeper.go index 6ba5923f..346f914e 100644 --- a/x/feemarket/keeper/keeper.go +++ b/x/feemarket/keeper/keeper.go @@ -56,13 +56,13 @@ func (k *Keeper) GetAuthority() string { return k.authority } -// ResolveToBaseDenom converts the given fee coin to the given base denomination. -func (k *Keeper) ResolveToBaseDenom(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) { +// ResolveToBaseDenom converts the given coin to the given denomination. +func (k *Keeper) ResolveToBaseDenom(ctx sdk.Context, coin sdk.Coin, denom string) (sdk.Coin, error) { if k.resolver == nil { return sdk.Coin{}, types.ErrResolverNotSet } - return k.resolver.ConvertToBaseToken(ctx, feeCoin, baseDenom) + return k.resolver.ConvertToDenom(ctx, coin, denom) } // SetDenomResolver sets the keeper's denom resolver. diff --git a/x/feemarket/types/resolver.go b/x/feemarket/types/resolver.go index f4d6b62b..d9e22ef9 100644 --- a/x/feemarket/types/resolver.go +++ b/x/feemarket/types/resolver.go @@ -8,31 +8,31 @@ import ( // DenomResolver is an interface to convert a given token to the feemarket's base token. type DenomResolver interface { - // ConvertToBaseToken converts feeCoin into the equivalent amount of the token denominated in baseDenom. - ConvertToBaseToken(ctx sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) + // ConvertToDenom converts coin into the equivalent amount of the token denominated in denom. + ConvertToDenom(ctx sdk.Context, coin sdk.Coin, denom string) (sdk.Coin, error) } // TestDenomResolver is a test implementation of the DenomResolver interface. It returns "feeCoin.Amount baseDenom" for all coins that are not the baseDenom. // NOTE: DO NOT USE THIS IN PRODUCTION type TestDenomResolver struct{} -// ConvertToBaseToken returns "feeCoin.Amount baseDenom" for all coins that are not the baseDenom. -func (r *TestDenomResolver) ConvertToBaseToken(_ sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) { - if feeCoin.Denom == baseDenom { - return feeCoin, nil +// ConvertToDenom returns "coin.Amount denom" for all coins that are not the denom. +func (r *TestDenomResolver) ConvertToDenom(_ sdk.Context, coin sdk.Coin, denom string) (sdk.Coin, error) { + if coin.Denom == denom { + return coin, nil } - return sdk.NewCoin(baseDenom, feeCoin.Amount), nil + return sdk.NewCoin(denom, coin.Amount), nil } // ErrorDenomResolver is a test implementation of the DenomResolver interface. It returns an error for all coins that are not the baseDenom. // NOTE: DO NOT USE THIS IN PRODUCTION type ErrorDenomResolver struct{} -// ConvertToBaseToken returns an error for all coins that are not the baseDenom. -func (r *ErrorDenomResolver) ConvertToBaseToken(_ sdk.Context, feeCoin sdk.Coin, baseDenom string) (sdk.Coin, error) { - if feeCoin.Denom == baseDenom { - return feeCoin, nil +// ConvertToDenom returns an error for all coins that are not the denom. +func (r *ErrorDenomResolver) ConvertToDenom(_ sdk.Context, coin sdk.Coin, denom string) (sdk.Coin, error) { + if coin.Denom == denom { + return coin, nil } return sdk.Coin{}, fmt.Errorf("error resolving denom") From b5b187ac5019d1080d11d6bc443d0bdf63f32266 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Mon, 13 May 2024 12:30:43 -0400 Subject: [PATCH 12/26] gen --- x/feemarket/ante/fee_test.go | 3 +- x/feemarket/ante/mocks/mock_account_keeper.go | 3 +- x/feemarket/ante/mocks/mock_bank_keeper.go | 3 +- .../ante/mocks/mock_feegrant_keeper.go | 3 +- .../ante/mocks/mock_feemarket_keeper.go | 31 +------------- x/feemarket/post/fee_test.go | 3 +- x/feemarket/post/mocks/mock_account_keeper.go | 22 +++++++++- x/feemarket/post/mocks/mock_bank_keeper.go | 14 ++++++- .../post/mocks/mock_feegrant_keeper.go | 6 ++- .../post/mocks/mock_feemarket_keeper.go | 40 +++++++++++++++---- .../types/mocks/mock_account_keeper.go | 3 +- 11 files changed, 86 insertions(+), 45 deletions(-) diff --git a/x/feemarket/ante/fee_test.go b/x/feemarket/ante/fee_test.go index b99317e3..5a66206c 100644 --- a/x/feemarket/ante/fee_test.go +++ b/x/feemarket/ante/fee_test.go @@ -1,10 +1,11 @@ package ante_test import ( - "cosmossdk.io/math" "fmt" "testing" + "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" diff --git a/x/feemarket/ante/mocks/mock_account_keeper.go b/x/feemarket/ante/mocks/mock_account_keeper.go index 36ccd8cb..9325e1b0 100644 --- a/x/feemarket/ante/mocks/mock_account_keeper.go +++ b/x/feemarket/ante/mocks/mock_account_keeper.go @@ -122,7 +122,8 @@ func (_m *AccountKeeper) SetAccount(ctx types.Context, acc authtypes.AccountI) { func NewAccountKeeper(t interface { mock.TestingT Cleanup(func()) -}) *AccountKeeper { +}, +) *AccountKeeper { mock := &AccountKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/ante/mocks/mock_bank_keeper.go b/x/feemarket/ante/mocks/mock_bank_keeper.go index fa56f45e..0c6734a6 100644 --- a/x/feemarket/ante/mocks/mock_bank_keeper.go +++ b/x/feemarket/ante/mocks/mock_bank_keeper.go @@ -78,7 +78,8 @@ func (_m *BankKeeper) SendCoinsFromAccountToModule(ctx types.Context, senderAddr func NewBankKeeper(t interface { mock.TestingT Cleanup(func()) -}) *BankKeeper { +}, +) *BankKeeper { mock := &BankKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/ante/mocks/mock_feegrant_keeper.go b/x/feemarket/ante/mocks/mock_feegrant_keeper.go index ae048613..b4c64f84 100644 --- a/x/feemarket/ante/mocks/mock_feegrant_keeper.go +++ b/x/feemarket/ante/mocks/mock_feegrant_keeper.go @@ -35,7 +35,8 @@ func (_m *FeeGrantKeeper) UseGrantedFees(ctx types.Context, granter types.AccAdd func NewFeeGrantKeeper(t interface { mock.TestingT Cleanup(func()) -}) *FeeGrantKeeper { +}, +) *FeeGrantKeeper { mock := &FeeGrantKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/ante/mocks/mock_feemarket_keeper.go b/x/feemarket/ante/mocks/mock_feemarket_keeper.go index 99e8b0b1..7d219a1c 100644 --- a/x/feemarket/ante/mocks/mock_feemarket_keeper.go +++ b/x/feemarket/ante/mocks/mock_feemarket_keeper.go @@ -34,34 +34,6 @@ func (_m *FeeMarketKeeper) GetDenomResolver() types.DenomResolver { return r0 } -// GetMinGasPrice provides a mock function with given fields: ctx -func (_m *FeeMarketKeeper) GetMinGasPrice(ctx cosmos_sdktypes.Context) (cosmos_sdktypes.Coin, error) { - ret := _m.Called(ctx) - - if len(ret) == 0 { - panic("no return value specified for GetMinGasPrice") - } - - var r0 cosmos_sdktypes.Coin - var r1 error - if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) (cosmos_sdktypes.Coin, error)); ok { - return rf(ctx) - } - if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) cosmos_sdktypes.Coin); ok { - r0 = rf(ctx) - } else { - r0 = ret.Get(0).(cosmos_sdktypes.Coin) - } - - if rf, ok := ret.Get(1).(func(cosmos_sdktypes.Context) error); ok { - r1 = rf(ctx) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // GetMinGasPrices provides a mock function with given fields: ctx func (_m *FeeMarketKeeper) GetMinGasPrices(ctx cosmos_sdktypes.Context) (cosmos_sdktypes.DecCoins, error) { ret := _m.Called(ctx) @@ -189,7 +161,8 @@ func (_m *FeeMarketKeeper) SetState(ctx cosmos_sdktypes.Context, state types.Sta func NewFeeMarketKeeper(t interface { mock.TestingT Cleanup(func()) -}) *FeeMarketKeeper { +}, +) *FeeMarketKeeper { mock := &FeeMarketKeeper{} mock.Mock.Test(t) diff --git a/x/feemarket/post/fee_test.go b/x/feemarket/post/fee_test.go index c3b29059..14606d87 100644 --- a/x/feemarket/post/fee_test.go +++ b/x/feemarket/post/fee_test.go @@ -1,10 +1,11 @@ package post_test import ( - "cosmossdk.io/math" "fmt" "testing" + "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" diff --git a/x/feemarket/post/mocks/mock_account_keeper.go b/x/feemarket/post/mocks/mock_account_keeper.go index fb833d3b..9325e1b0 100644 --- a/x/feemarket/post/mocks/mock_account_keeper.go +++ b/x/feemarket/post/mocks/mock_account_keeper.go @@ -1,4 +1,4 @@ -// Code generated by mockery v0.0.0-dev. DO NOT EDIT. +// Code generated by mockery v2.43.0. DO NOT EDIT. package mocks @@ -18,6 +18,10 @@ type AccountKeeper struct { func (_m *AccountKeeper) GetAccount(ctx types.Context, addr types.AccAddress) authtypes.AccountI { ret := _m.Called(ctx, addr) + if len(ret) == 0 { + panic("no return value specified for GetAccount") + } + var r0 authtypes.AccountI if rf, ok := ret.Get(0).(func(types.Context, types.AccAddress) authtypes.AccountI); ok { r0 = rf(ctx, addr) @@ -34,6 +38,10 @@ func (_m *AccountKeeper) GetAccount(ctx types.Context, addr types.AccAddress) au func (_m *AccountKeeper) GetModuleAccount(ctx types.Context, name string) authtypes.ModuleAccountI { ret := _m.Called(ctx, name) + if len(ret) == 0 { + panic("no return value specified for GetModuleAccount") + } + var r0 authtypes.ModuleAccountI if rf, ok := ret.Get(0).(func(types.Context, string) authtypes.ModuleAccountI); ok { r0 = rf(ctx, name) @@ -50,6 +58,10 @@ func (_m *AccountKeeper) GetModuleAccount(ctx types.Context, name string) authty func (_m *AccountKeeper) GetModuleAddress(moduleName string) types.AccAddress { ret := _m.Called(moduleName) + if len(ret) == 0 { + panic("no return value specified for GetModuleAddress") + } + var r0 types.AccAddress if rf, ok := ret.Get(0).(func(string) types.AccAddress); ok { r0 = rf(moduleName) @@ -66,6 +78,10 @@ func (_m *AccountKeeper) GetModuleAddress(moduleName string) types.AccAddress { func (_m *AccountKeeper) GetParams(ctx types.Context) authtypes.Params { ret := _m.Called(ctx) + if len(ret) == 0 { + panic("no return value specified for GetParams") + } + var r0 authtypes.Params if rf, ok := ret.Get(0).(func(types.Context) authtypes.Params); ok { r0 = rf(ctx) @@ -80,6 +96,10 @@ func (_m *AccountKeeper) GetParams(ctx types.Context) authtypes.Params { func (_m *AccountKeeper) NewAccountWithAddress(ctx types.Context, addr types.AccAddress) authtypes.AccountI { ret := _m.Called(ctx, addr) + if len(ret) == 0 { + panic("no return value specified for NewAccountWithAddress") + } + var r0 authtypes.AccountI if rf, ok := ret.Get(0).(func(types.Context, types.AccAddress) authtypes.AccountI); ok { r0 = rf(ctx, addr) diff --git a/x/feemarket/post/mocks/mock_bank_keeper.go b/x/feemarket/post/mocks/mock_bank_keeper.go index 26d98075..9d41b448 100644 --- a/x/feemarket/post/mocks/mock_bank_keeper.go +++ b/x/feemarket/post/mocks/mock_bank_keeper.go @@ -1,4 +1,4 @@ -// Code generated by mockery v0.0.0-dev. DO NOT EDIT. +// Code generated by mockery v2.43.0. DO NOT EDIT. package mocks @@ -24,6 +24,10 @@ func (_m *BankKeeper) IsSendEnabledCoins(ctx types.Context, coins ...types.Coin) _ca = append(_ca, _va...) ret := _m.Called(_ca...) + if len(ret) == 0 { + panic("no return value specified for IsSendEnabledCoins") + } + var r0 error if rf, ok := ret.Get(0).(func(types.Context, ...types.Coin) error); ok { r0 = rf(ctx, coins...) @@ -38,6 +42,10 @@ func (_m *BankKeeper) IsSendEnabledCoins(ctx types.Context, coins ...types.Coin) func (_m *BankKeeper) SendCoins(ctx types.Context, from types.AccAddress, to types.AccAddress, amt types.Coins) error { ret := _m.Called(ctx, from, to, amt) + if len(ret) == 0 { + panic("no return value specified for SendCoins") + } + var r0 error if rf, ok := ret.Get(0).(func(types.Context, types.AccAddress, types.AccAddress, types.Coins) error); ok { r0 = rf(ctx, from, to, amt) @@ -52,6 +60,10 @@ func (_m *BankKeeper) SendCoins(ctx types.Context, from types.AccAddress, to typ func (_m *BankKeeper) SendCoinsFromAccountToModule(ctx types.Context, senderAddr types.AccAddress, recipientModule string, amt types.Coins) error { ret := _m.Called(ctx, senderAddr, recipientModule, amt) + if len(ret) == 0 { + panic("no return value specified for SendCoinsFromAccountToModule") + } + var r0 error if rf, ok := ret.Get(0).(func(types.Context, types.AccAddress, string, types.Coins) error); ok { r0 = rf(ctx, senderAddr, recipientModule, amt) diff --git a/x/feemarket/post/mocks/mock_feegrant_keeper.go b/x/feemarket/post/mocks/mock_feegrant_keeper.go index aefc832a..afac1e05 100644 --- a/x/feemarket/post/mocks/mock_feegrant_keeper.go +++ b/x/feemarket/post/mocks/mock_feegrant_keeper.go @@ -1,4 +1,4 @@ -// Code generated by mockery v0.0.0-dev. DO NOT EDIT. +// Code generated by mockery v2.43.0. DO NOT EDIT. package mocks @@ -17,6 +17,10 @@ type FeeGrantKeeper struct { func (_m *FeeGrantKeeper) UseGrantedFees(ctx types.Context, granter types.AccAddress, grantee types.AccAddress, fee types.Coins, msgs []types.Msg) error { ret := _m.Called(ctx, granter, grantee, fee, msgs) + if len(ret) == 0 { + panic("no return value specified for UseGrantedFees") + } + var r0 error if rf, ok := ret.Get(0).(func(types.Context, types.AccAddress, types.AccAddress, types.Coins, []types.Msg) error); ok { r0 = rf(ctx, granter, grantee, fee, msgs) diff --git a/x/feemarket/post/mocks/mock_feemarket_keeper.go b/x/feemarket/post/mocks/mock_feemarket_keeper.go index 4d53c56d..7d219a1c 100644 --- a/x/feemarket/post/mocks/mock_feemarket_keeper.go +++ b/x/feemarket/post/mocks/mock_feemarket_keeper.go @@ -1,4 +1,4 @@ -// Code generated by mockery v0.0.0-dev. DO NOT EDIT. +// Code generated by mockery v2.43.0. DO NOT EDIT. package mocks @@ -18,6 +18,10 @@ type FeeMarketKeeper struct { func (_m *FeeMarketKeeper) GetDenomResolver() types.DenomResolver { ret := _m.Called() + if len(ret) == 0 { + panic("no return value specified for GetDenomResolver") + } + var r0 types.DenomResolver if rf, ok := ret.Get(0).(func() types.DenomResolver); ok { r0 = rf() @@ -30,19 +34,25 @@ func (_m *FeeMarketKeeper) GetDenomResolver() types.DenomResolver { return r0 } -// GetMinGasPrice provides a mock function with given fields: ctx -func (_m *FeeMarketKeeper) GetMinGasPrice(ctx cosmos_sdktypes.Context) (cosmos_sdktypes.Coin, error) { +// GetMinGasPrices provides a mock function with given fields: ctx +func (_m *FeeMarketKeeper) GetMinGasPrices(ctx cosmos_sdktypes.Context) (cosmos_sdktypes.DecCoins, error) { ret := _m.Called(ctx) - var r0 cosmos_sdktypes.Coin + if len(ret) == 0 { + panic("no return value specified for GetMinGasPrices") + } + + var r0 cosmos_sdktypes.DecCoins var r1 error - if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) (cosmos_sdktypes.Coin, error)); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) (cosmos_sdktypes.DecCoins, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) cosmos_sdktypes.Coin); ok { + if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) cosmos_sdktypes.DecCoins); ok { r0 = rf(ctx) } else { - r0 = ret.Get(0).(cosmos_sdktypes.Coin) + if ret.Get(0) != nil { + r0 = ret.Get(0).(cosmos_sdktypes.DecCoins) + } } if rf, ok := ret.Get(1).(func(cosmos_sdktypes.Context) error); ok { @@ -58,6 +68,10 @@ func (_m *FeeMarketKeeper) GetMinGasPrice(ctx cosmos_sdktypes.Context) (cosmos_s func (_m *FeeMarketKeeper) GetParams(ctx cosmos_sdktypes.Context) (types.Params, error) { ret := _m.Called(ctx) + if len(ret) == 0 { + panic("no return value specified for GetParams") + } + var r0 types.Params var r1 error if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) (types.Params, error)); ok { @@ -82,6 +96,10 @@ func (_m *FeeMarketKeeper) GetParams(ctx cosmos_sdktypes.Context) (types.Params, func (_m *FeeMarketKeeper) GetState(ctx cosmos_sdktypes.Context) (types.State, error) { ret := _m.Called(ctx) + if len(ret) == 0 { + panic("no return value specified for GetState") + } + var r0 types.State var r1 error if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context) (types.State, error)); ok { @@ -106,6 +124,10 @@ func (_m *FeeMarketKeeper) GetState(ctx cosmos_sdktypes.Context) (types.State, e func (_m *FeeMarketKeeper) SetParams(ctx cosmos_sdktypes.Context, params types.Params) error { ret := _m.Called(ctx, params) + if len(ret) == 0 { + panic("no return value specified for SetParams") + } + var r0 error if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context, types.Params) error); ok { r0 = rf(ctx, params) @@ -120,6 +142,10 @@ func (_m *FeeMarketKeeper) SetParams(ctx cosmos_sdktypes.Context, params types.P func (_m *FeeMarketKeeper) SetState(ctx cosmos_sdktypes.Context, state types.State) error { ret := _m.Called(ctx, state) + if len(ret) == 0 { + panic("no return value specified for SetState") + } + var r0 error if rf, ok := ret.Get(0).(func(cosmos_sdktypes.Context, types.State) error); ok { r0 = rf(ctx, state) diff --git a/x/feemarket/types/mocks/mock_account_keeper.go b/x/feemarket/types/mocks/mock_account_keeper.go index ef92bd53..0d99089b 100644 --- a/x/feemarket/types/mocks/mock_account_keeper.go +++ b/x/feemarket/types/mocks/mock_account_keeper.go @@ -80,7 +80,8 @@ func (_m *AccountKeeper) GetModuleAddress(name string) types.AccAddress { func NewAccountKeeper(t interface { mock.TestingT Cleanup(func()) -}) *AccountKeeper { +}, +) *AccountKeeper { mock := &AccountKeeper{} mock.Mock.Test(t) From b2e327136451977bdf94517496ba3c7694d4df8e Mon Sep 17 00:00:00 2001 From: aljo242 Date: Mon, 13 May 2024 12:35:37 -0400 Subject: [PATCH 13/26] update : --- .github/workflows/ictest.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/test.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ictest.yml b/.github/workflows/ictest.yml index 5545cc88..c5a7c23e 100644 --- a/.github/workflows/ictest.yml +++ b/.github/workflows/ictest.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v4 with: - go-version: 1.21.0 + go-version: 1.22.3 cache: true cache-dependency-path: go.sum - uses: technote-space/get-diff-action@v6.1.2 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4e2afab6..d12397aa 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -18,7 +18,7 @@ jobs: steps: - uses: actions/setup-go@v4 with: - go-version: 1.21.4 + go-version: 1.22.3 - uses: actions/checkout@v4 - name: golangci-lint uses: golangci/golangci-lint-action@v3 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 56f5d932..81e3c749 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,7 +20,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v4 with: - go-version: 1.21.4 + go-version: 1.22.3 cache: true cache-dependency-path: go.sum - uses: technote-space/get-diff-action@v6.1.2 @@ -40,7 +40,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v4 with: - go-version: 1.21.4 + go-version: 1.22.3 cache: true cache-dependency-path: go.sum - uses: technote-space/get-diff-action@v6.1.2 From 52552b9be3e74a1c7cd6d5a7dcb3355a393f5c38 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Mon, 13 May 2024 12:39:12 -0400 Subject: [PATCH 14/26] fix --- go.mod | 192 +++++++------- go.sum | 413 +++++++++++++++--------------- x/feemarket/client/cli/query.go | 6 +- x/feemarket/post/feegrant_test.go | 2 +- 4 files changed, 316 insertions(+), 297 deletions(-) diff --git a/go.mod b/go.mod index b97779ca..09331704 100644 --- a/go.mod +++ b/go.mod @@ -15,46 +15,47 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.2 github.com/cosmos/cosmos-sdk v0.47.6 github.com/cosmos/gogoproto v1.4.11 - github.com/golang/protobuf v1.5.3 - github.com/golangci/golangci-lint v1.55.3-0.20231203192459-84442f26446b + github.com/golang/protobuf v1.5.4 + github.com/golangci/golangci-lint v1.58.1 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/skip-mev/chaintestutil v0.0.0-20231207155412-975710cc9051 github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.17.0 - github.com/stretchr/testify v1.8.4 - golang.org/x/tools v0.16.0 - google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 - google.golang.org/grpc v1.59.0 - google.golang.org/protobuf v1.31.0 - mvdan.cc/gofumpt v0.5.0 + github.com/stretchr/testify v1.9.0 + golang.org/x/tools v0.21.0 + google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de + google.golang.org/grpc v1.63.2 + google.golang.org/protobuf v1.34.1 + mvdan.cc/gofumpt v0.6.0 pgregory.net/rapid v1.1.0 ) require ( 4d63.com/gocheckcompilerdirectives v1.2.1 // indirect 4d63.com/gochecknoglobals v0.2.1 // indirect - cloud.google.com/go v0.110.9 // indirect - cloud.google.com/go/compute v1.23.2 // indirect + cloud.google.com/go v0.112.0 // indirect + cloud.google.com/go/compute v1.24.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.4 // indirect - cloud.google.com/go/storage v1.30.1 // indirect + cloud.google.com/go/iam v1.1.6 // indirect + cloud.google.com/go/storage v1.36.0 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect - github.com/4meepo/tagalign v1.3.3 // indirect + github.com/4meepo/tagalign v1.3.4 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect - github.com/Abirdcfly/dupword v0.0.13 // indirect - github.com/Antonboom/errname v0.1.12 // indirect - github.com/Antonboom/nilnil v0.1.7 // indirect - github.com/Antonboom/testifylint v1.0.2 // indirect + github.com/Abirdcfly/dupword v0.0.14 // indirect + github.com/Antonboom/errname v0.1.13 // indirect + github.com/Antonboom/nilnil v0.1.8 // indirect + github.com/Antonboom/testifylint v1.2.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect + github.com/Crocmagnon/fatcontext v0.2.2 // indirect github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 // indirect - github.com/GaijinEntertainment/go-exhaustruct/v3 v3.1.0 // indirect - github.com/Masterminds/semver v1.5.0 // indirect + github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0 // indirect + github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/OpenPeeDeeP/depguard/v2 v2.2.0 // indirect - github.com/alecthomas/go-check-sumtype v0.1.3 // indirect - github.com/alexkohler/nakedret/v2 v2.0.2 // indirect + github.com/alecthomas/go-check-sumtype v0.1.4 // indirect + github.com/alexkohler/nakedret/v2 v2.0.4 // indirect github.com/alexkohler/prealloc v1.0.0 // indirect github.com/alingse/asasalint v0.0.11 // indirect github.com/armon/go-metrics v0.4.1 // indirect @@ -66,20 +67,21 @@ require ( github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/bkielbasa/cyclop v1.2.1 // indirect github.com/blizzy78/varnamelen v0.8.0 // indirect - github.com/bombsimon/wsl/v4 v4.2.0 // indirect + github.com/bombsimon/wsl/v4 v4.2.1 // indirect github.com/breml/bidichk v0.2.7 // indirect github.com/breml/errchkjson v0.3.6 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/butuzov/ireturn v0.2.2 // indirect - github.com/butuzov/mirror v1.1.0 // indirect - github.com/catenacyber/perfsprint v0.4.0 // indirect - github.com/ccojocar/zxcvbn-go v1.0.1 // indirect + github.com/butuzov/ireturn v0.3.0 // indirect + github.com/butuzov/mirror v1.2.0 // indirect + github.com/catenacyber/perfsprint v0.7.1 // indirect + github.com/ccojocar/zxcvbn-go v1.0.2 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/charithe/durationcheck v0.0.10 // indirect github.com/chavacava/garif v0.1.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/ckaznocha/intrange v0.1.2 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/cockroachdb/errors v1.11.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect @@ -94,63 +96,63 @@ require ( github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.3.2 // indirect github.com/curioswitch/go-reassign v0.2.0 // indirect - github.com/daixiang0/gci v0.11.2 // indirect + github.com/daixiang0/gci v0.13.4 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/denis-tingaikin/go-header v0.4.3 // indirect + github.com/denis-tingaikin/go-header v0.5.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect - github.com/esimonov/ifshort v1.0.4 // indirect - github.com/ettle/strcase v0.1.1 // indirect + github.com/ettle/strcase v0.2.0 // indirect github.com/fatih/color v1.16.0 // indirect github.com/fatih/structtag v1.2.0 // indirect - github.com/felixge/httpsnoop v1.0.2 // indirect - github.com/firefart/nonamedreturns v1.0.4 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/firefart/nonamedreturns v1.0.5 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/fzipp/gocyclo v0.6.0 // indirect github.com/getsentry/sentry-go v0.25.0 // indirect - github.com/ghostiam/protogetter v0.3.3 // indirect - github.com/go-critic/go-critic v0.9.0 // indirect + github.com/ghostiam/protogetter v0.3.6 // indirect + github.com/go-critic/go-critic v0.11.3 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/go-toolsmith/astcast v1.1.0 // indirect github.com/go-toolsmith/astcopy v1.1.0 // indirect - github.com/go-toolsmith/astequal v1.1.0 // indirect + github.com/go-toolsmith/astequal v1.2.0 // indirect github.com/go-toolsmith/astfmt v1.1.0 // indirect github.com/go-toolsmith/astp v1.1.0 // indirect github.com/go-toolsmith/strparse v1.1.0 // indirect github.com/go-toolsmith/typep v1.1.0 // indirect + github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect github.com/go-xmlfmt/xmlfmt v1.1.2 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/glog v1.1.2 // indirect + github.com/golang/glog v1.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 // indirect github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect - github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe // indirect github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e // indirect - github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 // indirect - github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca // indirect - github.com/golangci/misspell v0.4.1 // indirect - github.com/golangci/revgrep v0.5.2 // indirect - github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 // indirect + github.com/golangci/misspell v0.5.1 // indirect + github.com/golangci/modinfo v0.3.4 // indirect + github.com/golangci/plugin-module-register v0.1.1 // indirect + github.com/golangci/revgrep v0.5.3 // indirect + github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed // indirect github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.7 // indirect - github.com/google/uuid v1.3.1 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gordonklaus/ineffassign v0.1.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect @@ -164,11 +166,9 @@ require ( github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.7.1 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect @@ -178,29 +178,31 @@ require ( github.com/huandu/skiplist v1.2.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jgautheron/goconst v1.7.0 // indirect + github.com/jgautheron/goconst v1.7.1 // indirect github.com/jingyugao/rowserrcheck v1.1.1 // indirect github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af // indirect + github.com/jjti/go-spancheck v0.6.1 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/julz/importas v0.1.0 // indirect - github.com/kisielk/errcheck v1.6.3 // indirect - github.com/kisielk/gotool v1.0.0 // indirect - github.com/kkHAIKE/contextcheck v1.1.4 // indirect + github.com/karamaru-alpha/copyloopvar v1.1.0 // indirect + github.com/kisielk/errcheck v1.7.0 // indirect + github.com/kkHAIKE/contextcheck v1.1.5 // indirect github.com/klauspost/compress v1.17.2 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/kulti/thelper v0.6.3 // indirect - github.com/kunwardeep/paralleltest v1.0.8 // indirect + github.com/kunwardeep/paralleltest v1.0.10 // indirect github.com/kyoh86/exportloopref v0.1.11 // indirect - github.com/ldez/gomoddirectives v0.2.3 // indirect + github.com/lasiar/canonicalheader v1.0.6 // indirect + github.com/ldez/gomoddirectives v0.2.4 // indirect github.com/ldez/tagliatelle v0.5.0 // indirect - github.com/leonklingele/grouper v1.1.1 // indirect + github.com/leonklingele/grouper v1.1.2 // indirect github.com/lib/pq v1.10.9 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/linxGnu/grocksdb v1.8.4 // indirect github.com/lufeee/execinquery v1.2.1 // indirect - github.com/macabu/inamedparam v0.1.2 // indirect + github.com/macabu/inamedparam v0.1.3 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/maratori/testableexamples v1.0.0 // indirect @@ -210,8 +212,7 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.9 // indirect github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect - github.com/mbilski/exhaustivestruct v1.2.0 // indirect - github.com/mgechev/revive v1.3.4 // indirect + github.com/mgechev/revive v1.3.7 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect @@ -222,49 +223,50 @@ require ( github.com/nakabonne/nestif v0.3.1 // indirect github.com/nishanths/exhaustive v0.12.0 // indirect github.com/nishanths/predeclared v0.2.2 // indirect - github.com/nunnatsa/ginkgolinter v0.14.1 // indirect + github.com/nunnatsa/ginkgolinter v0.16.2 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/pelletier/go-toml/v2 v2.1.0 // indirect + github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/polyfloyd/go-errorlint v1.4.6 // indirect + github.com/polyfloyd/go-errorlint v1.5.1 // indirect github.com/prometheus/client_golang v1.17.0 // indirect github.com/prometheus/client_model v0.5.0 // indirect github.com/prometheus/common v0.45.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/quasilyte/go-ruleguard v0.4.0 // indirect + github.com/quasilyte/go-ruleguard v0.4.2 // indirect + github.com/quasilyte/go-ruleguard/dsl v0.3.22 // indirect github.com/quasilyte/gogrep v0.5.0 // indirect github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect github.com/rakyll/statik v0.1.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rogpeppe/go-internal v1.11.0 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/cors v1.8.3 // indirect github.com/rs/zerolog v1.31.0 // indirect - github.com/ryancurrah/gomodguard v1.3.0 // indirect + github.com/ryancurrah/gomodguard v1.3.2 // indirect github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect github.com/sagikazarmark/locafero v0.3.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/sashamelentyev/interfacebloat v1.1.0 // indirect - github.com/sashamelentyev/usestdlibvars v1.24.0 // indirect - github.com/securego/gosec/v2 v2.18.2 // indirect + github.com/sashamelentyev/usestdlibvars v1.25.0 // indirect + github.com/securego/gosec/v2 v2.19.0 // indirect github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/sivchari/containedctx v1.0.3 // indirect - github.com/sivchari/nosnakecase v1.7.0 // indirect github.com/sivchari/tenv v1.7.1 // indirect github.com/sonatard/noctx v0.0.2 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/sourcegraph/go-diff v0.7.0 // indirect - github.com/spf13/afero v1.10.0 // indirect + github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.5.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect - github.com/stretchr/objx v0.5.0 // indirect + github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c // indirect @@ -274,49 +276,53 @@ require ( github.com/tidwall/btree v1.7.0 // indirect github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 // indirect github.com/timonwong/loggercheck v0.9.4 // indirect - github.com/tomarrell/wrapcheck/v2 v2.8.1 // indirect + github.com/tomarrell/wrapcheck/v2 v2.8.3 // indirect github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/ultraware/funlen v0.1.0 // indirect - github.com/ultraware/whitespace v0.1.0 // indirect + github.com/ultraware/whitespace v0.1.1 // indirect github.com/uudashr/gocognit v1.1.2 // indirect github.com/xen0n/gosmopolitan v1.2.2 // indirect github.com/yagipy/maintidx v1.0.0 // indirect - github.com/yeya24/promlinter v0.2.0 // indirect + github.com/yeya24/promlinter v0.3.0 // indirect github.com/ykadowak/zerologlint v0.1.5 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect - gitlab.com/bosi/decorder v0.4.1 // indirect - go-simpler.org/musttag v0.8.0 // indirect - go-simpler.org/sloglint v0.3.0 // indirect + gitlab.com/bosi/decorder v0.4.2 // indirect + go-simpler.org/musttag v0.12.1 // indirect + go-simpler.org/sloglint v0.6.0 // indirect go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect + go.opentelemetry.io/otel v1.22.0 // indirect + go.opentelemetry.io/otel/metric v1.22.0 // indirect + go.opentelemetry.io/otel/trace v1.22.0 // indirect go.uber.org/atomic v1.10.0 // indirect + go.uber.org/automaxprocs v1.5.3 // indirect go.uber.org/multierr v1.10.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.20.0 // indirect - golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect - golang.org/x/exp/typeparams v0.0.0-20230307190834-24139beb5833 // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.21.0 // indirect - golang.org/x/oauth2 v0.12.0 // indirect - golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.17.0 // indirect - golang.org/x/term v0.17.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.143.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect + golang.org/x/crypto v0.23.0 // indirect + golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect + golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/oauth2 v0.17.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/term v0.20.0 // indirect + golang.org/x/text v0.15.0 // indirect + golang.org/x/time v0.5.0 // indirect + google.golang.org/api v0.162.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect - honnef.co/go/tools v0.4.6 // indirect - mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed // indirect - mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect - mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d // indirect + honnef.co/go/tools v0.4.7 // indirect + mvdan.cc/unparam v0.0.0-20240427195214-063aff900ca1 // indirect nhooyr.io/websocket v1.8.6 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index 3f9b36b0..61d1c402 100644 --- a/go.sum +++ b/go.sum @@ -39,8 +39,8 @@ cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34h cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go v0.110.9 h1:e7ITSqGFFk4rbz/JFIqZh3G4VEHguhAL4BQcFlWtU68= -cloud.google.com/go v0.110.9/go.mod h1:rpxevX/0Lqvlbc88b7Sc1SPNdyK1riNBTUU6JXhYNpM= +cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= +cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= @@ -123,8 +123,8 @@ cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute v1.23.2 h1:nWEMDhgbBkBJjfpVySqU4jgWdc22PLR0o4vEexZHers= -cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns= +cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= +cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= @@ -213,8 +213,8 @@ cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3Q cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= -cloud.google.com/go/iam v1.1.4 h1:K6n/GZHFTtEoKT5aUG3l9diPi0VduZNQ1PfdnpkkIFk= -cloud.google.com/go/iam v1.1.4/go.mod h1:l/rg8l1AaA+VFMho/HYx2Vv6xinPSLMF8qfhRPIZ0L8= +cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= +cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= @@ -355,8 +355,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= -cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storage v1.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= +cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= @@ -413,18 +413,18 @@ cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -github.com/4meepo/tagalign v1.3.3 h1:ZsOxcwGD/jP4U/aw7qeWu58i7dwYemfy5Y+IF1ACoNw= -github.com/4meepo/tagalign v1.3.3/go.mod h1:Q9c1rYMZJc9dPRkbQPpcBNCLEmY2njbAsXhQOZFE2dE= +github.com/4meepo/tagalign v1.3.4 h1:P51VcvBnf04YkHzjfclN6BbsopfJR5rxs1n+5zHt+w8= +github.com/4meepo/tagalign v1.3.4/go.mod h1:M+pnkHH2vG8+qhE5bVc/zeP7HS/j910Fwa9TUSyZVI0= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/Abirdcfly/dupword v0.0.13 h1:SMS17YXypwP000fA7Lr+kfyBQyW14tTT+nRv9ASwUUo= -github.com/Abirdcfly/dupword v0.0.13/go.mod h1:Ut6Ue2KgF/kCOawpW4LnExT+xZLQviJPE4klBPMK/5Y= -github.com/Antonboom/errname v0.1.12 h1:oh9ak2zUtsLp5oaEd/erjB4GPu9w19NyoIskZClDcQY= -github.com/Antonboom/errname v0.1.12/go.mod h1:bK7todrzvlaZoQagP1orKzWXv59X/x0W0Io2XT1Ssro= -github.com/Antonboom/nilnil v0.1.7 h1:ofgL+BA7vlA1K2wNQOsHzLJ2Pw5B5DpWRLdDAVvvTow= -github.com/Antonboom/nilnil v0.1.7/go.mod h1:TP+ScQWVEq0eSIxqU8CbdT5DFWoHp0MbP+KMUO1BKYQ= -github.com/Antonboom/testifylint v1.0.2 h1:WkSc4c6AcYAPrSqj/3MYrewhszk+mnwd07acH1NL9Vw= -github.com/Antonboom/testifylint v1.0.2/go.mod h1:tGEV9t6Th7DHXFVjd8oyLOBbIxXzs4CMEIAkbQ2RuC8= +github.com/Abirdcfly/dupword v0.0.14 h1:3U4ulkc8EUo+CaT105/GJ1BQwtgyj6+VaBVbAX11Ba8= +github.com/Abirdcfly/dupword v0.0.14/go.mod h1:VKDAbxdY8YbKUByLGg8EETzYSuC4crm9WwI6Y3S0cLI= +github.com/Antonboom/errname v0.1.13 h1:JHICqsewj/fNckzrfVSe+T33svwQxmjC+1ntDsHOVvM= +github.com/Antonboom/errname v0.1.13/go.mod h1:uWyefRYRN54lBg6HseYCFhs6Qjcy41Y3Jl/dVhA87Ns= +github.com/Antonboom/nilnil v0.1.8 h1:97QG7xrLq4TBK2U9aFq/I8Mcgz67pwMIiswnTA9gIn0= +github.com/Antonboom/nilnil v0.1.8/go.mod h1:iGe2rYwCq5/Me1khrysB4nwI7swQvjclR8/YRPl5ihQ= +github.com/Antonboom/testifylint v1.2.0 h1:015bxD8zc5iY8QwTp4+RG9I4kIbqwvGX9TrBbb7jGdM= +github.com/Antonboom/testifylint v1.2.0/go.mod h1:rkmEqjqVnHDRNsinyN6fPSLnoajzFwsCcguJgwADBkw= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -432,14 +432,16 @@ github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8 github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/Crocmagnon/fatcontext v0.2.2 h1:OrFlsDdOj9hW/oBEJBNSuH7QWf+E9WPVHw+x52bXVbk= +github.com/Crocmagnon/fatcontext v0.2.2/go.mod h1:WSn/c/+MMNiD8Pri0ahRj0o9jVpeowzavOQplBJw6u0= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v3 v3.1.0 h1:3ZBs7LAezy8gh0uECsA6CGU43FF3zsx5f4eah5FxTMA= -github.com/GaijinEntertainment/go-exhaustruct/v3 v3.1.0/go.mod h1:rZLTje5A9kFBe0pzhpe2TdhRniBF++PRHQuRpR8esVc= +github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0 h1:sATXp1x6/axKxz2Gjxv8MALP0bXaNRfQinEwyfMcx8c= +github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0/go.mod h1:Nl76DrGNJTA1KJ0LePKBw/vznBX1EHbAZX8mwjR82nI= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= +github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= @@ -457,8 +459,8 @@ github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk= github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= -github.com/alecthomas/go-check-sumtype v0.1.3 h1:M+tqMxB68hcgccRXBMVCPI4UJ+QUfdSx0xdbypKCqA8= -github.com/alecthomas/go-check-sumtype v0.1.3/go.mod h1:WyYPfhfkdhyrdaligV6svFopZV8Lqdzn5pyVBaV6jhQ= +github.com/alecthomas/go-check-sumtype v0.1.4 h1:WCvlB3l5Vq5dZQTFmodqL2g68uHiSwwlWcT5a2FGK0c= +github.com/alecthomas/go-check-sumtype v0.1.4/go.mod h1:WyYPfhfkdhyrdaligV6svFopZV8Lqdzn5pyVBaV6jhQ= github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk= github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -466,8 +468,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexkohler/nakedret/v2 v2.0.2 h1:qnXuZNvv3/AxkAb22q/sEsEpcA99YxLFACDtEw9TPxE= -github.com/alexkohler/nakedret/v2 v2.0.2/go.mod h1:2b8Gkk0GsOrqQv/gPWjNLDSKwG8I5moSXG1K4VIBcTQ= +github.com/alexkohler/nakedret/v2 v2.0.4 h1:yZuKmjqGi0pSmjGpOC016LtPJysIL0WEUiaXW5SUnNg= +github.com/alexkohler/nakedret/v2 v2.0.4/go.mod h1:bF5i0zF2Wo2o4X4USt9ntUWve6JbFv02Ff4vlkmS/VU= github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= @@ -507,8 +509,8 @@ github.com/bkielbasa/cyclop v1.2.1 h1:AeF71HZDob1P2/pRm1so9cd1alZnrpyc4q2uP2l0gJ github.com/bkielbasa/cyclop v1.2.1/go.mod h1:K/dT/M0FPAiYjBgQGau7tz+3TMh4FWAEqlMhzFWCrgM= github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bombsimon/wsl/v4 v4.2.0 h1:dKK3o/Hk2aIt6t72CWg02ham2P5lnH9MBSW6cTU9xxU= -github.com/bombsimon/wsl/v4 v4.2.0/go.mod h1:1zaTbf/7ywOQtMdoUdTF2X1fbbBLiBUkajyuFAanT28= +github.com/bombsimon/wsl/v4 v4.2.1 h1:Cxg6u+XDWff75SIFFmNsqnIOgob+Q9hG6y/ioKbRFiM= +github.com/bombsimon/wsl/v4 v4.2.1/go.mod h1:Xu/kDxGZTofQcDGCtQe9KCzhHphIe0fDuyWTxER9Feo= github.com/breml/bidichk v0.2.7 h1:dAkKQPLl/Qrk7hnP6P+E0xOodrq8Us7+U0o4UBOAlQY= github.com/breml/bidichk v0.2.7/go.mod h1:YodjipAGI9fGcYM7II6wFvGhdMYsC5pHDlGzqvEW3tQ= github.com/breml/errchkjson v0.3.6 h1:VLhVkqSBH96AvXEyclMR37rZslRrY2kcyq+31HCsVrA= @@ -521,15 +523,15 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= -github.com/butuzov/ireturn v0.2.2 h1:jWI36dxXwVrI+RnXDwux2IZOewpmfv930OuIRfaBUJ0= -github.com/butuzov/ireturn v0.2.2/go.mod h1:RfGHUvvAuFFxoHKf4Z8Yxuh6OjlCw1KvR2zM1NFHeBk= -github.com/butuzov/mirror v1.1.0 h1:ZqX54gBVMXu78QLoiqdwpl2mgmoOJTk7s4p4o+0avZI= -github.com/butuzov/mirror v1.1.0/go.mod h1:8Q0BdQU6rC6WILDiBM60DBfvV78OLJmMmixe7GF45AE= +github.com/butuzov/ireturn v0.3.0 h1:hTjMqWw3y5JC3kpnC5vXmFJAWI/m31jaCYQqzkS6PL0= +github.com/butuzov/ireturn v0.3.0/go.mod h1:A09nIiwiqzN/IoVo9ogpa0Hzi9fex1kd9PSD6edP5ZA= +github.com/butuzov/mirror v1.2.0 h1:9YVK1qIjNspaqWutSv8gsge2e/Xpq1eqEkslEUHy5cs= +github.com/butuzov/mirror v1.2.0/go.mod h1:DqZZDtzm42wIAIyHXeN8W/qb1EPlb9Qn/if9icBOpdQ= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/catenacyber/perfsprint v0.4.0 h1:ZwECTVWzrJ4oW94r2OEiNEO+RKWXSibEZBPd6HkrGl4= -github.com/catenacyber/perfsprint v0.4.0/go.mod h1:/wclWYompEyjUD2FuIIDVKNkqz7IgBIWXIH3V0Zol50= -github.com/ccojocar/zxcvbn-go v1.0.1 h1:+sxrANSCj6CdadkcMnvde/GWU1vZiiXRbqYSCalV4/4= -github.com/ccojocar/zxcvbn-go v1.0.1/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60= +github.com/catenacyber/perfsprint v0.7.1 h1:PGW5G/Kxn+YrN04cRAZKC+ZuvlVwolYMrIyyTJ/rMmc= +github.com/catenacyber/perfsprint v0.7.1/go.mod h1:/wclWYompEyjUD2FuIIDVKNkqz7IgBIWXIH3V0Zol50= +github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg= +github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= @@ -541,7 +543,6 @@ github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91 github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charithe/durationcheck v0.0.10 h1:wgw73BiocdBDQPik+zcEoBG/ob8uyBHf2iyoHGPf5w4= @@ -560,6 +561,8 @@ github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/ckaznocha/intrange v0.1.2 h1:3Y4JAxcMntgb/wABQ6e8Q8leMd26JbX2790lIss9MTI= +github.com/ckaznocha/intrange v0.1.2/go.mod h1:RWffCw/vKBwHeOEwWdCikAtY0q4gGt8VhJZEEA5n+RE= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= @@ -575,6 +578,8 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= +github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= @@ -631,8 +636,8 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= -github.com/daixiang0/gci v0.11.2 h1:Oji+oPsp3bQ6bNNgX30NBAVT18P4uBH4sRZnlOlTj7Y= -github.com/daixiang0/gci v0.11.2/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI= +github.com/daixiang0/gci v0.13.4 h1:61UGkmpoAcxHM2hhNkZEf5SzwQtWJXTSws7jaPyqwlw= +github.com/daixiang0/gci v0.13.4/go.mod h1:12etP2OniiIdP4q+kjUGrC/rUagga7ODbqsom5Eo5Yk= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -643,8 +648,8 @@ github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5il github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= -github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= +github.com/denis-tingaikin/go-header v0.5.0 h1:SRdnP5ZKvcO9KKRP1KJrhFR3RrlGuD+42t4429eC9k8= +github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okegmwQ3UgWl4V1D8gjlY= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= @@ -684,26 +689,26 @@ github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= -github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= -github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= -github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= +github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q= +github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= -github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= -github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/firefart/nonamedreturns v1.0.5 h1:tM+Me2ZaXs8tfdDw3X6DOX++wMCOqzYUho6tUTYIdRA= +github.com/firefart/nonamedreturns v1.0.5/go.mod h1:gHJjDqhGM4WyPt639SOZs+G89Ko7QKH5R5BhnO6xJhw= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -713,15 +718,15 @@ github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlya github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI= github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghostiam/protogetter v0.3.3 h1:EvOuzB/SEifg/c4aMnwcj033Qc1lHO7Yz4QnBDbmbik= -github.com/ghostiam/protogetter v0.3.3/go.mod h1:A0JgIhs0fgVnotGinjQiKaFVG3waItLJNwPmcMzDnvk= +github.com/ghostiam/protogetter v0.3.6 h1:R7qEWaSgFCsy20yYHNIJsU9ZOb8TziSRRxuAOTVKeOk= +github.com/ghostiam/protogetter v0.3.6/go.mod h1:7lpeDnEJ1ZjL/YtyoN99ljO4z0pd3H0d18/t2dPBxHw= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= -github.com/go-critic/go-critic v0.9.0 h1:Pmys9qvU3pSML/3GEQ2Xd9RZ/ip+aXHKILuxczKGV/U= -github.com/go-critic/go-critic v0.9.0/go.mod h1:5P8tdXL7m/6qnyG6oRAlYLORvoXH0WDypYgAEmagT40= +github.com/go-critic/go-critic v0.11.3 h1:SJbYD/egY1noYjTMNTlhGaYlfQ77rQmrNH7h+gtn0N0= +github.com/go-critic/go-critic v0.11.3/go.mod h1:Je0h5Obm1rR5hAGA9mP2PDiOOk53W+n7pyvXErFKIgI= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -737,8 +742,11 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= @@ -758,8 +766,9 @@ github.com/go-toolsmith/astcast v1.1.0/go.mod h1:qdcuFWeGGS2xX5bLM/c3U9lewg7+Zu4 github.com/go-toolsmith/astcopy v1.1.0 h1:YGwBN0WM+ekI/6SS6+52zLDEf8Yvp3n2seZITCUBt5s= github.com/go-toolsmith/astcopy v1.1.0/go.mod h1:hXM6gan18VA1T/daUEHCFcYiW8Ai1tIwIzHY6srfEAw= github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= -github.com/go-toolsmith/astequal v1.1.0 h1:kHKm1AWqClYn15R0K1KKE4RG614D46n+nqUQ06E1dTw= github.com/go-toolsmith/astequal v1.1.0/go.mod h1:sedf7VIdCL22LD8qIvv7Nn9MuWJruQA/ysswh64lffQ= +github.com/go-toolsmith/astequal v1.2.0 h1:3Fs3CYZ1k9Vo4FzFhwwewC3CHISHDnVUPC4x0bI2+Cw= +github.com/go-toolsmith/astequal v1.2.0/go.mod h1:c8NZ3+kSFtFY/8lPso4v8LuJjdJiUFVnSuU3s0qrrDY= github.com/go-toolsmith/astfmt v1.1.0 h1:iJVPDPp6/7AaeLJEruMsBUlOYCmvg0MoCfJprsOmcco= github.com/go-toolsmith/astfmt v1.1.0/go.mod h1:OrcLlRwu0CuiIBp/8b5PYF9ktGVZUjlNMV634mhwuQ4= github.com/go-toolsmith/astp v1.1.0 h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA= @@ -771,6 +780,8 @@ github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQi github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus= github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig= +github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c= +github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U= github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= @@ -800,8 +811,8 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= -github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= +github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -836,32 +847,29 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e h1:ULcKCDV1LOZPFxGZaA6TlQbiM3J2GCPnkx/bGF6sX/g= github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e/go.mod h1:Pm5KhLPA8gSnQwrQ6ukebRcapGb/BG9iUkdaiCcGHJM= -github.com/golangci/golangci-lint v1.55.3-0.20231203192459-84442f26446b h1:z3r/dMJX7RUKV8RAVYnu4tghQImjPksZzkncictRlT4= -github.com/golangci/golangci-lint v1.55.3-0.20231203192459-84442f26446b/go.mod h1:h6krrUw6/rso2L5KPuSLK3WGKdhYbEW4I0zPt4ckp3Y= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.4.1 h1:+y73iSicVy2PqyX7kmUefHusENlrP9YwuHZHPLGQj/g= -github.com/golangci/misspell v0.4.1/go.mod h1:9mAN1quEo3DlpbaIKKyEvRxK1pwqR9s/Sea1bJCtlNI= -github.com/golangci/revgrep v0.5.2 h1:EndcWoRhcnfj2NHQ+28hyuXpLMF+dQmCN+YaeeIl4FU= -github.com/golangci/revgrep v0.5.2/go.mod h1:bjAMA+Sh/QUfTDcHzxfyHxr4xKvllVr/0sCv2e7jJHA= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/golangci/golangci-lint v1.58.1 h1:IYKjkt7nofq/mYXiDUyJiBZQi5kxD0jPCjBy6VXxjz8= +github.com/golangci/golangci-lint v1.58.1/go.mod h1:IX9uSbhwDDOVTcceKZWmshlally+fOQYv1pZhIJCMNw= +github.com/golangci/misspell v0.5.1 h1:/SjR1clj5uDjNLwYzCahHwIOPmQgoH04AyQIiWGbhCM= +github.com/golangci/misspell v0.5.1/go.mod h1:keMNyY6R9isGaSAu+4Q8NMBwMPkh15Gtc8UCVoDtAWo= +github.com/golangci/modinfo v0.3.4 h1:oU5huX3fbxqQXdfspamej74DFX0kyGLkw1ppvXoJ8GA= +github.com/golangci/modinfo v0.3.4/go.mod h1:wytF1M5xl9u0ij8YSvhkEVPP3M5Mc7XLl1pxH3B2aUM= +github.com/golangci/plugin-module-register v0.1.1 h1:TCmesur25LnyJkpsVrupv1Cdzo+2f7zX0H6Jkw1Ol6c= +github.com/golangci/plugin-module-register v0.1.1/go.mod h1:TTpqoB6KkwOJMV8u7+NyXMrkwwESJLOkfl9TxR1DGFc= +github.com/golangci/revgrep v0.5.3 h1:3tL7c1XBMtWHHqVpS5ChmiAAoe4PF/d5+ULzV9sLAzs= +github.com/golangci/revgrep v0.5.3/go.mod h1:U4R/s9dlXZsg8uJmaR1GrloUr14D7qDl8gi2iPXJH8k= +github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed h1:IURFTjxeTfNFP0hTEi1YKjB/ub8zkpaOqFFMApi2EAs= +github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed/go.mod h1:XLXN8bNw4CGRPaqgl3bv/lhz7bsGPh4/xSaMTbo2vkQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= @@ -918,13 +926,13 @@ github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -985,8 +993,6 @@ github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIv github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= @@ -998,8 +1004,6 @@ github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJ github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= @@ -1043,14 +1047,16 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jgautheron/goconst v1.7.0 h1:cEqH+YBKLsECnRSd4F4TK5ri8t/aXtt/qoL0Ft252B0= -github.com/jgautheron/goconst v1.7.0/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jgautheron/goconst v1.7.1 h1:VpdAG7Ca7yvvJk5n8dMwQhfEZJh95kl/Hl9S1OI5Jkk= +github.com/jgautheron/goconst v1.7.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jjti/go-spancheck v0.6.1 h1:ZK/wE5Kyi1VX3PJpUO2oEgeoI4FWOUm7Shb2Gbv5obI= +github.com/jjti/go-spancheck v0.6.1/go.mod h1:vF1QkOO159prdo6mHRxak2CpzDpHAfKiPUDP/NeRnX8= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -1065,7 +1071,6 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= @@ -1075,15 +1080,16 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= +github.com/karamaru-alpha/copyloopvar v1.1.0 h1:x7gNyKcC2vRBO1H2Mks5u1VxQtYvFiym7fCjIP8RPos= +github.com/karamaru-alpha/copyloopvar v1.1.0/go.mod h1:u7CIfztblY0jZLOQZgH3oYsJzpC2A7S6u/lfgSXHy0k= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8= -github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= -github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= +github.com/kisielk/errcheck v1.7.0 h1:+SbscKmWJ5mOK/bO1zS60F5I9WwZDWOfRsC4RwfwRV0= +github.com/kisielk/errcheck v1.7.0/go.mod h1:1kLL+jV4e+CFfueBmI1dSK2ADDyQnlrnrY/FqKluHJQ= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkHAIKE/contextcheck v1.1.4 h1:B6zAaLhOEEcjvUgIYEqystmnFk1Oemn8bvJhbt0GMb8= -github.com/kkHAIKE/contextcheck v1.1.4/go.mod h1:1+i/gWqokIa+dm31mqGLZhZJ7Uh44DJGZVmr6QRBNJg= +github.com/kkHAIKE/contextcheck v1.1.5 h1:CdnJh63tcDe53vG+RebdpdXJTc9atMgGqdx8LXxiilg= +github.com/kkHAIKE/contextcheck v1.1.5/go.mod h1:O930cpht4xb1YQpK+1+AgoM3mFsvxr7uyFptcnWTYUA= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= @@ -1103,19 +1109,21 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.8 h1:Ul2KsqtzFxTlSU7IP0JusWlLiNqQaloB9vguyjbE558= -github.com/kunwardeep/paralleltest v1.0.8/go.mod h1:2C7s65hONVqY7Q5Efj5aLzRCNLjw2h4eMc9EcypGjcY= +github.com/kunwardeep/paralleltest v1.0.10 h1:wrodoaKYzS2mdNVnc4/w31YaXFtsc21PCTdvWJ/lDDs= +github.com/kunwardeep/paralleltest v1.0.10/go.mod h1:2C7s65hONVqY7Q5Efj5aLzRCNLjw2h4eMc9EcypGjcY= github.com/kyoh86/exportloopref v0.1.11 h1:1Z0bcmTypkL3Q4k+IDHMWTcnCliEZcaPiIe0/ymEyhQ= github.com/kyoh86/exportloopref v0.1.11/go.mod h1:qkV4UF1zGl6EkF1ox8L5t9SwyeBAZ3qLMd6up458uqA= -github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= -github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/lasiar/canonicalheader v1.0.6 h1:LJiiZ/MzkqibXOL2v+J8+WZM21pM0ivrBY/jbm9f5fo= +github.com/lasiar/canonicalheader v1.0.6/go.mod h1:GfXTLQb3O1qF5qcSTyXTnfNUggUNyzbkOSpzZ0dpUJo= +github.com/ldez/gomoddirectives v0.2.4 h1:j3YjBIjEBbqZ0NKtBNzr8rtMHTOrLPeiwTkfUJZ3alg= +github.com/ldez/gomoddirectives v0.2.4/go.mod h1:oWu9i62VcQDYp9EQ0ONTfqLNh+mDLWWDO+SO0qSQw5g= github.com/ldez/tagliatelle v0.5.0 h1:epgfuYt9v0CG3fms0pEgIMNPuFf/LpPIfjk4kyqSioo= github.com/ldez/tagliatelle v0.5.0/go.mod h1:rj1HmWiL1MiKQuOONhd09iySTEkUuE/8+5jtPYz9xa4= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/leonklingele/grouper v1.1.1 h1:suWXRU57D4/Enn6pXR0QVqqWWrnJ9Osrz+5rjt8ivzU= -github.com/leonklingele/grouper v1.1.1/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= +github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY= +github.com/leonklingele/grouper v1.1.2/go.mod h1:6D0M/HVkhs2yRKRFZUoGjeDy7EZTfFBE9gl4kjmIGkA= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= @@ -1129,8 +1137,8 @@ github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xq github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/macabu/inamedparam v0.1.2 h1:RR5cnayM6Q7cDhQol32DE2BGAPGMnffJ31LFE+UklaU= -github.com/macabu/inamedparam v0.1.2/go.mod h1:Xg25QvY7IBRl1KLPV9Rbml8JOMZtF/iAkNkmV7eQgjw= +github.com/macabu/inamedparam v0.1.3 h1:2tk/phHkMlEL/1GNe/Yf6kkR/hkcUdAEY3L0hjYV1Mk= +github.com/macabu/inamedparam v0.1.3/go.mod h1:93FLICAIk/quk7eaPPQvbzihUdn/QkGDwIZEoLtpH6I= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= @@ -1161,10 +1169,8 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= -github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/revive v1.3.4 h1:k/tO3XTaWY4DEHal9tWBkkUMJYO/dLDVyMmAQxmIMDc= -github.com/mgechev/revive v1.3.4/go.mod h1:W+pZCMu9qj8Uhfs1iJMQsEFLRozUfvwFwqVvRbSNLVw= +github.com/mgechev/revive v1.3.7 h1:502QY0vQGe9KtYJ9FpxMz9rL+Fc/P13CI5POL4uHCcE= +github.com/mgechev/revive v1.3.7/go.mod h1:RJ16jUbF0OWC3co/+XTxmFNgEpUPwnnA0BRllX2aDNA= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= @@ -1213,8 +1219,8 @@ github.com/nishanths/exhaustive v0.12.0 h1:vIY9sALmw6T/yxiASewa4TQcFsVYZQQRUQJhK github.com/nishanths/exhaustive v0.12.0/go.mod h1:mEZ95wPIZW+x8kC4TgC+9YCUgiST7ecevsVDTgc2obs= github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= -github.com/nunnatsa/ginkgolinter v0.14.1 h1:khx0CqR5U4ghsscjJ+lZVthp3zjIFytRXPTaQ/TMiyA= -github.com/nunnatsa/ginkgolinter v0.14.1/go.mod h1:nY0pafUSst7v7F637e7fymaMlQqI9c0Wka2fGsDkzWg= +github.com/nunnatsa/ginkgolinter v0.16.2 h1:8iLqHIZvN4fTLDC0Ke9tbSZVcyVHoBs0HIbnVSxfHJk= +github.com/nunnatsa/ginkgolinter v0.16.2/go.mod h1:4tWRinDN1FeJgU+iJANW/kz7xKN5nYRAOfJDQUS9dOQ= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -1229,13 +1235,13 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= -github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= +github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY= +github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.28.1 h1:MijcGUbfYuznzK/5R4CPNoUP/9Xvuo20sXfEm6XxoTA= -github.com/onsi/gomega v1.28.1/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo= +github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -1254,8 +1260,8 @@ github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnh github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/copy v1.11.0 h1:OKBD80J/mLBrwnzXqGtFCzprFSGioo30JcmR4APsNwc= -github.com/otiai10/copy v1.11.0/go.mod h1:rSaLseMUsZFFbsFGc7wCJnnkTAvdc5L6VWxPE4308Ww= +github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= +github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= @@ -1266,8 +1272,8 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= -github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc h1:8bQZVK1X6BJR/6nYUPxQEP+ReTsceJTKizeuwjWOPUA= @@ -1287,17 +1293,17 @@ github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qR github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v1.4.6 h1:6E7ITe++G4eQ8+/ciIz9yONm+pDy+1LI/AZdZG0cP5Y= -github.com/polyfloyd/go-errorlint v1.4.6/go.mod h1:WGkLzUkLXGGr6BfD33l7yRidBa+T+8xB8TupCpId2ZE= +github.com/polyfloyd/go-errorlint v1.5.1 h1:5gHxDjLyyWij7fhfrjYNNlHsUNQeyx0LFQKUelO3RBo= +github.com/polyfloyd/go-errorlint v1.5.1/go.mod h1:sH1QC1pxxi0fFecsVIzBmxtrgd9IF/SkJpA6wqyKAJs= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -1314,8 +1320,6 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1324,12 +1328,12 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/quasilyte/go-ruleguard v0.4.0 h1:DyM6r+TKL+xbKB4Nm7Afd1IQh9kEUKQs2pboWGKtvQo= -github.com/quasilyte/go-ruleguard v0.4.0/go.mod h1:Eu76Z/R8IXtViWUIHkE3p8gdH3/PKk1eh3YGfaEof10= +github.com/quasilyte/go-ruleguard v0.4.2 h1:htXcXDK6/rO12kiTHKfHuqR4kr3Y4M0J0rOL6CH/BYs= +github.com/quasilyte/go-ruleguard v0.4.2/go.mod h1:GJLgqsLeo4qgavUoL8JeGFNS7qcisx3awV/w9eWTmNI= +github.com/quasilyte/go-ruleguard/dsl v0.3.22 h1:wd8zkOhSNr+I+8Qeciml08ivDt1pSXe60+5DqOpCjPE= +github.com/quasilyte/go-ruleguard/dsl v0.3.22/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo= github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl980XxGFEZSS6KlBGIV0diGdySzxATTWoqaU= @@ -1345,8 +1349,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -1356,8 +1360,8 @@ github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWR github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.3.0 h1:q15RT/pd6UggBXVBuLps8BXRvl5GPBcwVA7BJHMLuTw= -github.com/ryancurrah/gomodguard v1.3.0/go.mod h1:ggBxb3luypPEzqVtq33ee7YSN35V28XeGnid8dnni50= +github.com/ryancurrah/gomodguard v1.3.2 h1:CuG27ulzEB1Gu5Dk5gP8PFxSOZ3ptSdP5iI/3IXxM18= +github.com/ryancurrah/gomodguard v1.3.2/go.mod h1:LqdemiFomEjcxOqirbQCb3JFvSxH2JUYMerTFd3sF2o= github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9fJfSfdyCU= github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= @@ -1368,15 +1372,17 @@ github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWR github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sanposhiho/wastedassign/v2 v2.0.7 h1:J+6nrY4VW+gC9xFzUc+XjPD3g3wF3je/NsJFwFK7Uxc= github.com/sanposhiho/wastedassign/v2 v2.0.7/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= -github.com/sashamelentyev/usestdlibvars v1.24.0 h1:MKNzmXtGh5N0y74Z/CIaJh4GlB364l0K1RUT08WSWAc= -github.com/sashamelentyev/usestdlibvars v1.24.0/go.mod h1:9cYkq+gYJ+a5W2RPdhfaSCnTVUC1OQP/bSiiBhq3OZE= +github.com/sashamelentyev/usestdlibvars v1.25.0 h1:IK8SI2QyFzy/2OD2PYnhy84dpfNo9qADrRt6LH8vSzU= +github.com/sashamelentyev/usestdlibvars v1.25.0/go.mod h1:9nl0jgOfHKWNFS43Ojw0i7aRoS4j6EBye3YBhmAIRF8= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/securego/gosec/v2 v2.18.2 h1:DkDt3wCiOtAHf1XkiXZBhQ6m6mK/b9T/wD257R3/c+I= -github.com/securego/gosec/v2 v2.18.2/go.mod h1:xUuqSF6i0So56Y2wwohWAmB07EdBkUN6crbLlHwbyJs= +github.com/securego/gosec/v2 v2.19.0 h1:gl5xMkOI0/E6Hxx0XCY2XujA3V7SNSefA8sC+3f1gnk= +github.com/securego/gosec/v2 v2.19.0/go.mod h1:hOkDcHz9J/XIgIlPDXalxjeVYsHxoWUc5zJSHxcB8YM= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= @@ -1390,8 +1396,6 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sivchari/containedctx v1.0.3 h1:x+etemjbsh2fB5ewm5FeLNi5bUjK0V8n0RB+Wwfd0XE= github.com/sivchari/containedctx v1.0.3/go.mod h1:c1RDvCbnJLtH4lLcYD/GqwiBSSf4F5Qk0xld2rBqzJ4= -github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= -github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= github.com/sivchari/tenv v1.7.1 h1:PSpuD4bu6fSmtWMxSGWcvqUUgIn7k3yOJhOIzVWn8Ak= github.com/sivchari/tenv v1.7.1/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/skip-mev/chaintestutil v0.0.0-20231207155412-975710cc9051 h1:ZTD4dFUTv+h+BgGTv4PtXnSxgMTUrCvGX+NQjNo/hqA= @@ -1413,8 +1417,8 @@ github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= -github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= @@ -1440,8 +1444,9 @@ github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5J github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1451,8 +1456,9 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= @@ -1476,8 +1482,8 @@ github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966/go.mod h1:27bSVN github.com/timonwong/loggercheck v0.9.4 h1:HKKhqrjcVj8sxL7K77beXh0adEm6DLjV/QOGeMXEVi4= github.com/timonwong/loggercheck v0.9.4/go.mod h1:caz4zlPcgvpEkXgVnAJGowHAMW2NwHaNlpS8xDbVhTg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.8.1 h1:HxSqDSN0sAt0yJYsrcYVoEeyM4aI9yAm3KQpIXDJRhQ= -github.com/tomarrell/wrapcheck/v2 v2.8.1/go.mod h1:/n2Q3NZ4XFT50ho6Hbxg+RV1uyo2Uow/Vdm9NQcl5SE= +github.com/tomarrell/wrapcheck/v2 v2.8.3 h1:5ov+Cbhlgi7s/a42BprYoxsr73CbdMUTzE3bRDFASUs= +github.com/tomarrell/wrapcheck/v2 v2.8.3/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYcGsVMOx/xGkqdMo= github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= @@ -1492,8 +1498,8 @@ github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ultraware/funlen v0.1.0 h1:BuqclbkY6pO+cvxoq7OsktIXZpgBSkYTQtmwhAK81vI= github.com/ultraware/funlen v0.1.0/go.mod h1:XJqmOQja6DpxarLj6Jj1U7JuoS8PvL4nEqDaQhy22p4= -github.com/ultraware/whitespace v0.1.0 h1:O1HKYoh0kIeqE8sFqZf1o0qbORXUCOQFrlaQyZsczZw= -github.com/ultraware/whitespace v0.1.0/go.mod h1:/se4r3beMFNmewJ4Xmz0nMQ941GJt+qmSHGP9emHYe0= +github.com/ultraware/whitespace v0.1.1 h1:bTPOGejYFulW3PkcrqkeQwOd6NKOOXvmGD9bo/Gk8VQ= +github.com/ultraware/whitespace v0.1.1/go.mod h1:XcP1RLD81eV4BW8UhQlpaR+SDc2givTvyI8a586WjW8= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/uudashr/gocognit v1.1.2 h1:l6BAEKJqQH2UpKAPKdMfZf5kE4W/2xk8pfU1OVLvniI= @@ -1504,8 +1510,8 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= -github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= -github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= +github.com/yeya24/promlinter v0.3.0 h1:JVDbMp08lVCP7Y6NP3qHroGAO6z2yGKQtS5JsjqtoFs= +github.com/yeya24/promlinter v0.3.0/go.mod h1:cDfJQQYv9uYciW60QT0eeHlFodotkYZlL+YcPQN+mW4= github.com/ykadowak/zerologlint v0.1.5 h1:Gy/fMz1dFQN9JZTPjv1hxEk+sRWm05row04Yoolgdiw= github.com/ykadowak/zerologlint v0.1.5/go.mod h1:KaUskqF3e/v59oPmdq1U1DnKcuHokl2/K1U4pmIELKg= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1519,14 +1525,14 @@ github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= -gitlab.com/bosi/decorder v0.4.1 h1:VdsdfxhstabyhZovHafFw+9eJ6eU0d2CkFNJcZz/NU4= -gitlab.com/bosi/decorder v0.4.1/go.mod h1:jecSqWUew6Yle1pCr2eLWTensJMmsxHsBwt+PVbkAqA= +gitlab.com/bosi/decorder v0.4.2 h1:qbQaV3zgwnBZ4zPMhGLW4KZe7A7NwxEhJx39R3shffo= +gitlab.com/bosi/decorder v0.4.2/go.mod h1:muuhHoaJkA9QLcYHq4Mj8FJUwDZ+EirSHRiaTcTf6T8= go-simpler.org/assert v0.7.0 h1:OzWWZqfNxt8cLS+MlUp6Tgk1HjPkmgdKBq9qvy8lZsA= go-simpler.org/assert v0.7.0/go.mod h1:74Eqh5eI6vCK6Y5l3PI8ZYFXG4Sa+tkr70OIPJAUr28= -go-simpler.org/musttag v0.8.0 h1:DR4UTgetNNhPRNo02rkK1hwDTRzAPotN+ZqYpdtEwWc= -go-simpler.org/musttag v0.8.0/go.mod h1:fiNdCkXt2S6je9Eblma3okjnlva9NT1Eg/WUt19rWu8= -go-simpler.org/sloglint v0.3.0 h1:E6TR0w4io+F1mkdvFaCRKEpf19S2+lnEYiDM2Z6bClk= -go-simpler.org/sloglint v0.3.0/go.mod h1:/RQr0TeTf89IyRjLJ9ogUbIp1Zs5zJJAj02pwQoDQdg= +go-simpler.org/musttag v0.12.1 h1:yaMcjl/uyVnd1z6GqIhBiFH/PoqNN9f2IgtU7bp7W/0= +go-simpler.org/musttag v0.12.1/go.mod h1:46HKu04A3Am9Lne5kKP0ssgwY3AeIlqsDzz3UxKROpY= +go-simpler.org/sloglint v0.6.0 h1:0YcqSVG7LI9EVBfRPhgPec79BH6X6mwjFuUR5Mr7j1M= +go-simpler.org/sloglint v0.6.0/go.mod h1:+kJJtebtPePWyG5boFwY46COydAggADDOHM22zOvzBk= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= @@ -1542,6 +1548,18 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= +go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y= +go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= +go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg= +go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0= +go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1550,6 +1568,8 @@ go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= +go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= @@ -1579,16 +1599,15 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg= -golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2 h1:Jvc7gsqn21cJHCmAWx0LiimpP18LZmUxkT5Mp7EZ1mI= golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20230307190834-24139beb5833 h1:jWGQJV4niP+CCmFW9ekjA9Zx8vYORzOUH2/Nl5WPuLQ= -golang.org/x/exp/typeparams v0.0.0-20230307190834-24139beb5833/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f h1:phY1HzDcf18Aq9A8KkmRtY9WvOFIxN8wgfvy6Zm1DV8= +golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1615,8 +1634,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1664,11 +1683,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1687,8 +1704,8 @@ golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1716,8 +1733,8 @@ golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= +golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1733,8 +1750,8 @@ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1799,7 +1816,6 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1816,7 +1832,6 @@ golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1843,8 +1858,8 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1853,8 +1868,8 @@ golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1870,14 +1885,16 @@ golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1930,7 +1947,6 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -1954,8 +1970,8 @@ golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= -golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= +golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2017,8 +2033,8 @@ google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91 google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= -google.golang.org/api v0.143.0 h1:o8cekTkqhywkbZT6p1UHJPZ9+9uuCAJs/KYomxZB8fA= -google.golang.org/api v0.143.0/go.mod h1:FoX9DO9hT7DLNn97OuoZAGSDuNAXdJRuGK98rSUgurk= +google.golang.org/api v0.162.0 h1:Vhs54HkaEpkMBdgGdOT2P6F0csGG/vxDS0hWHJzmmps= +google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -2026,8 +2042,9 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -2145,12 +2162,12 @@ google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZV google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U= -google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4= -google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= -google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -2195,8 +2212,8 @@ google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -2214,8 +2231,8 @@ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -2258,16 +2275,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.4.6 h1:oFEHCKeID7to/3autwsWfnuv69j3NsfcXbvJKuIcep8= -honnef.co/go/tools v0.4.6/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0= -mvdan.cc/gofumpt v0.5.0 h1:0EQ+Z56k8tXjj/6TQD25BFNKQXpCvT0rnansIc7Ug5E= -mvdan.cc/gofumpt v0.5.0/go.mod h1:HBeVDtMKRZpXyxFciAirzdKklDlGu8aAy1wEbH5Y9js= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d h1:3rvTIIM22r9pvXk+q3swxUQAQOxksVMGK7sml4nG57w= -mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d/go.mod h1:IeHQjmn6TOD+e4Z3RFiZMMsLVL+A96Nvptar8Fj71is= +honnef.co/go/tools v0.4.7 h1:9MDAWxMoSnB6QoSqiVr7P5mtkT9pOc1kSxchzPCnqJs= +honnef.co/go/tools v0.4.7/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0= +mvdan.cc/gofumpt v0.6.0 h1:G3QvahNDmpD+Aek/bNOLrFR2XC6ZAdo62dZu65gmwGo= +mvdan.cc/gofumpt v0.6.0/go.mod h1:4L0wf+kgIPZtcCWXynNS2e6bhmj73umwnuXSZarixzA= +mvdan.cc/unparam v0.0.0-20240427195214-063aff900ca1 h1:Nykk7fggxChwLK4rUPYESzeIwqsuxXXlFEAh5YhaMRo= +mvdan.cc/unparam v0.0.0-20240427195214-063aff900ca1/go.mod h1:ZzZjEpJDOmx8TdVU6umamY3Xy0UAQUI2DHbf05USVbI= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= diff --git a/x/feemarket/client/cli/query.go b/x/feemarket/client/cli/query.go index a7f7bc22..2bbd0ed4 100644 --- a/x/feemarket/client/cli/query.go +++ b/x/feemarket/client/cli/query.go @@ -37,7 +37,7 @@ func GetParamsCmd() *cobra.Command { Use: "params", Short: "Query for the current feemarket parameters", Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { clientCtx, err := client.GetClientQueryContext(cmd) if err != nil { return err @@ -64,7 +64,7 @@ func GetStateCmd() *cobra.Command { Use: "state", Short: "Query for the current feemarket state", Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { clientCtx, err := client.GetClientQueryContext(cmd) if err != nil { return err @@ -91,7 +91,7 @@ func GetBaseFeeCmd() *cobra.Command { Use: "base-fee", Short: "Query for the current feemarket base fee", Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { clientCtx, err := client.GetClientQueryContext(cmd) if err != nil { return err diff --git a/x/feemarket/post/feegrant_test.go b/x/feemarket/post/feegrant_test.go index 15d1a86d..97587bf0 100644 --- a/x/feemarket/post/feegrant_test.go +++ b/x/feemarket/post/feegrant_test.go @@ -60,7 +60,7 @@ func TestDeductFeesNoDelegation(t *testing.T) { fee: 24497000000, valid: false, err: sdkerrors.ErrUnknownAddress, - malleate: func(suite *antesuite.TestSuite) (antesuite.TestAccount, sdk.AccAddress) { + malleate: func(_ *antesuite.TestSuite) (antesuite.TestAccount, sdk.AccAddress) { // Do not register the account priv, _, addr := testdata.KeyTestPubAddr() return antesuite.TestAccount{ From 6ef36ce3234ed16b466c62a93adadf770df2734a Mon Sep 17 00:00:00 2001 From: aljo242 Date: Mon, 13 May 2024 12:40:10 -0400 Subject: [PATCH 15/26] fix --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8e7e91f1..30efaa9d 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ feemarket. More information about the implementation can be found [here](./x/fee This module is planned to be used in the Cosmos Hub. ## Status + The team has not yet completed acceptance testing of the feemarket. We do not recommend integrating it until final testing has been completed (expected May 2024), and we have removed this warning from the readme. ## Contents From 55438dd3ab67a6bbcec0207022f3516fb27fa824 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Mon, 13 May 2024 14:19:36 -0400 Subject: [PATCH 16/26] remove check --- x/feemarket/ante/fee.go | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/x/feemarket/ante/fee.go b/x/feemarket/ante/fee.go index 26810dc1..8682eb3b 100644 --- a/x/feemarket/ante/fee.go +++ b/x/feemarket/ante/fee.go @@ -53,18 +53,10 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula feeCoins := feeTx.GetFee() gas := feeTx.GetGas() // use provided gas limit - if len(feeCoins) > 1 { + if len(feeCoins) != 1 { return ctx, feemarkettypes.ErrTooManyFeeCoins } - // If there is a fee attached to the tx, make sure the fee denom is a denom accepted by the chain - if len(feeCoins) == 1 { - feeDenom := feeCoins.GetDenomByIndex(0) - if feeDenom != minFee.Denom { - return ctx, err - } - } - ctx.Logger().Info("fee deduct ante handle", "min gas prices", minFee, "fee", feeCoins, From d3fd29c32727d3ed24ec130b80977d6e594c60c1 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Mon, 13 May 2024 14:40:58 -0400 Subject: [PATCH 17/26] fix: --- x/feemarket/ante/fee.go | 21 ++++++++++----------- x/feemarket/post/fee.go | 6 +++--- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/x/feemarket/ante/fee.go b/x/feemarket/ante/fee.go index 8682eb3b..94bfc556 100644 --- a/x/feemarket/ante/fee.go +++ b/x/feemarket/ante/fee.go @@ -54,7 +54,7 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula gas := feeTx.GetGas() // use provided gas limit if len(feeCoins) != 1 { - return ctx, feemarkettypes.ErrTooManyFeeCoins + return ctx, errorsmod.Wrapf(feemarkettypes.ErrTooManyFeeCoins, "got length %d", len(feeCoins)) } ctx.Logger().Info("fee deduct ante handle", @@ -64,7 +64,7 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula ) if !simulate { - fee, _, err := CheckTxFee(ctx, minGasPrices, feeTx, true, dfd.feemarketKeeper.GetDenomResolver()) + fee, _, err := CheckTxFee(ctx, minGasPrices[0], feeTx, true, dfd.feemarketKeeper.GetDenomResolver()) if err != nil { return ctx, errorsmod.Wrapf(err, "error checking fee") } @@ -78,12 +78,12 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula // CheckTxFee implements the logic for the fee market to check if a Tx has provided sufficient // fees given the current state of the fee market. Returns an error if insufficient fees. -func CheckTxFee(ctx sdk.Context, minFeesDecCoins sdk.DecCoins, feeTx sdk.FeeTx, isCheck bool, resolver feemarkettypes.DenomResolver) (payCoin sdk.Coin, tip sdk.Coin, err error) { +func CheckTxFee(ctx sdk.Context, minFeesDecCoin sdk.DecCoin, feeTx sdk.FeeTx, isCheck bool, resolver feemarkettypes.DenomResolver) (payCoin sdk.Coin, tip sdk.Coin, err error) { if len(feeTx.GetFee()) != 1 { return sdk.Coin{}, sdk.Coin{}, feemarkettypes.ErrTooManyFeeCoins } - feeDenom := minFeesDecCoins.GetDenomByIndex(0) + feeDenom := minFeesDecCoin.Denom feeCoin := feeTx.GetFee()[0] coinWithBaseDenom := feeCoin @@ -95,8 +95,7 @@ func CheckTxFee(ctx sdk.Context, minFeesDecCoins sdk.DecCoins, feeTx sdk.FeeTx, } // Ensure that the provided fees meet the minimum - minGasPrice := minFeesDecCoins[0] - if !minGasPrice.IsZero() { + if !minFeesDecCoin.IsZero() { var ( requiredFee sdk.Coin consumedFee sdk.Coin @@ -108,17 +107,17 @@ func CheckTxFee(ctx sdk.Context, minFeesDecCoins sdk.DecCoins, feeTx sdk.FeeTx, gcDec := sdkmath.LegacyNewDec(gasConsumed) glDec := sdkmath.LegacyNewDec(int64(feeTx.GetGas())) - consumedFeeAmount := minGasPrice.Amount.Mul(gcDec) - limitFee := minGasPrice.Amount.Mul(glDec) - consumedFee = sdk.NewCoin(minGasPrice.Denom, consumedFeeAmount.Ceil().RoundInt()) - requiredFee = sdk.NewCoin(minGasPrice.Denom, limitFee.Ceil().RoundInt()) + consumedFeeAmount := minFeesDecCoin.Amount.Mul(gcDec) + limitFee := minFeesDecCoin.Amount.Mul(glDec) + consumedFee = sdk.NewCoin(minFeesDecCoin.Denom, consumedFeeAmount.Ceil().RoundInt()) + requiredFee = sdk.NewCoin(minFeesDecCoin.Denom, limitFee.Ceil().RoundInt()) if coinWithBaseDenom.Denom != requiredFee.Denom || !coinWithBaseDenom.IsGTE(requiredFee) { return sdk.Coin{}, sdk.Coin{}, sdkerrors.ErrInsufficientFee.Wrapf( "got: %s required: %s, minGasPrice: %s, gas: %d", coinWithBaseDenom, requiredFee, - minGasPrice, + minFeesDecCoin, gasConsumed, ) } diff --git a/x/feemarket/post/fee.go b/x/feemarket/post/fee.go index 3ccf27c3..612684d5 100644 --- a/x/feemarket/post/fee.go +++ b/x/feemarket/post/fee.go @@ -81,8 +81,8 @@ func (dfd FeeMarketDeductDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simul feeCoins := feeTx.GetFee() gas := ctx.GasMeter().GasConsumed() // use context gas consumed - if len(feeCoins) > 1 { - return ctx, feemarkettypes.ErrTooManyFeeCoins + if len(feeCoins) != 1 { + return ctx, errorsmod.Wrapf(feemarkettypes.ErrTooManyFeeCoins, "got length %d", len(feeCoins)) } ctx.Logger().Info("fee deduct post handle", @@ -91,7 +91,7 @@ func (dfd FeeMarketDeductDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simul ) if !simulate { - feeCoin, tip, err = ante.CheckTxFee(ctx, minGasPrices, feeTx, false, dfd.feemarketKeeper.GetDenomResolver()) + feeCoin, tip, err = ante.CheckTxFee(ctx, minGasPrices[0], feeTx, false, dfd.feemarketKeeper.GetDenomResolver()) if err != nil { return ctx, err } From 21395cc42252156c883d976b342ab15e6164cd43 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Mon, 13 May 2024 15:24:02 -0400 Subject: [PATCH 18/26] loop --- tests/e2e/go.mod | 2 +- tests/e2e/suite.go | 39 +++++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/tests/e2e/go.mod b/tests/e2e/go.mod index 86a03970..743e9f35 100644 --- a/tests/e2e/go.mod +++ b/tests/e2e/go.mod @@ -1,6 +1,6 @@ module github.com/skip-mev/feemarket/tests/e2e -go 1.21.4 +go 1.22 replace ( cosmossdk.io/api => cosmossdk.io/api v0.3.1 diff --git a/tests/e2e/suite.go b/tests/e2e/suite.go index 140773b7..126a96d6 100644 --- a/tests/e2e/suite.go +++ b/tests/e2e/suite.go @@ -162,23 +162,26 @@ func (s *TestSuite) TestSendTxUpdating() { s.Require().True(len(nodes) > 0) s.Run("expect fee market state to update", func() { - baseFee := s.QueryBaseFee() - - gas := int64(1000000) - minBaseFee := baseFee.MulInt(sdk.NewInt(gas)) - - // send with the exact expected fee - txResp, err := s.SendCoins( - ctx, - cosmosChain, - s.user1.KeyName(), - s.user1.FormattedAddress(), - s.user2.FormattedAddress(), - sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, sdk.NewInt(10000))), - minBaseFee, - gas, - ) - s.Require().NoError(err, txResp) - s.T().Log(txResp) + for _ = range 10 { + + baseFee := s.QueryBaseFee() + + gas := int64(1000000) + minBaseFee := baseFee.MulInt(sdk.NewInt(gas)) + + // send with the exact expected fee + txResp, err := s.SendCoins( + ctx, + cosmosChain, + s.user1.KeyName(), + s.user1.FormattedAddress(), + s.user2.FormattedAddress(), + sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, sdk.NewInt(10000))), + minBaseFee, + gas, + ) + s.Require().NoError(err, txResp) + s.T().Log(txResp) + } }) } From 160a0ee5665cc9d1967cc06158baa150db75d352 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Tue, 14 May 2024 10:29:13 -0400 Subject: [PATCH 19/26] test --- tests/e2e/setup.go | 13 ++++++--- tests/e2e/suite.go | 66 +++++++++++++++++++++++++++++++++------------- 2 files changed, 56 insertions(+), 23 deletions(-) diff --git a/tests/e2e/setup.go b/tests/e2e/setup.go index 7a443be3..ba709cf7 100644 --- a/tests/e2e/setup.go +++ b/tests/e2e/setup.go @@ -373,11 +373,13 @@ func (s *TestSuite) keyringDirFromNode() string { } // SendCoins creates a executes a SendCoins message and broadcasts the transaction. -func (s *TestSuite) SendCoins(ctx context.Context, chain *cosmos.CosmosChain, keyName, sender, receiver string, amt, fees sdk.Coins, gas int64) (string, error) { +func (s *TestSuite) SendCoins(ctx context.Context, node *cosmos.ChainNode, chain *cosmos.CosmosChain, keyName, sender, receiver string, amt, fees sdk.Coins, gas int64) (string, error) { resp, err := s.ExecTx( ctx, + node, chain, keyName, + false, "bank", "send", sender, @@ -410,6 +412,7 @@ func (s *TestSuite) GetAndFundTestUserWithMnemonic( _, err = s.SendCoins( ctx, + chain.Ge(), chain, interchaintest.FaucetAccountKeyName, interchaintest.FaucetAccountKeyName, @@ -454,12 +457,14 @@ func (s *TestSuite) GetAndFundTestUsers( } // ExecTx executes a cli command on a node, waits a block and queries the Tx to verify it was included on chain. -func (s *TestSuite) ExecTx(ctx context.Context, chain *cosmos.CosmosChain, keyName string, command ...string) (string, error) { - node := chain.FullNodes[0] - +func (s *TestSuite) ExecTx(ctx context.Context, node *cosmos.ChainNode, chain *cosmos.CosmosChain, keyName string, blocking bool, command ...string) (string, error) { resp, err := node.ExecTx(ctx, keyName, command...) s.Require().NoError(err) + if !blocking { + return resp, nil + } + height, err := chain.Height(context.Background()) s.Require().NoError(err) s.WaitForHeight(chain, height+1) diff --git a/tests/e2e/suite.go b/tests/e2e/suite.go index 126a96d6..14788782 100644 --- a/tests/e2e/suite.go +++ b/tests/e2e/suite.go @@ -152,7 +152,6 @@ func (s *TestSuite) TestQueryBaseFee() { } func (s *TestSuite) TestSendTxUpdating() { - ctx := context.Background() // cast chain to cosmos-chain cosmosChain, ok := s.chain.(*cosmos.CosmosChain) @@ -161,27 +160,56 @@ func (s *TestSuite) TestSendTxUpdating() { nodes := cosmosChain.Nodes() s.Require().True(len(nodes) > 0) + baseFee := s.QueryBaseFee() + gas := int64(1000000) + minBaseFee := baseFee.MulInt(sdk.NewInt(gas)) + s.Run("expect fee market state to update", func() { for _ = range 10 { - - baseFee := s.QueryBaseFee() - - gas := int64(1000000) - minBaseFee := baseFee.MulInt(sdk.NewInt(gas)) - + s.T().Log("sending coins") // send with the exact expected fee - txResp, err := s.SendCoins( - ctx, - cosmosChain, - s.user1.KeyName(), - s.user1.FormattedAddress(), - s.user2.FormattedAddress(), - sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, sdk.NewInt(10000))), - minBaseFee, - gas, - ) - s.Require().NoError(err, txResp) - s.T().Log(txResp) + go func() { + txResp, err := s.SendCoins( + context.Background(), + nodes[0], + cosmosChain, + s.user1.KeyName(), + s.user1.FormattedAddress(), + s.user2.FormattedAddress(), + sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, sdk.NewInt(10000))), + minBaseFee, + gas, + ) + s.Require().NoError(err, txResp) + s.T().Log(txResp) + }() + + go func() { + txResp, err := s.SendCoins( + context.Background(), + nodes[1], + cosmosChain, + s.user2.KeyName(), + s.user2.FormattedAddress(), + s.user1.FormattedAddress(), + sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, sdk.NewInt(10000))), + minBaseFee, + gas, + ) + s.Require().NoError(err, txResp) + s.T().Log(txResp) + }() + } }) + + // wait for 1 block height + // query height + height, err := s.chain.(*cosmos.CosmosChain).Height(context.Background()) + s.Require().NoError(err) + s.WaitForHeight(s.chain.(*cosmos.CosmosChain), height+1) + + state := s.QueryState() + + s.T().Log("state at block height", height+1, ":", state.String()) } From fe9f033da4ff7c0a28fd3e9b6f52eb27212e3b13 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Wed, 15 May 2024 17:12:03 -0400 Subject: [PATCH 20/26] fix --- tests/e2e/setup.go | 127 +++++++++++++++++++++++++----------- tests/e2e/suite.go | 82 +++++++++++++++-------- x/feemarket/ante/fee.go | 10 ++- x/feemarket/post/fee.go | 3 + x/feemarket/types/errors.go | 6 +- 5 files changed, 160 insertions(+), 68 deletions(-) diff --git a/tests/e2e/setup.go b/tests/e2e/setup.go index 69d12d27..dcc09d63 100644 --- a/tests/e2e/setup.go +++ b/tests/e2e/setup.go @@ -16,7 +16,7 @@ import ( "time" "cosmossdk.io/math" - + coretypes "github.com/cometbft/cometbft/rpc/core/types" rpctypes "github.com/cometbft/cometbft/rpc/core/types" comettypes "github.com/cometbft/cometbft/types" "github.com/cosmos/cosmos-sdk/client" @@ -26,6 +26,7 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/skip-mev/chaintestutil/sample" interchaintest "github.com/strangelove-ventures/interchaintest/v8" @@ -113,63 +114,58 @@ func (s *TestSuite) SimulateTx(ctx context.Context, user cosmos.User, height uin func (s *TestSuite) QueryParams() types.Params { s.T().Helper() - // cast chain to cosmos-chain - cosmosChain, ok := s.chain.(*cosmos.CosmosChain) - s.Require().True(ok) - // get nodes - nodes := cosmosChain.Nodes() - s.Require().True(len(nodes) > 0) + // get grpc address + grpcAddr := s.chain.GetHostGRPCAddress() - // make params query to first node - resp, _, err := nodes[0].ExecQuery(context.Background(), "feemarket", "params") + // create the client + cc, err := grpc.Dial(grpcAddr, grpc.WithTransportCredentials(insecure.NewCredentials())) s.Require().NoError(err) - // unmarshal params - var params types.Params - err = s.cdc.UnmarshalJSON(resp, ¶ms) + // create the oracle client + c := types.NewQueryClient(cc) + + resp, err := c.Params(context.Background(), &types.ParamsRequest{}) s.Require().NoError(err) - return params + + return resp.Params } func (s *TestSuite) QueryState() types.State { s.T().Helper() - // cast chain to cosmos-chain - cosmosChain, ok := s.chain.(*cosmos.CosmosChain) - s.Require().True(ok) - // get nodes - nodes := cosmosChain.Nodes() - s.Require().True(len(nodes) > 0) + // get grpc address + grpcAddr := s.chain.GetHostGRPCAddress() - // make params query to first node - resp, _, err := nodes[0].ExecQuery(context.Background(), "feemarket", "state") + // create the client + cc, err := grpc.Dial(grpcAddr, grpc.WithTransportCredentials(insecure.NewCredentials())) s.Require().NoError(err) - // unmarshal state - var state types.State - err = s.cdc.UnmarshalJSON(resp, &state) + // create the oracle client + c := types.NewQueryClient(cc) + + resp, err := c.State(context.Background(), &types.StateRequest{}) s.Require().NoError(err) - return state + + return resp.State } -func (s *TestSuite) QueryBaseFee() sdk.Coins { +func (s *TestSuite) QueryBaseFee() sdk.DecCoins { s.T().Helper() - // cast chain to cosmos-chain - cosmosChain, ok := s.chain.(*cosmos.CosmosChain) - s.Require().True(ok) - // get nodes - nodes := cosmosChain.Nodes() - s.Require().True(len(nodes) > 0) + // get grpc address + grpcAddr := s.chain.GetHostGRPCAddress() - // make params query to first node - resp, _, err := nodes[0].ExecQuery(context.Background(), "feemarket", "base-fee") + // create the client + cc, err := grpc.Dial(grpcAddr, grpc.WithTransportCredentials(insecure.NewCredentials())) s.Require().NoError(err) - // unmarshal state - fees, err := sdk.ParseCoinsNormalized(string(resp)) + // create the oracle client + c := types.NewQueryClient(cc) + + resp, err := c.BaseFee(context.Background(), &types.BaseFeeRequest{}) s.Require().NoError(err) - return fees + + return resp.Fees } // QueryValidators queries for all the network's validators @@ -373,12 +369,32 @@ func (s *TestSuite) keyringDirFromNode() string { return localDir } +func (s *TestSuite) SendCoins2(ctx context.Context, sender, receiver ibc.Wallet, amt, fees sdk.Coins, gas int64) (*coretypes.ResultBroadcastTxCommit, error) { + cc, ok := s.chain.(*cosmos.CosmosChain) + if !ok { + panic("unable to assert ibc.Chain as CosmosChain") + } + + msg := &banktypes.MsgSend{ + FromAddress: sender.FormattedAddress(), + ToAddress: receiver.FormattedAddress(), + Amount: amt, + } + + tx := s.CreateTx(cc, sender, fees.String(), gas, msg) + + // get an rpc endpoint for the chain + c := cc.Nodes()[0].Client + return c.BroadcastTxCommit(ctx, tx) +} + // SendCoins creates a executes a SendCoins message and broadcasts the transaction. func (s *TestSuite) SendCoins(ctx context.Context, keyName, sender, receiver string, amt, fees sdk.Coins, gas int64) (string, error) { cc, ok := s.chain.(*cosmos.CosmosChain) if !ok { panic("unable to assert ibc.Chain as CosmosChain") } + resp, err := s.ExecTx( ctx, cc, @@ -462,3 +478,40 @@ func (s *TestSuite) ExecTx(ctx context.Context, chain *cosmos.CosmosChain, keyNa return string(stdout), nil } + +// CreateTx creates a new transaction to be signed by the given user, including a provided set of messages +func (s *TestSuite) CreateTx(chain *cosmos.CosmosChain, user cosmos.User, fee string, gas int64, msgs ...sdk.Msg) []byte { + bc := cosmos.NewBroadcaster(s.T(), chain) + + ctx := context.Background() + // create tx factory + Client Context + txf, err := bc.GetFactory(ctx, user) + s.Require().NoError(err) + + cc, err := bc.GetClientContext(ctx, user) + s.Require().NoError(err) + + txf = txf.WithSimulateAndExecute(true) + + txf, err = txf.Prepare(cc) + s.Require().NoError(err) + + // get gas for tx + txf = txf.WithGas(uint64(gas)) + txf = txf.WithGasAdjustment(0) + txf = txf.WithGasPrices("") + txf = txf.WithFees(fee) + + // update sequence number + txf = txf.WithSequence(txf.Sequence()) + + // sign the tx + txBuilder, err := txf.BuildUnsignedTx(msgs...) + s.Require().NoError(err) + s.Require().NoError(tx.Sign(cc.CmdContext, txf, cc.GetFromName(), txBuilder, true)) + + // encode and return + bz, err := cc.TxConfig.TxEncoder()(txBuilder.GetTx()) + s.Require().NoError(err) + return bz +} diff --git a/tests/e2e/suite.go b/tests/e2e/suite.go index b9347055..c1ebb417 100644 --- a/tests/e2e/suite.go +++ b/tests/e2e/suite.go @@ -2,9 +2,9 @@ package e2e import ( "context" - "math/rand" - "cosmossdk.io/math" + "math/rand" + "sync" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keyring" @@ -163,50 +163,78 @@ func (s *TestSuite) TestSendTxUpdating() { baseFee := s.QueryBaseFee() gas := int64(1000000) - minBaseFee := baseFee.MulInt(math.NewInt(gas)) + minBaseFee := baseFee.MulDec(math.LegacyNewDec(gas))[0] + minBaseFeeCoins := sdk.NewCoins(sdk.NewCoin(minBaseFee.Denom, minBaseFee.Amount.TruncateInt())) + sendAmt := int64(100000) + numSends := int64(100) s.Run("expect fee market state to update", func() { - for range 10 { - s.T().Log("sending coins") + s.T().Log("performing sends") + for range numSends { // send with the exact expected fee + + wg := sync.WaitGroup{} go func() { - txResp, err := s.SendCoins( + wg.Add(1) + defer wg.Done() + txResp, err := s.SendCoins2( context.Background(), - s.user1.KeyName(), - s.user1.FormattedAddress(), - s.user2.FormattedAddress(), - sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, math.NewInt(10000))), - minBaseFee, + s.user1, + s.user2, + sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, math.NewInt(sendAmt))), + minBaseFeeCoins, gas, ) s.Require().NoError(err, txResp) - s.T().Log(txResp) + s.Require().Equal(uint32(0), txResp.CheckTx.Code, txResp) + s.Require().Equal(uint32(0), txResp.TxResult.Code, txResp) }() go func() { - txResp, err := s.SendCoins( + wg.Add(1) + defer wg.Done() + txResp, err := s.SendCoins2( context.Background(), - s.user2.KeyName(), - s.user2.FormattedAddress(), - s.user1.FormattedAddress(), - sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, math.NewInt(10000))), - minBaseFee, + s.user3, + s.user2, + sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, math.NewInt(sendAmt))), + minBaseFeeCoins, gas, ) s.Require().NoError(err, txResp) - s.T().Log(txResp) + s.Require().Equal(uint32(0), txResp.CheckTx.Code, txResp) + s.Require().Equal(uint32(0), txResp.TxResult.Code, txResp) }() + txResp, err := s.SendCoins2( + context.Background(), + s.user2, + s.user1, + sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, math.NewInt(sendAmt))), + minBaseFeeCoins, + gas, + ) + s.Require().NoError(err, txResp) + s.Require().Equal(uint32(0), txResp.CheckTx.Code, txResp) + s.Require().Equal(uint32(0), txResp.TxResult.Code, txResp) + + wg.Wait() + } - }) - // wait for 1 block height - // query height - height, err := s.chain.(*cosmos.CosmosChain).Height(context.Background()) - s.Require().NoError(err) - s.WaitForHeight(s.chain.(*cosmos.CosmosChain), height+1) + state := s.QueryState() + s.T().Log("state:", state.String()) - state := s.QueryState() + // wait for 1 block height + // query height + height, err := s.chain.(*cosmos.CosmosChain).Height(context.Background()) + s.Require().NoError(err) + s.WaitForHeight(s.chain.(*cosmos.CosmosChain), height+5) - s.T().Log("state at block height", height+1, ":", state.String()) + amt, err := s.chain.GetBalance(context.Background(), s.user1.FormattedAddress(), minBaseFee.Denom) + s.Require().NoError(err) + s.Require().True(amt.LT(math.NewInt(initBalance)), amt) + + s.T().Log("balance:", amt.String()) + }) } diff --git a/x/feemarket/ante/fee.go b/x/feemarket/ante/fee.go index 94bfc556..14b0a820 100644 --- a/x/feemarket/ante/fee.go +++ b/x/feemarket/ante/fee.go @@ -54,6 +54,9 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula gas := feeTx.GetGas() // use provided gas limit if len(feeCoins) != 1 { + if len(feeCoins) == 0 { + return ctx, errorsmod.Wrapf(feemarkettypes.ErrTest, "got length %d", len(feeCoins)) + } return ctx, errorsmod.Wrapf(feemarkettypes.ErrTooManyFeeCoins, "got length %d", len(feeCoins)) } @@ -64,7 +67,7 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula ) if !simulate { - fee, _, err := CheckTxFee(ctx, minGasPrices[0], feeTx, true, dfd.feemarketKeeper.GetDenomResolver()) + fee, _, err := CheckTxFee(ctx, minFee, feeTx, true, dfd.feemarketKeeper.GetDenomResolver()) if err != nil { return ctx, errorsmod.Wrapf(err, "error checking fee") } @@ -80,7 +83,10 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula // fees given the current state of the fee market. Returns an error if insufficient fees. func CheckTxFee(ctx sdk.Context, minFeesDecCoin sdk.DecCoin, feeTx sdk.FeeTx, isCheck bool, resolver feemarkettypes.DenomResolver) (payCoin sdk.Coin, tip sdk.Coin, err error) { if len(feeTx.GetFee()) != 1 { - return sdk.Coin{}, sdk.Coin{}, feemarkettypes.ErrTooManyFeeCoins + if len(feeTx.GetFee()) == 0 { + return sdk.Coin{}, sdk.Coin{}, errorsmod.Wrapf(feemarkettypes.ErrTest, "got length %d", len(feeTx.GetFee())) + } + return sdk.Coin{}, sdk.Coin{}, errorsmod.Wrapf(feemarkettypes.ErrTooManyFeeCoins, "got length %d", len(feeTx.GetFee())) } feeDenom := minFeesDecCoin.Denom diff --git a/x/feemarket/post/fee.go b/x/feemarket/post/fee.go index 2a5a1331..b3512c35 100644 --- a/x/feemarket/post/fee.go +++ b/x/feemarket/post/fee.go @@ -83,6 +83,9 @@ func (dfd FeeMarketDeductDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simul gas := ctx.GasMeter().GasConsumed() // use context gas consumed if len(feeCoins) != 1 { + if len(feeCoins) == 0 { + return ctx, errorsmod.Wrapf(feemarkettypes.ErrNoFeeCoins, "got length %d", len(feeCoins)) + } return ctx, errorsmod.Wrapf(feemarkettypes.ErrTooManyFeeCoins, "got length %d", len(feeCoins)) } diff --git a/x/feemarket/types/errors.go b/x/feemarket/types/errors.go index 2c93144c..9441d21f 100644 --- a/x/feemarket/types/errors.go +++ b/x/feemarket/types/errors.go @@ -5,6 +5,8 @@ import ( ) var ( - ErrTooManyFeeCoins = sdkerrors.New(ModuleName, 1, "too many fee coins provided. Only one fee coin may be provided") - ErrResolverNotSet = sdkerrors.New(ModuleName, 2, "denom resolver interface not set") + ErrNoFeeCoins = sdkerrors.New(ModuleName, 1, "no fee coin provided. Must provide one.") + ErrTooManyFeeCoins = sdkerrors.New(ModuleName, 2, "too many fee coins provided. Only one fee coin may be provided") + ErrTest = sdkerrors.New(ModuleName, 4, "TEST") + ErrResolverNotSet = sdkerrors.New(ModuleName, 3, "denom resolver interface not set") ) From d91180611681c034f163aed59133be5514391b06 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Thu, 16 May 2024 14:19:19 -0400 Subject: [PATCH 21/26] fix all --- tests/e2e/e2e_test.go | 43 ++++---- tests/e2e/go.mod | 35 +++---- tests/e2e/go.sum | 90 ++++++++-------- tests/e2e/setup.go | 15 +-- tests/e2e/suite.go | 175 ++++++++++++++++++++++++++------ x/feemarket/keeper/feemarket.go | 5 + x/feemarket/post/fee.go | 12 +++ x/feemarket/types/state.go | 2 +- 8 files changed, 258 insertions(+), 119 deletions(-) diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index 41293182..76bdac7a 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -17,6 +17,9 @@ import ( ) var ( + minBaseFee = sdkmath.LegacyNewDec(10) + baseFee = sdkmath.LegacyNewDec(1000000) + // config params numValidators = 3 numFullNodes = 1 @@ -34,28 +37,30 @@ var ( genesisKV = []cosmos.GenesisKV{ { Key: "app_state.feemarket.params", - Value: feemarkettypes.NewParams( - feemarkettypes.DefaultWindow, - feemarkettypes.DefaultAlpha, - feemarkettypes.DefaultBeta, - feemarkettypes.DefaultTheta, - feemarkettypes.DefaultDelta, - feemarkettypes.DefaultTargetBlockUtilization, - feemarkettypes.DefaultMaxBlockUtilization, - sdkmath.LegacyNewDec(1000), - feemarkettypes.DefaultMinLearningRate, - feemarkettypes.DefaultMaxLearningRate, - feemarkettypes.DefaultFeeDenom, - true, - ), + Value: feemarkettypes.Params{ + Alpha: feemarkettypes.DefaultAlpha, + Beta: feemarkettypes.DefaultBeta, + Theta: feemarkettypes.DefaultTheta, + Delta: feemarkettypes.DefaultDelta, + MinBaseFee: minBaseFee, + MinLearningRate: feemarkettypes.DefaultMinLearningRate, + MaxLearningRate: feemarkettypes.DefaultMaxLearningRate, + TargetBlockUtilization: feemarkettypes.DefaultTargetBlockUtilization / 4, + MaxBlockUtilization: feemarkettypes.DefaultMaxBlockUtilization, + Window: feemarkettypes.DefaultWindow, + FeeDenom: feemarkettypes.DefaultFeeDenom, + Enabled: true, + DistributeFees: false, + }, }, { Key: "app_state.feemarket.state", - Value: feemarkettypes.NewState( - feemarkettypes.DefaultWindow, - sdkmath.LegacyNewDec(1000), - feemarkettypes.DefaultMaxLearningRate, - ), + Value: feemarkettypes.State{ + BaseFee: baseFee, + LearningRate: feemarkettypes.DefaultMaxLearningRate, + Window: make([]uint64, feemarkettypes.DefaultWindow), + Index: 0, + }, }, } diff --git a/tests/e2e/go.mod b/tests/e2e/go.mod index 523493b3..c3645d97 100644 --- a/tests/e2e/go.mod +++ b/tests/e2e/go.mod @@ -1,8 +1,6 @@ module github.com/skip-mev/feemarket/tests/e2e -go 1.22.2 - -toolchain go1.22.3 +go 1.22.3 replace ( cosmossdk.io/client/v2 => cosmossdk.io/client/v2 v2.0.0-beta.1.0.20240124105859-5ad1805d0e79 @@ -21,19 +19,18 @@ require ( github.com/cosmos/cosmos-sdk v0.50.6 github.com/skip-mev/chaintestutil v0.0.0-20240514161515-056d7ba45610 github.com/skip-mev/feemarket v0.0.0-00010101000000-000000000000 - github.com/strangelove-ventures/interchaintest/v8 v8.2.0 + github.com/strangelove-ventures/interchaintest/v8 v8.3.0 github.com/stretchr/testify v1.9.0 go.uber.org/zap v1.27.0 - golang.org/x/sync v0.7.0 - google.golang.org/grpc v1.63.2 + google.golang.org/grpc v1.64.0 ) require ( - cloud.google.com/go v0.112.0 // indirect - cloud.google.com/go/compute v1.24.0 // indirect + cloud.google.com/go v0.112.1 // indirect + cloud.google.com/go/compute v1.25.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v1.1.6 // indirect - cloud.google.com/go/storage v1.37.0 // indirect + cloud.google.com/go/storage v1.38.0 // indirect cosmossdk.io/api v0.7.4 // indirect cosmossdk.io/collections v0.4.0 // indirect cosmossdk.io/core v0.11.0 // indirect @@ -41,6 +38,7 @@ require ( cosmossdk.io/errors v1.0.1 // indirect cosmossdk.io/log v1.3.1 // indirect cosmossdk.io/store v1.1.0 // indirect + cosmossdk.io/x/evidence v0.1.1 // indirect cosmossdk.io/x/feegrant v0.1.1 // indirect cosmossdk.io/x/tx v0.13.2 // indirect cosmossdk.io/x/upgrade v0.1.2 // indirect @@ -84,6 +82,7 @@ require ( github.com/cosmos/ibc-go/modules/capability v1.0.0 // indirect github.com/cosmos/ibc-go/v8 v8.2.0 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect + github.com/cosmos/interchain-security/v5 v5.0.0-alpha1.0.20240424193412-7cd900ad2a74 // indirect github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -127,7 +126,7 @@ require ( github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/googleapis/gax-go/v2 v2.12.2 // indirect github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -227,30 +226,32 @@ require ( github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect - go.opentelemetry.io/otel v1.22.0 // indirect - go.opentelemetry.io/otel/metric v1.22.0 // indirect - go.opentelemetry.io/otel/trace v1.22.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect + go.opentelemetry.io/otel v1.24.0 // indirect + go.opentelemetry.io/otel/metric v1.24.0 // indirect + go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.23.0 // indirect golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 // indirect golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.25.0 // indirect golang.org/x/oauth2 v0.18.0 // indirect + golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.20.0 // indirect golang.org/x/term v0.20.0 // indirect golang.org/x/text v0.15.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.21.0 // indirect - google.golang.org/api v0.162.0 // indirect + google.golang.org/api v0.169.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect google.golang.org/protobuf v1.34.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect lukechampine.com/blake3 v1.2.1 // indirect diff --git a/tests/e2e/go.sum b/tests/e2e/go.sum index 57e57501..04be5624 100644 --- a/tests/e2e/go.sum +++ b/tests/e2e/go.sum @@ -30,8 +30,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= -cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= +cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= +cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -68,8 +68,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= -cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= +cloud.google.com/go/compute v1.25.1 h1:ZRpHJedLtTpKgr3RV1Fx23NuaAEN1Zfx9hw1u4aJdjU= +cloud.google.com/go/compute v1.25.1/go.mod h1:oopOIR53ly6viBYxaDhBfJwzUAxf1zE//uf3IB011ls= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -171,8 +171,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.37.0 h1:WI8CsaFO8Q9KjPVtsZ5Cmi0dXV25zMoX0FklT7c3Jm4= -cloud.google.com/go/storage v1.37.0/go.mod h1:i34TiT2IhiNDmcj65PqwCjcoUX7Z5pLzS8DEmoiFq1k= +cloud.google.com/go/storage v1.38.0 h1:Az68ZRGlnNTpIBbLjSMIV2BDcwwXYlRlQzis0llkpJg= +cloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -186,8 +186,8 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/api v0.7.4 h1:sPo8wKwCty1lht8kgL3J7YL1voJywP3YWuA5JKkBz30= cosmossdk.io/api v0.7.4/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/client/v2 v2.0.0-20230719143845-dff6b0e26aa4 h1:rXCotxNnD0DUpcVBYojEZWUTEIJ9p+sgkpEtZlV4+pE= -cosmossdk.io/client/v2 v2.0.0-20230719143845-dff6b0e26aa4/go.mod h1:mrwVTC+6n90zDpvn4N12YJVl67QUCDQ3yEqIR4Ovp14= +cosmossdk.io/client/v2 v2.0.0-beta.1.0.20240124105859-5ad1805d0e79 h1:Hr1t0fCq1nbFC7hLs0Xvy9WAiH7Iti5iVLXMM5C37F0= +cosmossdk.io/client/v2 v2.0.0-beta.1.0.20240124105859-5ad1805d0e79/go.mod h1:8pN6LSVReNnIxrC2QGcvuIJ/m1pJN6FNYn2kAYtYftI= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= @@ -202,10 +202,10 @@ cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= cosmossdk.io/store v1.1.0/go.mod h1:oZfW/4Fc/zYqu3JmQcQdUJ3fqu5vnYTn3LZFFy8P8ng= -cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= -cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= -cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk= -cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw= +cosmossdk.io/x/circuit v0.1.1 h1:KPJCnLChWrxD4jLwUiuQaf5mFD/1m7Omyo7oooefBVQ= +cosmossdk.io/x/circuit v0.1.1/go.mod h1:B6f/urRuQH8gjt4eLIXfZJucrbreuYrKh5CSjaOxr+Q= +cosmossdk.io/x/evidence v0.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4= +cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc= cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8= cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ= cosmossdk.io/x/tx v0.13.2 h1:Kh90UH30bhnnUdJH+CmWLyaH8IKdY6BBGY3EkdOk82o= @@ -335,13 +335,11 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= -github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= +github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= @@ -389,6 +387,8 @@ github.com/cosmos/ibc-go/v8 v8.2.0 h1:7oCzyy1sZCcgpeQLnHxC56brsSz3KWwQGKXalXwXFz github.com/cosmos/ibc-go/v8 v8.2.0/go.mod h1:wj3qx75iC/XNnsMqbPDCIGs0G6Y3E/lo3bdqCyoCy+8= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= +github.com/cosmos/interchain-security/v5 v5.0.0-alpha1.0.20240424193412-7cd900ad2a74 h1:6atU/xizTL10q6EprP7oRuvfgUP2F6puvutnVoE+FRc= +github.com/cosmos/interchain-security/v5 v5.0.0-alpha1.0.20240424193412-7cd900ad2a74/go.mod h1:h/RkwOppo5AJj+1pkQyfjqU1MPdpohD/S6oEeAXpGZY= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= @@ -461,8 +461,6 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/ethereum/go-ethereum v1.13.15 h1:U7sSGYGo4SPjP6iNIifNoyIAiNjrmQkz6EwQG+/EZWo= github.com/ethereum/go-ethereum v1.13.15/go.mod h1:TN8ZiHrdJwSe8Cb6x+p0hs5CxhJZPbqB7hHkaUXcmIU= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -658,8 +656,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= -github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA= +github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= @@ -716,8 +714,8 @@ github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerX github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= -github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -925,8 +923,8 @@ github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042 github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= -github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -944,6 +942,8 @@ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnh github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/oxyno-zeta/gomock-extra-matcher v1.2.0 h1:WPEclU0y0PMwUzdDcaKZvld4aXpa3fkzjiUMQdcBEHg= +github.com/oxyno-zeta/gomock-extra-matcher v1.2.0/go.mod h1:S0r7HmKeCGsHmvIVFMjKWwswb4+30nCNWbXRMBVPkaU= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -1075,8 +1075,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= -github.com/strangelove-ventures/interchaintest/v8 v8.2.0 h1:EZXPvZXL1y/kvh9XI04A2stL+2UMvykhNUv28euRnL8= -github.com/strangelove-ventures/interchaintest/v8 v8.2.0/go.mod h1:pupV0YN3A56/u9kHj9U1F8MdDUEolBIn05F0W1q/0oI= +github.com/strangelove-ventures/interchaintest/v8 v8.3.0 h1:1XyATc0JkvzDhBS71CdpM5z1t6bmO9PgH/5/nffoM9Q= +github.com/strangelove-ventures/interchaintest/v8 v8.3.0/go.mod h1:5goHQtgWO9khoUO/SfR//w3uaw/uYVriDR1OY6PyydM= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1156,18 +1156,18 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= -go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y= -go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= -go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg= -go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= -go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= -go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0= -go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= +go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= +go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1176,6 +1176,8 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU= +go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= @@ -1592,8 +1594,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.162.0 h1:Vhs54HkaEpkMBdgGdOT2P6F0csGG/vxDS0hWHJzmmps= -google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= +google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY= +google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1713,8 +1715,8 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= -google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= +google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4= +google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE= google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -1758,8 +1760,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= -google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= +google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/tests/e2e/setup.go b/tests/e2e/setup.go index dcc09d63..1c148f02 100644 --- a/tests/e2e/setup.go +++ b/tests/e2e/setup.go @@ -369,19 +369,22 @@ func (s *TestSuite) keyringDirFromNode() string { return localDir } -func (s *TestSuite) SendCoins2(ctx context.Context, sender, receiver ibc.Wallet, amt, fees sdk.Coins, gas int64) (*coretypes.ResultBroadcastTxCommit, error) { +func (s *TestSuite) SendCoinsMultiBroadcast(ctx context.Context, sender, receiver ibc.Wallet, amt, fees sdk.Coins, gas int64, numMsg int) (*coretypes.ResultBroadcastTxCommit, error) { cc, ok := s.chain.(*cosmos.CosmosChain) if !ok { panic("unable to assert ibc.Chain as CosmosChain") } - msg := &banktypes.MsgSend{ - FromAddress: sender.FormattedAddress(), - ToAddress: receiver.FormattedAddress(), - Amount: amt, + msgs := make([]sdk.Msg, numMsg) + for i := 0; i < numMsg; i++ { + msgs[i] = &banktypes.MsgSend{ + FromAddress: sender.FormattedAddress(), + ToAddress: receiver.FormattedAddress(), + Amount: amt, + } } - tx := s.CreateTx(cc, sender, fees.String(), gas, msg) + tx := s.CreateTx(cc, sender, fees.String(), gas, msgs...) // get an rpc endpoint for the chain c := cc.Nodes()[0].Client diff --git a/tests/e2e/suite.go b/tests/e2e/suite.go index c1ebb417..a1b1dd58 100644 --- a/tests/e2e/suite.go +++ b/tests/e2e/suite.go @@ -2,10 +2,12 @@ package e2e import ( "context" - "cosmossdk.io/math" + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" "math/rand" "sync" + "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" @@ -17,7 +19,7 @@ import ( ) const ( - initBalance = 10000000000000 + initBalance = 30000000000000 ) var r *rand.Rand @@ -119,8 +121,9 @@ func (s *TestSuite) SetupSubTest() { s.WaitForHeight(s.chain.(*cosmos.CosmosChain), height+1) state := s.QueryState() - s.T().Log("state at block height", height+1, ":", state.String()) + fee := s.QueryBaseFee() + s.T().Log("fee at block height", height+1, ":", fee.String()) } func (s *TestSuite) TestQueryParams() { @@ -153,7 +156,7 @@ func (s *TestSuite) TestQueryBaseFee() { }) } -func (s *TestSuite) TestSendTxUpdating() { +func (s *TestSuite) TestSendTxDecrease() { // cast chain to cosmos-chain cosmosChain, ok := s.chain.(*cosmos.CosmosChain) s.Require().True(ok) @@ -161,80 +164,188 @@ func (s *TestSuite) TestSendTxUpdating() { nodes := cosmosChain.Nodes() s.Require().True(len(nodes) > 0) + params := s.QueryParams() + baseFee := s.QueryBaseFee() - gas := int64(1000000) + gas := int64(200000) minBaseFee := baseFee.MulDec(math.LegacyNewDec(gas))[0] minBaseFeeCoins := sdk.NewCoins(sdk.NewCoin(minBaseFee.Denom, minBaseFee.Amount.TruncateInt())) sendAmt := int64(100000) - numSends := int64(100) - s.Run("expect fee market state to update", func() { - s.T().Log("performing sends") - for range numSends { + s.Run("expect fee market state to decrease", func() { + s.T().Log("performing sends...") + for { // send with the exact expected fee wg := sync.WaitGroup{} + wg.Add(3) + go func() { - wg.Add(1) defer wg.Done() - txResp, err := s.SendCoins2( + txResp, err := s.SendCoinsMultiBroadcast( context.Background(), s.user1, s.user2, sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, math.NewInt(sendAmt))), minBaseFeeCoins, gas, + 1, ) s.Require().NoError(err, txResp) - s.Require().Equal(uint32(0), txResp.CheckTx.Code, txResp) - s.Require().Equal(uint32(0), txResp.TxResult.Code, txResp) + s.Require().Equal(uint32(0), txResp.CheckTx.Code, txResp.CheckTx) + s.Require().Equal(uint32(0), txResp.TxResult.Code, txResp.TxResult) }() go func() { - wg.Add(1) defer wg.Done() - txResp, err := s.SendCoins2( + txResp, err := s.SendCoinsMultiBroadcast( context.Background(), s.user3, s.user2, sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, math.NewInt(sendAmt))), minBaseFeeCoins, gas, + 1, ) s.Require().NoError(err, txResp) - s.Require().Equal(uint32(0), txResp.CheckTx.Code, txResp) - s.Require().Equal(uint32(0), txResp.TxResult.Code, txResp) + s.Require().Equal(uint32(0), txResp.CheckTx.Code, txResp.CheckTx) + s.Require().Equal(uint32(0), txResp.TxResult.Code, txResp.TxResult) }() - txResp, err := s.SendCoins2( - context.Background(), - s.user2, - s.user1, - sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, math.NewInt(sendAmt))), - minBaseFeeCoins, - gas, - ) - s.Require().NoError(err, txResp) - s.Require().Equal(uint32(0), txResp.CheckTx.Code, txResp) - s.Require().Equal(uint32(0), txResp.TxResult.Code, txResp) + go func() { + defer wg.Done() + txResp, err := s.SendCoinsMultiBroadcast( + context.Background(), + s.user2, + s.user3, + sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, math.NewInt(sendAmt))), + minBaseFeeCoins, + gas, + 1, + ) + s.Require().NoError(err, txResp) + s.Require().Equal(uint32(0), txResp.CheckTx.Code, txResp.CheckTx) + s.Require().Equal(uint32(0), txResp.TxResult.Code, txResp.TxResult) + }() wg.Wait() + fee := s.QueryBaseFee() + s.T().Log("base fee", fee.String()) + if fee.AmountOf(feemarkettypes.DefaultFeeDenom).Equal(params.MinBaseFee) { + break + } } - state := s.QueryState() - s.T().Log("state:", state.String()) - - // wait for 1 block height + // wait for 5 blocks // query height height, err := s.chain.(*cosmos.CosmosChain).Height(context.Background()) s.Require().NoError(err) s.WaitForHeight(s.chain.(*cosmos.CosmosChain), height+5) + fee := s.QueryBaseFee() + s.T().Log("base fee", fee.String()) + amt, err := s.chain.GetBalance(context.Background(), s.user1.FormattedAddress(), minBaseFee.Denom) s.Require().NoError(err) s.Require().True(amt.LT(math.NewInt(initBalance)), amt) + s.T().Log("balance:", amt.String()) + }) +} + +func (s *TestSuite) TestSendTxIncrease() { + // cast chain to cosmos-chain + cosmosChain, ok := s.chain.(*cosmos.CosmosChain) + s.Require().True(ok) + // get nodes + nodes := cosmosChain.Nodes() + s.Require().True(len(nodes) > 0) + + baseFee := s.QueryBaseFee() + gas := int64(20000100) + sendAmt := int64(100) + + s.Run("expect fee market fee to increase", func() { + s.T().Log("performing sends...") + for { + // send with the exact expected fee + baseFee = s.QueryBaseFee() + minBaseFee := baseFee.MulDec(math.LegacyNewDec(gas))[0] + // add headroom + minBaseFeeCoins := sdk.NewCoins(sdk.NewCoin(minBaseFee.Denom, minBaseFee.Amount.Add(math.LegacyNewDec(10)).TruncateInt())) + + wg := sync.WaitGroup{} + wg.Add(3) + + go func() { + defer wg.Done() + txResp, err := s.SendCoinsMultiBroadcast( + context.Background(), + s.user1, + s.user2, + sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, math.NewInt(sendAmt))), + minBaseFeeCoins, + gas, + 400, + ) + s.Require().NoError(err, txResp) + s.Require().Equal(uint32(0), txResp.CheckTx.Code, txResp.CheckTx) + s.Require().Equal(uint32(0), txResp.TxResult.Code, txResp.TxResult) + }() + + go func() { + defer wg.Done() + txResp, err := s.SendCoinsMultiBroadcast( + context.Background(), + s.user3, + s.user2, + sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, math.NewInt(sendAmt))), + minBaseFeeCoins, + gas, + 400, + ) + s.Require().NoError(err, txResp) + s.Require().Equal(uint32(0), txResp.CheckTx.Code, txResp.CheckTx) + s.Require().Equal(uint32(0), txResp.TxResult.Code, txResp.TxResult) + }() + + go func() { + defer wg.Done() + txResp, err := s.SendCoinsMultiBroadcast( + context.Background(), + s.user2, + s.user1, + sdk.NewCoins(sdk.NewCoin(cosmosChain.Config().Denom, math.NewInt(sendAmt))), + minBaseFeeCoins, + gas, + 400, + ) + s.Require().NoError(err, txResp) + s.Require().Equal(uint32(0), txResp.CheckTx.Code, txResp.CheckTx) + s.Require().Equal(uint32(0), txResp.TxResult.Code, txResp.TxResult) + }() + + wg.Wait() + baseFee = s.QueryBaseFee() + s.T().Log("base fee", baseFee.String()) + if baseFee.AmountOf(feemarkettypes.DefaultFeeDenom).GT(math.LegacyNewDec(1000000)) { + break + } + } + + // wait for 5 blocks + // query height + height, err := s.chain.(*cosmos.CosmosChain).Height(context.Background()) + s.Require().NoError(err) + s.WaitForHeight(s.chain.(*cosmos.CosmosChain), height+5) + + fee := s.QueryBaseFee() + s.T().Log("base fee", fee.String()) + + amt, err := s.chain.GetBalance(context.Background(), s.user1.FormattedAddress(), baseFee[0].Denom) + s.Require().NoError(err) + s.Require().True(amt.LT(math.NewInt(initBalance)), amt) s.T().Log("balance:", amt.String()) }) } diff --git a/x/feemarket/keeper/feemarket.go b/x/feemarket/keeper/feemarket.go index 544ee205..46eaefe9 100644 --- a/x/feemarket/keeper/feemarket.go +++ b/x/feemarket/keeper/feemarket.go @@ -16,6 +16,11 @@ func (k *Keeper) UpdateFeeMarket(ctx sdk.Context) error { return err } + k.Logger(ctx).Info( + "updated the fee market", + "params", params, + ) + if !params.Enabled { return nil } diff --git a/x/feemarket/post/fee.go b/x/feemarket/post/fee.go index b3512c35..63b21fff 100644 --- a/x/feemarket/post/fee.go +++ b/x/feemarket/post/fee.go @@ -115,11 +115,23 @@ func (dfd FeeMarketDeductDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simul return ctx, errorsmod.Wrapf(err, "unable to update fee market state") } + ctx.Logger().Info("fee deduct post handle", + "NEW STATE", state, + ) + err = dfd.feemarketKeeper.SetState(ctx, state) if err != nil { return ctx, errorsmod.Wrapf(err, "unable to set fee market state") } + state, err = dfd.feemarketKeeper.GetState(ctx) + if err != nil { + return ctx, errorsmod.Wrapf(err, "unable to get fee market state") + } + ctx.Logger().Info("fee deduct post handle", + "NEWEST STATE", state, + ) + return next(ctx, tx, simulate, success) } diff --git a/x/feemarket/types/state.go b/x/feemarket/types/state.go index 64e95655..b887c4e6 100644 --- a/x/feemarket/types/state.go +++ b/x/feemarket/types/state.go @@ -28,7 +28,7 @@ func NewState( func (s *State) Update(gas uint64, params Params) error { update := s.Window[s.Index] + gas if update > params.MaxBlockUtilization { - return fmt.Errorf("block utilization cannot exceed max block utilization") + return fmt.Errorf("block utilization of %d cannot exceed max block utilization of %d", update, params.MaxBlockUtilization) } s.Window[s.Index] = update From cc18e27483820e7abc00f50b2a8c1b7c769e926b Mon Sep 17 00:00:00 2001 From: aljo242 Date: Thu, 16 May 2024 14:19:43 -0400 Subject: [PATCH 22/26] fmt --- tests/e2e/suite.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/e2e/suite.go b/tests/e2e/suite.go index a1b1dd58..39c8546a 100644 --- a/tests/e2e/suite.go +++ b/tests/e2e/suite.go @@ -2,10 +2,11 @@ package e2e import ( "context" - feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" "math/rand" "sync" + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" + "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/codec" From 0b1c7cb941d28148c24f21ea50c6071da2327690 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Thu, 16 May 2024 14:21:49 -0400 Subject: [PATCH 23/26] fix --- x/feemarket/post/fee.go | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/x/feemarket/post/fee.go b/x/feemarket/post/fee.go index 63b21fff..b3512c35 100644 --- a/x/feemarket/post/fee.go +++ b/x/feemarket/post/fee.go @@ -115,23 +115,11 @@ func (dfd FeeMarketDeductDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simul return ctx, errorsmod.Wrapf(err, "unable to update fee market state") } - ctx.Logger().Info("fee deduct post handle", - "NEW STATE", state, - ) - err = dfd.feemarketKeeper.SetState(ctx, state) if err != nil { return ctx, errorsmod.Wrapf(err, "unable to set fee market state") } - state, err = dfd.feemarketKeeper.GetState(ctx) - if err != nil { - return ctx, errorsmod.Wrapf(err, "unable to get fee market state") - } - ctx.Logger().Info("fee deduct post handle", - "NEWEST STATE", state, - ) - return next(ctx, tx, simulate, success) } From d2a3fab635ccabd129881ebd44eb73fb35c769b0 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Fri, 17 May 2024 13:50:05 -0400 Subject: [PATCH 24/26] fix --- x/feemarket/ante/fee.go | 4 ++-- x/feemarket/types/errors.go | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/x/feemarket/ante/fee.go b/x/feemarket/ante/fee.go index 14b0a820..838f7f6f 100644 --- a/x/feemarket/ante/fee.go +++ b/x/feemarket/ante/fee.go @@ -55,7 +55,7 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula if len(feeCoins) != 1 { if len(feeCoins) == 0 { - return ctx, errorsmod.Wrapf(feemarkettypes.ErrTest, "got length %d", len(feeCoins)) + return ctx, errorsmod.Wrapf(feemarkettypes.ErrNoFeeCoins, "got length %d", len(feeCoins)) } return ctx, errorsmod.Wrapf(feemarkettypes.ErrTooManyFeeCoins, "got length %d", len(feeCoins)) } @@ -84,7 +84,7 @@ func (dfd FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula func CheckTxFee(ctx sdk.Context, minFeesDecCoin sdk.DecCoin, feeTx sdk.FeeTx, isCheck bool, resolver feemarkettypes.DenomResolver) (payCoin sdk.Coin, tip sdk.Coin, err error) { if len(feeTx.GetFee()) != 1 { if len(feeTx.GetFee()) == 0 { - return sdk.Coin{}, sdk.Coin{}, errorsmod.Wrapf(feemarkettypes.ErrTest, "got length %d", len(feeTx.GetFee())) + return sdk.Coin{}, sdk.Coin{}, errorsmod.Wrapf(feemarkettypes.ErrNoFeeCoins, "got length %d", len(feeTx.GetFee())) } return sdk.Coin{}, sdk.Coin{}, errorsmod.Wrapf(feemarkettypes.ErrTooManyFeeCoins, "got length %d", len(feeTx.GetFee())) } diff --git a/x/feemarket/types/errors.go b/x/feemarket/types/errors.go index 9441d21f..3c506e34 100644 --- a/x/feemarket/types/errors.go +++ b/x/feemarket/types/errors.go @@ -7,6 +7,5 @@ import ( var ( ErrNoFeeCoins = sdkerrors.New(ModuleName, 1, "no fee coin provided. Must provide one.") ErrTooManyFeeCoins = sdkerrors.New(ModuleName, 2, "too many fee coins provided. Only one fee coin may be provided") - ErrTest = sdkerrors.New(ModuleName, 4, "TEST") ErrResolverNotSet = sdkerrors.New(ModuleName, 3, "denom resolver interface not set") ) From 462ae184c90a10bfaca4a97182bb7a5eabd137c0 Mon Sep 17 00:00:00 2001 From: aljo242 Date: Fri, 17 May 2024 13:51:30 -0400 Subject: [PATCH 25/26] fix --- tests/app/app.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/app/app.go b/tests/app/app.go index ea89f144..ee28ab3d 100644 --- a/tests/app/app.go +++ b/tests/app/app.go @@ -508,9 +508,6 @@ func NewSimApp( // set denom resolver to test variant. app.FeeMarketKeeper.SetDenomResolver(&feemarkettypes.TestDenomResolver{}) - // set denom resolver to test variant. - app.FeeMarketKeeper.SetDenomResolver(&feemarkettypes.TestDenomResolver{}) - // Create a global ante handler that will be called on each transaction when // proposals are being built and verified. anteHandlerOptions := ante.HandlerOptions{ From fcba6f64c0286aea8fc682c03f63f3bddfde2cfd Mon Sep 17 00:00:00 2001 From: aljo242 Date: Fri, 17 May 2024 14:20:47 -0400 Subject: [PATCH 26/26] ok --- tests/e2e/suite.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/e2e/suite.go b/tests/e2e/suite.go index 39c8546a..88eebb2e 100644 --- a/tests/e2e/suite.go +++ b/tests/e2e/suite.go @@ -157,6 +157,8 @@ func (s *TestSuite) TestQueryBaseFee() { }) } +// TestSendTxDecrease tests that the feemarket will decrease until it hits the min base fee +// when gas utilization is below the target block utilization. func (s *TestSuite) TestSendTxDecrease() { // cast chain to cosmos-chain cosmosChain, ok := s.chain.(*cosmos.CosmosChain) @@ -254,6 +256,8 @@ func (s *TestSuite) TestSendTxDecrease() { }) } +// TestSendTxIncrease tests that the feemarket will increase +// when gas utilization is above the target block utilization. func (s *TestSuite) TestSendTxIncrease() { // cast chain to cosmos-chain cosmosChain, ok := s.chain.(*cosmos.CosmosChain)