@@ -4,28 +4,25 @@ import (
4
4
"context"
5
5
"encoding/json"
6
6
"fmt"
7
+ ibccallbacks "github.com/cosmos/ibc-go/modules/apps/callbacks"
7
8
"io"
8
9
"io/fs"
9
10
"net/http"
10
11
"os"
11
12
"path/filepath"
12
- "slices"
13
13
"sort"
14
14
15
15
"github.com/CosmWasm/wasmd/x/wasm"
16
16
wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
17
17
wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types"
18
+ abci "github.com/cometbft/cometbft/abci/types"
19
+ tmos "github.com/cometbft/cometbft/libs/os"
20
+ tmproto "github.com/cometbft/cometbft/proto/tendermint/types"
18
21
dbm "github.com/cosmos/cosmos-db"
19
22
"github.com/cosmos/gogoproto/proto"
20
23
"github.com/ignite/cli/ignite/pkg/openapiconsole"
21
24
"github.com/prometheus/client_golang/prometheus"
22
25
"github.com/spf13/cast"
23
- "google.golang.org/protobuf/reflect/protodesc"
24
- "google.golang.org/protobuf/types/descriptorpb"
25
-
26
- abci "github.com/cometbft/cometbft/abci/types"
27
- tmos "github.com/cometbft/cometbft/libs/os"
28
- tmproto "github.com/cometbft/cometbft/proto/tendermint/types"
29
26
30
27
autocliv1 "cosmossdk.io/api/cosmos/autocli/v1"
31
28
reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1"
@@ -486,13 +483,14 @@ func New(
486
483
)
487
484
488
485
// Set legacy router for backwards compatibility with gov v1beta1
489
- app . GovKeeper .SetLegacyRouter (govRouter )
486
+ govKeeper .SetLegacyRouter (govRouter )
490
487
491
488
app .GovKeeper = * govKeeper .SetHooks (
492
489
govtypes .NewMultiGovHooks (
493
490
// register the governance hooks
494
491
),
495
492
)
493
+
496
494
// Create IBC Keeper
497
495
app .IBCKeeper = ibckeeper .NewKeeper (
498
496
appCodec ,
@@ -504,6 +502,16 @@ func New(
504
502
authtypes .NewModuleAddress (govtypes .ModuleName ).String (),
505
503
)
506
504
505
+ // IBC Fee Module keeper
506
+ app .IBCFeeKeeper = ibcfeekeeper .NewKeeper (
507
+ appCodec , keys [ibcfeetypes .StoreKey ],
508
+ app .IBCKeeper .ChannelKeeper , // may be replaced with IBC middleware
509
+ app .IBCKeeper .ChannelKeeper ,
510
+ app .IBCKeeper .PortKeeper ,
511
+ app .AccountKeeper ,
512
+ app .BankKeeper ,
513
+ )
514
+
507
515
// Create Transfer Keepers
508
516
app .TransferKeeper = ibctransferkeeper .NewKeeper (
509
517
appCodec ,
@@ -518,16 +526,6 @@ func New(
518
526
authtypes .NewModuleAddress (govtypes .ModuleName ).String (),
519
527
)
520
528
521
- // IBC Fee Module keeper
522
- app .IBCFeeKeeper = ibcfeekeeper .NewKeeper (
523
- appCodec , keys [ibcfeetypes .StoreKey ],
524
- app .IBCKeeper .ChannelKeeper , // may be replaced with IBC middleware
525
- app .IBCKeeper .ChannelKeeper ,
526
- app .IBCKeeper .PortKeeper ,
527
- app .AccountKeeper ,
528
- app .BankKeeper ,
529
- )
530
-
531
529
app .ICAHostKeeper = icahostkeeper .NewKeeper (
532
530
appCodec ,
533
531
keys [icahosttypes .StoreKey ],
@@ -540,6 +538,8 @@ func New(
540
538
app .MsgServiceRouter (),
541
539
authtypes .NewModuleAddress (govtypes .ModuleName ).String (),
542
540
)
541
+ // set grpc router for ica host
542
+ app .ICAHostKeeper .WithQueryRouter (app .GRPCQueryRouter ())
543
543
544
544
app .ICAControllerKeeper = icacontrollerkeeper .NewKeeper (
545
545
appCodec ,
@@ -611,31 +611,43 @@ func New(
611
611
wasmOpts ... ,
612
612
)
613
613
614
- // Create Transfer Stack
615
- var transferStack ibcporttypes.IBCModule
616
- transferStack = transfer .NewIBCModule (app .TransferKeeper )
617
- transferStack = ibcfee .NewIBCMiddleware (transferStack , app .IBCFeeKeeper )
614
+ // Create fee enabled wasm ibc Stack
615
+ var wasmStack ibcporttypes.IBCModule
616
+ wasmStackIBCHandler := wasm .NewIBCHandler (app .WasmKeeper , app .IBCKeeper .ChannelKeeper , app .IBCFeeKeeper )
617
+ wasmStack = ibcfee .NewIBCMiddleware (wasmStackIBCHandler , app .IBCFeeKeeper )
618
+
618
619
// Create Interchain Accounts Stack
619
620
// SendPacket, since it is originating from the application to core IBC:
620
621
// icaAuthModuleKeeper.SendTx -> icaController.SendPacket -> fee.SendPacket -> channel.SendPacket
621
622
var icaControllerStack ibcporttypes.IBCModule
623
+
622
624
// integration point for custom authentication modules
623
625
//nolint:lll
624
626
// see https://medium.com/the-interchain-foundation/ibc-go-v6-changes-to-interchain-accounts-and-how-it-impacts-your-chain-806c185300d7
625
627
var noAuthzModule ibcporttypes.IBCModule
626
628
icaControllerStack = icacontroller .NewIBCMiddleware (noAuthzModule , app .ICAControllerKeeper )
629
+ icaControllerStack = icacontroller .NewIBCMiddleware (icaControllerStack , app .ICAControllerKeeper )
630
+ icaControllerStack = ibccallbacks .NewIBCMiddleware (icaControllerStack , app .IBCFeeKeeper , wasmStackIBCHandler , wasm .DefaultMaxIBCCallbackGas )
631
+ icaICS4Wrapper := icaControllerStack .(ibcporttypes.ICS4Wrapper )
627
632
icaControllerStack = ibcfee .NewIBCMiddleware (icaControllerStack , app .IBCFeeKeeper )
628
633
634
+ // Since the callbacks middleware itself is an ics4wrapper, it needs to be passed to the ica controller keeper
635
+ app .ICAControllerKeeper .WithICS4Wrapper (icaICS4Wrapper )
636
+
629
637
// RecvPacket, message that originates from core IBC and goes down to app, the flow is:
630
638
// channel.RecvPacket -> fee.OnRecvPacket -> icaHost.OnRecvPacket
631
639
var icaHostStack ibcporttypes.IBCModule
632
640
icaHostStack = icahost .NewIBCModule (app .ICAHostKeeper )
633
641
icaHostStack = ibcfee .NewIBCMiddleware (icaHostStack , app .IBCFeeKeeper )
634
642
635
- // Create fee enabled wasm ibc Stack
636
- var wasmStack ibcporttypes.IBCModule
637
- wasmStack = wasm .NewIBCHandler (app .WasmKeeper , app .IBCKeeper .ChannelKeeper , app .IBCFeeKeeper )
638
- wasmStack = ibcfee .NewIBCMiddleware (wasmStack , app .IBCFeeKeeper )
643
+ // Create Transfer Stack
644
+ var transferStack ibcporttypes.IBCModule
645
+ transferStack = transfer .NewIBCModule (app .TransferKeeper )
646
+ transferStack = ibccallbacks .NewIBCMiddleware (transferStack , app .IBCFeeKeeper , wasmStackIBCHandler , wasm .DefaultMaxIBCCallbackGas )
647
+ transferICS4Wrapper := transferStack .(ibcporttypes.ICS4Wrapper )
648
+ transferStack = ibcfee .NewIBCMiddleware (transferStack , app .IBCFeeKeeper )
649
+ // Since the callbacks middleware itself is an ics4wrapper, it needs to be passed to the ica controller keeper
650
+ app .TransferKeeper .WithICS4Wrapper (transferICS4Wrapper )
639
651
640
652
// Create static IBC router, add transfer route, then set and seal it
641
653
ibcRouter := ibcporttypes .NewRouter ()
0 commit comments