| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // Copyright 2014 The go-ethereum Authors | 
					
						
							|  |  |  | // This file is part of go-ethereum. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // go-ethereum is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  | // it under the terms of the GNU General Public License as published by | 
					
						
							|  |  |  | // the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  | // (at your option) any later version. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // go-ethereum is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // GNU General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU General Public License | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // along with go-ethereum. If not, see <http://www.gnu.org/licenses/>. | 
					
						
							| 
									
										
										
										
											2014-10-23 15:48:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-07 05:08:16 +02:00
										 |  |  | // geth is the official command-line client for Ethereum. | 
					
						
							| 
									
										
										
										
											2014-06-23 12:20:59 +01:00
										 |  |  | package main | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2016-04-28 12:00:11 +03:00
										 |  |  | 	"encoding/hex" | 
					
						
							| 
									
										
										
										
											2014-08-06 09:53:12 +02:00
										 |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"os" | 
					
						
							| 
									
										
										
										
											2014-07-30 01:05:40 +02:00
										 |  |  | 	"runtime" | 
					
						
							| 
									
										
										
										
											2015-05-05 08:24:15 +02:00
										 |  |  | 	"strings" | 
					
						
							| 
									
										
										
										
											2015-06-25 13:47:06 +03:00
										 |  |  | 	"time" | 
					
						
							| 
									
										
										
										
											2014-07-30 01:05:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-31 14:20:11 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/cmd/utils" | 
					
						
							| 
									
										
										
										
											2015-03-16 22:49:39 +07:00
										 |  |  | 	"github.com/ethereum/go-ethereum/common" | 
					
						
							| 
									
										
										
										
											2016-05-06 12:40:23 +03:00
										 |  |  | 	"github.com/ethereum/go-ethereum/console" | 
					
						
							| 
									
										
										
										
											2016-08-29 19:22:34 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/contracts/release" | 
					
						
							| 
									
										
										
										
											2015-01-04 14:20:16 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/eth" | 
					
						
							| 
									
										
										
										
											2016-01-26 14:39:21 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/internal/debug" | 
					
						
							| 
									
										
										
										
											2014-10-31 12:56:05 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/logger" | 
					
						
							| 
									
										
										
										
											2015-07-01 00:52:44 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/logger/glog" | 
					
						
							| 
									
										
										
										
											2015-06-27 18:12:58 +03:00
										 |  |  | 	"github.com/ethereum/go-ethereum/metrics" | 
					
						
							| 
									
										
										
										
											2015-11-17 18:33:25 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/node" | 
					
						
							| 
									
										
										
										
											2016-11-25 17:55:06 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/params" | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/rlp" | 
					
						
							| 
									
										
										
										
											2016-06-09 11:44:42 +02:00
										 |  |  | 	"gopkg.in/urfave/cli.v1" | 
					
						
							| 
									
										
										
										
											2014-06-23 12:20:59 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-03 17:36:24 +01:00
										 |  |  | const ( | 
					
						
							| 
									
										
										
										
											2016-08-18 13:28:17 +02:00
										 |  |  | 	clientIdentifier = "geth" // Client identifier to advertise over the network | 
					
						
							| 
									
										
										
										
											2014-07-03 17:36:24 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-28 13:14:53 +02:00
										 |  |  | var ( | 
					
						
							| 
									
										
										
										
											2016-09-05 13:08:41 +02:00
										 |  |  | 	// Git SHA1 commit hash of the release (set via linker flags) | 
					
						
							|  |  |  | 	gitCommit = "" | 
					
						
							|  |  |  | 	// Ethereum address of the Geth release oracle. | 
					
						
							|  |  |  | 	relOracle = common.HexToAddress("0xfa7b9770ca4cb04296cac84f37736d4041251cdf") | 
					
						
							|  |  |  | 	// The app that holds all commands and flags. | 
					
						
							|  |  |  | 	app = utils.NewApp(gitCommit, "the go-ethereum command line interface") | 
					
						
							| 
									
										
										
										
											2015-04-28 13:14:53 +02:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2014-06-23 12:20:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | func init() { | 
					
						
							| 
									
										
										
										
											2016-04-28 12:00:11 +03:00
										 |  |  | 	// Initialize the CLI app and start Geth | 
					
						
							| 
									
										
										
										
											2015-11-17 18:33:25 +02:00
										 |  |  | 	app.Action = geth | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 	app.HideVersion = true // we have a command to print the version | 
					
						
							| 
									
										
										
										
											2016-11-10 19:00:09 +08:00
										 |  |  | 	app.Copyright = "Copyright 2013-2016 The go-ethereum Authors" | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 	app.Commands = []cli.Command{ | 
					
						
							| 
									
										
										
										
											2016-11-30 13:34:24 +02:00
										 |  |  | 		// See chaincmd.go: | 
					
						
							|  |  |  | 		initCommand, | 
					
						
							| 
									
										
										
										
											2015-05-27 13:43:49 +02:00
										 |  |  | 		importCommand, | 
					
						
							|  |  |  | 		exportCommand, | 
					
						
							|  |  |  | 		upgradedbCommand, | 
					
						
							|  |  |  | 		removedbCommand, | 
					
						
							|  |  |  | 		dumpCommand, | 
					
						
							| 
									
										
										
										
											2016-11-30 13:34:24 +02:00
										 |  |  | 		// See monitorcmd.go: | 
					
						
							| 
									
										
										
										
											2015-06-25 10:36:47 +03:00
										 |  |  | 		monitorCommand, | 
					
						
							| 
									
										
										
										
											2016-11-30 13:34:24 +02:00
										 |  |  | 		// See accountcmd.go: | 
					
						
							| 
									
										
										
										
											2016-03-17 13:09:18 +01:00
										 |  |  | 		accountCommand, | 
					
						
							|  |  |  | 		walletCommand, | 
					
						
							| 
									
										
										
										
											2016-11-30 13:34:24 +02:00
										 |  |  | 		// See consolecmd.go: | 
					
						
							| 
									
										
										
										
											2016-05-06 12:40:23 +03:00
										 |  |  | 		consoleCommand, | 
					
						
							|  |  |  | 		attachCommand, | 
					
						
							|  |  |  | 		javascriptCommand, | 
					
						
							| 
									
										
										
										
											2016-11-30 13:34:24 +02:00
										 |  |  | 		// See misccmd.go: | 
					
						
							|  |  |  | 		makedagCommand, | 
					
						
							|  |  |  | 		versionCommand, | 
					
						
							|  |  |  | 		licenseCommand, | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-03-17 13:09:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 	app.Flags = []cli.Flag{ | 
					
						
							| 
									
										
										
										
											2015-04-18 23:53:30 +02:00
										 |  |  | 		utils.IdentityFlag, | 
					
						
							| 
									
										
										
										
											2015-03-11 01:08:42 +01:00
										 |  |  | 		utils.UnlockedAccountFlag, | 
					
						
							| 
									
										
										
										
											2015-03-23 13:00:06 +00:00
										 |  |  | 		utils.PasswordFileFlag, | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 		utils.BootnodesFlag, | 
					
						
							|  |  |  | 		utils.DataDirFlag, | 
					
						
							| 
									
										
										
										
											2016-03-07 14:38:56 -08:00
										 |  |  | 		utils.KeyStoreDirFlag, | 
					
						
							| 
									
										
										
										
											2015-08-03 17:48:24 +02:00
										 |  |  | 		utils.OlympicFlag, | 
					
						
							| 
									
										
										
										
											2015-10-09 18:36:31 +03:00
										 |  |  | 		utils.FastSyncFlag, | 
					
						
							| 
									
										
										
										
											2016-01-13 19:35:48 +01:00
										 |  |  | 		utils.LightModeFlag, | 
					
						
							|  |  |  | 		utils.LightServFlag, | 
					
						
							|  |  |  | 		utils.LightPeersFlag, | 
					
						
							| 
									
										
										
										
											2015-11-10 15:47:19 +02:00
										 |  |  | 		utils.LightKDFFlag, | 
					
						
							| 
									
										
										
										
											2016-11-09 19:18:20 +02:00
										 |  |  | 		utils.CacheFlag, | 
					
						
							| 
									
										
										
										
											2016-10-19 14:55:13 +03:00
										 |  |  | 		utils.TrieCacheGenFlag, | 
					
						
							| 
									
										
										
										
											2015-03-15 13:31:40 +07:00
										 |  |  | 		utils.JSpathFlag, | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 		utils.ListenPortFlag, | 
					
						
							|  |  |  | 		utils.MaxPeersFlag, | 
					
						
							| 
									
										
										
										
											2015-05-04 17:35:49 +03:00
										 |  |  | 		utils.MaxPendingPeersFlag, | 
					
						
							| 
									
										
										
										
											2015-03-26 21:49:22 +00:00
										 |  |  | 		utils.EtherbaseFlag, | 
					
						
							| 
									
										
										
										
											2015-05-09 12:00:51 +02:00
										 |  |  | 		utils.GasPriceFlag, | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 		utils.MinerThreadsFlag, | 
					
						
							|  |  |  | 		utils.MiningEnabledFlag, | 
					
						
							| 
									
										
										
										
											2015-05-20 16:56:17 +01:00
										 |  |  | 		utils.AutoDAGFlag, | 
					
						
							| 
									
										
										
										
											2016-04-04 12:04:04 +03:00
										 |  |  | 		utils.TargetGasLimitFlag, | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 		utils.NATFlag, | 
					
						
							| 
									
										
										
										
											2015-04-08 13:22:31 +02:00
										 |  |  | 		utils.NatspecEnabledFlag, | 
					
						
							| 
									
										
										
										
											2015-05-26 19:07:24 +03:00
										 |  |  | 		utils.NoDiscoverFlag, | 
					
						
							| 
									
										
										
										
											2016-10-19 13:04:55 +02:00
										 |  |  | 		utils.DiscoveryV5Flag, | 
					
						
							| 
									
										
										
										
											2016-11-22 20:52:31 +01:00
										 |  |  | 		utils.NetrestrictFlag, | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 		utils.NodeKeyFileFlag, | 
					
						
							|  |  |  | 		utils.NodeKeyHexFlag, | 
					
						
							|  |  |  | 		utils.RPCEnabledFlag, | 
					
						
							|  |  |  | 		utils.RPCListenAddrFlag, | 
					
						
							|  |  |  | 		utils.RPCPortFlag, | 
					
						
							| 
									
										
										
										
											2015-12-16 10:58:01 +01:00
										 |  |  | 		utils.RPCApiFlag, | 
					
						
							|  |  |  | 		utils.WSEnabledFlag, | 
					
						
							|  |  |  | 		utils.WSListenAddrFlag, | 
					
						
							|  |  |  | 		utils.WSPortFlag, | 
					
						
							|  |  |  | 		utils.WSApiFlag, | 
					
						
							| 
									
										
										
										
											2016-03-14 09:38:54 +01:00
										 |  |  | 		utils.WSAllowedOriginsFlag, | 
					
						
							| 
									
										
										
										
											2015-06-08 11:01:02 +02:00
										 |  |  | 		utils.IPCDisabledFlag, | 
					
						
							|  |  |  | 		utils.IPCApiFlag, | 
					
						
							|  |  |  | 		utils.IPCPathFlag, | 
					
						
							| 
									
										
										
										
											2015-06-19 14:04:18 +02:00
										 |  |  | 		utils.ExecFlag, | 
					
						
							| 
									
										
										
										
											2016-05-06 12:40:23 +03:00
										 |  |  | 		utils.PreloadJSFlag, | 
					
						
							| 
									
										
										
										
											2015-04-20 18:45:37 +03:00
										 |  |  | 		utils.WhisperEnabledFlag, | 
					
						
							| 
									
										
										
										
											2015-09-06 15:46:54 +02:00
										 |  |  | 		utils.DevModeFlag, | 
					
						
							| 
									
										
										
										
											2015-10-05 13:01:34 +02:00
										 |  |  | 		utils.TestNetFlag, | 
					
						
							| 
									
										
										
										
											2015-07-17 23:09:36 +02:00
										 |  |  | 		utils.VMForceJitFlag, | 
					
						
							|  |  |  | 		utils.VMJitCacheFlag, | 
					
						
							|  |  |  | 		utils.VMEnableJitFlag, | 
					
						
							| 
									
										
										
										
											2015-03-18 14:44:58 +07:00
										 |  |  | 		utils.NetworkIdFlag, | 
					
						
							| 
									
										
										
										
											2015-03-29 21:21:14 +02:00
										 |  |  | 		utils.RPCCORSDomainFlag, | 
					
						
							| 
									
										
										
										
											2016-11-25 17:55:06 +02:00
										 |  |  | 		utils.EthStatsURLFlag, | 
					
						
							| 
									
										
										
										
											2015-06-29 16:11:01 +03:00
										 |  |  | 		utils.MetricsEnabledFlag, | 
					
						
							| 
									
										
										
										
											2016-04-21 12:14:57 +03:00
										 |  |  | 		utils.FakePoWFlag, | 
					
						
							| 
									
										
										
										
											2015-04-22 23:11:11 +01:00
										 |  |  | 		utils.SolcPathFlag, | 
					
						
							| 
									
										
										
										
											2015-05-26 14:17:43 +02:00
										 |  |  | 		utils.GpoMinGasPriceFlag, | 
					
						
							|  |  |  | 		utils.GpoMaxGasPriceFlag, | 
					
						
							|  |  |  | 		utils.GpoFullBlockRatioFlag, | 
					
						
							|  |  |  | 		utils.GpobaseStepDownFlag, | 
					
						
							|  |  |  | 		utils.GpobaseStepUpFlag, | 
					
						
							|  |  |  | 		utils.GpobaseCorrectionFactorFlag, | 
					
						
							| 
									
										
										
										
											2015-09-22 10:34:58 +02:00
										 |  |  | 		utils.ExtraDataFlag, | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-01-26 14:39:21 +01:00
										 |  |  | 	app.Flags = append(app.Flags, debug.Flags...) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-20 18:59:41 +03:00
										 |  |  | 	app.Before = func(ctx *cli.Context) error { | 
					
						
							| 
									
										
										
										
											2015-12-08 18:05:43 +02:00
										 |  |  | 		runtime.GOMAXPROCS(runtime.NumCPU()) | 
					
						
							| 
									
										
										
										
											2016-01-26 14:39:21 +01:00
										 |  |  | 		if err := debug.Setup(ctx); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		// Start system runtime metrics collection | 
					
						
							|  |  |  | 		go metrics.CollectProcessMetrics(3 * time.Second) | 
					
						
							| 
									
										
										
										
											2015-12-08 18:05:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-24 18:49:54 +02:00
										 |  |  | 		// This should be the only place where reporting is enabled | 
					
						
							|  |  |  | 		// because it is not intended to run while testing. | 
					
						
							|  |  |  | 		// In addition to this check, bad block reports are sent only | 
					
						
							|  |  |  | 		// for chains with the main network genesis block and network id 1. | 
					
						
							|  |  |  | 		eth.EnableBadBlockReporting = true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-07 18:21:13 +03:00
										 |  |  | 		utils.SetupNetwork(ctx) | 
					
						
							| 
									
										
										
										
											2015-04-20 18:59:41 +03:00
										 |  |  | 		return nil | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-01-26 14:39:21 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	app.After = func(ctx *cli.Context) error { | 
					
						
							|  |  |  | 		debug.Exit() | 
					
						
							| 
									
										
										
										
											2016-05-30 17:30:17 +03:00
										 |  |  | 		console.Stdin.Close() // Resets terminal mode. | 
					
						
							| 
									
										
										
										
											2016-01-26 14:39:21 +01:00
										 |  |  | 		return nil | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-12-23 14:33:15 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | func main() { | 
					
						
							|  |  |  | 	if err := app.Run(os.Args); err != nil { | 
					
						
							|  |  |  | 		fmt.Fprintln(os.Stderr, err) | 
					
						
							|  |  |  | 		os.Exit(1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-06-26 10:47:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-17 18:33:25 +02:00
										 |  |  | // geth is the main entry point into the system if no special subcommand is ran. | 
					
						
							|  |  |  | // It creates a default node based on the command line arguments and runs it in | 
					
						
							|  |  |  | // blocking mode, waiting for it to be shut down. | 
					
						
							| 
									
										
										
										
											2016-06-10 11:23:00 +03:00
										 |  |  | func geth(ctx *cli.Context) error { | 
					
						
							| 
									
										
										
										
											2016-08-15 18:38:32 +02:00
										 |  |  | 	node := makeFullNode(ctx) | 
					
						
							| 
									
										
										
										
											2015-11-17 18:33:25 +02:00
										 |  |  | 	startNode(ctx, node) | 
					
						
							|  |  |  | 	node.Wait() | 
					
						
							| 
									
										
										
										
											2016-06-10 11:23:00 +03:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-07-11 16:04:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-15 18:38:32 +02:00
										 |  |  | func makeFullNode(ctx *cli.Context) *node.Node { | 
					
						
							| 
									
										
										
										
											2016-11-25 17:55:06 +02:00
										 |  |  | 	// Create the default extradata and construct the base node | 
					
						
							|  |  |  | 	var clientInfo = struct { | 
					
						
							|  |  |  | 		Version   uint | 
					
						
							|  |  |  | 		Name      string | 
					
						
							|  |  |  | 		GoVersion string | 
					
						
							|  |  |  | 		Os        string | 
					
						
							|  |  |  | 	}{uint(params.VersionMajor<<16 | params.VersionMinor<<8 | params.VersionPatch), clientIdentifier, runtime.Version(), runtime.GOOS} | 
					
						
							|  |  |  | 	extra, err := rlp.EncodeToBytes(clientInfo) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		glog.V(logger.Warn).Infoln("error setting canonical miner information:", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if uint64(len(extra)) > params.MaximumExtraDataSize.Uint64() { | 
					
						
							|  |  |  | 		glog.V(logger.Warn).Infoln("error setting canonical miner information: extra exceeds", params.MaximumExtraDataSize) | 
					
						
							|  |  |  | 		glog.V(logger.Debug).Infof("extra: %x\n", extra) | 
					
						
							|  |  |  | 		extra = nil | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-09-05 13:08:41 +02:00
										 |  |  | 	stack := utils.MakeNode(ctx, clientIdentifier, gitCommit) | 
					
						
							| 
									
										
										
										
											2016-11-25 17:55:06 +02:00
										 |  |  | 	utils.RegisterEthService(ctx, stack, extra) | 
					
						
							| 
									
										
										
										
											2016-09-05 13:08:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-15 18:38:32 +02:00
										 |  |  | 	// Whisper must be explicitly enabled, but is auto-enabled in --dev mode. | 
					
						
							|  |  |  | 	shhEnabled := ctx.GlobalBool(utils.WhisperEnabledFlag.Name) | 
					
						
							|  |  |  | 	shhAutoEnabled := !ctx.GlobalIsSet(utils.WhisperEnabledFlag.Name) && ctx.GlobalIsSet(utils.DevModeFlag.Name) | 
					
						
							|  |  |  | 	if shhEnabled || shhAutoEnabled { | 
					
						
							| 
									
										
										
										
											2016-09-05 13:08:41 +02:00
										 |  |  | 		utils.RegisterShhService(stack) | 
					
						
							| 
									
										
										
										
											2016-08-15 18:38:32 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-11-25 17:55:06 +02:00
										 |  |  | 	// Add the Ethereum Stats daemon if requested | 
					
						
							|  |  |  | 	if url := ctx.GlobalString(utils.EthStatsURLFlag.Name); url != "" { | 
					
						
							|  |  |  | 		utils.RegisterEthStatsService(stack, url) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-09-05 13:08:41 +02:00
										 |  |  | 	// Add the release oracle service so it boots along with node. | 
					
						
							|  |  |  | 	if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { | 
					
						
							|  |  |  | 		config := release.Config{ | 
					
						
							|  |  |  | 			Oracle: relOracle, | 
					
						
							| 
									
										
										
										
											2016-11-25 17:55:06 +02:00
										 |  |  | 			Major:  uint32(params.VersionMajor), | 
					
						
							|  |  |  | 			Minor:  uint32(params.VersionMinor), | 
					
						
							|  |  |  | 			Patch:  uint32(params.VersionPatch), | 
					
						
							| 
									
										
										
										
											2016-09-05 13:08:41 +02:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		commit, _ := hex.DecodeString(gitCommit) | 
					
						
							|  |  |  | 		copy(config.Commit[:], commit) | 
					
						
							|  |  |  | 		return release.NewReleaseService(ctx, config) | 
					
						
							|  |  |  | 	}); err != nil { | 
					
						
							|  |  |  | 		utils.Fatalf("Failed to register the Geth release oracle service: %v", err) | 
					
						
							| 
									
										
										
										
											2016-08-15 18:38:32 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-09-05 13:08:41 +02:00
										 |  |  | 	return stack | 
					
						
							| 
									
										
										
										
											2016-08-15 18:38:32 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-17 18:33:25 +02:00
										 |  |  | // startNode boots up the system node and all registered protocols, after which | 
					
						
							|  |  |  | // it unlocks any requested accounts, and starts the RPC/IPC interfaces and the | 
					
						
							|  |  |  | // miner. | 
					
						
							|  |  |  | func startNode(ctx *cli.Context, stack *node.Node) { | 
					
						
							|  |  |  | 	// Start up the node itself | 
					
						
							|  |  |  | 	utils.StartNode(stack) | 
					
						
							| 
									
										
										
										
											2015-07-01 16:15:02 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-17 18:33:25 +02:00
										 |  |  | 	// Unlock any account specifically requested | 
					
						
							| 
									
										
										
										
											2016-08-15 18:38:32 +02:00
										 |  |  | 	accman := stack.AccountManager() | 
					
						
							| 
									
										
										
										
											2015-11-17 18:33:25 +02:00
										 |  |  | 	passwords := utils.MakePasswordList(ctx) | 
					
						
							|  |  |  | 	accounts := strings.Split(ctx.GlobalString(utils.UnlockedAccountFlag.Name), ",") | 
					
						
							| 
									
										
										
										
											2015-06-18 16:20:00 +01:00
										 |  |  | 	for i, account := range accounts { | 
					
						
							| 
									
										
										
										
											2015-11-17 18:33:25 +02:00
										 |  |  | 		if trimmed := strings.TrimSpace(account); trimmed != "" { | 
					
						
							|  |  |  | 			unlockAccount(ctx, accman, trimmed, i, passwords) | 
					
						
							| 
									
										
										
										
											2015-03-24 12:37:00 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-03-23 13:00:06 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-02-02 19:06:43 +02:00
										 |  |  | 	// Start auxiliary services if enabled | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 	if ctx.GlobalBool(utils.MiningEnabledFlag.Name) { | 
					
						
							| 
									
										
										
										
											2016-06-30 13:03:26 +03:00
										 |  |  | 		var ethereum *eth.Ethereum | 
					
						
							| 
									
										
										
										
											2015-12-16 04:26:23 +01:00
										 |  |  | 		if err := stack.Service(ðereum); err != nil { | 
					
						
							|  |  |  | 			utils.Fatalf("ethereum service not running: %v", err) | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-10-28 20:05:01 +03:00
										 |  |  | 		if err := ethereum.StartMining(ctx.GlobalInt(utils.MinerThreadsFlag.Name)); err != nil { | 
					
						
							| 
									
										
										
										
											2015-11-17 18:33:25 +02:00
										 |  |  | 			utils.Fatalf("Failed to start mining: %v", err) | 
					
						
							| 
									
										
										
										
											2015-04-22 01:36:28 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | } |