| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748 |
- package app
- import (
- "io"
- "net/http"
- "os"
- "path/filepath"
- "github.com/cosmos/cosmos-sdk/baseapp"
- "github.com/cosmos/cosmos-sdk/client"
- "github.com/cosmos/cosmos-sdk/client/grpc/tmservice"
- "github.com/cosmos/cosmos-sdk/client/rpc"
- "github.com/cosmos/cosmos-sdk/codec"
- "github.com/cosmos/cosmos-sdk/codec/types"
- "github.com/cosmos/cosmos-sdk/server/api"
- "github.com/cosmos/cosmos-sdk/server/config"
- servertypes "github.com/cosmos/cosmos-sdk/server/types"
- sdk "github.com/cosmos/cosmos-sdk/types"
- "github.com/cosmos/cosmos-sdk/types/module"
- "github.com/cosmos/cosmos-sdk/version"
- "github.com/cosmos/cosmos-sdk/x/auth"
- "github.com/cosmos/cosmos-sdk/x/auth/ante"
- authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest"
- authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
- authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
- authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
- "github.com/cosmos/cosmos-sdk/x/auth/vesting"
- vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
- "github.com/cosmos/cosmos-sdk/x/bank"
- bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
- banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
- "github.com/cosmos/cosmos-sdk/x/capability"
- capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper"
- capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types"
- "github.com/cosmos/cosmos-sdk/x/crisis"
- crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper"
- crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types"
- distr "github.com/cosmos/cosmos-sdk/x/distribution"
- distrclient "github.com/cosmos/cosmos-sdk/x/distribution/client"
- distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
- distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
- "github.com/cosmos/cosmos-sdk/x/evidence"
- evidencekeeper "github.com/cosmos/cosmos-sdk/x/evidence/keeper"
- evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types"
- "github.com/cosmos/cosmos-sdk/x/feegrant"
- feegrantkeeper "github.com/cosmos/cosmos-sdk/x/feegrant/keeper"
- feegrantmodule "github.com/cosmos/cosmos-sdk/x/feegrant/module"
- "github.com/cosmos/cosmos-sdk/x/genutil"
- genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
- "github.com/cosmos/cosmos-sdk/x/gov"
- govclient "github.com/cosmos/cosmos-sdk/x/gov/client"
- govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
- govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
- "github.com/cosmos/cosmos-sdk/x/mint"
- mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper"
- minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
- "github.com/cosmos/cosmos-sdk/x/params"
- paramsclient "github.com/cosmos/cosmos-sdk/x/params/client"
- paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper"
- paramstypes "github.com/cosmos/cosmos-sdk/x/params/types"
- paramproposal "github.com/cosmos/cosmos-sdk/x/params/types/proposal"
- "github.com/cosmos/cosmos-sdk/x/slashing"
- slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper"
- slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
- "github.com/cosmos/cosmos-sdk/x/staking"
- stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
- stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
- "github.com/cosmos/cosmos-sdk/x/upgrade"
- upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client"
- upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper"
- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
- "github.com/cosmos/ibc-go/v3/modules/apps/transfer"
- ibctransferkeeper "github.com/cosmos/ibc-go/v3/modules/apps/transfer/keeper"
- ibctransfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types"
- ibc "github.com/cosmos/ibc-go/v3/modules/core"
- ibcclient "github.com/cosmos/ibc-go/v3/modules/core/02-client"
- ibcporttypes "github.com/cosmos/ibc-go/v3/modules/core/05-port/types"
- ibchost "github.com/cosmos/ibc-go/v3/modules/core/24-host"
- ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper"
- "github.com/prometheus/client_golang/prometheus"
- "github.com/spf13/cast"
- abci "github.com/tendermint/tendermint/abci/types"
- tmjson "github.com/tendermint/tendermint/libs/json"
- "github.com/tendermint/tendermint/libs/log"
- tmos "github.com/tendermint/tendermint/libs/os"
- dbm "github.com/tendermint/tm-db"
- "github.com/CosmWasm/wasmd/x/wasm"
- wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
- "github.com/tendermint/spm/cosmoscmd"
- "github.com/tendermint/spm/openapiconsole"
- "github.com/wormhole-foundation/wormchain/docs"
- wormholemodule "github.com/wormhole-foundation/wormchain/x/wormhole"
- wormholemoduleante "github.com/wormhole-foundation/wormchain/x/wormhole/ante"
- wormholeclient "github.com/wormhole-foundation/wormchain/x/wormhole/client"
- wormholemodulekeeper "github.com/wormhole-foundation/wormchain/x/wormhole/keeper"
- wormholemoduletypes "github.com/wormhole-foundation/wormchain/x/wormhole/types"
- // this line is used by starport scaffolding # stargate/app/moduleImport
- )
- const (
- AccountAddressPrefix = "wormhole"
- Name = "wormchain"
- )
- // this line is used by starport scaffolding # stargate/wasm/app/enabledProposals
- func getGovProposalHandlers() []govclient.ProposalHandler {
- var govProposalHandlers []govclient.ProposalHandler
- // this line is used by starport scaffolding # stargate/app/govProposalHandlers
- govProposalHandlers = append(govProposalHandlers,
- paramsclient.ProposalHandler,
- distrclient.ProposalHandler,
- upgradeclient.ProposalHandler,
- upgradeclient.CancelProposalHandler,
- wormholeclient.GuardianSetUpdateProposalHandler,
- wormholeclient.WormholeGovernanceMessageProposalHandler,
- // this line is used by starport scaffolding # stargate/app/govProposalHandler
- )
- return govProposalHandlers
- }
- // GetWasmOpts build wasm options
- func GetWasmOpts(app *App, appOpts servertypes.AppOptions) []wasm.Option {
- var wasmOpts []wasm.Option
- if cast.ToBool(appOpts.Get("telemetry.enabled")) {
- wasmOpts = append(wasmOpts, wasmkeeper.WithVMCacheMetrics(prometheus.DefaultRegisterer))
- }
- // add the custom wormhole query handler
- wasmOpts = append(wasmOpts, wasmkeeper.WithQueryPlugins(wormholemodulekeeper.NewCustomQueryHandler(app.WormholeKeeper)))
- return wasmOpts
- }
- var (
- // DefaultNodeHome default home directories for the application daemon
- DefaultNodeHome string
- // ModuleBasics defines the module BasicManager is in charge of setting up basic,
- // non-dependant module elements, such as codec registration
- // and genesis verification.
- ModuleBasics = module.NewBasicManager(
- auth.AppModuleBasic{},
- genutil.AppModuleBasic{},
- bank.AppModuleBasic{},
- capability.AppModuleBasic{},
- staking.AppModuleBasic{},
- mint.AppModuleBasic{},
- distr.AppModuleBasic{},
- gov.NewAppModuleBasic(getGovProposalHandlers()...),
- params.AppModuleBasic{},
- crisis.AppModuleBasic{},
- slashing.AppModuleBasic{},
- feegrantmodule.AppModuleBasic{},
- ibc.AppModuleBasic{},
- upgrade.AppModuleBasic{},
- evidence.AppModuleBasic{},
- transfer.AppModuleBasic{},
- vesting.AppModuleBasic{},
- wormholemodule.AppModuleBasic{},
- // this line is used by starport scaffolding # stargate/app/moduleBasic
- wasm.AppModuleBasic{},
- )
- // module account permissions
- maccPerms = map[string][]string{
- authtypes.FeeCollectorName: nil,
- distrtypes.ModuleName: nil,
- minttypes.ModuleName: {authtypes.Minter},
- stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking},
- stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking},
- govtypes.ModuleName: {authtypes.Burner},
- ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner},
- wormholemoduletypes.ModuleName: nil,
- // this line is used by starport scaffolding # stargate/app/maccPerms
- wasm.ModuleName: {authtypes.Burner},
- }
- )
- var (
- _ cosmoscmd.CosmosApp = (*App)(nil)
- _ servertypes.Application = (*App)(nil)
- )
- func init() {
- userHomeDir, err := os.UserHomeDir()
- if err != nil {
- panic(err)
- }
- DefaultNodeHome = filepath.Join(userHomeDir, "."+Name)
- }
- // App extends an ABCI application, but with most of its parameters exported.
- // They are exported for convenience in creating helper functions, as object
- // capabilities aren't needed for testing.
- type App struct {
- *baseapp.BaseApp
- cdc *codec.LegacyAmino
- appCodec codec.Codec
- interfaceRegistry types.InterfaceRegistry
- invCheckPeriod uint
- // keys to access the substores
- keys map[string]*sdk.KVStoreKey
- tkeys map[string]*sdk.TransientStoreKey
- memKeys map[string]*sdk.MemoryStoreKey
- // keepers
- AccountKeeper authkeeper.AccountKeeper
- BankKeeper bankkeeper.Keeper
- CapabilityKeeper *capabilitykeeper.Keeper
- StakingKeeper stakingkeeper.Keeper
- SlashingKeeper slashingkeeper.Keeper
- MintKeeper mintkeeper.Keeper
- DistrKeeper distrkeeper.Keeper
- GovKeeper govkeeper.Keeper
- CrisisKeeper crisiskeeper.Keeper
- UpgradeKeeper upgradekeeper.Keeper
- 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
- FeeGrantKeeper feegrantkeeper.Keeper
- // make scoped keepers public for test purposes
- ScopedIBCKeeper capabilitykeeper.ScopedKeeper
- ScopedTransferKeeper capabilitykeeper.ScopedKeeper
- WormholeKeeper wormholemodulekeeper.Keeper
- // this line is used by starport scaffolding # stargate/app/keeperDeclaration
- wasmKeeper wasm.Keeper
- scopedWasmKeeper capabilitykeeper.ScopedKeeper
- // the module manager
- mm *module.Manager
- }
- // New returns a reference to an initialized Gaia.
- func New(
- logger log.Logger,
- db dbm.DB,
- traceStore io.Writer,
- loadLatest bool,
- skipUpgradeHeights map[int64]bool,
- homePath string,
- invCheckPeriod uint,
- encodingConfig cosmoscmd.EncodingConfig,
- appOpts servertypes.AppOptions,
- baseAppOptions ...func(*baseapp.BaseApp),
- ) cosmoscmd.App {
- appCodec := encodingConfig.Marshaler
- cdc := encodingConfig.Amino
- interfaceRegistry := encodingConfig.InterfaceRegistry
- bApp := baseapp.NewBaseApp(Name, logger, db, encodingConfig.TxConfig.TxDecoder(), baseAppOptions...)
- bApp.SetCommitMultiStoreTracer(traceStore)
- bApp.SetVersion(version.Version)
- bApp.SetInterfaceRegistry(interfaceRegistry)
- keys := sdk.NewKVStoreKeys(
- authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey,
- minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey,
- govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, feegrant.StoreKey,
- evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey,
- wormholemoduletypes.StoreKey,
- // this line is used by starport scaffolding # stargate/app/storeKey
- wasm.StoreKey,
- )
- tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey)
- memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey)
- app := &App{
- BaseApp: bApp,
- cdc: cdc,
- appCodec: appCodec,
- interfaceRegistry: interfaceRegistry,
- invCheckPeriod: invCheckPeriod,
- keys: keys,
- tkeys: tkeys,
- memKeys: memKeys,
- }
- app.ParamsKeeper = initParamsKeeper(appCodec, cdc, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey])
- // set the BaseApp's parameter store
- bApp.SetParamStore(app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramskeeper.ConsensusParamsKeyTable()))
- // add capability keeper and ScopeToModule for ibc module
- app.CapabilityKeeper = capabilitykeeper.NewKeeper(appCodec, keys[capabilitytypes.StoreKey], memKeys[capabilitytypes.MemStoreKey])
- // grant capabilities for the ibc and ibc-transfer modules
- scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName)
- scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName)
- // this line is used by starport scaffolding # stargate/app/scopedKeeper
- scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasm.ModuleName)
- // add keepers
- app.AccountKeeper = authkeeper.NewAccountKeeper(
- appCodec, keys[authtypes.StoreKey], app.GetSubspace(authtypes.ModuleName), authtypes.ProtoBaseAccount, maccPerms,
- )
- app.BankKeeper = bankkeeper.NewBaseKeeper(
- appCodec, keys[banktypes.StoreKey], app.AccountKeeper, app.GetSubspace(banktypes.ModuleName), app.ModuleAccountAddrs(),
- )
- app.WormholeKeeper = *wormholemodulekeeper.NewKeeper(
- appCodec,
- keys[wormholemoduletypes.StoreKey],
- keys[wormholemoduletypes.MemStoreKey],
- app.AccountKeeper,
- app.BankKeeper,
- )
- stakingKeeper := stakingkeeper.NewKeeper(
- appCodec, keys[stakingtypes.StoreKey], app.AccountKeeper, app.BankKeeper, app.WormholeKeeper, app.GetSubspace(stakingtypes.ModuleName),
- )
- app.MintKeeper = mintkeeper.NewKeeper(
- appCodec, keys[minttypes.StoreKey], app.GetSubspace(minttypes.ModuleName), &stakingKeeper,
- app.AccountKeeper, app.BankKeeper, authtypes.FeeCollectorName,
- )
- app.DistrKeeper = distrkeeper.NewKeeper(
- appCodec, keys[distrtypes.StoreKey], app.GetSubspace(distrtypes.ModuleName), app.AccountKeeper, app.BankKeeper,
- &stakingKeeper, authtypes.FeeCollectorName, app.ModuleAccountAddrs(),
- )
- app.SlashingKeeper = slashingkeeper.NewKeeper(
- appCodec, keys[slashingtypes.StoreKey], &stakingKeeper, app.GetSubspace(slashingtypes.ModuleName),
- )
- app.CrisisKeeper = crisiskeeper.NewKeeper(
- app.GetSubspace(crisistypes.ModuleName), invCheckPeriod, app.BankKeeper, authtypes.FeeCollectorName,
- )
- app.FeeGrantKeeper = feegrantkeeper.NewKeeper(appCodec, keys[feegrant.StoreKey], app.AccountKeeper)
- app.UpgradeKeeper = upgradekeeper.NewKeeper(skipUpgradeHeights, keys[upgradetypes.StoreKey], appCodec, homePath, app.BaseApp)
- // register the staking hooks
- // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks
- app.StakingKeeper = *stakingKeeper.SetHooks(
- stakingtypes.NewMultiStakingHooks(app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()),
- )
- // ... other modules keepers
- // Create IBC Keeper
- app.IBCKeeper = ibckeeper.NewKeeper(
- appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper,
- )
- // register the proposal types
- govRouter := govtypes.NewRouter()
- govRouter.AddRoute(govtypes.RouterKey, govtypes.ProposalHandler).
- AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)).
- AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)).
- AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)).
- AddRoute(ibchost.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper))
- // Create Transfer Keepers
- app.TransferKeeper = ibctransferkeeper.NewKeeper(
- appCodec, keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName),
- app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper,
- app.AccountKeeper, app.BankKeeper, scopedTransferKeeper,
- )
- transferModule := transfer.NewAppModule(app.TransferKeeper)
- transferIBCModule := transfer.NewIBCModule(app.TransferKeeper)
- // Create evidence Keeper for to register the IBC light client misbehaviour evidence route
- evidenceKeeper := evidencekeeper.NewKeeper(
- appCodec, keys[evidencetypes.StoreKey], &app.StakingKeeper, app.SlashingKeeper,
- )
- // If evidence needs to be handled for the app, set routes in router here and seal
- app.EvidenceKeeper = *evidenceKeeper
- govRouter.AddRoute(wormholemoduletypes.RouterKey, wormholemodule.NewWormholeGovernanceProposalHandler(app.WormholeKeeper))
- app.GovKeeper = govkeeper.NewKeeper(
- appCodec, keys[govtypes.StoreKey], app.GetSubspace(govtypes.ModuleName), app.AccountKeeper, app.BankKeeper,
- &stakingKeeper, govRouter,
- )
- // The last arguments can contain custom message handlers, and custom query handlers,
- // if we want to allow any custom callbacks
- supportedFeatures := "iterator,staking,stargate,wormhole"
- wasmDir := filepath.Join(homePath, "data")
- // Instantiate wasm keeper with stubs for other modules as we do not need
- // wasm to be able to write to other modules.
- app.wasmKeeper = wasm.NewKeeper(
- appCodec,
- keys[wasm.StoreKey],
- app.GetSubspace(wasm.ModuleName),
- app.AccountKeeper,
- app.BankKeeper,
- app.StakingKeeper,
- app.DistrKeeper,
- app.IBCKeeper.ChannelKeeper,
- &app.IBCKeeper.PortKeeper,
- scopedWasmKeeper,
- app.TransferKeeper,
- app.MsgServiceRouter(),
- app.GRPCQueryRouter(),
- wasmDir,
- wasm.DefaultWasmConfig(),
- // wasmConfig.ToWasmConfig(),
- supportedFeatures,
- GetWasmOpts(app, appOpts)...,
- )
- permissionedWasmKeeper := wasmkeeper.NewDefaultPermissionKeeper(app.wasmKeeper)
- app.WormholeKeeper.SetWasmdKeeper(permissionedWasmKeeper)
- // the wormhole module must be instantiated after the wasmd module
- wormholeModule := wormholemodule.NewAppModule(appCodec, app.WormholeKeeper)
- // this line is used by starport scaffolding # stargate/app/keeperDefinition
- // Create static IBC router, add transfer route, then set and seal it
- ibcRouter := ibcporttypes.NewRouter()
- ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferIBCModule)
- // this line is used by starport scaffolding # ibc/app/router
- app.IBCKeeper.SetRouter(ibcRouter)
- /**** Module Options ****/
- // NOTE: we may consider parsing `appOpts` inside module constructors. For the moment
- // we prefer to be more strict in what arguments the modules expect.
- var skipGenesisInvariants = cast.ToBool(appOpts.Get(crisis.FlagSkipGenesisInvariants))
- // NOTE: Any module instantiated in the module manager that is later modified
- // must be passed by reference here.
- app.mm = module.NewManager(
- genutil.NewAppModule(
- app.AccountKeeper, app.StakingKeeper, app.BaseApp.DeliverTx,
- encodingConfig.TxConfig,
- ),
- auth.NewAppModule(appCodec, app.AccountKeeper, nil),
- vesting.NewAppModule(app.AccountKeeper, app.BankKeeper),
- bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper),
- capability.NewAppModule(appCodec, *app.CapabilityKeeper),
- feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
- crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants),
- gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper),
- mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper),
- slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
- distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
- staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.WormholeKeeper),
- upgrade.NewAppModule(app.UpgradeKeeper),
- evidence.NewAppModule(app.EvidenceKeeper),
- ibc.NewAppModule(app.IBCKeeper),
- params.NewAppModule(app.ParamsKeeper),
- transferModule,
- wormholeModule,
- // this line is used by starport scaffolding # stargate/app/appModule
- wasm.NewAppModule(appCodec, &app.wasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),
- )
- // During begin block slashing happens after distr.BeginBlocker so that
- // there is nothing left over in the validator fee pool, so as to keep the
- // CanWithdrawInvariant invariant.
- // NOTE: staking module is required if HistoricalEntries param > 0
- app.mm.SetOrderBeginBlockers(
- upgradetypes.ModuleName,
- capabilitytypes.ModuleName,
- minttypes.ModuleName,
- distrtypes.ModuleName,
- slashingtypes.ModuleName,
- evidencetypes.ModuleName,
- stakingtypes.ModuleName,
- vestingtypes.ModuleName,
- ibchost.ModuleName,
- ibctransfertypes.ModuleName,
- authtypes.ModuleName,
- banktypes.ModuleName,
- govtypes.ModuleName,
- crisistypes.ModuleName,
- genutiltypes.ModuleName,
- feegrant.ModuleName,
- paramstypes.ModuleName,
- wormholemoduletypes.ModuleName,
- // this line is used by starport scaffolding # stargate/app/beginBlockers
- wasm.ModuleName,
- )
- app.mm.SetOrderEndBlockers(
- crisistypes.ModuleName,
- govtypes.ModuleName,
- stakingtypes.ModuleName,
- capabilitytypes.ModuleName,
- authtypes.ModuleName,
- banktypes.ModuleName,
- distrtypes.ModuleName,
- slashingtypes.ModuleName,
- vestingtypes.ModuleName,
- minttypes.ModuleName,
- genutiltypes.ModuleName,
- evidencetypes.ModuleName,
- feegrant.ModuleName,
- paramstypes.ModuleName,
- upgradetypes.ModuleName,
- ibchost.ModuleName,
- ibctransfertypes.ModuleName,
- wormholemoduletypes.ModuleName,
- // this line is used by starport scaffolding # stargate/app/endBlockers
- wasm.ModuleName,
- )
- // NOTE: The genutils module must occur after staking so that pools are
- // properly initialized with tokens from genesis accounts.
- // NOTE: Capability module must occur first so that it can initialize any capabilities
- // so that other modules that want to create or claim capabilities afterwards in InitChain
- // can do so safely.
- // NOTE: The wormhole module must occur before staking so that the consensus
- // guardian set is properly initialised before the staking module allocates
- // voting power in its genesis handler
- app.mm.SetOrderInitGenesis(
- capabilitytypes.ModuleName,
- authtypes.ModuleName,
- banktypes.ModuleName,
- distrtypes.ModuleName,
- wormholemoduletypes.ModuleName,
- stakingtypes.ModuleName,
- vestingtypes.ModuleName,
- slashingtypes.ModuleName,
- govtypes.ModuleName,
- minttypes.ModuleName,
- crisistypes.ModuleName,
- ibchost.ModuleName,
- genutiltypes.ModuleName,
- evidencetypes.ModuleName,
- paramstypes.ModuleName,
- upgradetypes.ModuleName,
- ibctransfertypes.ModuleName,
- feegrant.ModuleName,
- // this line is used by starport scaffolding # stargate/app/initGenesis
- wasm.ModuleName,
- )
- app.mm.RegisterInvariants(&app.CrisisKeeper)
- app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino)
- app.mm.RegisterServices(module.NewConfigurator(app.appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter()))
- // initialize stores
- app.MountKVStores(keys)
- app.MountTransientStores(tkeys)
- app.MountMemoryStores(memKeys)
- // initialize BaseApp
- app.SetInitChainer(app.InitChainer)
- app.SetBeginBlocker(app.BeginBlocker)
- anteHandlerSdk, err := ante.NewAnteHandler(
- ante.HandlerOptions{
- AccountKeeper: app.AccountKeeper,
- BankKeeper: app.BankKeeper,
- SignModeHandler: encodingConfig.TxConfig.SignModeHandler(),
- FeegrantKeeper: app.FeeGrantKeeper,
- SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
- },
- )
- if err != nil {
- panic(err)
- }
- wrappedAnteHandler := WrapAnteHandler(anteHandlerSdk, app.WormholeKeeper)
- app.SetAnteHandler(wrappedAnteHandler)
- app.SetEndBlocker(app.EndBlocker)
- if loadLatest {
- if err := app.LoadLatestVersion(); err != nil {
- tmos.Exit(err.Error())
- }
- }
- app.ScopedIBCKeeper = scopedIBCKeeper
- app.ScopedTransferKeeper = scopedTransferKeeper
- // this line is used by starport scaffolding # stargate/app/beforeInitReturn
- app.scopedWasmKeeper = scopedWasmKeeper
- return app
- }
- // Wrap the standard cosmos-sdk antehandlers with our wormhole allowlist antehandler.
- func WrapAnteHandler(originalHandler sdk.AnteHandler, wormKeeper wormholemodulekeeper.Keeper) sdk.AnteHandler {
- whHandler := wormholemoduleante.NewWormholeAllowlistDecorator(wormKeeper)
- return func(ctx sdk.Context, tx sdk.Tx, simulate bool) (sdk.Context, error) {
- newCtx, err := originalHandler(ctx, tx, simulate)
- if err != nil {
- return newCtx, err
- }
- return whHandler.AnteHandle(ctx, tx, simulate, func(ctx sdk.Context, tx sdk.Tx, simulate bool) (sdk.Context, error) {
- return ctx, nil
- })
- }
- }
- // Name returns the name of the App
- func (app *App) Name() string { return app.BaseApp.Name() }
- // BeginBlocker application updates every begin block
- func (app *App) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock {
- return app.mm.BeginBlock(ctx, req)
- }
- // EndBlocker application updates every end block
- func (app *App) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock {
- return app.mm.EndBlock(ctx, req)
- }
- // InitChainer application update at chain initialization
- func (app *App) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain {
- var genesisState GenesisState
- if err := tmjson.Unmarshal(req.AppStateBytes, &genesisState); err != nil {
- panic(err)
- }
- app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap())
- return app.mm.InitGenesis(ctx, app.appCodec, genesisState)
- }
- // LoadHeight loads a particular height
- func (app *App) LoadHeight(height int64) error {
- return app.LoadVersion(height)
- }
- // ModuleAccountAddrs returns all the app's module account addresses.
- func (app *App) ModuleAccountAddrs() map[string]bool {
- modAccAddrs := make(map[string]bool)
- for acc := range maccPerms {
- modAccAddrs[authtypes.NewModuleAddress(acc).String()] = true
- }
- return modAccAddrs
- }
- // LegacyAmino returns SimApp's amino codec.
- //
- // NOTE: This is solely to be used for testing purposes as it may be desirable
- // for modules to register their own custom testing types.
- func (app *App) LegacyAmino() *codec.LegacyAmino {
- return app.cdc
- }
- // AppCodec returns Gaia's app codec.
- //
- // NOTE: This is solely to be used for testing purposes as it may be desirable
- // for modules to register their own custom testing types.
- func (app *App) AppCodec() codec.Codec {
- return app.appCodec
- }
- // InterfaceRegistry returns Gaia's InterfaceRegistry
- func (app *App) InterfaceRegistry() types.InterfaceRegistry {
- return app.interfaceRegistry
- }
- // GetKey returns the KVStoreKey for the provided store key.
- //
- // NOTE: This is solely to be used for testing purposes.
- func (app *App) GetKey(storeKey string) *sdk.KVStoreKey {
- return app.keys[storeKey]
- }
- // GetTKey returns the TransientStoreKey for the provided store key.
- //
- // NOTE: This is solely to be used for testing purposes.
- func (app *App) GetTKey(storeKey string) *sdk.TransientStoreKey {
- return app.tkeys[storeKey]
- }
- // GetMemKey returns the MemStoreKey for the provided mem key.
- //
- // NOTE: This is solely used for testing purposes.
- func (app *App) GetMemKey(storeKey string) *sdk.MemoryStoreKey {
- return app.memKeys[storeKey]
- }
- // GetSubspace returns a param subspace for a given module name.
- //
- // NOTE: This is solely to be used for testing purposes.
- func (app *App) GetSubspace(moduleName string) paramstypes.Subspace {
- subspace, _ := app.ParamsKeeper.GetSubspace(moduleName)
- return subspace
- }
- // RegisterAPIRoutes registers all application module routes with the provided
- // API server.
- func (app *App) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) {
- clientCtx := apiSvr.ClientCtx
- rpc.RegisterRoutes(clientCtx, apiSvr.Router)
- // Register legacy tx routes.
- authrest.RegisterTxRoutes(clientCtx, apiSvr.Router)
- // Register new tx routes from grpc-gateway.
- authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
- // Register new tendermint queries routes from grpc-gateway.
- tmservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
- // Register legacy and grpc-gateway routes for all modules.
- ModuleBasics.RegisterRESTRoutes(clientCtx, apiSvr.Router)
- ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
- // register app's OpenAPI routes.
- apiSvr.Router.Handle("/static/openapi.yml", http.FileServer(http.FS(docs.Docs)))
- apiSvr.Router.HandleFunc("/", openapiconsole.Handler(Name, "/static/openapi.yml"))
- }
- // RegisterTxService implements the Application.RegisterTxService method.
- func (app *App) RegisterTxService(clientCtx client.Context) {
- authtx.RegisterTxService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.BaseApp.Simulate, app.interfaceRegistry)
- }
- // RegisterTendermintService implements the Application.RegisterTendermintService method.
- func (app *App) RegisterTendermintService(clientCtx client.Context) {
- tmservice.RegisterTendermintService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.interfaceRegistry)
- }
- // GetMaccPerms returns a copy of the module account permissions
- func GetMaccPerms() map[string][]string {
- dupMaccPerms := make(map[string][]string)
- for k, v := range maccPerms {
- dupMaccPerms[k] = v
- }
- return dupMaccPerms
- }
- // initParamsKeeper init params keeper and its subspaces
- func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper {
- paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey)
- paramsKeeper.Subspace(authtypes.ModuleName)
- paramsKeeper.Subspace(banktypes.ModuleName)
- paramsKeeper.Subspace(stakingtypes.ModuleName)
- paramsKeeper.Subspace(minttypes.ModuleName)
- paramsKeeper.Subspace(distrtypes.ModuleName)
- paramsKeeper.Subspace(slashingtypes.ModuleName)
- paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable())
- paramsKeeper.Subspace(crisistypes.ModuleName)
- paramsKeeper.Subspace(ibctransfertypes.ModuleName)
- paramsKeeper.Subspace(ibchost.ModuleName)
- paramsKeeper.Subspace(wormholemoduletypes.ModuleName)
- // this line is used by starport scaffolding # stargate/app/paramSubspace
- paramsKeeper.Subspace(wasm.ModuleName)
- return paramsKeeper
- }
|