github.com/evdatsion/aphelion-dpos-bft@v0.32.1/cmd/tendermint/commands/run_node.go (about)

     1  package commands
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/spf13/cobra"
     7  
     8  	cmn "github.com/evdatsion/aphelion-dpos-bft/libs/common"
     9  	nm "github.com/evdatsion/aphelion-dpos-bft/node"
    10  )
    11  
    12  // AddNodeFlags exposes some common configuration options on the command-line
    13  // These are exposed for convenience of commands embedding a tendermint node
    14  func AddNodeFlags(cmd *cobra.Command) {
    15  	// bind flags
    16  	cmd.Flags().String("moniker", config.Moniker, "Node Name")
    17  
    18  	// priv val flags
    19  	cmd.Flags().String("priv_validator_laddr", config.PrivValidatorListenAddr, "Socket address to listen on for connections from external priv_validator process")
    20  
    21  	// node flags
    22  	cmd.Flags().Bool("fast_sync", config.FastSync, "Fast blockchain syncing")
    23  
    24  	// abci flags
    25  	cmd.Flags().String("proxy_app", config.ProxyApp, "Proxy app address, or one of: 'kvstore', 'persistent_kvstore', 'counter', 'counter_serial' or 'noop' for local testing.")
    26  	cmd.Flags().String("abci", config.ABCI, "Specify abci transport (socket | grpc)")
    27  
    28  	// rpc flags
    29  	cmd.Flags().String("rpc.laddr", config.RPC.ListenAddress, "RPC listen address. Port required")
    30  	cmd.Flags().String("rpc.grpc_laddr", config.RPC.GRPCListenAddress, "GRPC listen address (BroadcastTx only). Port required")
    31  	cmd.Flags().Bool("rpc.unsafe", config.RPC.Unsafe, "Enabled unsafe rpc methods")
    32  
    33  	// p2p flags
    34  	cmd.Flags().String("p2p.laddr", config.P2P.ListenAddress, "Node listen address. (0.0.0.0:0 means any interface, any port)")
    35  	cmd.Flags().String("p2p.seeds", config.P2P.Seeds, "Comma-delimited ID@host:port seed nodes")
    36  	cmd.Flags().String("p2p.persistent_peers", config.P2P.PersistentPeers, "Comma-delimited ID@host:port persistent peers")
    37  	cmd.Flags().Bool("p2p.upnp", config.P2P.UPNP, "Enable/disable UPNP port forwarding")
    38  	cmd.Flags().Bool("p2p.pex", config.P2P.PexReactor, "Enable/disable Peer-Exchange")
    39  	cmd.Flags().Bool("p2p.seed_mode", config.P2P.SeedMode, "Enable/disable seed mode")
    40  	cmd.Flags().String("p2p.private_peer_ids", config.P2P.PrivatePeerIDs, "Comma-delimited private peer IDs")
    41  
    42  	// consensus flags
    43  	cmd.Flags().Bool("consensus.create_empty_blocks", config.Consensus.CreateEmptyBlocks, "Set this to false to only produce blocks when there are txs or when the AppHash changes")
    44  }
    45  
    46  // NewRunNodeCmd returns the command that allows the CLI to start a node.
    47  // It can be used with a custom PrivValidator and in-process ABCI application.
    48  func NewRunNodeCmd(nodeProvider nm.NodeProvider) *cobra.Command {
    49  	cmd := &cobra.Command{
    50  		Use:   "node",
    51  		Short: "Run the tendermint node",
    52  		RunE: func(cmd *cobra.Command, args []string) error {
    53  			n, err := nodeProvider(config, logger)
    54  			if err != nil {
    55  				return fmt.Errorf("Failed to create node: %v", err)
    56  			}
    57  
    58  			// Stop upon receiving SIGTERM or CTRL-C.
    59  			cmn.TrapSignal(logger, func() {
    60  				if n.IsRunning() {
    61  					n.Stop()
    62  				}
    63  			})
    64  
    65  			if err := n.Start(); err != nil {
    66  				return fmt.Errorf("Failed to start node: %v", err)
    67  			}
    68  			logger.Info("Started node", "nodeInfo", n.Switch().NodeInfo())
    69  
    70  			// Run forever.
    71  			select {}
    72  		},
    73  	}
    74  
    75  	AddNodeFlags(cmd)
    76  	return cmd
    77  }