flags.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /*
  2. This file is part of go-ethereum
  3. go-ethereum is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 3 of the License, or
  6. (at your option) any later version.
  7. go-ethereum is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. /**
  15. * @authors
  16. * Jeffrey Wilcke <i@jev.io>
  17. */
  18. package main
  19. import (
  20. "crypto/ecdsa"
  21. "flag"
  22. "fmt"
  23. "log"
  24. "os"
  25. "path"
  26. "runtime"
  27. "github.com/ethereum/go-ethereum/crypto"
  28. "github.com/ethereum/go-ethereum/ethutil"
  29. "github.com/ethereum/go-ethereum/logger"
  30. "github.com/ethereum/go-ethereum/p2p/nat"
  31. "github.com/ethereum/go-ethereum/vm"
  32. )
  33. var (
  34. Identifier string
  35. KeyRing string
  36. DiffTool bool
  37. DiffType string
  38. KeyStore string
  39. StartRpc bool
  40. StartWebSockets bool
  41. RpcListenAddress string
  42. RpcPort int
  43. OutboundPort string
  44. ShowGenesis bool
  45. AddPeer string
  46. MaxPeer int
  47. GenAddr bool
  48. BootNodes string
  49. NodeKey *ecdsa.PrivateKey
  50. NAT nat.Interface
  51. SecretFile string
  52. ExportDir string
  53. NonInteractive bool
  54. Datadir string
  55. LogFile string
  56. ConfigFile string
  57. DebugFile string
  58. LogLevel int
  59. LogFormat string
  60. Dump bool
  61. DumpHash string
  62. DumpNumber int
  63. VmType int
  64. ImportChain string
  65. SHH bool
  66. Dial bool
  67. PrintVersion bool
  68. MinerThreads int
  69. )
  70. // flags specific to cli client
  71. var (
  72. StartMining bool
  73. StartJsConsole bool
  74. InputFile string
  75. )
  76. var defaultConfigFile = path.Join(ethutil.DefaultDataDir(), "conf.ini")
  77. func Init() {
  78. // TODO: move common flag processing to cmd/util
  79. flag.Usage = func() {
  80. fmt.Fprintf(os.Stderr, "%s [options] [filename]:\noptions precedence: default < config file < environment variables < command line\n", os.Args[0])
  81. flag.PrintDefaults()
  82. }
  83. flag.IntVar(&VmType, "vm", 0, "Virtual Machine type: 0-1: standard, debug")
  84. flag.StringVar(&Identifier, "id", "", "Custom client identifier")
  85. flag.StringVar(&KeyRing, "keyring", "", "identifier for keyring to use")
  86. flag.StringVar(&KeyStore, "keystore", "db", "system to store keyrings: db|file")
  87. flag.StringVar(&RpcListenAddress, "rpcaddr", "127.0.0.1", "address for json-rpc server to listen on")
  88. flag.IntVar(&RpcPort, "rpcport", 8545, "port to start json-rpc server on")
  89. flag.BoolVar(&StartRpc, "rpc", false, "start rpc server")
  90. flag.BoolVar(&NonInteractive, "y", false, "non-interactive mode (say yes to confirmations)")
  91. flag.BoolVar(&GenAddr, "genaddr", false, "create a new priv/pub key")
  92. flag.StringVar(&SecretFile, "import", "", "imports the file given (hex or mnemonic formats)")
  93. flag.StringVar(&ExportDir, "export", "", "exports the session keyring to files in the directory given")
  94. flag.StringVar(&LogFile, "logfile", "", "log file (defaults to standard output)")
  95. flag.StringVar(&Datadir, "datadir", ethutil.DefaultDataDir(), "specifies the datadir to use")
  96. flag.StringVar(&ConfigFile, "conf", defaultConfigFile, "config file")
  97. flag.StringVar(&DebugFile, "debug", "", "debug file (no debugging if not set)")
  98. flag.IntVar(&LogLevel, "loglevel", int(logger.InfoLevel), "loglevel: 0-5 (= silent,error,warn,info,debug,debug detail)")
  99. flag.StringVar(&LogFormat, "logformat", "std", "logformat: std,raw")
  100. flag.BoolVar(&DiffTool, "difftool", false, "creates output for diff'ing. Sets LogLevel=0")
  101. flag.StringVar(&DiffType, "diff", "all", "sets the level of diff output [vm, all]. Has no effect if difftool=false")
  102. flag.BoolVar(&ShowGenesis, "genesis", false, "Dump the genesis block")
  103. flag.StringVar(&ImportChain, "chain", "", "Imports given chain")
  104. flag.BoolVar(&Dump, "dump", false, "output the ethereum state in JSON format. Sub args [number, hash]")
  105. flag.StringVar(&DumpHash, "hash", "", "specify arg in hex")
  106. flag.IntVar(&DumpNumber, "number", -1, "specify arg in number")
  107. flag.BoolVar(&StartMining, "mine", false, "start mining")
  108. flag.BoolVar(&StartJsConsole, "js", false, "launches javascript console")
  109. flag.BoolVar(&PrintVersion, "version", false, "prints version number")
  110. // Network stuff
  111. var (
  112. nodeKeyFile = flag.String("nodekey", "", "network private key file")
  113. nodeKeyHex = flag.String("nodekeyhex", "", "network private key (for testing)")
  114. natstr = flag.String("nat", "any", "port mapping mechanism (any|none|upnp|pmp|extip:<IP>)")
  115. )
  116. flag.BoolVar(&Dial, "dial", true, "dial out connections (default on)")
  117. //flag.BoolVar(&SHH, "shh", true, "run whisper protocol (default on)")
  118. flag.StringVar(&OutboundPort, "port", "30303", "listening port")
  119. flag.StringVar(&BootNodes, "bootnodes", "", "space-separated node URLs for discovery bootstrap")
  120. flag.IntVar(&MaxPeer, "maxpeer", 30, "maximum desired peers")
  121. flag.IntVar(&MinerThreads, "minerthreads", runtime.NumCPU(), "number of miner threads")
  122. flag.Parse()
  123. // When the javascript console is started log to a file instead
  124. // of stdout
  125. if StartJsConsole {
  126. LogFile = path.Join(Datadir, "ethereum.log")
  127. }
  128. var err error
  129. if NAT, err = nat.Parse(*natstr); err != nil {
  130. log.Fatalf("-nat: %v", err)
  131. }
  132. switch {
  133. case *nodeKeyFile != "" && *nodeKeyHex != "":
  134. log.Fatal("Options -nodekey and -nodekeyhex are mutually exclusive")
  135. case *nodeKeyFile != "":
  136. if NodeKey, err = crypto.LoadECDSA(*nodeKeyFile); err != nil {
  137. log.Fatalf("-nodekey: %v", err)
  138. }
  139. case *nodeKeyHex != "":
  140. if NodeKey, err = crypto.HexToECDSA(*nodeKeyHex); err != nil {
  141. log.Fatalf("-nodekeyhex: %v", err)
  142. }
  143. }
  144. if VmType >= int(vm.MaxVmTy) {
  145. log.Fatal("Invalid VM type ", VmType)
  146. }
  147. InputFile = flag.Arg(0)
  148. }