114 lines
3.5 KiB
Go
114 lines
3.5 KiB
Go
//go:build app_v1
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"os"
|
|
|
|
dbm "github.com/cosmos/cosmos-db"
|
|
"github.com/spf13/cobra"
|
|
|
|
"cosmossdk.io/log"
|
|
"cosmossdk.io/simapp"
|
|
"cosmossdk.io/simapp/params"
|
|
|
|
"github.com/cosmos/cosmos-sdk/client"
|
|
"github.com/cosmos/cosmos-sdk/client/config"
|
|
nodeservice "github.com/cosmos/cosmos-sdk/client/grpc/node"
|
|
"github.com/cosmos/cosmos-sdk/server"
|
|
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
|
|
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
|
"github.com/cosmos/cosmos-sdk/x/auth/tx"
|
|
authtxconfig "github.com/cosmos/cosmos-sdk/x/auth/tx/config"
|
|
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
)
|
|
|
|
// NewRootCmd creates a new root command for simd. It is called once in the
|
|
// main function.
|
|
func NewRootCmd() *cobra.Command {
|
|
// we "pre"-instantiate the application for getting the injected/configured encoding configuration
|
|
tempApp := simapp.NewSimApp(log.NewNopLogger(), dbm.NewMemDB(), nil, true, simtestutil.NewAppOptionsWithFlagHome(simapp.DefaultNodeHome))
|
|
encodingConfig := params.EncodingConfig{
|
|
InterfaceRegistry: tempApp.InterfaceRegistry(),
|
|
Codec: tempApp.AppCodec(),
|
|
TxConfig: tempApp.TxConfig(),
|
|
Amino: tempApp.LegacyAmino(),
|
|
}
|
|
|
|
initClientCtx := client.Context{}.
|
|
WithCodec(encodingConfig.Codec).
|
|
WithInterfaceRegistry(encodingConfig.InterfaceRegistry).
|
|
WithTxConfig(encodingConfig.TxConfig).
|
|
WithLegacyAmino(encodingConfig.Amino).
|
|
WithInput(os.Stdin).
|
|
WithAccountRetriever(types.AccountRetriever{}).
|
|
WithHomeDir(simapp.DefaultNodeHome).
|
|
WithViper("") // uses by default the binary name as prefix
|
|
|
|
rootCmd := &cobra.Command{
|
|
Use: "simd",
|
|
Short: "simulation app",
|
|
SilenceErrors: true,
|
|
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. This sign mode
|
|
// is only available if the client is online.
|
|
if !initClientCtx.Offline {
|
|
enabledSignModes := append(tx.DefaultSignModes, signing.SignMode_SIGN_MODE_TEXTUAL)
|
|
txConfigOpts := tx.ConfigOptions{
|
|
EnabledSignModes: enabledSignModes,
|
|
TextualCoinMetadataQueryFn: authtxconfig.NewGRPCCoinMetadataQueryFn(initClientCtx),
|
|
}
|
|
txConfig, err := tx.NewTxConfigWithOptions(
|
|
initClientCtx.Codec,
|
|
txConfigOpts,
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
initClientCtx = initClientCtx.WithTxConfig(txConfig)
|
|
}
|
|
|
|
if err := client.SetCmdClientContextHandler(initClientCtx, cmd); err != nil {
|
|
return err
|
|
}
|
|
|
|
customAppTemplate, customAppConfig := initAppConfig()
|
|
customCMTConfig := initCometBFTConfig()
|
|
|
|
return server.InterceptConfigsPreRunHandler(cmd, customAppTemplate, customAppConfig, customCMTConfig)
|
|
},
|
|
}
|
|
|
|
initRootCmd(rootCmd, encodingConfig.TxConfig, tempApp.BasicModuleManager)
|
|
|
|
// add keyring to autocli opts
|
|
autoCliOpts := tempApp.AutoCliOpts()
|
|
autoCliOpts.ClientCtx = initClientCtx
|
|
|
|
nodeCmds := nodeservice.NewNodeCommands()
|
|
autoCliOpts.ModuleOptions[nodeCmds.Name()] = nodeCmds.AutoCLIOptions()
|
|
|
|
if err := autoCliOpts.EnhanceRootCommand(rootCmd); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return rootCmd
|
|
}
|