flags.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. "flag"
  21. "fmt"
  22. "log"
  23. "os"
  24. "os/user"
  25. "path"
  26. "github.com/ethereum/go-ethereum/logger"
  27. "github.com/ethereum/go-ethereum/vm"
  28. )
  29. var (
  30. Identifier string
  31. KeyRing string
  32. DiffTool bool
  33. DiffType string
  34. KeyStore string
  35. StartRpc bool
  36. StartWebSockets bool
  37. RpcPort int
  38. WsPort int
  39. NatType string
  40. PMPGateway string
  41. OutboundPort string
  42. ShowGenesis bool
  43. AddPeer string
  44. MaxPeer int
  45. GenAddr bool
  46. SeedNode string
  47. SecretFile string
  48. ExportDir string
  49. NonInteractive bool
  50. Datadir string
  51. LogFile string
  52. ConfigFile string
  53. DebugFile string
  54. LogLevel int
  55. Dump bool
  56. DumpHash string
  57. DumpNumber int
  58. VmType int
  59. ImportChain string
  60. SHH bool
  61. Dial bool
  62. PrintVersion bool
  63. )
  64. // flags specific to cli client
  65. var (
  66. StartMining bool
  67. StartJsConsole bool
  68. InputFile string
  69. )
  70. func defaultDataDir() string {
  71. usr, _ := user.Current()
  72. return path.Join(usr.HomeDir, ".ethereum")
  73. }
  74. var defaultConfigFile = path.Join(defaultDataDir(), "conf.ini")
  75. func Init() {
  76. flag.Usage = func() {
  77. fmt.Fprintf(os.Stderr, "%s [options] [filename]:\noptions precedence: default < config file < environment variables < command line\n", os.Args[0])
  78. flag.PrintDefaults()
  79. }
  80. flag.IntVar(&VmType, "vm", 0, "Virtual Machine type: 0-1: standard, debug")
  81. flag.StringVar(&Identifier, "id", "", "Custom client identifier")
  82. flag.StringVar(&KeyRing, "keyring", "", "identifier for keyring to use")
  83. flag.StringVar(&KeyStore, "keystore", "db", "system to store keyrings: db|file (db)")
  84. flag.StringVar(&OutboundPort, "port", "30303", "listening port")
  85. flag.StringVar(&NatType, "nat", "", "NAT support (UPNP|PMP) (none)")
  86. flag.StringVar(&PMPGateway, "pmp", "", "Gateway IP for PMP")
  87. flag.IntVar(&MaxPeer, "maxpeer", 30, "maximum desired peers")
  88. flag.IntVar(&RpcPort, "rpcport", 8545, "port to start json-rpc server on")
  89. flag.IntVar(&WsPort, "wsport", 40404, "port to start websocket rpc server on")
  90. flag.BoolVar(&StartRpc, "rpc", false, "start rpc server")
  91. flag.BoolVar(&StartWebSockets, "ws", false, "start websocket server")
  92. flag.BoolVar(&NonInteractive, "y", false, "non-interactive mode (say yes to confirmations)")
  93. flag.StringVar(&SeedNode, "seednode", "poc-8.ethdev.com:30303", "ip:port of seed node to connect to. Set to blank for skip")
  94. flag.BoolVar(&SHH, "shh", true, "whisper protocol (on)")
  95. flag.BoolVar(&Dial, "dial", true, "dial out connections (on)")
  96. flag.BoolVar(&GenAddr, "genaddr", false, "create a new priv/pub key")
  97. flag.StringVar(&SecretFile, "import", "", "imports the file given (hex or mnemonic formats)")
  98. flag.StringVar(&ExportDir, "export", "", "exports the session keyring to files in the directory given")
  99. flag.StringVar(&LogFile, "logfile", "", "log file (defaults to standard output)")
  100. flag.StringVar(&Datadir, "datadir", defaultDataDir(), "specifies the datadir to use")
  101. flag.StringVar(&ConfigFile, "conf", defaultConfigFile, "config file")
  102. flag.StringVar(&DebugFile, "debug", "", "debug file (no debugging if not set)")
  103. flag.IntVar(&LogLevel, "loglevel", int(logger.InfoLevel), "loglevel: 0-5: silent,error,warn,info,debug,debug detail)")
  104. flag.BoolVar(&DiffTool, "difftool", false, "creates output for diff'ing. Sets LogLevel=0")
  105. flag.StringVar(&DiffType, "diff", "all", "sets the level of diff output [vm, all]. Has no effect if difftool=false")
  106. flag.BoolVar(&ShowGenesis, "genesis", false, "Dump the genesis block")
  107. flag.StringVar(&ImportChain, "chain", "", "Imports given chain")
  108. flag.BoolVar(&Dump, "dump", false, "output the ethereum state in JSON format. Sub args [number, hash]")
  109. flag.StringVar(&DumpHash, "hash", "", "specify arg in hex")
  110. flag.IntVar(&DumpNumber, "number", -1, "specify arg in number")
  111. flag.BoolVar(&StartMining, "mine", false, "start dagger mining")
  112. flag.BoolVar(&StartJsConsole, "js", false, "launches javascript console")
  113. flag.BoolVar(&PrintVersion, "version", false, "prints version number")
  114. flag.Parse()
  115. if VmType >= int(vm.MaxVmTy) {
  116. log.Fatal("Invalid VM type ", VmType)
  117. }
  118. InputFile = flag.Arg(0)
  119. }