From ef7e07d5648b1e2647f6e7990bf031f00df381f9 Mon Sep 17 00:00:00 2001 From: futreall <86553580+futreall@users.noreply.github.com> Date: Sun, 28 Sep 2025 12:25:54 +0300 Subject: [PATCH] params: implement String() method for ChainConfig to show timestamp values --- params/config.go | 117 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/params/config.go b/params/config.go index 0cf3198ff9..dc8173e61f 100644 --- a/params/config.go +++ b/params/config.go @@ -504,6 +504,123 @@ func (c CliqueConfig) String() string { return fmt.Sprintf("clique(period: %d, epoch: %d)", c.Period, c.Epoch) } +// String implements the fmt.Stringer interface, returning a string representation +// of ChainConfig that shows actual timestamp values instead of pointer addresses. +func (c *ChainConfig) String() string { + result := fmt.Sprintf("ChainConfig{ChainID: %v", c.ChainID) + + // Add block-based forks + if c.HomesteadBlock != nil { + result += fmt.Sprintf(", HomesteadBlock: %v", c.HomesteadBlock) + } + if c.DAOForkBlock != nil { + result += fmt.Sprintf(", DAOForkBlock: %v", c.DAOForkBlock) + } + if c.EIP150Block != nil { + result += fmt.Sprintf(", EIP150Block: %v", c.EIP150Block) + } + if c.EIP155Block != nil { + result += fmt.Sprintf(", EIP155Block: %v", c.EIP155Block) + } + if c.EIP158Block != nil { + result += fmt.Sprintf(", EIP158Block: %v", c.EIP158Block) + } + if c.ByzantiumBlock != nil { + result += fmt.Sprintf(", ByzantiumBlock: %v", c.ByzantiumBlock) + } + if c.ConstantinopleBlock != nil { + result += fmt.Sprintf(", ConstantinopleBlock: %v", c.ConstantinopleBlock) + } + if c.PetersburgBlock != nil { + result += fmt.Sprintf(", PetersburgBlock: %v", c.PetersburgBlock) + } + if c.IstanbulBlock != nil { + result += fmt.Sprintf(", IstanbulBlock: %v", c.IstanbulBlock) + } + if c.MuirGlacierBlock != nil { + result += fmt.Sprintf(", MuirGlacierBlock: %v", c.MuirGlacierBlock) + } + if c.BerlinBlock != nil { + result += fmt.Sprintf(", BerlinBlock: %v", c.BerlinBlock) + } + if c.LondonBlock != nil { + result += fmt.Sprintf(", LondonBlock: %v", c.LondonBlock) + } + if c.ArrowGlacierBlock != nil { + result += fmt.Sprintf(", ArrowGlacierBlock: %v", c.ArrowGlacierBlock) + } + if c.GrayGlacierBlock != nil { + result += fmt.Sprintf(", GrayGlacierBlock: %v", c.GrayGlacierBlock) + } + if c.MergeNetsplitBlock != nil { + result += fmt.Sprintf(", MergeNetsplitBlock: %v", c.MergeNetsplitBlock) + } + + // Add timestamp-based forks with dereferenced values + if c.ShanghaiTime != nil { + result += fmt.Sprintf(", ShanghaiTime: %v", *c.ShanghaiTime) + } else { + result += ", ShanghaiTime: nil" + } + if c.CancunTime != nil { + result += fmt.Sprintf(", CancunTime: %v", *c.CancunTime) + } else { + result += ", CancunTime: nil" + } + if c.PragueTime != nil { + result += fmt.Sprintf(", PragueTime: %v", *c.PragueTime) + } else { + result += ", PragueTime: nil" + } + if c.OsakaTime != nil { + result += fmt.Sprintf(", OsakaTime: %v", *c.OsakaTime) + } else { + result += ", OsakaTime: nil" + } + if c.VerkleTime != nil { + result += fmt.Sprintf(", VerkleTime: %v", *c.VerkleTime) + } else { + result += ", VerkleTime: nil" + } + if c.BPO1Time != nil { + result += fmt.Sprintf(", BPO1Time: %v", *c.BPO1Time) + } else { + result += ", BPO1Time: nil" + } + if c.BPO2Time != nil { + result += fmt.Sprintf(", BPO2Time: %v", *c.BPO2Time) + } else { + result += ", BPO2Time: nil" + } + if c.BPO3Time != nil { + result += fmt.Sprintf(", BPO3Time: %v", *c.BPO3Time) + } else { + result += ", BPO3Time: nil" + } + if c.BPO4Time != nil { + result += fmt.Sprintf(", BPO4Time: %v", *c.BPO4Time) + } else { + result += ", BPO4Time: nil" + } + if c.BPO5Time != nil { + result += fmt.Sprintf(", BPO5Time: %v", *c.BPO5Time) + } else { + result += ", BPO5Time: nil" + } + if c.AmsterdamTime != nil { + result += fmt.Sprintf(", AmsterdamTime: %v", *c.AmsterdamTime) + } else { + result += ", AmsterdamTime: nil" + } + + if c.TerminalTotalDifficulty != nil { + result += fmt.Sprintf(", TerminalTotalDifficulty: %v", c.TerminalTotalDifficulty) + } + + result += "}" + return result +} + // Description returns a human-readable description of ChainConfig. func (c *ChainConfig) Description() string { var banner string