Files
sonr/cmd/snrd/commands.go
T
Prad NukalaandGitHub 13e6c3e84d Master (#1262)
* clear

* feat: Add everything

* fix: Commenht
2025-10-03 14:45:52 -04:00

306 lines
8.1 KiB
Go
Executable File

package main
import (
"errors"
"io"
"os"
cmtcfg "github.com/cometbft/cometbft/config"
dbm "github.com/cosmos/cosmos-db"
"github.com/spf13/cast"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/sonr-io/sonr/app"
util "github.com/sonr-io/sonr/app/commands"
didcli "github.com/sonr-io/sonr/x/did/client/cli"
dwncli "github.com/sonr-io/sonr/x/dwn/client/cli"
"cosmossdk.io/log"
confixcmd "cosmossdk.io/tools/confix/cmd"
cmtcli "github.com/cometbft/cometbft/libs/cli"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/debug"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/client/pruning"
"github.com/cosmos/cosmos-sdk/client/rpc"
"github.com/cosmos/cosmos-sdk/client/snapshot"
"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"
authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
"github.com/cosmos/cosmos-sdk/x/crisis"
genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
evmosserverconfig "github.com/cosmos/evm/server/config"
evmoscmd "github.com/cosmos/evm/client"
evmosserver "github.com/cosmos/evm/server"
srvflags "github.com/cosmos/evm/server/flags"
)
// AddCustomCommands adds custom commands to the root command
func AddCustomCommands(rootCmd *cobra.Command) {
didcli.AddAuthCmds(rootCmd)
dwncli.AddWalletCmds(rootCmd)
rootCmd.AddCommand(util.GovCmd())
// Add VRF keys management to keys command
keysCmd := findKeysCommand(rootCmd)
if keysCmd != nil {
keysCmd.AddCommand(util.VRFKeysCmd())
}
}
// findKeysCommand finds the keys command in the root command
func findKeysCommand(rootCmd *cobra.Command) *cobra.Command {
for _, cmd := range rootCmd.Commands() {
if cmd.Name() == "keys" {
return cmd
}
}
return nil
}
// 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
}
type CustomAppConfig struct {
serverconfig.Config
EVM evmosserverconfig.EVMConfig
JSONRPC evmosserverconfig.JSONRPCConfig
TLS evmosserverconfig.TLSConfig
}
// initAppConfig helps to override default appConfig template and configs.
// return "", nil if no custom configuration is required for the application.
func initAppConfig() (string, any) {
// The following code snippet is just for reference.
// 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,
EVM: *evmosserverconfig.DefaultEVMConfig(),
JSONRPC: *evmosserverconfig.DefaultJSONRPCConfig(),
TLS: *evmosserverconfig.DefaultTLSConfig(),
}
customAppTemplate := serverconfig.DefaultConfigTemplate
customAppTemplate += evmosserverconfig.DefaultEVMConfigTemplate
return customAppTemplate, customAppConfig
}
func initRootCmd(
rootCmd *cobra.Command,
chainApp *app.ChainApp,
) {
cfg := sdk.GetConfig()
cfg.Seal()
rootCmd.AddCommand(
util.EnhancedInit(chainApp),
genutilcli.Commands(chainApp.TxConfig(), chainApp.BasicModuleManager, app.DefaultNodeHome),
cmtcli.NewCompletionCmd(rootCmd, true),
debug.Cmd(),
confixcmd.ConfigCommand(),
pruning.Cmd(newApp, app.DefaultNodeHome),
snapshot.Cmd(newApp),
)
// add EVM' flavored TM commands to start server, etc.
evmosserver.AddCommands(
rootCmd,
evmosserver.NewDefaultStartOptions(newApp, app.DefaultNodeHome),
appExport,
addModuleInitFlags,
)
// add EVM key commands
rootCmd.AddCommand(
evmoscmd.KeyCommands(app.DefaultNodeHome, true),
)
// add keybase, auxiliary RPC, query, genesis, and tx child commands
rootCmd.AddCommand(
server.StatusCommand(),
queryCommand(),
txCommand(),
)
// add general tx flags to the root command
_, err := srvflags.AddTxFlags(rootCmd)
if err != nil {
panic(err)
}
// Add custom commands
AddCustomCommands(rootCmd)
}
func addModuleInitFlags(startCmd *cobra.Command) {
crisis.AddModuleInitFlags(startCmd)
}
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.QueryEventForTxCmd(),
rpc.ValidatorCommand(),
authcmd.QueryTxsByEventsCmd(),
authcmd.QueryTxCmd(),
server.QueryBlocksCmd(),
server.QueryBlockResultsCmd(),
)
cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID")
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.GetSimulateCmd(),
)
cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID")
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)
if cast.ToBool(appOpts.Get("telemetry.enabled")) {
// TODO: Implement telemetry configuration
// This should set up telemetry options such as:
// - Metrics collection endpoints
// - Sampling rates
// - Export intervals
// - Custom labels and tags
// Consider using baseappOptions.SetTelemetry() or similar
}
return app.NewChainApp(
logger, db, traceStore, true,
appOpts,
app.EVMAppOptions,
baseappOptions...,
)
}
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) {
var chainApp *app.ChainApp
// 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 is 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
chainApp = app.NewChainApp(
logger,
db,
traceStore,
height == -1,
appOpts,
app.EVMAppOptions,
)
if height != -1 {
if err := chainApp.LoadHeight(height); err != nil {
return servertypes.ExportedApp{}, err
}
}
return chainApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs, modulesToExport)
}
var tempDir = func() string {
dir, err := os.MkdirTemp("", "simd")
if err != nil {
panic("failed to create temp dir: " + err.Error())
}
defer os.RemoveAll(dir)
return dir
}