mirror of
https://github.com/planetmint/planetmint-go.git
synced 2025-07-04 19:52:30 +00:00
206 lines
8.7 KiB
Go
206 lines
8.7 KiB
Go
package app
|
|
|
|
import (
|
|
"cosmossdk.io/core/appmodule"
|
|
storetypes "cosmossdk.io/store/types"
|
|
cdctypes "github.com/cosmos/cosmos-sdk/codec/types"
|
|
servertypes "github.com/cosmos/cosmos-sdk/server/types"
|
|
"github.com/cosmos/cosmos-sdk/types/module"
|
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
|
govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
|
|
paramstypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
|
"github.com/cosmos/ibc-go/modules/capability"
|
|
capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper"
|
|
capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
|
|
icamodule "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts"
|
|
icacontroller "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller"
|
|
icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper"
|
|
icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types"
|
|
icahost "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host"
|
|
icahostkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/keeper"
|
|
icahosttypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types"
|
|
icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types"
|
|
ibcfee "github.com/cosmos/ibc-go/v8/modules/apps/29-fee"
|
|
ibcfeekeeper "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/keeper"
|
|
ibcfeetypes "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types"
|
|
ibctransfer "github.com/cosmos/ibc-go/v8/modules/apps/transfer"
|
|
ibctransferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper"
|
|
ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"
|
|
ibc "github.com/cosmos/ibc-go/v8/modules/core"
|
|
ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"
|
|
ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"
|
|
porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types"
|
|
ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported"
|
|
ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper"
|
|
solomachine "github.com/cosmos/ibc-go/v8/modules/light-clients/06-solomachine"
|
|
ibctm "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint"
|
|
// this line is used by starport scaffolding # ibc/app/import
|
|
)
|
|
|
|
// registerIBCModules register IBC keepers and non dependency inject modules.
|
|
func (app *App) registerIBCModules(appOpts servertypes.AppOptions) error {
|
|
// set up non depinject support modules store keys
|
|
if err := app.RegisterStores(
|
|
storetypes.NewKVStoreKey(capabilitytypes.StoreKey),
|
|
storetypes.NewKVStoreKey(ibcexported.StoreKey),
|
|
storetypes.NewKVStoreKey(ibctransfertypes.StoreKey),
|
|
storetypes.NewKVStoreKey(ibcfeetypes.StoreKey),
|
|
storetypes.NewKVStoreKey(icahosttypes.StoreKey),
|
|
storetypes.NewKVStoreKey(icacontrollertypes.StoreKey),
|
|
storetypes.NewMemoryStoreKey(capabilitytypes.MemStoreKey),
|
|
storetypes.NewTransientStoreKey(paramstypes.TStoreKey),
|
|
); err != nil {
|
|
return err
|
|
}
|
|
|
|
// register the key tables for legacy param subspaces
|
|
keyTable := ibcclienttypes.ParamKeyTable()
|
|
keyTable.RegisterParamSet(&ibcconnectiontypes.Params{})
|
|
app.ParamsKeeper.Subspace(ibcexported.ModuleName).WithKeyTable(keyTable)
|
|
app.ParamsKeeper.Subspace(ibctransfertypes.ModuleName).WithKeyTable(ibctransfertypes.ParamKeyTable())
|
|
app.ParamsKeeper.Subspace(icacontrollertypes.SubModuleName).WithKeyTable(icacontrollertypes.ParamKeyTable())
|
|
app.ParamsKeeper.Subspace(icahosttypes.SubModuleName).WithKeyTable(icahosttypes.ParamKeyTable())
|
|
|
|
// add capability keeper and ScopeToModule for ibc module
|
|
app.CapabilityKeeper = capabilitykeeper.NewKeeper(
|
|
app.AppCodec(),
|
|
app.GetKey(capabilitytypes.StoreKey),
|
|
app.GetMemKey(capabilitytypes.MemStoreKey),
|
|
)
|
|
|
|
// add capability keeper and ScopeToModule for ibc module
|
|
scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibcexported.ModuleName)
|
|
scopedIBCTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName)
|
|
scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName)
|
|
scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName)
|
|
|
|
// Create IBC keeper
|
|
app.IBCKeeper = ibckeeper.NewKeeper(
|
|
app.appCodec,
|
|
app.GetKey(ibcexported.StoreKey),
|
|
app.GetSubspace(ibcexported.ModuleName),
|
|
app.StakingKeeper,
|
|
app.UpgradeKeeper,
|
|
scopedIBCKeeper,
|
|
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
|
|
)
|
|
|
|
// Register the proposal types
|
|
// Deprecated: Avoid adding new handlers, instead use the new proposal flow
|
|
// by granting the governance module the right to execute the message.
|
|
// See: https://docs.cosmos.network/main/modules/gov#proposal-messages
|
|
govRouter := govv1beta1.NewRouter()
|
|
govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler)
|
|
|
|
app.IBCFeeKeeper = ibcfeekeeper.NewKeeper(
|
|
app.appCodec, app.GetKey(ibcfeetypes.StoreKey),
|
|
app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware
|
|
app.IBCKeeper.ChannelKeeper,
|
|
app.IBCKeeper.PortKeeper, app.AccountKeeper, app.BankKeeper,
|
|
)
|
|
|
|
// Create IBC transfer keeper
|
|
app.TransferKeeper = ibctransferkeeper.NewKeeper(
|
|
app.appCodec,
|
|
app.GetKey(ibctransfertypes.StoreKey),
|
|
app.GetSubspace(ibctransfertypes.ModuleName),
|
|
app.IBCFeeKeeper,
|
|
app.IBCKeeper.ChannelKeeper,
|
|
app.IBCKeeper.PortKeeper,
|
|
app.AccountKeeper,
|
|
app.BankKeeper,
|
|
scopedIBCTransferKeeper,
|
|
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
|
|
)
|
|
|
|
// Create interchain account keepers
|
|
app.ICAHostKeeper = icahostkeeper.NewKeeper(
|
|
app.appCodec,
|
|
app.GetKey(icahosttypes.StoreKey),
|
|
app.GetSubspace(icahosttypes.SubModuleName),
|
|
app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack
|
|
app.IBCKeeper.ChannelKeeper,
|
|
app.IBCKeeper.PortKeeper,
|
|
app.AccountKeeper,
|
|
scopedICAHostKeeper,
|
|
app.MsgServiceRouter(),
|
|
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
|
|
)
|
|
app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper(
|
|
app.appCodec,
|
|
app.GetKey(icacontrollertypes.StoreKey),
|
|
app.GetSubspace(icacontrollertypes.SubModuleName),
|
|
app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack
|
|
app.IBCKeeper.ChannelKeeper,
|
|
app.IBCKeeper.PortKeeper,
|
|
scopedICAControllerKeeper,
|
|
app.MsgServiceRouter(),
|
|
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
|
|
)
|
|
app.GovKeeper.SetLegacyRouter(govRouter)
|
|
|
|
// Create IBC modules with ibcfee middleware
|
|
transferIBCModule := ibcfee.NewIBCMiddleware(ibctransfer.NewIBCModule(app.TransferKeeper), app.IBCFeeKeeper)
|
|
|
|
// integration point for custom authentication modules
|
|
var noAuthzModule porttypes.IBCModule
|
|
icaControllerIBCModule := ibcfee.NewIBCMiddleware(
|
|
icacontroller.NewIBCMiddleware(noAuthzModule, app.ICAControllerKeeper),
|
|
app.IBCFeeKeeper,
|
|
)
|
|
|
|
icaHostIBCModule := ibcfee.NewIBCMiddleware(icahost.NewIBCModule(app.ICAHostKeeper), app.IBCFeeKeeper)
|
|
|
|
// Create static IBC router, add transfer route, then set and seal it
|
|
ibcRouter := porttypes.NewRouter().
|
|
AddRoute(ibctransfertypes.ModuleName, transferIBCModule).
|
|
AddRoute(icacontrollertypes.SubModuleName, icaControllerIBCModule).
|
|
AddRoute(icahosttypes.SubModuleName, icaHostIBCModule)
|
|
|
|
// this line is used by starport scaffolding # ibc/app/module
|
|
|
|
app.IBCKeeper.SetRouter(ibcRouter)
|
|
|
|
app.ScopedIBCKeeper = scopedIBCKeeper
|
|
app.ScopedIBCTransferKeeper = scopedIBCTransferKeeper
|
|
app.ScopedICAHostKeeper = scopedICAHostKeeper
|
|
app.ScopedICAControllerKeeper = scopedICAControllerKeeper
|
|
|
|
// register IBC modules
|
|
if err := app.RegisterModules(
|
|
ibc.NewAppModule(app.IBCKeeper),
|
|
ibctransfer.NewAppModule(app.TransferKeeper),
|
|
ibcfee.NewAppModule(app.IBCFeeKeeper),
|
|
icamodule.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper),
|
|
capability.NewAppModule(app.appCodec, *app.CapabilityKeeper, false),
|
|
ibctm.NewAppModule(),
|
|
solomachine.NewAppModule(),
|
|
); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// RegisterIBC Since the IBC modules don't support dependency injection,
|
|
// we need to manually register the modules on the client side.
|
|
// This needs to be removed after IBC supports App Wiring.
|
|
func RegisterIBC(registry cdctypes.InterfaceRegistry) map[string]appmodule.AppModule {
|
|
modules := map[string]appmodule.AppModule{
|
|
ibcexported.ModuleName: ibc.AppModule{},
|
|
ibctransfertypes.ModuleName: ibctransfer.AppModule{},
|
|
ibcfeetypes.ModuleName: ibcfee.AppModule{},
|
|
icatypes.ModuleName: icamodule.AppModule{},
|
|
capabilitytypes.ModuleName: capability.AppModule{},
|
|
ibctm.ModuleName: ibctm.AppModule{},
|
|
solomachine.ModuleName: solomachine.AppModule{},
|
|
}
|
|
|
|
for name, m := range modules {
|
|
module.CoreAppModuleBasicAdaptor(name, m).RegisterInterfaces(registry)
|
|
}
|
|
|
|
return modules
|
|
}
|