OSDN Git Service

Add write data to chain
[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         runNodeCmd.Flags().String("consensus_config_file", config.ConsensusConfigFile, "consensus configuration file")
71
72         // ipfs address
73         runNodeCmd.Flags().String("IpfsAddress", config.IpfsAddress, "Connect ipfs (eg. 127.0.0.1:5001)")
74
75         RootCmd.AddCommand(runNodeCmd)
76 }
77
78 func getLogLevel(level string) log.Level {
79         switch strings.ToLower(level) {
80         case "debug":
81                 return log.DebugLevel
82         case "info":
83                 return log.InfoLevel
84         case "warn":
85                 return log.WarnLevel
86         case "error":
87                 return log.ErrorLevel
88         case "fatal":
89                 return log.FatalLevel
90         default:
91                 return log.InfoLevel
92         }
93 }
94
95 func runNode(cmd *cobra.Command, args []string) error {
96         // Set log level by config.LogLevel
97         log.SetLevel(getLogLevel(config.LogLevel))
98
99         // Create & start node
100         n := node.NewNode(config)
101         if _, err := n.Start(); err != nil {
102                 return fmt.Errorf("Failed to start node: %v", err)
103         } else {
104                 log.Info("Start node ", n.SyncManager().NodeInfo())
105         }
106
107         // Trap signal, run forever.
108         n.RunForever()
109
110         return nil
111 }