Skip to content

Commit 455cfa5

Browse files
authored
Merge pull request #93 from burnt-labs/feat/ibc-hooks
ibc hooks and packet forward middleware
2 parents dc2f757 + 0aa385a commit 455cfa5

8 files changed

Lines changed: 109 additions & 35 deletions

File tree

Makefile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
#!/usr/bin/make -f
22

33
PACKAGES_SIMTEST=$(shell go list ./... | grep '/simulation')
4-
#VERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//')
5-
VERSION := 0.1.0
4+
VERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//')
65
COMMIT := $(shell git log -1 --format='%H')
76
LEDGER_ENABLED ?= true
87
SDK_PACK := $(shell go list -m github.com/cosmos/cosmos-sdk | sed 's/ /\@/g')

app/app.go

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,12 @@ import (
9595
upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client"
9696
upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper"
9797
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
98+
packetforward "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router"
99+
packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper"
100+
packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types"
101+
ibchooks "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7"
102+
ibchookskeeper "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/keeper"
103+
ibchookstypes "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types"
98104
ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts"
99105
icacontroller "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller"
100106
icacontrollerkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/keeper"
@@ -235,6 +241,8 @@ var (
235241
transfer.AppModuleBasic{},
236242
ica.AppModuleBasic{},
237243
ibcfee.AppModuleBasic{},
244+
ibchooks.AppModuleBasic{},
245+
packetforward.AppModuleBasic{},
238246
)
239247

240248
// module account permissions
@@ -300,6 +308,9 @@ type WasmApp struct {
300308
TransferKeeper ibctransferkeeper.Keeper
301309
WasmKeeper wasm.Keeper
302310
AbstractAccountKeeper aakeeper.Keeper
311+
IBCHooksKeeper *ibchookskeeper.Keeper
312+
ContractKeeper *wasmkeeper.PermissionedKeeper
313+
PacketForwardKeeper *packetforwardkeeper.Keeper
303314

304315
XionKeeper xionkeeper.Keeper
305316

@@ -310,6 +321,10 @@ type WasmApp struct {
310321
ScopedIBCFeeKeeper capabilitykeeper.ScopedKeeper
311322
ScopedWasmKeeper capabilitykeeper.ScopedKeeper
312323

324+
// IBC middleware wrappers
325+
Ics20WasmHooks *ibchooks.WasmHooks
326+
HooksICS4Wrapper ibchooks.ICS4Middleware
327+
313328
// the module manager
314329
ModuleManager *module.Manager
315330

@@ -353,6 +368,7 @@ func NewWasmApp(
353368
ibcexported.StoreKey, ibctransfertypes.StoreKey, ibcfeetypes.StoreKey,
354369
wasm.StoreKey, icahosttypes.StoreKey, aatypes.StoreKey,
355370
icacontrollertypes.StoreKey, globalfee.StoreKey, xiontypes.StoreKey,
371+
ibchookstypes.StoreKey, packetforwardtypes.StoreKey,
356372
)
357373

358374
tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey)
@@ -560,27 +576,56 @@ func NewWasmApp(
560576
app.AccountKeeper,
561577
authtypes.NewModuleAddress(govtypes.ModuleName).String())
562578

579+
// Configure the hooks keeper
580+
hooksKeeper := ibchookskeeper.NewKeeper(
581+
keys[ibchookstypes.StoreKey],
582+
)
583+
app.IBCHooksKeeper = &hooksKeeper
584+
585+
xionPrefix := sdk.GetConfig().GetBech32AccountAddrPrefix()
586+
wasmHooks := ibchooks.NewWasmHooks(app.IBCHooksKeeper, nil, xionPrefix) // The contract keeper needs to be set later
587+
app.Ics20WasmHooks = &wasmHooks
588+
app.HooksICS4Wrapper = ibchooks.NewICS4Middleware(
589+
app.IBCKeeper.ChannelKeeper,
590+
app.Ics20WasmHooks,
591+
)
592+
563593
// IBC Fee Module keeper
564594
app.IBCFeeKeeper = ibcfeekeeper.NewKeeper(
565595
appCodec, keys[ibcfeetypes.StoreKey],
566-
app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware
596+
app.HooksICS4Wrapper, // replaced with IBC middleware
567597
app.IBCKeeper.ChannelKeeper,
568598
&app.IBCKeeper.PortKeeper, app.AccountKeeper, app.BankKeeper,
569599
)
570600

601+
// Initialize packet forward middleware router
602+
app.PacketForwardKeeper = packetforwardkeeper.NewKeeper(
603+
appCodec,
604+
keys[packetforwardtypes.StoreKey],
605+
app.GetSubspace(packetforwardtypes.ModuleName),
606+
app.TransferKeeper, // Will be zero-value here. Reference is set later on with SetTransferKeeper.
607+
app.IBCKeeper.ChannelKeeper,
608+
app.DistrKeeper,
609+
app.BankKeeper,
610+
app.IBCKeeper.ChannelKeeper,
611+
)
612+
571613
// Create Transfer Keepers
572614
app.TransferKeeper = ibctransferkeeper.NewKeeper(
573615
appCodec,
574616
keys[ibctransfertypes.StoreKey],
575617
app.GetSubspace(ibctransfertypes.ModuleName),
576-
app.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware
618+
// The ICS4Wrapper is replaced by the PacketForwardKeeper instead of the channel so that sending can be overridden by the middleware
619+
app.PacketForwardKeeper,
577620
app.IBCKeeper.ChannelKeeper,
578621
&app.IBCKeeper.PortKeeper,
579622
app.AccountKeeper,
580623
app.BankKeeper,
581624
scopedTransferKeeper,
582625
)
583626

627+
app.PacketForwardKeeper.SetTransferKeeper(app.TransferKeeper)
628+
584629
app.ICAHostKeeper = icahostkeeper.NewKeeper(
585630
appCodec,
586631
keys[icahosttypes.StoreKey],
@@ -653,6 +698,14 @@ func NewWasmApp(
653698
var transferStack porttypes.IBCModule
654699
transferStack = transfer.NewIBCModule(app.TransferKeeper)
655700
transferStack = ibcfee.NewIBCMiddleware(transferStack, app.IBCFeeKeeper)
701+
transferStack = ibchooks.NewIBCMiddleware(transferStack, &app.HooksICS4Wrapper)
702+
transferStack = packetforward.NewIBCMiddleware(
703+
transferStack,
704+
app.PacketForwardKeeper,
705+
0,
706+
packetforwardkeeper.DefaultForwardTransferPacketTimeoutTimestamp,
707+
packetforwardkeeper.DefaultRefundTransferPacketTimeoutTimestamp,
708+
)
656709

657710
// Create Interchain Accounts Stack
658711
// SendPacket, since it is originating from the application to core IBC:
@@ -723,6 +776,8 @@ func NewWasmApp(
723776
transfer.NewAppModule(app.TransferKeeper),
724777
ibcfee.NewAppModule(app.IBCFeeKeeper),
725778
ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper),
779+
ibchooks.NewAppModule(app.AccountKeeper),
780+
packetforward.NewAppModule(app.PacketForwardKeeper),
726781
crisis.NewAppModule(app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), // always be last to make sure that it checks for all invariants and not only part of them
727782
)
728783

@@ -748,6 +803,8 @@ func NewWasmApp(
748803
ibcfeetypes.ModuleName,
749804
wasm.ModuleName,
750805
aatypes.ModuleName,
806+
ibchookstypes.ModuleName,
807+
packetforwardtypes.ModuleName,
751808
)
752809

753810
app.ModuleManager.SetOrderEndBlockers(
@@ -767,6 +824,8 @@ func NewWasmApp(
767824
ibcfeetypes.ModuleName,
768825
wasm.ModuleName,
769826
aatypes.ModuleName,
827+
ibchookstypes.ModuleName,
828+
packetforwardtypes.ModuleName,
770829
)
771830

772831
// NOTE: The genutils module must occur after staking so that pools are
@@ -791,6 +850,8 @@ func NewWasmApp(
791850
// wasm after ibc transfer
792851
wasm.ModuleName,
793852
aatypes.ModuleName,
853+
ibchookstypes.ModuleName,
854+
packetforwardtypes.ModuleName,
794855
}
795856
app.ModuleManager.SetOrderInitGenesis(genesisModuleOrder...)
796857
app.ModuleManager.SetOrderExportGenesis(genesisModuleOrder...)
@@ -857,6 +918,10 @@ func NewWasmApp(
857918
app.ScopedICAHostKeeper = scopedICAHostKeeper
858919
app.ScopedICAControllerKeeper = scopedICAControllerKeeper
859920

921+
// set the contract keeper for the Ics20WasmHooks
922+
app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper)
923+
app.Ics20WasmHooks.ContractKeeper = &app.WasmKeeper
924+
860925
// In v0.46, the SDK introduces _postHandlers_. PostHandlers are like
861926
// antehandlers, but are run _after_ the `runMsgs` execution. They are also
862927
// defined as a chain, and have the same signature as antehandlers.
@@ -1148,6 +1213,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino
11481213
paramsKeeper.Subspace(xiontypes.ModuleName)
11491214
paramsKeeper.Subspace(wasm.ModuleName)
11501215
paramsKeeper.Subspace(aatypes.ModuleName)
1216+
paramsKeeper.Subspace(packetforwardtypes.ModuleName)
11511217

11521218
return paramsKeeper
11531219
}

app/upgrades/v2/constants.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package v2
22

33
import (
4+
xiontypes "github.com/burnt-labs/xion/x/xion/types"
45
store "github.com/cosmos/cosmos-sdk/store/types"
6+
packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types"
57

68
"github.com/burnt-labs/xion/app/upgrades"
79

810
"github.com/burnt-labs/xion/x/globalfee"
11+
ibchookstypes "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types"
912
aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types"
1013
)
1114

@@ -21,6 +24,9 @@ var Upgrade = upgrades.Upgrade{
2124
Added: []string{
2225
globalfee.ModuleName,
2326
aatypes.ModuleName,
27+
ibchookstypes.StoreKey,
28+
packetforwardtypes.ModuleName,
29+
xiontypes.ModuleName,
2430
},
2531
},
2632
}

go.mod

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.19
44

55
require (
66
github.com/CosmWasm/wasmvm v1.2.4 // indirect
7-
github.com/cosmos/cosmos-proto v1.0.0-beta.2
7+
github.com/cosmos/cosmos-proto v1.0.0-beta.3
88
github.com/cosmos/cosmos-sdk v0.47.3
99
github.com/cosmos/gogogateway v1.2.0 // indirect
1010
github.com/cosmos/gogoproto v1.4.10
@@ -33,7 +33,7 @@ require (
3333

3434
require (
3535
cosmossdk.io/api v0.3.1
36-
cosmossdk.io/core v0.5.1
36+
cosmossdk.io/core v0.6.1
3737
cosmossdk.io/depinject v1.0.0-alpha.3
3838
cosmossdk.io/errors v1.0.0
3939
cosmossdk.io/math v1.0.1
@@ -42,6 +42,8 @@ require (
4242
github.com/armon/go-metrics v0.4.1
4343
github.com/cometbft/cometbft v0.37.2
4444
github.com/cometbft/cometbft-db v0.8.0
45+
github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230726182236-3a9d46a7c2a4
46+
github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4
4547
github.com/golang/mock v1.6.0
4648
github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f
4749
github.com/spf13/viper v1.16.0
@@ -58,7 +60,7 @@ require (
5860
cosmossdk.io/log v1.1.0 // indirect
5961
filippo.io/edwards25519 v1.0.0 // indirect
6062
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
61-
github.com/99designs/keyring v1.2.1 // indirect
63+
github.com/99designs/keyring v1.2.2 // indirect
6264
github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect
6365
github.com/aws/aws-sdk-go v1.44.203 // indirect
6466
github.com/beorn7/perks v1.0.1 // indirect
@@ -74,7 +76,7 @@ require (
7476
github.com/confio/ics23/go v0.9.0 // indirect
7577
github.com/cosmos/btcutil v1.0.5 // indirect
7678
github.com/cosmos/go-bip39 v1.0.0 // indirect
77-
github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect
79+
github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect
7880
github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect
7981
github.com/creachadair/taskgroup v0.4.2 // indirect
8082
github.com/danieljoos/wincred v1.1.2 // indirect
@@ -118,6 +120,7 @@ require (
118120
github.com/hashicorp/hcl v1.0.0 // indirect
119121
github.com/hdevalence/ed25519consensus v0.1.0 // indirect
120122
github.com/huandu/skiplist v1.2.0 // indirect
123+
github.com/iancoleman/orderedmap v0.2.0 // indirect
121124
github.com/improbable-eng/grpc-web v0.15.0 // indirect
122125
github.com/inconshreveable/mousetrap v1.1.0 // indirect
123126
github.com/jmespath/go-jmespath v0.4.0 // indirect
@@ -184,9 +187,10 @@ replace (
184187
// See: https://github.com/cosmos/cosmos-sdk/issues/10409
185188
github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.8.1
186189

190+
github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1
191+
187192
// pin version! 126854af5e6d has issues with the store so that queries fail
188193
github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
189-
190194
)
191195

192196
replace github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20230721042501-ef9e3f63d0cd

0 commit comments

Comments
 (0)