From 9f555aaaeafa2e635bd3bb4562e8a61c05b02f3a Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 26 Apr 2023 17:36:56 +0200 Subject: [PATCH 01/10] refactor(simapp): remove public app module basic --- simapp/app.go | 56 ++++++++---------------------- simapp/app_config.go | 27 ++++++++++++--- simapp/app_v2.go | 60 +++------------------------------ simapp/simd/cmd/root.go | 17 ++++++---- simapp/simd/cmd/testnet_test.go | 25 +++++++++++--- types/module/module.go | 15 +++++++++ 6 files changed, 87 insertions(+), 113 deletions(-) diff --git a/simapp/app.go b/simapp/app.go index 5fb2fc14e6ad..621615dd6480 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -80,7 +80,6 @@ import ( "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" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" @@ -91,7 +90,6 @@ import ( 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" @@ -109,34 +107,6 @@ 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.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), - bank.AppModuleBasic{}, - staking.AppModuleBasic{}, - mint.AppModuleBasic{}, - distr.AppModuleBasic{}, - gov.NewAppModuleBasic( - []govclient.ProposalHandler{ - paramsclient.ProposalHandler, - }, - ), - params.AppModuleBasic{}, - crisis.AppModuleBasic{}, - slashing.AppModuleBasic{}, - feegrantmodule.AppModuleBasic{}, - upgrade.AppModuleBasic{}, - evidence.AppModuleBasic{}, - authzmodule.AppModuleBasic{}, - groupmodule.AppModuleBasic{}, - vesting.AppModuleBasic{}, - nftmodule.AppModuleBasic{}, - consensus.AppModuleBasic{}, - ) - // module account permissions maccPerms = map[string][]string{ authtypes.FeeCollectorName: nil, @@ -188,6 +158,7 @@ type SimApp struct { // the module manager ModuleManager *module.Manager + ModuleBasics module.BasicManager // simulation manager sm *module.SimulationManager @@ -214,13 +185,16 @@ func NewSimApp( appOpts servertypes.AppOptions, baseAppOptions ...func(*baseapp.BaseApp), ) *SimApp { - encodingConfig := makeEncodingConfig() + encodingConfig := simappparams.MakeTestEncodingConfig() appCodec := encodingConfig.Codec legacyAmino := encodingConfig.Amino interfaceRegistry := encodingConfig.InterfaceRegistry txConfig := encodingConfig.TxConfig + std.RegisterLegacyAminoCodec(legacyAmino) + std.RegisterInterfaces(interfaceRegistry) + // Below we could construct and set an application specific mempool and // ABCI 1.0 PrepareProposal and ProcessProposal handlers. These defaults are // already set in the SDK's BaseApp, this shows an example of how to override @@ -402,6 +376,13 @@ func NewSimApp( consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), ) + // ModuleBasics defines the module BasicManager is in charge of setting up basic, + // non-dependant module elements, such as codec registration + // and genesis verification. + app.ModuleBasics = module.NewBasicManagerFromManager(app.ModuleManager) + app.ModuleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino) + app.ModuleBasics.RegisterInterfaces(encodingConfig.InterfaceRegistry) + // 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. @@ -629,7 +610,7 @@ func (app *SimApp) AutoCliOpts() autocli.AppOptions { // DefaultGenesis returns a default genesis from the registered AppModuleBasic's. func (a *SimApp) DefaultGenesis() map[string]json.RawMessage { - return ModuleBasics.DefaultGenesis(a.appCodec) + return a.ModuleBasics.DefaultGenesis(a.appCodec) } // GetKey returns the KVStoreKey for the provided store key. @@ -676,7 +657,7 @@ func (app *SimApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APICon nodeservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // Register grpc-gateway routes for all modules. - ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + app.ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // register swagger API from root so that other applications can override easily if err := server.RegisterSwaggerAPI(apiSvr.ClientCtx, apiSvr.Router, apiConfig.Swagger); err != nil { @@ -743,12 +724,3 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino return paramsKeeper } - -func makeEncodingConfig() simappparams.EncodingConfig { - encodingConfig := simappparams.MakeTestEncodingConfig() - std.RegisterLegacyAminoCodec(encodingConfig.Amino) - std.RegisterInterfaces(encodingConfig.InterfaceRegistry) - ModuleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino) - ModuleBasics.RegisterInterfaces(encodingConfig.InterfaceRegistry) - return encodingConfig -} diff --git a/simapp/app_config.go b/simapp/app_config.go index cbf3c291b733..44553c7b1580 100644 --- a/simapp/app_config.go +++ b/simapp/app_config.go @@ -3,6 +3,8 @@ package simapp import ( "time" + "google.golang.org/protobuf/types/known/durationpb" + runtimev1alpha1 "cosmossdk.io/api/cosmos/app/runtime/v1alpha1" appv1alpha1 "cosmossdk.io/api/cosmos/app/v1alpha1" authmodulev1 "cosmossdk.io/api/cosmos/auth/module/v1" @@ -24,14 +26,31 @@ import ( txconfigv1 "cosmossdk.io/api/cosmos/tx/config/v1" upgrademodulev1 "cosmossdk.io/api/cosmos/upgrade/module/v1" vestingmodulev1 "cosmossdk.io/api/cosmos/vesting/module/v1" + + _ "cosmossdk.io/x/evidence" // import for side-effects + _ "cosmossdk.io/x/feegrant/module" // import for side-effects + _ "cosmossdk.io/x/nft/module" // import for side-effects + _ "cosmossdk.io/x/upgrade" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/auth/tx/config" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/auth/vesting" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/authz/module" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/bank" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/consensus" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/crisis" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/distribution" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/genutil" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/gov" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/group/module" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/mint" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/params" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/slashing" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/staking" // import for side-effects + "cosmossdk.io/core/appconfig" evidencetypes "cosmossdk.io/x/evidence/types" + "cosmossdk.io/x/feegrant" "cosmossdk.io/x/nft" upgradetypes "cosmossdk.io/x/upgrade/types" - "google.golang.org/protobuf/types/known/durationpb" - - "cosmossdk.io/x/feegrant" - "github.com/cosmos/cosmos-sdk/runtime" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" diff --git a/simapp/app_v2.go b/simapp/app_v2.go index 51d30fe00003..94ad67ef54e4 100644 --- a/simapp/app_v2.go +++ b/simapp/app_v2.go @@ -12,15 +12,10 @@ import ( "cosmossdk.io/client/v2/autocli" "cosmossdk.io/depinject" - "cosmossdk.io/x/evidence" - evidencekeeper "cosmossdk.io/x/evidence/keeper" - nftkeeper "cosmossdk.io/x/nft/keeper" - nftmodule "cosmossdk.io/x/nft/module" - storetypes "cosmossdk.io/store/types" + evidencekeeper "cosmossdk.io/x/evidence/keeper" feegrantkeeper "cosmossdk.io/x/feegrant/keeper" - feegrantmodule "cosmossdk.io/x/feegrant/module" - "cosmossdk.io/x/upgrade" + nftkeeper "cosmossdk.io/x/nft/keeper" upgradekeeper "cosmossdk.io/x/upgrade/keeper" "github.com/cosmos/cosmos-sdk/baseapp" @@ -37,70 +32,23 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation" - _ "github.com/cosmos/cosmos-sdk/x/auth/tx/config" // import for side-effects authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/cosmos/cosmos-sdk/x/auth/vesting" authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper" - authzmodule "github.com/cosmos/cosmos-sdk/x/authz/module" - "github.com/cosmos/cosmos-sdk/x/bank" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - consensus "github.com/cosmos/cosmos-sdk/x/consensus" consensuskeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" - "github.com/cosmos/cosmos-sdk/x/crisis" crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper" - distr "github.com/cosmos/cosmos-sdk/x/distribution" distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" - "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" groupkeeper "github.com/cosmos/cosmos-sdk/x/group/keeper" - groupmodule "github.com/cosmos/cosmos-sdk/x/group/module" - "github.com/cosmos/cosmos-sdk/x/mint" mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" - "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" - "github.com/cosmos/cosmos-sdk/x/slashing" slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" - "github.com/cosmos/cosmos-sdk/x/staking" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" ) -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.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), - bank.AppModuleBasic{}, - staking.AppModuleBasic{}, - mint.AppModuleBasic{}, - distr.AppModuleBasic{}, - gov.NewAppModuleBasic( - []govclient.ProposalHandler{ - paramsclient.ProposalHandler, - }, - ), - params.AppModuleBasic{}, - crisis.AppModuleBasic{}, - slashing.AppModuleBasic{}, - feegrantmodule.AppModuleBasic{}, - upgrade.AppModuleBasic{}, - evidence.AppModuleBasic{}, - authzmodule.AppModuleBasic{}, - groupmodule.AppModuleBasic{}, - vesting.AppModuleBasic{}, - nftmodule.AppModuleBasic{}, - consensus.AppModuleBasic{}, - ) -) +// DefaultNodeHome default home directories for the application daemon +var DefaultNodeHome string var ( _ runtime.AppI = (*SimApp)(nil) diff --git a/simapp/simd/cmd/root.go b/simapp/simd/cmd/root.go index 2d7734490416..3bdbd174e4b6 100644 --- a/simapp/simd/cmd/root.go +++ b/simapp/simd/cmd/root.go @@ -28,6 +28,7 @@ import ( servertypes "github.com/cosmos/cosmos-sdk/server/types" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" "github.com/cosmos/cosmos-sdk/x/auth/tx" txmodule "github.com/cosmos/cosmos-sdk/x/auth/tx/config" @@ -102,7 +103,7 @@ func NewRootCmd() *cobra.Command { }, } - initRootCmd(rootCmd, encodingConfig) + initRootCmd(rootCmd, encodingConfig, tempApp.ModuleManager) if err := tempApp.AutoCliOpts().EnhanceRootCommand(rootCmd); err != nil { panic(err) @@ -180,13 +181,15 @@ lru_size = 0` return customAppTemplate, customAppConfig } -func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { +func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig, moduleManager *module.Manager) { cfg := sdk.GetConfig() cfg.Seal() + basicManager := module.NewBasicManagerFromManager(moduleManager) + rootCmd.AddCommand( - genutilcli.InitCmd(simapp.ModuleBasics, simapp.DefaultNodeHome), - NewTestnetCmd(simapp.ModuleBasics, banktypes.GenesisBalancesIterator{}), + genutilcli.InitCmd(basicManager, simapp.DefaultNodeHome), + NewTestnetCmd(basicManager, banktypes.GenesisBalancesIterator{}), debug.Cmd(), confixcmd.ConfigCommand(), pruning.Cmd(newApp), @@ -197,7 +200,7 @@ func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { // add keybase, auxiliary RPC, query, genesis, and tx child commands rootCmd.AddCommand( rpc.StatusCommand(), - genesisCommand(encodingConfig), + genesisCommand(encodingConfig, basicManager), queryCommand(), txCommand(), keys.Commands(simapp.DefaultNodeHome), @@ -212,8 +215,8 @@ func addModuleInitFlags(startCmd *cobra.Command) { } // genesisCommand builds genesis-related `simd genesis` command. Users may provide application specific commands as a parameter -func genesisCommand(encodingConfig params.EncodingConfig, cmds ...*cobra.Command) *cobra.Command { - cmd := genutilcli.Commands(encodingConfig.TxConfig, simapp.ModuleBasics, simapp.DefaultNodeHome) +func genesisCommand(encodingConfig params.EncodingConfig, basicManager module.BasicManager, cmds ...*cobra.Command) *cobra.Command { + cmd := genutilcli.Commands(encodingConfig.TxConfig, basicManager, simapp.DefaultNodeHome) for _, subCmd := range cmds { cmd.AddCommand(subCmd) diff --git a/simapp/simd/cmd/testnet_test.go b/simapp/simd/cmd/testnet_test.go index d7b05f685cbc..71ef4d304618 100644 --- a/simapp/simd/cmd/testnet_test.go +++ b/simapp/simd/cmd/testnet_test.go @@ -9,26 +9,43 @@ import ( "github.com/stretchr/testify/require" "cosmossdk.io/log" - "cosmossdk.io/simapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/server" + "github.com/cosmos/cosmos-sdk/types/module" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/x/auth" + "github.com/cosmos/cosmos-sdk/x/bank" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/cosmos-sdk/x/consensus" + "github.com/cosmos/cosmos-sdk/x/distribution" + "github.com/cosmos/cosmos-sdk/x/genutil" genutiltest "github.com/cosmos/cosmos-sdk/x/genutil/client/testutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" + "github.com/cosmos/cosmos-sdk/x/mint" + "github.com/cosmos/cosmos-sdk/x/params" "github.com/cosmos/cosmos-sdk/x/staking" ) func Test_TestnetCmd(t *testing.T) { + moduleBasic := module.NewBasicManager( + auth.AppModuleBasic{}, + genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + bank.AppModuleBasic{}, + staking.AppModuleBasic{}, + mint.AppModuleBasic{}, + distribution.AppModuleBasic{}, + params.AppModuleBasic{}, + consensus.AppModuleBasic{}, + ) + home := t.TempDir() - encodingConfig := moduletestutil.MakeTestEncodingConfig(staking.AppModuleBasic{}, auth.AppModuleBasic{}) + encodingConfig := moduletestutil.MakeTestEncodingConfig(auth.AppModuleBasic{}, staking.AppModuleBasic{}) logger := log.NewNopLogger() cfg, err := genutiltest.CreateDefaultCometConfig(home) require.NoError(t, err) - err = genutiltest.ExecInitCmd(simapp.ModuleBasics, home, encodingConfig.Codec) + err = genutiltest.ExecInitCmd(moduleBasic, home, encodingConfig.Codec) require.NoError(t, err) serverCtx := server.NewContext(viper.New(), cfg, logger) @@ -40,7 +57,7 @@ func Test_TestnetCmd(t *testing.T) { ctx := context.Background() ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx) ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx) - cmd := testnetInitFilesCmd(simapp.ModuleBasics, banktypes.GenesisBalancesIterator{}) + cmd := testnetInitFilesCmd(moduleBasic, banktypes.GenesisBalancesIterator{}) cmd.SetArgs([]string{fmt.Sprintf("--%s=test", flags.FlagKeyringBackend), fmt.Sprintf("--output-dir=%s", home)}) err = cmd.ExecuteContext(ctx) require.NoError(t, err) diff --git a/types/module/module.go b/types/module/module.go index 492631f5a55c..f8e06e9ccd0a 100644 --- a/types/module/module.go +++ b/types/module/module.go @@ -90,6 +90,21 @@ func NewBasicManager(modules ...AppModuleBasic) BasicManager { return moduleMap } +// NewBasicManagerFromManager creates a new BasicManager from a Manager +func NewBasicManagerFromManager(manager *Manager) BasicManager { + moduleMap := make(map[string]AppModuleBasic) + for name, module := range manager.Modules { + appModuleBasic, ok := module.(AppModuleBasic) + if !ok { + continue + } + + moduleMap[name] = appModuleBasic + } + + return moduleMap +} + // RegisterLegacyAminoCodec registers all module codecs func (bm BasicManager) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { for _, b := range bm { From 78835a8afd4414e93f8a175c1d9ca5440fea2d04 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Fri, 28 Apr 2023 21:43:13 +0200 Subject: [PATCH 02/10] updates --- runtime/module.go | 24 ++++++++++++++++-------- simapp/app_v2.go | 16 ++++++++++++++++ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/runtime/module.go b/runtime/module.go index 81cda6e1ed0f..0c06701f3641 100644 --- a/runtime/module.go +++ b/runtime/module.go @@ -121,14 +121,15 @@ func ProvideApp() ( type AppInputs struct { depinject.In - AppConfig *appv1alpha1.Config - Config *runtimev1alpha1.Module - AppBuilder *AppBuilder - Modules map[string]appmodule.AppModule - BaseAppOptions []BaseAppOption - InterfaceRegistry codectypes.InterfaceRegistry - LegacyAmino *codec.LegacyAmino - Logger log.Logger + AppConfig *appv1alpha1.Config + Config *runtimev1alpha1.Module + AppBuilder *AppBuilder + Modules map[string]appmodule.AppModule + CustomModuleBasics map[string]module.AppModuleBasic `optional:"true"` + BaseAppOptions []BaseAppOption + InterfaceRegistry codectypes.InterfaceRegistry + LegacyAmino *codec.LegacyAmino + Logger log.Logger } func SetupAppBuilder(inputs AppInputs) { @@ -140,6 +141,13 @@ func SetupAppBuilder(inputs AppInputs) { app.logger = inputs.Logger for name, mod := range inputs.Modules { + if customBasicMod, ok := inputs.CustomModuleBasics[name]; ok { + app.basicManager[name] = customBasicMod + customBasicMod.RegisterInterfaces(inputs.InterfaceRegistry) + customBasicMod.RegisterLegacyAminoCodec(inputs.LegacyAmino) + continue + } + if basicMod, ok := mod.(module.AppModuleBasic); ok { app.basicManager[name] = basicMod basicMod.RegisterInterfaces(inputs.InterfaceRegistry) diff --git a/simapp/app_v2.go b/simapp/app_v2.go index 94ad67ef54e4..fad9f62e9545 100644 --- a/simapp/app_v2.go +++ b/simapp/app_v2.go @@ -38,9 +38,15 @@ import ( consensuskeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper" distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" + "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" groupkeeper "github.com/cosmos/cosmos-sdk/x/group/keeper" mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" + 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" slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" @@ -116,7 +122,17 @@ func NewSimApp( depinject.Supply( // supply the application options appOpts, + // supply the logger logger, + // supply custom module basics + map[string]module.AppModuleBasic{ + genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + govtypes.ModuleName: gov.NewAppModuleBasic( + []govclient.ProposalHandler{ + paramsclient.ProposalHandler, + }, + ), + }, // ADVANCED CONFIGURATION From 10f2217a77b465238a48fa0619bc53de1d907664 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Fri, 28 Apr 2023 22:58:26 +0200 Subject: [PATCH 03/10] updates --- runtime/app.go | 32 ++++++++++++++++---------------- runtime/module.go | 18 +++++++++--------- simapp/app.go | 28 ++++++++++++++++++---------- simapp/simd/cmd/root.go | 6 ++---- types/module/module.go | 10 ++++++---- 5 files changed, 51 insertions(+), 43 deletions(-) diff --git a/runtime/app.go b/runtime/app.go index 8bfcc53de471..affbe38dcfce 100644 --- a/runtime/app.go +++ b/runtime/app.go @@ -38,18 +38,18 @@ import ( type App struct { *baseapp.BaseApp - ModuleManager *module.Manager - configurator module.Configurator - config *runtimev1alpha1.Module - storeKeys []storetypes.StoreKey - interfaceRegistry codectypes.InterfaceRegistry - cdc codec.Codec - amino *codec.LegacyAmino - basicManager module.BasicManager - baseAppOptions []BaseAppOption - msgServiceRouter *baseapp.MsgServiceRouter - appConfig *appv1alpha1.Config - logger log.Logger + ModuleManager *module.Manager + BasicModuleManager module.BasicManager + configurator module.Configurator + config *runtimev1alpha1.Module + storeKeys []storetypes.StoreKey + interfaceRegistry codectypes.InterfaceRegistry + cdc codec.Codec + amino *codec.LegacyAmino + baseAppOptions []BaseAppOption + msgServiceRouter *baseapp.MsgServiceRouter + appConfig *appv1alpha1.Config + logger log.Logger // initChainer is the init chainer function defined by the app config. // this is only required if the chain wants to add special InitChainer logic. initChainer sdk.InitChainer @@ -65,12 +65,12 @@ func (a *App) RegisterModules(modules ...module.AppModule) error { return fmt.Errorf("AppModule named %q already exists", name) } - if _, ok := a.basicManager[name]; ok { + if _, ok := a.BasicModuleManager[name]; ok { return fmt.Errorf("AppModuleBasic named %q already exists", name) } a.ModuleManager.Modules[name] = appModule - a.basicManager[name] = appModule + a.BasicModuleManager[name] = appModule appModule.RegisterInterfaces(a.interfaceRegistry) appModule.RegisterLegacyAminoCodec(a.amino) @@ -169,7 +169,7 @@ func (a *App) RegisterAPIRoutes(apiSvr *api.Server, _ config.APIConfig) { nodeservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // Register grpc-gateway routes for all modules. - a.basicManager.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + a.BasicModuleManager.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) } // RegisterTxService implements the Application.RegisterTxService method. @@ -204,7 +204,7 @@ func (a *App) LoadHeight(height int64) error { // DefaultGenesis returns a default genesis from the registered AppModuleBasic's. func (a *App) DefaultGenesis() map[string]json.RawMessage { - return a.basicManager.DefaultGenesis(a.cdc) + return a.BasicModuleManager.DefaultGenesis(a.cdc) } // GetStoreKeys returns all the stored store keys. diff --git a/runtime/module.go b/runtime/module.go index 0c06701f3641..1c5918ee64c4 100644 --- a/runtime/module.go +++ b/runtime/module.go @@ -106,12 +106,12 @@ func ProvideApp() ( cdc := codec.NewProtoCodec(interfaceRegistry) msgServiceRouter := baseapp.NewMsgServiceRouter() app := &App{ - storeKeys: nil, - interfaceRegistry: interfaceRegistry, - cdc: cdc, - amino: amino, - basicManager: module.BasicManager{}, - msgServiceRouter: msgServiceRouter, + BasicModuleManager: module.BasicManager{}, + storeKeys: nil, + interfaceRegistry: interfaceRegistry, + cdc: cdc, + amino: amino, + msgServiceRouter: msgServiceRouter, } appBuilder := &AppBuilder{app} @@ -136,20 +136,20 @@ func SetupAppBuilder(inputs AppInputs) { app := inputs.AppBuilder.app app.baseAppOptions = inputs.BaseAppOptions app.config = inputs.Config - app.ModuleManager = module.NewManagerFromMap(inputs.Modules) app.appConfig = inputs.AppConfig app.logger = inputs.Logger + app.ModuleManager = module.NewManagerFromMap(inputs.Modules) for name, mod := range inputs.Modules { if customBasicMod, ok := inputs.CustomModuleBasics[name]; ok { - app.basicManager[name] = customBasicMod + app.BasicModuleManager[name] = customBasicMod customBasicMod.RegisterInterfaces(inputs.InterfaceRegistry) customBasicMod.RegisterLegacyAminoCodec(inputs.LegacyAmino) continue } if basicMod, ok := mod.(module.AppModuleBasic); ok { - app.basicManager[name] = basicMod + app.BasicModuleManager[name] = basicMod basicMod.RegisterInterfaces(inputs.InterfaceRegistry) basicMod.RegisterLegacyAminoCodec(inputs.LegacyAmino) } diff --git a/simapp/app.go b/simapp/app.go index 5305d9ed84d1..cdfe008fec75 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -81,6 +81,7 @@ import ( "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" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" @@ -91,6 +92,7 @@ import ( 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" @@ -158,8 +160,8 @@ type SimApp struct { ConsensusParamsKeeper consensusparamkeeper.Keeper // the module manager - ModuleManager *module.Manager - ModuleBasics module.BasicManager + ModuleManager *module.Manager + BasicModuleManager module.BasicManager // simulation manager sm *module.SimulationManager @@ -377,12 +379,18 @@ func NewSimApp( consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), ) - // ModuleBasics defines the module BasicManager is in charge of setting up basic, - // non-dependant module elements, such as codec registration - // and genesis verification. - app.ModuleBasics = module.NewBasicManagerFromManager(app.ModuleManager) - app.ModuleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino) - app.ModuleBasics.RegisterInterfaces(encodingConfig.InterfaceRegistry) + // BasicModuleManager defines the module BasicManager is in charge of setting up basic, + // non-dependant module elements, such as codec registration and genesis verification. + app.BasicModuleManager = module.NewBasicManagerFromManager(app.ModuleManager, map[string]module.AppModuleBasic{ + genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + govtypes.ModuleName: gov.NewAppModuleBasic( + []govclient.ProposalHandler{ + paramsclient.ProposalHandler, + }, + ), + }) + app.BasicModuleManager.RegisterLegacyAminoCodec(encodingConfig.Amino) + app.BasicModuleManager.RegisterInterfaces(encodingConfig.InterfaceRegistry) // 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 @@ -611,7 +619,7 @@ func (app *SimApp) AutoCliOpts() autocli.AppOptions { // DefaultGenesis returns a default genesis from the registered AppModuleBasic's. func (a *SimApp) DefaultGenesis() map[string]json.RawMessage { - return a.ModuleBasics.DefaultGenesis(a.appCodec) + return a.BasicModuleManager.DefaultGenesis(a.appCodec) } // GetKey returns the KVStoreKey for the provided store key. @@ -658,7 +666,7 @@ func (app *SimApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APICon nodeservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // Register grpc-gateway routes for all modules. - app.ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + app.BasicModuleManager.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // register swagger API from root so that other applications can override easily if err := server.RegisterSwaggerAPI(apiSvr.ClientCtx, apiSvr.Router, apiConfig.Swagger); err != nil { diff --git a/simapp/simd/cmd/root.go b/simapp/simd/cmd/root.go index 3bdbd174e4b6..12928278f575 100644 --- a/simapp/simd/cmd/root.go +++ b/simapp/simd/cmd/root.go @@ -103,7 +103,7 @@ func NewRootCmd() *cobra.Command { }, } - initRootCmd(rootCmd, encodingConfig, tempApp.ModuleManager) + initRootCmd(rootCmd, encodingConfig, tempApp.BasicModuleManager) if err := tempApp.AutoCliOpts().EnhanceRootCommand(rootCmd); err != nil { panic(err) @@ -181,12 +181,10 @@ lru_size = 0` return customAppTemplate, customAppConfig } -func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig, moduleManager *module.Manager) { +func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig, basicManager module.BasicManager) { cfg := sdk.GetConfig() cfg.Seal() - basicManager := module.NewBasicManagerFromManager(moduleManager) - rootCmd.AddCommand( genutilcli.InitCmd(basicManager, simapp.DefaultNodeHome), NewTestnetCmd(basicManager, banktypes.GenesisBalancesIterator{}), diff --git a/types/module/module.go b/types/module/module.go index f8e06e9ccd0a..ee4ec9a4cd1d 100644 --- a/types/module/module.go +++ b/types/module/module.go @@ -91,15 +91,17 @@ func NewBasicManager(modules ...AppModuleBasic) BasicManager { } // NewBasicManagerFromManager creates a new BasicManager from a Manager -func NewBasicManagerFromManager(manager *Manager) BasicManager { +func NewBasicManagerFromManager(manager *Manager, customModuleBasics map[string]AppModuleBasic) BasicManager { moduleMap := make(map[string]AppModuleBasic) for name, module := range manager.Modules { - appModuleBasic, ok := module.(AppModuleBasic) - if !ok { + if customBasicMod, ok := customModuleBasics[name]; ok { + moduleMap[name] = customBasicMod continue } - moduleMap[name] = appModuleBasic + if basicMod, ok := module.(AppModuleBasic); ok { + moduleMap[name] = basicMod + } } return moduleMap From 86b0855f83e9cbec3275a010d97b4fa50b52966d Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Sat, 29 Apr 2023 10:37:41 +0200 Subject: [PATCH 04/10] docs --- simapp/app.go | 20 ++++++++++++-------- types/module/module.go | 2 ++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/simapp/app.go b/simapp/app.go index 139bf6bc92da..29e3c73a6d81 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -382,14 +382,18 @@ func NewSimApp( // BasicModuleManager defines the module BasicManager is in charge of setting up basic, // non-dependant module elements, such as codec registration and genesis verification. - app.BasicModuleManager = module.NewBasicManagerFromManager(app.ModuleManager, map[string]module.AppModuleBasic{ - genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), - govtypes.ModuleName: gov.NewAppModuleBasic( - []govclient.ProposalHandler{ - paramsclient.ProposalHandler, - }, - ), - }) + // By default it is composed of all the module from the module manager. + // Additionally, app module basics can be overwritten by passing them as argument. + app.BasicModuleManager = module.NewBasicManagerFromManager( + app.ModuleManager, + map[string]module.AppModuleBasic{ + genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + govtypes.ModuleName: gov.NewAppModuleBasic( + []govclient.ProposalHandler{ + paramsclient.ProposalHandler, + }, + ), + }) app.BasicModuleManager.RegisterLegacyAminoCodec(encodingConfig.Amino) app.BasicModuleManager.RegisterInterfaces(encodingConfig.InterfaceRegistry) diff --git a/types/module/module.go b/types/module/module.go index ee4ec9a4cd1d..4b46cdd85868 100644 --- a/types/module/module.go +++ b/types/module/module.go @@ -91,6 +91,8 @@ func NewBasicManager(modules ...AppModuleBasic) BasicManager { } // NewBasicManagerFromManager creates a new BasicManager from a Manager +// The BasicManager will contain all AppModuleBasic from the AppModule Manager +// Module's AppModuleBasic can be overriden by passing a custom AppModuleBasic map func NewBasicManagerFromManager(manager *Manager, customModuleBasics map[string]AppModuleBasic) BasicManager { moduleMap := make(map[string]AppModuleBasic) for name, module := range manager.Modules { From b045e6df7ccc3db4f595cc7f4aa3f1db58703428 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Sat, 29 Apr 2023 19:44:07 +0200 Subject: [PATCH 05/10] linting --- types/module/module.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/module/module.go b/types/module/module.go index 4b46cdd85868..48fd5c9f5a41 100644 --- a/types/module/module.go +++ b/types/module/module.go @@ -92,7 +92,7 @@ func NewBasicManager(modules ...AppModuleBasic) BasicManager { // NewBasicManagerFromManager creates a new BasicManager from a Manager // The BasicManager will contain all AppModuleBasic from the AppModule Manager -// Module's AppModuleBasic can be overriden by passing a custom AppModuleBasic map +// Module's AppModuleBasic can be overridden by passing a custom AppModuleBasic map func NewBasicManagerFromManager(manager *Manager, customModuleBasics map[string]AppModuleBasic) BasicManager { moduleMap := make(map[string]AppModuleBasic) for name, module := range manager.Modules { From 5b113cbd55366a71a4d39d489eafb6d6aaae352c Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Mon, 1 May 2023 22:24:06 +0200 Subject: [PATCH 06/10] updates --- UPGRADING.md | 1 + runtime/app.go | 32 ++-- runtime/builder.go | 9 +- runtime/module.go | 27 +-- simapp/app_config.go | 33 +++- simapp/app_v2.go | 23 --- simapp/simd/cmd/root.go | 5 +- simapp/simd/cmd/root_v2.go | 341 +++++++++++++++++++++++++++++++++++++ 8 files changed, 402 insertions(+), 69 deletions(-) create mode 100644 simapp/simd/cmd/root_v2.go diff --git a/UPGRADING.md b/UPGRADING.md index ff41503e2e37..920453d92bad 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -1,6 +1,7 @@ # Upgrading Cosmos SDK This guide provides instructions for upgrading to specific versions of Cosmos SDK. +Note, always read the **SimApp** section for more information about updates when wiring your application. ## [Unreleased] diff --git a/runtime/app.go b/runtime/app.go index affbe38dcfce..8bfcc53de471 100644 --- a/runtime/app.go +++ b/runtime/app.go @@ -38,18 +38,18 @@ import ( type App struct { *baseapp.BaseApp - ModuleManager *module.Manager - BasicModuleManager module.BasicManager - configurator module.Configurator - config *runtimev1alpha1.Module - storeKeys []storetypes.StoreKey - interfaceRegistry codectypes.InterfaceRegistry - cdc codec.Codec - amino *codec.LegacyAmino - baseAppOptions []BaseAppOption - msgServiceRouter *baseapp.MsgServiceRouter - appConfig *appv1alpha1.Config - logger log.Logger + ModuleManager *module.Manager + configurator module.Configurator + config *runtimev1alpha1.Module + storeKeys []storetypes.StoreKey + interfaceRegistry codectypes.InterfaceRegistry + cdc codec.Codec + amino *codec.LegacyAmino + basicManager module.BasicManager + baseAppOptions []BaseAppOption + msgServiceRouter *baseapp.MsgServiceRouter + appConfig *appv1alpha1.Config + logger log.Logger // initChainer is the init chainer function defined by the app config. // this is only required if the chain wants to add special InitChainer logic. initChainer sdk.InitChainer @@ -65,12 +65,12 @@ func (a *App) RegisterModules(modules ...module.AppModule) error { return fmt.Errorf("AppModule named %q already exists", name) } - if _, ok := a.BasicModuleManager[name]; ok { + if _, ok := a.basicManager[name]; ok { return fmt.Errorf("AppModuleBasic named %q already exists", name) } a.ModuleManager.Modules[name] = appModule - a.BasicModuleManager[name] = appModule + a.basicManager[name] = appModule appModule.RegisterInterfaces(a.interfaceRegistry) appModule.RegisterLegacyAminoCodec(a.amino) @@ -169,7 +169,7 @@ func (a *App) RegisterAPIRoutes(apiSvr *api.Server, _ config.APIConfig) { nodeservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // Register grpc-gateway routes for all modules. - a.BasicModuleManager.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + a.basicManager.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) } // RegisterTxService implements the Application.RegisterTxService method. @@ -204,7 +204,7 @@ func (a *App) LoadHeight(height int64) error { // DefaultGenesis returns a default genesis from the registered AppModuleBasic's. func (a *App) DefaultGenesis() map[string]json.RawMessage { - return a.BasicModuleManager.DefaultGenesis(a.cdc) + return a.basicManager.DefaultGenesis(a.cdc) } // GetStoreKeys returns all the stored store keys. diff --git a/runtime/builder.go b/runtime/builder.go index 22aaf329ad6c..e340a9db7eb5 100644 --- a/runtime/builder.go +++ b/runtime/builder.go @@ -24,11 +24,7 @@ func (a *AppBuilder) DefaultGenesis() map[string]json.RawMessage { } // Build builds an *App instance. -func (a *AppBuilder) Build( - db dbm.DB, - traceStore io.Writer, - baseAppOptions ...func(*baseapp.BaseApp), -) *App { +func (a *AppBuilder) Build(db dbm.DB, traceStore io.Writer, baseAppOptions ...func(*baseapp.BaseApp)) *App { for _, option := range a.app.baseAppOptions { baseAppOptions = append(baseAppOptions, option) } @@ -42,8 +38,7 @@ func (a *AppBuilder) Build( a.app.BaseApp = bApp a.app.configurator = module.NewConfigurator(a.app.cdc, a.app.MsgServiceRouter(), a.app.GRPCQueryRouter()) - err := a.app.ModuleManager.RegisterServices(a.app.configurator) - if err != nil { + if err := a.app.ModuleManager.RegisterServices(a.app.configurator); err != nil { panic(err) } diff --git a/runtime/module.go b/runtime/module.go index 513215690ac1..704b29f75232 100644 --- a/runtime/module.go +++ b/runtime/module.go @@ -67,6 +67,7 @@ func init() { ProvideMemoryStoreService, ProvideTransientStoreService, ProvideEventService, + ProvideBasicManager, ), appmodule.Invoke(SetupAppBuilder), ) @@ -91,8 +92,7 @@ func ProvideApp() ( protoTypes := protoregistry.GlobalTypes // At startup, check that all proto annotations are correct. - err = msgservice.ValidateProtoAnnotations(protoFiles) - if err != nil { + if err := msgservice.ValidateProtoAnnotations(protoFiles); err != nil { // Once we switch to using protoreflect-based antehandlers, we might // want to panic here instead of logging a warning. _, _ = fmt.Fprintln(os.Stderr, err.Error()) @@ -109,8 +109,7 @@ func ProvideApp() ( // validate the signing context to make sure that messages are properly configured // with cosmos.msg.v1.signer - err = interfaceRegistry.SigningContext().Validate() - if err != nil { + if err := interfaceRegistry.SigningContext().Validate(); err != nil { return nil, nil, nil, nil, nil, nil, nil, nil, nil, err } @@ -122,12 +121,12 @@ func ProvideApp() ( cdc := codec.NewProtoCodec(interfaceRegistry) msgServiceRouter := baseapp.NewMsgServiceRouter() app := &App{ - BasicModuleManager: module.BasicManager{}, - storeKeys: nil, - interfaceRegistry: interfaceRegistry, - cdc: cdc, - amino: amino, - msgServiceRouter: msgServiceRouter, + basicManager: module.BasicManager{}, + storeKeys: nil, + interfaceRegistry: interfaceRegistry, + cdc: cdc, + amino: amino, + msgServiceRouter: msgServiceRouter, } appBuilder := &AppBuilder{app} @@ -158,14 +157,14 @@ func SetupAppBuilder(inputs AppInputs) { for name, mod := range inputs.Modules { if customBasicMod, ok := inputs.CustomModuleBasics[name]; ok { - app.BasicModuleManager[name] = customBasicMod + app.basicManager[name] = customBasicMod customBasicMod.RegisterInterfaces(inputs.InterfaceRegistry) customBasicMod.RegisterLegacyAminoCodec(inputs.LegacyAmino) continue } if basicMod, ok := mod.(module.AppModuleBasic); ok { - app.BasicModuleManager[name] = basicMod + app.basicManager[name] = basicMod basicMod.RegisterInterfaces(inputs.InterfaceRegistry) basicMod.RegisterLegacyAminoCodec(inputs.LegacyAmino) } @@ -237,6 +236,10 @@ func ProvideEventService() event.Service { return EventService{} } +func ProvideBasicManager(app *AppBuilder) module.BasicManager { + return app.app.basicManager +} + // globalAccAddressCodec is a temporary address codec that we will use until we // can populate it with the correct bech32 prefixes without depending on the global. type globalAccAddressCodec struct{} diff --git a/simapp/app_config.go b/simapp/app_config.go index 44553c7b1580..2870334d18df 100644 --- a/simapp/app_config.go +++ b/simapp/app_config.go @@ -26,6 +26,7 @@ import ( txconfigv1 "cosmossdk.io/api/cosmos/tx/config/v1" upgrademodulev1 "cosmossdk.io/api/cosmos/upgrade/module/v1" vestingmodulev1 "cosmossdk.io/api/cosmos/vesting/module/v1" + "cosmossdk.io/depinject" _ "cosmossdk.io/x/evidence" // import for side-effects _ "cosmossdk.io/x/feegrant/module" // import for side-effects @@ -38,13 +39,13 @@ import ( _ "github.com/cosmos/cosmos-sdk/x/consensus" // import for side-effects _ "github.com/cosmos/cosmos-sdk/x/crisis" // import for side-effects _ "github.com/cosmos/cosmos-sdk/x/distribution" // import for side-effects - _ "github.com/cosmos/cosmos-sdk/x/genutil" // import for side-effects - _ "github.com/cosmos/cosmos-sdk/x/gov" // import for side-effects - _ "github.com/cosmos/cosmos-sdk/x/group/module" // import for side-effects - _ "github.com/cosmos/cosmos-sdk/x/mint" // import for side-effects - _ "github.com/cosmos/cosmos-sdk/x/params" // import for side-effects - _ "github.com/cosmos/cosmos-sdk/x/slashing" // import for side-effects - _ "github.com/cosmos/cosmos-sdk/x/staking" // import for side-effects + "github.com/cosmos/cosmos-sdk/x/genutil" + "github.com/cosmos/cosmos-sdk/x/gov" + _ "github.com/cosmos/cosmos-sdk/x/group/module" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/mint" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/params" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/slashing" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/staking" // import for side-effects "cosmossdk.io/core/appconfig" evidencetypes "cosmossdk.io/x/evidence/types" @@ -52,6 +53,7 @@ import ( "cosmossdk.io/x/nft" upgradetypes "cosmossdk.io/x/upgrade/types" "github.com/cosmos/cosmos-sdk/runtime" + "github.com/cosmos/cosmos-sdk/types/module" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" "github.com/cosmos/cosmos-sdk/x/authz" @@ -60,9 +62,11 @@ import ( crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" + govclient "github.com/cosmos/cosmos-sdk/x/gov/client" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/cosmos/cosmos-sdk/x/group" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" + paramsclient "github.com/cosmos/cosmos-sdk/x/params/client" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -93,7 +97,7 @@ var ( } // application configuration (used by depinject) - AppConfig = appconfig.Compose(&appv1alpha1.Config{ + AppConfig = depinject.Configs(appconfig.Compose(&appv1alpha1.Config{ Modules: []*appv1alpha1.ModuleConfig{ { Name: runtime.ModuleName, @@ -245,5 +249,16 @@ var ( Config: appconfig.WrapAny(&consensusmodulev1.Module{}), }, }, - }) + }), + depinject.Supply( + // supply custom module basics + map[string]module.AppModuleBasic{ + genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + govtypes.ModuleName: gov.NewAppModuleBasic( + []govclient.ProposalHandler{ + paramsclient.ProposalHandler, + }, + ), + }, + )) ) diff --git a/simapp/app_v2.go b/simapp/app_v2.go index fad9f62e9545..97859ebbb5cd 100644 --- a/simapp/app_v2.go +++ b/simapp/app_v2.go @@ -10,7 +10,6 @@ import ( "cosmossdk.io/log" dbm "github.com/cosmos/cosmos-db" - "cosmossdk.io/client/v2/autocli" "cosmossdk.io/depinject" storetypes "cosmossdk.io/store/types" evidencekeeper "cosmossdk.io/x/evidence/keeper" @@ -38,15 +37,9 @@ import ( consensuskeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper" distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" - "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" groupkeeper "github.com/cosmos/cosmos-sdk/x/group/keeper" mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" - 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" slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" @@ -70,7 +63,6 @@ type SimApp struct { appCodec codec.Codec txConfig client.TxConfig interfaceRegistry codectypes.InterfaceRegistry - autoCliOpts autocli.AppOptions // keepers AccountKeeper authkeeper.AccountKeeper @@ -124,15 +116,6 @@ func NewSimApp( appOpts, // supply the logger logger, - // supply custom module basics - map[string]module.AppModuleBasic{ - genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), - govtypes.ModuleName: gov.NewAppModuleBasic( - []govclient.ProposalHandler{ - paramsclient.ProposalHandler, - }, - ), - }, // ADVANCED CONFIGURATION @@ -166,7 +149,6 @@ func NewSimApp( &app.legacyAmino, &app.txConfig, &app.interfaceRegistry, - &app.autoCliOpts, &app.AccountKeeper, &app.BankKeeper, &app.StakingKeeper, @@ -288,11 +270,6 @@ func (app *SimApp) TxConfig() client.TxConfig { return app.txConfig } -// AutoCliOpts returns the autocli options for the app. -func (app *SimApp) AutoCliOpts() autocli.AppOptions { - return app.autoCliOpts -} - // GetKey returns the KVStoreKey for the provided store key. // // NOTE: This is solely to be used for testing purposes. diff --git a/simapp/simd/cmd/root.go b/simapp/simd/cmd/root.go index 80012077333e..bf287893e864 100644 --- a/simapp/simd/cmd/root.go +++ b/simapp/simd/cmd/root.go @@ -1,3 +1,5 @@ +//go:build app_v1 + package cmd import ( @@ -42,8 +44,7 @@ import ( // main function. func NewRootCmd() *cobra.Command { // we "pre"-instantiate the application for getting the injected/configured encoding configuration - // note, this is not necessary when using app wiring, as depinject can be directly used. - // for consistency between app-v1 and app-v2, we do it the same way via methods on simapp + // note, this is not necessary when using app wiring, as depinject can be directly used (see root_v2.go) tempApp := simapp.NewSimApp(log.NewNopLogger(), dbm.NewMemDB(), nil, true, simtestutil.NewAppOptionsWithFlagHome(tempDir())) encodingConfig := params.EncodingConfig{ InterfaceRegistry: tempApp.InterfaceRegistry(), diff --git a/simapp/simd/cmd/root_v2.go b/simapp/simd/cmd/root_v2.go new file mode 100644 index 000000000000..105b43ed91b9 --- /dev/null +++ b/simapp/simd/cmd/root_v2.go @@ -0,0 +1,341 @@ +//go:build !app_v1 + +package cmd + +import ( + "errors" + "io" + "os" + + cmtcfg "github.com/cometbft/cometbft/config" + dbm "github.com/cosmos/cosmos-db" + "github.com/spf13/cobra" + "github.com/spf13/viper" + + "cosmossdk.io/client/v2/autocli" + "cosmossdk.io/depinject" + "cosmossdk.io/log" + "cosmossdk.io/simapp" + confixcmd "cosmossdk.io/tools/confix/cmd" + rosettaCmd "cosmossdk.io/tools/rosetta/cmd" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/config" + "github.com/cosmos/cosmos-sdk/client/debug" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/keys" + "github.com/cosmos/cosmos-sdk/client/pruning" + "github.com/cosmos/cosmos-sdk/client/rpc" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/server" + serverconfig "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" + authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" + "github.com/cosmos/cosmos-sdk/x/auth/tx" + txmodule "github.com/cosmos/cosmos-sdk/x/auth/tx/config" + "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/cosmos-sdk/x/crisis" + genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" +) + +// NewRootCmd creates a new root command for simd. It is called once in the main function. +func NewRootCmd() *cobra.Command { + var ( + interfaceRegistry codectypes.InterfaceRegistry + appCodec codec.Codec + txConfig client.TxConfig + legacyAmino *codec.LegacyAmino + autoCliOpts autocli.AppOptions + moduleBasicsManager module.BasicManager + ) + + if err := depinject.Inject(depinject.Configs(simapp.AppConfig, depinject.Supply(log.NewNopLogger())), + &interfaceRegistry, + &appCodec, + &txConfig, + &legacyAmino, + &autoCliOpts, + &moduleBasicsManager, + ); err != nil { + panic(err) + } + + initClientCtx := client.Context{}. + WithCodec(appCodec). + WithInterfaceRegistry(interfaceRegistry). + WithLegacyAmino(legacyAmino). + WithInput(os.Stdin). + WithAccountRetriever(types.AccountRetriever{}). + WithHomeDir(simapp.DefaultNodeHome). + WithViper("") // In simapp, we don't use any prefix for env variables. + + rootCmd := &cobra.Command{ + Use: "simd", + Short: "simulation app", + PersistentPreRunE: func(cmd *cobra.Command, _ []string) error { + // set the default command outputs + cmd.SetOut(cmd.OutOrStdout()) + cmd.SetErr(cmd.ErrOrStderr()) + + initClientCtx = initClientCtx.WithCmdContext(cmd.Context()) + initClientCtx, err := client.ReadPersistentCommandFlags(initClientCtx, cmd.Flags()) + if err != nil { + return err + } + + initClientCtx, err = config.ReadFromClientConfig(initClientCtx) + if err != nil { + return err + } + + // This needs to go after ReadFromClientConfig, as that function + // sets the RPC client needed for SIGN_MODE_TEXTUAL. + txConfigOpts := tx.ConfigOptions{ + TextualCoinMetadataQueryFn: txmodule.NewGRPCCoinMetadataQueryFn(initClientCtx), + } + txConfigWithTextual := tx.NewTxConfigWithOptions( + codec.NewProtoCodec(interfaceRegistry), + txConfigOpts, + ) + + initClientCtx = initClientCtx.WithTxConfig(txConfigWithTextual) + if err := client.SetCmdClientContextHandler(initClientCtx, cmd); err != nil { + return err + } + + customAppTemplate, customAppConfig := initAppConfig() + customCMTConfig := initCometBFTConfig() + + return server.InterceptConfigsPreRunHandler(cmd, customAppTemplate, customAppConfig, customCMTConfig) + }, + } + + initRootCmd(rootCmd, txConfig, interfaceRegistry, appCodec, moduleBasicsManager) + + if err := autoCliOpts.EnhanceRootCommand(rootCmd); err != nil { + panic(err) + } + + return rootCmd +} + +// initCometBFTConfig helps to override default CometBFT Config values. +// return cmtcfg.DefaultConfig if no custom configuration is required for the application. +func initCometBFTConfig() *cmtcfg.Config { + cfg := cmtcfg.DefaultConfig() + + // these values put a higher strain on node memory + // cfg.P2P.MaxNumInboundPeers = 100 + // cfg.P2P.MaxNumOutboundPeers = 40 + + return cfg +} + +// initAppConfig helps to override default appConfig template and configs. +// return "", nil if no custom configuration is required for the application. +func initAppConfig() (string, interface{}) { + // The following code snippet is just for reference. + + // WASMConfig defines configuration for the wasm module. + type WASMConfig struct { + // This is the maximum sdk gas (wasm and storage) that we allow for any x/wasm "smart" queries + QueryGasLimit uint64 `mapstructure:"query_gas_limit"` + + // Address defines the gRPC-web server to listen on + LruSize uint64 `mapstructure:"lru_size"` + } + + type CustomAppConfig struct { + serverconfig.Config + + WASM WASMConfig `mapstructure:"wasm"` + } + + // Optionally allow the chain developer to overwrite the SDK's default + // server config. + srvCfg := serverconfig.DefaultConfig() + // The SDK's default minimum gas price is set to "" (empty value) inside + // app.toml. If left empty by validators, the node will halt on startup. + // However, the chain developer can set a default app.toml value for their + // validators here. + // + // In summary: + // - if you leave srvCfg.MinGasPrices = "", all validators MUST tweak their + // own app.toml config, + // - if you set srvCfg.MinGasPrices non-empty, validators CAN tweak their + // own app.toml to override, or use this default value. + // + // In simapp, we set the min gas prices to 0. + srvCfg.MinGasPrices = "0stake" + // srvCfg.BaseConfig.IAVLDisableFastNode = true // disable fastnode by default + + customAppConfig := CustomAppConfig{ + Config: *srvCfg, + WASM: WASMConfig{ + LruSize: 1, + QueryGasLimit: 300000, + }, + } + + customAppTemplate := serverconfig.DefaultConfigTemplate + ` +[wasm] +# This is the maximum sdk gas (wasm and storage) that we allow for any x/wasm "smart" queries +query_gas_limit = 300000 +# This is the number of wasm vm instances we keep cached in memory for speed-up +# Warning: this is currently unstable and may lead to crashes, best to keep for 0 unless testing locally +lru_size = 0` + + return customAppTemplate, customAppConfig +} + +func initRootCmd( + rootCmd *cobra.Command, + txConfig client.TxConfig, + interfaceRegistry codectypes.InterfaceRegistry, + appCodec codec.Codec, + basicManager module.BasicManager, +) { + cfg := sdk.GetConfig() + cfg.Seal() + + rootCmd.AddCommand( + genutilcli.InitCmd(basicManager, simapp.DefaultNodeHome), + NewTestnetCmd(basicManager, banktypes.GenesisBalancesIterator{}), + debug.Cmd(), + confixcmd.ConfigCommand(), + pruning.Cmd(newApp), + ) + + server.AddCommands(rootCmd, simapp.DefaultNodeHome, newApp, appExport, addModuleInitFlags) + + // add keybase, auxiliary RPC, query, genesis, and tx child commands + rootCmd.AddCommand( + rpc.StatusCommand(), + genesisCommand(txConfig, basicManager), + queryCommand(), + txCommand(), + keys.Commands(simapp.DefaultNodeHome), + ) + + // add rosetta + rootCmd.AddCommand(rosettaCmd.RosettaCommand(interfaceRegistry, appCodec)) +} + +func addModuleInitFlags(startCmd *cobra.Command) { + crisis.AddModuleInitFlags(startCmd) +} + +// genesisCommand builds genesis-related `simd genesis` command. Users may provide application specific commands as a parameter +func genesisCommand(txConfig client.TxConfig, basicManager module.BasicManager, cmds ...*cobra.Command) *cobra.Command { + cmd := genutilcli.Commands(txConfig, basicManager, simapp.DefaultNodeHome) + + for _, subCmd := range cmds { + cmd.AddCommand(subCmd) + } + return cmd +} + +func queryCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "query", + Aliases: []string{"q"}, + Short: "Querying subcommands", + DisableFlagParsing: false, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + rpc.ValidatorCommand(), + server.QueryBlockCmd(), + authcmd.QueryTxsByEventsCmd(), + server.QueryBlocksCmd(), + authcmd.QueryTxCmd(), + ) + + return cmd +} + +func txCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "tx", + Short: "Transactions subcommands", + DisableFlagParsing: false, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + authcmd.GetSignCommand(), + authcmd.GetSignBatchCommand(), + authcmd.GetMultiSignCommand(), + authcmd.GetMultiSignBatchCmd(), + authcmd.GetValidateSignaturesCommand(), + authcmd.GetBroadcastCommand(), + authcmd.GetEncodeCommand(), + authcmd.GetDecodeCommand(), + authcmd.GetAuxToFeeCommand(), + ) + + return cmd +} + +// newApp creates the application +func newApp( + logger log.Logger, + db dbm.DB, + traceStore io.Writer, + appOpts servertypes.AppOptions, +) servertypes.Application { + baseappOptions := server.DefaultBaseappOptions(appOpts) + + return simapp.NewSimApp( + logger, db, traceStore, true, + appOpts, + baseappOptions..., + ) +} + +// appExport creates a new simapp (optionally at a given height) and exports state. +func appExport( + logger log.Logger, + db dbm.DB, + traceStore io.Writer, + height int64, + forZeroHeight bool, + jailAllowedAddrs []string, + appOpts servertypes.AppOptions, + modulesToExport []string, +) (servertypes.ExportedApp, error) { + // this check is necessary as we use the flag in x/upgrade. + // we can exit more gracefully by checking the flag here. + homePath, ok := appOpts.Get(flags.FlagHome).(string) + if !ok || homePath == "" { + return servertypes.ExportedApp{}, errors.New("application home not set") + } + + viperAppOpts, ok := appOpts.(*viper.Viper) + if !ok { + return servertypes.ExportedApp{}, errors.New("appOpts is not viper.Viper") + } + + // overwrite the FlagInvCheckPeriod + viperAppOpts.Set(server.FlagInvCheckPeriod, 1) + appOpts = viperAppOpts + + var simApp *simapp.SimApp + if height != -1 { + simApp = simapp.NewSimApp(logger, db, traceStore, false, appOpts) + + if err := simApp.LoadHeight(height); err != nil { + return servertypes.ExportedApp{}, err + } + } else { + simApp = simapp.NewSimApp(logger, db, traceStore, true, appOpts) + } + + return simApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs, modulesToExport) +} From d8f465d6cab4cfcbf9599513a3dc95f3488602d1 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Tue, 2 May 2023 10:02:32 +0200 Subject: [PATCH 07/10] add upgrading.md --- UPGRADING.md | 47 ++++++++++++++++++++++++++++++++++++++--------- runtime/module.go | 2 +- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/UPGRADING.md b/UPGRADING.md index 920453d92bad..e253815bfeb0 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -1,7 +1,7 @@ # Upgrading Cosmos SDK This guide provides instructions for upgrading to specific versions of Cosmos SDK. -Note, always read the **SimApp** section for more information about updates when wiring your application. +Note, always read the **SimApp** section for more information on application wiring updates. ## [Unreleased] @@ -62,12 +62,14 @@ The `gogoproto.goproto_stringer = false` annotation has been removed from most p ### SimApp + + #### Module Assertions Previously, all modules were required to be set in `OrderBeginBlockers`, `OrderEndBlockers` and `OrderInitGenesis / OrderExportGenesis` in `app.go` / `app_config.go`. This is no longer the case, the assertion has been loosened to only require modules implementing, respectively, the `module.BeginBlockAppModule`, `module.EndBlockAppModule` and `module.HasGenesis` interfaces. -### Modules Keepers +#### Modules Keepers The following modules `NewKeeper` function now take a `KVStoreService` instead of a `StoreKey`: @@ -79,7 +81,7 @@ The following modules `NewKeeper` function now take a `KVStoreService` instead o * `x/feegrant` * `x/nft` -When not using depinject, the `runtime.NewKVStoreService` method can be used to create a `KVStoreService` from a `StoreKey`: +User manually wiring their chain need to use the `runtime.NewKVStoreService` method to create a `KVStoreService` from a `StoreKey`: ```diff app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper( @@ -90,19 +92,21 @@ app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper( ) ``` -The following modules `NewKeeper` function now also take a `log.Logger`: - -* `x/bank` - The following modules' `Keeper` methods now take in a `context.Context` instead of `sdk.Context`. Any module that has an interfaces for them (like "expected keepers") will need to update and re-generate mocks if needed: * `x/authz` * `x/bank` * `x/distribution` -### depinject +**Users using depinject do not need any changes, this is automatically done for them.** + +#### Logger + +The following modules `NewKeeper` function now take a `log.Logger`: + +* `x/bank` -For `depinject` users, now the logger must be supplied through the main `depinject.Inject` function instead of passing it to `appBuilder.Build`. +`depinject` users must now supply the logger through the main `depinject.Supply` function instead of passing it to `appBuilder.Build`. ```diff appConfig = depinject.Configs( @@ -119,6 +123,31 @@ appConfig = depinject.Configs( + app.App = appBuilder.Build(db, traceStore, baseAppOptions...) ``` +User manually wiring their chain need to add the logger argument when creating the keeper. + +#### Module Basics + +Previously, the `ModuleBasics` was a global variable that was used to register all modules's `AppModuleBasic` implementation. +The global variable has been removed and the `ModuleBasics` can be now created from the `ModuleManager`. + +For supplying different app module implementation simply pass them via `depinject.Supply` in the main `AppConfig`: + +```go +depinject.Supply( + // supply custom module basics + map[string]module.AppModuleBasic{ + genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + govtypes.ModuleName: gov.NewAppModuleBasic( + []govclient.ProposalHandler{ + paramsclient.ProposalHandler, + }, + ), + }, + ) +``` + +Users manually wiring their chain need to use the new `module.NewBasicManagerFromManager` function and pass a `map[string]module.AppModuleBasic` as argument for overridden some module's `AppModuleBasic`. + ### Packages #### Store diff --git a/runtime/module.go b/runtime/module.go index 704b29f75232..09a0f0b8b708 100644 --- a/runtime/module.go +++ b/runtime/module.go @@ -121,11 +121,11 @@ func ProvideApp() ( cdc := codec.NewProtoCodec(interfaceRegistry) msgServiceRouter := baseapp.NewMsgServiceRouter() app := &App{ - basicManager: module.BasicManager{}, storeKeys: nil, interfaceRegistry: interfaceRegistry, cdc: cdc, amino: amino, + basicManager: module.BasicManager{}, msgServiceRouter: msgServiceRouter, } appBuilder := &AppBuilder{app} From dad695d8f80ec4841840dc8b3c9b0a378407b541 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Tue, 2 May 2023 10:02:56 +0200 Subject: [PATCH 08/10] typo --- core/appmodule/module.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/appmodule/module.go b/core/appmodule/module.go index ec7eb6142ffa..a701a307c974 100644 --- a/core/appmodule/module.go +++ b/core/appmodule/module.go @@ -45,7 +45,7 @@ type HasPrepareCheckState interface { PrepareCheckState(context.Context) error } -// HasPreommit is an extension interface that contains information about the AppModule and Precommit. +// HasPrecommit is an extension interface that contains information about the AppModule and Precommit. type HasPrecommit interface { AppModule Precommit(context.Context) error From 3432b327fa20dc6acbbd95cf65512a65db56dc4c Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Tue, 2 May 2023 10:07:09 +0200 Subject: [PATCH 09/10] word --- UPGRADING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/UPGRADING.md b/UPGRADING.md index e253815bfeb0..fa3eefa28591 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -128,9 +128,9 @@ User manually wiring their chain need to add the logger argument when creating t #### Module Basics Previously, the `ModuleBasics` was a global variable that was used to register all modules's `AppModuleBasic` implementation. -The global variable has been removed and the `ModuleBasics` can be now created from the `ModuleManager`. +The global variable has been removed and the basic module manager can be now created from the module manager. -For supplying different app module implementation simply pass them via `depinject.Supply` in the main `AppConfig`: +This is automatically done for depinject users, however for supplying different app module implementation, pass them via `depinject.Supply` in the main `AppConfig` (`app_config.go`): ```go depinject.Supply( @@ -146,7 +146,7 @@ depinject.Supply( ) ``` -Users manually wiring their chain need to use the new `module.NewBasicManagerFromManager` function and pass a `map[string]module.AppModuleBasic` as argument for overridden some module's `AppModuleBasic`. +Users manually wiring their chain need to use the new `module.NewBasicManagerFromManager` function, after the module manager creation, and pass a `map[string]module.AppModuleBasic` as argument for optionally overridding some module's `AppModuleBasic`. ### Packages From a18b2265a996a230f5a8a5c9e4c17100b319a43b Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Tue, 2 May 2023 10:21:01 +0200 Subject: [PATCH 10/10] rename --- simapp/simd/cmd/root_v2.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/simapp/simd/cmd/root_v2.go b/simapp/simd/cmd/root_v2.go index 105b43ed91b9..db8c0298afce 100644 --- a/simapp/simd/cmd/root_v2.go +++ b/simapp/simd/cmd/root_v2.go @@ -44,12 +44,12 @@ import ( // NewRootCmd creates a new root command for simd. It is called once in the main function. func NewRootCmd() *cobra.Command { var ( - interfaceRegistry codectypes.InterfaceRegistry - appCodec codec.Codec - txConfig client.TxConfig - legacyAmino *codec.LegacyAmino - autoCliOpts autocli.AppOptions - moduleBasicsManager module.BasicManager + interfaceRegistry codectypes.InterfaceRegistry + appCodec codec.Codec + txConfig client.TxConfig + legacyAmino *codec.LegacyAmino + autoCliOpts autocli.AppOptions + moduleBasicManager module.BasicManager ) if err := depinject.Inject(depinject.Configs(simapp.AppConfig, depinject.Supply(log.NewNopLogger())), @@ -58,7 +58,7 @@ func NewRootCmd() *cobra.Command { &txConfig, &legacyAmino, &autoCliOpts, - &moduleBasicsManager, + &moduleBasicManager, ); err != nil { panic(err) } @@ -113,7 +113,7 @@ func NewRootCmd() *cobra.Command { }, } - initRootCmd(rootCmd, txConfig, interfaceRegistry, appCodec, moduleBasicsManager) + initRootCmd(rootCmd, txConfig, interfaceRegistry, appCodec, moduleBasicManager) if err := autoCliOpts.EnhanceRootCommand(rootCmd); err != nil { panic(err)