nimbus-eth1/tools/common/helpers.nim

117 lines
4.0 KiB
Nim

# Nimbus
# Copyright (c) 2022 Status Research & Development GmbH
# Licensed under either of
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
# http://www.apache.org/licenses/LICENSE-2.0)
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or
# http://opensource.org/licenses/MIT)
# at your option. This file may not be copied, modified, or distributed except
# according to those terms.
import
../../nimbus/common/common,
./types
export
types
func getChainConfig*(network: string, c: ChainConfig) =
const
Zero = 0.toBlockNumber
Five = 5.toBlockNumber
proc assignNumber(c: ChainConfig,
fork: HardFork, n: BlockNumber) =
var number: array[HardFork, Option[BlockNumber]]
var z = low(HardFork)
while z < fork:
number[z] = some(Zero)
z = z.succ
number[fork] = some(n)
z = high(HardFork)
while z > fork:
number[z] = none(BlockNumber)
z = z.pred
c.homesteadBlock = number[HardFork.Homestead]
c.daoForkBlock = number[HardFork.DAOFork]
c.eip150Block = number[HardFork.Tangerine]
c.eip155Block = number[HardFork.Spurious]
c.eip158Block = number[HardFork.Spurious]
c.byzantiumBlock = number[HardFork.Byzantium]
c.constantinopleBlock = number[HardFork.Constantinople]
c.petersburgBlock = number[HardFork.Petersburg]
c.istanbulBlock = number[HardFork.Istanbul]
c.muirGlacierBlock = number[HardFork.MuirGlacier]
c.berlinBlock = number[HardFork.Berlin]
c.londonBlock = number[HardFork.London]
c.arrowGlacierBlock = number[HardFork.ArrowGlacier]
c.grayGlacierBlock = number[HardFork.GrayGlacier]
c.mergeForkBlock = number[HardFork.MergeFork]
c.shanghaiBlock = number[HardFork.Shanghai]
c.cancunBlock = number[HardFork.Cancun]
c.daoForkSupport = false
c.chainId = 1.ChainId
c.terminalTotalDifficulty = none(UInt256)
case network
of $TestFork.Frontier:
c.assignNumber(HardFork.Frontier, Zero)
of $TestFork.Homestead:
c.assignNumber(HardFork.Homestead, Zero)
of $TestFork.EIP150:
c.assignNumber(HardFork.Tangerine, Zero)
of $TestFork.EIP158:
c.assignNumber(HardFork.Spurious, Zero)
of $TestFork.Byzantium:
c.assignNumber(HardFork.Byzantium, Zero)
of $TestFork.Constantinople:
c.assignNumber(HardFork.Constantinople, Zero)
of $TestFork.ConstantinopleFix:
c.assignNumber(HardFork.Petersburg, Zero)
of $TestFork.Istanbul:
c.assignNumber(HardFork.Istanbul, Zero)
of $TestFork.FrontierToHomesteadAt5:
c.assignNumber(HardFork.Homestead, Five)
of $TestFork.HomesteadToEIP150At5:
c.assignNumber(HardFork.Tangerine, Five)
of $TestFork.HomesteadToDaoAt5:
c.assignNumber(HardFork.DAOFork, Five)
c.daoForkSupport = true
of $TestFork.EIP158ToByzantiumAt5:
c.assignNumber(HardFork.Byzantium, Five)
of $TestFork.ByzantiumToConstantinopleAt5:
c.assignNumber(HardFork.Constantinople, Five)
of $TestFork.ByzantiumToConstantinopleFixAt5:
c.assignNumber(HardFork.Petersburg, Five)
c.constantinopleBlock = some(Five)
of $TestFork.ConstantinopleFixToIstanbulAt5:
c.assignNumber(HardFork.Istanbul, Five)
of $TestFork.Berlin:
c.assignNumber(HardFork.Berlin, Zero)
of $TestFork.BerlinToLondonAt5:
c.assignNumber(HardFork.London, Five)
of $TestFork.London:
c.assignNumber(HardFork.London, Zero)
of $TestFork.ArrowGlacier:
c.assignNumber(HardFork.ArrowGlacier, Zero)
of $TestFork.GrayGlacier:
c.assignNumber(HardFork.GrayGlacier, Zero)
of $TestFork.Merge:
c.assignNumber(HardFork.MergeFork, Zero)
of $TestFork.ArrowGlacierToMergeAtDiffC0000:
c.assignNumber(HardFork.GrayGlacier, Zero)
c.terminalTotalDifficulty = some(0xC0000.u256)
of $TestFork.Shanghai:
c.assignNumber(HardFork.Shanghai, Zero)
of $TestFork.Cancun:
c.assignNumber(HardFork.Cancun, Zero)
else:
raise newException(ValueError, "unsupported network " & network)
func getChainConfig*(network: string): ChainConfig =
let c = ChainConfig()
getChainConfig(network, c)
result = c