From de1bfb9c00d6c783a8f969651919fa86d7ff41c8 Mon Sep 17 00:00:00 2001 From: Christian Gorenflo Date: Thu, 2 Nov 2023 21:27:20 -0400 Subject: [PATCH 1/5] refactor: extract keeper initialization functions in Axelar application This commit refactors the keeper initialization logic in the Axelar application. Now, each keeper is initialized in a separate function within the app package, which improves code readability and maintainability. --- app/app.go | 315 +++++++++++------------------------------------ app/keepers.go | 328 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 403 insertions(+), 240 deletions(-) create mode 100644 app/keepers.go diff --git a/app/app.go b/app/app.go index 059334407..ea974268e 100644 --- a/app/app.go +++ b/app/app.go @@ -3,17 +3,40 @@ package app import ( "encoding/json" "fmt" - "io" - stdlog "log" - "net/http" - "os" - "path/filepath" - "reflect" - "strings" - "github.com/CosmWasm/wasmd/x/wasm" wasmclient "github.com/CosmWasm/wasmd/x/wasm/client" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + axelarParams "github.com/axelarnetwork/axelar-core/app/params" + "github.com/axelarnetwork/axelar-core/x/ante" + "github.com/axelarnetwork/axelar-core/x/axelarnet" + axelarnetclient "github.com/axelarnetwork/axelar-core/x/axelarnet/client" + axelarnetKeeper "github.com/axelarnetwork/axelar-core/x/axelarnet/keeper" + axelarnetTypes "github.com/axelarnetwork/axelar-core/x/axelarnet/types" + axelarbankkeeper "github.com/axelarnetwork/axelar-core/x/bank/keeper" + "github.com/axelarnetwork/axelar-core/x/evm" + evmKeeper "github.com/axelarnetwork/axelar-core/x/evm/keeper" + evmTypes "github.com/axelarnetwork/axelar-core/x/evm/types" + "github.com/axelarnetwork/axelar-core/x/multisig" + multisigKeeper "github.com/axelarnetwork/axelar-core/x/multisig/keeper" + multisigTypes "github.com/axelarnetwork/axelar-core/x/multisig/types" + "github.com/axelarnetwork/axelar-core/x/nexus" + nexusKeeper "github.com/axelarnetwork/axelar-core/x/nexus/keeper" + nexusTypes "github.com/axelarnetwork/axelar-core/x/nexus/types" + "github.com/axelarnetwork/axelar-core/x/permission" + permissionKeeper "github.com/axelarnetwork/axelar-core/x/permission/keeper" + permissionTypes "github.com/axelarnetwork/axelar-core/x/permission/types" + "github.com/axelarnetwork/axelar-core/x/reward" + rewardKeeper "github.com/axelarnetwork/axelar-core/x/reward/keeper" + rewardTypes "github.com/axelarnetwork/axelar-core/x/reward/types" + "github.com/axelarnetwork/axelar-core/x/snapshot" + snapKeeper "github.com/axelarnetwork/axelar-core/x/snapshot/keeper" + snapTypes "github.com/axelarnetwork/axelar-core/x/snapshot/types" + "github.com/axelarnetwork/axelar-core/x/tss" + tssKeeper "github.com/axelarnetwork/axelar-core/x/tss/keeper" + tssTypes "github.com/axelarnetwork/axelar-core/x/tss/types" + "github.com/axelarnetwork/axelar-core/x/vote" + voteKeeper "github.com/axelarnetwork/axelar-core/x/vote/keeper" + voteTypes "github.com/axelarnetwork/axelar-core/x/vote/types" bam "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" @@ -67,7 +90,6 @@ import ( 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" @@ -82,9 +104,7 @@ import ( ibctransferkeeper "github.com/cosmos/ibc-go/v4/modules/apps/transfer/keeper" ibctransfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types" ibc "github.com/cosmos/ibc-go/v4/modules/core" - ibcclient "github.com/cosmos/ibc-go/v4/modules/core/02-client" ibcclientclient "github.com/cosmos/ibc-go/v4/modules/core/02-client/client" - ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" porttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types" ibchost "github.com/cosmos/ibc-go/v4/modules/core/24-host" ibcante "github.com/cosmos/ibc-go/v4/modules/core/ante" @@ -101,41 +121,11 @@ import ( tmos "github.com/tendermint/tendermint/libs/os" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" - "golang.org/x/mod/semver" - - axelarParams "github.com/axelarnetwork/axelar-core/app/params" - "github.com/axelarnetwork/axelar-core/x/ante" - "github.com/axelarnetwork/axelar-core/x/axelarnet" - axelarnetclient "github.com/axelarnetwork/axelar-core/x/axelarnet/client" - axelarnetKeeper "github.com/axelarnetwork/axelar-core/x/axelarnet/keeper" - axelarnetTypes "github.com/axelarnetwork/axelar-core/x/axelarnet/types" - axelarbankkeeper "github.com/axelarnetwork/axelar-core/x/bank/keeper" - "github.com/axelarnetwork/axelar-core/x/evm" - evmKeeper "github.com/axelarnetwork/axelar-core/x/evm/keeper" - evmTypes "github.com/axelarnetwork/axelar-core/x/evm/types" - "github.com/axelarnetwork/axelar-core/x/multisig" - multisigKeeper "github.com/axelarnetwork/axelar-core/x/multisig/keeper" - multisigTypes "github.com/axelarnetwork/axelar-core/x/multisig/types" - "github.com/axelarnetwork/axelar-core/x/nexus" - nexusKeeper "github.com/axelarnetwork/axelar-core/x/nexus/keeper" - nexusTypes "github.com/axelarnetwork/axelar-core/x/nexus/types" - "github.com/axelarnetwork/axelar-core/x/permission" - permissionKeeper "github.com/axelarnetwork/axelar-core/x/permission/keeper" - permissionTypes "github.com/axelarnetwork/axelar-core/x/permission/types" - "github.com/axelarnetwork/axelar-core/x/reward" - rewardKeeper "github.com/axelarnetwork/axelar-core/x/reward/keeper" - rewardTypes "github.com/axelarnetwork/axelar-core/x/reward/types" - "github.com/axelarnetwork/axelar-core/x/snapshot" - snapKeeper "github.com/axelarnetwork/axelar-core/x/snapshot/keeper" - snapTypes "github.com/axelarnetwork/axelar-core/x/snapshot/types" - "github.com/axelarnetwork/axelar-core/x/tss" - tssKeeper "github.com/axelarnetwork/axelar-core/x/tss/keeper" - tssTypes "github.com/axelarnetwork/axelar-core/x/tss/types" - "github.com/axelarnetwork/axelar-core/x/vote" - voteKeeper "github.com/axelarnetwork/axelar-core/x/vote/keeper" - voteTypes "github.com/axelarnetwork/axelar-core/x/vote/types" - "github.com/axelarnetwork/utils/maps" - + "io" + stdlog "log" + "net/http" + "os" + "path/filepath" // Override with generated statik docs _ "github.com/axelarnetwork/axelar-core/client/docs/statik" ) @@ -152,20 +142,6 @@ var ( // and genesis verification. It is dynamically initialized by GetModuleBasics method. ModuleBasics module.BasicManager - // 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}, - axelarnetTypes.ModuleName: {authtypes.Minter, authtypes.Burner}, - rewardTypes.ModuleName: {authtypes.Minter}, - wasm.ModuleName: {authtypes.Burner}, - } - // WasmEnabled indicates whether wasm module is added to the app. // "true" setting means it will be, otherwise it won't. // This is configured during the build. @@ -227,6 +203,8 @@ func NewAxelarApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) + moduleAccountPermissions := initModuleAccountPermissions() + keepers := newKeeperCache() setKeeper(keepers, initParamsKeeper(appCodec, encodingConfig.Amino, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey])) @@ -234,69 +212,24 @@ func NewAxelarApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest bApp.SetParamStore(getSubspace(keepers, bam.Paramspace)) // add keepers - setKeeper(keepers, authkeeper.NewAccountKeeper( - appCodec, keys[authtypes.StoreKey], getSubspace(keepers, authtypes.ModuleName), authtypes.ProtoBaseAccount, maccPerms, - )) - setKeeper(keepers, bankkeeper.NewBaseKeeper( - appCodec, keys[banktypes.StoreKey], getKeeper[authkeeper.AccountKeeper](keepers), getSubspace(keepers, banktypes.ModuleName), - maps.Filter(moduleAccountAddrs(), func(addr string, _ bool) bool { - // we do not rely on internal balance tracking for invariance checks in the axelarnet module - // (https://github.com/cosmos/cosmos-sdk/issues/12825 for more details on the purpose of the blocked list), - // but the module address must be able to use ibc transfers, - // so we exclude this address from the blocked list - return addr != authtypes.NewModuleAddress(axelarnetTypes.ModuleName).String() - }), - )) + setKeeper(keepers, initAccountKeeper(appCodec, keys, keepers, moduleAccountPermissions)) + setKeeper(keepers, initBankKeeper(appCodec, keys, keepers, moduleAccountPermissions)) stakingK := stakingkeeper.NewKeeper( appCodec, keys[stakingtypes.StoreKey], getKeeper[authkeeper.AccountKeeper](keepers), getKeeper[bankkeeper.BaseKeeper](keepers), getSubspace(keepers, stakingtypes.ModuleName), ) - setKeeper(keepers, mintkeeper.NewKeeper( - appCodec, keys[minttypes.StoreKey], getSubspace(keepers, minttypes.ModuleName), &stakingK, - getKeeper[authkeeper.AccountKeeper](keepers), getKeeper[bankkeeper.BaseKeeper](keepers), authtypes.FeeCollectorName, - )) + setKeeper(keepers, initMintKeeper(appCodec, keys, keepers, &stakingK)) + setKeeper(keepers, initDistributionKeeper(appCodec, keys, keepers, &stakingK, moduleAccountPermissions)) + setKeeper(keepers, initSlashingKeeper(appCodec, keys, keepers, &stakingK)) + setKeeper(keepers, initCrisisKeeper(keepers, invCheckPeriod)) - setKeeper(keepers, distrkeeper.NewKeeper( - appCodec, keys[distrtypes.StoreKey], getSubspace(keepers, distrtypes.ModuleName), getKeeper[authkeeper.AccountKeeper](keepers), getKeeper[bankkeeper.BaseKeeper](keepers), - &stakingK, authtypes.FeeCollectorName, moduleAccountAddrs(), - )) - - setKeeper(keepers, slashingkeeper.NewKeeper( - appCodec, keys[slashingtypes.StoreKey], &stakingK, getSubspace(keepers, slashingtypes.ModuleName), - )) - - setKeeper(keepers, crisiskeeper.NewKeeper( - getSubspace(keepers, crisistypes.ModuleName), invCheckPeriod, getKeeper[bankkeeper.BaseKeeper](keepers), authtypes.FeeCollectorName, - )) - - upgradeK := upgradekeeper.NewKeeper(skipUpgradeHeights, keys[upgradetypes.StoreKey], appCodec, homePath, bApp) - semverVersion := bApp.Version() - if !strings.HasPrefix(semverVersion, "v") { - semverVersion = fmt.Sprintf("v%s", semverVersion) - } - upgradeName := semver.MajorMinor(semverVersion) - if upgradeName == "" { - panic(fmt.Errorf("invalid app version %s", bApp.Version())) - } // todo: change order of commands so this doesn't have to be defined before initialization var configurator module.Configurator var mm *module.Manager - upgradeK.SetUpgradeHandler( - upgradeName, - func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - return mm.RunMigrations(ctx, configurator, fromVM) - }, - ) - setKeeper(keepers, upgradeK) - - // there is no point in this constructor returning a reference, so we deref it - evidenceK := evidencekeeper.NewKeeper( - appCodec, keys[evidencetypes.StoreKey], &stakingK, getKeeper[slashingkeeper.Keeper](keepers), - ) - setKeeper(keepers, *evidenceK) - - setKeeper(keepers, feegrantkeeper.NewKeeper(appCodec, keys[feegrant.StoreKey], getKeeper[authkeeper.AccountKeeper](keepers))) + setKeeper(keepers, initUpgradeKeeper(appCodec, keys, skipUpgradeHeights, homePath, bApp, &configurator, mm)) + setKeeper(keepers, initEvidenceKeeper(appCodec, keys, keepers, &stakingK)) + setKeeper(keepers, initFeegrantKeeper(appCodec, keys, keepers)) // register the staking hooks // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks @@ -310,15 +243,11 @@ func NewAxelarApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest setKeeper(keepers, *capabilityK) // grant capabilities for the ibc and ibc-transfer modules - scopedIBCK := capabilityK.ScopeToModule(ibchost.ModuleName) scopedTransferK := capabilityK.ScopeToModule(ibctransfertypes.ModuleName) - capabilityK.Seal() - - // Create IBC Keeper - setKeeper(keepers, ibckeeper.NewKeeper( - appCodec, keys[ibchost.StoreKey], getSubspace(keepers, ibchost.ModuleName), getKeeper[stakingkeeper.Keeper](keepers), getKeeper[upgradekeeper.Keeper](keepers), scopedIBCK, - )) + scopedIBCK := capabilityK.ScopeToModule(ibchost.ModuleName) + capabilityK.Seal() + setKeeper(keepers, initIBCKeeper(appCodec, keys, keepers, scopedIBCK)) // Custom axelarnet/evm/nexus keepers setKeeper(keepers, axelarnetKeeper.NewKeeper( appCodec, keys[axelarnetTypes.StoreKey], getSubspace(keepers, axelarnetTypes.ModuleName), getKeeper[*ibckeeper.Keeper](keepers).ChannelKeeper, getKeeper[feegrantkeeper.Keeper](keepers), @@ -328,17 +257,7 @@ func NewAxelarApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest appCodec, keys[evmTypes.StoreKey], getKeeper[paramskeeper.Keeper](keepers), )) - nexusK := nexusKeeper.NewKeeper( - appCodec, keys[nexusTypes.StoreKey], getSubspace(keepers, nexusTypes.ModuleName), - ) - - // Setting Router will finalize all routes by sealing router - // No more routes can be added - nexusRouter := nexusTypes.NewRouter() - nexusRouter.AddAddressValidator(evmTypes.ModuleName, evmKeeper.NewAddressValidator()). - AddAddressValidator(axelarnetTypes.ModuleName, axelarnetKeeper.NewAddressValidator(getKeeper[axelarnetKeeper.Keeper](keepers))) - nexusK.SetRouter(nexusRouter) - setKeeper(keepers, nexusK) + setKeeper(keepers, initNexusKeeper(appCodec, keys, keepers)) // IBC Transfer Stack: SendPacket // @@ -397,39 +316,12 @@ func NewAxelarApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest // axelar custom keepers // axelarnet / evm / nexus keepers created above - setKeeper(keepers, rewardKeeper.NewKeeper( - appCodec, keys[rewardTypes.StoreKey], getSubspace(keepers, rewardTypes.ModuleName), axelarbankkeeper.NewBankKeeper(getKeeper[bankkeeper.BaseKeeper](keepers)), getKeeper[distrkeeper.Keeper](keepers), getKeeper[stakingkeeper.Keeper](keepers), - )) - multisigK := multisigKeeper.NewKeeper( - appCodec, keys[multisigTypes.StoreKey], getSubspace(keepers, multisigTypes.ModuleName), - ) - - multisigRouter := multisigTypes.NewSigRouter() - multisigRouter.AddHandler(evmTypes.ModuleName, evmKeeper.NewSigHandler(appCodec, getKeeper[*evmKeeper.BaseKeeper](keepers))) - multisigK.SetSigRouter(multisigRouter) - setKeeper(keepers, multisigK) - - setKeeper(keepers, tssKeeper.NewKeeper( - appCodec, keys[tssTypes.StoreKey], getSubspace(keepers, tssTypes.ModuleName), - )) - - setKeeper(keepers, snapKeeper.NewKeeper( - appCodec, keys[snapTypes.StoreKey], getSubspace(keepers, snapTypes.ModuleName), getKeeper[stakingkeeper.Keeper](keepers), axelarbankkeeper.NewBankKeeper(getKeeper[bankkeeper.BaseKeeper](keepers)), - getKeeper[slashingkeeper.Keeper](keepers), - )) - - voteK := voteKeeper.NewKeeper( - appCodec, keys[voteTypes.StoreKey], getSubspace(keepers, voteTypes.ModuleName), getKeeper[snapKeeper.Keeper](keepers), getKeeper[stakingkeeper.Keeper](keepers), getKeeper[rewardKeeper.Keeper](keepers), - ) - - voteRouter := voteTypes.NewRouter() - voteRouter.AddHandler(evmTypes.ModuleName, evmKeeper.NewVoteHandler(appCodec, getKeeper[*evmKeeper.BaseKeeper](keepers), getKeeper[nexusKeeper.Keeper](keepers), getKeeper[rewardKeeper.Keeper](keepers))) - (&voteK).SetVoteRouter(voteRouter) - setKeeper(keepers, voteK) - - setKeeper(keepers, permissionKeeper.NewKeeper( - appCodec, keys[permissionTypes.StoreKey], getSubspace(keepers, permissionTypes.ModuleName), - )) + setKeeper(keepers, initRewardKeeper(appCodec, keys, keepers)) + setKeeper(keepers, initMultisigKeeper(appCodec, keys, keepers)) + setKeeper(keepers, initTssKeeper(appCodec, keys, keepers)) + setKeeper(keepers, initSnapshotKeeper(appCodec, keys, keepers)) + setKeeper(keepers, initVoteKeeper(appCodec, keys, keepers)) + setKeeper(keepers, initPermissionKeeper(appCodec, keys, keepers)) var wasmK wasm.Keeper var wasmAnteDecorators []sdk.AnteDecorator @@ -479,39 +371,20 @@ func NewAxelarApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest // set the contract keeper for the Ics20WasmHooks wasmHooks.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(wasmK) - setKeeper(keepers, wasmK) } // Finalize the IBC router getKeeper[*ibckeeper.Keeper](keepers).SetRouter(ibcRouter) - // Add governance proposal hooks - govRouter := govtypes.NewRouter() - govRouter.AddRoute(govtypes.RouterKey, govtypes.ProposalHandler). - AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(getKeeper[paramskeeper.Keeper](keepers))). - AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(getKeeper[distrkeeper.Keeper](keepers))). - AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(getKeeper[upgradekeeper.Keeper](keepers))). - AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(getKeeper[*ibckeeper.Keeper](keepers).ClientKeeper)). - AddRoute(axelarnetTypes.RouterKey, axelarnet.NewProposalHandler(getKeeper[axelarnetKeeper.Keeper](keepers), getKeeper[nexusKeeper.Keeper](keepers), getKeeper[authkeeper.AccountKeeper](keepers))) - - if IsWasmEnabled() { - govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(getKeeper[wasm.Keeper](keepers), wasm.EnableAllProposals)) - } - - govK := govkeeper.NewKeeper( - appCodec, keys[govtypes.StoreKey], getSubspace(keepers, govtypes.ModuleName), getKeeper[authkeeper.AccountKeeper](keepers), getKeeper[bankkeeper.BaseKeeper](keepers), - getKeeper[stakingkeeper.Keeper](keepers), govRouter, - ) - govK.SetHooks(govtypes.NewMultiGovHooks(getKeeper[axelarnetKeeper.Keeper](keepers).Hooks(getKeeper[nexusKeeper.Keeper](keepers), govK))) - setKeeper(keepers, govK) + setKeeper(keepers, initGovernanceKeeper(appCodec, keys, keepers)) upgradeInfo, err := getKeeper[upgradekeeper.Keeper](keepers).ReadUpgradeInfoFromDisk() if err != nil { panic(err) } - if upgradeInfo.Name == upgradeName && !getKeeper[upgradekeeper.Keeper](keepers).IsSkipHeight(upgradeInfo.Height) { + if upgradeInfo.Name == upgradeName(bApp.Version()) && !getKeeper[upgradekeeper.Keeper](keepers).IsSkipHeight(upgradeInfo.Height) { storeUpgrades := store.StoreUpgrades{} if IsWasmEnabled() { @@ -671,6 +544,22 @@ func NewAxelarApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest return app } +func initModuleAccountPermissions() map[string][]string { + return 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}, + axelarnetTypes.ModuleName: {authtypes.Minter, authtypes.Burner}, + rewardTypes.ModuleName: {authtypes.Minter}, + wasm.ModuleName: {authtypes.Burner}, + } + +} + func orderMigrations() []string { migrationOrder := []string{ // auth module needs to go first @@ -941,16 +830,6 @@ func (app *AxelarApp) AppCodec() codec.Codec { return app.appCodec } -// moduleAccountAddrs returns all the app's module account addresses. -func moduleAccountAddrs() map[string]bool { - modAccAddrs := make(map[string]bool) - for acc := range maccPerms { - modAccAddrs[authtypes.NewModuleAddress(acc).String()] = true - } - - return modAccAddrs -} - // RegisterAPIRoutes registers all application module routes with the provided // API server. func (app *AxelarApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) { @@ -1060,50 +939,6 @@ func GetModuleBasics() module.BasicManager { return ModuleBasics } -type keeperCache struct { - repository map[string]any -} - -func newKeeperCache() *keeperCache { - return &keeperCache{ - repository: make(map[string]any), - } -} - -func getSubspace(k *keeperCache, moduleName string) paramstypes.Subspace { - paramsK := getKeeper[paramskeeper.Keeper](k) - subspace, ok := paramsK.GetSubspace(moduleName) - if !ok { - panic(fmt.Sprintf("subspace %s not found", moduleName)) - } - return subspace -} - -func getKeeper[T any](k *keeperCache) T { - key := fullTypeName[T]() - keeper, ok := k.repository[key].(T) - if !ok { - panic(fmt.Sprintf("keeper %s not found", key)) - } - return keeper -} - -func setKeeper[T any](k *keeperCache, keeper T) { - k.repository[fullTypeName[T]()] = keeper -} - -func fullTypeName[T any]() string { - keeperType := reflect.TypeOf(*new(T)) - - var prefix string - if keeperType.Kind() == reflect.Ptr { - prefix = "*" - keeperType = keeperType.Elem() - } - - return prefix + keeperType.PkgPath() + "." + keeperType.Name() -} - // IsWasmEnabled returns whether wasm is enabled func IsWasmEnabled() bool { return WasmEnabled != "" diff --git a/app/keepers.go b/app/keepers.go new file mode 100644 index 000000000..6ce5975be --- /dev/null +++ b/app/keepers.go @@ -0,0 +1,328 @@ +package app + +import ( + "fmt" + "github.com/CosmWasm/wasmd/x/wasm" + "github.com/axelarnetwork/axelar-core/x/axelarnet" + axelarnetKeeper "github.com/axelarnetwork/axelar-core/x/axelarnet/keeper" + axelarnetTypes "github.com/axelarnetwork/axelar-core/x/axelarnet/types" + axelarbankkeeper "github.com/axelarnetwork/axelar-core/x/bank/keeper" + evmKeeper "github.com/axelarnetwork/axelar-core/x/evm/keeper" + evmTypes "github.com/axelarnetwork/axelar-core/x/evm/types" + multisigKeeper "github.com/axelarnetwork/axelar-core/x/multisig/keeper" + multisigTypes "github.com/axelarnetwork/axelar-core/x/multisig/types" + nexusKeeper "github.com/axelarnetwork/axelar-core/x/nexus/keeper" + nexusTypes "github.com/axelarnetwork/axelar-core/x/nexus/types" + permissionKeeper "github.com/axelarnetwork/axelar-core/x/permission/keeper" + permissionTypes "github.com/axelarnetwork/axelar-core/x/permission/types" + rewardKeeper "github.com/axelarnetwork/axelar-core/x/reward/keeper" + rewardTypes "github.com/axelarnetwork/axelar-core/x/reward/types" + snapKeeper "github.com/axelarnetwork/axelar-core/x/snapshot/keeper" + snapTypes "github.com/axelarnetwork/axelar-core/x/snapshot/types" + tssKeeper "github.com/axelarnetwork/axelar-core/x/tss/keeper" + tssTypes "github.com/axelarnetwork/axelar-core/x/tss/types" + voteKeeper "github.com/axelarnetwork/axelar-core/x/vote/keeper" + voteTypes "github.com/axelarnetwork/axelar-core/x/vote/types" + "github.com/axelarnetwork/utils/maps" + bam "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" + 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" + distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" + distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + 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" + govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + 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" + 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" + slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" + slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" + stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + "github.com/cosmos/cosmos-sdk/x/upgrade" + upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + ibcclient "github.com/cosmos/ibc-go/v4/modules/core/02-client" + ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" + ibchost "github.com/cosmos/ibc-go/v4/modules/core/24-host" + ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper" + "golang.org/x/mod/semver" + "reflect" + "strings" +) + +type keeperCache struct { + repository map[string]any +} + +func newKeeperCache() *keeperCache { + return &keeperCache{ + repository: make(map[string]any), + } +} + +func getSubspace(k *keeperCache, moduleName string) paramstypes.Subspace { + paramsK := getKeeper[paramskeeper.Keeper](k) + subspace, ok := paramsK.GetSubspace(moduleName) + if !ok { + panic(fmt.Sprintf("subspace %s not found", moduleName)) + } + return subspace +} + +func getKeeper[T any](k *keeperCache) T { + key := fullTypeName[T]() + keeper, ok := k.repository[key].(T) + if !ok { + panic(fmt.Sprintf("keeper %s not found", key)) + } + return keeper +} + +func setKeeper[T any](k *keeperCache, keeper T) { + k.repository[fullTypeName[T]()] = keeper +} + +func fullTypeName[T any]() string { + keeperType := reflect.TypeOf(*new(T)) + + var prefix string + if keeperType.Kind() == reflect.Ptr { + prefix = "*" + keeperType = keeperType.Elem() + } + + return prefix + keeperType.PkgPath() + "." + keeperType.Name() +} + +func initGovernanceKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) govkeeper.Keeper { + // Add governance proposal hooks + govRouter := govtypes.NewRouter() + govRouter.AddRoute(govtypes.RouterKey, govtypes.ProposalHandler). + AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(getKeeper[paramskeeper.Keeper](keepers))). + AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(getKeeper[distrkeeper.Keeper](keepers))). + AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(getKeeper[upgradekeeper.Keeper](keepers))). + AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(getKeeper[*ibckeeper.Keeper](keepers).ClientKeeper)). + AddRoute(axelarnetTypes.RouterKey, axelarnet.NewProposalHandler(getKeeper[axelarnetKeeper.Keeper](keepers), getKeeper[nexusKeeper.Keeper](keepers), getKeeper[authkeeper.AccountKeeper](keepers))) + + if IsWasmEnabled() { + govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(getKeeper[wasm.Keeper](keepers), wasm.EnableAllProposals)) + } + + govK := govkeeper.NewKeeper( + appCodec, keys[govtypes.StoreKey], getSubspace(keepers, govtypes.ModuleName), getKeeper[authkeeper.AccountKeeper](keepers), getKeeper[bankkeeper.BaseKeeper](keepers), + getKeeper[stakingkeeper.Keeper](keepers), govRouter, + ) + + axelarnetK := getKeeper[axelarnetKeeper.Keeper](keepers) + govK.SetHooks(govtypes.NewMultiGovHooks(axelarnetK.Hooks(getKeeper[nexusKeeper.Keeper](keepers), govK))) + return govK +} + +func initPermissionKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) permissionKeeper.Keeper { + return permissionKeeper.NewKeeper(appCodec, keys[permissionTypes.StoreKey], getSubspace(keepers, permissionTypes.ModuleName)) +} + +func initVoteKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) voteKeeper.Keeper { + voteRouter := voteTypes.NewRouter() + voteRouter.AddHandler( + evmTypes.ModuleName, + evmKeeper.NewVoteHandler( + appCodec, + getKeeper[*evmKeeper.BaseKeeper](keepers), + getKeeper[nexusKeeper.Keeper](keepers), + getKeeper[rewardKeeper.Keeper](keepers), + ), + ) + + voteK := voteKeeper.NewKeeper( + appCodec, + keys[voteTypes.StoreKey], + getSubspace(keepers, voteTypes.ModuleName), + getKeeper[snapKeeper.Keeper](keepers), + getKeeper[stakingkeeper.Keeper](keepers), + getKeeper[rewardKeeper.Keeper](keepers), + ) + voteK.SetVoteRouter(voteRouter) + return voteK +} + +func initSnapshotKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) snapKeeper.Keeper { + return snapKeeper.NewKeeper( + appCodec, + keys[snapTypes.StoreKey], + getSubspace(keepers, snapTypes.ModuleName), + getKeeper[stakingkeeper.Keeper](keepers), + axelarbankkeeper.NewBankKeeper(getKeeper[bankkeeper.BaseKeeper](keepers)), + getKeeper[slashingkeeper.Keeper](keepers), + ) +} + +func initTssKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) tssKeeper.Keeper { + return tssKeeper.NewKeeper(appCodec, keys[tssTypes.StoreKey], getSubspace(keepers, tssTypes.ModuleName)) +} + +func initMultisigKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) multisigKeeper.Keeper { + multisigRouter := multisigTypes.NewSigRouter() + multisigRouter.AddHandler(evmTypes.ModuleName, evmKeeper.NewSigHandler(appCodec, getKeeper[*evmKeeper.BaseKeeper](keepers))) + + multisigK := multisigKeeper.NewKeeper(appCodec, keys[multisigTypes.StoreKey], getSubspace(keepers, multisigTypes.ModuleName)) + multisigK.SetSigRouter(multisigRouter) + return multisigK +} + +func initRewardKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) rewardKeeper.Keeper { + return rewardKeeper.NewKeeper( + appCodec, + keys[rewardTypes.StoreKey], + getSubspace(keepers, rewardTypes.ModuleName), + axelarbankkeeper.NewBankKeeper(getKeeper[bankkeeper.BaseKeeper](keepers)), + getKeeper[distrkeeper.Keeper](keepers), + getKeeper[stakingkeeper.Keeper](keepers), + ) +} + +func initIBCKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache, scopedIBCK capabilitykeeper.ScopedKeeper) *ibckeeper.Keeper { + return ibckeeper.NewKeeper( + appCodec, + keys[ibchost.StoreKey], + getSubspace(keepers, ibchost.ModuleName), + getKeeper[stakingkeeper.Keeper](keepers), + getKeeper[upgradekeeper.Keeper](keepers), + scopedIBCK, + ) +} + +func initNexusKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) nexusKeeper.Keeper { + // Setting Router will finalize all routes by sealing router + // No more routes can be added + nexusRouter := nexusTypes.NewRouter() + nexusRouter. + AddAddressValidator(evmTypes.ModuleName, evmKeeper.NewAddressValidator()). + AddAddressValidator(axelarnetTypes.ModuleName, axelarnetKeeper.NewAddressValidator(getKeeper[axelarnetKeeper.Keeper](keepers))) + + nexusK := nexusKeeper.NewKeeper(appCodec, keys[nexusTypes.StoreKey], getSubspace(keepers, nexusTypes.ModuleName)) + nexusK.SetRouter(nexusRouter) + return nexusK +} + +func initFeegrantKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) feegrantkeeper.Keeper { + return feegrantkeeper.NewKeeper(appCodec, keys[feegrant.StoreKey], getKeeper[authkeeper.AccountKeeper](keepers)) +} + +func initEvidenceKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache, stakingK *stakingkeeper.Keeper) evidencekeeper.Keeper { + // there is no point in this constructor returning a reference, so we deref it + evidenceK := evidencekeeper.NewKeeper(appCodec, keys[evidencetypes.StoreKey], stakingK, getKeeper[slashingkeeper.Keeper](keepers)) + return *evidenceK +} + +// todo: clean this up +func initUpgradeKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, skipUpgradeHeights map[int64]bool, homePath string, bApp *bam.BaseApp, configurator *module.Configurator, mm *module.Manager) upgradekeeper.Keeper { + upgradeK := upgradekeeper.NewKeeper(skipUpgradeHeights, keys[upgradetypes.StoreKey], appCodec, homePath, bApp) + upgradeK.SetUpgradeHandler( + upgradeName(bApp.Version()), + func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + return mm.RunMigrations(ctx, *configurator, fromVM) + }, + ) + return upgradeK +} + +func upgradeName(version string) string { + if !strings.HasPrefix(version, "v") { + version = fmt.Sprintf("v%s", version) + } + name := semver.MajorMinor(version) + if name == "" { + panic(fmt.Errorf("invalid app version %s", version)) + } + return name +} + +func initCrisisKeeper(keepers *keeperCache, invCheckPeriod uint) crisiskeeper.Keeper { + return crisiskeeper.NewKeeper( + getSubspace(keepers, crisistypes.ModuleName), + invCheckPeriod, + getKeeper[bankkeeper.BaseKeeper](keepers), + authtypes.FeeCollectorName, + ) +} + +func initSlashingKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache, stakingK *stakingkeeper.Keeper) slashingkeeper.Keeper { + return slashingkeeper.NewKeeper(appCodec, keys[slashingtypes.StoreKey], stakingK, getSubspace(keepers, slashingtypes.ModuleName)) +} + +func initDistributionKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache, stakingK *stakingkeeper.Keeper, moduleAccPerms map[string][]string) distrkeeper.Keeper { + return distrkeeper.NewKeeper( + appCodec, + keys[distrtypes.StoreKey], + getSubspace(keepers, distrtypes.ModuleName), + getKeeper[authkeeper.AccountKeeper](keepers), + getKeeper[bankkeeper.BaseKeeper](keepers), + stakingK, + authtypes.FeeCollectorName, + moduleAccountAddrs(moduleAccPerms), + ) +} + +func initMintKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache, stakingK *stakingkeeper.Keeper) mintkeeper.Keeper { + return mintkeeper.NewKeeper( + appCodec, + keys[minttypes.StoreKey], + getSubspace(keepers, minttypes.ModuleName), + stakingK, + getKeeper[authkeeper.AccountKeeper](keepers), + getKeeper[bankkeeper.BaseKeeper](keepers), + authtypes.FeeCollectorName, + ) +} + +func initBankKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache, moduleAccPerms map[string][]string) bankkeeper.BaseKeeper { + return bankkeeper.NewBaseKeeper( + appCodec, + keys[banktypes.StoreKey], + getKeeper[authkeeper.AccountKeeper](keepers), + getSubspace(keepers, banktypes.ModuleName), + maps.Filter(moduleAccountAddrs(moduleAccPerms), func(addr string, _ bool) bool { + // we do not rely on internal balance tracking for invariance checks in the axelarnet module + // (https://github.com/cosmos/cosmos-sdk/issues/12825 for more details on the purpose of the blocked list), + // but the module address must be able to use ibc transfers, + // so we exclude this address from the blocked list + return addr != authtypes.NewModuleAddress(axelarnetTypes.ModuleName).String() + }), + ) +} + +func initAccountKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache, moduleAccPerms map[string][]string) authkeeper.AccountKeeper { + return authkeeper.NewAccountKeeper( + appCodec, + keys[authtypes.StoreKey], + getSubspace(keepers, authtypes.ModuleName), + authtypes.ProtoBaseAccount, + moduleAccPerms, + ) +} + +// moduleAccountAddrs returns all the app's module account addresses. +func moduleAccountAddrs(moduleAccPerms map[string][]string) map[string]bool { + modAccAddrs := make(map[string]bool) + for acc := range moduleAccPerms { + modAccAddrs[authtypes.NewModuleAddress(acc).String()] = true + } + + return modAccAddrs +} From dfed4fa4ca94145a874361decacd75f1f370ca93 Mon Sep 17 00:00:00 2001 From: Christian Gorenflo Date: Thu, 2 Nov 2023 21:30:19 -0400 Subject: [PATCH 2/5] lint --- app/app.go | 75 ++++++++++++++++++++++++++------------------------ app/keepers.go | 48 ++++++++++++++++---------------- 2 files changed, 64 insertions(+), 59 deletions(-) diff --git a/app/app.go b/app/app.go index ea974268e..cf914a0cb 100644 --- a/app/app.go +++ b/app/app.go @@ -3,40 +3,15 @@ package app import ( "encoding/json" "fmt" + "io" + stdlog "log" + "net/http" + "os" + "path/filepath" + "github.com/CosmWasm/wasmd/x/wasm" wasmclient "github.com/CosmWasm/wasmd/x/wasm/client" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - axelarParams "github.com/axelarnetwork/axelar-core/app/params" - "github.com/axelarnetwork/axelar-core/x/ante" - "github.com/axelarnetwork/axelar-core/x/axelarnet" - axelarnetclient "github.com/axelarnetwork/axelar-core/x/axelarnet/client" - axelarnetKeeper "github.com/axelarnetwork/axelar-core/x/axelarnet/keeper" - axelarnetTypes "github.com/axelarnetwork/axelar-core/x/axelarnet/types" - axelarbankkeeper "github.com/axelarnetwork/axelar-core/x/bank/keeper" - "github.com/axelarnetwork/axelar-core/x/evm" - evmKeeper "github.com/axelarnetwork/axelar-core/x/evm/keeper" - evmTypes "github.com/axelarnetwork/axelar-core/x/evm/types" - "github.com/axelarnetwork/axelar-core/x/multisig" - multisigKeeper "github.com/axelarnetwork/axelar-core/x/multisig/keeper" - multisigTypes "github.com/axelarnetwork/axelar-core/x/multisig/types" - "github.com/axelarnetwork/axelar-core/x/nexus" - nexusKeeper "github.com/axelarnetwork/axelar-core/x/nexus/keeper" - nexusTypes "github.com/axelarnetwork/axelar-core/x/nexus/types" - "github.com/axelarnetwork/axelar-core/x/permission" - permissionKeeper "github.com/axelarnetwork/axelar-core/x/permission/keeper" - permissionTypes "github.com/axelarnetwork/axelar-core/x/permission/types" - "github.com/axelarnetwork/axelar-core/x/reward" - rewardKeeper "github.com/axelarnetwork/axelar-core/x/reward/keeper" - rewardTypes "github.com/axelarnetwork/axelar-core/x/reward/types" - "github.com/axelarnetwork/axelar-core/x/snapshot" - snapKeeper "github.com/axelarnetwork/axelar-core/x/snapshot/keeper" - snapTypes "github.com/axelarnetwork/axelar-core/x/snapshot/types" - "github.com/axelarnetwork/axelar-core/x/tss" - tssKeeper "github.com/axelarnetwork/axelar-core/x/tss/keeper" - tssTypes "github.com/axelarnetwork/axelar-core/x/tss/types" - "github.com/axelarnetwork/axelar-core/x/vote" - voteKeeper "github.com/axelarnetwork/axelar-core/x/vote/keeper" - voteTypes "github.com/axelarnetwork/axelar-core/x/vote/types" bam "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" @@ -121,11 +96,39 @@ import ( tmos "github.com/tendermint/tendermint/libs/os" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" - "io" - stdlog "log" - "net/http" - "os" - "path/filepath" + + axelarParams "github.com/axelarnetwork/axelar-core/app/params" + "github.com/axelarnetwork/axelar-core/x/ante" + "github.com/axelarnetwork/axelar-core/x/axelarnet" + axelarnetclient "github.com/axelarnetwork/axelar-core/x/axelarnet/client" + axelarnetKeeper "github.com/axelarnetwork/axelar-core/x/axelarnet/keeper" + axelarnetTypes "github.com/axelarnetwork/axelar-core/x/axelarnet/types" + axelarbankkeeper "github.com/axelarnetwork/axelar-core/x/bank/keeper" + "github.com/axelarnetwork/axelar-core/x/evm" + evmKeeper "github.com/axelarnetwork/axelar-core/x/evm/keeper" + evmTypes "github.com/axelarnetwork/axelar-core/x/evm/types" + "github.com/axelarnetwork/axelar-core/x/multisig" + multisigKeeper "github.com/axelarnetwork/axelar-core/x/multisig/keeper" + multisigTypes "github.com/axelarnetwork/axelar-core/x/multisig/types" + "github.com/axelarnetwork/axelar-core/x/nexus" + nexusKeeper "github.com/axelarnetwork/axelar-core/x/nexus/keeper" + nexusTypes "github.com/axelarnetwork/axelar-core/x/nexus/types" + "github.com/axelarnetwork/axelar-core/x/permission" + permissionKeeper "github.com/axelarnetwork/axelar-core/x/permission/keeper" + permissionTypes "github.com/axelarnetwork/axelar-core/x/permission/types" + "github.com/axelarnetwork/axelar-core/x/reward" + rewardKeeper "github.com/axelarnetwork/axelar-core/x/reward/keeper" + rewardTypes "github.com/axelarnetwork/axelar-core/x/reward/types" + "github.com/axelarnetwork/axelar-core/x/snapshot" + snapKeeper "github.com/axelarnetwork/axelar-core/x/snapshot/keeper" + snapTypes "github.com/axelarnetwork/axelar-core/x/snapshot/types" + "github.com/axelarnetwork/axelar-core/x/tss" + tssKeeper "github.com/axelarnetwork/axelar-core/x/tss/keeper" + tssTypes "github.com/axelarnetwork/axelar-core/x/tss/types" + "github.com/axelarnetwork/axelar-core/x/vote" + voteKeeper "github.com/axelarnetwork/axelar-core/x/vote/keeper" + voteTypes "github.com/axelarnetwork/axelar-core/x/vote/types" + // Override with generated statik docs _ "github.com/axelarnetwork/axelar-core/client/docs/statik" ) diff --git a/app/keepers.go b/app/keepers.go index 6ce5975be..7d17efeee 100644 --- a/app/keepers.go +++ b/app/keepers.go @@ -2,28 +2,10 @@ package app import ( "fmt" + "reflect" + "strings" + "github.com/CosmWasm/wasmd/x/wasm" - "github.com/axelarnetwork/axelar-core/x/axelarnet" - axelarnetKeeper "github.com/axelarnetwork/axelar-core/x/axelarnet/keeper" - axelarnetTypes "github.com/axelarnetwork/axelar-core/x/axelarnet/types" - axelarbankkeeper "github.com/axelarnetwork/axelar-core/x/bank/keeper" - evmKeeper "github.com/axelarnetwork/axelar-core/x/evm/keeper" - evmTypes "github.com/axelarnetwork/axelar-core/x/evm/types" - multisigKeeper "github.com/axelarnetwork/axelar-core/x/multisig/keeper" - multisigTypes "github.com/axelarnetwork/axelar-core/x/multisig/types" - nexusKeeper "github.com/axelarnetwork/axelar-core/x/nexus/keeper" - nexusTypes "github.com/axelarnetwork/axelar-core/x/nexus/types" - permissionKeeper "github.com/axelarnetwork/axelar-core/x/permission/keeper" - permissionTypes "github.com/axelarnetwork/axelar-core/x/permission/types" - rewardKeeper "github.com/axelarnetwork/axelar-core/x/reward/keeper" - rewardTypes "github.com/axelarnetwork/axelar-core/x/reward/types" - snapKeeper "github.com/axelarnetwork/axelar-core/x/snapshot/keeper" - snapTypes "github.com/axelarnetwork/axelar-core/x/snapshot/types" - tssKeeper "github.com/axelarnetwork/axelar-core/x/tss/keeper" - tssTypes "github.com/axelarnetwork/axelar-core/x/tss/types" - voteKeeper "github.com/axelarnetwork/axelar-core/x/vote/keeper" - voteTypes "github.com/axelarnetwork/axelar-core/x/vote/types" - "github.com/axelarnetwork/utils/maps" bam "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -61,8 +43,28 @@ import ( ibchost "github.com/cosmos/ibc-go/v4/modules/core/24-host" ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper" "golang.org/x/mod/semver" - "reflect" - "strings" + + "github.com/axelarnetwork/axelar-core/x/axelarnet" + axelarnetKeeper "github.com/axelarnetwork/axelar-core/x/axelarnet/keeper" + axelarnetTypes "github.com/axelarnetwork/axelar-core/x/axelarnet/types" + axelarbankkeeper "github.com/axelarnetwork/axelar-core/x/bank/keeper" + evmKeeper "github.com/axelarnetwork/axelar-core/x/evm/keeper" + evmTypes "github.com/axelarnetwork/axelar-core/x/evm/types" + multisigKeeper "github.com/axelarnetwork/axelar-core/x/multisig/keeper" + multisigTypes "github.com/axelarnetwork/axelar-core/x/multisig/types" + nexusKeeper "github.com/axelarnetwork/axelar-core/x/nexus/keeper" + nexusTypes "github.com/axelarnetwork/axelar-core/x/nexus/types" + permissionKeeper "github.com/axelarnetwork/axelar-core/x/permission/keeper" + permissionTypes "github.com/axelarnetwork/axelar-core/x/permission/types" + rewardKeeper "github.com/axelarnetwork/axelar-core/x/reward/keeper" + rewardTypes "github.com/axelarnetwork/axelar-core/x/reward/types" + snapKeeper "github.com/axelarnetwork/axelar-core/x/snapshot/keeper" + snapTypes "github.com/axelarnetwork/axelar-core/x/snapshot/types" + tssKeeper "github.com/axelarnetwork/axelar-core/x/tss/keeper" + tssTypes "github.com/axelarnetwork/axelar-core/x/tss/types" + voteKeeper "github.com/axelarnetwork/axelar-core/x/vote/keeper" + voteTypes "github.com/axelarnetwork/axelar-core/x/vote/types" + "github.com/axelarnetwork/utils/maps" ) type keeperCache struct { From 16d5bc9db72c01425f0781a580301dc875150944 Mon Sep 17 00:00:00 2001 From: Christian Gorenflo Date: Thu, 2 Nov 2023 21:31:14 -0400 Subject: [PATCH 3/5] revert unnecessary change --- app/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index cf914a0cb..9efd228e1 100644 --- a/app/app.go +++ b/app/app.go @@ -246,8 +246,8 @@ func NewAxelarApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest setKeeper(keepers, *capabilityK) // grant capabilities for the ibc and ibc-transfer modules - scopedTransferK := capabilityK.ScopeToModule(ibctransfertypes.ModuleName) scopedIBCK := capabilityK.ScopeToModule(ibchost.ModuleName) + scopedTransferK := capabilityK.ScopeToModule(ibctransfertypes.ModuleName) capabilityK.Seal() setKeeper(keepers, initIBCKeeper(appCodec, keys, keepers, scopedIBCK)) From e91f4ceea78dab1f59d5b3fdc6cfa34815c3a341 Mon Sep 17 00:00:00 2001 From: Christian Gorenflo Date: Mon, 6 Nov 2023 15:34:15 -0500 Subject: [PATCH 4/5] address comments --- app/keepers.go | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/app/keepers.go b/app/keepers.go index 7d17efeee..b95f7c43a 100644 --- a/app/keepers.go +++ b/app/keepers.go @@ -77,7 +77,7 @@ func newKeeperCache() *keeperCache { } } -func getSubspace(k *keeperCache, moduleName string) paramstypes.Subspace { +func (k *keeperCache) getSubspace(moduleName string) paramstypes.Subspace { paramsK := getKeeper[paramskeeper.Keeper](k) subspace, ok := paramsK.GetSubspace(moduleName) if !ok { @@ -126,7 +126,7 @@ func initGovernanceKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, } govK := govkeeper.NewKeeper( - appCodec, keys[govtypes.StoreKey], getSubspace(keepers, govtypes.ModuleName), getKeeper[authkeeper.AccountKeeper](keepers), getKeeper[bankkeeper.BaseKeeper](keepers), + appCodec, keys[govtypes.StoreKey], keepers.getSubspace(govtypes.ModuleName), getKeeper[authkeeper.AccountKeeper](keepers), getKeeper[bankkeeper.BaseKeeper](keepers), getKeeper[stakingkeeper.Keeper](keepers), govRouter, ) @@ -136,7 +136,7 @@ func initGovernanceKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, } func initPermissionKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) permissionKeeper.Keeper { - return permissionKeeper.NewKeeper(appCodec, keys[permissionTypes.StoreKey], getSubspace(keepers, permissionTypes.ModuleName)) + return permissionKeeper.NewKeeper(appCodec, keys[permissionTypes.StoreKey], keepers.getSubspace(permissionTypes.ModuleName)) } func initVoteKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) voteKeeper.Keeper { @@ -154,7 +154,7 @@ func initVoteKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepe voteK := voteKeeper.NewKeeper( appCodec, keys[voteTypes.StoreKey], - getSubspace(keepers, voteTypes.ModuleName), + keepers.getSubspace(voteTypes.ModuleName), getKeeper[snapKeeper.Keeper](keepers), getKeeper[stakingkeeper.Keeper](keepers), getKeeper[rewardKeeper.Keeper](keepers), @@ -167,7 +167,7 @@ func initSnapshotKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, k return snapKeeper.NewKeeper( appCodec, keys[snapTypes.StoreKey], - getSubspace(keepers, snapTypes.ModuleName), + keepers.getSubspace(snapTypes.ModuleName), getKeeper[stakingkeeper.Keeper](keepers), axelarbankkeeper.NewBankKeeper(getKeeper[bankkeeper.BaseKeeper](keepers)), getKeeper[slashingkeeper.Keeper](keepers), @@ -175,14 +175,14 @@ func initSnapshotKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, k } func initTssKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) tssKeeper.Keeper { - return tssKeeper.NewKeeper(appCodec, keys[tssTypes.StoreKey], getSubspace(keepers, tssTypes.ModuleName)) + return tssKeeper.NewKeeper(appCodec, keys[tssTypes.StoreKey], keepers.getSubspace(tssTypes.ModuleName)) } func initMultisigKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache) multisigKeeper.Keeper { multisigRouter := multisigTypes.NewSigRouter() multisigRouter.AddHandler(evmTypes.ModuleName, evmKeeper.NewSigHandler(appCodec, getKeeper[*evmKeeper.BaseKeeper](keepers))) - multisigK := multisigKeeper.NewKeeper(appCodec, keys[multisigTypes.StoreKey], getSubspace(keepers, multisigTypes.ModuleName)) + multisigK := multisigKeeper.NewKeeper(appCodec, keys[multisigTypes.StoreKey], keepers.getSubspace(multisigTypes.ModuleName)) multisigK.SetSigRouter(multisigRouter) return multisigK } @@ -191,7 +191,7 @@ func initRewardKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, kee return rewardKeeper.NewKeeper( appCodec, keys[rewardTypes.StoreKey], - getSubspace(keepers, rewardTypes.ModuleName), + keepers.getSubspace(rewardTypes.ModuleName), axelarbankkeeper.NewBankKeeper(getKeeper[bankkeeper.BaseKeeper](keepers)), getKeeper[distrkeeper.Keeper](keepers), getKeeper[stakingkeeper.Keeper](keepers), @@ -202,7 +202,7 @@ func initIBCKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keeper return ibckeeper.NewKeeper( appCodec, keys[ibchost.StoreKey], - getSubspace(keepers, ibchost.ModuleName), + keepers.getSubspace(ibchost.ModuleName), getKeeper[stakingkeeper.Keeper](keepers), getKeeper[upgradekeeper.Keeper](keepers), scopedIBCK, @@ -217,7 +217,7 @@ func initNexusKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keep AddAddressValidator(evmTypes.ModuleName, evmKeeper.NewAddressValidator()). AddAddressValidator(axelarnetTypes.ModuleName, axelarnetKeeper.NewAddressValidator(getKeeper[axelarnetKeeper.Keeper](keepers))) - nexusK := nexusKeeper.NewKeeper(appCodec, keys[nexusTypes.StoreKey], getSubspace(keepers, nexusTypes.ModuleName)) + nexusK := nexusKeeper.NewKeeper(appCodec, keys[nexusTypes.StoreKey], keepers.getSubspace(nexusTypes.ModuleName)) nexusK.SetRouter(nexusRouter) return nexusK } @@ -257,7 +257,7 @@ func upgradeName(version string) string { func initCrisisKeeper(keepers *keeperCache, invCheckPeriod uint) crisiskeeper.Keeper { return crisiskeeper.NewKeeper( - getSubspace(keepers, crisistypes.ModuleName), + keepers.getSubspace(crisistypes.ModuleName), invCheckPeriod, getKeeper[bankkeeper.BaseKeeper](keepers), authtypes.FeeCollectorName, @@ -265,14 +265,14 @@ func initCrisisKeeper(keepers *keeperCache, invCheckPeriod uint) crisiskeeper.Ke } func initSlashingKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache, stakingK *stakingkeeper.Keeper) slashingkeeper.Keeper { - return slashingkeeper.NewKeeper(appCodec, keys[slashingtypes.StoreKey], stakingK, getSubspace(keepers, slashingtypes.ModuleName)) + return slashingkeeper.NewKeeper(appCodec, keys[slashingtypes.StoreKey], stakingK, keepers.getSubspace(slashingtypes.ModuleName)) } func initDistributionKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepers *keeperCache, stakingK *stakingkeeper.Keeper, moduleAccPerms map[string][]string) distrkeeper.Keeper { return distrkeeper.NewKeeper( appCodec, keys[distrtypes.StoreKey], - getSubspace(keepers, distrtypes.ModuleName), + keepers.getSubspace(distrtypes.ModuleName), getKeeper[authkeeper.AccountKeeper](keepers), getKeeper[bankkeeper.BaseKeeper](keepers), stakingK, @@ -285,7 +285,7 @@ func initMintKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepe return mintkeeper.NewKeeper( appCodec, keys[minttypes.StoreKey], - getSubspace(keepers, minttypes.ModuleName), + keepers.getSubspace(minttypes.ModuleName), stakingK, getKeeper[authkeeper.AccountKeeper](keepers), getKeeper[bankkeeper.BaseKeeper](keepers), @@ -298,7 +298,7 @@ func initBankKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, keepe appCodec, keys[banktypes.StoreKey], getKeeper[authkeeper.AccountKeeper](keepers), - getSubspace(keepers, banktypes.ModuleName), + keepers.getSubspace(banktypes.ModuleName), maps.Filter(moduleAccountAddrs(moduleAccPerms), func(addr string, _ bool) bool { // we do not rely on internal balance tracking for invariance checks in the axelarnet module // (https://github.com/cosmos/cosmos-sdk/issues/12825 for more details on the purpose of the blocked list), @@ -313,7 +313,7 @@ func initAccountKeeper(appCodec codec.Codec, keys map[string]*sdk.KVStoreKey, ke return authkeeper.NewAccountKeeper( appCodec, keys[authtypes.StoreKey], - getSubspace(keepers, authtypes.ModuleName), + keepers.getSubspace(authtypes.ModuleName), authtypes.ProtoBaseAccount, moduleAccPerms, ) From a19495257707201a019aab7b824e9e45c38afd86 Mon Sep 17 00:00:00 2001 From: Christian Gorenflo Date: Mon, 6 Nov 2023 15:42:57 -0500 Subject: [PATCH 5/5] fix bugs --- app/app.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/app.go b/app/app.go index 9efd228e1..b382d8058 100644 --- a/app/app.go +++ b/app/app.go @@ -212,14 +212,14 @@ func NewAxelarApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest setKeeper(keepers, initParamsKeeper(appCodec, encodingConfig.Amino, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey])) // set the BaseApp's parameter store - bApp.SetParamStore(getSubspace(keepers, bam.Paramspace)) + bApp.SetParamStore(keepers.getSubspace(bam.Paramspace)) // add keepers setKeeper(keepers, initAccountKeeper(appCodec, keys, keepers, moduleAccountPermissions)) setKeeper(keepers, initBankKeeper(appCodec, keys, keepers, moduleAccountPermissions)) stakingK := stakingkeeper.NewKeeper( - appCodec, keys[stakingtypes.StoreKey], getKeeper[authkeeper.AccountKeeper](keepers), getKeeper[bankkeeper.BaseKeeper](keepers), getSubspace(keepers, stakingtypes.ModuleName), + appCodec, keys[stakingtypes.StoreKey], getKeeper[authkeeper.AccountKeeper](keepers), getKeeper[bankkeeper.BaseKeeper](keepers), keepers.getSubspace(stakingtypes.ModuleName), ) setKeeper(keepers, initMintKeeper(appCodec, keys, keepers, &stakingK)) @@ -253,7 +253,7 @@ func NewAxelarApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest setKeeper(keepers, initIBCKeeper(appCodec, keys, keepers, scopedIBCK)) // Custom axelarnet/evm/nexus keepers setKeeper(keepers, axelarnetKeeper.NewKeeper( - appCodec, keys[axelarnetTypes.StoreKey], getSubspace(keepers, axelarnetTypes.ModuleName), getKeeper[*ibckeeper.Keeper](keepers).ChannelKeeper, getKeeper[feegrantkeeper.Keeper](keepers), + appCodec, keys[axelarnetTypes.StoreKey], keepers.getSubspace(axelarnetTypes.ModuleName), getKeeper[*ibckeeper.Keeper](keepers).ChannelKeeper, getKeeper[feegrantkeeper.Keeper](keepers), )) setKeeper(keepers, evmKeeper.NewKeeper( @@ -293,7 +293,7 @@ func NewAxelarApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest // Create Transfer Keepers setKeeper(keepers, ibctransferkeeper.NewKeeper( - appCodec, keys[ibctransfertypes.StoreKey], getSubspace(keepers, ibctransfertypes.ModuleName), + appCodec, keys[ibctransfertypes.StoreKey], keepers.getSubspace(ibctransfertypes.ModuleName), // Use the IBC middleware stack ics4Wrapper, getKeeper[*ibckeeper.Keeper](keepers).ChannelKeeper, &getKeeper[*ibckeeper.Keeper](keepers).PortKeeper, @@ -345,7 +345,7 @@ func NewAxelarApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest wasmK = wasm.NewKeeper( appCodec, keys[wasm.StoreKey], - getSubspace(keepers, wasm.ModuleName), + keepers.getSubspace(wasm.ModuleName), getKeeper[authkeeper.AccountKeeper](keepers), getKeeper[bankkeeper.BaseKeeper](keepers), getKeeper[stakingkeeper.Keeper](keepers),