diff --git a/app/app.go b/app/app.go index 8cec1e40..5459a5ae 100644 --- a/app/app.go +++ b/app/app.go @@ -88,7 +88,6 @@ import ( upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" "github.com/cosmos/ibc-go/v7/modules/apps/transfer" - ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" ibc "github.com/cosmos/ibc-go/v7/modules/core" ibcclientclient "github.com/cosmos/ibc-go/v7/modules/core/02-client/client" @@ -223,7 +222,7 @@ type App struct { ParamsKeeper paramskeeper.Keeper IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly EvidenceKeeper evidencekeeper.Keeper - TransferKeeper ibctransferkeeper.Keeper + TransferKeeper IBCTransferKeeper FeeGrantKeeper feegrantkeeper.Keeper GroupKeeper groupkeeper.Keeper OracleKeeper oraclekeeper.Keeper @@ -456,7 +455,7 @@ func New( ) // Create Transfer Keepers - app.TransferKeeper = ibctransferkeeper.NewKeeper( + app.TransferKeeper = NewIBCTransferKeeper( appCodec, keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName), @@ -467,8 +466,8 @@ func New( app.BankKeeper, scopedTransferKeeper, ) - transferModule := transfer.NewAppModule(app.TransferKeeper) - transferIBCModule := transfer.NewIBCModule(app.TransferKeeper) + transferModule := transfer.NewAppModule(app.TransferKeeper.Keeper) + transferIBCModule := transfer.NewIBCModule(app.TransferKeeper.Keeper) // Create evidence Keeper for to register the IBC light client misbehavior evidence route evidenceKeeper := evidencekeeper.NewKeeper( diff --git a/app/ibctransfer.go b/app/ibctransfer.go new file mode 100644 index 00000000..3bb09512 --- /dev/null +++ b/app/ibctransfer.go @@ -0,0 +1,62 @@ +package app + +import ( + "context" + + "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + types "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + "github.com/cosmos/ibc-go/v7/modules/core/exported" +) + +type IBCTransferKeeper struct { + ibctransferkeeper.Keeper + + storeKey storetypes.StoreKey + cdc codec.BinaryCodec + paramSpace paramtypes.Subspace + + ics4Wrapper porttypes.ICS4Wrapper + channelKeeper types.ChannelKeeper + portKeeper types.PortKeeper + authKeeper types.AccountKeeper + bankKeeper types.BankKeeper + scopedKeeper exported.ScopedKeeper +} + +func (k IBCTransferKeeper) Transfer(goCtx context.Context, msg *types.MsgTransfer) (*types.MsgTransferResponse, error) { + // TODO: Custom IBC Transfer logic + return k.Keeper.Transfer(goCtx, msg) +} + +// NewIBCTransferKeeper creates a new IBC transfer Keeper instance +func NewIBCTransferKeeper( + cdc codec.BinaryCodec, key storetypes.StoreKey, paramSpace paramtypes.Subspace, + ics4Wrapper porttypes.ICS4Wrapper, channelKeeper types.ChannelKeeper, portKeeper types.PortKeeper, + authKeeper types.AccountKeeper, bankKeeper types.BankKeeper, scopedKeeper exported.ScopedKeeper, +) IBCTransferKeeper { + // ensure ibc transfer module account is set + if addr := authKeeper.GetModuleAddress(types.ModuleName); addr == nil { + panic("the IBC transfer module account has not been set") + } + + // set KeyTable if it has not already been set + if !paramSpace.HasKeyTable() { + paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) + } + + return IBCTransferKeeper{ + cdc: cdc, + storeKey: key, + paramSpace: paramSpace, + ics4Wrapper: ics4Wrapper, + channelKeeper: channelKeeper, + portKeeper: portKeeper, + authKeeper: authKeeper, + bankKeeper: bankKeeper, + scopedKeeper: scopedKeeper, + } +}