Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
b56c7962
Unverified
Commit
b56c7962
authored
Jan 06, 2023
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cmd, core, eth, els, params: disallow setheads below genesis, tweaks
parent
fcf3d004
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
147 additions
and
157 deletions
+147
-157
config.go
cmd/geth/config.go
+2
-7
main.go
cmd/geth/main.go
+1
-2
flags.go
cmd/utils/flags.go
+3
-8
genesis.go
core/genesis.go
+3
-8
headerchain.go
core/headerchain.go
+13
-0
backend.go
eth/backend.go
+2
-5
config.go
eth/ethconfig/config.go
+2
-5
gen_config.go
eth/ethconfig/gen_config.go
+89
-95
client.go
les/client.go
+2
-5
config.go
params/config.go
+30
-22
No files found.
cmd/geth/config.go
View file @
b56c7962
...
...
@@ -158,14 +158,9 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) {
// makeFullNode loads geth configuration and creates the Ethereum backend.
func
makeFullNode
(
ctx
*
cli
.
Context
)
(
*
node
.
Node
,
ethapi
.
Backend
)
{
stack
,
cfg
:=
makeConfigNode
(
ctx
)
if
ctx
.
IsSet
(
utils
.
Override
TerminalTotalDifficulty
.
Name
)
{
cfg
.
Eth
.
Override
TerminalTotalDifficulty
=
flags
.
GlobalBig
(
ctx
,
utils
.
OverrideTerminalTotalDifficulty
.
Name
)
if
ctx
.
IsSet
(
utils
.
Override
Shanghai
.
Name
)
{
cfg
.
Eth
.
Override
Shanghai
=
flags
.
GlobalBig
(
ctx
,
utils
.
OverrideShanghai
.
Name
)
}
if
ctx
.
IsSet
(
utils
.
OverrideTerminalTotalDifficultyPassed
.
Name
)
{
override
:=
ctx
.
Bool
(
utils
.
OverrideTerminalTotalDifficultyPassed
.
Name
)
cfg
.
Eth
.
OverrideTerminalTotalDifficultyPassed
=
&
override
}
backend
,
eth
:=
utils
.
RegisterEthService
(
stack
,
&
cfg
.
Eth
)
// Configure log filter RPC API.
...
...
cmd/geth/main.go
View file @
b56c7962
...
...
@@ -64,8 +64,7 @@ var (
utils
.
NoUSBFlag
,
utils
.
USBFlag
,
utils
.
SmartCardDaemonPathFlag
,
utils
.
OverrideTerminalTotalDifficulty
,
utils
.
OverrideTerminalTotalDifficultyPassed
,
utils
.
OverrideShanghai
,
utils
.
EthashCacheDirFlag
,
utils
.
EthashCachesInMemoryFlag
,
utils
.
EthashCachesOnDiskFlag
,
...
...
cmd/utils/flags.go
View file @
b56c7962
...
...
@@ -271,14 +271,9 @@ var (
Value
:
2048
,
Category
:
flags
.
EthCategory
,
}
OverrideTerminalTotalDifficulty
=
&
flags
.
BigFlag
{
Name
:
"override.terminaltotaldifficulty"
,
Usage
:
"Manually specify TerminalTotalDifficulty, overriding the bundled setting"
,
Category
:
flags
.
EthCategory
,
}
OverrideTerminalTotalDifficultyPassed
=
&
cli
.
BoolFlag
{
Name
:
"override.terminaltotaldifficultypassed"
,
Usage
:
"Manually specify TerminalTotalDifficultyPassed, overriding the bundled setting"
,
OverrideShanghai
=
&
flags
.
BigFlag
{
Name
:
"override.shanghai"
,
Usage
:
"Manually specify the Shanghai fork timestamp, overriding the bundled setting"
,
Category
:
flags
.
EthCategory
,
}
// Light server and client settings
...
...
core/genesis.go
View file @
b56c7962
...
...
@@ -269,8 +269,7 @@ func (e *GenesisMismatchError) Error() string {
// ChainOverrides contains the changes to chain config.
type
ChainOverrides
struct
{
OverrideTerminalTotalDifficulty
*
big
.
Int
OverrideTerminalTotalDifficultyPassed
*
bool
OverrideShanghai
*
big
.
Int
}
// SetupGenesisBlock writes or updates the genesis block in db.
...
...
@@ -296,15 +295,11 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, triedb *trie.Database, gen
}
applyOverrides
:=
func
(
config
*
params
.
ChainConfig
)
{
if
config
!=
nil
{
if
overrides
!=
nil
&&
overrides
.
OverrideTerminalTotalDifficulty
!=
nil
{
config
.
TerminalTotalDifficulty
=
overrides
.
OverrideTerminalTotalDifficulty
}
if
overrides
!=
nil
&&
overrides
.
OverrideTerminalTotalDifficultyPassed
!=
nil
{
config
.
TerminalTotalDifficultyPassed
=
*
overrides
.
OverrideTerminalTotalDifficultyPassed
if
overrides
!=
nil
&&
overrides
.
OverrideShanghai
!=
nil
{
config
.
ShanghaiTime
=
overrides
.
OverrideShanghai
}
}
}
// Just commit the new block if there is no stored genesis block.
stored
:=
rawdb
.
ReadCanonicalHash
(
db
,
0
)
if
(
stored
==
common
.
Hash
{})
{
...
...
core/headerchain.go
View file @
b56c7962
...
...
@@ -578,6 +578,19 @@ func (hc *HeaderChain) SetHeadWithTimestamp(time uint64, updateFn UpdateHeadBloc
// setHead rewinds the local chain to a new head block or a head timestamp.
// Everything above the new head will be deleted and the new one set.
func
(
hc
*
HeaderChain
)
setHead
(
headBlock
uint64
,
headTime
uint64
,
updateFn
UpdateHeadBlocksCallback
,
delFn
DeleteBlockContentCallback
)
{
// Sanity check that there's no attempt to undo the genesis block. This is
// a fairly synthetic case where someone enables a timestamp based fork
// below the genesis timestamp. It's nice to not allow that instead of the
// entire chain getting deleted.
if
headTime
>
0
&&
hc
.
genesisHeader
.
Time
>
headTime
{
// Note, a critical error is quite brutal, but we should really not reach
// this point. Since pre-timestamp based forks it was impossible to have
// a fork before block 0, the setHead would always work. With timestamp
// forks it becomes possible to specify below the genesis. That said, the
// only time we setHead via timestamp is with chain config changes on the
// startup, so failing hard there is ok.
log
.
Crit
(
"Rejecting genesis rewind via timestamp"
,
"target"
,
headTime
,
"genesis"
,
hc
.
genesisHeader
.
Time
)
}
var
(
parentHash
common
.
Hash
batch
=
hc
.
chainDb
.
NewBatch
()
...
...
eth/backend.go
View file @
b56c7962
...
...
@@ -195,11 +195,8 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) {
)
// Override the chain config with provided settings.
var
overrides
core
.
ChainOverrides
if
config
.
OverrideTerminalTotalDifficulty
!=
nil
{
overrides
.
OverrideTerminalTotalDifficulty
=
config
.
OverrideTerminalTotalDifficulty
}
if
config
.
OverrideTerminalTotalDifficultyPassed
!=
nil
{
overrides
.
OverrideTerminalTotalDifficultyPassed
=
config
.
OverrideTerminalTotalDifficultyPassed
if
config
.
OverrideShanghai
!=
nil
{
overrides
.
OverrideShanghai
=
config
.
OverrideShanghai
}
eth
.
blockchain
,
err
=
core
.
NewBlockChain
(
chainDb
,
cacheConfig
,
config
.
Genesis
,
&
overrides
,
eth
.
engine
,
vmConfig
,
eth
.
shouldPreserve
,
&
config
.
TxLookupLimit
)
if
err
!=
nil
{
...
...
eth/ethconfig/config.go
View file @
b56c7962
...
...
@@ -206,11 +206,8 @@ type Config struct {
// CheckpointOracle is the configuration for checkpoint oracle.
CheckpointOracle
*
params
.
CheckpointOracleConfig
`toml:",omitempty"`
// OverrideTerminalTotalDifficulty (TODO: remove after the fork)
OverrideTerminalTotalDifficulty
*
big
.
Int
`toml:",omitempty"`
// OverrideTerminalTotalDifficultyPassed (TODO: remove after the fork)
OverrideTerminalTotalDifficultyPassed
*
bool
`toml:",omitempty"`
// OverrideShanghai (TODO: remove after the fork)
OverrideShanghai
*
big
.
Int
`toml:",omitempty"`
}
// CreateConsensusEngine creates a consensus engine for the given chain configuration.
...
...
eth/ethconfig/gen_config.go
View file @
b56c7962
This diff is collapsed.
Click to expand it.
les/client.go
View file @
b56c7962
...
...
@@ -94,11 +94,8 @@ func New(stack *node.Node, config *ethconfig.Config) (*LightEthereum, error) {
return
nil
,
err
}
var
overrides
core
.
ChainOverrides
if
config
.
OverrideTerminalTotalDifficulty
!=
nil
{
overrides
.
OverrideTerminalTotalDifficulty
=
config
.
OverrideTerminalTotalDifficulty
}
if
config
.
OverrideTerminalTotalDifficultyPassed
!=
nil
{
overrides
.
OverrideTerminalTotalDifficultyPassed
=
config
.
OverrideTerminalTotalDifficultyPassed
if
config
.
OverrideShanghai
!=
nil
{
overrides
.
OverrideShanghai
=
config
.
OverrideShanghai
}
chainConfig
,
genesisHash
,
genesisErr
:=
core
.
SetupGenesisBlockWithOverride
(
chainDb
,
trie
.
NewDatabase
(
chainDb
),
config
.
Genesis
,
&
overrides
)
if
_
,
isCompat
:=
genesisErr
.
(
*
params
.
ConfigCompatError
);
genesisErr
!=
nil
&&
!
isCompat
{
...
...
params/config.go
View file @
b56c7962
...
...
@@ -445,45 +445,53 @@ func (c *ChainConfig) Description() string {
// Create a list of forks with a short description of them. Forks that only
// makes sense for mainnet should be optional at printing to avoid bloating
// the output for testnets and private networks.
banner
+=
"Pre-Merge hard forks:
\n
"
banner
+=
fmt
.
Sprintf
(
" - Homestead: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/homestead.md)
\n
"
,
c
.
HomesteadBlock
)
banner
+=
"Pre-Merge hard forks
(block based)
:
\n
"
banner
+=
fmt
.
Sprintf
(
" - Homestead:
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/homestead.md)
\n
"
,
c
.
HomesteadBlock
)
if
c
.
DAOForkBlock
!=
nil
{
banner
+=
fmt
.
Sprintf
(
" - DAO Fork: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/dao-fork.md)
\n
"
,
c
.
DAOForkBlock
)
}
banner
+=
fmt
.
Sprintf
(
" - Tangerine Whistle (EIP 150): %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/tangerine-whistle.md)
\n
"
,
c
.
EIP150Block
)
banner
+=
fmt
.
Sprintf
(
" - Spurious Dragon/1 (EIP 155): %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)
\n
"
,
c
.
EIP155Block
)
banner
+=
fmt
.
Sprintf
(
" - Spurious Dragon/2 (EIP 158): %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)
\n
"
,
c
.
EIP155Block
)
banner
+=
fmt
.
Sprintf
(
" - Byzantium: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/byzantium.md)
\n
"
,
c
.
ByzantiumBlock
)
banner
+=
fmt
.
Sprintf
(
" - Constantinople: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/constantinople.md)
\n
"
,
c
.
ConstantinopleBlock
)
banner
+=
fmt
.
Sprintf
(
" - Petersburg: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/petersburg.md)
\n
"
,
c
.
PetersburgBlock
)
banner
+=
fmt
.
Sprintf
(
" - Istanbul: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/istanbul.md)
\n
"
,
c
.
IstanbulBlock
)
banner
+=
fmt
.
Sprintf
(
" - DAO Fork:
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/dao-fork.md)
\n
"
,
c
.
DAOForkBlock
)
}
banner
+=
fmt
.
Sprintf
(
" - Tangerine Whistle (EIP 150):
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/tangerine-whistle.md)
\n
"
,
c
.
EIP150Block
)
banner
+=
fmt
.
Sprintf
(
" - Spurious Dragon/1 (EIP 155):
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)
\n
"
,
c
.
EIP155Block
)
banner
+=
fmt
.
Sprintf
(
" - Spurious Dragon/2 (EIP 158):
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)
\n
"
,
c
.
EIP155Block
)
banner
+=
fmt
.
Sprintf
(
" - Byzantium:
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/byzantium.md)
\n
"
,
c
.
ByzantiumBlock
)
banner
+=
fmt
.
Sprintf
(
" - Constantinople:
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/constantinople.md)
\n
"
,
c
.
ConstantinopleBlock
)
banner
+=
fmt
.
Sprintf
(
" - Petersburg:
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/petersburg.md)
\n
"
,
c
.
PetersburgBlock
)
banner
+=
fmt
.
Sprintf
(
" - Istanbul:
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/istanbul.md)
\n
"
,
c
.
IstanbulBlock
)
if
c
.
MuirGlacierBlock
!=
nil
{
banner
+=
fmt
.
Sprintf
(
" - Muir Glacier: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/muir-glacier.md)
\n
"
,
c
.
MuirGlacierBlock
)
banner
+=
fmt
.
Sprintf
(
" - Muir Glacier:
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/muir-glacier.md)
\n
"
,
c
.
MuirGlacierBlock
)
}
banner
+=
fmt
.
Sprintf
(
" - Berlin: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/berlin.md)
\n
"
,
c
.
BerlinBlock
)
banner
+=
fmt
.
Sprintf
(
" - London: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/london.md)
\n
"
,
c
.
LondonBlock
)
banner
+=
fmt
.
Sprintf
(
" - Berlin:
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/berlin.md)
\n
"
,
c
.
BerlinBlock
)
banner
+=
fmt
.
Sprintf
(
" - London:
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/london.md)
\n
"
,
c
.
LondonBlock
)
if
c
.
ArrowGlacierBlock
!=
nil
{
banner
+=
fmt
.
Sprintf
(
" - Arrow Glacier: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/arrow-glacier.md)
\n
"
,
c
.
ArrowGlacierBlock
)
banner
+=
fmt
.
Sprintf
(
" - Arrow Glacier:
#
%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/arrow-glacier.md)
\n
"
,
c
.
ArrowGlacierBlock
)
}
if
c
.
GrayGlacierBlock
!=
nil
{
banner
+=
fmt
.
Sprintf
(
" - Gray Glacier: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/gray-glacier.md)
\n
"
,
c
.
GrayGlacierBlock
)
}
banner
+=
fmt
.
Sprintf
(
" - Shanghai: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md)
\n
"
,
c
.
ShanghaiTime
)
if
c
.
CancunBlock
!=
nil
{
banner
+=
fmt
.
Sprintf
(
" - Cancun: %-8v
\n
"
,
c
.
CancunBlock
)
banner
+=
fmt
.
Sprintf
(
" - Gray Glacier: #%-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/gray-glacier.md)
\n
"
,
c
.
GrayGlacierBlock
)
}
banner
+=
"
\n
"
// Add a special section for the merge as it's non-obvious
if
c
.
TerminalTotalDifficulty
==
nil
{
banner
+=
"The Merge is not yet available for this network!
\n
"
banner
+=
" - Hard-fork specification: https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md"
banner
+=
" - Hard-fork specification: https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md
\n
"
}
else
{
banner
+=
"Merge configured:
\n
"
banner
+=
" - Hard-fork specification: https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md
\n
"
banner
+=
fmt
.
Sprintf
(
" - Network known to be merged: %v
\n
"
,
c
.
TerminalTotalDifficultyPassed
)
banner
+=
fmt
.
Sprintf
(
" - Total terminal difficulty: %v
\n
"
,
c
.
TerminalTotalDifficulty
)
banner
+=
fmt
.
Sprintf
(
" - Merge netsplit block: %-8v"
,
c
.
MergeNetsplitBlock
)
if
c
.
MergeNetsplitBlock
!=
nil
{
banner
+=
fmt
.
Sprintf
(
" - Merge netsplit block: #%-8v
\n
"
,
c
.
MergeNetsplitBlock
)
}
}
banner
+=
"
\n
"
// Create a list of forks post-merge
banner
+=
"Post-Merge hard forks (timestamp based):
\n
"
if
c
.
ShanghaiTime
!=
nil
{
banner
+=
fmt
.
Sprintf
(
" - Shanghai: @%-10v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md)
\n
"
,
c
.
ShanghaiTime
)
}
if
c
.
CancunBlock
!=
nil
{
banner
+=
fmt
.
Sprintf
(
" - Cancun: @%-10v
\n
"
,
c
.
CancunBlock
)
}
return
banner
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment