@@ -114,6 +114,10 @@ import (
114
114
icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types"
115
115
icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types"
116
116
117
+ "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward"
118
+ packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/keeper"
119
+ packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types"
120
+
117
121
"github.com/cosmos/cosmos-sdk/x/consensus"
118
122
consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper"
119
123
consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types"
@@ -162,6 +166,7 @@ import (
162
166
v171 "github.com/haqq-network/haqq/app/upgrades/v1.7.1"
163
167
v172 "github.com/haqq-network/haqq/app/upgrades/v1.7.2"
164
168
v173 "github.com/haqq-network/haqq/app/upgrades/v1.7.3"
169
+ v174 "github.com/haqq-network/haqq/app/upgrades/v1.7.4"
165
170
166
171
// NOTE: override ICS20 keeper to support IBC transfers of ERC20 tokens
167
172
"github.com/haqq-network/haqq/x/ibc/transfer"
@@ -225,6 +230,7 @@ var (
225
230
ibc.AppModuleBasic {},
226
231
ibctm.AppModuleBasic {},
227
232
ica.AppModuleBasic {},
233
+ packetforward.AppModuleBasic {},
228
234
authzmodule.AppModuleBasic {},
229
235
feegrantmodule.AppModuleBasic {},
230
236
upgrade.AppModuleBasic {},
@@ -301,6 +307,7 @@ type Haqq struct {
301
307
AuthzKeeper authzkeeper.Keeper
302
308
IBCKeeper * ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
303
309
ICAHostKeeper icahostkeeper.Keeper
310
+ PacketForwardKeeper * packetforwardkeeper.Keeper
304
311
EvidenceKeeper evidencekeeper.Keeper
305
312
TransferKeeper transferkeeper.Keeper
306
313
ConsensusParamsKeeper consensusparamkeeper.Keeper
@@ -383,6 +390,7 @@ func NewHaqq(
383
390
feegrant .StoreKey , authzkeeper .StoreKey , crisistypes .StoreKey ,
384
391
// ibc keys
385
392
ibcexported .StoreKey , ibctransfertypes .StoreKey ,
393
+ packetforwardtypes .StoreKey ,
386
394
// ica keys
387
395
icahosttypes .StoreKey ,
388
396
// ethermint keys
@@ -561,6 +569,19 @@ func NewHaqq(
561
569
),
562
570
)
563
571
572
+ // Initialize the packet forward middleware Keeper
573
+ // It's important to note that the PFM Keeper must be initialized before the Transfer Keeper
574
+ app .PacketForwardKeeper = packetforwardkeeper .NewKeeper (
575
+ appCodec ,
576
+ keys [packetforwardtypes .StoreKey ],
577
+ nil , // will be zero-value here, reference is set later on with SetTransferKeeper.
578
+ app .IBCKeeper .ChannelKeeper ,
579
+ app .DistrKeeper ,
580
+ app .BankKeeper ,
581
+ app .IBCKeeper .ChannelKeeper ,
582
+ authtypes .NewModuleAddress (govtypes .ModuleName ).String (),
583
+ )
584
+
564
585
// Create Transfer Stack
565
586
566
587
// SendPacket, since it is originating from the application to core IBC:
@@ -571,12 +592,14 @@ func NewHaqq(
571
592
572
593
app .TransferKeeper = transferkeeper .NewKeeper (
573
594
appCodec , keys [ibctransfertypes .StoreKey ], app .GetSubspace (ibctransfertypes .ModuleName ),
574
- app .IBCKeeper . ChannelKeeper , // ICS4 Wrapper
595
+ app .PacketForwardKeeper , // ICS4 Wrapper
575
596
app .IBCKeeper .ChannelKeeper , & app .IBCKeeper .PortKeeper ,
576
597
app .AccountKeeper , app .BankKeeper , scopedTransferKeeper ,
577
598
app .Erc20Keeper , // Add ERC20 Keeper for ERC20 transfers
578
599
)
579
600
601
+ app .PacketForwardKeeper .SetTransferKeeper (app .TransferKeeper )
602
+
580
603
transferModule := transfer .NewAppModule (app .TransferKeeper )
581
604
582
605
// Create the app.ICAHostKeeper
@@ -595,14 +618,21 @@ func NewHaqq(
595
618
icaHostIBCModule := icahost .NewIBCModule (app .ICAHostKeeper )
596
619
597
620
// transfer stack contains (from top to bottom):
598
- // - IBC Firewall Middleware
599
621
// - Transfer
622
+ // - Packet Forward Middleware
600
623
// - ERC20 Middleware
601
624
602
625
// create IBC module from bottom to top of stack
603
626
var transferStack porttypes.IBCModule
604
627
605
628
transferStack = transfer .NewIBCModule (app .TransferKeeper )
629
+ transferStack = packetforward .NewIBCMiddleware (
630
+ transferStack ,
631
+ app .PacketForwardKeeper ,
632
+ 0 , // retries on timeout
633
+ packetforwardkeeper .DefaultForwardTransferPacketTimeoutTimestamp , // forward timeout
634
+ packetforwardkeeper .DefaultRefundTransferPacketTimeoutTimestamp , // refund timeout
635
+ )
606
636
transferStack = erc20 .NewIBCMiddleware (app .Erc20Keeper , transferStack )
607
637
608
638
// // Create static IBC router, add transfer route, then set and seal it
@@ -655,6 +685,7 @@ func NewHaqq(
655
685
ibc .NewAppModule (app .IBCKeeper ),
656
686
ica .NewAppModule (nil , & app .ICAHostKeeper ),
657
687
transferModule ,
688
+ packetforward .NewAppModule (app .PacketForwardKeeper , app .GetSubspace (packetforwardtypes .ModuleName )),
658
689
// Ethermint app modules
659
690
evm .NewAppModule (app .EvmKeeper , app .AccountKeeper , app .GetSubspace (evmtypes .ModuleName )),
660
691
feemarket .NewAppModule (app .FeeMarketKeeper , app .GetSubspace (feemarkettypes .ModuleName )),
@@ -689,6 +720,7 @@ func NewHaqq(
689
720
ibcexported .ModuleName ,
690
721
// no-op modules
691
722
ibctransfertypes .ModuleName ,
723
+ packetforwardtypes .ModuleName ,
692
724
icatypes .ModuleName ,
693
725
authtypes .ModuleName ,
694
726
banktypes .ModuleName ,
@@ -717,6 +749,7 @@ func NewHaqq(
717
749
// no-op modules
718
750
ibcexported .ModuleName ,
719
751
ibctransfertypes .ModuleName ,
752
+ packetforwardtypes .ModuleName ,
720
753
icatypes .ModuleName ,
721
754
capabilitytypes .ModuleName ,
722
755
authtypes .ModuleName ,
@@ -765,6 +798,7 @@ func NewHaqq(
765
798
genutiltypes .ModuleName ,
766
799
evidencetypes .ModuleName ,
767
800
ibctransfertypes .ModuleName ,
801
+ packetforwardtypes .ModuleName ,
768
802
icatypes .ModuleName ,
769
803
authz .ModuleName ,
770
804
feegrant .ModuleName ,
@@ -1129,6 +1163,7 @@ func initParamsKeeper(
1129
1163
paramsKeeper .Subspace (ibctransfertypes .ModuleName )
1130
1164
paramsKeeper .Subspace (ibcexported .ModuleName )
1131
1165
paramsKeeper .Subspace (icahosttypes .SubModuleName )
1166
+ paramsKeeper .Subspace (packetforwardtypes .ModuleName ).WithKeyTable (packetforwardtypes .ParamKeyTable ())
1132
1167
// ethermint subspaces
1133
1168
paramsKeeper .Subspace (evmtypes .ModuleName ).WithKeyTable (evmtypes .ParamKeyTable ()) //nolint: staticcheck
1134
1169
paramsKeeper .Subspace (feemarkettypes .ModuleName ).WithKeyTable (feemarkettypes .ParamKeyTable ())
@@ -1227,6 +1262,12 @@ func (app *Haqq) setupUpgradeHandlers() {
1227
1262
v173 .CreateUpgradeHandler (app .mm , app .configurator ),
1228
1263
)
1229
1264
1265
+ // v1.7.4 Revesting upgrade + Packet Forward Middleware
1266
+ app .UpgradeKeeper .SetUpgradeHandler (
1267
+ v174 .UpgradeName ,
1268
+ v174 .CreateUpgradeHandler (app .mm , app .configurator , app .AccountKeeper , app .LiquidVestingKeeper ),
1269
+ )
1270
+
1230
1271
// When a planned update height is reached, the old binary will panic
1231
1272
// writing on disk the height and name of the update that triggered it
1232
1273
// This will read that value, and execute the preparations for the upgrade.
@@ -1261,6 +1302,12 @@ func (app *Haqq) setupUpgradeHandlers() {
1261
1302
liquidvestingtypes .ModuleName ,
1262
1303
},
1263
1304
}
1305
+ case v174 .UpgradeName :
1306
+ storeUpgrades = & storetypes.StoreUpgrades {
1307
+ Added : []string {
1308
+ packetforwardtypes .ModuleName ,
1309
+ },
1310
+ }
1264
1311
}
1265
1312
1266
1313
if storeUpgrades != nil {
0 commit comments