Prathamesh Musale
fa5885b349
All checks were successful
Integration Tests / test-integration (push) Successful in 1m17s
Reviewed-on: deep-stack/laconic2d#12 Co-authored-by: Prathamesh Musale <prathamesh.musale0@gmail.com> Co-committed-by: Prathamesh Musale <prathamesh.musale0@gmail.com>
178 lines
4.8 KiB
Go
178 lines
4.8 KiB
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"io"
|
|
|
|
dbm "github.com/cosmos/cosmos-db"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
"golang.org/x/sync/errgroup"
|
|
|
|
"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"
|
|
"github.com/cosmos/cosmos-sdk/server"
|
|
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"
|
|
genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
|
|
|
|
"git.vdb.to/cerc-io/laconic2d/app"
|
|
"git.vdb.to/cerc-io/laconic2d/gql"
|
|
)
|
|
|
|
func initRootCmd(rootCmd *cobra.Command, txConfig client.TxConfig, basicManager module.BasicManager) {
|
|
cfg := sdk.GetConfig()
|
|
cfg.Seal()
|
|
|
|
rootCmd.AddCommand(
|
|
genutilcli.InitCmd(basicManager, app.DefaultNodeHome),
|
|
debug.Cmd(),
|
|
confixcmd.ConfigCommand(),
|
|
pruning.Cmd(newApp, app.DefaultNodeHome),
|
|
snapshot.Cmd(newApp),
|
|
)
|
|
|
|
server.AddCommands(rootCmd, app.DefaultNodeHome, newApp, appExport, func(startCmd *cobra.Command) {
|
|
// Override start command to run the GQL server
|
|
newStartCmd := server.StartCmdWithOptions(newApp, app.DefaultNodeHome, server.StartCmdOptions{
|
|
PostSetup: func(svrCtx *server.Context, clientCtx client.Context, ctx context.Context, g *errgroup.Group) error {
|
|
g.Go(func() error {
|
|
return gql.Server(ctx, clientCtx, svrCtx.Logger.With("module", "gql-server"))
|
|
})
|
|
|
|
return nil
|
|
},
|
|
})
|
|
|
|
startCmd.RunE = newStartCmd.RunE
|
|
})
|
|
|
|
// add keybase, auxiliary RPC, query, genesis, and tx child commands
|
|
rootCmd.AddCommand(
|
|
server.StatusCommand(),
|
|
genutilcli.Commands(txConfig, basicManager, app.DefaultNodeHome),
|
|
queryCommand(),
|
|
txCommand(),
|
|
keys.Commands(),
|
|
)
|
|
}
|
|
|
|
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(),
|
|
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 is an appCreator
|
|
func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts servertypes.AppOptions) servertypes.Application {
|
|
baseappOptions := server.DefaultBaseappOptions(appOpts)
|
|
app, err := app.NewLaconicApp(logger, db, traceStore, true, appOpts, baseappOptions...)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return app
|
|
}
|
|
|
|
// appExport creates a new app (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) {
|
|
var (
|
|
laconicApp *app.LaconicApp
|
|
err 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
|
|
|
|
if height != -1 {
|
|
laconicApp, err = app.NewLaconicApp(logger, db, traceStore, false, appOpts)
|
|
if err != nil {
|
|
return servertypes.ExportedApp{}, err
|
|
}
|
|
|
|
if err := laconicApp.LoadHeight(height); err != nil {
|
|
return servertypes.ExportedApp{}, err
|
|
}
|
|
} else {
|
|
laconicApp, err = app.NewLaconicApp(logger, db, traceStore, true, appOpts)
|
|
if err != nil {
|
|
return servertypes.ExportedApp{}, err
|
|
}
|
|
}
|
|
|
|
return laconicApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs, modulesToExport)
|
|
}
|