@@ -3,13 +3,18 @@ package app
33import (
44 // this line is used by starport scaffolding # ibc/app/import
55
6+ "time"
7+
68 "cosmossdk.io/core/appmodule"
79 storetypes "cosmossdk.io/store/types"
810 cdctypes "github.com/cosmos/cosmos-sdk/codec/types"
911 authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
1012 govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
1113 govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
1214 paramstypes "github.com/cosmos/cosmos-sdk/x/params/types"
15+ "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward"
16+ packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward/keeper"
17+ packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward/types"
1318 "github.com/cosmos/ibc-go/modules/capability"
1419 capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper"
1520 capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
@@ -49,6 +54,7 @@ func (app *App) registerIBCModules() {
4954 storetypes .NewKVStoreKey (icacontrollertypes .StoreKey ),
5055 storetypes .NewMemoryStoreKey (capabilitytypes .MemStoreKey ),
5156 storetypes .NewTransientStoreKey (paramstypes .TStoreKey ),
57+ storetypes .NewKVStoreKey (packetforwardtypes .StoreKey ),
5258 ); err != nil {
5359 panic (err )
5460 }
@@ -140,8 +146,28 @@ func (app *App) registerIBCModules() {
140146 )
141147 app .Keepers .GovKeeper .SetLegacyRouter (govRouter )
142148
143- // Create IBC modules with ibcfee middleware
144- transferIBCModule := ibcfee .NewIBCMiddleware (ibctransfer .NewIBCModule (app .Keepers .TransferKeeper ), app .Keepers .IBCFeeKeeper )
149+ // Create IBC packet forward keeper
150+ app .Keepers .PacketForwardKeeper = * packetforwardkeeper .NewKeeper (
151+ app .AppCodec (),
152+ app .GetKey (packetforwardtypes .StoreKey ),
153+ app .Keepers .TransferKeeper ,
154+ app .Keepers .IBCKeeper .ChannelKeeper ,
155+ app .Keepers .BankKeeper ,
156+ app .Keepers .IBCFeeKeeper ,
157+ authtypes .NewModuleAddress (govtypes .ModuleName ).String (),
158+ )
159+
160+ // Create IBC modules with ibcfee middleware, wrapped in packet forward middleware
161+ rawTransferModule := ibctransfer .NewIBCModule (app .Keepers .TransferKeeper )
162+ transferWithPFM := packetforward .NewIBCMiddleware (
163+ rawTransferModule ,
164+ & app .Keepers .PacketForwardKeeper ,
165+ // TODO_IN_THIS_COMMIT: extract to constants and/or comment if gov params would be appropriate...
166+ 3 ,
167+ 60 * time .Second ,
168+ )
169+
170+ transferIBCModule := ibcfee .NewIBCMiddleware (transferWithPFM , app .Keepers .IBCFeeKeeper )
145171
146172 // integration point for custom authentication modules
147173 var noAuthzModule porttypes.IBCModule
@@ -176,6 +202,7 @@ func (app *App) registerIBCModules() {
176202 capability .NewAppModule (app .appCodec , * app .Keepers .CapabilityKeeper , false ),
177203 ibctm.AppModule {},
178204 solomachine.AppModule {},
205+ packetforward .NewAppModule (& app .Keepers .PacketForwardKeeper , app .GetSubspace (packetforwardtypes .ModuleName )),
179206 ); err != nil {
180207 panic (err )
181208 }
0 commit comments