mirror of
https://github.com/onsonr/sonr.git
synced 2025-03-10 21:09:11 +00:00
249 lines
6.6 KiB
Go
249 lines
6.6 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"io"
|
||
|
"os"
|
||
|
|
||
|
cmtcfg "github.com/cometbft/cometbft/config"
|
||
|
dbm "github.com/cosmos/cosmos-db"
|
||
|
"github.com/onsonr/hway/app"
|
||
|
"github.com/spf13/cast"
|
||
|
"github.com/spf13/cobra"
|
||
|
"github.com/spf13/viper"
|
||
|
|
||
|
"cosmossdk.io/log"
|
||
|
confixcmd "cosmossdk.io/tools/confix/cmd"
|
||
|
|
||
|
"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/keys"
|
||
|
"github.com/cosmos/cosmos-sdk/client/pruning"
|
||
|
"github.com/cosmos/cosmos-sdk/client/rpc"
|
||
|
"github.com/cosmos/cosmos-sdk/client/snapshot"
|
||
|
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"
|
||
|
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"
|
||
|
)
|
||
|
|
||
|
// 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.
|
||
|
|
||
|
type CustomAppConfig struct {
|
||
|
serverconfig.Config
|
||
|
}
|
||
|
|
||
|
// 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,
|
||
|
}
|
||
|
|
||
|
customAppTemplate := serverconfig.DefaultConfigTemplate
|
||
|
|
||
|
return customAppTemplate, customAppConfig
|
||
|
}
|
||
|
|
||
|
func initRootCmd(
|
||
|
rootCmd *cobra.Command,
|
||
|
txConfig client.TxConfig,
|
||
|
_ codectypes.InterfaceRegistry,
|
||
|
|
||
|
basicManager module.BasicManager,
|
||
|
) {
|
||
|
cfg := sdk.GetConfig()
|
||
|
cfg.Seal()
|
||
|
|
||
|
rootCmd.AddCommand(
|
||
|
genutilcli.InitCmd(basicManager, app.DefaultNodeHome),
|
||
|
NewTestnetCmd(basicManager, banktypes.GenesisBalancesIterator{}),
|
||
|
debug.Cmd(),
|
||
|
confixcmd.ConfigCommand(),
|
||
|
pruning.Cmd(newApp, app.DefaultNodeHome),
|
||
|
snapshot.Cmd(newApp),
|
||
|
)
|
||
|
|
||
|
server.AddCommands(rootCmd, app.DefaultNodeHome, newApp, appExport, addModuleInitFlags)
|
||
|
|
||
|
// add keybase, auxiliary RPC, query, genesis, and tx child commands
|
||
|
rootCmd.AddCommand(
|
||
|
server.StatusCommand(),
|
||
|
genesisCommand(txConfig, basicManager),
|
||
|
queryCommand(),
|
||
|
txCommand(),
|
||
|
keys.Commands(),
|
||
|
)
|
||
|
}
|
||
|
|
||
|
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, app.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.QueryEventForTxCmd(),
|
||
|
server.QueryBlockCmd(),
|
||
|
authcmd.QueryTxsByEventsCmd(),
|
||
|
server.QueryBlocksCmd(),
|
||
|
authcmd.QueryTxCmd(),
|
||
|
server.QueryBlockResultsCmd(),
|
||
|
)
|
||
|
|
||
|
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(),
|
||
|
)
|
||
|
|
||
|
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")) {
|
||
|
}
|
||
|
|
||
|
return app.NewChainApp(
|
||
|
logger, db, traceStore, true,
|
||
|
appOpts,
|
||
|
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.SonrApp
|
||
|
// 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,
|
||
|
nil,
|
||
|
)
|
||
|
|
||
|
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("", "sonr")
|
||
|
if err != nil {
|
||
|
panic("failed to create temp dir: " + err.Error())
|
||
|
}
|
||
|
defer os.RemoveAll(dir)
|
||
|
|
||
|
return dir
|
||
|
}
|