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>
158 lines
4.5 KiB
Go
158 lines
4.5 KiB
Go
package cmd
|
|
|
|
import (
|
|
"os"
|
|
"time"
|
|
|
|
cmtcfg "github.com/cometbft/cometbft/config"
|
|
"github.com/spf13/cobra"
|
|
|
|
"cosmossdk.io/client/v2/autocli"
|
|
clientv2keyring "cosmossdk.io/client/v2/autocli/keyring"
|
|
"cosmossdk.io/core/address"
|
|
"cosmossdk.io/depinject"
|
|
"cosmossdk.io/log"
|
|
|
|
"github.com/cosmos/cosmos-sdk/client"
|
|
"github.com/cosmos/cosmos-sdk/client/config"
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
|
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
|
"github.com/cosmos/cosmos-sdk/server"
|
|
serverconfig "github.com/cosmos/cosmos-sdk/server/config"
|
|
"github.com/cosmos/cosmos-sdk/types/module"
|
|
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
|
"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"
|
|
|
|
"git.vdb.to/cerc-io/laconic2d/app"
|
|
"git.vdb.to/cerc-io/laconic2d/gql"
|
|
)
|
|
|
|
const EnvPrefix = "LACONIC"
|
|
|
|
// NewRootCmd creates a new root command for laconic2d. It is called once in the
|
|
// main function.
|
|
func NewRootCmd() *cobra.Command {
|
|
var (
|
|
txConfigOpts tx.ConfigOptions
|
|
autoCliOpts autocli.AppOptions
|
|
moduleBasicManager module.BasicManager
|
|
clientCtx client.Context
|
|
)
|
|
|
|
if err := depinject.Inject(
|
|
depinject.Configs(app.AppConfig(),
|
|
depinject.Supply(
|
|
log.NewNopLogger(),
|
|
),
|
|
depinject.Provide(
|
|
ProvideClientContext,
|
|
ProvideKeyring,
|
|
),
|
|
),
|
|
&txConfigOpts,
|
|
&autoCliOpts,
|
|
&moduleBasicManager,
|
|
&clientCtx,
|
|
); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
rootCmd := &cobra.Command{
|
|
Use: "laconic2d",
|
|
Short: "Laconic Daemon",
|
|
PersistentPreRunE: func(cmd *cobra.Command, _ []string) error {
|
|
// set the default command outputs
|
|
cmd.SetOut(cmd.OutOrStdout())
|
|
cmd.SetErr(cmd.ErrOrStderr())
|
|
|
|
clientCtx = clientCtx.WithCmdContext(cmd.Context())
|
|
clientCtx, err := client.ReadPersistentCommandFlags(clientCtx, cmd.Flags())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
clientCtx, err = config.ReadFromClientConfig(clientCtx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// sign mode textual is only available in online mode
|
|
if !clientCtx.Offline {
|
|
// This needs to go after ReadFromClientConfig, as that function ets the RPC client needed for SIGN_MODE_TEXTUAL.
|
|
txConfigOpts.EnabledSignModes = append(txConfigOpts.EnabledSignModes, signing.SignMode_SIGN_MODE_TEXTUAL)
|
|
txConfigOpts.TextualCoinMetadataQueryFn = txmodule.NewGRPCCoinMetadataQueryFn(clientCtx)
|
|
txConfigWithTextual, err := tx.NewTxConfigWithOptions(codec.NewProtoCodec(clientCtx.InterfaceRegistry), txConfigOpts)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
clientCtx = clientCtx.WithTxConfig(txConfigWithTextual)
|
|
}
|
|
|
|
if err := client.SetCmdClientContextHandler(clientCtx, cmd); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := client.SetCmdClientContextHandler(clientCtx, cmd); err != nil {
|
|
return err
|
|
}
|
|
|
|
// overwrite the minimum gas price from the app configuration
|
|
srvCfg := serverconfig.DefaultConfig()
|
|
srvCfg.MinGasPrices = "0photon"
|
|
|
|
// overwrite the block timeout
|
|
cmtCfg := cmtcfg.DefaultConfig()
|
|
cmtCfg.Consensus.TimeoutCommit = 3 * time.Second
|
|
cmtCfg.LogLevel = "*:error,p2p:info,state:info,auction:info,bond:info,registry:info,gql-server:info" // better default logging
|
|
|
|
return server.InterceptConfigsPreRunHandler(cmd, serverconfig.DefaultConfigTemplate, srvCfg, cmtCfg)
|
|
},
|
|
}
|
|
|
|
initRootCmd(rootCmd, clientCtx.TxConfig, moduleBasicManager)
|
|
|
|
if err := autoCliOpts.EnhanceRootCommand(rootCmd); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// Add flags for GQL server.
|
|
rootCmd = gql.AddGQLFlags(rootCmd)
|
|
|
|
return rootCmd
|
|
}
|
|
|
|
func ProvideClientContext(
|
|
appCodec codec.Codec,
|
|
interfaceRegistry codectypes.InterfaceRegistry,
|
|
txConfig client.TxConfig,
|
|
legacyAmino *codec.LegacyAmino,
|
|
) client.Context {
|
|
clientCtx := client.Context{}.
|
|
WithCodec(appCodec).
|
|
WithInterfaceRegistry(interfaceRegistry).
|
|
WithTxConfig(txConfig).
|
|
WithLegacyAmino(legacyAmino).
|
|
WithInput(os.Stdin).
|
|
WithAccountRetriever(types.AccountRetriever{}).
|
|
WithHomeDir(app.DefaultNodeHome).
|
|
WithViper(EnvPrefix) // env variable prefix
|
|
|
|
// Read the config again to overwrite the default values with the values from the config file
|
|
clientCtx, _ = config.ReadFromClientConfig(clientCtx)
|
|
|
|
return clientCtx
|
|
}
|
|
|
|
func ProvideKeyring(clientCtx client.Context, addressCodec address.Codec) (clientv2keyring.Keyring, error) {
|
|
kb, err := client.NewKeyringFromBackend(clientCtx, clientCtx.Keyring.Backend())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return keyring.NewAutoCLIKeyring(kb)
|
|
}
|