| 
									
										
										
										
											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 ( | 
					
						
							| 
									
										
										
										
											2014-08-06 09:53:12 +02:00
										 |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"os" | 
					
						
							| 
									
										
										
										
											2017-08-11 13:29:05 +02:00
										 |  |  | 	"sort" | 
					
						
							| 
									
										
										
										
											2018-05-25 15:48:16 +08:00
										 |  |  | 	"strconv" | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-08 20:25:52 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/accounts" | 
					
						
							| 
									
										
										
										
											2017-01-24 11:49:20 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/accounts/keystore" | 
					
						
							| 
									
										
										
										
											2014-10-31 14:20:11 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/cmd/utils" | 
					
						
							| 
									
										
											  
											
												cmd,eth: 16400 Add an option to stop geth once in sync.  WIP for light mode (#17321)
* cmd, eth: Added in the flag to step geth once sync based on input
* cmd, eth: 16400 Add an option to stop geth once in sync.
* cmd: 16400 Add an option to stop geth once in sync. WIP
* cmd/geth/main, les/fletcher: added in light mode support
* cmd/geth/main, les/fletcher: Cleaned Comments and code for light mode
* cmd: 16400 Fixed formatting issue and cleaned code
* cmd, eth, les: 16400 Fixed formatting issues
* cmd, eth, les: Performed gofmt to update formatting
* cmd, eth, les: Fixed bugs resulting formatting
* cmd/geth, eth/, les: switched to downloader event
* eth: Fixed styling and gen_config
* eth/: Fix nil error in config file
* cmd/geth: Updated countdown log
* les/fetcher.go: Removed depcreated channel
* eth/downloader.go: Removed deprecated select
* cmd/geth, cmd/utils: Fixed minor issues
* eth: Reverted config files to proper format
* eth: Fixed typo in config file
* cmd/geth, eth/down: Updated code to use header time stamp
* eth/downloader: Changed the time threshold to 10 minutes
* cmd/geth, eth/downloader: Updated downloading event to pass latest header
* cmd/geth: Updated main to use right timer object
* cmd/geth: Removed unused failed event
* cmd/geth: added in correct time field with type assertion
* cmd/geth, cmd/utils: Updated flag to use boolean
* cmd/geth, cmd/utils, eth/downloader: Cleaned up code based on recommendations
* cmd/geth: Removed unneeded import
* cmd/geth, eth/downloader: fixed event field and suggested changes
* cmd/geth, cmd/utils: Updated flag and linting issue
											
										 
											2019-01-30 02:40:36 -05:00
										 |  |  | 	"github.com/ethereum/go-ethereum/common" | 
					
						
							| 
									
										
										
										
											2020-05-19 10:44:46 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/console/prompt" | 
					
						
							| 
									
										
										
										
											2015-01-04 14:20:16 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/eth" | 
					
						
							| 
									
										
											  
											
												cmd,eth: 16400 Add an option to stop geth once in sync.  WIP for light mode (#17321)
* cmd, eth: Added in the flag to step geth once sync based on input
* cmd, eth: 16400 Add an option to stop geth once in sync.
* cmd: 16400 Add an option to stop geth once in sync. WIP
* cmd/geth/main, les/fletcher: added in light mode support
* cmd/geth/main, les/fletcher: Cleaned Comments and code for light mode
* cmd: 16400 Fixed formatting issue and cleaned code
* cmd, eth, les: 16400 Fixed formatting issues
* cmd, eth, les: Performed gofmt to update formatting
* cmd, eth, les: Fixed bugs resulting formatting
* cmd/geth, eth/, les: switched to downloader event
* eth: Fixed styling and gen_config
* eth/: Fix nil error in config file
* cmd/geth: Updated countdown log
* les/fetcher.go: Removed depcreated channel
* eth/downloader.go: Removed deprecated select
* cmd/geth, cmd/utils: Fixed minor issues
* eth: Reverted config files to proper format
* eth: Fixed typo in config file
* cmd/geth, eth/down: Updated code to use header time stamp
* eth/downloader: Changed the time threshold to 10 minutes
* cmd/geth, eth/downloader: Updated downloading event to pass latest header
* cmd/geth: Updated main to use right timer object
* cmd/geth: Removed unused failed event
* cmd/geth: added in correct time field with type assertion
* cmd/geth, cmd/utils: Updated flag to use boolean
* cmd/geth, cmd/utils, eth/downloader: Cleaned up code based on recommendations
* cmd/geth: Removed unneeded import
* cmd/geth, eth/downloader: fixed event field and suggested changes
* cmd/geth, cmd/utils: Updated flag and linting issue
											
										 
											2019-01-30 02:40:36 -05:00
										 |  |  | 	"github.com/ethereum/go-ethereum/eth/downloader" | 
					
						
							| 
									
										
										
										
											2017-02-08 20:25:52 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/ethclient" | 
					
						
							| 
									
										
										
										
											2016-01-26 14:39:21 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/internal/debug" | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/internal/ethapi" | 
					
						
							| 
									
										
										
										
											2020-07-14 10:35:32 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/internal/flags" | 
					
						
							| 
									
										
										
										
											2017-02-22 14:10:07 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/log" | 
					
						
							| 
									
										
										
										
											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" | 
					
						
							| 
									
										
										
										
											2020-11-25 21:00:23 +01: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 = "" | 
					
						
							| 
									
										
										
										
											2019-05-08 08:44:28 -05:00
										 |  |  | 	gitDate   = "" | 
					
						
							| 
									
										
										
										
											2016-09-05 13:08:41 +02:00
										 |  |  | 	// The app that holds all commands and flags. | 
					
						
							| 
									
										
										
										
											2020-07-14 10:35:32 +02:00
										 |  |  | 	app = flags.NewApp(gitCommit, gitDate, "the go-ethereum command line interface") | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | 	// flags that configure the node | 
					
						
							|  |  |  | 	nodeFlags = []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, | 
					
						
							| 
									
										
										
										
											2019-03-08 15:56:20 +02:00
										 |  |  | 		utils.AncientFlag, | 
					
						
							| 
									
										
										
										
											2021-01-19 08:26:42 +00:00
										 |  |  | 		utils.MinFreeDiskSpaceFlag, | 
					
						
							| 
									
										
										
										
											2016-03-07 14:38:56 -08:00
										 |  |  | 		utils.KeyStoreDirFlag, | 
					
						
							| 
									
										
										
											
												accounts, eth, clique, signer: support for external signer API  (#18079)
* accounts, eth, clique: implement external backend + move sighash calc to backend
* signer: implement account_Version on external API
* accounts/external: enable ipc, add copyright
* accounts, internal, signer: formatting
* node: go fmt
* flags: disallow --dev in combo with --externalsigner
* accounts: remove clique-specific signing method, replace with more generic
* accounts, consensus: formatting + fix error in tests
* signer/core: remove (test-) import cycle
* clique: remove unused import
* accounts: remove CliqueHash and avoid dependency on package crypto
* consensus/clique: unduplicate header encoding
											
										 
											2019-02-05 11:23:57 +01:00
										 |  |  | 		utils.ExternalSignerFlag, | 
					
						
							| 
									
										
										
										
											2017-04-20 14:01:51 +03:00
										 |  |  | 		utils.NoUSBFlag, | 
					
						
							| 
									
										
										
										
											2021-01-05 10:18:22 +00:00
										 |  |  | 		utils.USBFlag, | 
					
						
							| 
									
										
										
										
											2019-05-31 11:30:28 +02:00
										 |  |  | 		utils.SmartCardDaemonPathFlag, | 
					
						
							| 
									
										
										
										
											2021-02-25 09:10:30 +02:00
										 |  |  | 		utils.OverrideBerlinFlag, | 
					
						
							| 
									
										
										
										
											2017-03-06 11:37:32 +02:00
										 |  |  | 		utils.EthashCacheDirFlag, | 
					
						
							|  |  |  | 		utils.EthashCachesInMemoryFlag, | 
					
						
							|  |  |  | 		utils.EthashCachesOnDiskFlag, | 
					
						
							| 
									
										
										
										
											2020-03-31 16:44:04 +08:00
										 |  |  | 		utils.EthashCachesLockMmapFlag, | 
					
						
							| 
									
										
										
										
											2017-03-06 11:37:32 +02:00
										 |  |  | 		utils.EthashDatasetDirFlag, | 
					
						
							| 
									
										
										
										
											2017-03-06 17:20:25 +02:00
										 |  |  | 		utils.EthashDatasetsInMemoryFlag, | 
					
						
							| 
									
										
										
										
											2017-03-06 11:37:32 +02:00
										 |  |  | 		utils.EthashDatasetsOnDiskFlag, | 
					
						
							| 
									
										
										
										
											2020-03-31 16:44:04 +08:00
										 |  |  | 		utils.EthashDatasetsLockMmapFlag, | 
					
						
							| 
									
										
										
										
											2018-08-21 20:30:06 +03:00
										 |  |  | 		utils.TxPoolLocalsFlag, | 
					
						
							| 
									
										
										
										
											2017-07-05 17:06:05 +03:00
										 |  |  | 		utils.TxPoolNoLocalsFlag, | 
					
						
							| 
									
										
										
										
											2017-07-28 15:09:39 +02:00
										 |  |  | 		utils.TxPoolJournalFlag, | 
					
						
							|  |  |  | 		utils.TxPoolRejournalFlag, | 
					
						
							| 
									
										
										
										
											2017-05-26 13:40:47 +03:00
										 |  |  | 		utils.TxPoolPriceLimitFlag, | 
					
						
							|  |  |  | 		utils.TxPoolPriceBumpFlag, | 
					
						
							|  |  |  | 		utils.TxPoolAccountSlotsFlag, | 
					
						
							|  |  |  | 		utils.TxPoolGlobalSlotsFlag, | 
					
						
							|  |  |  | 		utils.TxPoolAccountQueueFlag, | 
					
						
							|  |  |  | 		utils.TxPoolGlobalQueueFlag, | 
					
						
							|  |  |  | 		utils.TxPoolLifetimeFlag, | 
					
						
							| 
									
										
										
										
											2017-04-12 16:27:23 +02:00
										 |  |  | 		utils.SyncModeFlag, | 
					
						
							| 
									
										
											  
											
												cmd,eth: 16400 Add an option to stop geth once in sync.  WIP for light mode (#17321)
* cmd, eth: Added in the flag to step geth once sync based on input
* cmd, eth: 16400 Add an option to stop geth once in sync.
* cmd: 16400 Add an option to stop geth once in sync. WIP
* cmd/geth/main, les/fletcher: added in light mode support
* cmd/geth/main, les/fletcher: Cleaned Comments and code for light mode
* cmd: 16400 Fixed formatting issue and cleaned code
* cmd, eth, les: 16400 Fixed formatting issues
* cmd, eth, les: Performed gofmt to update formatting
* cmd, eth, les: Fixed bugs resulting formatting
* cmd/geth, eth/, les: switched to downloader event
* eth: Fixed styling and gen_config
* eth/: Fix nil error in config file
* cmd/geth: Updated countdown log
* les/fetcher.go: Removed depcreated channel
* eth/downloader.go: Removed deprecated select
* cmd/geth, cmd/utils: Fixed minor issues
* eth: Reverted config files to proper format
* eth: Fixed typo in config file
* cmd/geth, eth/down: Updated code to use header time stamp
* eth/downloader: Changed the time threshold to 10 minutes
* cmd/geth, eth/downloader: Updated downloading event to pass latest header
* cmd/geth: Updated main to use right timer object
* cmd/geth: Removed unused failed event
* cmd/geth: added in correct time field with type assertion
* cmd/geth, cmd/utils: Updated flag to use boolean
* cmd/geth, cmd/utils, eth/downloader: Cleaned up code based on recommendations
* cmd/geth: Removed unneeded import
* cmd/geth, eth/downloader: fixed event field and suggested changes
* cmd/geth, cmd/utils: Updated flag and linting issue
											
										 
											2019-01-30 02:40:36 -05:00
										 |  |  | 		utils.ExitWhenSyncedFlag, | 
					
						
							| 
									
										
										
										
											2018-02-05 18:40:32 +02:00
										 |  |  | 		utils.GCModeFlag, | 
					
						
							| 
									
										
										
										
											2020-01-19 20:57:56 +01:00
										 |  |  | 		utils.SnapshotFlag, | 
					
						
							| 
									
										
										
										
											2020-05-11 17:58:43 +02:00
										 |  |  | 		utils.TxLookupLimitFlag, | 
					
						
							| 
									
										
										
										
											2019-07-10 08:54:06 +03:00
										 |  |  | 		utils.LightServeFlag, | 
					
						
							|  |  |  | 		utils.LightIngressFlag, | 
					
						
							|  |  |  | 		utils.LightEgressFlag, | 
					
						
							|  |  |  | 		utils.LightMaxPeersFlag, | 
					
						
							| 
									
										
										
										
											2020-07-13 17:02:54 +08:00
										 |  |  | 		utils.LightNoPruneFlag, | 
					
						
							| 
									
										
										
										
											2015-11-10 15:47:19 +02:00
										 |  |  | 		utils.LightKDFFlag, | 
					
						
							| 
									
										
										
										
											2019-07-09 20:30:24 +03:00
										 |  |  | 		utils.UltraLightServersFlag, | 
					
						
							|  |  |  | 		utils.UltraLightFractionFlag, | 
					
						
							|  |  |  | 		utils.UltraLightOnlyAnnounceFlag, | 
					
						
							| 
									
										
										
										
											2021-02-25 20:55:07 +08:00
										 |  |  | 		utils.LightNoSyncServeFlag, | 
					
						
							| 
									
										
										
										
											2018-11-02 13:26:45 -07:00
										 |  |  | 		utils.WhitelistFlag, | 
					
						
							| 
									
										
											  
											
												all: bloom-filter based pruning mechanism (#21724)
* cmd, core, tests: initial state pruner
core: fix db inspector
cmd/geth: add verify-state
cmd/geth: add verification tool
core/rawdb: implement flatdb
cmd, core: fix rebase
core/state: use new contract code layout
core/state/pruner: avoid deleting genesis state
cmd/geth: add helper function
core, cmd: fix extract genesis
core: minor fixes
contracts: remove useless
core/state/snapshot: plugin stacktrie
core: polish
core/state/snapshot: iterate storage concurrently
core/state/snapshot: fix iteration
core: add comments
core/state/snapshot: polish code
core/state: polish
core/state/snapshot: rebase
core/rawdb: add comments
core/rawdb: fix tests
core/rawdb: improve tests
core/state/snapshot: fix concurrent iteration
core/state: run pruning during the recovery
core, trie: implement martin's idea
core, eth: delete flatdb and polish pruner
trie: fix import
core/state/pruner: add log
core/state/pruner: fix issues
core/state/pruner: don't read back
core/state/pruner: fix contract code write
core/state/pruner: check root node presence
cmd, core: polish log
core/state: use HEAD-127 as the target
core/state/snapshot: improve tests
cmd/geth: fix verification tool
cmd/geth: use HEAD as the verification default target
all: replace the bloomfilter with martin's fork
cmd, core: polish code
core, cmd: forcibly delete state root
core/state/pruner: add hash64
core/state/pruner: fix blacklist
core/state: remove blacklist
cmd, core: delete trie clean cache before pruning
cmd, core: fix lint
cmd, core: fix rebase
core/state: fix the special case for clique networks
core/state/snapshot: remove useless code
core/state/pruner: capping the snapshot after pruning
cmd, core, eth: fixes
core/rawdb: update db inspector
cmd/geth: polish code
core/state/pruner: fsync bloom filter
cmd, core: print warning log
core/state/pruner: adjust the parameters for bloom filter
cmd, core: create the bloom filter by size
core: polish
core/state/pruner: sanitize invalid bloomfilter size
cmd: address comments
cmd/geth: address comments
cmd/geth: address comment
core/state/pruner: address comments
core/state/pruner: rename homedir to datadir
cmd, core: address comments
core/state/pruner: address comment
core/state: address comments
core, cmd, tests: address comments
core: address comments
core/state/pruner: release the iterator after each commit
core/state/pruner: improve pruner
cmd, core: adjust bloom paramters
core/state/pruner: fix lint
core/state/pruner: fix tests
core: fix rebase
core/state/pruner: remove atomic rename
core/state/pruner: address comments
all: run go mod tidy
core/state/pruner: avoid false-positive for the middle state roots
core/state/pruner: add checks for middle roots
cmd/geth: replace crit with error
* core/state/pruner: fix lint
* core: drop legacy bloom filter
* core/state/snapshot: improve pruner
* core/state/snapshot: polish concurrent logs to report ETA vs. hashes
* core/state/pruner: add progress report for pruning and compaction too
* core: fix snapshot test API
* core/state: fix some pruning logs
* core/state/pruner: support recovering from bloom flush fail
Co-authored-by: Péter Szilágyi <peterke@gmail.com>
											
										 
											2021-02-08 19:16:30 +08:00
										 |  |  | 		utils.BloomFilterSizeFlag, | 
					
						
							| 
									
										
										
										
											2016-11-09 19:18:20 +02:00
										 |  |  | 		utils.CacheFlag, | 
					
						
							| 
									
										
										
										
											2018-02-05 18:40:32 +02:00
										 |  |  | 		utils.CacheDatabaseFlag, | 
					
						
							| 
									
										
										
										
											2018-11-12 18:47:34 +02:00
										 |  |  | 		utils.CacheTrieFlag, | 
					
						
							| 
									
										
										
										
											2020-07-28 21:30:31 +08:00
										 |  |  | 		utils.CacheTrieJournalFlag, | 
					
						
							|  |  |  | 		utils.CacheTrieRejournalFlag, | 
					
						
							| 
									
										
										
										
											2018-02-05 18:40:32 +02:00
										 |  |  | 		utils.CacheGCFlag, | 
					
						
							| 
									
										
										
										
											2019-11-26 09:48:29 +02:00
										 |  |  | 		utils.CacheSnapshotFlag, | 
					
						
							| 
									
										
										
										
											2019-04-01 11:52:11 +03:00
										 |  |  | 		utils.CacheNoPrefetchFlag, | 
					
						
							| 
									
										
										
										
											2020-11-18 17:51:33 +08:00
										 |  |  | 		utils.CachePreimagesFlag, | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 		utils.ListenPortFlag, | 
					
						
							|  |  |  | 		utils.MaxPeersFlag, | 
					
						
							| 
									
										
										
										
											2015-05-04 17:35:49 +03:00
										 |  |  | 		utils.MaxPendingPeersFlag, | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 		utils.MiningEnabledFlag, | 
					
						
							| 
									
										
										
										
											2018-08-08 12:15:08 +03:00
										 |  |  | 		utils.MinerThreadsFlag, | 
					
						
							|  |  |  | 		utils.MinerNotifyFlag, | 
					
						
							| 
									
										
										
										
											2018-08-15 11:01:49 +03:00
										 |  |  | 		utils.MinerGasTargetFlag, | 
					
						
							| 
									
										
										
										
											2018-08-29 12:21:12 +03:00
										 |  |  | 		utils.MinerGasLimitFlag, | 
					
						
							| 
									
										
										
										
											2018-08-15 11:01:49 +03:00
										 |  |  | 		utils.MinerGasPriceFlag, | 
					
						
							|  |  |  | 		utils.MinerEtherbaseFlag, | 
					
						
							|  |  |  | 		utils.MinerExtraDataFlag, | 
					
						
							| 
									
										
										
										
											2018-08-22 03:56:54 +08:00
										 |  |  | 		utils.MinerRecommitIntervalFlag, | 
					
						
							| 
									
										
										
										
											2018-08-28 21:59:05 +08:00
										 |  |  | 		utils.MinerNoVerfiyFlag, | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 		utils.NATFlag, | 
					
						
							| 
									
										
										
										
											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, | 
					
						
							| 
									
										
										
										
											2020-02-13 14:38:30 +01:00
										 |  |  | 		utils.DNSDiscoveryFlag, | 
					
						
							| 
									
										
										
										
											2021-01-05 14:31:23 +01:00
										 |  |  | 		utils.MainnetFlag, | 
					
						
							| 
									
										
										
										
											2017-10-24 13:40:42 +03:00
										 |  |  | 		utils.DeveloperFlag, | 
					
						
							|  |  |  | 		utils.DeveloperPeriodFlag, | 
					
						
							| 
									
										
										
										
											2020-04-09 11:09:58 +02:00
										 |  |  | 		utils.RopstenFlag, | 
					
						
							| 
									
										
										
										
											2017-05-04 12:36:20 +03:00
										 |  |  | 		utils.RinkebyFlag, | 
					
						
							| 
									
										
										
										
											2018-11-16 17:58:24 +02:00
										 |  |  | 		utils.GoerliFlag, | 
					
						
							| 
									
										
										
										
											2021-02-25 07:26:57 -07:00
										 |  |  | 		utils.YoloV3Flag, | 
					
						
							| 
									
										
										
										
											2017-01-17 11:19:50 +00:00
										 |  |  | 		utils.VMEnableDebugFlag, | 
					
						
							| 
									
										
										
										
											2015-03-18 14:44:58 +07:00
										 |  |  | 		utils.NetworkIdFlag, | 
					
						
							| 
									
										
										
										
											2016-11-25 17:55:06 +02:00
										 |  |  | 		utils.EthStatsURLFlag, | 
					
						
							| 
									
										
										
										
											2016-04-21 12:14:57 +03:00
										 |  |  | 		utils.FakePoWFlag, | 
					
						
							| 
									
										
										
										
											2017-03-08 12:26:19 +01:00
										 |  |  | 		utils.NoCompactionFlag, | 
					
						
							| 
									
										
										
										
											2017-04-06 16:20:42 +02:00
										 |  |  | 		utils.GpoBlocksFlag, | 
					
						
							|  |  |  | 		utils.GpoPercentileFlag, | 
					
						
							| 
									
										
										
										
											2020-09-09 23:38:47 +08:00
										 |  |  | 		utils.GpoMaxGasPriceFlag, | 
					
						
							| 
									
										
										
										
											2018-09-20 09:44:35 +02:00
										 |  |  | 		utils.EWASMInterpreterFlag, | 
					
						
							|  |  |  | 		utils.EVMInterpreterFlag, | 
					
						
							| 
									
										
										
										
											2021-03-26 18:30:10 +01:00
										 |  |  | 		utils.MinerNotifyFullFlag, | 
					
						
							| 
									
										
										
										
											2017-04-12 16:27:23 +02:00
										 |  |  | 		configFileFlag, | 
					
						
							| 
									
										
										
										
											2021-04-16 21:29:22 +02:00
										 |  |  | 		utils.CatalystFlag, | 
					
						
							| 
									
										
										
										
											2015-03-06 03:00:41 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	rpcFlags = []cli.Flag{ | 
					
						
							| 
									
										
										
										
											2020-05-05 10:19:17 +02:00
										 |  |  | 		utils.HTTPEnabledFlag, | 
					
						
							|  |  |  | 		utils.HTTPListenAddrFlag, | 
					
						
							|  |  |  | 		utils.HTTPPortFlag, | 
					
						
							|  |  |  | 		utils.HTTPCORSDomainFlag, | 
					
						
							|  |  |  | 		utils.HTTPVirtualHostsFlag, | 
					
						
							|  |  |  | 		utils.LegacyRPCEnabledFlag, | 
					
						
							|  |  |  | 		utils.LegacyRPCListenAddrFlag, | 
					
						
							|  |  |  | 		utils.LegacyRPCPortFlag, | 
					
						
							|  |  |  | 		utils.LegacyRPCCORSDomainFlag, | 
					
						
							|  |  |  | 		utils.LegacyRPCVirtualHostsFlag, | 
					
						
							| 
									
										
										
										
											2021-02-24 14:07:58 +01:00
										 |  |  | 		utils.LegacyRPCApiFlag, | 
					
						
							| 
									
										
										
										
											2019-01-21 06:38:13 -08:00
										 |  |  | 		utils.GraphQLEnabledFlag, | 
					
						
							|  |  |  | 		utils.GraphQLCORSDomainFlag, | 
					
						
							|  |  |  | 		utils.GraphQLVirtualHostsFlag, | 
					
						
							| 
									
										
										
										
											2020-05-05 10:19:17 +02:00
										 |  |  | 		utils.HTTPApiFlag, | 
					
						
							| 
									
										
										
										
											2021-02-02 10:05:46 +01:00
										 |  |  | 		utils.HTTPPathPrefixFlag, | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | 		utils.WSEnabledFlag, | 
					
						
							|  |  |  | 		utils.WSListenAddrFlag, | 
					
						
							|  |  |  | 		utils.WSPortFlag, | 
					
						
							|  |  |  | 		utils.WSApiFlag, | 
					
						
							|  |  |  | 		utils.WSAllowedOriginsFlag, | 
					
						
							| 
									
										
										
										
											2021-02-02 10:05:46 +01:00
										 |  |  | 		utils.WSPathPrefixFlag, | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | 		utils.IPCDisabledFlag, | 
					
						
							|  |  |  | 		utils.IPCPathFlag, | 
					
						
							| 
									
										
										
										
											2019-04-08 13:49:52 +02:00
										 |  |  | 		utils.InsecureUnlockAllowedFlag, | 
					
						
							| 
									
										
										
										
											2020-10-13 13:33:10 +02:00
										 |  |  | 		utils.RPCGlobalGasCapFlag, | 
					
						
							|  |  |  | 		utils.RPCGlobalTxFeeCapFlag, | 
					
						
							| 
									
										
										
										
											2021-02-23 13:09:19 +01:00
										 |  |  | 		utils.AllowUnprotectedTxs, | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-06-21 10:49:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-02 14:51:02 +02:00
										 |  |  | 	metricsFlags = []cli.Flag{ | 
					
						
							| 
									
										
										
										
											2019-03-25 10:01:18 +02:00
										 |  |  | 		utils.MetricsEnabledFlag, | 
					
						
							|  |  |  | 		utils.MetricsEnabledExpensiveFlag, | 
					
						
							| 
									
										
										
										
											2020-07-03 12:12:22 -05:00
										 |  |  | 		utils.MetricsHTTPFlag, | 
					
						
							|  |  |  | 		utils.MetricsPortFlag, | 
					
						
							| 
									
										
										
										
											2018-07-02 14:51:02 +02:00
										 |  |  | 		utils.MetricsEnableInfluxDBFlag, | 
					
						
							|  |  |  | 		utils.MetricsInfluxDBEndpointFlag, | 
					
						
							|  |  |  | 		utils.MetricsInfluxDBDatabaseFlag, | 
					
						
							|  |  |  | 		utils.MetricsInfluxDBUsernameFlag, | 
					
						
							|  |  |  | 		utils.MetricsInfluxDBPasswordFlag, | 
					
						
							| 
									
										
										
										
											2019-01-29 09:14:24 +01:00
										 |  |  | 		utils.MetricsInfluxDBTagsFlag, | 
					
						
							| 
									
										
										
										
											2018-07-02 14:51:02 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func init() { | 
					
						
							|  |  |  | 	// Initialize the CLI app and start Geth | 
					
						
							|  |  |  | 	app.Action = geth | 
					
						
							|  |  |  | 	app.HideVersion = true // we have a command to print the version | 
					
						
							| 
									
										
										
										
											2021-01-04 18:52:23 +08:00
										 |  |  | 	app.Copyright = "Copyright 2013-2021 The go-ethereum Authors" | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | 	app.Commands = []cli.Command{ | 
					
						
							|  |  |  | 		// See chaincmd.go: | 
					
						
							|  |  |  | 		initCommand, | 
					
						
							|  |  |  | 		importCommand, | 
					
						
							|  |  |  | 		exportCommand, | 
					
						
							| 
									
										
										
										
											2018-03-26 13:34:21 +03:00
										 |  |  | 		importPreimagesCommand, | 
					
						
							|  |  |  | 		exportPreimagesCommand, | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | 		removedbCommand, | 
					
						
							|  |  |  | 		dumpCommand, | 
					
						
							| 
									
										
										
										
											2020-02-04 04:49:13 -06:00
										 |  |  | 		dumpGenesisCommand, | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | 		// See accountcmd.go: | 
					
						
							|  |  |  | 		accountCommand, | 
					
						
							|  |  |  | 		walletCommand, | 
					
						
							|  |  |  | 		// See consolecmd.go: | 
					
						
							|  |  |  | 		consoleCommand, | 
					
						
							|  |  |  | 		attachCommand, | 
					
						
							|  |  |  | 		javascriptCommand, | 
					
						
							|  |  |  | 		// See misccmd.go: | 
					
						
							| 
									
										
										
										
											2017-08-03 06:32:47 +02:00
										 |  |  | 		makecacheCommand, | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | 		makedagCommand, | 
					
						
							|  |  |  | 		versionCommand, | 
					
						
							| 
									
										
										
										
											2020-12-04 15:01:47 +01:00
										 |  |  | 		versionCheckCommand, | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | 		licenseCommand, | 
					
						
							|  |  |  | 		// See config.go | 
					
						
							|  |  |  | 		dumpConfigCommand, | 
					
						
							| 
									
										
										
										
											2021-02-23 11:27:32 +01:00
										 |  |  | 		// see dbcmd.go | 
					
						
							|  |  |  | 		dbCommand, | 
					
						
							| 
									
										
										
										
											2020-05-05 10:19:17 +02:00
										 |  |  | 		// See cmd/utils/flags_legacy.go | 
					
						
							|  |  |  | 		utils.ShowDeprecated, | 
					
						
							| 
									
										
											  
											
												all: bloom-filter based pruning mechanism (#21724)
* cmd, core, tests: initial state pruner
core: fix db inspector
cmd/geth: add verify-state
cmd/geth: add verification tool
core/rawdb: implement flatdb
cmd, core: fix rebase
core/state: use new contract code layout
core/state/pruner: avoid deleting genesis state
cmd/geth: add helper function
core, cmd: fix extract genesis
core: minor fixes
contracts: remove useless
core/state/snapshot: plugin stacktrie
core: polish
core/state/snapshot: iterate storage concurrently
core/state/snapshot: fix iteration
core: add comments
core/state/snapshot: polish code
core/state: polish
core/state/snapshot: rebase
core/rawdb: add comments
core/rawdb: fix tests
core/rawdb: improve tests
core/state/snapshot: fix concurrent iteration
core/state: run pruning during the recovery
core, trie: implement martin's idea
core, eth: delete flatdb and polish pruner
trie: fix import
core/state/pruner: add log
core/state/pruner: fix issues
core/state/pruner: don't read back
core/state/pruner: fix contract code write
core/state/pruner: check root node presence
cmd, core: polish log
core/state: use HEAD-127 as the target
core/state/snapshot: improve tests
cmd/geth: fix verification tool
cmd/geth: use HEAD as the verification default target
all: replace the bloomfilter with martin's fork
cmd, core: polish code
core, cmd: forcibly delete state root
core/state/pruner: add hash64
core/state/pruner: fix blacklist
core/state: remove blacklist
cmd, core: delete trie clean cache before pruning
cmd, core: fix lint
cmd, core: fix rebase
core/state: fix the special case for clique networks
core/state/snapshot: remove useless code
core/state/pruner: capping the snapshot after pruning
cmd, core, eth: fixes
core/rawdb: update db inspector
cmd/geth: polish code
core/state/pruner: fsync bloom filter
cmd, core: print warning log
core/state/pruner: adjust the parameters for bloom filter
cmd, core: create the bloom filter by size
core: polish
core/state/pruner: sanitize invalid bloomfilter size
cmd: address comments
cmd/geth: address comments
cmd/geth: address comment
core/state/pruner: address comments
core/state/pruner: rename homedir to datadir
cmd, core: address comments
core/state/pruner: address comment
core/state: address comments
core, cmd, tests: address comments
core: address comments
core/state/pruner: release the iterator after each commit
core/state/pruner: improve pruner
cmd, core: adjust bloom paramters
core/state/pruner: fix lint
core/state/pruner: fix tests
core: fix rebase
core/state/pruner: remove atomic rename
core/state/pruner: address comments
all: run go mod tidy
core/state/pruner: avoid false-positive for the middle state roots
core/state/pruner: add checks for middle roots
cmd/geth: replace crit with error
* core/state/pruner: fix lint
* core: drop legacy bloom filter
* core/state/snapshot: improve pruner
* core/state/snapshot: polish concurrent logs to report ETA vs. hashes
* core/state/pruner: add progress report for pruning and compaction too
* core: fix snapshot test API
* core/state: fix some pruning logs
* core/state/pruner: support recovering from bloom flush fail
Co-authored-by: Péter Szilágyi <peterke@gmail.com>
											
										 
											2021-02-08 19:16:30 +08:00
										 |  |  | 		// See snapshot.go | 
					
						
							|  |  |  | 		snapshotCommand, | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-08-11 13:29:05 +02:00
										 |  |  | 	sort.Sort(cli.CommandsByName(app.Commands)) | 
					
						
							| 
									
										
										
										
											2017-05-03 12:26:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	app.Flags = append(app.Flags, nodeFlags...) | 
					
						
							|  |  |  | 	app.Flags = append(app.Flags, rpcFlags...) | 
					
						
							|  |  |  | 	app.Flags = append(app.Flags, consoleFlags...) | 
					
						
							| 
									
										
										
										
											2016-01-26 14:39:21 +01:00
										 |  |  | 	app.Flags = append(app.Flags, debug.Flags...) | 
					
						
							| 
									
										
										
										
											2018-07-02 14:51:02 +02:00
										 |  |  | 	app.Flags = append(app.Flags, metricsFlags...) | 
					
						
							| 
									
										
										
										
											2016-01-26 14:39:21 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-20 18:59:41 +03:00
										 |  |  | 	app.Before = func(ctx *cli.Context) error { | 
					
						
							| 
									
										
										
										
											2020-01-21 13:57:33 +01:00
										 |  |  | 		return debug.Setup(ctx) | 
					
						
							| 
									
										
										
										
											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() | 
					
						
							| 
									
										
										
										
											2020-05-19 10:44:46 +02:00
										 |  |  | 		prompt.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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-15 20:54:16 +08:00
										 |  |  | // prepare manipulates memory cache allowance and setups metric system. | 
					
						
							|  |  |  | // This function should be called before launching devp2p stack. | 
					
						
							|  |  |  | func prepare(ctx *cli.Context) { | 
					
						
							| 
									
										
										
										
											2020-04-09 11:09:58 +02:00
										 |  |  | 	// If we're running a known preset, log it for convenience. | 
					
						
							|  |  |  | 	switch { | 
					
						
							|  |  |  | 	case ctx.GlobalIsSet(utils.RopstenFlag.Name): | 
					
						
							|  |  |  | 		log.Info("Starting Geth on Ropsten testnet...") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	case ctx.GlobalIsSet(utils.RinkebyFlag.Name): | 
					
						
							|  |  |  | 		log.Info("Starting Geth on Rinkeby testnet...") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	case ctx.GlobalIsSet(utils.GoerliFlag.Name): | 
					
						
							|  |  |  | 		log.Info("Starting Geth on Görli testnet...") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-25 07:26:57 -07:00
										 |  |  | 	case ctx.GlobalIsSet(utils.YoloV3Flag.Name): | 
					
						
							|  |  |  | 		log.Info("Starting Geth on YOLOv3 testnet...") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-09 11:09:58 +02:00
										 |  |  | 	case ctx.GlobalIsSet(utils.DeveloperFlag.Name): | 
					
						
							|  |  |  | 		log.Info("Starting Geth in ephemeral dev mode...") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	case !ctx.GlobalIsSet(utils.NetworkIdFlag.Name): | 
					
						
							|  |  |  | 		log.Info("Starting Geth on Ethereum mainnet...") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-08-15 20:54:16 +08:00
										 |  |  | 	// If we're a full node on mainnet without --cache specified, bump default cache allowance | 
					
						
							|  |  |  | 	if ctx.GlobalString(utils.SyncModeFlag.Name) != "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) && !ctx.GlobalIsSet(utils.NetworkIdFlag.Name) { | 
					
						
							|  |  |  | 		// Make sure we're not on any supported preconfigured testnet either | 
					
						
							| 
									
										
										
										
											2021-02-24 14:07:58 +01:00
										 |  |  | 		if !ctx.GlobalIsSet(utils.RopstenFlag.Name) && !ctx.GlobalIsSet(utils.RinkebyFlag.Name) && !ctx.GlobalIsSet(utils.GoerliFlag.Name) && !ctx.GlobalIsSet(utils.DeveloperFlag.Name) { | 
					
						
							| 
									
										
										
										
											2019-08-15 20:54:16 +08:00
										 |  |  | 			// Nope, we're really on mainnet. Bump that cache up! | 
					
						
							|  |  |  | 			log.Info("Bumping default cache on mainnet", "provided", ctx.GlobalInt(utils.CacheFlag.Name), "updated", 4096) | 
					
						
							|  |  |  | 			ctx.GlobalSet(utils.CacheFlag.Name, strconv.Itoa(4096)) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	// If we're running a light client on any network, drop the cache to some meaningfully low amount | 
					
						
							|  |  |  | 	if ctx.GlobalString(utils.SyncModeFlag.Name) == "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) { | 
					
						
							|  |  |  | 		log.Info("Dropping default light client cache", "provided", ctx.GlobalInt(utils.CacheFlag.Name), "updated", 128) | 
					
						
							|  |  |  | 		ctx.GlobalSet(utils.CacheFlag.Name, strconv.Itoa(128)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Start metrics export if enabled | 
					
						
							|  |  |  | 	utils.SetupMetrics(ctx) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Start system runtime metrics collection | 
					
						
							|  |  |  | 	go metrics.CollectProcessMetrics(3 * time.Second) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 { | 
					
						
							| 
									
										
										
										
											2018-07-26 03:57:20 -07:00
										 |  |  | 	if args := ctx.Args(); len(args) > 0 { | 
					
						
							|  |  |  | 		return fmt.Errorf("invalid command: %q", args[0]) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-15 20:54:16 +08:00
										 |  |  | 	prepare(ctx) | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | 	stack, backend := makeFullNode(ctx) | 
					
						
							|  |  |  | 	defer stack.Close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	startNode(ctx, stack, backend) | 
					
						
							|  |  |  | 	stack.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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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. | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | func startNode(ctx *cli.Context, stack *node.Node, backend ethapi.Backend) { | 
					
						
							| 
									
										
										
										
											2018-04-23 15:20:39 +02:00
										 |  |  | 	debug.Memsize.Add("node", stack) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-17 18:33:25 +02:00
										 |  |  | 	// Start up the node itself | 
					
						
							| 
									
										
										
										
											2021-01-19 08:26:42 +00:00
										 |  |  | 	utils.StartNode(ctx, stack) | 
					
						
							| 
									
										
										
										
											2015-07-01 16:15:02 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-17 18:33:25 +02:00
										 |  |  | 	// Unlock any account specifically requested | 
					
						
							| 
									
										
										
										
											2019-04-04 19:03:10 +08:00
										 |  |  | 	unlockAccounts(ctx, stack) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-08 20:25:52 +02:00
										 |  |  | 	// Register wallet event handlers to open and auto-derive wallets | 
					
						
							|  |  |  | 	events := make(chan accounts.WalletEvent, 16) | 
					
						
							|  |  |  | 	stack.AccountManager().Subscribe(events) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												all: on-chain oracle checkpoint syncing (#19543)
* all: implement simple checkpoint syncing
cmd, les, node: remove callback mechanism
cmd, node: remove callback definition
les: simplify the registrar
les: expose checkpoint rpc services in the light client
les, light: don't store untrusted receipt
cmd, contracts, les: discard stale checkpoint
cmd, contracts/registrar: loose restriction of registeration
cmd, contracts: add replay-protection
all: off-chain multi-signature contract
params: deploy checkpoint contract for rinkeby
cmd/registrar: add raw signing mode for registrar
cmd/registrar, contracts/registrar, les: fixed messages
* cmd/registrar, contracts/registrar: fix lints
* accounts/abi/bind, les: address comments
* cmd, contracts, les, light, params: minor checkpoint sync cleanups
* cmd, eth, les, light: move checkpoint config to config file
* cmd, eth, les, params: address comments
* eth, les, params: address comments
* cmd: polish up the checkpoint admin CLI
* cmd, contracts, params: deploy new version contract
* cmd/checkpoint-admin: add another flag for clef mode signing
* cmd, contracts, les: rename and regen checkpoint oracle with abigen
											
										 
											2019-06-28 15:34:02 +08:00
										 |  |  | 	// Create a client to interact with local geth node. | 
					
						
							|  |  |  | 	rpcClient, err := stack.Attach() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		utils.Fatalf("Failed to attach to self: %v", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	ethClient := ethclient.NewClient(rpcClient) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	go func() { | 
					
						
							| 
									
										
										
										
											2017-08-01 17:45:17 +02:00
										 |  |  | 		// Open any wallets already attached | 
					
						
							| 
									
										
										
										
											2017-02-09 14:39:26 +02:00
										 |  |  | 		for _, wallet := range stack.AccountManager().Wallets() { | 
					
						
							|  |  |  | 			if err := wallet.Open(""); err != nil { | 
					
						
							| 
									
										
										
										
											2017-03-02 15:06:16 +02:00
										 |  |  | 				log.Warn("Failed to open wallet", "url", wallet.URL(), "err", err) | 
					
						
							| 
									
										
										
										
											2017-02-09 14:39:26 +02:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-02-08 20:25:52 +02:00
										 |  |  | 		// Listen for wallet event till termination | 
					
						
							|  |  |  | 		for event := range events { | 
					
						
							| 
									
										
										
										
											2017-08-01 17:45:17 +02:00
										 |  |  | 			switch event.Kind { | 
					
						
							|  |  |  | 			case accounts.WalletArrived: | 
					
						
							| 
									
										
										
										
											2017-02-08 20:25:52 +02:00
										 |  |  | 				if err := event.Wallet.Open(""); err != nil { | 
					
						
							| 
									
										
										
										
											2017-03-02 15:06:16 +02:00
										 |  |  | 					log.Warn("New wallet appeared, failed to open", "url", event.Wallet.URL(), "err", err) | 
					
						
							| 
									
										
										
										
											2017-08-01 17:45:17 +02:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			case accounts.WalletOpened: | 
					
						
							| 
									
										
										
										
											2017-08-09 12:51:16 +03:00
										 |  |  | 				status, _ := event.Wallet.Status() | 
					
						
							|  |  |  | 				log.Info("New wallet appeared", "url", event.Wallet.URL(), "status", status) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 13:09:08 +03:00
										 |  |  | 				var derivationPaths []accounts.DerivationPath | 
					
						
							| 
									
										
										
										
											2017-08-01 17:45:17 +02:00
										 |  |  | 				if event.Wallet.URL().Scheme == "ledger" { | 
					
						
							| 
									
										
										
										
											2019-04-10 13:09:08 +03:00
										 |  |  | 					derivationPaths = append(derivationPaths, accounts.LegacyLedgerBaseDerivationPath) | 
					
						
							| 
									
										
										
										
											2017-02-08 20:25:52 +02:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2019-04-10 13:09:08 +03:00
										 |  |  | 				derivationPaths = append(derivationPaths, accounts.DefaultBaseDerivationPath) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												all: on-chain oracle checkpoint syncing (#19543)
* all: implement simple checkpoint syncing
cmd, les, node: remove callback mechanism
cmd, node: remove callback definition
les: simplify the registrar
les: expose checkpoint rpc services in the light client
les, light: don't store untrusted receipt
cmd, contracts, les: discard stale checkpoint
cmd, contracts/registrar: loose restriction of registeration
cmd, contracts: add replay-protection
all: off-chain multi-signature contract
params: deploy checkpoint contract for rinkeby
cmd/registrar: add raw signing mode for registrar
cmd/registrar, contracts/registrar, les: fixed messages
* cmd/registrar, contracts/registrar: fix lints
* accounts/abi/bind, les: address comments
* cmd, contracts, les, light, params: minor checkpoint sync cleanups
* cmd, eth, les, light: move checkpoint config to config file
* cmd, eth, les, params: address comments
* eth, les, params: address comments
* cmd: polish up the checkpoint admin CLI
* cmd, contracts, params: deploy new version contract
* cmd/checkpoint-admin: add another flag for clef mode signing
* cmd, contracts, les: rename and regen checkpoint oracle with abigen
											
										 
											2019-06-28 15:34:02 +08:00
										 |  |  | 				event.Wallet.SelfDerive(derivationPaths, ethClient) | 
					
						
							| 
									
										
										
										
											2017-08-01 17:45:17 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			case accounts.WalletDropped: | 
					
						
							| 
									
										
										
										
											2017-03-02 15:06:16 +02:00
										 |  |  | 				log.Info("Old wallet dropped", "url", event.Wallet.URL()) | 
					
						
							| 
									
										
										
										
											2017-02-09 14:39:26 +02:00
										 |  |  | 				event.Wallet.Close() | 
					
						
							| 
									
										
										
										
											2017-02-08 20:25:52 +02:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}() | 
					
						
							| 
									
										
											  
											
												cmd,eth: 16400 Add an option to stop geth once in sync.  WIP for light mode (#17321)
* cmd, eth: Added in the flag to step geth once sync based on input
* cmd, eth: 16400 Add an option to stop geth once in sync.
* cmd: 16400 Add an option to stop geth once in sync. WIP
* cmd/geth/main, les/fletcher: added in light mode support
* cmd/geth/main, les/fletcher: Cleaned Comments and code for light mode
* cmd: 16400 Fixed formatting issue and cleaned code
* cmd, eth, les: 16400 Fixed formatting issues
* cmd, eth, les: Performed gofmt to update formatting
* cmd, eth, les: Fixed bugs resulting formatting
* cmd/geth, eth/, les: switched to downloader event
* eth: Fixed styling and gen_config
* eth/: Fix nil error in config file
* cmd/geth: Updated countdown log
* les/fetcher.go: Removed depcreated channel
* eth/downloader.go: Removed deprecated select
* cmd/geth, cmd/utils: Fixed minor issues
* eth: Reverted config files to proper format
* eth: Fixed typo in config file
* cmd/geth, eth/down: Updated code to use header time stamp
* eth/downloader: Changed the time threshold to 10 minutes
* cmd/geth, eth/downloader: Updated downloading event to pass latest header
* cmd/geth: Updated main to use right timer object
* cmd/geth: Removed unused failed event
* cmd/geth: added in correct time field with type assertion
* cmd/geth, cmd/utils: Updated flag to use boolean
* cmd/geth, cmd/utils, eth/downloader: Cleaned up code based on recommendations
* cmd/geth: Removed unneeded import
* cmd/geth, eth/downloader: fixed event field and suggested changes
* cmd/geth, cmd/utils: Updated flag and linting issue
											
										 
											2019-01-30 02:40:36 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Spawn a standalone goroutine for status synchronization monitoring, | 
					
						
							|  |  |  | 	// close the node when synchronization is complete if user required. | 
					
						
							|  |  |  | 	if ctx.GlobalBool(utils.ExitWhenSyncedFlag.Name) { | 
					
						
							|  |  |  | 		go func() { | 
					
						
							|  |  |  | 			sub := stack.EventMux().Subscribe(downloader.DoneEvent{}) | 
					
						
							|  |  |  | 			defer sub.Unsubscribe() | 
					
						
							|  |  |  | 			for { | 
					
						
							|  |  |  | 				event := <-sub.Chan() | 
					
						
							|  |  |  | 				if event == nil { | 
					
						
							|  |  |  | 					continue | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				done, ok := event.Data.(downloader.DoneEvent) | 
					
						
							|  |  |  | 				if !ok { | 
					
						
							|  |  |  | 					continue | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2019-04-02 22:28:48 +02:00
										 |  |  | 				if timestamp := time.Unix(int64(done.Latest.Time), 0); time.Since(timestamp) < 10*time.Minute { | 
					
						
							| 
									
										
											  
											
												cmd,eth: 16400 Add an option to stop geth once in sync.  WIP for light mode (#17321)
* cmd, eth: Added in the flag to step geth once sync based on input
* cmd, eth: 16400 Add an option to stop geth once in sync.
* cmd: 16400 Add an option to stop geth once in sync. WIP
* cmd/geth/main, les/fletcher: added in light mode support
* cmd/geth/main, les/fletcher: Cleaned Comments and code for light mode
* cmd: 16400 Fixed formatting issue and cleaned code
* cmd, eth, les: 16400 Fixed formatting issues
* cmd, eth, les: Performed gofmt to update formatting
* cmd, eth, les: Fixed bugs resulting formatting
* cmd/geth, eth/, les: switched to downloader event
* eth: Fixed styling and gen_config
* eth/: Fix nil error in config file
* cmd/geth: Updated countdown log
* les/fetcher.go: Removed depcreated channel
* eth/downloader.go: Removed deprecated select
* cmd/geth, cmd/utils: Fixed minor issues
* eth: Reverted config files to proper format
* eth: Fixed typo in config file
* cmd/geth, eth/down: Updated code to use header time stamp
* eth/downloader: Changed the time threshold to 10 minutes
* cmd/geth, eth/downloader: Updated downloading event to pass latest header
* cmd/geth: Updated main to use right timer object
* cmd/geth: Removed unused failed event
* cmd/geth: added in correct time field with type assertion
* cmd/geth, cmd/utils: Updated flag to use boolean
* cmd/geth, cmd/utils, eth/downloader: Cleaned up code based on recommendations
* cmd/geth: Removed unneeded import
* cmd/geth, eth/downloader: fixed event field and suggested changes
* cmd/geth, cmd/utils: Updated flag and linting issue
											
										 
											2019-01-30 02:40:36 -05:00
										 |  |  | 					log.Info("Synchronisation completed", "latestnum", done.Latest.Number, "latesthash", done.Latest.Hash(), | 
					
						
							|  |  |  | 						"age", common.PrettyAge(timestamp)) | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | 					stack.Close() | 
					
						
							| 
									
										
											  
											
												cmd,eth: 16400 Add an option to stop geth once in sync.  WIP for light mode (#17321)
* cmd, eth: Added in the flag to step geth once sync based on input
* cmd, eth: 16400 Add an option to stop geth once in sync.
* cmd: 16400 Add an option to stop geth once in sync. WIP
* cmd/geth/main, les/fletcher: added in light mode support
* cmd/geth/main, les/fletcher: Cleaned Comments and code for light mode
* cmd: 16400 Fixed formatting issue and cleaned code
* cmd, eth, les: 16400 Fixed formatting issues
* cmd, eth, les: Performed gofmt to update formatting
* cmd, eth, les: Fixed bugs resulting formatting
* cmd/geth, eth/, les: switched to downloader event
* eth: Fixed styling and gen_config
* eth/: Fix nil error in config file
* cmd/geth: Updated countdown log
* les/fetcher.go: Removed depcreated channel
* eth/downloader.go: Removed deprecated select
* cmd/geth, cmd/utils: Fixed minor issues
* eth: Reverted config files to proper format
* eth: Fixed typo in config file
* cmd/geth, eth/down: Updated code to use header time stamp
* eth/downloader: Changed the time threshold to 10 minutes
* cmd/geth, eth/downloader: Updated downloading event to pass latest header
* cmd/geth: Updated main to use right timer object
* cmd/geth: Removed unused failed event
* cmd/geth: added in correct time field with type assertion
* cmd/geth, cmd/utils: Updated flag to use boolean
* cmd/geth, cmd/utils, eth/downloader: Cleaned up code based on recommendations
* cmd/geth: Removed unneeded import
* cmd/geth, eth/downloader: fixed event field and suggested changes
* cmd/geth, cmd/utils: Updated flag and linting issue
											
										 
											2019-01-30 02:40:36 -05:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-02 19:06:43 +02:00
										 |  |  | 	// Start auxiliary services if enabled | 
					
						
							| 
									
										
										
										
											2017-10-24 13:40:42 +03:00
										 |  |  | 	if ctx.GlobalBool(utils.MiningEnabledFlag.Name) || ctx.GlobalBool(utils.DeveloperFlag.Name) { | 
					
						
							| 
									
										
										
										
											2017-06-22 14:58:07 +03:00
										 |  |  | 		// Mining only makes sense if a full Ethereum node is running | 
					
						
							| 
									
										
										
										
											2018-08-15 11:01:49 +03:00
										 |  |  | 		if ctx.GlobalString(utils.SyncModeFlag.Name) == "light" { | 
					
						
							| 
									
										
										
										
											2018-01-12 11:59:18 +02:00
										 |  |  | 			utils.Fatalf("Light clients do not support mining") | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | 		ethBackend, ok := backend.(*eth.EthAPIBackend) | 
					
						
							|  |  |  | 		if !ok { | 
					
						
							| 
									
										
										
										
											2018-01-12 11:59:18 +02:00
										 |  |  | 			utils.Fatalf("Ethereum service not running: %v", err) | 
					
						
							| 
									
										
										
										
											2015-12-16 04:26:23 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-06-22 14:58:07 +03:00
										 |  |  | 		// Set the gas price to the limits from the CLI and start mining | 
					
						
							| 
									
										
										
										
											2020-05-05 10:19:17 +02:00
										 |  |  | 		gasprice := utils.GlobalBig(ctx, utils.MinerGasPriceFlag.Name) | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | 		ethBackend.TxPool().SetGasPrice(gasprice) | 
					
						
							|  |  |  | 		// start mining | 
					
						
							| 
									
										
										
										
											2020-05-05 10:19:17 +02:00
										 |  |  | 		threads := ctx.GlobalInt(utils.MinerThreadsFlag.Name) | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | 		if err := ethBackend.StartMining(threads); err != nil { | 
					
						
							| 
									
										
										
										
											2017-02-22 17:22:50 +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
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-04-04 19:03:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | // unlockAccounts unlocks any account specifically requested. | 
					
						
							|  |  |  | func unlockAccounts(ctx *cli.Context, stack *node.Node) { | 
					
						
							|  |  |  | 	var unlocks []string | 
					
						
							|  |  |  | 	inputs := strings.Split(ctx.GlobalString(utils.UnlockedAccountFlag.Name), ",") | 
					
						
							|  |  |  | 	for _, input := range inputs { | 
					
						
							|  |  |  | 		if trimmed := strings.TrimSpace(input); trimmed != "" { | 
					
						
							|  |  |  | 			unlocks = append(unlocks, trimmed) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	// Short circuit if there is no account to unlock. | 
					
						
							|  |  |  | 	if len(unlocks) == 0 { | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	// If insecure account unlocking is not allowed if node's APIs are exposed to external. | 
					
						
							|  |  |  | 	// Print warning log to user and skip unlocking. | 
					
						
							|  |  |  | 	if !stack.Config().InsecureUnlockAllowed && stack.Config().ExtRPCEnabled() { | 
					
						
							|  |  |  | 		utils.Fatalf("Account unlock with HTTP access is forbidden!") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) | 
					
						
							|  |  |  | 	passwords := utils.MakePasswordList(ctx) | 
					
						
							|  |  |  | 	for i, account := range unlocks { | 
					
						
							|  |  |  | 		unlockAccount(ks, account, i, passwords) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |