Skip to content

Commit

Permalink
squashed v3.0.0
Browse files Browse the repository at this point in the history
git diff v3.0.0 - ''

## What's Changed
* Feature: global fee ante handle sets gas for fee deduction by @edjroz in #97
* DAPP-573 - Fee Abstraction Module by @ash-burnt in #91
* add upgrade for fee abstraction by @ash-burnt in #101

adding fee abstraction

**Full Changelog**: v2.0.0...v3.0.0
  • Loading branch information
2xburnt committed Dec 21, 2024
1 parent 5d93e6b commit 9bdca9c
Show file tree
Hide file tree
Showing 11 changed files with 143 additions and 665 deletions.
19 changes: 15 additions & 4 deletions app/ante.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package app

import (
errorsmod "cosmossdk.io/errors"
globalfeeante "github.com/burnt-labs/xion/x/globalfee/ante"
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
Expand All @@ -12,12 +13,12 @@ import (
"github.com/cosmos/ibc-go/v7/modules/core/keeper"
"github.com/larry0x/abstract-account/x/abstractaccount"
aakeeper "github.com/larry0x/abstract-account/x/abstractaccount/keeper"
feeabsante "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ante"
feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper"

wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types"
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"

globalfeeante "github.com/burnt-labs/xion/x/globalfee/ante"
)

// HandlerOptions extend the SDK's AnteHandler options by requiring the IBC
Expand All @@ -31,6 +32,7 @@ type HandlerOptions struct {
GlobalFeeSubspace paramtypes.Subspace
StakingKeeper *stakingkeeper.Keeper
AbstractAccountKeeper aakeeper.Keeper
FeeAbsKeeper *feeabskeeper.Keeper
}

func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
Expand All @@ -55,18 +57,27 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
if options.TXCounterStoreKey == nil {
return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "tx counter key is required for ante builder")
}
if options.FeeAbsKeeper == nil {
return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "fee abstraction keeper is required for AnteHandler")
}

anteDecorators := []sdk.AnteDecorator{
ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first
wasmkeeper.NewLimitSimulationGasDecorator(options.WasmConfig.SimulationGasLimit), // after setup context to enforce limits early
wasmkeeper.NewCountTXDecorator(options.TXCounterStoreKey),
ante.NewExtensionOptionsDecorator(options.ExtensionOptionChecker),
// this changes the minGasFees,
// and must occur before gas fee checks
globalfeeante.NewFeeDecorator(options.GlobalFeeSubspace, options.StakingKeeper.BondDenom),
feeabsante.NewFeeAbstrationMempoolFeeDecorator(*options.FeeAbsKeeper),

// validation checks
ante.NewValidateBasicDecorator(),
ante.NewTxTimeoutHeightDecorator(),
ante.NewValidateMemoDecorator(options.AccountKeeper),
ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),
globalfeeante.NewFeeDecorator(options.GlobalFeeSubspace, options.StakingKeeper.BondDenom), //
ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker),
// fee abstraction fee deduction replaces sdk fee deduction
feeabsante.NewFeeAbstractionDeductFeeDecorate(options.AccountKeeper, options.BankKeeper, *options.FeeAbsKeeper, options.FeegrantKeeper),
ante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators
ante.NewValidateSigCountDecorator(options.AccountKeeper),
ante.NewSigGasConsumeDecorator(options.AccountKeeper, options.SigGasConsumer),
Expand Down
62 changes: 51 additions & 11 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
autocliv1 "cosmossdk.io/api/cosmos/autocli/v1"
reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1"

"github.com/burnt-labs/xion/x/globalfee"
dbm "github.com/cometbft/cometbft-db"
abci "github.com/cometbft/cometbft/abci/types"
"github.com/cometbft/cometbft/libs/log"
Expand Down Expand Up @@ -91,7 +92,7 @@ import (
"github.com/cosmos/cosmos-sdk/x/staking"
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
"github.com/cosmos/cosmos-sdk/x/upgrade"
upgrademodule "github.com/cosmos/cosmos-sdk/x/upgrade"
upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client"
upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
Expand All @@ -112,7 +113,7 @@ import (
ibcfee "github.com/cosmos/ibc-go/v7/modules/apps/29-fee"
ibcfeekeeper "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/keeper"
ibcfeetypes "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types"
transfer "github.com/cosmos/ibc-go/v7/modules/apps/transfer"
"github.com/cosmos/ibc-go/v7/modules/apps/transfer"
ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper"
ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types"
ibc "github.com/cosmos/ibc-go/v7/modules/core"
Expand All @@ -126,6 +127,10 @@ import (
aa "github.com/larry0x/abstract-account/x/abstractaccount"
aakeeper "github.com/larry0x/abstract-account/x/abstractaccount/keeper"
aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types"
"github.com/osmosis-labs/fee-abstraction/v4/x/feeabs"
feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper"
feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types"

"github.com/spf13/cast"

"github.com/CosmWasm/wasmd/x/wasm"
Expand All @@ -140,8 +145,7 @@ import (
xionkeeper "github.com/burnt-labs/xion/x/xion/keeper"
xiontypes "github.com/burnt-labs/xion/x/xion/types"

v2 "github.com/burnt-labs/xion/app/upgrades/v2"
"github.com/burnt-labs/xion/x/globalfee"
v3 "github.com/burnt-labs/xion/app/upgrades/v3"
)

const appName = "XionApp"
Expand All @@ -158,7 +162,7 @@ var (
// of "EnableAllProposals" (takes precedence over ProposalsEnabled)
// https://github.com/CosmWasm/wasmd/blob/02a54d33ff2c064f3539ae12d75d027d9c665f05/x/wasm/internal/types/proposal.go#L28-L34
EnableSpecificProposals = ""
Upgrades = []upgrades.Upgrade{v2.Upgrade}
Upgrades = []upgrades.Upgrade{v3.Upgrade}
)

// GetEnabledProposals parses the ProposalsEnabled / EnableSpecificProposals values to
Expand Down Expand Up @@ -218,13 +222,16 @@ var (
upgradeclient.LegacyCancelProposalHandler,
ibcclientclient.UpdateClientProposalHandler,
ibcclientclient.UpgradeProposalHandler,
feeabs.UpdateAddHostZoneClientProposalHandler,
feeabs.UpdateDeleteHostZoneClientProposalHandler,
feeabs.UpdateSetHostZoneClientProposalHandler,
},
),
params.AppModuleBasic{},
crisis.AppModuleBasic{},
slashing.AppModuleBasic{},
feegrantmodule.AppModuleBasic{},
upgrade.AppModuleBasic{},
upgrademodule.AppModuleBasic{},
evidence.AppModuleBasic{},
authzmodule.AppModuleBasic{},
groupmodule.AppModuleBasic{},
Expand All @@ -243,6 +250,7 @@ var (
ibcfee.AppModuleBasic{},
ibchooks.AppModuleBasic{},
packetforward.AppModuleBasic{},
feeabs.AppModuleBasic{},
)

// module account permissions
Expand All @@ -261,6 +269,9 @@ var (
globalfee.ModuleName: nil,
aatypes.ModuleName: nil,
xiontypes.ModuleName: nil,
packetforwardtypes.ModuleName: nil,
ibchookstypes.ModuleName: nil,
feeabstypes.ModuleName: nil,
}
)

Expand Down Expand Up @@ -311,6 +322,7 @@ type WasmApp struct {
IBCHooksKeeper *ibchookskeeper.Keeper
ContractKeeper *wasmkeeper.PermissionedKeeper
PacketForwardKeeper *packetforwardkeeper.Keeper
FeeAbsKeeper feeabskeeper.Keeper

XionKeeper xionkeeper.Keeper

Expand All @@ -320,6 +332,7 @@ type WasmApp struct {
ScopedTransferKeeper capabilitykeeper.ScopedKeeper
ScopedIBCFeeKeeper capabilitykeeper.ScopedKeeper
ScopedWasmKeeper capabilitykeeper.ScopedKeeper
ScopedFeeabsKeeper capabilitykeeper.ScopedKeeper

// IBC middleware wrappers
Ics20WasmHooks *ibchooks.WasmHooks
Expand Down Expand Up @@ -368,7 +381,7 @@ func NewWasmApp(
ibcexported.StoreKey, ibctransfertypes.StoreKey, ibcfeetypes.StoreKey,
wasm.StoreKey, icahosttypes.StoreKey, aatypes.StoreKey,
icacontrollertypes.StoreKey, globalfee.StoreKey, xiontypes.StoreKey,
ibchookstypes.StoreKey, packetforwardtypes.StoreKey,
ibchookstypes.StoreKey, packetforwardtypes.StoreKey, feeabstypes.StoreKey,
)

tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey)
Expand Down Expand Up @@ -414,6 +427,7 @@ func NewWasmApp(
scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName)
scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName)
scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasm.ModuleName)
scopedFeeabsKeeper := app.CapabilityKeeper.ScopeToModule(feeabstypes.ModuleName)
app.CapabilityKeeper.Seal()

// add keepers
Expand Down Expand Up @@ -519,15 +533,33 @@ func NewWasmApp(
scopedIBCKeeper,
)

app.FeeAbsKeeper = feeabskeeper.NewKeeper(
appCodec,
keys[feeabstypes.StoreKey],
keys[feeabstypes.MemStoreKey],
app.GetSubspace(feeabstypes.ModuleName),
app.StakingKeeper,
app.AccountKeeper,
app.BankKeeper,
app.TransferKeeper,
app.IBCKeeper.ChannelKeeper,
&app.IBCKeeper.PortKeeper,
scopedFeeabsKeeper,
)

feeabsModule := feeabs.NewAppModule(appCodec, app.FeeAbsKeeper)
feeabsIBCModule := feeabs.NewIBCModule(appCodec, app.FeeAbsKeeper)

// Register the proposal types
// Deprecated: Avoid adding new handlers, instead use the new proposal flow
// by granting the governance module the right to execute the message.
// See: https://docs.cosmos.network/main/modules/gov#proposal-messages
govRouter := govv1beta1.NewRouter()
govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler).
AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). // This should be removed. It is still in place to avoid failures of modules that have not yet been upgraded.
AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)).
AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper))
AddRoute(upgradetypes.RouterKey, upgrademodule.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)).
AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper)).
AddRoute(feeabstypes.RouterKey, feeabs.NewHostZoneProposal(app.FeeAbsKeeper))

govConfig := govtypes.DefaultConfig()
/*
Expand Down Expand Up @@ -733,7 +765,8 @@ func NewWasmApp(
AddRoute(ibctransfertypes.ModuleName, transferStack).
AddRoute(wasm.ModuleName, wasmStack).
AddRoute(icacontrollertypes.SubModuleName, icaControllerStack).
AddRoute(icahosttypes.SubModuleName, icaHostStack)
AddRoute(icahosttypes.SubModuleName, icaHostStack).
AddRoute(feeabstypes.ModuleName, feeabsIBCModule)
app.IBCKeeper.SetRouter(ibcRouter)

/**** Module Options ****/
Expand Down Expand Up @@ -761,7 +794,7 @@ func NewWasmApp(
slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName)),
distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)),
staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)),
upgrade.NewAppModule(app.UpgradeKeeper),
upgrademodule.NewAppModule(app.UpgradeKeeper),
evidence.NewAppModule(app.EvidenceKeeper),
params.NewAppModule(app.ParamsKeeper),
authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
Expand All @@ -778,6 +811,7 @@ func NewWasmApp(
ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper),
ibchooks.NewAppModule(app.AccountKeeper),
packetforward.NewAppModule(app.PacketForwardKeeper),
feeabsModule,
crisis.NewAppModule(app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), // always be last to make sure that it checks for all invariants and not only part of them
)

Expand All @@ -799,6 +833,7 @@ func NewWasmApp(
// additional non simd modules
ibctransfertypes.ModuleName,
ibcexported.ModuleName,
feeabstypes.ModuleName,
icatypes.ModuleName,
ibcfeetypes.ModuleName,
wasm.ModuleName,
Expand All @@ -820,6 +855,7 @@ func NewWasmApp(
// additional non simd modules
ibctransfertypes.ModuleName,
ibcexported.ModuleName,
feeabstypes.ModuleName,
icatypes.ModuleName,
ibcfeetypes.ModuleName,
wasm.ModuleName,
Expand All @@ -845,6 +881,7 @@ func NewWasmApp(
// additional non simd modules
ibctransfertypes.ModuleName,
ibcexported.ModuleName,
feeabstypes.ModuleName,
icatypes.ModuleName,
ibcfeetypes.ModuleName,
// wasm after ibc transfer
Expand Down Expand Up @@ -977,6 +1014,7 @@ func (app *WasmApp) setAnteHandler(txConfig client.TxConfig, wasmConfig wasmtype
TXCounterStoreKey: txCounterStoreKey,
GlobalFeeSubspace: app.GetSubspace(globalfee.ModuleName),
StakingKeeper: app.StakingKeeper,
FeeAbsKeeper: &app.FeeAbsKeeper,
},
)
if err != nil {
Expand Down Expand Up @@ -1189,6 +1227,7 @@ func BlockedAddresses() map[string]bool {

// allow the following addresses to receive funds
delete(modAccAddrs, authtypes.NewModuleAddress(govtypes.ModuleName).String())
delete(modAccAddrs, authtypes.NewModuleAddress(feeabstypes.ModuleName).String())

return modAccAddrs
}
Expand All @@ -1214,6 +1253,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino
paramsKeeper.Subspace(wasm.ModuleName)
paramsKeeper.Subspace(aatypes.ModuleName)
paramsKeeper.Subspace(packetforwardtypes.ModuleName)
paramsKeeper.Subspace(feeabstypes.ModuleName)

return paramsKeeper
}
23 changes: 23 additions & 0 deletions app/upgrades/v3/constants.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package v3

import (
store "github.com/cosmos/cosmos-sdk/store/types"
feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types"

"github.com/burnt-labs/xion/app/upgrades"
)

const (
// UpgradeName defines the on-chain upgrade name.
UpgradeName = "v3"
)

var Upgrade = upgrades.Upgrade{
UpgradeName: UpgradeName,
CreateUpgradeHandler: CreateUpgradeHandler,
StoreUpgrades: store.StoreUpgrades{
Added: []string{
feeabstypes.ModuleName,
},
},
}
24 changes: 24 additions & 0 deletions app/upgrades/v3/upgrades.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package v3

import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
)

func CreateUpgradeHandler(
mm *module.Manager,
configurator module.Configurator,
) upgradetypes.UpgradeHandler {
return func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {
ctx.Logger().Info("Starting module migrations...")

vm, err := mm.RunMigrations(ctx, configurator, vm)
if err != nil {
return vm, err
}

ctx.Logger().Info("Upgrade complete")
return vm, err
}
}
9 changes: 6 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,11 @@ require (
github.com/armon/go-metrics v0.4.1
github.com/cometbft/cometbft v0.37.2
github.com/cometbft/cometbft-db v0.8.0
github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230726182236-3a9d46a7c2a4
github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4
github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79
github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350
github.com/golang/mock v1.6.0
github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f
github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d
github.com/spf13/viper v1.16.0
gotest.tools/v3 v3.5.0
sigs.k8s.io/yaml v1.3.0
Expand Down Expand Up @@ -94,7 +95,7 @@ require (
github.com/go-logfmt/logfmt v0.6.0 // indirect
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
github.com/gogo/googleapis v1.4.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/gogo/protobuf v1.3.3 // indirect
github.com/golang/glog v1.1.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/snappy v0.0.4 // indirect
Expand Down Expand Up @@ -191,6 +192,8 @@ replace (

// pin version! 126854af5e6d has issues with the store so that queries fail
github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7

github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.24
)

replace github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20230721042501-ef9e3f63d0cd
Loading

0 comments on commit 9bdca9c

Please sign in to comment.