@@ -90,6 +90,9 @@ import (
9090 icacontrollerkeeper "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/keeper"
9191 icacontrollertypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/types"
9292 icatypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/types"
93+ ibcfee "github.com/cosmos/ibc-go/v5/modules/apps/29-fee"
94+ ibcfeekeeper "github.com/cosmos/ibc-go/v5/modules/apps/29-fee/keeper"
95+ ibcfeetypes "github.com/cosmos/ibc-go/v5/modules/apps/29-fee/types"
9396
9497 appparams "github.com/cosmos/cosmos-sdk/simapp/params"
9598 "github.com/cosmos/ibc-go/v5/modules/apps/transfer"
@@ -186,6 +189,7 @@ var (
186189 stakingtypes .NotBondedPoolName : {authtypes .Burner , authtypes .Staking },
187190 govtypes .ModuleName : {authtypes .Burner },
188191 ibctransfertypes .ModuleName : {authtypes .Minter , authtypes .Burner },
192+ ibcfeetypes .ModuleName : nil ,
189193 icatypes .ModuleName : nil ,
190194 evmtypes .ModuleName : {authtypes .Minter , authtypes .Burner }, // used for secure addition and subtraction of balance using module account
191195 gravitytypes .ModuleName : {authtypes .Minter , authtypes .Burner },
@@ -229,6 +233,7 @@ func GenModuleBasics(experimental bool) module.BasicManager {
229233 vesting.AppModuleBasic {},
230234 ica.AppModuleBasic {},
231235 icactlmodule.AppModuleBasic {},
236+ ibcfee.AppModuleBasic {},
232237 evm.AppModuleBasic {},
233238 feemarket.AppModuleBasic {},
234239 // this line is used by starport scaffolding # stargate/app/moduleBasic
@@ -270,6 +275,7 @@ type App struct {
270275 UpgradeKeeper upgradekeeper.Keeper
271276 ParamsKeeper paramskeeper.Keeper
272277 IBCKeeper * ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
278+ IBCFeeKeeper ibcfeekeeper.Keeper
273279 ICAControllerKeeper icacontrollerkeeper.Keeper
274280 ICAAuthKeeper icactlmodulekeeper.Keeper
275281 EvidenceKeeper evidencekeeper.Keeper
@@ -335,6 +341,7 @@ func New(
335341 // ibc keys
336342 ibchost .StoreKey , ibctransfertypes .StoreKey ,
337343 icacontrollertypes .StoreKey ,
344+ ibcfeetypes .StoreKey ,
338345 // ethermint keys
339346 evmtypes .StoreKey , feemarkettypes .StoreKey ,
340347 // this line is used by starport scaffolding # stargate/app/storeKey
@@ -416,10 +423,18 @@ func New(
416423 appCodec , keys [ibchost .StoreKey ], app .GetSubspace (ibchost .ModuleName ), stakingKeeper , app .UpgradeKeeper , scopedIBCKeeper ,
417424 )
418425
426+ // IBC Fee Module keeper
427+ app .IBCFeeKeeper = ibcfeekeeper .NewKeeper (
428+ appCodec , keys [ibcfeetypes .StoreKey ], app .GetSubspace (ibcfeetypes .ModuleName ),
429+ app .IBCKeeper .ChannelKeeper , // more middlewares can be added in future
430+ app .IBCKeeper .ChannelKeeper ,
431+ & app .IBCKeeper .PortKeeper , app .AccountKeeper , app .BankKeeper ,
432+ )
433+
419434 // Create Transfer Keepers
420435 app .TransferKeeper = ibctransferkeeper .NewKeeper (
421436 appCodec , keys [ibctransfertypes .StoreKey ], app .GetSubspace (ibctransfertypes .ModuleName ),
422- app .IBCKeeper . ChannelKeeper , app .IBCKeeper .ChannelKeeper , & app .IBCKeeper .PortKeeper ,
437+ app .IBCFeeKeeper , app .IBCKeeper .ChannelKeeper , & app .IBCKeeper .PortKeeper ,
423438 app .AccountKeeper , app .BankKeeper , scopedTransferKeeper ,
424439 )
425440
@@ -494,21 +509,28 @@ func New(
494509
495510 // set the middleware
496511 transferModule := transfer .NewAppModule (app .TransferKeeper )
497- transferIBCModule := transfer .NewIBCModule (app .TransferKeeper )
498- transferWithConversionIBCModule := middleware .NewIBCConversionModule (transferIBCModule , app .CronosKeeper )
512+ feeModule := ibcfee .NewAppModule (app .IBCFeeKeeper )
513+
514+ var transferStack porttypes.IBCModule
515+ transferStack = transfer .NewIBCModule (app .TransferKeeper )
516+ transferStack = middleware .NewIBCConversionModule (transferStack , app .CronosKeeper )
517+ transferStack = ibcfee .NewIBCMiddleware (transferStack , app .IBCFeeKeeper )
518+
499519 app .ICAControllerKeeper = icacontrollerkeeper .NewKeeper (
500520 appCodec , keys [icacontrollertypes .StoreKey ], app .GetSubspace (icacontrollertypes .SubModuleName ),
501- app .IBCKeeper .ChannelKeeper , // may be replaced with middleware such as ics29 fee
502- app .IBCKeeper .ChannelKeeper , & app .IBCKeeper .PortKeeper ,
521+ app .IBCFeeKeeper , app .IBCKeeper .ChannelKeeper , & app .IBCKeeper .PortKeeper ,
503522 scopedICAControllerKeeper , app .MsgServiceRouter (),
504523 )
505524 icaModule := ica .NewAppModule (& app .ICAControllerKeeper , nil )
506525
507526 app .ICAAuthKeeper = * icactlmodulekeeper .NewKeeper (appCodec ,
508527 app .GetSubspace (icactlmoduletypes .ModuleName ), app .ICAControllerKeeper , scopedICAAuthKeeper )
509- icaAuthModule := icactlmodule .NewAppModule (appCodec , app .ICAAuthKeeper )
510- icaAuthIBCModule := icactlmodule .NewIBCModule (app .ICAAuthKeeper )
511- icaControllerIBCModule := icacontroller .NewIBCMiddleware (icaAuthIBCModule , app .ICAControllerKeeper )
528+ icaCtlModule := icactlmodule .NewAppModule (appCodec , app .ICAAuthKeeper )
529+
530+ var icaControllerStack porttypes.IBCModule
531+ icaControllerStack = icactlmodule .NewIBCModule (app .ICAAuthKeeper )
532+ icaControllerStack = icacontroller .NewIBCMiddleware (icaControllerStack , app .ICAControllerKeeper )
533+ icaControllerStack = ibcfee .NewIBCMiddleware (icaControllerStack , app .IBCFeeKeeper )
512534
513535 app .GovKeeper = govkeeper .NewKeeper (
514536 appCodec , keys [govtypes .StoreKey ], app .GetSubspace (govtypes .ModuleName ), app .AccountKeeper , app .BankKeeper ,
@@ -550,9 +572,9 @@ func New(
550572
551573 // Create static IBC router, add transfer route, then set and seal it
552574 ibcRouter := porttypes .NewRouter ()
553- ibcRouter .AddRoute (ibctransfertypes .ModuleName , transferWithConversionIBCModule )
554- ibcRouter .AddRoute (icacontrollertypes .SubModuleName , icaControllerIBCModule )
555- ibcRouter .AddRoute (icactlmoduletypes .ModuleName , icaControllerIBCModule )
575+ ibcRouter .AddRoute (ibctransfertypes .ModuleName , transferStack )
576+ ibcRouter .AddRoute (icacontrollertypes .SubModuleName , icaControllerStack )
577+ ibcRouter .AddRoute (icactlmoduletypes .ModuleName , icaControllerStack )
556578 // this line is used by starport scaffolding # ibc/app/router
557579 app .IBCKeeper .SetRouter (ibcRouter )
558580
@@ -588,7 +610,8 @@ func New(
588610 ibc .NewAppModule (app .IBCKeeper ),
589611 transferModule ,
590612 icaModule ,
591- icaAuthModule ,
613+ icaCtlModule ,
614+ feeModule ,
592615 evm .NewAppModule (app .EvmKeeper , app .AccountKeeper ),
593616 feemarket .NewAppModule (app .FeeMarketKeeper ),
594617 cronosModule ,
@@ -607,6 +630,7 @@ func New(
607630 ibctransfertypes .ModuleName ,
608631 icatypes .ModuleName ,
609632 icactlmoduletypes .ModuleName ,
633+ ibcfeetypes .ModuleName ,
610634 authtypes .ModuleName ,
611635 banktypes .ModuleName ,
612636 govtypes .ModuleName ,
@@ -626,6 +650,7 @@ func New(
626650 ibctransfertypes .ModuleName ,
627651 icatypes .ModuleName ,
628652 icactlmoduletypes .ModuleName ,
653+ ibcfeetypes .ModuleName ,
629654 capabilitytypes .ModuleName ,
630655 authtypes .ModuleName ,
631656 banktypes .ModuleName ,
@@ -667,6 +692,7 @@ func New(
667692 ibctransfertypes .ModuleName ,
668693 icatypes .ModuleName ,
669694 icactlmoduletypes .ModuleName ,
695+ ibcfeetypes .ModuleName ,
670696 authz .ModuleName ,
671697 feegrant .ModuleName ,
672698 paramstypes .ModuleName ,
0 commit comments