2022-05-24 18:39:40 +00:00
|
|
|
// Copyright 2021 The go-ethereum Authors
|
2017-04-12 14:27:23 +00:00
|
|
|
// This file is part of the go-ethereum library.
|
|
|
|
//
|
|
|
|
// The go-ethereum library is free software: you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU Lesser General Public License as published by
|
|
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
|
|
// (at your option) any later version.
|
|
|
|
//
|
|
|
|
// The go-ethereum library 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 Lesser General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU Lesser General Public License
|
|
|
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
2021-02-05 12:51:15 +00:00
|
|
|
// Package ethconfig contains the configuration of the ETH and LES protocols.
|
|
|
|
package ethconfig
|
2017-04-12 14:27:23 +00:00
|
|
|
|
|
|
|
import (
|
2023-05-03 09:58:39 +00:00
|
|
|
"errors"
|
2018-02-05 16:40:32 +00:00
|
|
|
"time"
|
2017-04-12 14:27:23 +00:00
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
2021-02-05 12:51:15 +00:00
|
|
|
"github.com/ethereum/go-ethereum/consensus"
|
all: core rework for the merge transition (#23761)
* all: work for eth1/2 transtition
* consensus/beacon, eth: change beacon difficulty to 0
* eth: updates
* all: add terminalBlockDifficulty config, fix rebasing issues
* eth: implemented merge interop spec
* internal/ethapi: update to v1.0.0.alpha.2
This commit updates the code to the new spec, moving payloadId into
it's own object. It also fixes an issue with finalizing an empty blockhash.
It also properly sets the basefee
* all: sync polishes, other fixes + refactors
* core, eth: correct semantics for LeavePoW, EnterPoS
* core: fixed rebasing artifacts
* core: light: performance improvements
* core: use keyed field (f)
* core: eth: fix compilation issues + tests
* eth/catalyst: dbetter error codes
* all: move Merger to consensus/, remove reliance on it in bc
* all: renamed EnterPoS and LeavePoW to ReachTDD and FinalizePoS
* core: make mergelogs a function
* core: use InsertChain instead of InsertBlock
* les: drop merger from lightchain object
* consensus: add merger
* core: recoverAncestors in catalyst mode
* core: fix nitpick
* all: removed merger from beacon, use TTD, nitpicks
* consensus: eth: add docstring, removed unnecessary code duplication
* consensus/beacon: better comment
* all: easy to fix nitpicks by karalabe
* consensus/beacon: verify known headers to be sure
* core: comments
* core: eth: don't drop peers who advertise blocks, nitpicks
* core: never add beacon blocks to the future queue
* core: fixed nitpicks
* consensus/beacon: simplify IsTTDReached check
* consensus/beacon: correct IsTTDReached check
Co-authored-by: rjl493456442 <garyrong0905@gmail.com>
Co-authored-by: Péter Szilágyi <peterke@gmail.com>
2021-11-26 11:23:02 +00:00
|
|
|
"github.com/ethereum/go-ethereum/consensus/beacon"
|
2021-02-05 12:51:15 +00:00
|
|
|
"github.com/ethereum/go-ethereum/consensus/clique"
|
2017-11-24 14:10:27 +00:00
|
|
|
"github.com/ethereum/go-ethereum/consensus/ethash"
|
2017-04-12 14:27:23 +00:00
|
|
|
"github.com/ethereum/go-ethereum/core"
|
2023-07-27 10:45:35 +00:00
|
|
|
"github.com/ethereum/go-ethereum/core/txpool/blobpool"
|
2023-06-16 12:29:40 +00:00
|
|
|
"github.com/ethereum/go-ethereum/core/txpool/legacypool"
|
2017-04-12 14:27:23 +00:00
|
|
|
"github.com/ethereum/go-ethereum/eth/downloader"
|
|
|
|
"github.com/ethereum/go-ethereum/eth/gasprice"
|
2021-02-05 12:51:15 +00:00
|
|
|
"github.com/ethereum/go-ethereum/ethdb"
|
2019-04-23 07:08:51 +00:00
|
|
|
"github.com/ethereum/go-ethereum/miner"
|
2017-04-12 14:27:23 +00:00
|
|
|
"github.com/ethereum/go-ethereum/params"
|
|
|
|
)
|
|
|
|
|
2021-02-05 12:51:15 +00:00
|
|
|
// FullNodeGPO contains default gasprice oracle settings for full node.
|
|
|
|
var FullNodeGPO = gasprice.Config{
|
2021-06-28 14:16:32 +00:00
|
|
|
Blocks: 20,
|
|
|
|
Percentile: 60,
|
2021-08-23 21:50:24 +00:00
|
|
|
MaxHeaderHistory: 1024,
|
|
|
|
MaxBlockHistory: 1024,
|
2021-06-28 14:16:32 +00:00
|
|
|
MaxPrice: gasprice.DefaultMaxPrice,
|
|
|
|
IgnorePrice: gasprice.DefaultIgnorePrice,
|
2020-07-03 12:50:35 +00:00
|
|
|
}
|
|
|
|
|
2021-02-05 12:51:15 +00:00
|
|
|
// LightClientGPO contains default gasprice oracle settings for light client.
|
|
|
|
var LightClientGPO = gasprice.Config{
|
2021-06-28 14:16:32 +00:00
|
|
|
Blocks: 2,
|
|
|
|
Percentile: 60,
|
|
|
|
MaxHeaderHistory: 300,
|
|
|
|
MaxBlockHistory: 5,
|
|
|
|
MaxPrice: gasprice.DefaultMaxPrice,
|
|
|
|
IgnorePrice: gasprice.DefaultIgnorePrice,
|
2020-07-03 12:50:35 +00:00
|
|
|
}
|
|
|
|
|
2021-02-05 12:51:15 +00:00
|
|
|
// Defaults contains default settings for use on the Ethereum main net.
|
|
|
|
var Defaults = Config{
|
cmd, core, eth, graphql, trie: no persisted clean trie cache file (#27525)
The clean trie cache is persisted periodically, therefore Geth can
quickly warmup the cache in next restart.
However it will reduce the robustness of system. The assumption is
held in Geth that if the parent trie node is present, then the entire
sub-trie associated with the parent are all prensent.
Imagine the scenario that Geth rewinds itself to a past block and
restart, but Geth finds the root node of "future state" in clean
cache then regard this state is present in disk, while is not in fact.
Another example is offline pruning tool. Whenever an offline pruning
is performed, the clean cache file has to be removed to aviod hitting
the root node of "deleted states" in clean cache.
All in all, compare with the minor performance gain, system robustness
is something we care more.
2023-07-04 07:21:06 +00:00
|
|
|
SyncMode: downloader.SnapSync,
|
|
|
|
NetworkId: 1,
|
|
|
|
TxLookupLimit: 2350000,
|
|
|
|
LightPeers: 100,
|
|
|
|
DatabaseCache: 512,
|
|
|
|
TrieCleanCache: 154,
|
|
|
|
TrieDirtyCache: 256,
|
|
|
|
TrieTimeout: 60 * time.Minute,
|
|
|
|
SnapshotCache: 102,
|
|
|
|
FilterLogCacheSize: 32,
|
|
|
|
Miner: miner.DefaultConfig,
|
|
|
|
TxPool: legacypool.DefaultConfig,
|
2023-07-27 10:45:35 +00:00
|
|
|
BlobPool: blobpool.DefaultConfig,
|
cmd, core, eth, graphql, trie: no persisted clean trie cache file (#27525)
The clean trie cache is persisted periodically, therefore Geth can
quickly warmup the cache in next restart.
However it will reduce the robustness of system. The assumption is
held in Geth that if the parent trie node is present, then the entire
sub-trie associated with the parent are all prensent.
Imagine the scenario that Geth rewinds itself to a past block and
restart, but Geth finds the root node of "future state" in clean
cache then regard this state is present in disk, while is not in fact.
Another example is offline pruning tool. Whenever an offline pruning
is performed, the clean cache file has to be removed to aviod hitting
the root node of "deleted states" in clean cache.
All in all, compare with the minor performance gain, system robustness
is something we care more.
2023-07-04 07:21:06 +00:00
|
|
|
RPCGasCap: 50000000,
|
|
|
|
RPCEVMTimeout: 5 * time.Second,
|
|
|
|
GPO: FullNodeGPO,
|
|
|
|
RPCTxFeeCap: 1, // 1 ether
|
2017-04-12 14:27:23 +00:00
|
|
|
}
|
|
|
|
|
2022-04-12 18:24:02 +00:00
|
|
|
//go:generate go run github.com/fjl/gencodec -type Config -formats toml -out gen_config.go
|
2017-04-12 14:27:23 +00:00
|
|
|
|
2021-02-05 12:51:15 +00:00
|
|
|
// Config contains configuration options for of the ETH and LES protocols.
|
2017-04-12 14:27:23 +00:00
|
|
|
type Config struct {
|
|
|
|
// The genesis block, which is inserted if the database is empty.
|
|
|
|
// If nil, the Ethereum main net block is used.
|
|
|
|
Genesis *core.Genesis `toml:",omitempty"`
|
|
|
|
|
|
|
|
// Protocol options
|
2017-04-25 11:31:15 +00:00
|
|
|
NetworkId uint64 // Network ID to use for selecting peers to connect to
|
2017-04-12 14:27:23 +00:00
|
|
|
SyncMode downloader.SyncMode
|
2019-04-01 08:52:11 +00:00
|
|
|
|
2020-02-13 13:38:30 +00:00
|
|
|
// This can be set to list of enrtree:// URLs which will be queried for
|
|
|
|
// for nodes to connect to.
|
2020-12-14 09:27:15 +00:00
|
|
|
EthDiscoveryURLs []string
|
|
|
|
SnapDiscoveryURLs []string
|
2020-02-13 13:38:30 +00:00
|
|
|
|
2019-04-01 08:52:11 +00:00
|
|
|
NoPruning bool // Whether to disable pruning and flush everything to disk
|
|
|
|
NoPrefetch bool // Whether to disable prefetching and only load state on demand
|
2017-04-12 14:27:23 +00:00
|
|
|
|
2020-05-11 15:58:43 +00:00
|
|
|
TxLookupLimit uint64 `toml:",omitempty"` // The maximum number of blocks from head whose tx indices are reserved.
|
|
|
|
|
2022-05-04 16:55:17 +00:00
|
|
|
// RequiredBlocks is a set of block number -> hash mappings which must be in the
|
2022-03-15 11:20:03 +00:00
|
|
|
// canonical chain of all remote peers. Setting the option makes geth verify the
|
|
|
|
// presence of these blocks for every new peer connection.
|
2022-05-04 16:55:17 +00:00
|
|
|
RequiredBlocks map[uint64]common.Hash `toml:"-"`
|
2018-11-02 20:26:45 +00:00
|
|
|
|
2017-04-12 14:27:23 +00:00
|
|
|
// Light client options
|
2023-04-24 06:37:10 +00:00
|
|
|
LightServ int `toml:",omitempty"` // Maximum percentage of time allowed for serving LES requests
|
|
|
|
LightIngress int `toml:",omitempty"` // Incoming bandwidth limit for light servers
|
|
|
|
LightEgress int `toml:",omitempty"` // Outgoing bandwidth limit for light servers
|
|
|
|
LightPeers int `toml:",omitempty"` // Maximum number of LES client peers
|
|
|
|
LightNoPrune bool `toml:",omitempty"` // Whether to disable light chain pruning
|
|
|
|
LightNoSyncServe bool `toml:",omitempty"` // Whether to serve light clients before syncing
|
2019-01-24 11:18:26 +00:00
|
|
|
|
2017-04-12 14:27:23 +00:00
|
|
|
// Database options
|
|
|
|
SkipBcVersionCheck bool `toml:"-"`
|
|
|
|
DatabaseHandles int `toml:"-"`
|
|
|
|
DatabaseCache int
|
2019-03-08 13:56:20 +00:00
|
|
|
DatabaseFreezer string
|
2018-09-24 12:57:49 +00:00
|
|
|
|
cmd, core, eth, graphql, trie: no persisted clean trie cache file (#27525)
The clean trie cache is persisted periodically, therefore Geth can
quickly warmup the cache in next restart.
However it will reduce the robustness of system. The assumption is
held in Geth that if the parent trie node is present, then the entire
sub-trie associated with the parent are all prensent.
Imagine the scenario that Geth rewinds itself to a past block and
restart, but Geth finds the root node of "future state" in clean
cache then regard this state is present in disk, while is not in fact.
Another example is offline pruning tool. Whenever an offline pruning
is performed, the clean cache file has to be removed to aviod hitting
the root node of "deleted states" in clean cache.
All in all, compare with the minor performance gain, system robustness
is something we care more.
2023-07-04 07:21:06 +00:00
|
|
|
TrieCleanCache int
|
|
|
|
TrieDirtyCache int
|
|
|
|
TrieTimeout time.Duration
|
|
|
|
SnapshotCache int
|
|
|
|
Preimages bool
|
2017-04-12 14:27:23 +00:00
|
|
|
|
2022-08-19 09:14:59 +00:00
|
|
|
// This is the number of blocks for which logs will be cached in the filter system.
|
|
|
|
FilterLogCacheSize int
|
|
|
|
|
2019-04-23 07:08:51 +00:00
|
|
|
// Mining options
|
|
|
|
Miner miner.Config
|
2017-04-12 14:27:23 +00:00
|
|
|
|
2017-05-26 10:40:47 +00:00
|
|
|
// Transaction pool options
|
2023-07-27 10:45:35 +00:00
|
|
|
TxPool legacypool.Config
|
|
|
|
BlobPool blobpool.Config
|
2017-05-26 10:40:47 +00:00
|
|
|
|
2017-04-12 14:27:23 +00:00
|
|
|
// Gas Price Oracle options
|
|
|
|
GPO gasprice.Config
|
|
|
|
|
|
|
|
// Enables tracking of SHA3 preimages in the VM
|
|
|
|
EnablePreimageRecording bool
|
|
|
|
|
|
|
|
// Miscellaneous options
|
2017-11-24 14:10:27 +00:00
|
|
|
DocRoot string `toml:"-"`
|
2018-09-20 07:44:35 +00:00
|
|
|
|
2019-04-08 11:49:52 +00:00
|
|
|
// RPCGasCap is the global gas cap for eth-call variants.
|
2021-03-25 14:37:51 +00:00
|
|
|
RPCGasCap uint64
|
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 07:34:02 +00:00
|
|
|
|
2021-10-12 08:46:04 +00:00
|
|
|
// RPCEVMTimeout is the global timeout for eth-call.
|
|
|
|
RPCEVMTimeout time.Duration
|
|
|
|
|
2020-06-17 07:46:31 +00:00
|
|
|
// RPCTxFeeCap is the global transaction fee(price * gaslimit) cap for
|
2022-08-19 06:00:21 +00:00
|
|
|
// send-transaction variants. The unit is ether.
|
2021-03-25 14:37:51 +00:00
|
|
|
RPCTxFeeCap float64
|
2020-06-17 07:46:31 +00:00
|
|
|
|
2023-04-26 15:17:37 +00:00
|
|
|
// OverrideCancun (TODO: remove after the fork)
|
|
|
|
OverrideCancun *uint64 `toml:",omitempty"`
|
2023-06-28 09:08:48 +00:00
|
|
|
|
|
|
|
// OverrideVerkle (TODO: remove after the fork)
|
|
|
|
OverrideVerkle *uint64 `toml:",omitempty"`
|
2017-04-12 14:27:23 +00:00
|
|
|
}
|
2021-02-05 12:51:15 +00:00
|
|
|
|
2023-05-03 09:58:39 +00:00
|
|
|
// CreateConsensusEngine creates a consensus engine for the given chain config.
|
|
|
|
// Clique is allowed for now to live standalone, but ethash is forbidden and can
|
|
|
|
// only exist on already merged networks.
|
|
|
|
func CreateConsensusEngine(config *params.ChainConfig, db ethdb.Database) (consensus.Engine, error) {
|
2021-02-05 12:51:15 +00:00
|
|
|
// If proof-of-authority is requested, set it up
|
2023-05-03 09:58:39 +00:00
|
|
|
if config.Clique != nil {
|
|
|
|
return beacon.New(clique.New(config.Clique, db)), nil
|
|
|
|
}
|
|
|
|
// If defaulting to proof-of-work, enforce an already merged network since
|
|
|
|
// we cannot run PoW algorithms and more, so we cannot even follow a chain
|
|
|
|
// not coordinated by a beacon node.
|
|
|
|
if !config.TerminalTotalDifficultyPassed {
|
|
|
|
return nil, errors.New("ethash is only supported as a historical component of already merged networks")
|
2021-02-05 12:51:15 +00:00
|
|
|
}
|
2023-05-03 09:58:39 +00:00
|
|
|
return beacon.New(ethash.NewFaker()), nil
|
2021-02-05 12:51:15 +00:00
|
|
|
}
|