diff --git a/params/bootnodes.go b/params/bootnodes.go
deleted file mode 100644
index 5e2c7c2181..0000000000
--- a/params/bootnodes.go
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// 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 .
-
-package params
-
-import "github.com/ethereum/go-ethereum/common"
-
-// MainnetBootnodes are the enode URLs of the P2P bootstrap nodes running on
-// the main Ethereum network.
-var MainnetBootnodes = []string{
- // Ethereum Foundation Go Bootnodes
- "enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303", // bootnode-aws-ap-southeast-1-001
- "enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303", // bootnode-aws-us-east-1-001
- "enode://2b252ab6a1d0f971d9722cb839a42cb81db019ba44c08754628ab4a823487071b5695317c8ccd085219c3a03af063495b2f1da8d18218da2d6a82981b45e6ffc@65.108.70.101:30303", // bootnode-hetzner-hel
- "enode://4aeb4ab6c14b23e2c4cfdce879c04b0748a20d8e9b59e25ded2a08143e265c6c25936e74cbc8e641e3312ca288673d91f2f93f8e277de3cfa444ecdaaf982052@157.90.35.166:30303", // bootnode-hetzner-fsn
-}
-
-// HoleskyBootnodes are the enode URLs of the P2P bootstrap nodes running on the
-// Holesky test network.
-var HoleskyBootnodes = []string{
- // EF DevOps
- "enode://ac906289e4b7f12df423d654c5a962b6ebe5b3a74cc9e06292a85221f9a64a6f1cfdd6b714ed6dacef51578f92b34c60ee91e9ede9c7f8fadc4d347326d95e2b@146.190.13.128:30303",
- "enode://a3435a0155a3e837c02f5e7f5662a2f1fbc25b48e4dc232016e1c51b544cb5b4510ef633ea3278c0e970fa8ad8141e2d4d0f9f95456c537ff05fdf9b31c15072@178.128.136.233:30303",
-}
-
-// SepoliaBootnodes are the enode URLs of the P2P bootstrap nodes running on the
-// Sepolia test network.
-var SepoliaBootnodes = []string{
- // EF DevOps
- "enode://4e5e92199ee224a01932a377160aa432f31d0b351f84ab413a8e0a42f4f36476f8fb1cbe914af0d9aef0d51665c214cf653c651c4bbd9d5550a934f241f1682b@138.197.51.181:30303", // sepolia-bootnode-1-nyc3
- "enode://143e11fb766781d22d92a2e33f8f104cddae4411a122295ed1fdb6638de96a6ce65f5b7c964ba3763bba27961738fef7d3ecc739268f3e5e771fb4c87b6234ba@146.190.1.103:30303", // sepolia-bootnode-1-sfo3
- "enode://8b61dc2d06c3f96fddcbebb0efb29d60d3598650275dc469c22229d3e5620369b0d3dedafd929835fe7f489618f19f456fe7c0df572bf2d914a9f4e006f783a9@170.64.250.88:30303", // sepolia-bootnode-1-syd1
- "enode://10d62eff032205fcef19497f35ca8477bea0eadfff6d769a147e895d8b2b8f8ae6341630c645c30f5df6e67547c03494ced3d9c5764e8622a26587b083b028e8@139.59.49.206:30303", // sepolia-bootnode-1-blr1
- "enode://9e9492e2e8836114cc75f5b929784f4f46c324ad01daf87d956f98b3b6c5fcba95524d6e5cf9861dc96a2c8a171ea7105bb554a197455058de185fa870970c7c@138.68.123.152:30303", // sepolia-bootnode-1-ams3
-}
-
-// GoerliBootnodes are the enode URLs of the P2P bootstrap nodes running on the
-// Görli test network.
-var GoerliBootnodes = []string{
- // Upstream bootnodes
- "enode://011f758e6552d105183b1761c5e2dea0111bc20fd5f6422bc7f91e0fabbec9a6595caf6239b37feb773dddd3f87240d99d859431891e4a642cf2a0a9e6cbb98a@51.141.78.53:30303",
- "enode://176b9417f511d05b6b2cf3e34b756cf0a7096b3094572a8f6ef4cdcb9d1f9d00683bf0f83347eebdf3b81c3521c2332086d9592802230bf528eaf606a1d9677b@13.93.54.137:30303",
- "enode://46add44b9f13965f7b9875ac6b85f016f341012d84f975377573800a863526f4da19ae2c620ec73d11591fa9510e992ecc03ad0751f53cc02f7c7ed6d55c7291@94.237.54.114:30313",
- "enode://b5948a2d3e9d486c4d75bf32713221c2bd6cf86463302339299bd227dc2e276cd5a1c7ca4f43a0e9122fe9af884efed563bd2a1fd28661f3b5f5ad7bf1de5949@18.218.250.66:30303",
-
- // Ethereum Foundation bootnode
- "enode://a61215641fb8714a373c80edbfa0ea8878243193f57c96eeb44d0bc019ef295abd4e044fd619bfc4c59731a73fb79afe84e9ab6da0c743ceb479cbb6d263fa91@3.11.147.67:30303",
-
- // Goerli Initiative bootnodes
- "enode://d4f764a48ec2a8ecf883735776fdefe0a3949eb0ca476bd7bc8d0954a9defe8fea15ae5da7d40b5d2d59ce9524a99daedadf6da6283fca492cc80b53689fb3b3@46.4.99.122:32109",
- "enode://d2b720352e8216c9efc470091aa91ddafc53e222b32780f505c817ceef69e01d5b0b0797b69db254c586f493872352f5a022b4d8479a00fc92ec55f9ad46a27e@88.99.70.182:30303",
-}
-
-var V5Bootnodes = []string{
- // Teku team's bootnode
- "enr:-KG4QMOEswP62yzDjSwWS4YEjtTZ5PO6r65CPqYBkgTTkrpaedQ8uEUo1uMALtJIvb2w_WWEVmg5yt1UAuK1ftxUU7QDhGV0aDKQu6TalgMAAAD__________4JpZIJ2NIJpcIQEnfA2iXNlY3AyNTZrMaEDfol8oLr6XJ7FsdAYE7lpJhKMls4G_v6qQOGKJUWGb_uDdGNwgiMog3VkcIIjKA", // # 4.157.240.54 | azure-us-east-virginia
- "enr:-KG4QF4B5WrlFcRhUU6dZETwY5ZzAXnA0vGC__L1Kdw602nDZwXSTs5RFXFIFUnbQJmhNGVU6OIX7KVrCSTODsz1tK4DhGV0aDKQu6TalgMAAAD__________4JpZIJ2NIJpcIQExNYEiXNlY3AyNTZrMaECQmM9vp7KhaXhI-nqL_R0ovULLCFSFTa9CPPSdb1zPX6DdGNwgiMog3VkcIIjKA", // 4.196.214.4 | azure-au-east-sydney
- // Prylab team's bootnodes
- "enr:-Ku4QImhMc1z8yCiNJ1TyUxdcfNucje3BGwEHzodEZUan8PherEo4sF7pPHPSIB1NNuSg5fZy7qFsjmUKs2ea1Whi0EBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQOVphkDqal4QzPMksc5wnpuC3gvSC8AfbFOnZY_On34wIN1ZHCCIyg", // 18.223.219.100 | aws-us-east-2-ohio
- "enr:-Ku4QP2xDnEtUXIjzJ_DhlCRN9SN99RYQPJL92TMlSv7U5C1YnYLjwOQHgZIUXw6c-BvRg2Yc2QsZxxoS_pPRVe0yK8Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQMeFF5GrS7UZpAH2Ly84aLK-TyvH-dRo0JM1i8yygH50YN1ZHCCJxA", // 18.223.219.100 | aws-us-east-2-ohio
- "enr:-Ku4QPp9z1W4tAO8Ber_NQierYaOStqhDqQdOPY3bB3jDgkjcbk6YrEnVYIiCBbTxuar3CzS528d2iE7TdJsrL-dEKoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQMw5fqqkw2hHC4F5HZZDPsNmPdB1Gi8JPQK7pRc9XHh-oN1ZHCCKvg", // 18.223.219.100 | aws-us-east-2-ohio
- // Lighthouse team's bootnodes
- "enr:-Le4QPUXJS2BTORXxyx2Ia-9ae4YqA_JWX3ssj4E_J-3z1A-HmFGrU8BpvpqhNabayXeOZ2Nq_sbeDgtzMJpLLnXFgAChGV0aDKQtTA_KgEAAAAAIgEAAAAAAIJpZIJ2NIJpcISsaa0Zg2lwNpAkAIkHAAAAAPA8kv_-awoTiXNlY3AyNTZrMaEDHAD2JKYevx89W0CcFJFiskdcEzkH_Wdv9iW42qLK79ODdWRwgiMohHVkcDaCI4I", // 172.105.173.25 | linode-au-sydney
- "enr:-Le4QLHZDSvkLfqgEo8IWGG96h6mxwe_PsggC20CL3neLBjfXLGAQFOPSltZ7oP6ol54OvaNqO02Rnvb8YmDR274uq8ChGV0aDKQtTA_KgEAAAAAIgEAAAAAAIJpZIJ2NIJpcISLosQxg2lwNpAqAX4AAAAAAPA8kv_-ax65iXNlY3AyNTZrMaEDBJj7_dLFACaxBfaI8KZTh_SSJUjhyAyfshimvSqo22WDdWRwgiMohHVkcDaCI4I", // 139.162.196.49 | linode-uk-london
- "enr:-Le4QH6LQrusDbAHPjU_HcKOuMeXfdEB5NJyXgHWFadfHgiySqeDyusQMvfphdYWOzuSZO9Uq2AMRJR5O4ip7OvVma8BhGV0aDKQtTA_KgEAAAAAIgEAAAAAAIJpZIJ2NIJpcISLY9ncg2lwNpAkAh8AgQIBAAAAAAAAAAmXiXNlY3AyNTZrMaECDYCZTZEksF-kmgPholqgVt8IXr-8L7Nu7YrZ7HUpgxmDdWRwgiMohHVkcDaCI4I", // 139.99.217.220 | ovh-au-sydney
- "enr:-Le4QIqLuWybHNONr933Lk0dcMmAB5WgvGKRyDihy1wHDIVlNuuztX62W51voT4I8qD34GcTEOTmag1bcdZ_8aaT4NUBhGV0aDKQtTA_KgEAAAAAIgEAAAAAAIJpZIJ2NIJpcISLY04ng2lwNpAkAh8AgAIBAAAAAAAAAA-fiXNlY3AyNTZrMaEDscnRV6n1m-D9ID5UsURk0jsoKNXt1TIrj8uKOGW6iluDdWRwgiMohHVkcDaCI4I", // 139.99.78.39 | ovh-singapore
- // EF bootnodes
- "enr:-Ku4QHqVeJ8PPICcWk1vSn_XcSkjOkNiTg6Fmii5j6vUQgvzMc9L1goFnLKgXqBJspJjIsB91LTOleFmyWWrFVATGngBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhAMRHkWJc2VjcDI1NmsxoQKLVXFOhp2uX6jeT0DvvDpPcU8FWMjQdR4wMuORMhpX24N1ZHCCIyg", // 3.17.30.69 | aws-us-east-2-ohio
- "enr:-Ku4QG-2_Md3sZIAUebGYT6g0SMskIml77l6yR-M_JXc-UdNHCmHQeOiMLbylPejyJsdAPsTHJyjJB2sYGDLe0dn8uYBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhBLY-NyJc2VjcDI1NmsxoQORcM6e19T1T9gi7jxEZjk_sjVLGFscUNqAY9obgZaxbIN1ZHCCIyg", // 18.216.248.220 | aws-us-east-2-ohio
- "enr:-Ku4QPn5eVhcoF1opaFEvg1b6JNFD2rqVkHQ8HApOKK61OIcIXD127bKWgAtbwI7pnxx6cDyk_nI88TrZKQaGMZj0q0Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhDayLMaJc2VjcDI1NmsxoQK2sBOLGcUb4AwuYzFuAVCaNHA-dy24UuEKkeFNgCVCsIN1ZHCCIyg", // 54.178.44.198 | aws-ap-northeast-1-tokyo
- "enr:-Ku4QEWzdnVtXc2Q0ZVigfCGggOVB2Vc1ZCPEc6j21NIFLODSJbvNaef1g4PxhPwl_3kax86YPheFUSLXPRs98vvYsoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhDZBrP2Jc2VjcDI1NmsxoQM6jr8Rb1ktLEsVcKAPa08wCsKUmvoQ8khiOl_SLozf9IN1ZHCCIyg", // 54.65.172.253 | aws-ap-northeast-1-tokyo
- // Nimbus team's bootnodes
- "enr:-LK4QA8FfhaAjlb_BXsXxSfiysR7R52Nhi9JBt4F8SPssu8hdE1BXQQEtVDC3qStCW60LSO7hEsVHv5zm8_6Vnjhcn0Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhAN4aBKJc2VjcDI1NmsxoQJerDhsJ-KxZ8sHySMOCmTO6sHM3iCFQ6VMvLTe948MyYN0Y3CCI4yDdWRwgiOM", // 3.120.104.18 | aws-eu-central-1-frankfurt
- "enr:-LK4QKWrXTpV9T78hNG6s8AM6IO4XH9kFT91uZtFg1GcsJ6dKovDOr1jtAAFPnS2lvNltkOGA9k29BUN7lFh_sjuc9QBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhANAdd-Jc2VjcDI1NmsxoQLQa6ai7y9PMN5hpLe5HmiJSlYzMuzP7ZhwRiwHvqNXdoN0Y3CCI4yDdWRwgiOM", // 3.64.117.223 | aws-eu-central-1-frankfurt}
-}
-
-const dnsPrefix = "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@"
-
-// KnownDNSNetwork returns the address of a public DNS-based node list for the given
-// genesis hash and protocol. See https://github.com/ethereum/discv4-dns-lists for more
-// information.
-func KnownDNSNetwork(genesis common.Hash, protocol string) string {
- var net string
- switch genesis {
- case MainnetGenesisHash:
- net = "mainnet"
- case GoerliGenesisHash:
- net = "goerli"
- case SepoliaGenesisHash:
- net = "sepolia"
- case HoleskyGenesisHash:
- net = "holesky"
- default:
- return ""
- }
- return dnsPrefix + protocol + "." + net + ".ethdisco.net"
-}
diff --git a/params/config.go b/params/config.go
deleted file mode 100644
index 463041bd01..0000000000
--- a/params/config.go
+++ /dev/null
@@ -1,879 +0,0 @@
-// Copyright 2016 The go-ethereum Authors
-// 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 .
-
-package params
-
-import (
- "fmt"
- "math/big"
-
- "github.com/ethereum/go-ethereum/common"
-)
-
-// Genesis hashes to enforce below configs on.
-var (
- MainnetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3")
- HoleskyGenesisHash = common.HexToHash("0xb5f7f912443c940f21fd611f12828d75b534364ed9e95ca4e307729a4661bde4")
- SepoliaGenesisHash = common.HexToHash("0x25a5cc106eea7138acab33231d7160d69cb777ee0c2c553fcddf5138993e6dd9")
- GoerliGenesisHash = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a")
-)
-
-func newUint64(val uint64) *uint64 { return &val }
-
-var (
- MainnetTerminalTotalDifficulty, _ = new(big.Int).SetString("58_750_000_000_000_000_000_000", 0)
-
- // MainnetChainConfig is the chain parameters to run a node on the main network.
- MainnetChainConfig = &ChainConfig{
- ChainID: big.NewInt(1),
- HomesteadBlock: big.NewInt(1_150_000),
- DAOForkBlock: big.NewInt(1_920_000),
- DAOForkSupport: true,
- EIP150Block: big.NewInt(2_463_000),
- EIP155Block: big.NewInt(2_675_000),
- EIP158Block: big.NewInt(2_675_000),
- ByzantiumBlock: big.NewInt(4_370_000),
- ConstantinopleBlock: big.NewInt(7_280_000),
- PetersburgBlock: big.NewInt(7_280_000),
- IstanbulBlock: big.NewInt(9_069_000),
- MuirGlacierBlock: big.NewInt(9_200_000),
- BerlinBlock: big.NewInt(12_244_000),
- LondonBlock: big.NewInt(12_965_000),
- ArrowGlacierBlock: big.NewInt(13_773_000),
- GrayGlacierBlock: big.NewInt(15_050_000),
- TerminalTotalDifficulty: MainnetTerminalTotalDifficulty, // 58_750_000_000_000_000_000_000
- TerminalTotalDifficultyPassed: true,
- ShanghaiTime: newUint64(1681338455),
- Ethash: new(EthashConfig),
- }
- // HoleskyChainConfig contains the chain parameters to run a node on the Holesky test network.
- HoleskyChainConfig = &ChainConfig{
- ChainID: big.NewInt(17000),
- HomesteadBlock: big.NewInt(0),
- DAOForkBlock: nil,
- DAOForkSupport: true,
- EIP150Block: big.NewInt(0),
- EIP155Block: big.NewInt(0),
- EIP158Block: big.NewInt(0),
- ByzantiumBlock: big.NewInt(0),
- ConstantinopleBlock: big.NewInt(0),
- PetersburgBlock: big.NewInt(0),
- IstanbulBlock: big.NewInt(0),
- MuirGlacierBlock: nil,
- BerlinBlock: big.NewInt(0),
- LondonBlock: big.NewInt(0),
- ArrowGlacierBlock: nil,
- GrayGlacierBlock: nil,
- TerminalTotalDifficulty: big.NewInt(0),
- TerminalTotalDifficultyPassed: true,
- MergeNetsplitBlock: nil,
- ShanghaiTime: newUint64(1696000704),
- Ethash: new(EthashConfig),
- }
- // SepoliaChainConfig contains the chain parameters to run a node on the Sepolia test network.
- SepoliaChainConfig = &ChainConfig{
- ChainID: big.NewInt(11155111),
- HomesteadBlock: big.NewInt(0),
- DAOForkBlock: nil,
- DAOForkSupport: true,
- EIP150Block: big.NewInt(0),
- EIP155Block: big.NewInt(0),
- EIP158Block: big.NewInt(0),
- ByzantiumBlock: big.NewInt(0),
- ConstantinopleBlock: big.NewInt(0),
- PetersburgBlock: big.NewInt(0),
- IstanbulBlock: big.NewInt(0),
- MuirGlacierBlock: big.NewInt(0),
- BerlinBlock: big.NewInt(0),
- LondonBlock: big.NewInt(0),
- ArrowGlacierBlock: nil,
- GrayGlacierBlock: nil,
- TerminalTotalDifficulty: big.NewInt(17_000_000_000_000_000),
- TerminalTotalDifficultyPassed: true,
- MergeNetsplitBlock: big.NewInt(1735371),
- ShanghaiTime: newUint64(1677557088),
- Ethash: new(EthashConfig),
- }
- // GoerliChainConfig contains the chain parameters to run a node on the Görli test network.
- GoerliChainConfig = &ChainConfig{
- ChainID: big.NewInt(5),
- HomesteadBlock: big.NewInt(0),
- DAOForkBlock: nil,
- DAOForkSupport: true,
- EIP150Block: big.NewInt(0),
- EIP155Block: big.NewInt(0),
- EIP158Block: big.NewInt(0),
- ByzantiumBlock: big.NewInt(0),
- ConstantinopleBlock: big.NewInt(0),
- PetersburgBlock: big.NewInt(0),
- IstanbulBlock: big.NewInt(1_561_651),
- MuirGlacierBlock: nil,
- BerlinBlock: big.NewInt(4_460_644),
- LondonBlock: big.NewInt(5_062_605),
- ArrowGlacierBlock: nil,
- TerminalTotalDifficulty: big.NewInt(10_790_000),
- TerminalTotalDifficultyPassed: true,
- ShanghaiTime: newUint64(1678832736),
- Clique: &CliqueConfig{
- Period: 15,
- Epoch: 30000,
- },
- }
- // AllEthashProtocolChanges contains every protocol change (EIPs) introduced
- // and accepted by the Ethereum core developers into the Ethash consensus.
- AllEthashProtocolChanges = &ChainConfig{
- ChainID: big.NewInt(1337),
- HomesteadBlock: big.NewInt(0),
- DAOForkBlock: nil,
- DAOForkSupport: false,
- EIP150Block: big.NewInt(0),
- EIP155Block: big.NewInt(0),
- EIP158Block: big.NewInt(0),
- ByzantiumBlock: big.NewInt(0),
- ConstantinopleBlock: big.NewInt(0),
- PetersburgBlock: big.NewInt(0),
- IstanbulBlock: big.NewInt(0),
- MuirGlacierBlock: big.NewInt(0),
- BerlinBlock: big.NewInt(0),
- LondonBlock: big.NewInt(0),
- ArrowGlacierBlock: big.NewInt(0),
- GrayGlacierBlock: big.NewInt(0),
- MergeNetsplitBlock: nil,
- ShanghaiTime: nil,
- CancunTime: nil,
- PragueTime: nil,
- VerkleTime: nil,
- TerminalTotalDifficulty: nil,
- TerminalTotalDifficultyPassed: true,
- Ethash: new(EthashConfig),
- Clique: nil,
- }
-
- AllDevChainProtocolChanges = &ChainConfig{
- ChainID: big.NewInt(1337),
- HomesteadBlock: big.NewInt(0),
- EIP150Block: big.NewInt(0),
- EIP155Block: big.NewInt(0),
- EIP158Block: big.NewInt(0),
- ByzantiumBlock: big.NewInt(0),
- ConstantinopleBlock: big.NewInt(0),
- PetersburgBlock: big.NewInt(0),
- IstanbulBlock: big.NewInt(0),
- MuirGlacierBlock: big.NewInt(0),
- BerlinBlock: big.NewInt(0),
- LondonBlock: big.NewInt(0),
- ArrowGlacierBlock: big.NewInt(0),
- GrayGlacierBlock: big.NewInt(0),
- ShanghaiTime: newUint64(0),
- TerminalTotalDifficulty: big.NewInt(0),
- TerminalTotalDifficultyPassed: true,
- }
-
- // AllCliqueProtocolChanges contains every protocol change (EIPs) introduced
- // and accepted by the Ethereum core developers into the Clique consensus.
- AllCliqueProtocolChanges = &ChainConfig{
- ChainID: big.NewInt(1337),
- HomesteadBlock: big.NewInt(0),
- DAOForkBlock: nil,
- DAOForkSupport: false,
- EIP150Block: big.NewInt(0),
- EIP155Block: big.NewInt(0),
- EIP158Block: big.NewInt(0),
- ByzantiumBlock: big.NewInt(0),
- ConstantinopleBlock: big.NewInt(0),
- PetersburgBlock: big.NewInt(0),
- IstanbulBlock: big.NewInt(0),
- MuirGlacierBlock: big.NewInt(0),
- BerlinBlock: big.NewInt(0),
- LondonBlock: big.NewInt(0),
- ArrowGlacierBlock: nil,
- GrayGlacierBlock: nil,
- MergeNetsplitBlock: nil,
- ShanghaiTime: nil,
- CancunTime: nil,
- PragueTime: nil,
- VerkleTime: nil,
- TerminalTotalDifficulty: nil,
- TerminalTotalDifficultyPassed: false,
- Ethash: nil,
- Clique: &CliqueConfig{Period: 0, Epoch: 30000},
- }
-
- // TestChainConfig contains every protocol change (EIPs) introduced
- // and accepted by the Ethereum core developers for testing purposes.
- TestChainConfig = &ChainConfig{
- ChainID: big.NewInt(1),
- HomesteadBlock: big.NewInt(0),
- DAOForkBlock: nil,
- DAOForkSupport: false,
- EIP150Block: big.NewInt(0),
- EIP155Block: big.NewInt(0),
- EIP158Block: big.NewInt(0),
- ByzantiumBlock: big.NewInt(0),
- ConstantinopleBlock: big.NewInt(0),
- PetersburgBlock: big.NewInt(0),
- IstanbulBlock: big.NewInt(0),
- MuirGlacierBlock: big.NewInt(0),
- BerlinBlock: big.NewInt(0),
- LondonBlock: big.NewInt(0),
- ArrowGlacierBlock: big.NewInt(0),
- GrayGlacierBlock: big.NewInt(0),
- MergeNetsplitBlock: nil,
- ShanghaiTime: nil,
- CancunTime: nil,
- PragueTime: nil,
- VerkleTime: nil,
- TerminalTotalDifficulty: nil,
- TerminalTotalDifficultyPassed: false,
- Ethash: new(EthashConfig),
- Clique: nil,
- }
-
- // NonActivatedConfig defines the chain configuration without activating
- // any protocol change (EIPs).
- NonActivatedConfig = &ChainConfig{
- ChainID: big.NewInt(1),
- HomesteadBlock: nil,
- DAOForkBlock: nil,
- DAOForkSupport: false,
- EIP150Block: nil,
- EIP155Block: nil,
- EIP158Block: nil,
- ByzantiumBlock: nil,
- ConstantinopleBlock: nil,
- PetersburgBlock: nil,
- IstanbulBlock: nil,
- MuirGlacierBlock: nil,
- BerlinBlock: nil,
- LondonBlock: nil,
- ArrowGlacierBlock: nil,
- GrayGlacierBlock: nil,
- MergeNetsplitBlock: nil,
- ShanghaiTime: nil,
- CancunTime: nil,
- PragueTime: nil,
- VerkleTime: nil,
- TerminalTotalDifficulty: nil,
- TerminalTotalDifficultyPassed: false,
- Ethash: new(EthashConfig),
- Clique: nil,
- }
- TestRules = TestChainConfig.Rules(new(big.Int), false, 0)
-)
-
-// NetworkNames are user friendly names to use in the chain spec banner.
-var NetworkNames = map[string]string{
- MainnetChainConfig.ChainID.String(): "mainnet",
- GoerliChainConfig.ChainID.String(): "goerli",
- SepoliaChainConfig.ChainID.String(): "sepolia",
- HoleskyChainConfig.ChainID.String(): "holesky",
-}
-
-// ChainConfig is the core config which determines the blockchain settings.
-//
-// ChainConfig is stored in the database on a per block basis. This means
-// that any network, identified by its genesis block, can have its own
-// set of configuration options.
-type ChainConfig struct {
- ChainID *big.Int `json:"chainId"` // chainId identifies the current chain and is used for replay protection
-
- HomesteadBlock *big.Int `json:"homesteadBlock,omitempty"` // Homestead switch block (nil = no fork, 0 = already homestead)
-
- DAOForkBlock *big.Int `json:"daoForkBlock,omitempty"` // TheDAO hard-fork switch block (nil = no fork)
- DAOForkSupport bool `json:"daoForkSupport,omitempty"` // Whether the nodes supports or opposes the DAO hard-fork
-
- // EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150)
- EIP150Block *big.Int `json:"eip150Block,omitempty"` // EIP150 HF block (nil = no fork)
- EIP155Block *big.Int `json:"eip155Block,omitempty"` // EIP155 HF block
- EIP158Block *big.Int `json:"eip158Block,omitempty"` // EIP158 HF block
-
- ByzantiumBlock *big.Int `json:"byzantiumBlock,omitempty"` // Byzantium switch block (nil = no fork, 0 = already on byzantium)
- ConstantinopleBlock *big.Int `json:"constantinopleBlock,omitempty"` // Constantinople switch block (nil = no fork, 0 = already activated)
- PetersburgBlock *big.Int `json:"petersburgBlock,omitempty"` // Petersburg switch block (nil = same as Constantinople)
- IstanbulBlock *big.Int `json:"istanbulBlock,omitempty"` // Istanbul switch block (nil = no fork, 0 = already on istanbul)
- MuirGlacierBlock *big.Int `json:"muirGlacierBlock,omitempty"` // Eip-2384 (bomb delay) switch block (nil = no fork, 0 = already activated)
- BerlinBlock *big.Int `json:"berlinBlock,omitempty"` // Berlin switch block (nil = no fork, 0 = already on berlin)
- LondonBlock *big.Int `json:"londonBlock,omitempty"` // London switch block (nil = no fork, 0 = already on london)
- ArrowGlacierBlock *big.Int `json:"arrowGlacierBlock,omitempty"` // Eip-4345 (bomb delay) switch block (nil = no fork, 0 = already activated)
- GrayGlacierBlock *big.Int `json:"grayGlacierBlock,omitempty"` // Eip-5133 (bomb delay) switch block (nil = no fork, 0 = already activated)
- MergeNetsplitBlock *big.Int `json:"mergeNetsplitBlock,omitempty"` // Virtual fork after The Merge to use as a network splitter
-
- // Fork scheduling was switched from blocks to timestamps here
-
- ShanghaiTime *uint64 `json:"shanghaiTime,omitempty"` // Shanghai switch time (nil = no fork, 0 = already on shanghai)
- CancunTime *uint64 `json:"cancunTime,omitempty"` // Cancun switch time (nil = no fork, 0 = already on cancun)
- PragueTime *uint64 `json:"pragueTime,omitempty"` // Prague switch time (nil = no fork, 0 = already on prague)
- VerkleTime *uint64 `json:"verkleTime,omitempty"` // Verkle switch time (nil = no fork, 0 = already on verkle)
-
- // TerminalTotalDifficulty is the amount of total difficulty reached by
- // the network that triggers the consensus upgrade.
- TerminalTotalDifficulty *big.Int `json:"terminalTotalDifficulty,omitempty"`
-
- // TerminalTotalDifficultyPassed is a flag specifying that the network already
- // passed the terminal total difficulty. Its purpose is to disable legacy sync
- // even without having seen the TTD locally (safer long term).
- TerminalTotalDifficultyPassed bool `json:"terminalTotalDifficultyPassed,omitempty"`
-
- // Various consensus engines
- Ethash *EthashConfig `json:"ethash,omitempty"`
- Clique *CliqueConfig `json:"clique,omitempty"`
-}
-
-// EthashConfig is the consensus engine configs for proof-of-work based sealing.
-type EthashConfig struct{}
-
-// String implements the stringer interface, returning the consensus engine details.
-func (c *EthashConfig) String() string {
- return "ethash"
-}
-
-// CliqueConfig is the consensus engine configs for proof-of-authority based sealing.
-type CliqueConfig struct {
- Period uint64 `json:"period"` // Number of seconds between blocks to enforce
- Epoch uint64 `json:"epoch"` // Epoch length to reset votes and checkpoint
-}
-
-// String implements the stringer interface, returning the consensus engine details.
-func (c *CliqueConfig) String() string {
- return "clique"
-}
-
-// Description returns a human-readable description of ChainConfig.
-func (c *ChainConfig) Description() string {
- var banner string
-
- // Create some basic network config output
- network := NetworkNames[c.ChainID.String()]
- if network == "" {
- network = "unknown"
- }
- banner += fmt.Sprintf("Chain ID: %v (%s)\n", c.ChainID, network)
- switch {
- case c.Ethash != nil:
- if c.TerminalTotalDifficulty == nil {
- banner += "Consensus: Ethash (proof-of-work)\n"
- } else if !c.TerminalTotalDifficultyPassed {
- banner += "Consensus: Beacon (proof-of-stake), merging from Ethash (proof-of-work)\n"
- } else {
- banner += "Consensus: Beacon (proof-of-stake), merged from Ethash (proof-of-work)\n"
- }
- case c.Clique != nil:
- if c.TerminalTotalDifficulty == nil {
- banner += "Consensus: Clique (proof-of-authority)\n"
- } else if !c.TerminalTotalDifficultyPassed {
- banner += "Consensus: Beacon (proof-of-stake), merging from Clique (proof-of-authority)\n"
- } else {
- banner += "Consensus: Beacon (proof-of-stake), merged from Clique (proof-of-authority)\n"
- }
- default:
- banner += "Consensus: unknown\n"
- }
- banner += "\n"
-
- // 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 (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)
- 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(" - 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)
- }
- 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 += "\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\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)
- 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.CancunTime != nil {
- banner += fmt.Sprintf(" - Cancun: @%-10v\n", *c.CancunTime)
- }
- if c.PragueTime != nil {
- banner += fmt.Sprintf(" - Prague: @%-10v\n", *c.PragueTime)
- }
- if c.VerkleTime != nil {
- banner += fmt.Sprintf(" - Verkle: @%-10v\n", *c.VerkleTime)
- }
- return banner
-}
-
-// IsHomestead returns whether num is either equal to the homestead block or greater.
-func (c *ChainConfig) IsHomestead(num *big.Int) bool {
- return isBlockForked(c.HomesteadBlock, num)
-}
-
-// IsDAOFork returns whether num is either equal to the DAO fork block or greater.
-func (c *ChainConfig) IsDAOFork(num *big.Int) bool {
- return isBlockForked(c.DAOForkBlock, num)
-}
-
-// IsEIP150 returns whether num is either equal to the EIP150 fork block or greater.
-func (c *ChainConfig) IsEIP150(num *big.Int) bool {
- return isBlockForked(c.EIP150Block, num)
-}
-
-// IsEIP155 returns whether num is either equal to the EIP155 fork block or greater.
-func (c *ChainConfig) IsEIP155(num *big.Int) bool {
- return isBlockForked(c.EIP155Block, num)
-}
-
-// IsEIP158 returns whether num is either equal to the EIP158 fork block or greater.
-func (c *ChainConfig) IsEIP158(num *big.Int) bool {
- return isBlockForked(c.EIP158Block, num)
-}
-
-// IsByzantium returns whether num is either equal to the Byzantium fork block or greater.
-func (c *ChainConfig) IsByzantium(num *big.Int) bool {
- return isBlockForked(c.ByzantiumBlock, num)
-}
-
-// IsConstantinople returns whether num is either equal to the Constantinople fork block or greater.
-func (c *ChainConfig) IsConstantinople(num *big.Int) bool {
- return isBlockForked(c.ConstantinopleBlock, num)
-}
-
-// IsMuirGlacier returns whether num is either equal to the Muir Glacier (EIP-2384) fork block or greater.
-func (c *ChainConfig) IsMuirGlacier(num *big.Int) bool {
- return isBlockForked(c.MuirGlacierBlock, num)
-}
-
-// IsPetersburg returns whether num is either
-// - equal to or greater than the PetersburgBlock fork block,
-// - OR is nil, and Constantinople is active
-func (c *ChainConfig) IsPetersburg(num *big.Int) bool {
- return isBlockForked(c.PetersburgBlock, num) || c.PetersburgBlock == nil && isBlockForked(c.ConstantinopleBlock, num)
-}
-
-// IsIstanbul returns whether num is either equal to the Istanbul fork block or greater.
-func (c *ChainConfig) IsIstanbul(num *big.Int) bool {
- return isBlockForked(c.IstanbulBlock, num)
-}
-
-// IsBerlin returns whether num is either equal to the Berlin fork block or greater.
-func (c *ChainConfig) IsBerlin(num *big.Int) bool {
- return isBlockForked(c.BerlinBlock, num)
-}
-
-// IsLondon returns whether num is either equal to the London fork block or greater.
-func (c *ChainConfig) IsLondon(num *big.Int) bool {
- return isBlockForked(c.LondonBlock, num)
-}
-
-// IsArrowGlacier returns whether num is either equal to the Arrow Glacier (EIP-4345) fork block or greater.
-func (c *ChainConfig) IsArrowGlacier(num *big.Int) bool {
- return isBlockForked(c.ArrowGlacierBlock, num)
-}
-
-// IsGrayGlacier returns whether num is either equal to the Gray Glacier (EIP-5133) fork block or greater.
-func (c *ChainConfig) IsGrayGlacier(num *big.Int) bool {
- return isBlockForked(c.GrayGlacierBlock, num)
-}
-
-// IsTerminalPoWBlock returns whether the given block is the last block of PoW stage.
-func (c *ChainConfig) IsTerminalPoWBlock(parentTotalDiff *big.Int, totalDiff *big.Int) bool {
- if c.TerminalTotalDifficulty == nil {
- return false
- }
- return parentTotalDiff.Cmp(c.TerminalTotalDifficulty) < 0 && totalDiff.Cmp(c.TerminalTotalDifficulty) >= 0
-}
-
-// IsShanghai returns whether time is either equal to the Shanghai fork time or greater.
-func (c *ChainConfig) IsShanghai(num *big.Int, time uint64) bool {
- return c.IsLondon(num) && isTimestampForked(c.ShanghaiTime, time)
-}
-
-// IsCancun returns whether num is either equal to the Cancun fork time or greater.
-func (c *ChainConfig) IsCancun(num *big.Int, time uint64) bool {
- return c.IsLondon(num) && isTimestampForked(c.CancunTime, time)
-}
-
-// IsPrague returns whether num is either equal to the Prague fork time or greater.
-func (c *ChainConfig) IsPrague(num *big.Int, time uint64) bool {
- return c.IsLondon(num) && isTimestampForked(c.PragueTime, time)
-}
-
-// IsVerkle returns whether num is either equal to the Verkle fork time or greater.
-func (c *ChainConfig) IsVerkle(num *big.Int, time uint64) bool {
- return c.IsLondon(num) && isTimestampForked(c.VerkleTime, time)
-}
-
-// CheckCompatible checks whether scheduled fork transitions have been imported
-// with a mismatching chain configuration.
-func (c *ChainConfig) CheckCompatible(newcfg *ChainConfig, height uint64, time uint64) *ConfigCompatError {
- var (
- bhead = new(big.Int).SetUint64(height)
- btime = time
- )
- // Iterate checkCompatible to find the lowest conflict.
- var lasterr *ConfigCompatError
- for {
- err := c.checkCompatible(newcfg, bhead, btime)
- if err == nil || (lasterr != nil && err.RewindToBlock == lasterr.RewindToBlock && err.RewindToTime == lasterr.RewindToTime) {
- break
- }
- lasterr = err
-
- if err.RewindToTime > 0 {
- btime = err.RewindToTime
- } else {
- bhead.SetUint64(err.RewindToBlock)
- }
- }
- return lasterr
-}
-
-// CheckConfigForkOrder checks that we don't "skip" any forks, geth isn't pluggable enough
-// to guarantee that forks can be implemented in a different order than on official networks
-func (c *ChainConfig) CheckConfigForkOrder() error {
- type fork struct {
- name string
- block *big.Int // forks up to - and including the merge - were defined with block numbers
- timestamp *uint64 // forks after the merge are scheduled using timestamps
- optional bool // if true, the fork may be nil and next fork is still allowed
- }
- var lastFork fork
- for _, cur := range []fork{
- {name: "homesteadBlock", block: c.HomesteadBlock},
- {name: "daoForkBlock", block: c.DAOForkBlock, optional: true},
- {name: "eip150Block", block: c.EIP150Block},
- {name: "eip155Block", block: c.EIP155Block},
- {name: "eip158Block", block: c.EIP158Block},
- {name: "byzantiumBlock", block: c.ByzantiumBlock},
- {name: "constantinopleBlock", block: c.ConstantinopleBlock},
- {name: "petersburgBlock", block: c.PetersburgBlock},
- {name: "istanbulBlock", block: c.IstanbulBlock},
- {name: "muirGlacierBlock", block: c.MuirGlacierBlock, optional: true},
- {name: "berlinBlock", block: c.BerlinBlock},
- {name: "londonBlock", block: c.LondonBlock},
- {name: "arrowGlacierBlock", block: c.ArrowGlacierBlock, optional: true},
- {name: "grayGlacierBlock", block: c.GrayGlacierBlock, optional: true},
- {name: "mergeNetsplitBlock", block: c.MergeNetsplitBlock, optional: true},
- {name: "shanghaiTime", timestamp: c.ShanghaiTime},
- {name: "cancunTime", timestamp: c.CancunTime, optional: true},
- {name: "pragueTime", timestamp: c.PragueTime, optional: true},
- {name: "verkleTime", timestamp: c.VerkleTime, optional: true},
- } {
- if lastFork.name != "" {
- switch {
- // Non-optional forks must all be present in the chain config up to the last defined fork
- case lastFork.block == nil && lastFork.timestamp == nil && (cur.block != nil || cur.timestamp != nil):
- if cur.block != nil {
- return fmt.Errorf("unsupported fork ordering: %v not enabled, but %v enabled at block %v",
- lastFork.name, cur.name, cur.block)
- } else {
- return fmt.Errorf("unsupported fork ordering: %v not enabled, but %v enabled at timestamp %v",
- lastFork.name, cur.name, cur.timestamp)
- }
-
- // Fork (whether defined by block or timestamp) must follow the fork definition sequence
- case (lastFork.block != nil && cur.block != nil) || (lastFork.timestamp != nil && cur.timestamp != nil):
- if lastFork.block != nil && lastFork.block.Cmp(cur.block) > 0 {
- return fmt.Errorf("unsupported fork ordering: %v enabled at block %v, but %v enabled at block %v",
- lastFork.name, lastFork.block, cur.name, cur.block)
- } else if lastFork.timestamp != nil && *lastFork.timestamp > *cur.timestamp {
- return fmt.Errorf("unsupported fork ordering: %v enabled at timestamp %v, but %v enabled at timestamp %v",
- lastFork.name, lastFork.timestamp, cur.name, cur.timestamp)
- }
-
- // Timestamp based forks can follow block based ones, but not the other way around
- if lastFork.timestamp != nil && cur.block != nil {
- return fmt.Errorf("unsupported fork ordering: %v used timestamp ordering, but %v reverted to block ordering",
- lastFork.name, cur.name)
- }
- }
- }
- // If it was optional and not set, then ignore it
- if !cur.optional || (cur.block != nil || cur.timestamp != nil) {
- lastFork = cur
- }
- }
- return nil
-}
-
-func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, headNumber *big.Int, headTimestamp uint64) *ConfigCompatError {
- if isForkBlockIncompatible(c.HomesteadBlock, newcfg.HomesteadBlock, headNumber) {
- return newBlockCompatError("Homestead fork block", c.HomesteadBlock, newcfg.HomesteadBlock)
- }
- if isForkBlockIncompatible(c.DAOForkBlock, newcfg.DAOForkBlock, headNumber) {
- return newBlockCompatError("DAO fork block", c.DAOForkBlock, newcfg.DAOForkBlock)
- }
- if c.IsDAOFork(headNumber) && c.DAOForkSupport != newcfg.DAOForkSupport {
- return newBlockCompatError("DAO fork support flag", c.DAOForkBlock, newcfg.DAOForkBlock)
- }
- if isForkBlockIncompatible(c.EIP150Block, newcfg.EIP150Block, headNumber) {
- return newBlockCompatError("EIP150 fork block", c.EIP150Block, newcfg.EIP150Block)
- }
- if isForkBlockIncompatible(c.EIP155Block, newcfg.EIP155Block, headNumber) {
- return newBlockCompatError("EIP155 fork block", c.EIP155Block, newcfg.EIP155Block)
- }
- if isForkBlockIncompatible(c.EIP158Block, newcfg.EIP158Block, headNumber) {
- return newBlockCompatError("EIP158 fork block", c.EIP158Block, newcfg.EIP158Block)
- }
- if c.IsEIP158(headNumber) && !configBlockEqual(c.ChainID, newcfg.ChainID) {
- return newBlockCompatError("EIP158 chain ID", c.EIP158Block, newcfg.EIP158Block)
- }
- if isForkBlockIncompatible(c.ByzantiumBlock, newcfg.ByzantiumBlock, headNumber) {
- return newBlockCompatError("Byzantium fork block", c.ByzantiumBlock, newcfg.ByzantiumBlock)
- }
- if isForkBlockIncompatible(c.ConstantinopleBlock, newcfg.ConstantinopleBlock, headNumber) {
- return newBlockCompatError("Constantinople fork block", c.ConstantinopleBlock, newcfg.ConstantinopleBlock)
- }
- if isForkBlockIncompatible(c.PetersburgBlock, newcfg.PetersburgBlock, headNumber) {
- // the only case where we allow Petersburg to be set in the past is if it is equal to Constantinople
- // mainly to satisfy fork ordering requirements which state that Petersburg fork be set if Constantinople fork is set
- if isForkBlockIncompatible(c.ConstantinopleBlock, newcfg.PetersburgBlock, headNumber) {
- return newBlockCompatError("Petersburg fork block", c.PetersburgBlock, newcfg.PetersburgBlock)
- }
- }
- if isForkBlockIncompatible(c.IstanbulBlock, newcfg.IstanbulBlock, headNumber) {
- return newBlockCompatError("Istanbul fork block", c.IstanbulBlock, newcfg.IstanbulBlock)
- }
- if isForkBlockIncompatible(c.MuirGlacierBlock, newcfg.MuirGlacierBlock, headNumber) {
- return newBlockCompatError("Muir Glacier fork block", c.MuirGlacierBlock, newcfg.MuirGlacierBlock)
- }
- if isForkBlockIncompatible(c.BerlinBlock, newcfg.BerlinBlock, headNumber) {
- return newBlockCompatError("Berlin fork block", c.BerlinBlock, newcfg.BerlinBlock)
- }
- if isForkBlockIncompatible(c.LondonBlock, newcfg.LondonBlock, headNumber) {
- return newBlockCompatError("London fork block", c.LondonBlock, newcfg.LondonBlock)
- }
- if isForkBlockIncompatible(c.ArrowGlacierBlock, newcfg.ArrowGlacierBlock, headNumber) {
- return newBlockCompatError("Arrow Glacier fork block", c.ArrowGlacierBlock, newcfg.ArrowGlacierBlock)
- }
- if isForkBlockIncompatible(c.GrayGlacierBlock, newcfg.GrayGlacierBlock, headNumber) {
- return newBlockCompatError("Gray Glacier fork block", c.GrayGlacierBlock, newcfg.GrayGlacierBlock)
- }
- if isForkBlockIncompatible(c.MergeNetsplitBlock, newcfg.MergeNetsplitBlock, headNumber) {
- return newBlockCompatError("Merge netsplit fork block", c.MergeNetsplitBlock, newcfg.MergeNetsplitBlock)
- }
- if isForkTimestampIncompatible(c.ShanghaiTime, newcfg.ShanghaiTime, headTimestamp) {
- return newTimestampCompatError("Shanghai fork timestamp", c.ShanghaiTime, newcfg.ShanghaiTime)
- }
- if isForkTimestampIncompatible(c.CancunTime, newcfg.CancunTime, headTimestamp) {
- return newTimestampCompatError("Cancun fork timestamp", c.CancunTime, newcfg.CancunTime)
- }
- if isForkTimestampIncompatible(c.PragueTime, newcfg.PragueTime, headTimestamp) {
- return newTimestampCompatError("Prague fork timestamp", c.PragueTime, newcfg.PragueTime)
- }
- if isForkTimestampIncompatible(c.VerkleTime, newcfg.VerkleTime, headTimestamp) {
- return newTimestampCompatError("Verkle fork timestamp", c.VerkleTime, newcfg.VerkleTime)
- }
- return nil
-}
-
-// BaseFeeChangeDenominator bounds the amount the base fee can change between blocks.
-func (c *ChainConfig) BaseFeeChangeDenominator() uint64 {
- return DefaultBaseFeeChangeDenominator
-}
-
-// ElasticityMultiplier bounds the maximum gas limit an EIP-1559 block may have.
-func (c *ChainConfig) ElasticityMultiplier() uint64 {
- return DefaultElasticityMultiplier
-}
-
-// isForkBlockIncompatible returns true if a fork scheduled at block s1 cannot be
-// rescheduled to block s2 because head is already past the fork.
-func isForkBlockIncompatible(s1, s2, head *big.Int) bool {
- return (isBlockForked(s1, head) || isBlockForked(s2, head)) && !configBlockEqual(s1, s2)
-}
-
-// isBlockForked returns whether a fork scheduled at block s is active at the
-// given head block. Whilst this method is the same as isTimestampForked, they
-// are explicitly separate for clearer reading.
-func isBlockForked(s, head *big.Int) bool {
- if s == nil || head == nil {
- return false
- }
- return s.Cmp(head) <= 0
-}
-
-func configBlockEqual(x, y *big.Int) bool {
- if x == nil {
- return y == nil
- }
- if y == nil {
- return x == nil
- }
- return x.Cmp(y) == 0
-}
-
-// isForkTimestampIncompatible returns true if a fork scheduled at timestamp s1
-// cannot be rescheduled to timestamp s2 because head is already past the fork.
-func isForkTimestampIncompatible(s1, s2 *uint64, head uint64) bool {
- return (isTimestampForked(s1, head) || isTimestampForked(s2, head)) && !configTimestampEqual(s1, s2)
-}
-
-// isTimestampForked returns whether a fork scheduled at timestamp s is active
-// at the given head timestamp. Whilst this method is the same as isBlockForked,
-// they are explicitly separate for clearer reading.
-func isTimestampForked(s *uint64, head uint64) bool {
- if s == nil {
- return false
- }
- return *s <= head
-}
-
-func configTimestampEqual(x, y *uint64) bool {
- if x == nil {
- return y == nil
- }
- if y == nil {
- return x == nil
- }
- return *x == *y
-}
-
-// ConfigCompatError is raised if the locally-stored blockchain is initialised with a
-// ChainConfig that would alter the past.
-type ConfigCompatError struct {
- What string
-
- // block numbers of the stored and new configurations if block based forking
- StoredBlock, NewBlock *big.Int
-
- // timestamps of the stored and new configurations if time based forking
- StoredTime, NewTime *uint64
-
- // the block number to which the local chain must be rewound to correct the error
- RewindToBlock uint64
-
- // the timestamp to which the local chain must be rewound to correct the error
- RewindToTime uint64
-}
-
-func newBlockCompatError(what string, storedblock, newblock *big.Int) *ConfigCompatError {
- var rew *big.Int
- switch {
- case storedblock == nil:
- rew = newblock
- case newblock == nil || storedblock.Cmp(newblock) < 0:
- rew = storedblock
- default:
- rew = newblock
- }
- err := &ConfigCompatError{
- What: what,
- StoredBlock: storedblock,
- NewBlock: newblock,
- RewindToBlock: 0,
- }
- if rew != nil && rew.Sign() > 0 {
- err.RewindToBlock = rew.Uint64() - 1
- }
- return err
-}
-
-func newTimestampCompatError(what string, storedtime, newtime *uint64) *ConfigCompatError {
- var rew *uint64
- switch {
- case storedtime == nil:
- rew = newtime
- case newtime == nil || *storedtime < *newtime:
- rew = storedtime
- default:
- rew = newtime
- }
- err := &ConfigCompatError{
- What: what,
- StoredTime: storedtime,
- NewTime: newtime,
- RewindToTime: 0,
- }
- if rew != nil {
- err.RewindToTime = *rew - 1
- }
- return err
-}
-
-func (err *ConfigCompatError) Error() string {
- if err.StoredBlock != nil {
- return fmt.Sprintf("mismatching %s in database (have block %d, want block %d, rewindto block %d)", err.What, err.StoredBlock, err.NewBlock, err.RewindToBlock)
- }
- return fmt.Sprintf("mismatching %s in database (have timestamp %d, want timestamp %d, rewindto timestamp %d)", err.What, err.StoredTime, err.NewTime, err.RewindToTime)
-}
-
-// Rules wraps ChainConfig and is merely syntactic sugar or can be used for functions
-// that do not have or require information about the block.
-//
-// Rules is a one time interface meaning that it shouldn't be used in between transition
-// phases.
-type Rules struct {
- ChainID *big.Int
- IsHomestead, IsEIP150, IsEIP155, IsEIP158 bool
- IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool
- IsBerlin, IsLondon bool
- IsMerge, IsShanghai, IsCancun, IsPrague bool
- IsVerkle bool
-}
-
-// Rules ensures c's ChainID is not nil.
-func (c *ChainConfig) Rules(num *big.Int, isMerge bool, timestamp uint64) Rules {
- chainID := c.ChainID
- if chainID == nil {
- chainID = new(big.Int)
- }
- return Rules{
- ChainID: new(big.Int).Set(chainID),
- IsHomestead: c.IsHomestead(num),
- IsEIP150: c.IsEIP150(num),
- IsEIP155: c.IsEIP155(num),
- IsEIP158: c.IsEIP158(num),
- IsByzantium: c.IsByzantium(num),
- IsConstantinople: c.IsConstantinople(num),
- IsPetersburg: c.IsPetersburg(num),
- IsIstanbul: c.IsIstanbul(num),
- IsBerlin: c.IsBerlin(num),
- IsLondon: c.IsLondon(num),
- IsMerge: isMerge,
- IsShanghai: c.IsShanghai(num, timestamp),
- IsCancun: c.IsCancun(num, timestamp),
- IsPrague: c.IsPrague(num, timestamp),
- IsVerkle: c.IsVerkle(num, timestamp),
- }
-}
diff --git a/params/config_test.go b/params/config_test.go
deleted file mode 100644
index bf8ce2fc5e..0000000000
--- a/params/config_test.go
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// 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 .
-
-package params
-
-import (
- "math/big"
- "reflect"
- "testing"
- "time"
-
- "github.com/ethereum/go-ethereum/common/math"
-)
-
-func TestCheckCompatible(t *testing.T) {
- type test struct {
- stored, new *ChainConfig
- headBlock uint64
- headTimestamp uint64
- wantErr *ConfigCompatError
- }
- tests := []test{
- {stored: AllEthashProtocolChanges, new: AllEthashProtocolChanges, headBlock: 0, headTimestamp: 0, wantErr: nil},
- {stored: AllEthashProtocolChanges, new: AllEthashProtocolChanges, headBlock: 0, headTimestamp: uint64(time.Now().Unix()), wantErr: nil},
- {stored: AllEthashProtocolChanges, new: AllEthashProtocolChanges, headBlock: 100, wantErr: nil},
- {
- stored: &ChainConfig{EIP150Block: big.NewInt(10)},
- new: &ChainConfig{EIP150Block: big.NewInt(20)},
- headBlock: 9,
- wantErr: nil,
- },
- {
- stored: AllEthashProtocolChanges,
- new: &ChainConfig{HomesteadBlock: nil},
- headBlock: 3,
- wantErr: &ConfigCompatError{
- What: "Homestead fork block",
- StoredBlock: big.NewInt(0),
- NewBlock: nil,
- RewindToBlock: 0,
- },
- },
- {
- stored: AllEthashProtocolChanges,
- new: &ChainConfig{HomesteadBlock: big.NewInt(1)},
- headBlock: 3,
- wantErr: &ConfigCompatError{
- What: "Homestead fork block",
- StoredBlock: big.NewInt(0),
- NewBlock: big.NewInt(1),
- RewindToBlock: 0,
- },
- },
- {
- stored: &ChainConfig{HomesteadBlock: big.NewInt(30), EIP150Block: big.NewInt(10)},
- new: &ChainConfig{HomesteadBlock: big.NewInt(25), EIP150Block: big.NewInt(20)},
- headBlock: 25,
- wantErr: &ConfigCompatError{
- What: "EIP150 fork block",
- StoredBlock: big.NewInt(10),
- NewBlock: big.NewInt(20),
- RewindToBlock: 9,
- },
- },
- {
- stored: &ChainConfig{ConstantinopleBlock: big.NewInt(30)},
- new: &ChainConfig{ConstantinopleBlock: big.NewInt(30), PetersburgBlock: big.NewInt(30)},
- headBlock: 40,
- wantErr: nil,
- },
- {
- stored: &ChainConfig{ConstantinopleBlock: big.NewInt(30)},
- new: &ChainConfig{ConstantinopleBlock: big.NewInt(30), PetersburgBlock: big.NewInt(31)},
- headBlock: 40,
- wantErr: &ConfigCompatError{
- What: "Petersburg fork block",
- StoredBlock: nil,
- NewBlock: big.NewInt(31),
- RewindToBlock: 30,
- },
- },
- {
- stored: &ChainConfig{ShanghaiTime: newUint64(10)},
- new: &ChainConfig{ShanghaiTime: newUint64(20)},
- headTimestamp: 9,
- wantErr: nil,
- },
- {
- stored: &ChainConfig{ShanghaiTime: newUint64(10)},
- new: &ChainConfig{ShanghaiTime: newUint64(20)},
- headTimestamp: 25,
- wantErr: &ConfigCompatError{
- What: "Shanghai fork timestamp",
- StoredTime: newUint64(10),
- NewTime: newUint64(20),
- RewindToTime: 9,
- },
- },
- }
-
- for _, test := range tests {
- err := test.stored.CheckCompatible(test.new, test.headBlock, test.headTimestamp)
- if !reflect.DeepEqual(err, test.wantErr) {
- t.Errorf("error mismatch:\nstored: %v\nnew: %v\nheadBlock: %v\nheadTimestamp: %v\nerr: %v\nwant: %v", test.stored, test.new, test.headBlock, test.headTimestamp, err, test.wantErr)
- }
- }
-}
-
-func TestConfigRules(t *testing.T) {
- c := &ChainConfig{
- LondonBlock: new(big.Int),
- ShanghaiTime: newUint64(500),
- }
- var stamp uint64
- if r := c.Rules(big.NewInt(0), true, stamp); r.IsShanghai {
- t.Errorf("expected %v to not be shanghai", stamp)
- }
- stamp = 500
- if r := c.Rules(big.NewInt(0), true, stamp); !r.IsShanghai {
- t.Errorf("expected %v to be shanghai", stamp)
- }
- stamp = math.MaxInt64
- if r := c.Rules(big.NewInt(0), true, stamp); !r.IsShanghai {
- t.Errorf("expected %v to be shanghai", stamp)
- }
-}
diff --git a/params/dao.go b/params/dao.go
deleted file mode 100644
index da3c8dfc99..0000000000
--- a/params/dao.go
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright 2016 The go-ethereum Authors
-// 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 .
-
-package params
-
-import (
- "math/big"
-
- "github.com/ethereum/go-ethereum/common"
-)
-
-// DAOForkBlockExtra is the block header extra-data field to set for the DAO fork
-// point and a number of consecutive blocks to allow fast/light syncers to correctly
-// pick the side they want ("dao-hard-fork").
-var DAOForkBlockExtra = common.FromHex("0x64616f2d686172642d666f726b")
-
-// DAOForkExtraRange is the number of consecutive blocks from the DAO fork point
-// to override the extra-data in to prevent no-fork attacks.
-var DAOForkExtraRange = big.NewInt(10)
-
-// DAORefundContract is the address of the refund contract to send DAO balances to.
-var DAORefundContract = common.HexToAddress("0xbf4ed7b27f1d666546e30d74d50d173d20bca754")
-
-// DAODrainList is the list of accounts whose full balances will be moved into a
-// refund contract at the beginning of the dao-fork block.
-func DAODrainList() []common.Address {
- return []common.Address{
- common.HexToAddress("0xd4fe7bc31cedb7bfb8a345f31e668033056b2728"),
- common.HexToAddress("0xb3fb0e5aba0e20e5c49d252dfd30e102b171a425"),
- common.HexToAddress("0x2c19c7f9ae8b751e37aeb2d93a699722395ae18f"),
- common.HexToAddress("0xecd135fa4f61a655311e86238c92adcd779555d2"),
- common.HexToAddress("0x1975bd06d486162d5dc297798dfc41edd5d160a7"),
- common.HexToAddress("0xa3acf3a1e16b1d7c315e23510fdd7847b48234f6"),
- common.HexToAddress("0x319f70bab6845585f412ec7724b744fec6095c85"),
- common.HexToAddress("0x06706dd3f2c9abf0a21ddcc6941d9b86f0596936"),
- common.HexToAddress("0x5c8536898fbb74fc7445814902fd08422eac56d0"),
- common.HexToAddress("0x6966ab0d485353095148a2155858910e0965b6f9"),
- common.HexToAddress("0x779543a0491a837ca36ce8c635d6154e3c4911a6"),
- common.HexToAddress("0x2a5ed960395e2a49b1c758cef4aa15213cfd874c"),
- common.HexToAddress("0x5c6e67ccd5849c0d29219c4f95f1a7a93b3f5dc5"),
- common.HexToAddress("0x9c50426be05db97f5d64fc54bf89eff947f0a321"),
- common.HexToAddress("0x200450f06520bdd6c527622a273333384d870efb"),
- common.HexToAddress("0xbe8539bfe837b67d1282b2b1d61c3f723966f049"),
- common.HexToAddress("0x6b0c4d41ba9ab8d8cfb5d379c69a612f2ced8ecb"),
- common.HexToAddress("0xf1385fb24aad0cd7432824085e42aff90886fef5"),
- common.HexToAddress("0xd1ac8b1ef1b69ff51d1d401a476e7e612414f091"),
- common.HexToAddress("0x8163e7fb499e90f8544ea62bbf80d21cd26d9efd"),
- common.HexToAddress("0x51e0ddd9998364a2eb38588679f0d2c42653e4a6"),
- common.HexToAddress("0x627a0a960c079c21c34f7612d5d230e01b4ad4c7"),
- common.HexToAddress("0xf0b1aa0eb660754448a7937c022e30aa692fe0c5"),
- common.HexToAddress("0x24c4d950dfd4dd1902bbed3508144a54542bba94"),
- common.HexToAddress("0x9f27daea7aca0aa0446220b98d028715e3bc803d"),
- common.HexToAddress("0xa5dc5acd6a7968a4554d89d65e59b7fd3bff0f90"),
- common.HexToAddress("0xd9aef3a1e38a39c16b31d1ace71bca8ef58d315b"),
- common.HexToAddress("0x63ed5a272de2f6d968408b4acb9024f4cc208ebf"),
- common.HexToAddress("0x6f6704e5a10332af6672e50b3d9754dc460dfa4d"),
- common.HexToAddress("0x77ca7b50b6cd7e2f3fa008e24ab793fd56cb15f6"),
- common.HexToAddress("0x492ea3bb0f3315521c31f273e565b868fc090f17"),
- common.HexToAddress("0x0ff30d6de14a8224aa97b78aea5388d1c51c1f00"),
- common.HexToAddress("0x9ea779f907f0b315b364b0cfc39a0fde5b02a416"),
- common.HexToAddress("0xceaeb481747ca6c540a000c1f3641f8cef161fa7"),
- common.HexToAddress("0xcc34673c6c40e791051898567a1222daf90be287"),
- common.HexToAddress("0x579a80d909f346fbfb1189493f521d7f48d52238"),
- common.HexToAddress("0xe308bd1ac5fda103967359b2712dd89deffb7973"),
- common.HexToAddress("0x4cb31628079fb14e4bc3cd5e30c2f7489b00960c"),
- common.HexToAddress("0xac1ecab32727358dba8962a0f3b261731aad9723"),
- common.HexToAddress("0x4fd6ace747f06ece9c49699c7cabc62d02211f75"),
- common.HexToAddress("0x440c59b325d2997a134c2c7c60a8c61611212bad"),
- common.HexToAddress("0x4486a3d68fac6967006d7a517b889fd3f98c102b"),
- common.HexToAddress("0x9c15b54878ba618f494b38f0ae7443db6af648ba"),
- common.HexToAddress("0x27b137a85656544b1ccb5a0f2e561a5703c6a68f"),
- common.HexToAddress("0x21c7fdb9ed8d291d79ffd82eb2c4356ec0d81241"),
- common.HexToAddress("0x23b75c2f6791eef49c69684db4c6c1f93bf49a50"),
- common.HexToAddress("0x1ca6abd14d30affe533b24d7a21bff4c2d5e1f3b"),
- common.HexToAddress("0xb9637156d330c0d605a791f1c31ba5890582fe1c"),
- common.HexToAddress("0x6131c42fa982e56929107413a9d526fd99405560"),
- common.HexToAddress("0x1591fc0f688c81fbeb17f5426a162a7024d430c2"),
- common.HexToAddress("0x542a9515200d14b68e934e9830d91645a980dd7a"),
- common.HexToAddress("0xc4bbd073882dd2add2424cf47d35213405b01324"),
- common.HexToAddress("0x782495b7b3355efb2833d56ecb34dc22ad7dfcc4"),
- common.HexToAddress("0x58b95c9a9d5d26825e70a82b6adb139d3fd829eb"),
- common.HexToAddress("0x3ba4d81db016dc2890c81f3acec2454bff5aada5"),
- common.HexToAddress("0xb52042c8ca3f8aa246fa79c3feaa3d959347c0ab"),
- common.HexToAddress("0xe4ae1efdfc53b73893af49113d8694a057b9c0d1"),
- common.HexToAddress("0x3c02a7bc0391e86d91b7d144e61c2c01a25a79c5"),
- common.HexToAddress("0x0737a6b837f97f46ebade41b9bc3e1c509c85c53"),
- common.HexToAddress("0x97f43a37f595ab5dd318fb46e7a155eae057317a"),
- common.HexToAddress("0x52c5317c848ba20c7504cb2c8052abd1fde29d03"),
- common.HexToAddress("0x4863226780fe7c0356454236d3b1c8792785748d"),
- common.HexToAddress("0x5d2b2e6fcbe3b11d26b525e085ff818dae332479"),
- common.HexToAddress("0x5f9f3392e9f62f63b8eac0beb55541fc8627f42c"),
- common.HexToAddress("0x057b56736d32b86616a10f619859c6cd6f59092a"),
- common.HexToAddress("0x9aa008f65de0b923a2a4f02012ad034a5e2e2192"),
- common.HexToAddress("0x304a554a310c7e546dfe434669c62820b7d83490"),
- common.HexToAddress("0x914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79"),
- common.HexToAddress("0x4deb0033bb26bc534b197e61d19e0733e5679784"),
- common.HexToAddress("0x07f5c1e1bc2c93e0402f23341973a0e043f7bf8a"),
- common.HexToAddress("0x35a051a0010aba705c9008d7a7eff6fb88f6ea7b"),
- common.HexToAddress("0x4fa802324e929786dbda3b8820dc7834e9134a2a"),
- common.HexToAddress("0x9da397b9e80755301a3b32173283a91c0ef6c87e"),
- common.HexToAddress("0x8d9edb3054ce5c5774a420ac37ebae0ac02343c6"),
- common.HexToAddress("0x0101f3be8ebb4bbd39a2e3b9a3639d4259832fd9"),
- common.HexToAddress("0x5dc28b15dffed94048d73806ce4b7a4612a1d48f"),
- common.HexToAddress("0xbcf899e6c7d9d5a215ab1e3444c86806fa854c76"),
- common.HexToAddress("0x12e626b0eebfe86a56d633b9864e389b45dcb260"),
- common.HexToAddress("0xa2f1ccba9395d7fcb155bba8bc92db9bafaeade7"),
- common.HexToAddress("0xec8e57756626fdc07c63ad2eafbd28d08e7b0ca5"),
- common.HexToAddress("0xd164b088bd9108b60d0ca3751da4bceb207b0782"),
- common.HexToAddress("0x6231b6d0d5e77fe001c2a460bd9584fee60d409b"),
- common.HexToAddress("0x1cba23d343a983e9b5cfd19496b9a9701ada385f"),
- common.HexToAddress("0xa82f360a8d3455c5c41366975bde739c37bfeb8a"),
- common.HexToAddress("0x9fcd2deaff372a39cc679d5c5e4de7bafb0b1339"),
- common.HexToAddress("0x005f5cee7a43331d5a3d3eec71305925a62f34b6"),
- common.HexToAddress("0x0e0da70933f4c7849fc0d203f5d1d43b9ae4532d"),
- common.HexToAddress("0xd131637d5275fd1a68a3200f4ad25c71a2a9522e"),
- common.HexToAddress("0xbc07118b9ac290e4622f5e77a0853539789effbe"),
- common.HexToAddress("0x47e7aa56d6bdf3f36be34619660de61275420af8"),
- common.HexToAddress("0xacd87e28b0c9d1254e868b81cba4cc20d9a32225"),
- common.HexToAddress("0xadf80daec7ba8dcf15392f1ac611fff65d94f880"),
- common.HexToAddress("0x5524c55fb03cf21f549444ccbecb664d0acad706"),
- common.HexToAddress("0x40b803a9abce16f50f36a77ba41180eb90023925"),
- common.HexToAddress("0xfe24cdd8648121a43a7c86d289be4dd2951ed49f"),
- common.HexToAddress("0x17802f43a0137c506ba92291391a8a8f207f487d"),
- common.HexToAddress("0x253488078a4edf4d6f42f113d1e62836a942cf1a"),
- common.HexToAddress("0x86af3e9626fce1957c82e88cbf04ddf3a2ed7915"),
- common.HexToAddress("0xb136707642a4ea12fb4bae820f03d2562ebff487"),
- common.HexToAddress("0xdbe9b615a3ae8709af8b93336ce9b477e4ac0940"),
- common.HexToAddress("0xf14c14075d6c4ed84b86798af0956deef67365b5"),
- common.HexToAddress("0xca544e5c4687d109611d0f8f928b53a25af72448"),
- common.HexToAddress("0xaeeb8ff27288bdabc0fa5ebb731b6f409507516c"),
- common.HexToAddress("0xcbb9d3703e651b0d496cdefb8b92c25aeb2171f7"),
- common.HexToAddress("0x6d87578288b6cb5549d5076a207456a1f6a63dc0"),
- common.HexToAddress("0xb2c6f0dfbb716ac562e2d85d6cb2f8d5ee87603e"),
- common.HexToAddress("0xaccc230e8a6e5be9160b8cdf2864dd2a001c28b6"),
- common.HexToAddress("0x2b3455ec7fedf16e646268bf88846bd7a2319bb2"),
- common.HexToAddress("0x4613f3bca5c44ea06337a9e439fbc6d42e501d0a"),
- common.HexToAddress("0xd343b217de44030afaa275f54d31a9317c7f441e"),
- common.HexToAddress("0x84ef4b2357079cd7a7c69fd7a37cd0609a679106"),
- common.HexToAddress("0xda2fef9e4a3230988ff17df2165440f37e8b1708"),
- common.HexToAddress("0xf4c64518ea10f995918a454158c6b61407ea345c"),
- common.HexToAddress("0x7602b46df5390e432ef1c307d4f2c9ff6d65cc97"),
- common.HexToAddress("0xbb9bc244d798123fde783fcc1c72d3bb8c189413"),
- common.HexToAddress("0x807640a13483f8ac783c557fcdf27be11ea4ac7a"),
- }
-}
diff --git a/params/denomination.go b/params/denomination.go
deleted file mode 100644
index bcedd271e0..0000000000
--- a/params/denomination.go
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// 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 .
-
-package params
-
-// These are the multipliers for ether denominations.
-// Example: To get the wei value of an amount in 'gwei', use
-//
-// new(big.Int).Mul(value, big.NewInt(params.GWei))
-const (
- Wei = 1
- GWei = 1e9
- Ether = 1e18
-)
diff --git a/params/network_params.go b/params/network_params.go
deleted file mode 100644
index 9311b5e2d5..0000000000
--- a/params/network_params.go
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2017 The go-ethereum Authors
-// 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 .
-
-package params
-
-// These are network parameters that need to be constant between clients, but
-// aren't necessarily consensus related.
-
-const (
- // BloomBitsBlocks is the number of blocks a single bloom bit section vector
- // contains on the server side.
- BloomBitsBlocks uint64 = 4096
-
- // BloomBitsBlocksClient is the number of blocks a single bloom bit section vector
- // contains on the light client side
- BloomBitsBlocksClient uint64 = 32768
-
- // BloomConfirms is the number of confirmation blocks before a bloom section is
- // considered probably final and its rotated bits are calculated.
- BloomConfirms = 256
-
- // CHTFrequency is the block frequency for creating CHTs
- CHTFrequency = 32768
-
- // BloomTrieFrequency is the block frequency for creating BloomTrie on both
- // server/client sides.
- BloomTrieFrequency = 32768
-
- // HelperTrieConfirmations is the number of confirmations before a client is expected
- // to have the given HelperTrie available.
- HelperTrieConfirmations = 2048
-
- // HelperTrieProcessConfirmations is the number of confirmations before a HelperTrie
- // is generated
- HelperTrieProcessConfirmations = 256
-
- // CheckpointFrequency is the block frequency for creating checkpoint
- CheckpointFrequency = 32768
-
- // CheckpointProcessConfirmations is the number before a checkpoint is generated
- CheckpointProcessConfirmations = 256
-
- // FullImmutabilityThreshold is the number of blocks after which a chain segment is
- // considered immutable (i.e. soft finality). It is used by the downloader as a
- // hard limit against deep ancestors, by the blockchain against deep reorgs, by
- // the freezer as the cutoff threshold and by clique as the snapshot trust limit.
- FullImmutabilityThreshold = 90000
-
- // LightImmutabilityThreshold is the number of blocks after which a header chain
- // segment is considered immutable for light client(i.e. soft finality). It is used by
- // the downloader as a hard limit against deep ancestors, by the blockchain against deep
- // reorgs, by the light pruner as the pruning validity guarantee.
- LightImmutabilityThreshold = 30000
-)
diff --git a/params/protocol_params.go b/params/protocol_params.go
deleted file mode 100644
index 8a5c011849..0000000000
--- a/params/protocol_params.go
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// 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 .
-
-package params
-
-import (
- "math/big"
-
- "github.com/ethereum/go-ethereum/common"
-)
-
-const (
- GasLimitBoundDivisor uint64 = 1024 // The bound divisor of the gas limit, used in update calculations.
- MinGasLimit uint64 = 5000 // Minimum the gas limit may ever be.
- MaxGasLimit uint64 = 0x7fffffffffffffff // Maximum the gas limit (2^63-1).
- GenesisGasLimit uint64 = 4712388 // Gas limit of the Genesis block.
-
- MaximumExtraDataSize uint64 = 32 // Maximum size extra data may be after Genesis.
- ExpByteGas uint64 = 10 // Times ceil(log256(exponent)) for the EXP instruction.
- SloadGas uint64 = 50 // Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added.
- CallValueTransferGas uint64 = 9000 // Paid for CALL when the value transfer is non-zero.
- CallNewAccountGas uint64 = 25000 // Paid for CALL when the destination address didn't exist prior.
- TxGas uint64 = 21000 // Per transaction not creating a contract. NOTE: Not payable on data of calls between transactions.
- TxGasContractCreation uint64 = 53000 // Per transaction that creates a contract. NOTE: Not payable on data of calls between transactions.
- TxDataZeroGas uint64 = 4 // Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions.
- QuadCoeffDiv uint64 = 512 // Divisor for the quadratic particle of the memory cost equation.
- LogDataGas uint64 = 8 // Per byte in a LOG* operation's data.
- CallStipend uint64 = 2300 // Free gas given at beginning of call.
-
- Keccak256Gas uint64 = 30 // Once per KECCAK256 operation.
- Keccak256WordGas uint64 = 6 // Once per word of the KECCAK256 operation's data.
- InitCodeWordGas uint64 = 2 // Once per word of the init code when creating a contract.
-
- SstoreSetGas uint64 = 20000 // Once per SSTORE operation.
- SstoreResetGas uint64 = 5000 // Once per SSTORE operation if the zeroness changes from zero.
- SstoreClearGas uint64 = 5000 // Once per SSTORE operation if the zeroness doesn't change.
- SstoreRefundGas uint64 = 15000 // Once per SSTORE operation if the zeroness changes to zero.
-
- NetSstoreNoopGas uint64 = 200 // Once per SSTORE operation if the value doesn't change.
- NetSstoreInitGas uint64 = 20000 // Once per SSTORE operation from clean zero.
- NetSstoreCleanGas uint64 = 5000 // Once per SSTORE operation from clean non-zero.
- NetSstoreDirtyGas uint64 = 200 // Once per SSTORE operation from dirty.
-
- NetSstoreClearRefund uint64 = 15000 // Once per SSTORE operation for clearing an originally existing storage slot
- NetSstoreResetRefund uint64 = 4800 // Once per SSTORE operation for resetting to the original non-zero value
- NetSstoreResetClearRefund uint64 = 19800 // Once per SSTORE operation for resetting to the original zero value
-
- SstoreSentryGasEIP2200 uint64 = 2300 // Minimum gas required to be present for an SSTORE call, not consumed
- SstoreSetGasEIP2200 uint64 = 20000 // Once per SSTORE operation from clean zero to non-zero
- SstoreResetGasEIP2200 uint64 = 5000 // Once per SSTORE operation from clean non-zero to something else
- SstoreClearsScheduleRefundEIP2200 uint64 = 15000 // Once per SSTORE operation for clearing an originally existing storage slot
-
- ColdAccountAccessCostEIP2929 = uint64(2600) // COLD_ACCOUNT_ACCESS_COST
- ColdSloadCostEIP2929 = uint64(2100) // COLD_SLOAD_COST
- WarmStorageReadCostEIP2929 = uint64(100) // WARM_STORAGE_READ_COST
-
- // In EIP-2200: SstoreResetGas was 5000.
- // In EIP-2929: SstoreResetGas was changed to '5000 - COLD_SLOAD_COST'.
- // In EIP-3529: SSTORE_CLEARS_SCHEDULE is defined as SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST
- // Which becomes: 5000 - 2100 + 1900 = 4800
- SstoreClearsScheduleRefundEIP3529 uint64 = SstoreResetGasEIP2200 - ColdSloadCostEIP2929 + TxAccessListStorageKeyGas
-
- JumpdestGas uint64 = 1 // Once per JUMPDEST operation.
- EpochDuration uint64 = 30000 // Duration between proof-of-work epochs.
-
- CreateDataGas uint64 = 200 //
- CallCreateDepth uint64 = 1024 // Maximum depth of call/create stack.
- ExpGas uint64 = 10 // Once per EXP instruction
- LogGas uint64 = 375 // Per LOG* operation.
- CopyGas uint64 = 3 //
- StackLimit uint64 = 1024 // Maximum size of VM stack allowed.
- TierStepGas uint64 = 0 // Once per operation, for a selection of them.
- LogTopicGas uint64 = 375 // Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas.
- CreateGas uint64 = 32000 // Once per CREATE operation & contract-creation transaction.
- Create2Gas uint64 = 32000 // Once per CREATE2 operation
- SelfdestructRefundGas uint64 = 24000 // Refunded following a selfdestruct operation.
- MemoryGas uint64 = 3 // Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL.
-
- TxDataNonZeroGasFrontier uint64 = 68 // Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions.
- TxDataNonZeroGasEIP2028 uint64 = 16 // Per byte of non zero data attached to a transaction after EIP 2028 (part in Istanbul)
- TxAccessListAddressGas uint64 = 2400 // Per address specified in EIP 2930 access list
- TxAccessListStorageKeyGas uint64 = 1900 // Per storage key specified in EIP 2930 access list
-
- // These have been changed during the course of the chain
- CallGasFrontier uint64 = 40 // Once per CALL operation & message call transaction.
- CallGasEIP150 uint64 = 700 // Static portion of gas for CALL-derivates after EIP 150 (Tangerine)
- BalanceGasFrontier uint64 = 20 // The cost of a BALANCE operation
- BalanceGasEIP150 uint64 = 400 // The cost of a BALANCE operation after Tangerine
- BalanceGasEIP1884 uint64 = 700 // The cost of a BALANCE operation after EIP 1884 (part of Istanbul)
- ExtcodeSizeGasFrontier uint64 = 20 // Cost of EXTCODESIZE before EIP 150 (Tangerine)
- ExtcodeSizeGasEIP150 uint64 = 700 // Cost of EXTCODESIZE after EIP 150 (Tangerine)
- SloadGasFrontier uint64 = 50
- SloadGasEIP150 uint64 = 200
- SloadGasEIP1884 uint64 = 800 // Cost of SLOAD after EIP 1884 (part of Istanbul)
- SloadGasEIP2200 uint64 = 800 // Cost of SLOAD after EIP 2200 (part of Istanbul)
- ExtcodeHashGasConstantinople uint64 = 400 // Cost of EXTCODEHASH (introduced in Constantinople)
- ExtcodeHashGasEIP1884 uint64 = 700 // Cost of EXTCODEHASH after EIP 1884 (part in Istanbul)
- SelfdestructGasEIP150 uint64 = 5000 // Cost of SELFDESTRUCT post EIP 150 (Tangerine)
-
- // EXP has a dynamic portion depending on the size of the exponent
- ExpByteFrontier uint64 = 10 // was set to 10 in Frontier
- ExpByteEIP158 uint64 = 50 // was raised to 50 during Eip158 (Spurious Dragon)
-
- // Extcodecopy has a dynamic AND a static cost. This represents only the
- // static portion of the gas. It was changed during EIP 150 (Tangerine)
- ExtcodeCopyBaseFrontier uint64 = 20
- ExtcodeCopyBaseEIP150 uint64 = 700
-
- // CreateBySelfdestructGas is used when the refunded account is one that does
- // not exist. This logic is similar to call.
- // Introduced in Tangerine Whistle (Eip 150)
- CreateBySelfdestructGas uint64 = 25000
-
- DefaultBaseFeeChangeDenominator = 8 // Bounds the amount the base fee can change between blocks.
- DefaultElasticityMultiplier = 2 // Bounds the maximum gas limit an EIP-1559 block may have.
- InitialBaseFee = 1000000000 // Initial base fee for EIP-1559 blocks.
-
- MaxCodeSize = 24576 // Maximum bytecode to permit for a contract
- MaxInitCodeSize = 2 * MaxCodeSize // Maximum initcode to permit in a creation transaction and create instructions
-
- // Precompiled contract gas prices
-
- EcrecoverGas uint64 = 3000 // Elliptic curve sender recovery gas price
- Sha256BaseGas uint64 = 60 // Base price for a SHA256 operation
- Sha256PerWordGas uint64 = 12 // Per-word price for a SHA256 operation
- Ripemd160BaseGas uint64 = 600 // Base price for a RIPEMD160 operation
- Ripemd160PerWordGas uint64 = 120 // Per-word price for a RIPEMD160 operation
- IdentityBaseGas uint64 = 15 // Base price for a data copy operation
- IdentityPerWordGas uint64 = 3 // Per-work price for a data copy operation
-
- Bn256AddGasByzantium uint64 = 500 // Byzantium gas needed for an elliptic curve addition
- Bn256AddGasIstanbul uint64 = 150 // Gas needed for an elliptic curve addition
- Bn256ScalarMulGasByzantium uint64 = 40000 // Byzantium gas needed for an elliptic curve scalar multiplication
- Bn256ScalarMulGasIstanbul uint64 = 6000 // Gas needed for an elliptic curve scalar multiplication
- Bn256PairingBaseGasByzantium uint64 = 100000 // Byzantium base price for an elliptic curve pairing check
- Bn256PairingBaseGasIstanbul uint64 = 45000 // Base price for an elliptic curve pairing check
- Bn256PairingPerPointGasByzantium uint64 = 80000 // Byzantium per-point price for an elliptic curve pairing check
- Bn256PairingPerPointGasIstanbul uint64 = 34000 // Per-point price for an elliptic curve pairing check
-
- Bls12381G1AddGas uint64 = 600 // Price for BLS12-381 elliptic curve G1 point addition
- Bls12381G1MulGas uint64 = 12000 // Price for BLS12-381 elliptic curve G1 point scalar multiplication
- Bls12381G2AddGas uint64 = 4500 // Price for BLS12-381 elliptic curve G2 point addition
- Bls12381G2MulGas uint64 = 55000 // Price for BLS12-381 elliptic curve G2 point scalar multiplication
- Bls12381PairingBaseGas uint64 = 115000 // Base gas price for BLS12-381 elliptic curve pairing check
- Bls12381PairingPerPairGas uint64 = 23000 // Per-point pair gas price for BLS12-381 elliptic curve pairing check
- Bls12381MapG1Gas uint64 = 5500 // Gas price for BLS12-381 mapping field element to G1 operation
- Bls12381MapG2Gas uint64 = 110000 // Gas price for BLS12-381 mapping field element to G2 operation
-
- // The Refund Quotient is the cap on how much of the used gas can be refunded. Before EIP-3529,
- // up to half the consumed gas could be refunded. Redefined as 1/5th in EIP-3529
- RefundQuotient uint64 = 2
- RefundQuotientEIP3529 uint64 = 5
-
- BlobTxBytesPerFieldElement = 32 // Size in bytes of a field element
- BlobTxFieldElementsPerBlob = 4096 // Number of field elements stored in a single data blob
- BlobTxHashVersion = 0x01 // Version byte of the commitment hash
- BlobTxBlobGasPerBlob = 1 << 17 // Gas consumption of a single data blob (== blob byte size)
- BlobTxMinBlobGasprice = 1 // Minimum gas price for data blobs
- BlobTxBlobGaspriceUpdateFraction = 3338477 // Controls the maximum rate of change for blob gas price
- BlobTxPointEvaluationPrecompileGas = 50000 // Gas price for the point evaluation precompile.
-
- BlobTxTargetBlobGasPerBlock = 3 * BlobTxBlobGasPerBlob // Target consumable blob gas for data blobs per block (for 1559-like pricing)
- MaxBlobGasPerBlock = 6 * BlobTxBlobGasPerBlob // Maximum consumable blob gas for data blobs per block
-)
-
-// Gas discount table for BLS12-381 G1 and G2 multi exponentiation operations
-var Bls12381MultiExpDiscountTable = [128]uint64{1200, 888, 764, 641, 594, 547, 500, 453, 438, 423, 408, 394, 379, 364, 349, 334, 330, 326, 322, 318, 314, 310, 306, 302, 298, 294, 289, 285, 281, 277, 273, 269, 268, 266, 265, 263, 262, 260, 259, 257, 256, 254, 253, 251, 250, 248, 247, 245, 244, 242, 241, 239, 238, 236, 235, 233, 232, 231, 229, 228, 226, 225, 223, 222, 221, 220, 219, 219, 218, 217, 216, 216, 215, 214, 213, 213, 212, 211, 211, 210, 209, 208, 208, 207, 206, 205, 205, 204, 203, 202, 202, 201, 200, 199, 199, 198, 197, 196, 196, 195, 194, 193, 193, 192, 191, 191, 190, 189, 188, 188, 187, 186, 185, 185, 184, 183, 182, 182, 181, 180, 179, 179, 178, 177, 176, 176, 175, 174}
-
-var (
- DifficultyBoundDivisor = big.NewInt(2048) // The bound divisor of the difficulty, used in the update calculations.
- GenesisDifficulty = big.NewInt(131072) // Difficulty of the Genesis block.
- MinimumDifficulty = big.NewInt(131072) // The minimum that the difficulty may ever be.
- DurationLimit = big.NewInt(13) // The decision boundary on the blocktime duration used to determine whether difficulty should go up or not.
-
- // BeaconRootsStorageAddress is the address where historical beacon roots are stored as per EIP-4788
- BeaconRootsStorageAddress = common.HexToAddress("0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02")
- // SystemAddress is where the system-transaction is sent from as per EIP-4788
- SystemAddress common.Address = common.HexToAddress("0xfffffffffffffffffffffffffffffffffffffffe")
-)
diff --git a/params/version.go b/params/version.go
deleted file mode 100644
index 877372e74f..0000000000
--- a/params/version.go
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2016 The go-ethereum Authors
-// 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 .
-
-package params
-
-import (
- "fmt"
-)
-
-const (
- VersionMajor = 1 // Major version component of the current release
- VersionMinor = 13 // Minor version component of the current release
- VersionPatch = 9 // Patch version component of the current release
- VersionMeta = "unstable" // Version metadata to append to the version string
-)
-
-// Version holds the textual version string.
-var Version = func() string {
- return fmt.Sprintf("%d.%d.%d", VersionMajor, VersionMinor, VersionPatch)
-}()
-
-// VersionWithMeta holds the textual version string including the metadata.
-var VersionWithMeta = func() string {
- v := Version
- if VersionMeta != "" {
- v += "-" + VersionMeta
- }
- return v
-}()
-
-// ArchiveVersion holds the textual version string used for Geth archives. e.g.
-// "1.8.11-dea1ce05" for stable releases, or "1.8.13-unstable-21c059b6" for unstable
-// releases.
-func ArchiveVersion(gitCommit string) string {
- vsn := Version
- if VersionMeta != "stable" {
- vsn += "-" + VersionMeta
- }
- if len(gitCommit) >= 8 {
- vsn += "-" + gitCommit[:8]
- }
- return vsn
-}
-
-func VersionWithCommit(gitCommit, gitDate string) string {
- vsn := VersionWithMeta
- if len(gitCommit) >= 8 {
- vsn += "-" + gitCommit[:8]
- }
- if (VersionMeta != "stable") && (gitDate != "") {
- vsn += "-" + gitDate
- }
- return vsn
-}