diff --git a/app/ante.go b/app/ante.go index 1c2ff8a6..866e2992 100644 --- a/app/ante.go +++ b/app/ante.go @@ -5,6 +5,8 @@ import ( ibcante "github.com/cosmos/ibc-go/v8/modules/core/ante" "github.com/cosmos/ibc-go/v8/modules/core/keeper" + feeabsante "github.com/osmosis-labs/fee-abstraction/v8/x/feeabs/ante" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v8/x/feeabs/keeper" corestoretypes "cosmossdk.io/core/store" circuitante "cosmossdk.io/x/circuit/ante" @@ -27,6 +29,7 @@ type HandlerOptions struct { WasmKeeper *wasmkeeper.Keeper TXCounterStoreService corestoretypes.KVStoreService CircuitKeeper *circuitkeeper.Keeper + FeeAbskeeper feeabskeeper.Keeper } // NewAnteHandler constructor @@ -57,11 +60,13 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { wasmkeeper.NewGasRegisterDecorator(options.WasmKeeper.GetGasRegister()), circuitante.NewCircuitBreakerDecorator(options.CircuitKeeper), ante.NewExtensionOptionsDecorator(options.ExtensionOptionChecker), + feeabsante.NewFeeAbstrationMempoolFeeDecorator(options.FeeAbskeeper), ante.NewValidateBasicDecorator(), ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), + feeabsante.NewFeeAbstractionDeductFeeDecorate(options.AccountKeeper, options.BankKeeper, options.FeeAbskeeper, options.FeegrantKeeper), ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), ante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewValidateSigCountDecorator(options.AccountKeeper), diff --git a/app/app.go b/app/app.go index 7d7ede8a..a7009f05 100644 --- a/app/app.go +++ b/app/app.go @@ -44,6 +44,9 @@ import ( ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" ibctm "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + feeabsmodule "github.com/osmosis-labs/fee-abstraction/v8/x/feeabs" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v8/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v8/x/feeabs/types" "github.com/osmosis-labs/tokenfactory" "github.com/osmosis-labs/tokenfactory/bindings" tokenfactorykeeper "github.com/osmosis-labs/tokenfactory/keeper" @@ -202,6 +205,7 @@ var maccPerms = map[string][]string{ tokenfactorytypes.ModuleName: {authtypes.Minter, authtypes.Burner}, alliancemoduletypes.ModuleName: {authtypes.Minter, authtypes.Burner}, alliancemoduletypes.RewardsPoolName: nil, + feeabstypes.ModuleName: nil, } var ( @@ -241,6 +245,7 @@ type EveApp struct { NFTKeeper nftkeeper.Keeper ConsensusParamsKeeper consensusparamkeeper.Keeper CircuitKeeper circuitkeeper.Keeper + FeeabsKeeper feeabskeeper.Keeper IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly IBCFeeKeeper ibcfeekeeper.Keeper @@ -259,6 +264,7 @@ type EveApp struct { ScopedTransferKeeper capabilitykeeper.ScopedKeeper ScopedIBCFeeKeeper capabilitykeeper.ScopedKeeper ScopedWasmKeeper capabilitykeeper.ScopedKeeper + ScopedFeeabsKeeper capabilitykeeper.ScopedKeeper TokenFactoryKeeper tokenfactorykeeper.Keeper @@ -326,6 +332,7 @@ func NewEveApp( icacontrollertypes.StoreKey, tokenfactorytypes.StoreKey, ibchookstypes.StoreKey, alliancemoduletypes.StoreKey, + feeabstypes.StoreKey, ) tkeys := storetypes.NewTransientStoreKeys(paramstypes.TStoreKey) @@ -377,7 +384,7 @@ func NewEveApp( scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasmtypes.ModuleName) - + scopedFeeabsKeeper := app.CapabilityKeeper.ScopeToModule(feeabstypes.ModuleName) // add keepers app.AccountKeeper = authkeeper.NewAccountKeeper( @@ -558,7 +565,8 @@ func NewEveApp( // 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)).AddRoute(alliancemoduletypes.RouterKey, alliancemodule.NewAllianceProposalHandler(app.AllianceKeeper)) + AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)).AddRoute(alliancemoduletypes.RouterKey, alliancemodule.NewAllianceProposalHandler(app.AllianceKeeper)). + AddRoute(feeabstypes.RouterKey, feeabsmodule.NewHostZoneProposal(app.FeeabsKeeper)) govConfig := govtypes.DefaultConfig() /* @@ -605,6 +613,20 @@ func NewEveApp( // If evidence needs to be handled for the app, set routes in router here and seal app.EvidenceKeeper = *evidenceKeeper + app.FeeabsKeeper = feeabskeeper.NewKeeper( + appCodec, + app.keys[feeabstypes.StoreKey], + app.GetSubspace(feeabstypes.ModuleName), + &app.StakingKeeper, + app.AccountKeeper, + app.BankKeeper.BaseKeeper, + app.TransferKeeper, + app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.PortKeeper, + app.ScopedFeeabsKeeper, + ) + + feeabsIBCModule := feeabsmodule.NewIBCModule(appCodec, app.FeeabsKeeper) // Create Interchain Accounts Stack // SendPacket, since it is originating from the application to core IBC: // icaAuthModuleKeeper.SendTx -> icaController.SendPacket -> fee.SendPacket -> channel.SendPacket @@ -636,7 +658,8 @@ func NewEveApp( AddRoute(ibctransfertypes.ModuleName, transferStack). AddRoute(wasmtypes.ModuleName, wasmStack). AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). - AddRoute(icahosttypes.SubModuleName, icaHostStack) + AddRoute(icahosttypes.SubModuleName, icaHostStack). + AddRoute(feeabstypes.ModuleName, feeabsIBCModule) app.IBCKeeper.SetRouter(ibcRouter) app.IBCHooksKeeper = ibchookskeeper.NewKeeper( @@ -764,6 +787,7 @@ func NewEveApp( // sdk 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, tokenfactory.NewAppModule(app.TokenFactoryKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(tokenfactorytypes.ModuleName)), + feeabsmodule.NewAppModule(appCodec, app.FeeabsKeeper), ) // BasicModuleManager defines the module BasicManager is in charge of setting up basic, @@ -777,6 +801,9 @@ func NewEveApp( govtypes.ModuleName: gov.NewAppModuleBasic( []govclient.ProposalHandler{ paramsclient.ProposalHandler, + feeabsmodule.UpdateAddHostZoneClientProposalHandler, + feeabsmodule.UpdateDeleteHostZoneClientProposalHandler, + feeabsmodule.UpdateSetHostZoneClientProposalHandler, }, ), alliancemoduletypes.ModuleName: alliancemodule.AppModuleBasic{}, @@ -816,6 +843,7 @@ func NewEveApp( wasmtypes.ModuleName, tokenfactorytypes.ModuleName, alliancemoduletypes.ModuleName, + feeabstypes.ModuleName, ) app.ModuleManager.SetOrderEndBlockers( @@ -834,7 +862,9 @@ func NewEveApp( ibchookstypes.ModuleName, wasm08types.ModuleName, wasmtypes.ModuleName, - tokenfactorytypes.ModuleName, alliancemoduletypes.ModuleName, + tokenfactorytypes.ModuleName, + alliancemoduletypes.ModuleName, + feeabstypes.ModuleName, ) // NOTE: The genutils module must occur after staking so that pools are @@ -880,6 +910,8 @@ func NewEveApp( wasmtypes.ModuleName, tokenfactorytypes.ModuleName, alliancemoduletypes.ModuleName, + + feeabstypes.ModuleName, } app.ModuleManager.SetOrderInitGenesis(genesisModuleOrder...) app.ModuleManager.SetOrderExportGenesis(genesisModuleOrder...) @@ -950,6 +982,7 @@ func NewEveApp( app.ScopedWasmKeeper = scopedWasmKeeper app.ScopedICAHostKeeper = scopedICAHostKeeper app.ScopedICAControllerKeeper = scopedICAControllerKeeper + app.ScopedFeeabsKeeper = scopedFeeabsKeeper app.setPostHandler() @@ -1272,6 +1305,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(tokenfactorytypes.ModuleName).WithKeyTable(tokenfactorytypes.ParamKeyTable()) paramsKeeper.Subspace(wasmtypes.ModuleName) paramsKeeper.Subspace(alliancemoduletypes.ModuleName) + paramsKeeper.Subspace(feeabstypes.ModuleName) return paramsKeeper } diff --git a/go.mod b/go.mod index 552aa65a..60994cc5 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/eve-network/eve -go 1.21.1 +go 1.22.1 require ( github.com/CosmWasm/wasmd v0.51.0-rc.1 @@ -8,7 +8,7 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.4 // indirect github.com/cosmos/cosmos-sdk v0.50.5 github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/gogoproto v1.4.11 + github.com/cosmos/gogoproto v1.4.12 github.com/cosmos/iavl v1.0.1 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect @@ -16,6 +16,7 @@ require ( github.com/google/gofuzz v1.2.0 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect + github.com/osmosis-labs/fee-abstraction/v8 v8.0.0-20240320032009-4e0c8728b722 github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.18.0 github.com/spf13/cast v1.6.0 diff --git a/go.sum b/go.sum index 75f1073a..3d4ceafa 100644 --- a/go.sum +++ b/go.sum @@ -366,10 +366,12 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g= -github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y= +github.com/cosmos/gogoproto v1.4.12 h1:vB6Lbe/rtnYGjQuFxkPiPYiCybqFT8QvLipDZP8JpFE= +github.com/cosmos/gogoproto v1.4.12/go.mod h1:LnZob1bXRdUoqMMtwYlcR3wjiElmlC+FkjaZRv1/eLY= github.com/cosmos/iavl v1.0.1 h1:D+mYbcRO2wptYzOM1Hxl9cpmmHU1ZEt9T2Wv5nZTeUw= github.com/cosmos/iavl v1.0.1/go.mod h1:8xIUkgVvwvVrBu81scdPty+/Dx9GqwHnAvXz4cwF7RY= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.0.0 h1:PqaYuNJDpeqisP3Td5djrvFhuVMnOIWFJeqMJuZPRas= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.0.0/go.mod h1:82hPO/tRawbuFad2gPwChvpZ0JEIoNi91LwVneAYCeM= github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= github.com/cosmos/ibc-go/v8 v8.1.1 h1:N2+GA86yACcXnKWCKtqdbCwP0/Eo8pH79+6e7TicULU= @@ -695,6 +697,8 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/iancoleman/orderedmap v0.3.0 h1:5cbR2grmZR/DiVt+VJopEhtVs9YGInGIxAoMJn+Ichc= +github.com/iancoleman/orderedmap v0.3.0/go.mod h1:XuLcCUkdL5owUCQeF2Ue9uuw1EptkJDkXXS7VoV7XGE= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -857,6 +861,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/osmosis-labs/fee-abstraction/v8 v8.0.0-20240320032009-4e0c8728b722 h1:wiBHrpsVhsCDYzeRhcKlHmxcqIBR6A89iZfWOLyIptM= +github.com/osmosis-labs/fee-abstraction/v8 v8.0.0-20240320032009-4e0c8728b722/go.mod h1:km94uuc2nPgn0hCaMantXJqeMnYavOeBMVUg3qp3vIw= 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= @@ -916,6 +922,8 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= +github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=