Skip to content

Commit 89fe764

Browse files
karalabecp-wjhan
authored andcommitted
eth, les, params: log chain config a bit saner (ethereum#24904)
Previously on Geth startup we just logged the chain config is a semi-json-y format. Whilst that worked while we had a handful of hard-forks defined, currently it's kind of unwieldy. This PR converts that original data dump and converts it into a user friendly - alas multiline - log output. Changed params/config.go, core/genesis.go for WEMIX.
1 parent 529a255 commit 89fe764

File tree

6 files changed

+100
-35
lines changed

6 files changed

+100
-35
lines changed

core/forkid/forkid_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import (
3131
// the correct fork ID.
3232
func TestCreation(t *testing.T) {
3333
mergeConfig := *params.MainnetChainConfig
34-
mergeConfig.MergeForkBlock = big.NewInt(15000000)
34+
mergeConfig.MergeNetsplitBlock = big.NewInt(15000000)
3535
type testcase struct {
3636
head uint64
3737
want ID

core/genesis.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,7 @@ func DefaultGenesisBlock() *Genesis {
483483
if err := json.NewDecoder(strings.NewReader(wemixMainnetGenesisJson)).Decode(genesis); err != nil {
484484
panic("Cannot parse default wemix mainnet genesis.")
485485
}
486+
genesis.Config = genesis.configOrDefault(params.WemixMainnetGenesisHash) //set WemixMainnetChainConfig
486487
return genesis
487488
}
488489
}
@@ -503,6 +504,7 @@ func DefaultTestnetGenesisBlock() *Genesis {
503504
if err := json.NewDecoder(strings.NewReader(wemixTestnetGenesisJson)).Decode(genesis); err != nil {
504505
panic("Cannot parse default wemix testnet genesis.")
505506
}
507+
genesis.Config = genesis.configOrDefault(params.WemixTestnetGenesisHash) //set WemixTestnetChainConfig
506508
return genesis
507509
}
508510
}

eth/backend.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"fmt"
2323
"math/big"
2424
"runtime"
25+
"strings"
2526
"sync"
2627
"sync/atomic"
2728
"time"
@@ -139,7 +140,13 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) {
139140
if _, ok := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !ok {
140141
return nil, genesisErr
141142
}
142-
log.Info("Initialised chain configuration", "config", chainConfig)
143+
log.Info("")
144+
log.Info(strings.Repeat("-", 153))
145+
for _, line := range strings.Split(chainConfig.String(), "\n") {
146+
log.Info(line)
147+
}
148+
log.Info(strings.Repeat("-", 153))
149+
log.Info("")
143150

144151
if err := pruner.RecoverPruning(stack.ResolvePath(""), chainDb, stack.ResolvePath(config.TrieCleanCacheJournal)); err != nil {
145152
log.Error("Failed to recover state", "error", err)

les/client.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package les
1919

2020
import (
2121
"fmt"
22+
"strings"
2223
"time"
2324

2425
"github.com/ethereum/go-ethereum/accounts"
@@ -96,7 +97,13 @@ func New(stack *node.Node, config *ethconfig.Config) (*LightEthereum, error) {
9697
if _, isCompat := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !isCompat {
9798
return nil, genesisErr
9899
}
99-
log.Info("Initialised chain configuration", "config", chainConfig)
100+
log.Info("")
101+
log.Info(strings.Repeat("-", 153))
102+
for _, line := range strings.Split(chainConfig.String(), "\n") {
103+
log.Info(line)
104+
}
105+
log.Info(strings.Repeat("-", 153))
106+
log.Info("")
100107

101108
peers := newServerPeerSet()
102109
merger := consensus.NewMerger(chainDb)

params/config.go

Lines changed: 80 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,17 @@ var (
316316
TestRules = TestChainConfig.Rules(new(big.Int), false)
317317
)
318318

319+
// NetworkNames are user friendly names to use in the chain spec banner.
320+
var NetworkNames = map[string]string{
321+
MainnetChainConfig.ChainID.String(): "mainnet",
322+
RopstenChainConfig.ChainID.String(): "ropsten",
323+
RinkebyChainConfig.ChainID.String(): "rinkeby",
324+
GoerliChainConfig.ChainID.String(): "goerli",
325+
SepoliaChainConfig.ChainID.String(): "sepolia",
326+
WemixMainnetChainConfig.ChainID.String(): "wemix mainnet",
327+
WemixTestnetChainConfig.ChainID.String(): "wemix testnet",
328+
}
329+
319330
// TrustedCheckpoint represents a set of post-processed trie roots (CHT and
320331
// BloomTrie) associated with the appropriate section index and head hash. It is
321332
// used to start light syncing from this checkpoint and avoid downloading the
@@ -392,7 +403,7 @@ type ChainConfig struct {
392403
BerlinBlock *big.Int `json:"berlinBlock,omitempty"` // Berlin switch block (nil = no fork, 0 = already on berlin)
393404
LondonBlock *big.Int `json:"londonBlock,omitempty"` // London switch block (nil = no fork, 0 = already on london)
394405
ArrowGlacierBlock *big.Int `json:"arrowGlacierBlock,omitempty"` // Eip-4345 (bomb delay) switch block (nil = no fork, 0 = already activated)
395-
MergeForkBlock *big.Int `json:"mergeForkBlock,omitempty"` // EIP-3675 (TheMerge) switch block (nil = no fork, 0 = already in merge proceedings)
406+
MergeNetsplitBlock *big.Int `json:"mergeNetsplitBlock,omitempty"` // Virtual fork after The Merge to use as a network splitter
396407
PangyoBlock *big.Int `json:"pangyoBlock,omitempty"` // Pangyo switch block (nil = no fork, 0 = already on pangyo)
397408
ApplepieBlock *big.Int `json:"applepieBlock,omitempty"` // Applepie switch block (nil = no fork, 0 = already on applepie)
398409

@@ -426,37 +437,75 @@ func (c *CliqueConfig) String() string {
426437

427438
// String implements the fmt.Stringer interface.
428439
func (c *ChainConfig) String() string {
429-
var engine interface{}
440+
var banner string
441+
442+
// Create some basinc network config output
443+
network := NetworkNames[c.ChainID.String()]
444+
if network == "" {
445+
network = "unknown"
446+
}
447+
banner += fmt.Sprintf("Chain ID: %v (%s)\n", c.ChainID, network)
430448
switch {
431449
case c.Ethash != nil:
432-
engine = c.Ethash
450+
if c.TerminalTotalDifficulty == nil {
451+
if ConsensusMethod == ConsensusPoW {
452+
banner += "Consensus: Ethash (proof-of-work)\n"
453+
} else {
454+
banner += "Consensus: Ethash (Stake base Proof of Authority for wemix)\n"
455+
}
456+
} else {
457+
banner += "Consensus: Beacon (proof-of-stake), merged from Ethash (proof-of-work)\n"
458+
}
433459
case c.Clique != nil:
434-
engine = c.Clique
460+
if c.TerminalTotalDifficulty == nil {
461+
banner += "Consensus: Clique (proof-of-authority)\n"
462+
} else {
463+
banner += "Consensus: Beacon (proof-of-stake), merged from Clique (proof-of-authority)\n"
464+
}
435465
default:
436-
engine = "unknown"
437-
}
438-
return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Berlin: %v, London: %v, Arrow Glacier: %v, MergeFork: %v, PangyoFork: %v, ApplepieFork: %v, Terminal TD: %v, Engine: %v}",
439-
c.ChainID,
440-
c.HomesteadBlock,
441-
c.DAOForkBlock,
442-
c.DAOForkSupport,
443-
c.EIP150Block,
444-
c.EIP155Block,
445-
c.EIP158Block,
446-
c.ByzantiumBlock,
447-
c.ConstantinopleBlock,
448-
c.PetersburgBlock,
449-
c.IstanbulBlock,
450-
c.MuirGlacierBlock,
451-
c.BerlinBlock,
452-
c.LondonBlock,
453-
c.ArrowGlacierBlock,
454-
c.MergeForkBlock,
455-
c.PangyoBlock,
456-
c.ApplepieBlock,
457-
c.TerminalTotalDifficulty,
458-
engine,
459-
)
466+
banner += "Consensus: unknown\n"
467+
}
468+
banner += "\n"
469+
470+
// Create a list of forks with a short description of them. Forks that only
471+
// makes sense for mainnet should be optional at printing to avoid bloating
472+
// the output for testnets and private networks.
473+
banner += "Pre-Merge hard forks:\n"
474+
banner += fmt.Sprintf(" - Homestead: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/homestead.md)\n", c.HomesteadBlock)
475+
if c.DAOForkBlock != nil {
476+
banner += fmt.Sprintf(" - DAO Fork: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/dao-fork.md)\n", c.DAOForkBlock)
477+
}
478+
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)
479+
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)
480+
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)
481+
banner += fmt.Sprintf(" - Byzantium: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/byzantium.md)\n", c.ByzantiumBlock)
482+
banner += fmt.Sprintf(" - Constantinople: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/constantinople.md)\n", c.ConstantinopleBlock)
483+
banner += fmt.Sprintf(" - Petersburg: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/petersburg.md)\n", c.PetersburgBlock)
484+
banner += fmt.Sprintf(" - Istanbul: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/istanbul.md)\n", c.IstanbulBlock)
485+
if c.MuirGlacierBlock != nil {
486+
banner += fmt.Sprintf(" - Muir Glacier: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/muir-glacier.md)\n", c.MuirGlacierBlock)
487+
}
488+
banner += fmt.Sprintf(" - Berlin: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/berlin.md)\n", c.BerlinBlock)
489+
banner += fmt.Sprintf(" - London: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/london.md)\n", c.LondonBlock)
490+
if c.ArrowGlacierBlock != nil {
491+
banner += fmt.Sprintf(" - Arrow Glacier: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/arrow-glacier.md)\n", c.ArrowGlacierBlock)
492+
}
493+
banner += fmt.Sprintf(" - Pangyo: %-8v\n", c.PangyoBlock)
494+
banner += fmt.Sprintf(" - Applepie: %-8v\n", c.ApplepieBlock)
495+
banner += "\n"
496+
497+
// Add a special section for the merge as it's non-obvious
498+
if c.TerminalTotalDifficulty == nil {
499+
banner += "Merge not configured!\n"
500+
banner += " - Hard-fork specification: https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md)"
501+
} else {
502+
banner += "Merge configured:\n"
503+
banner += " - Hard-fork specification: https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md)\n"
504+
banner += fmt.Sprintf(" - Total terminal difficulty: %v\n", c.TerminalTotalDifficulty)
505+
banner += fmt.Sprintf(" - Merge netsplit block: %-8v", c.MergeNetsplitBlock)
506+
}
507+
return banner
508+
460509
}
461510

462511
// IsHomestead returns whether num is either equal to the homestead block or greater.
@@ -591,7 +640,7 @@ func (c *ChainConfig) CheckConfigForkOrder() error {
591640
{name: "berlinBlock", block: c.BerlinBlock},
592641
{name: "londonBlock", block: c.LondonBlock},
593642
{name: "arrowGlacierBlock", block: c.ArrowGlacierBlock, optional: true},
594-
{name: "mergeStartBlock", block: c.MergeForkBlock, optional: true},
643+
{name: "mergeNetsplitBlock", block: c.MergeNetsplitBlock, optional: true},
595644
} {
596645
if lastFork.name != "" {
597646
// Next one must be higher number
@@ -664,8 +713,8 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi
664713
if isForkIncompatible(c.ArrowGlacierBlock, newcfg.ArrowGlacierBlock, head) {
665714
return newCompatError("Arrow Glacier fork block", c.ArrowGlacierBlock, newcfg.ArrowGlacierBlock)
666715
}
667-
if isForkIncompatible(c.MergeForkBlock, newcfg.MergeForkBlock, head) {
668-
return newCompatError("Merge Start fork block", c.MergeForkBlock, newcfg.MergeForkBlock)
716+
if isForkIncompatible(c.MergeNetsplitBlock, newcfg.MergeNetsplitBlock, head) {
717+
return newCompatError("Merge netsplit fork block", c.MergeNetsplitBlock, newcfg.MergeNetsplitBlock)
669718
}
670719
return nil
671720
}

tests/init.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ var Forks = map[string]*params.ChainConfig{
211211
BerlinBlock: big.NewInt(0),
212212
LondonBlock: big.NewInt(0),
213213
ArrowGlacierBlock: big.NewInt(0),
214-
MergeForkBlock: big.NewInt(0),
214+
MergeNetsplitBlock: big.NewInt(0),
215215
TerminalTotalDifficulty: big.NewInt(0),
216216
},
217217
}

0 commit comments

Comments
 (0)