mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-02-03 15:55:47 +00:00
parent
f894f6673b
commit
a48cc04ea7
@ -40,11 +40,10 @@ type
|
||||
berlinBlock : Option[BlockNumber]
|
||||
londonBlock : Option[BlockNumber]
|
||||
arrowGlacierBlock : Option[BlockNumber]
|
||||
|
||||
mergeForkBlock : Option[BlockNumber] ##\
|
||||
## EIP-3675 (TheMerge) switch block: "For the purposes of the EIP-2124\
|
||||
## fork identifier, nodes implementing this EIP *MUST* set the\
|
||||
## `FORK_NEXT` parameter to the `FORK_NEXT_VALUE`."
|
||||
grayGlacierBlock : Option[BlockNumber]
|
||||
mergeForkBlock : Option[BlockNumber]
|
||||
shanghaiBlock : Option[BlockNumber]
|
||||
cancunBlock : Option[BlockNumber]
|
||||
|
||||
clique : CliqueOptions
|
||||
terminalTotalDifficulty*: Option[UInt256]
|
||||
@ -70,7 +69,10 @@ type
|
||||
berlinBlock* : BlockNumber
|
||||
londonBlock* : BlockNumber
|
||||
arrowGlacierBlock* : BlockNumber
|
||||
mergeForkBlock* : Option[BlockNumber] # EIP-3675 (TheMerge) switch block
|
||||
grayGlacierBlock* : BlockNumber
|
||||
mergeForkBlock* : BlockNumber # EIP-3675 (TheMerge) switch block
|
||||
shanghaiBlock* : BlockNumber
|
||||
cancunBlock* : BlockNumber
|
||||
|
||||
poaEngine* : bool
|
||||
cliquePeriod* : int
|
||||
@ -269,12 +271,9 @@ proc loadNetworkParams*(cc: CustomChain, cg: var NetworkParams): bool =
|
||||
|
||||
cg.config.terminalTotalDifficulty = cc.config.terminalTotalDifficulty
|
||||
|
||||
template validateFork(forkName: untyped, nextBlock: BlockNumber) =
|
||||
template validateFork(forkName: untyped, nextBlock: untyped) =
|
||||
let fork = astToStr(forkName)
|
||||
if cc.config.forkName.isSome:
|
||||
cg.config.forkName = cc.config.forkName.get()
|
||||
else:
|
||||
cg.config.forkName = nextBlock
|
||||
cg.config.forkName = cc.config.forkName.get(nextBlock)
|
||||
if cg.config.forkName > nextBlock:
|
||||
error "Forks can't be assigned out of order", fork=fork
|
||||
return false
|
||||
@ -287,7 +286,11 @@ proc loadNetworkParams*(cc: CustomChain, cg: var NetworkParams): bool =
|
||||
# The difference to the ref implementation is that we have no optional values
|
||||
# everywhere for the block numbers but rather assign the next larger block.
|
||||
|
||||
validateFork(arrowGlacierBlock, high(BlockNumber))
|
||||
validateFork(cancunBlock, high(BlockNumber))
|
||||
validateFork(shanghaiBlock, cg.config.cancunBlock)
|
||||
validateFork(mergeForkBlock, cg.config.shanghaiBlock)
|
||||
validateFork(grayGlacierBlock, cg.config.mergeForkBlock)
|
||||
validateFork(arrowGlacierBlock, cg.config.grayGlacierBlock)
|
||||
validateFork(londonBlock, cg.config.arrowGlacierBlock)
|
||||
validateFork(berlinBlock, cg.config.londonBlock)
|
||||
validateFork(muirGlacierBlock, cg.config.berlinBlock)
|
||||
@ -301,15 +304,6 @@ proc loadNetworkParams*(cc: CustomChain, cg: var NetworkParams): bool =
|
||||
validateFork(daoForkBlock, cg.config.eip150Block)
|
||||
validateFork(homesteadBlock, cg.config.daoForkBlock)
|
||||
|
||||
# Only this last entry remains optional.
|
||||
cg.config.mergeForkBlock = cc.config.mergeForkBlock
|
||||
if cc.config.mergeForkBlock.isSome:
|
||||
# Must be larger than the largest block
|
||||
let topBlock = min(cg.config.arrowGlacierBlock, cg.config.londonBlock)
|
||||
if cg.config.mergeForkBlock.get < topBlock:
|
||||
error "Forks can't be assigned out of order", fork="mergeForkBlock"
|
||||
return false
|
||||
|
||||
return true
|
||||
|
||||
proc loadNetworkParams*(fileName: string, cg: var NetworkParams):
|
||||
@ -357,10 +351,10 @@ proc parseGenesisAlloc*(data: string, ga: var GenesisAlloc): bool
|
||||
|
||||
proc toFork*(c: ChainConfig, number: BlockNumber): Fork =
|
||||
## Map to EVM fork, which doesn't include the DAO or Glacier forks.
|
||||
if c.mergeForkBlock.isSome and number >= c.mergeForkBlock.get:
|
||||
return FkParis
|
||||
|
||||
if number >= c.londonBlock: FkLondon
|
||||
if number >= c.cancunBlock: FkCancun
|
||||
elif number >= c.shanghaiBlock: FkShanghai
|
||||
elif number >= c.mergeForkBlock: FkParis
|
||||
elif number >= c.londonBlock: FkLondon
|
||||
elif number >= c.berlinBlock: FkBerlin
|
||||
elif number >= c.istanbulBlock: FkIstanbul
|
||||
elif number >= c.petersburgBlock: FkPetersburg
|
||||
@ -397,7 +391,10 @@ proc chainConfigForNetwork*(id: NetworkId): ChainConfig =
|
||||
berlinBlock: 12_244_000.toBlockNumber, # 2021-04-15 10:07:03 UTC
|
||||
londonBlock: 12_965_000.toBlockNumber, # 2021-08-05 12:33:42 UTC
|
||||
arrowGlacierBlock: 13_773_000.toBlockNumber, # 2021-12-09 19:55:23 UTC
|
||||
mergeForkBlock: none(BlockNumber),
|
||||
grayGlacierBlock: 15_050_000.toBlockNumber, # 2022-06-30 10:54:04 UTC
|
||||
mergeForkBlock: high(BlockNumber),
|
||||
shanghaiBlock: high(BlockNumber),
|
||||
cancunBlock: high(BlockNumber),
|
||||
)
|
||||
of RopstenNet:
|
||||
ChainConfig(
|
||||
@ -418,7 +415,10 @@ proc chainConfigForNetwork*(id: NetworkId): ChainConfig =
|
||||
berlinBlock: 9_812_189.toBlockNumber, # 2021-03-10 13:32:08 UTC
|
||||
londonBlock: 10_499_401.toBlockNumber, # 2021-06-24 02:03:37 UTC
|
||||
arrowGlacierBlock: high(BlockNumber), # No current plan
|
||||
mergeForkBlock: none(BlockNumber),
|
||||
grayGlacierBlock: high(BlockNumber), # No current plan
|
||||
mergeForkBlock: high(BlockNumber),
|
||||
shanghaiBlock: high(BlockNumber),
|
||||
cancunBlock: high(BlockNumber),
|
||||
)
|
||||
of RinkebyNet:
|
||||
ChainConfig(
|
||||
@ -439,7 +439,10 @@ proc chainConfigForNetwork*(id: NetworkId): ChainConfig =
|
||||
berlinBlock: 8_290_928.toBlockNumber, # 2021-03-24 14:48:36 UTC
|
||||
londonBlock: 8_897_988.toBlockNumber, # 2021-07-08 01:27:32 UTC
|
||||
arrowGlacierBlock: high(BlockNumber), # No current plan
|
||||
mergeForkBlock: none(BlockNumber),
|
||||
grayGlacierBlock: high(BlockNumber), # No current plan
|
||||
mergeForkBlock: high(BlockNumber),
|
||||
shanghaiBlock: high(BlockNumber),
|
||||
cancunBlock: high(BlockNumber),
|
||||
)
|
||||
of GoerliNet:
|
||||
ChainConfig(
|
||||
@ -460,14 +463,20 @@ proc chainConfigForNetwork*(id: NetworkId): ChainConfig =
|
||||
berlinBlock: 4_460_644.toBlockNumber, # 2021-03-18 05:29:51 UTC
|
||||
londonBlock: 5_062_605.toBlockNumber, # 2021-07-01 03:19:39 UTC
|
||||
arrowGlacierBlock: high(BlockNumber), # No current plan
|
||||
mergeForkBlock: none(BlockNumber),
|
||||
grayGlacierBlock: high(BlockNumber), # No current plan
|
||||
mergeForkBlock: high(BlockNumber),
|
||||
shanghaiBlock: high(BlockNumber),
|
||||
cancunBlock: high(BlockNumber),
|
||||
)
|
||||
of SepoliaNet:
|
||||
ChainConfig(
|
||||
poaEngine: false,
|
||||
chainId: SepoliaNet.ChainId,
|
||||
arrowGlacierBlock: high(BlockNumber), # No current plan
|
||||
mergeForkBlock: none(BlockNumber),
|
||||
grayGlacierBlock: high(BlockNumber), # No current plan
|
||||
mergeForkBlock: high(BlockNumber),
|
||||
shanghaiBlock: high(BlockNumber),
|
||||
cancunBlock: high(BlockNumber),
|
||||
)
|
||||
else:
|
||||
ChainConfig()
|
||||
|
@ -40,7 +40,10 @@ type
|
||||
Berlin,
|
||||
London,
|
||||
ArrowGlacier,
|
||||
MergeFork
|
||||
GrayGlacier,
|
||||
MergeFork,
|
||||
Shanghai,
|
||||
Cancun
|
||||
|
||||
Chain* = ref object of RootRef
|
||||
db: BaseChainDB
|
||||
@ -107,7 +110,10 @@ func getNextFork(c: ChainConfig, fork: ChainFork): uint64 =
|
||||
toNextFork(c.berlinBlock),
|
||||
toNextFork(c.londonBlock),
|
||||
toNextFork(c.arrowGlacierBlock),
|
||||
toNextFork(c.mergeForkBlock)
|
||||
toNextFork(c.grayGlacierBlock),
|
||||
toNextFork(c.mergeForkBlock),
|
||||
toNextFork(c.shanghaiBlock),
|
||||
toNextFork(c.cancunBlock),
|
||||
]
|
||||
|
||||
if fork == high(ChainFork):
|
||||
|
@ -24,9 +24,11 @@ import
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
func toChainFork(c: ChainConfig, number: BlockNumber): ChainFork =
|
||||
if c.mergeForkBlock.isSome and number >= c.mergeForkBlock.get:
|
||||
return MergeFork
|
||||
if number >= c.arrowGlacierBlock: ArrowGlacier
|
||||
if number >= c.cancunBlock: Cancun
|
||||
elif number >= c.shanghaiBlock: Shanghai
|
||||
elif number >= c.mergeForkBlock: MergeFork
|
||||
elif number >= c.grayGlacierBlock: GrayGlacier
|
||||
elif number >= c.arrowGlacierBlock: ArrowGlacier
|
||||
elif number >= c.londonBlock: London
|
||||
elif number >= c.berlinBlock: Berlin
|
||||
elif number >= c.muirGlacierBlock: MuirGlacier
|
||||
|
@ -162,9 +162,17 @@ template calcDifficultyArrowGlacier*(timeStamp: EthTime, parent: BlockHeader): D
|
||||
## Offset the bomb a total of 10.7M blocks.
|
||||
makeDifficultyCalculator(10_700_000, timeStamp, parent)
|
||||
|
||||
template calcDifficultyGrayGlacier*(timeStamp: EthTime, parent: BlockHeader): DifficultyInt =
|
||||
## "EIP-4345: Difficulty Bomb Delay to September 2022"
|
||||
## <https://eips.ethereum.org/EIPS/eip-5133>
|
||||
## Offset the bomb a total of 11.4M blocks.
|
||||
makeDifficultyCalculator(11_400_000, timeStamp, parent)
|
||||
|
||||
func calcDifficulty*(c: ChainConfig, timeStamp: EthTime, parent: BlockHeader): DifficultyInt =
|
||||
let next = parent.blockNumber + bigOne
|
||||
if next >= c.arrowGlacierBlock:
|
||||
if next >= c.grayGlacierBlock:
|
||||
result = calcDifficultyGrayGlacier(timeStamp, parent)
|
||||
elif next >= c.arrowGlacierBlock:
|
||||
result = calcDifficultyArrowGlacier(timeStamp, parent)
|
||||
elif next >= c.londonBlock:
|
||||
result = calcDifficultyLondon(timeStamp, parent)
|
||||
|
@ -147,7 +147,7 @@ func vmConfiguration(network: string, c: var ChainConfig) =
|
||||
c.berlinBlock = number[FkBerlin]
|
||||
c.londonBlock = number[FkLondon]
|
||||
c.arrowGlacierBlock = number[FkLondon]
|
||||
c.mergeForkBlock = some(number[FkParis])
|
||||
c.mergeForkBlock = number[FkParis]
|
||||
|
||||
c.terminalTotalDifficulty = none(UInt256)
|
||||
case network
|
||||
@ -254,8 +254,8 @@ proc importBlock(tester: var Tester, chainDB: BaseChainDB,
|
||||
|
||||
deepCopy(result, preminedBlock)
|
||||
let ttdReached = chainDB.isBlockAfterTtd(preminedBlock.header)
|
||||
if ttdReached and chainDB.config.mergeForkBlock.isNone:
|
||||
chainDB.config.mergeForkBlock = some(preminedBlock.header.blockNumber)
|
||||
if ttdReached and chainDB.config.mergeForkBlock == high(BlockNumber):
|
||||
chainDB.config.mergeForkBlock = preminedBlock.header.blockNumber
|
||||
|
||||
if ttdReached:
|
||||
baseHeaderForImport.prevRandao = preminedBlock.header.prevRandao
|
||||
@ -327,13 +327,13 @@ proc runTester(tester: var Tester, chainDB: BaseChainDB, testStatusIMPL: var Tes
|
||||
|
||||
for idx, testBlock in tester.blocks:
|
||||
if testBlock.goodBlock:
|
||||
#try:
|
||||
try:
|
||||
let (preminedBlock, _, _) = tester.applyFixtureBlockToChain(
|
||||
testBlock, chainDB, checkSeal, validation = false)
|
||||
|
||||
let ttdReached = chainDB.isBlockAfterTtd(preminedBlock.header)
|
||||
if ttdReached and chainDB.config.mergeForkBlock.isNone:
|
||||
chainDB.config.mergeForkBlock = some(preminedBlock.header.blockNumber)
|
||||
if ttdReached and chainDB.config.mergeForkBlock == high(BlockNumber):
|
||||
chainDB.config.mergeForkBlock = preminedBlock.header.blockNumber
|
||||
|
||||
# manually validating
|
||||
let res = chainDB.validateHeaderAndKinship(
|
||||
@ -346,8 +346,8 @@ proc runTester(tester: var Tester, chainDB: BaseChainDB, testStatusIMPL: var Tes
|
||||
debugEcho "error message: ", res.error
|
||||
debugEcho "ttdReached: ", ttdReached
|
||||
|
||||
#except:
|
||||
#debugEcho "FATAL ERROR(WE HAVE BUG): ", getCurrentExceptionMsg()
|
||||
except:
|
||||
debugEcho "FATAL ERROR(WE HAVE BUG): ", getCurrentExceptionMsg()
|
||||
|
||||
else:
|
||||
var noError = true
|
||||
|
@ -237,8 +237,7 @@ proc genesisLoadRunner(noisy = true;
|
||||
params = params)
|
||||
|
||||
check mdb.ttd == sSpcs.termTotalDff
|
||||
check mdb.config.mergeForkBlock.isSome
|
||||
check mdb.config.mergeForkBlock.get == sSpcs.mergeFork.u256
|
||||
check mdb.config.mergeForkBlock == sSpcs.mergeFork.u256
|
||||
|
||||
test &"Construct persistent BaseChainDB on {tmpDir}, {persistPruneInfo}":
|
||||
if disablePersistentDB:
|
||||
@ -258,8 +257,7 @@ proc genesisLoadRunner(noisy = true;
|
||||
params = params)
|
||||
|
||||
check ddb.ttd == sSpcs.termTotalDff
|
||||
check ddb.config.mergeForkBlock.isSome
|
||||
check ddb.config.mergeForkBlock.get == sSpcs.mergeFork.u256
|
||||
check ddb.config.mergeForkBlock == sSpcs.mergeFork.u256
|
||||
|
||||
test "Initialise in-memory Genesis":
|
||||
mdb.initializeEmptyDb
|
||||
@ -388,7 +386,6 @@ when isMainModule:
|
||||
# typically on the `nimbus-eth1-blobs` module.
|
||||
noisy.testnetChainRunner(
|
||||
stopAfterBlock = 999999999)
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# End
|
||||
# ------------------------------------------------------------------------------
|
||||
|
@ -28,8 +28,10 @@ const
|
||||
(blockNumber: 12964999'u64, id: (crc: 0x0eb440f6'u32, nextFork: 12965000'u64)), # Last Berlin block
|
||||
(blockNumber: 12965000'u64, id: (crc: 0xb715077d'u32, nextFork: 13773000'u64)), # First London block
|
||||
(blockNumber: 13772999'u64, id: (crc: 0xb715077d'u32, nextFork: 13773000'u64)), # Last London block
|
||||
(blockNumber: 13773000'u64, id: (crc: 0x20c327fc'u32, nextFork: 0'u64)), # First Arrow Glacier block
|
||||
(blockNumber: 20000000'u64, id: (crc: 0x20c327fc'u32, nextFork: 0'u64)), # Future Arrow Glacier block
|
||||
(blockNumber: 13773000'u64, id: (crc: 0x20c327fc'u32, nextFork: 15050000'u64)), # First Arrow Glacier block
|
||||
(blockNumber: 15049999'u64, id: (crc: 0x20c327fc'u32, nextFork: 15050000'u64)), # Last Arrow Glacier block
|
||||
(blockNumber: 15050000'u64, id: (crc: 0xf0afd0e3'u32, nextFork: 0'u64)), # First Gray Glacier block
|
||||
(blockNumber: 20000000'u64, id: (crc: 0xf0afd0e3'u32, nextFork: 0'u64)), # Future Gray Glacier block
|
||||
]
|
||||
|
||||
RopstenNetIDs = [
|
||||
|
@ -42,7 +42,11 @@ proc setupChain(): BaseChainDB =
|
||||
muirGlacierBlock : 0.toBlockNumber,
|
||||
berlinBlock : 10.toBlockNumber,
|
||||
londonBlock : high(BlockNumber),
|
||||
arrowGlacierBlock : high(BlockNumber)
|
||||
arrowGlacierBlock : high(BlockNumber),
|
||||
grayGlacierBlock : high(BlockNumber),
|
||||
mergeForkBlock : high(BlockNumber),
|
||||
shanghaiBlock : high(BlockNumber),
|
||||
cancunBlock : high(BlockNumber),
|
||||
)
|
||||
|
||||
var jn = json.parseFile(dataFolder / "oneUncle.json")
|
||||
|
Loading…
x
Reference in New Issue
Block a user