@@ -15,24 +15,27 @@ import (
15
15
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
16
16
dbm "github.com/tendermint/tm-db"
17
17
18
- ica "github.com/Finschia/ibc-go/v3/modules/apps/27-interchain-accounts"
19
- icacontrollerkeeper "github.com/Finschia/ibc-go/v3/modules/apps/27-interchain-accounts/controller/keeper"
20
- icacontrollertypes "github.com/Finschia/ibc-go/v3/modules/apps/27-interchain-accounts/controller/types"
21
- icahost "github.com/Finschia/ibc-go/v3/modules/apps/27-interchain-accounts/host"
22
- icahostkeeper "github.com/Finschia/ibc-go/v3/modules/apps/27-interchain-accounts/host/keeper"
23
- icahosttypes "github.com/Finschia/ibc-go/v3/modules/apps/27-interchain-accounts/host/types"
24
- icatypes "github.com/Finschia/ibc-go/v3/modules/apps/27-interchain-accounts/types"
25
- transfer "github.com/Finschia/ibc-go/v3/modules/apps/transfer"
26
- ibctransferkeeper "github.com/Finschia/ibc-go/v3/modules/apps/transfer/keeper"
27
- ibctransfertypes "github.com/Finschia/ibc-go/v3/modules/apps/transfer/types"
28
- ibc "github.com/Finschia/ibc-go/v3/modules/core"
29
- ibcclient "github.com/Finschia/ibc-go/v3/modules/core/02-client"
30
- ibcclientclient "github.com/Finschia/ibc-go/v3/modules/core/02-client/client"
31
- ibcclienttypes "github.com/Finschia/ibc-go/v3/modules/core/02-client/types"
32
- porttypes "github.com/Finschia/ibc-go/v3/modules/core/05-port/types"
33
- ibchost "github.com/Finschia/ibc-go/v3/modules/core/24-host"
34
- ibckeeper "github.com/Finschia/ibc-go/v3/modules/core/keeper"
35
18
ocabci "github.com/Finschia/ostracon/abci/types"
19
+ ica "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts"
20
+ icacontrollerkeeper "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/controller/keeper"
21
+ icacontrollertypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/controller/types"
22
+ icahost "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host"
23
+ icahostkeeper "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host/keeper"
24
+ icahosttypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host/types"
25
+ icatypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/types"
26
+ ibcfee "github.com/cosmos/ibc-go/v4/modules/apps/29-fee"
27
+ ibcfeekeeper "github.com/cosmos/ibc-go/v4/modules/apps/29-fee/keeper"
28
+ ibcfeetypes "github.com/cosmos/ibc-go/v4/modules/apps/29-fee/types"
29
+ transfer "github.com/cosmos/ibc-go/v4/modules/apps/transfer"
30
+ ibctransferkeeper "github.com/cosmos/ibc-go/v4/modules/apps/transfer/keeper"
31
+ ibctransfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types"
32
+ ibc "github.com/cosmos/ibc-go/v4/modules/core"
33
+ ibcclient "github.com/cosmos/ibc-go/v4/modules/core/02-client"
34
+ ibcclientclient "github.com/cosmos/ibc-go/v4/modules/core/02-client/client"
35
+ ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types"
36
+ porttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types"
37
+ ibchost "github.com/cosmos/ibc-go/v4/modules/core/24-host"
38
+ ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper"
36
39
37
40
"github.com/Finschia/finschia-sdk/baseapp"
38
41
"github.com/Finschia/finschia-sdk/client"
@@ -203,6 +206,7 @@ var (
203
206
vesting.AppModuleBasic {},
204
207
wasm.AppModuleBasic {},
205
208
ica.AppModuleBasic {},
209
+ ibcfee.AppModuleBasic {},
206
210
)
207
211
208
212
// module account permissions
@@ -214,6 +218,7 @@ var (
214
218
stakingtypes .NotBondedPoolName : {authtypes .Burner , authtypes .Staking },
215
219
govtypes .ModuleName : {authtypes .Burner },
216
220
ibctransfertypes .ModuleName : {authtypes .Minter , authtypes .Burner },
221
+ ibcfeetypes .ModuleName : nil ,
217
222
icatypes .ModuleName : nil ,
218
223
wasm .ModuleName : {authtypes .Burner },
219
224
}
@@ -259,6 +264,7 @@ type WasmApp struct {
259
264
ParamsKeeper paramskeeper.Keeper
260
265
EvidenceKeeper evidencekeeper.Keeper
261
266
IBCKeeper * ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
267
+ IBCFeeKeeper ibcfeekeeper.Keeper
262
268
ICAControllerKeeper icacontrollerkeeper.Keeper
263
269
ICAHostKeeper icahostkeeper.Keeper
264
270
TransferKeeper ibctransferkeeper.Keeper
@@ -270,6 +276,7 @@ type WasmApp struct {
270
276
ScopedICAHostKeeper capabilitykeeper.ScopedKeeper
271
277
ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper
272
278
ScopedTransferKeeper capabilitykeeper.ScopedKeeper
279
+ ScopedIBCFeeKeeper capabilitykeeper.ScopedKeeper
273
280
ScopedWasmKeeper capabilitykeeper.ScopedKeeper
274
281
275
282
// make IBC modules public for test purposes
@@ -313,7 +320,7 @@ func NewWasmApp(
313
320
minttypes .StoreKey , distrtypes .StoreKey , slashingtypes .StoreKey ,
314
321
govtypes .StoreKey , paramstypes .StoreKey , ibchost .StoreKey , upgradetypes .StoreKey ,
315
322
evidencetypes .StoreKey , ibctransfertypes .StoreKey , capabilitytypes .StoreKey ,
316
- feegrant .StoreKey , authzkeeper .StoreKey , wasm .StoreKey , icahosttypes .StoreKey , icacontrollertypes .StoreKey ,
323
+ feegrant .StoreKey , authzkeeper .StoreKey , wasm .StoreKey , icahosttypes .StoreKey , icacontrollertypes .StoreKey , ibcfeetypes . StoreKey ,
317
324
)
318
325
tkeys := sdk .NewTransientStoreKeys (paramstypes .TStoreKey )
319
326
memKeys := sdk .NewMemoryStoreKeys (capabilitytypes .MemStoreKey )
@@ -448,20 +455,26 @@ func NewWasmApp(
448
455
AddRoute (upgradetypes .RouterKey , upgrade .NewSoftwareUpgradeProposalHandler (app .UpgradeKeeper )).
449
456
AddRoute (ibcclienttypes .RouterKey , ibcclient .NewClientProposalHandler (app .IBCKeeper .ClientKeeper ))
450
457
458
+ // IBC Fee Module keeper
459
+ app .IBCFeeKeeper = ibcfeekeeper .NewKeeper (
460
+ appCodec , keys [ibcfeetypes .StoreKey ], app .getSubspace (ibcfeetypes .ModuleName ),
461
+ app .IBCKeeper .ChannelKeeper , // may be replaced with IBC middleware
462
+ app .IBCKeeper .ChannelKeeper ,
463
+ & app .IBCKeeper .PortKeeper , app .AccountKeeper , app .BankKeeper ,
464
+ )
465
+
451
466
// Create Transfer Keepers
452
467
app .TransferKeeper = ibctransferkeeper .NewKeeper (
453
468
appCodec ,
454
469
keys [ibctransfertypes .StoreKey ],
455
470
app .getSubspace (ibctransfertypes .ModuleName ),
456
- app .IBCKeeper . ChannelKeeper ,
471
+ app .IBCFeeKeeper , // ISC4 Wrapper: fee IBC middleware
457
472
app .IBCKeeper .ChannelKeeper ,
458
473
& app .IBCKeeper .PortKeeper ,
459
474
app .AccountKeeper ,
460
475
app .BankKeeper ,
461
476
scopedTransferKeeper ,
462
477
)
463
- transferModule := transfer .NewAppModule (app .TransferKeeper )
464
- transferIBCModule := transfer .NewIBCModule (app .TransferKeeper )
465
478
466
479
app .ICAHostKeeper = icahostkeeper .NewKeeper (
467
480
appCodec ,
@@ -477,14 +490,12 @@ func NewWasmApp(
477
490
appCodec ,
478
491
keys [icacontrollertypes .StoreKey ],
479
492
app .getSubspace (icacontrollertypes .SubModuleName ),
480
- app .IBCKeeper . ChannelKeeper , // may be replaced with middleware such as ics29 fee
493
+ app .IBCFeeKeeper , // use ics29 fee as ics4Wrapper in middleware stack
481
494
app .IBCKeeper .ChannelKeeper ,
482
495
& app .IBCKeeper .PortKeeper ,
483
496
scopedICAControllerKeeper ,
484
497
app .MsgServiceRouter (),
485
498
)
486
- icaModule := ica .NewAppModule (& app .ICAControllerKeeper , & app .ICAHostKeeper )
487
- icaHostIBCModule := icahost .NewIBCModule (app .ICAHostKeeper )
488
499
489
500
// create evidence keeper with router
490
501
evidenceKeeper := evidencekeeper .NewKeeper (
@@ -524,19 +535,49 @@ func NewWasmApp(
524
535
wasmOpts ... ,
525
536
)
526
537
527
- // Create static IBC router, add app routes, then set and seal it
528
- ibcRouter := porttypes .NewRouter ()
529
-
530
538
// The gov proposal types can be individually enabled
531
539
if len (enabledProposals ) != 0 {
532
540
govRouter .AddRoute (wasm .RouterKey , wasm .NewWasmProposalHandler (app .WasmKeeper , enabledProposals ))
533
541
}
534
- ibcRouter .
535
- AddRoute (wasm .ModuleName , wasm .NewIBCHandler (app .WasmKeeper , app .IBCKeeper .ChannelKeeper )).
536
- AddRoute (ibctransfertypes .ModuleName , transferIBCModule ).
537
- // AddRoute(icacontrollertypes.SubModuleName, icaControllerIBCModule).
538
- AddRoute (icahosttypes .SubModuleName , icaHostIBCModule )
539
- // AddRoute(intertxtypes.ModuleName, icaControllerIBCModule)
542
+
543
+ // Create Transfer Stack
544
+ var transferStack porttypes.IBCModule
545
+ transferStack = transfer .NewIBCModule (app .TransferKeeper )
546
+ transferStack = ibcfee .NewIBCMiddleware (transferStack , app .IBCFeeKeeper )
547
+
548
+ /*
549
+ // Create Interchain Accounts Stack
550
+ // SendPacket, since it is originating from the application to core IBC:
551
+ // icaAuthModuleKeeper.SendTx -> icaController.SendPacket -> fee.SendPacket -> channel.SendPacket
552
+
553
+ // Note: please do your research before using this in production app, this is a demo and not an officially
554
+ // supported IBC team implementation. Do your own research before using it.
555
+ var icaControllerStack porttypes.IBCModule
556
+ // You will likely want to use your own reviewed and maintained ica auth module
557
+ icaControllerStack = intertx.NewIBCModule(app.InterTxKeeper)
558
+ icaControllerStack = icacontroller.NewIBCMiddleware(icaControllerStack, app.ICAControllerKeeper)
559
+ icaControllerStack = ibcfee.NewIBCMiddleware(icaControllerStack, app.IBCFeeKeeper)
560
+ */
561
+
562
+ // RecvPacket, message that originates from core IBC and goes down to app, the flow is:
563
+ // channel.RecvPacket -> fee.OnRecvPacket -> icaHost.OnRecvPacket
564
+ var icaHostStack porttypes.IBCModule
565
+ icaHostStack = icahost .NewIBCModule (app .ICAHostKeeper )
566
+ icaHostStack = ibcfee .NewIBCMiddleware (icaHostStack , app .IBCFeeKeeper )
567
+
568
+ // Create fee enabled wasm ibc Stack
569
+ var wasmStack porttypes.IBCModule
570
+ wasmStack = wasm .NewIBCHandler (app .WasmKeeper , app .IBCKeeper .ChannelKeeper , app .IBCFeeKeeper )
571
+ wasmStack = ibcfee .NewIBCMiddleware (wasmStack , app .IBCFeeKeeper )
572
+
573
+ // Create static IBC router, add app routes, then set and seal it
574
+ ibcRouter := porttypes .NewRouter ().
575
+ AddRoute (ibctransfertypes .ModuleName , transferStack ).
576
+ AddRoute (wasm .ModuleName , wasmStack ).
577
+ // AddRoute(intertxtypes.ModuleName, icaControllerStack).
578
+ // AddRoute(icacontrollertypes.SubModuleName, icaControllerStack).
579
+ AddRoute (icahosttypes .SubModuleName , icaHostStack )
580
+
540
581
app .IBCKeeper .SetRouter (ibcRouter )
541
582
542
583
app .GovKeeper = govkeeper .NewKeeper (
@@ -579,8 +620,10 @@ func NewWasmApp(
579
620
authzmodule .NewAppModule (appCodec , app .AuthzKeeper , app .AccountKeeper , app .BankKeeper , app .interfaceRegistry ),
580
621
ibc .NewAppModule (app .IBCKeeper ),
581
622
params .NewAppModule (app .ParamsKeeper ),
582
- transferModule ,
583
- icaModule ,
623
+ transfer .NewAppModule (app .TransferKeeper ),
624
+ ibcfee .NewAppModule (app .IBCFeeKeeper ),
625
+ ica .NewAppModule (& app .ICAControllerKeeper , & app .ICAHostKeeper ),
626
+ // intertx.NewAppModule(appCodec, app.InterTxKeeper),
584
627
crisis .NewAppModule (& app .CrisisKeeper , skipGenesisInvariants ), // always be last to make sure that it checks for all invariants and not only part of them
585
628
)
586
629
@@ -609,6 +652,7 @@ func NewWasmApp(
609
652
ibctransfertypes .ModuleName ,
610
653
ibchost .ModuleName ,
611
654
icatypes .ModuleName ,
655
+ ibcfeetypes .ModuleName ,
612
656
// intertxtypes.ModuleName,
613
657
wasm .ModuleName ,
614
658
)
@@ -634,6 +678,7 @@ func NewWasmApp(
634
678
ibctransfertypes .ModuleName ,
635
679
ibchost .ModuleName ,
636
680
icatypes .ModuleName ,
681
+ ibcfeetypes .ModuleName ,
637
682
// intertxtypes.ModuleName,
638
683
wasm .ModuleName ,
639
684
)
@@ -666,6 +711,8 @@ func NewWasmApp(
666
711
ibctransfertypes .ModuleName ,
667
712
ibchost .ModuleName ,
668
713
icatypes .ModuleName ,
714
+ ibcfeetypes .ModuleName ,
715
+ // intertxtypes.ModuleName,
669
716
// wasm after ibc transfer
670
717
wasm .ModuleName ,
671
718
)
@@ -698,7 +745,7 @@ func NewWasmApp(
698
745
evidence .NewAppModule (app .EvidenceKeeper ),
699
746
wasm .NewAppModule (appCodec , & app .WasmKeeper , app .StakingKeeper , app .AccountKeeper , app .BankKeeper ),
700
747
ibc .NewAppModule (app .IBCKeeper ),
701
- transferModule ,
748
+ transfer . NewAppModule ( app . TransferKeeper ) ,
702
749
)
703
750
704
751
app .sm .RegisterStoreDecoders ()
0 commit comments