diff --git a/app/app.go b/app/app.go index 304d78ff..316179f8 100644 --- a/app/app.go +++ b/app/app.go @@ -69,6 +69,7 @@ import ( capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" _ "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts" // import for side-effects _ "github.com/cosmos/ibc-go/v8/modules/apps/29-fee" // import for side-effects + ibcfeekeeper "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/keeper" ibctransferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper" ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" @@ -136,6 +137,7 @@ type App struct { // IBC IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly CapabilityKeeper *capabilitykeeper.Keeper + IBCFeeKeeper ibcfeekeeper.Keeper IBCTransferKeeper ibctransferkeeper.Keeper // Scoped IBC diff --git a/app/app_config.go b/app/app_config.go index a0d7a3db..10ed101f 100644 --- a/app/app_config.go +++ b/app/app_config.go @@ -51,6 +51,7 @@ import ( slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + ibcfeetypes "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types" ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" "google.golang.org/protobuf/types/known/durationpb" @@ -89,6 +90,7 @@ var ( evidencetypes.ModuleName, authz.ModuleName, ibctransfertypes.ModuleName, + ibcfeetypes.ModuleName, feegrant.ModuleName, paramstypes.ModuleName, upgradetypes.ModuleName, @@ -131,6 +133,7 @@ var ( capabilitytypes.ModuleName, ibcexported.ModuleName, ibctransfertypes.ModuleName, + ibcfeetypes.ModuleName, // KYVE modules delegationtypes.ModuleName, @@ -150,6 +153,7 @@ var ( ibcexported.ModuleName, ibctransfertypes.ModuleName, capabilitytypes.ModuleName, + ibcfeetypes.ModuleName, // KYVE modules pooltypes.ModuleName, @@ -176,6 +180,7 @@ var ( // IBC {Account: ibctransfertypes.ModuleName, Permissions: []string{authtypes.Minter, authtypes.Burner}}, + {Account: ibcfeetypes.ModuleName}, // KYVE {Account: bundlestypes.ModuleName}, @@ -197,6 +202,7 @@ var ( // IBC ibctransfertypes.ModuleName, + ibcfeetypes.ModuleName, // KYVE bundlestypes.ModuleName, diff --git a/app/ibc.go b/app/ibc.go index df48df6d..7bc1842e 100644 --- a/app/ibc.go +++ b/app/ibc.go @@ -12,6 +12,9 @@ import ( "github.com/cosmos/ibc-go/modules/capability" capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + ibcfee "github.com/cosmos/ibc-go/v8/modules/apps/29-fee" + ibcfeekeeper "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/keeper" + ibcfeetypes "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types" ibctransfer "github.com/cosmos/ibc-go/v8/modules/apps/transfer" ibctransferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper" ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" @@ -33,6 +36,7 @@ func (app *App) registerIBCModules() { storetypes.NewKVStoreKey(capabilitytypes.StoreKey), storetypes.NewKVStoreKey(ibcexported.StoreKey), storetypes.NewKVStoreKey(ibctransfertypes.StoreKey), + storetypes.NewKVStoreKey(ibcfeetypes.StoreKey), storetypes.NewMemoryStoreKey(capabilitytypes.MemStoreKey), storetypes.NewTransientStoreKey(paramstypes.TStoreKey), ); err != nil { @@ -74,12 +78,19 @@ func (app *App) registerIBCModules() { govRouter := govv1beta1.NewRouter() govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler) + app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( + app.appCodec, app.GetKey(ibcfeetypes.StoreKey), + app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware + app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.PortKeeper, app.AccountKeeper, app.BankKeeper, + ) + // Create IBC transfer keeper app.IBCTransferKeeper = ibctransferkeeper.NewKeeper( app.appCodec, app.GetKey(ibctransfertypes.StoreKey), app.GetSubspace(ibctransfertypes.ModuleName), - app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware + app.IBCFeeKeeper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, app.AccountKeeper, @@ -90,8 +101,12 @@ func (app *App) registerIBCModules() { app.GovKeeper.SetLegacyRouter(govRouter) + // Create IBC modules with ibcfee middleware + transferIBCModule := ibcfee.NewIBCMiddleware(ibctransfer.NewIBCModule(app.IBCTransferKeeper), app.IBCFeeKeeper) + // Create static IBC router, add transfer route, then set and seal it - ibcRouter := porttypes.NewRouter() + ibcRouter := porttypes.NewRouter(). + AddRoute(ibctransfertypes.ModuleName, transferIBCModule) // this line is used by starport scaffolding # ibc/app/module @@ -104,6 +119,7 @@ func (app *App) registerIBCModules() { if err := app.RegisterModules( ibc.NewAppModule(app.IBCKeeper), ibctransfer.NewAppModule(app.IBCTransferKeeper), + ibcfee.NewAppModule(app.IBCFeeKeeper), capability.NewAppModule(app.appCodec, *app.CapabilityKeeper, false), ibctm.AppModule{}, solomachine.AppModule{}, @@ -119,6 +135,7 @@ func RegisterIBC(registry cdctypes.InterfaceRegistry) map[string]appmodule.AppMo modules := map[string]appmodule.AppModule{ ibcexported.ModuleName: ibc.AppModule{}, ibctransfertypes.ModuleName: ibctransfer.AppModule{}, + ibcfeetypes.ModuleName: ibcfee.AppModule{}, capabilitytypes.ModuleName: capability.AppModule{}, ibctm.ModuleName: ibctm.AppModule{}, solomachine.ModuleName: solomachine.AppModule{},