|
|
|
// 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
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
// GNU General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
|
|
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
// geth is the official command-line client for Ethereum.
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"sort"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/accounts"
|
|
|
|
"github.com/ethereum/go-ethereum/accounts/keystore"
|
|
|
|
"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
6 years ago
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
|
|
"github.com/ethereum/go-ethereum/console/prompt"
|
|
|
|
"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
6 years ago
|
|
|
"github.com/ethereum/go-ethereum/eth/downloader"
|
|
|
|
"github.com/ethereum/go-ethereum/ethclient"
|
|
|
|
"github.com/ethereum/go-ethereum/internal/debug"
|
|
|
|
"github.com/ethereum/go-ethereum/internal/ethapi"
|
|
|
|
"github.com/ethereum/go-ethereum/internal/flags"
|
|
|
|
"github.com/ethereum/go-ethereum/log"
|
|
|
|
"github.com/ethereum/go-ethereum/metrics"
|
|
|
|
"github.com/ethereum/go-ethereum/node"
|
|
|
|
"go.uber.org/automaxprocs/maxprocs"
|
|
|
|
|
|
|
|
// Force-load the tracer engines to trigger registration
|
|
|
|
_ "github.com/ethereum/go-ethereum/eth/tracers/js"
|
|
|
|
_ "github.com/ethereum/go-ethereum/eth/tracers/native"
|
|
|
|
|
|
|
|
"github.com/urfave/cli/v2"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
clientIdentifier = "geth" // Client identifier to advertise over the network
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
// flags that configure the node
|
|
|
|
nodeFlags = flags.Merge([]cli.Flag{
|
|
|
|
utils.IdentityFlag,
|
|
|
|
utils.UnlockedAccountFlag,
|
|
|
|
utils.PasswordFileFlag,
|
|
|
|
utils.BootnodesFlag,
|
|
|
|
utils.MinFreeDiskSpaceFlag,
|
|
|
|
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
6 years ago
|
|
|
utils.ExternalSignerFlag,
|
|
|
|
utils.NoUSBFlag,
|
|
|
|
utils.USBFlag,
|
|
|
|
utils.SmartCardDaemonPathFlag,
|
|
|
|
utils.OverrideCancun,
|
|
|
|
utils.OverrideVerkle,
|
|
|
|
utils.EnablePersonal,
|
|
|
|
utils.TxPoolLocalsFlag,
|
|
|
|
utils.TxPoolNoLocalsFlag,
|
|
|
|
utils.TxPoolJournalFlag,
|
|
|
|
utils.TxPoolRejournalFlag,
|
|
|
|
utils.TxPoolPriceLimitFlag,
|
|
|
|
utils.TxPoolPriceBumpFlag,
|
|
|
|
utils.TxPoolAccountSlotsFlag,
|
|
|
|
utils.TxPoolGlobalSlotsFlag,
|
|
|
|
utils.TxPoolAccountQueueFlag,
|
|
|
|
utils.TxPoolGlobalQueueFlag,
|
|
|
|
utils.TxPoolLifetimeFlag,
|
|
|
|
utils.BlobPoolDataDirFlag,
|
|
|
|
utils.BlobPoolDataCapFlag,
|
|
|
|
utils.BlobPoolPriceBumpFlag,
|
|
|
|
utils.SyncModeFlag,
|
|
|
|
utils.SyncTargetFlag,
|
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
6 years ago
|
|
|
utils.ExitWhenSyncedFlag,
|
|
|
|
utils.GCModeFlag,
|
|
|
|
utils.SnapshotFlag,
|
|
|
|
utils.TxLookupLimitFlag,
|
all: activate pbss as experimental feature (#26274)
* all: activate pbss
* core/rawdb: fix compilation error
* cma, core, eth, les, trie: address comments
* cmd, core, eth, trie: polish code
* core, cmd, eth: address comments
* cmd, core, eth, les, light, tests: address comment
* cmd/utils: shorten log message
* trie/triedb/pathdb: limit node buffer size to 1gb
* cmd/utils: fix opening non-existing db
* cmd/utils: rename flag name
* cmd, core: group chain history flags and fix tests
* core, eth, trie: fix memory leak in snapshot generation
* cmd, eth, internal: deprecate flags
* all: enable state tests for pathdb, fixes
* cmd, core: polish code
* trie/triedb/pathdb: limit the node buffer size to 256mb
---------
Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Péter Szilágyi <peterke@gmail.com>
1 year ago
|
|
|
utils.TransactionHistoryFlag,
|
|
|
|
utils.StateSchemeFlag,
|
|
|
|
utils.StateHistoryFlag,
|
|
|
|
utils.LightServeFlag,
|
|
|
|
utils.LightIngressFlag,
|
|
|
|
utils.LightEgressFlag,
|
|
|
|
utils.LightMaxPeersFlag,
|
|
|
|
utils.LightNoPruneFlag,
|
|
|
|
utils.LightKDFFlag,
|
|
|
|
utils.LightNoSyncServeFlag,
|
|
|
|
utils.EthRequiredBlocksFlag,
|
|
|
|
utils.LegacyWhitelistFlag,
|
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>
4 years ago
|
|
|
utils.BloomFilterSizeFlag,
|
|
|
|
utils.CacheFlag,
|
|
|
|
utils.CacheDatabaseFlag,
|
|
|
|
utils.CacheTrieFlag,
|
|
|
|
utils.CacheTrieJournalFlag,
|
|
|
|
utils.CacheTrieRejournalFlag,
|
|
|
|
utils.CacheGCFlag,
|
|
|
|
utils.CacheSnapshotFlag,
|
|
|
|
utils.CacheNoPrefetchFlag,
|
|
|
|
utils.CachePreimagesFlag,
|
|
|
|
utils.CacheLogSizeFlag,
|
|
|
|
utils.FDLimitFlag,
|
|
|
|
utils.CryptoKZGFlag,
|
|
|
|
utils.ListenPortFlag,
|
|
|
|
utils.DiscoveryPortFlag,
|
|
|
|
utils.MaxPeersFlag,
|
|
|
|
utils.MaxPendingPeersFlag,
|
|
|
|
utils.MiningEnabledFlag,
|
|
|
|
utils.MinerGasLimitFlag,
|
|
|
|
utils.MinerGasPriceFlag,
|
|
|
|
utils.MinerEtherbaseFlag,
|
|
|
|
utils.MinerExtraDataFlag,
|
|
|
|
utils.MinerRecommitIntervalFlag,
|
|
|
|
utils.MinerNewPayloadTimeout,
|
|
|
|
utils.NATFlag,
|
|
|
|
utils.NoDiscoverFlag,
|
|
|
|
utils.DiscoveryV4Flag,
|
|
|
|
utils.DiscoveryV5Flag,
|
|
|
|
utils.LegacyDiscoveryV5Flag,
|
|
|
|
utils.NetrestrictFlag,
|
|
|
|
utils.NodeKeyFileFlag,
|
|
|
|
utils.NodeKeyHexFlag,
|
|
|
|
utils.DNSDiscoveryFlag,
|
|
|
|
utils.DeveloperFlag,
|
|
|
|
utils.DeveloperGasLimitFlag,
|
|
|
|
utils.DeveloperPeriodFlag,
|
|
|
|
utils.VMEnableDebugFlag,
|
|
|
|
utils.NetworkIdFlag,
|
|
|
|
utils.EthStatsURLFlag,
|
|
|
|
utils.NoCompactionFlag,
|
|
|
|
utils.GpoBlocksFlag,
|
|
|
|
utils.GpoPercentileFlag,
|
|
|
|
utils.GpoMaxGasPriceFlag,
|
|
|
|
utils.GpoIgnoreGasPriceFlag,
|
|
|
|
configFileFlag,
|
|
|
|
}, utils.NetworkFlags, utils.DatabasePathFlags)
|
|
|
|
|
|
|
|
rpcFlags = []cli.Flag{
|
|
|
|
utils.HTTPEnabledFlag,
|
|
|
|
utils.HTTPListenAddrFlag,
|
|
|
|
utils.HTTPPortFlag,
|
|
|
|
utils.HTTPCORSDomainFlag,
|
|
|
|
utils.AuthListenFlag,
|
|
|
|
utils.AuthPortFlag,
|
|
|
|
utils.AuthVirtualHostsFlag,
|
|
|
|
utils.JWTSecretFlag,
|
|
|
|
utils.HTTPVirtualHostsFlag,
|
|
|
|
utils.GraphQLEnabledFlag,
|
|
|
|
utils.GraphQLCORSDomainFlag,
|
|
|
|
utils.GraphQLVirtualHostsFlag,
|
|
|
|
utils.HTTPApiFlag,
|
|
|
|
utils.HTTPPathPrefixFlag,
|
|
|
|
utils.WSEnabledFlag,
|
|
|
|
utils.WSListenAddrFlag,
|
|
|
|
utils.WSPortFlag,
|
|
|
|
utils.WSApiFlag,
|
|
|
|
utils.WSAllowedOriginsFlag,
|
|
|
|
utils.WSPathPrefixFlag,
|
|
|
|
utils.IPCDisabledFlag,
|
|
|
|
utils.IPCPathFlag,
|
|
|
|
utils.InsecureUnlockAllowedFlag,
|
|
|
|
utils.RPCGlobalGasCapFlag,
|
|
|
|
utils.RPCGlobalEVMTimeoutFlag,
|
|
|
|
utils.RPCGlobalTxFeeCapFlag,
|
|
|
|
utils.AllowUnprotectedTxs,
|
rpc: add limit for batch request items and response size (#26681)
This PR adds server-side limits for JSON-RPC batch requests. Before this change, batches
were limited only by processing time. The server would pick calls from the batch and
answer them until the response timeout occurred, then stop processing the remaining batch
items.
Here, we are adding two additional limits which can be configured:
- the 'item limit': batches can have at most N items
- the 'response size limit': batches can contain at most X response bytes
These limits are optional in package rpc. In Geth, we set a default limit of 1000 items
and 25MB response size.
When a batch goes over the limit, an error response is returned to the client. However,
doing this correctly isn't always possible. In JSON-RPC, only method calls with a valid
`id` can be responded to. Since batches may also contain non-call messages or
notifications, the best effort thing we can do to report an error with the batch itself is
reporting the limit violation as an error for the first method call in the batch. If a batch is
too large, but contains only notifications and responses, the error will be reported with
a null `id`.
The RPC client was also changed so it can deal with errors resulting from too large
batches. An older client connected to the server code in this PR could get stuck
until the request timeout occurred when the batch is too large. **Upgrading to a version
of the RPC client containing this change is strongly recommended to avoid timeout issues.**
For some weird reason, when writing the original client implementation, @fjl worked off of
the assumption that responses could be distributed across batches arbitrarily. So for a
batch request containing requests `[A B C]`, the server could respond with `[A B C]` but
also with `[A B] [C]` or even `[A] [B] [C]` and it wouldn't make a difference to the
client.
So in the implementation of BatchCallContext, the client waited for all requests in the
batch individually. If the server didn't respond to some of the requests in the batch, the
client would eventually just time out (if a context was used).
With the addition of batch limits into the server, we anticipate that people will hit this
kind of error way more often. To handle this properly, the client now waits for a single
response batch and expects it to contain all responses to the requests.
---------
Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>
1 year ago
|
|
|
utils.BatchRequestLimit,
|
|
|
|
utils.BatchResponseMaxSize,
|
|
|
|
}
|
|
|
|
|
|
|
|
metricsFlags = []cli.Flag{
|
|
|
|
utils.MetricsEnabledFlag,
|
|
|
|
utils.MetricsEnabledExpensiveFlag,
|
|
|
|
utils.MetricsHTTPFlag,
|
|
|
|
utils.MetricsPortFlag,
|
|
|
|
utils.MetricsEnableInfluxDBFlag,
|
|
|
|
utils.MetricsInfluxDBEndpointFlag,
|
|
|
|
utils.MetricsInfluxDBDatabaseFlag,
|
|
|
|
utils.MetricsInfluxDBUsernameFlag,
|
|
|
|
utils.MetricsInfluxDBPasswordFlag,
|
|
|
|
utils.MetricsInfluxDBTagsFlag,
|
|
|
|
utils.MetricsEnableInfluxDBV2Flag,
|
|
|
|
utils.MetricsInfluxDBTokenFlag,
|
|
|
|
utils.MetricsInfluxDBBucketFlag,
|
|
|
|
utils.MetricsInfluxDBOrganizationFlag,
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
var app = flags.NewApp("the go-ethereum command line interface")
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
// Initialize the CLI app and start Geth
|
|
|
|
app.Action = geth
|
|
|
|
app.Copyright = "Copyright 2013-2023 The go-ethereum Authors"
|
|
|
|
app.Commands = []*cli.Command{
|
|
|
|
// See chaincmd.go:
|
|
|
|
initCommand,
|
|
|
|
importCommand,
|
|
|
|
exportCommand,
|
|
|
|
importPreimagesCommand,
|
|
|
|
exportPreimagesCommand,
|
|
|
|
removedbCommand,
|
|
|
|
dumpCommand,
|
|
|
|
dumpGenesisCommand,
|
|
|
|
// See accountcmd.go:
|
|
|
|
accountCommand,
|
|
|
|
walletCommand,
|
|
|
|
// See consolecmd.go:
|
|
|
|
consoleCommand,
|
|
|
|
attachCommand,
|
|
|
|
javascriptCommand,
|
|
|
|
// See misccmd.go:
|
|
|
|
versionCommand,
|
|
|
|
versionCheckCommand,
|
|
|
|
licenseCommand,
|
|
|
|
// See config.go
|
|
|
|
dumpConfigCommand,
|
|
|
|
// see dbcmd.go
|
|
|
|
dbCommand,
|
|
|
|
// 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>
4 years ago
|
|
|
// See snapshot.go
|
|
|
|
snapshotCommand,
|
|
|
|
// See verkle.go
|
|
|
|
verkleCommand,
|
|
|
|
}
|
|
|
|
sort.Sort(cli.CommandsByName(app.Commands))
|
|
|
|
|
|
|
|
app.Flags = flags.Merge(
|
|
|
|
nodeFlags,
|
|
|
|
rpcFlags,
|
|
|
|
consoleFlags,
|
|
|
|
debug.Flags,
|
|
|
|
metricsFlags,
|
|
|
|
)
|
|
|
|
flags.AutoEnvVars(app.Flags, "GETH")
|
|
|
|
|
|
|
|
app.Before = func(ctx *cli.Context) error {
|
|
|
|
maxprocs.Set() // Automatically set GOMAXPROCS to match Linux container CPU quota.
|
|
|
|
flags.MigrateGlobalFlags(ctx)
|
|
|
|
if err := debug.Setup(ctx); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
flags.CheckEnvVars(ctx, app.Flags, "GETH")
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
app.After = func(ctx *cli.Context) error {
|
|
|
|
debug.Exit()
|
|
|
|
prompt.Stdin.Close() // Resets terminal mode.
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
if err := app.Run(os.Args); err != nil {
|
|
|
|
fmt.Fprintln(os.Stderr, err)
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// prepare manipulates memory cache allowance and setups metric system.
|
|
|
|
// This function should be called before launching devp2p stack.
|
|
|
|
func prepare(ctx *cli.Context) {
|
|
|
|
// If we're running a known preset, log it for convenience.
|
|
|
|
switch {
|
|
|
|
case ctx.IsSet(utils.GoerliFlag.Name):
|
|
|
|
log.Info("Starting Geth on Görli testnet...")
|
|
|
|
|
|
|
|
case ctx.IsSet(utils.SepoliaFlag.Name):
|
|
|
|
log.Info("Starting Geth on Sepolia testnet...")
|
|
|
|
|
|
|
|
case ctx.IsSet(utils.HoleskyFlag.Name):
|
|
|
|
log.Info("Starting Geth on Holesky testnet...")
|
|
|
|
|
|
|
|
case ctx.IsSet(utils.DeveloperFlag.Name):
|
|
|
|
log.Info("Starting Geth in ephemeral dev mode...")
|
|
|
|
log.Warn(`You are running Geth in --dev mode. Please note the following:
|
|
|
|
|
|
|
|
1. This mode is only intended for fast, iterative development without assumptions on
|
|
|
|
security or persistence.
|
|
|
|
2. The database is created in memory unless specified otherwise. Therefore, shutting down
|
|
|
|
your computer or losing power will wipe your entire block data and chain state for
|
|
|
|
your dev environment.
|
|
|
|
3. A random, pre-allocated developer account will be available and unlocked as
|
|
|
|
eth.coinbase, which can be used for testing. The random dev account is temporary,
|
|
|
|
stored on a ramdisk, and will be lost if your machine is restarted.
|
|
|
|
4. Mining is enabled by default. However, the client will only seal blocks if transactions
|
|
|
|
are pending in the mempool. The miner's minimum accepted gas price is 1.
|
|
|
|
5. Networking is disabled; there is no listen-address, the maximum number of peers is set
|
|
|
|
to 0, and discovery is disabled.
|
|
|
|
`)
|
|
|
|
|
|
|
|
case !ctx.IsSet(utils.NetworkIdFlag.Name):
|
|
|
|
log.Info("Starting Geth on Ethereum mainnet...")
|
|
|
|
}
|
|
|
|
// If we're a full node on mainnet without --cache specified, bump default cache allowance
|
|
|
|
if ctx.String(utils.SyncModeFlag.Name) != "light" && !ctx.IsSet(utils.CacheFlag.Name) && !ctx.IsSet(utils.NetworkIdFlag.Name) {
|
|
|
|
// Make sure we're not on any supported preconfigured testnet either
|
|
|
|
if !ctx.IsSet(utils.HoleskyFlag.Name) &&
|
|
|
|
!ctx.IsSet(utils.SepoliaFlag.Name) &&
|
|
|
|
!ctx.IsSet(utils.GoerliFlag.Name) &&
|
|
|
|
!ctx.IsSet(utils.DeveloperFlag.Name) {
|
|
|
|
// Nope, we're really on mainnet. Bump that cache up!
|
|
|
|
log.Info("Bumping default cache on mainnet", "provided", ctx.Int(utils.CacheFlag.Name), "updated", 4096)
|
|
|
|
ctx.Set(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.String(utils.SyncModeFlag.Name) == "light" && !ctx.IsSet(utils.CacheFlag.Name) {
|
|
|
|
log.Info("Dropping default light client cache", "provided", ctx.Int(utils.CacheFlag.Name), "updated", 128)
|
|
|
|
ctx.Set(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)
|
|
|
|
}
|
|
|
|
|
|
|
|
// geth is the main entry point into the system if no special subcommand is run.
|
|
|
|
// It creates a default node based on the command line arguments and runs it in
|
|
|
|
// blocking mode, waiting for it to be shut down.
|
|
|
|
func geth(ctx *cli.Context) error {
|
|
|
|
if args := ctx.Args().Slice(); len(args) > 0 {
|
|
|
|
return fmt.Errorf("invalid command: %q", args[0])
|
|
|
|
}
|
|
|
|
|
|
|
|
prepare(ctx)
|
|
|
|
stack, backend := makeFullNode(ctx)
|
|
|
|
defer stack.Close()
|
|
|
|
|
|
|
|
startNode(ctx, stack, backend, false)
|
|
|
|
stack.Wait()
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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, backend ethapi.Backend, isConsole bool) {
|
|
|
|
debug.Memsize.Add("node", stack)
|
|
|
|
|
|
|
|
// Start up the node itself
|
|
|
|
utils.StartNode(ctx, stack, isConsole)
|
|
|
|
|
|
|
|
// Unlock any account specifically requested
|
|
|
|
unlockAccounts(ctx, stack)
|
|
|
|
|
|
|
|
// 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
5 years ago
|
|
|
// Create a client to interact with local geth node.
|
|
|
|
rpcClient := stack.Attach()
|
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
5 years ago
|
|
|
ethClient := ethclient.NewClient(rpcClient)
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
// Open any wallets already attached
|
|
|
|
for _, wallet := range stack.AccountManager().Wallets() {
|
|
|
|
if err := wallet.Open(""); err != nil {
|
|
|
|
log.Warn("Failed to open wallet", "url", wallet.URL(), "err", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Listen for wallet event till termination
|
|
|
|
for event := range events {
|
|
|
|
switch event.Kind {
|
|
|
|
case accounts.WalletArrived:
|
|
|
|
if err := event.Wallet.Open(""); err != nil {
|
|
|
|
log.Warn("New wallet appeared, failed to open", "url", event.Wallet.URL(), "err", err)
|
|
|
|
}
|
|
|
|
case accounts.WalletOpened:
|
|
|
|
status, _ := event.Wallet.Status()
|
|
|
|
log.Info("New wallet appeared", "url", event.Wallet.URL(), "status", status)
|
|
|
|
|
|
|
|
var derivationPaths []accounts.DerivationPath
|
|
|
|
if event.Wallet.URL().Scheme == "ledger" {
|
|
|
|
derivationPaths = append(derivationPaths, accounts.LegacyLedgerBaseDerivationPath)
|
|
|
|
}
|
|
|
|
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
5 years ago
|
|
|
event.Wallet.SelfDerive(derivationPaths, ethClient)
|
|
|
|
|
|
|
|
case accounts.WalletDropped:
|
|
|
|
log.Info("Old wallet dropped", "url", event.Wallet.URL())
|
|
|
|
event.Wallet.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
6 years ago
|
|
|
|
|
|
|
// Spawn a standalone goroutine for status synchronization monitoring,
|
|
|
|
// close the node when synchronization is complete if user required.
|
|
|
|
if ctx.Bool(utils.ExitWhenSyncedFlag.Name) {
|
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
6 years ago
|
|
|
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
|
|
|
|
}
|
|
|
|
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
6 years ago
|
|
|
log.Info("Synchronisation completed", "latestnum", done.Latest.Number, "latesthash", done.Latest.Hash(),
|
|
|
|
"age", common.PrettyAge(timestamp))
|
|
|
|
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
6 years ago
|
|
|
}
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Start auxiliary services if enabled
|
|
|
|
if ctx.Bool(utils.MiningEnabledFlag.Name) {
|
|
|
|
// Mining only makes sense if a full Ethereum node is running
|
|
|
|
if ctx.String(utils.SyncModeFlag.Name) == "light" {
|
|
|
|
utils.Fatalf("Light clients do not support mining")
|
|
|
|
}
|
|
|
|
ethBackend, ok := backend.(*eth.EthAPIBackend)
|
|
|
|
if !ok {
|
|
|
|
utils.Fatalf("Ethereum service not running")
|
|
|
|
}
|
|
|
|
// Set the gas price to the limits from the CLI and start mining
|
|
|
|
gasprice := flags.GlobalBig(ctx, utils.MinerGasPriceFlag.Name)
|
|
|
|
ethBackend.TxPool().SetGasTip(gasprice)
|
|
|
|
if err := ethBackend.StartMining(); err != nil {
|
|
|
|
utils.Fatalf("Failed to start mining: %v", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// unlockAccounts unlocks any account specifically requested.
|
|
|
|
func unlockAccounts(ctx *cli.Context, stack *node.Node) {
|
|
|
|
var unlocks []string
|
|
|
|
inputs := strings.Split(ctx.String(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!")
|
|
|
|
}
|
|
|
|
backends := stack.AccountManager().Backends(keystore.KeyStoreType)
|
|
|
|
if len(backends) == 0 {
|
|
|
|
log.Warn("Failed to unlock accounts, keystore is not available")
|
|
|
|
return
|
|
|
|
}
|
|
|
|
ks := backends[0].(*keystore.KeyStore)
|
|
|
|
passwords := utils.MakePasswordList(ctx)
|
|
|
|
for i, account := range unlocks {
|
|
|
|
unlockAccount(ks, account, i, passwords)
|
|
|
|
}
|
|
|
|
}
|