21
21
package main
22
22
23
23
import (
24
+ "crypto/ecdsa"
24
25
"flag"
25
26
"fmt"
26
27
"log"
27
28
"os"
28
29
"os/user"
29
30
"path"
30
31
32
+ "github.com/ethereum/go-ethereum/crypto"
31
33
"github.com/ethereum/go-ethereum/logger"
34
+ "github.com/ethereum/go-ethereum/p2p/nat"
32
35
"github.com/ethereum/go-ethereum/vm"
33
36
)
34
37
@@ -42,14 +45,14 @@ var (
42
45
StartWebSockets bool
43
46
RpcPort int
44
47
WsPort int
45
- NatType string
46
- PMPGateway string
47
48
OutboundPort string
48
49
ShowGenesis bool
49
50
AddPeer string
50
51
MaxPeer int
51
52
GenAddr bool
52
- SeedNode string
53
+ BootNodes string
54
+ NodeKey * ecdsa.PrivateKey
55
+ NAT nat.Interface
53
56
SecretFile string
54
57
ExportDir string
55
58
NonInteractive bool
@@ -84,6 +87,7 @@ func defaultDataDir() string {
84
87
var defaultConfigFile = path .Join (defaultDataDir (), "conf.ini" )
85
88
86
89
func Init () {
90
+ // TODO: move common flag processing to cmd/util
87
91
flag .Usage = func () {
88
92
fmt .Fprintf (os .Stderr , "%s [options] [filename]:\n options precedence: default < config file < environment variables < command line\n " , os .Args [0 ])
89
93
flag .PrintDefaults ()
@@ -93,18 +97,12 @@ func Init() {
93
97
flag .StringVar (& Identifier , "id" , "" , "Custom client identifier" )
94
98
flag .StringVar (& KeyRing , "keyring" , "" , "identifier for keyring to use" )
95
99
flag .StringVar (& KeyStore , "keystore" , "db" , "system to store keyrings: db|file (db)" )
96
- flag .StringVar (& OutboundPort , "port" , "30303" , "listening port" )
97
- flag .StringVar (& NatType , "nat" , "" , "NAT support (UPNP|PMP) (none)" )
98
- flag .StringVar (& PMPGateway , "pmp" , "" , "Gateway IP for PMP" )
99
- flag .IntVar (& MaxPeer , "maxpeer" , 30 , "maximum desired peers" )
100
+
100
101
flag .IntVar (& RpcPort , "rpcport" , 8545 , "port to start json-rpc server on" )
101
102
flag .IntVar (& WsPort , "wsport" , 40404 , "port to start websocket rpc server on" )
102
103
flag .BoolVar (& StartRpc , "rpc" , false , "start rpc server" )
103
104
flag .BoolVar (& StartWebSockets , "ws" , false , "start websocket server" )
104
105
flag .BoolVar (& NonInteractive , "y" , false , "non-interactive mode (say yes to confirmations)" )
105
- flag .StringVar (& SeedNode , "seednode" , "poc-8.ethdev.com:30303" , "ip:port of seed node to connect to. Set to blank for skip" )
106
- flag .BoolVar (& SHH , "shh" , true , "whisper protocol (on)" )
107
- flag .BoolVar (& Dial , "dial" , true , "dial out connections (on)" )
108
106
flag .BoolVar (& GenAddr , "genaddr" , false , "create a new priv/pub key" )
109
107
flag .StringVar (& SecretFile , "import" , "" , "imports the file given (hex or mnemonic formats)" )
110
108
flag .StringVar (& ExportDir , "export" , "" , "exports the session keyring to files in the directory given" )
@@ -127,8 +125,38 @@ func Init() {
127
125
flag .BoolVar (& StartJsConsole , "js" , false , "launches javascript console" )
128
126
flag .BoolVar (& PrintVersion , "version" , false , "prints version number" )
129
127
128
+ // Network stuff
129
+ var (
130
+ nodeKeyFile = flag .String ("nodekey" , "" , "network private key file" )
131
+ nodeKeyHex = flag .String ("nodekeyhex" , "" , "network private key (for testing)" )
132
+ natstr = flag .String ("nat" , "any" , "port mapping mechanism (any|none|upnp|pmp|extip:<IP>)" )
133
+ )
134
+ flag .BoolVar (& Dial , "dial" , true , "dial out connections (default on)" )
135
+ flag .BoolVar (& SHH , "shh" , true , "run whisper protocol (default on)" )
136
+ flag .StringVar (& OutboundPort , "port" , "30303" , "listening port" )
137
+
138
+ flag .StringVar (& BootNodes , "bootnodes" , "" , "space-separated node URLs for discovery bootstrap" )
139
+ flag .IntVar (& MaxPeer , "maxpeer" , 30 , "maximum desired peers" )
140
+
130
141
flag .Parse ()
131
142
143
+ var err error
144
+ if NAT , err = nat .Parse (* natstr ); err != nil {
145
+ log .Fatalf ("-nat: %v" , err )
146
+ }
147
+ switch {
148
+ case * nodeKeyFile != "" && * nodeKeyHex != "" :
149
+ log .Fatal ("Options -nodekey and -nodekeyhex are mutually exclusive" )
150
+ case * nodeKeyFile != "" :
151
+ if NodeKey , err = crypto .LoadECDSA (* nodeKeyFile ); err != nil {
152
+ log .Fatalf ("-nodekey: %v" , err )
153
+ }
154
+ case * nodeKeyHex != "" :
155
+ if NodeKey , err = crypto .HexToECDSA (* nodeKeyHex ); err != nil {
156
+ log .Fatalf ("-nodekeyhex: %v" , err )
157
+ }
158
+ }
159
+
132
160
if VmType >= int (vm .MaxVmTy ) {
133
161
log .Fatal ("Invalid VM type " , VmType )
134
162
}
0 commit comments