OSDN Git Service

98e608ffc62a211e9dac307ad7067dd956a4562b
[bytom/vapor.git] / cmd / vapor / commands / run_node.go
1 package commands
2
3 import (
4         "fmt"
5
6         log "github.com/sirupsen/logrus"
7         "github.com/spf13/cobra"
8
9         "strings"
10
11         "github.com/vapor/node"
12 )
13
14 var runNodeCmd = &cobra.Command{
15         Use:   "node",
16         Short: "Run the bytomd",
17         RunE:  runNode,
18 }
19
20 func init() {
21         runNodeCmd.Flags().String("prof_laddr", config.ProfListenAddress, "Use http to profile bytomd programs")
22         runNodeCmd.Flags().Bool("mining", config.Mining, "Enable mining")
23
24         runNodeCmd.Flags().Bool("auth.disable", config.Auth.Disable, "Disable rpc access authenticate")
25
26         runNodeCmd.Flags().Bool("wallet.disable", config.Wallet.Disable, "Disable wallet")
27         runNodeCmd.Flags().Bool("wallet.rescan", config.Wallet.Rescan, "Rescan wallet")
28         runNodeCmd.Flags().Bool("vault_mode", config.VaultMode, "Run in the offline enviroment")
29         runNodeCmd.Flags().Bool("web.closed", config.Web.Closed, "Lanch web browser or not")
30         runNodeCmd.Flags().String("chain_id", config.ChainID, "Select network type")
31
32         // log level
33         runNodeCmd.Flags().String("log_level", config.LogLevel, "Select log level(debug, info, warn, error or fatal")
34
35         // p2p flags
36         runNodeCmd.Flags().String("p2p.laddr", config.P2P.ListenAddress, "Node listen address. (0.0.0.0:0 means any interface, any port)")
37         runNodeCmd.Flags().String("p2p.seeds", config.P2P.Seeds, "Comma delimited host:port seed nodes")
38         runNodeCmd.Flags().Bool("p2p.skip_upnp", config.P2P.SkipUPNP, "Skip UPNP configuration")
39         runNodeCmd.Flags().Int("p2p.max_num_peers", config.P2P.MaxNumPeers, "Set max num peers")
40         runNodeCmd.Flags().Int("p2p.handshake_timeout", config.P2P.HandshakeTimeout, "Set handshake timeout")
41         runNodeCmd.Flags().Int("p2p.dial_timeout", config.P2P.DialTimeout, "Set dial timeout")
42         runNodeCmd.Flags().String("p2p.proxy_address", config.P2P.ProxyAddress, "Connect via SOCKS5 proxy (eg. 127.0.0.1:1086)")
43         runNodeCmd.Flags().String("p2p.proxy_username", config.P2P.ProxyUsername, "Username for proxy server")
44         runNodeCmd.Flags().String("p2p.proxy_password", config.P2P.ProxyPassword, "Password for proxy server")
45
46         // log flags
47         runNodeCmd.Flags().String("log_file", config.LogFile, "Log output file")
48
49         // websocket flags
50         runNodeCmd.Flags().Int("ws.max_num_websockets", config.Websocket.MaxNumWebsockets, "Max number of websocket connections")
51         runNodeCmd.Flags().Int("ws.max_num_concurrent_reqs", config.Websocket.MaxNumConcurrentReqs, "Max number of concurrent websocket requests that may be processed concurrently")
52
53         //sidecain
54         runNodeCmd.Flags().String("side.fedpeg_xpubs", config.Side.FedpegXPubs, "Change federated peg to use a different xpub.")
55         runNodeCmd.Flags().Uint64("side.pegin_confirmation_depth", config.Side.PeginMinDepth, "Pegin claims must be this deep to be considered valid. (default: 6)")
56         runNodeCmd.Flags().String("side.parent_genesis_block_hash", config.Side.ParentGenesisBlockHash, "")
57
58         runNodeCmd.Flags().Bool("validate_pegin", config.ValidatePegin, "Validate pegin claims. All functionaries must run this.")
59         //mainchainrpchost
60         runNodeCmd.Flags().String("mainchain.mainchain_rpc_host", config.MainChain.MainchainRpcHost, "The address which the daemon will try to connect to validate peg-ins, if enabled.")
61         //mainchainrpcport
62         runNodeCmd.Flags().String("mainchain.mainchain_rpc_port", config.MainChain.MainchainRpcPort, "The port which the daemon will try to connect to validate peg-ins, if enabled.")
63         //mainchaintoken
64         runNodeCmd.Flags().String("mainchain.mainchain_token", config.MainChain.MainchainToken, "The rpc token that the daemon will use to connect to validate peg-ins, if enabled.")
65
66         //Signer
67         runNodeCmd.Flags().String("signer", config.Signer, "The signer corresponds to xpub of signblock")
68         runNodeCmd.Flags().String("side.sign_block_xpubs", config.Side.SignBlockXPubs, "Change federated peg to use a different xpub.")
69
70         RootCmd.AddCommand(runNodeCmd)
71 }
72
73 func getLogLevel(level string) log.Level {
74         switch strings.ToLower(level) {
75         case "debug":
76                 return log.DebugLevel
77         case "info":
78                 return log.InfoLevel
79         case "warn":
80                 return log.WarnLevel
81         case "error":
82                 return log.ErrorLevel
83         case "fatal":
84                 return log.FatalLevel
85         default:
86                 return log.InfoLevel
87         }
88 }
89
90 func runNode(cmd *cobra.Command, args []string) error {
91         // Set log level by config.LogLevel
92         log.SetLevel(getLogLevel(config.LogLevel))
93
94         // Create & start node
95         n := node.NewNode(config)
96         if _, err := n.Start(); err != nil {
97                 return fmt.Errorf("Failed to start node: %v", err)
98         } else {
99                 log.Info("Start node ", n.SyncManager().NodeInfo())
100         }
101
102         // Trap signal, run forever.
103         n.RunForever()
104
105         return nil
106 }