refactor fork consistency checking and gate compilation on it (#3704)
This commit is contained in:
parent
21200f4a64
commit
38737549ac
|
@ -665,32 +665,7 @@ proc init*(T: type ChainDAGRef, cfg: RuntimeConfig, db: BeaconChainDB,
|
||||||
serveLightClientData = false,
|
serveLightClientData = false,
|
||||||
importLightClientData = ImportLightClientData.None,
|
importLightClientData = ImportLightClientData.None,
|
||||||
vanityLogs = default(VanityLogs)): ChainDAGRef =
|
vanityLogs = default(VanityLogs)): ChainDAGRef =
|
||||||
# TODO move fork version sanity checking elsewhere?
|
cfg.checkForkConsistency()
|
||||||
|
|
||||||
# TODO re-add cfg.CAPELLA_FORK_VERSION once eth-clients repos include it and
|
|
||||||
# fix SHARDING_FORK_VERSION to be its new FORK_VERSION. Until then make sure
|
|
||||||
# that it will never actually use the Capella fork.
|
|
||||||
doAssert cfg.CAPELLA_FORK_EPOCH == FAR_FUTURE_EPOCH
|
|
||||||
|
|
||||||
let forkVersions =
|
|
||||||
[cfg.GENESIS_FORK_VERSION, cfg.ALTAIR_FORK_VERSION,
|
|
||||||
cfg.BELLATRIX_FORK_VERSION, cfg.SHARDING_FORK_VERSION]
|
|
||||||
for i in 0 ..< forkVersions.len:
|
|
||||||
for j in i+1 ..< forkVersions.len:
|
|
||||||
doAssert forkVersions[i] != forkVersions[j]
|
|
||||||
|
|
||||||
template assertForkEpochOrder(
|
|
||||||
firstForkEpoch: Epoch, secondForkEpoch: Epoch) =
|
|
||||||
doAssert firstForkEpoch <= secondForkEpoch
|
|
||||||
|
|
||||||
# TODO https://github.com/ethereum/consensus-specs/issues/2902 multiple
|
|
||||||
# fork transitions per epoch don't work in a well-defined way.
|
|
||||||
doAssert firstForkEpoch < secondForkEpoch or
|
|
||||||
firstForkEpoch in [GENESIS_EPOCH, FAR_FUTURE_EPOCH]
|
|
||||||
|
|
||||||
assertForkEpochOrder(cfg.ALTAIR_FORK_EPOCH, cfg.BELLATRIX_FORK_EPOCH)
|
|
||||||
assertForkEpochOrder(cfg.BELLATRIX_FORK_EPOCH, cfg.CAPELLA_FORK_EPOCH)
|
|
||||||
assertForkEpochOrder(cfg.CAPELLA_FORK_EPOCH, cfg.SHARDING_FORK_EPOCH)
|
|
||||||
|
|
||||||
doAssert updateFlags in [{}, {verifyFinalization}],
|
doAssert updateFlags in [{}, {verifyFinalization}],
|
||||||
"Other flags not supported in ChainDAG"
|
"Other flags not supported in ChainDAG"
|
||||||
|
|
|
@ -240,6 +240,9 @@ when not defined(gnosisChainBinary):
|
||||||
mainnetMetadata* = eth2Network("shared/mainnet", mainnet)
|
mainnetMetadata* = eth2Network("shared/mainnet", mainnet)
|
||||||
praterMetadata* = eth2Network("shared/prater", goerli)
|
praterMetadata* = eth2Network("shared/prater", goerli)
|
||||||
ropstenMetadata = mergeTestnet("ropsten-beacon-chain", ropsten)
|
ropstenMetadata = mergeTestnet("ropsten-beacon-chain", ropsten)
|
||||||
|
static:
|
||||||
|
for network in [mainnetMetadata, praterMetadata, ropstenMetadata]:
|
||||||
|
checkForkConsistency(network.cfg)
|
||||||
|
|
||||||
proc getMetadataForNetwork*(networkName: string): Eth2NetworkMetadata {.raises: [Defect, IOError].} =
|
proc getMetadataForNetwork*(networkName: string): Eth2NetworkMetadata {.raises: [Defect, IOError].} =
|
||||||
template loadRuntimeMetadata: auto =
|
template loadRuntimeMetadata: auto =
|
||||||
|
@ -284,6 +287,8 @@ else:
|
||||||
gnosisMetadata* = loadCompileTimeNetworkMetadata(
|
gnosisMetadata* = loadCompileTimeNetworkMetadata(
|
||||||
currentSourcePath.parentDir.replace('\\', '/') & "/../../media/gnosis")
|
currentSourcePath.parentDir.replace('\\', '/') & "/../../media/gnosis")
|
||||||
|
|
||||||
|
static: checkForkConsistency(gnosisMetadata.cfg)
|
||||||
|
|
||||||
proc checkNetworkParameterUse*(eth2Network: Option[string]) =
|
proc checkNetworkParameterUse*(eth2Network: Option[string]) =
|
||||||
# Support `gnosis-chain` as network name which was used in v22.3
|
# Support `gnosis-chain` as network name which was used in v22.3
|
||||||
if eth2Network.isSome and eth2Network.get notin ["gnosis", "gnosis-chain"]:
|
if eth2Network.isSome and eth2Network.get notin ["gnosis", "gnosis-chain"]:
|
||||||
|
|
|
@ -958,3 +958,29 @@ func clear*(cache: var StateCache) =
|
||||||
cache.shuffled_active_validator_indices.clear
|
cache.shuffled_active_validator_indices.clear
|
||||||
cache.beacon_proposer_indices.clear
|
cache.beacon_proposer_indices.clear
|
||||||
cache.sync_committees.clear
|
cache.sync_committees.clear
|
||||||
|
|
||||||
|
func checkForkConsistency*(cfg: RuntimeConfig) =
|
||||||
|
# TODO re-add cfg.CAPELLA_FORK_VERSION once eth-clients repos include it and
|
||||||
|
# fix SHARDING_FORK_VERSION to be its new FORK_VERSION. Until then make sure
|
||||||
|
# that it will never actually use the Capella fork.
|
||||||
|
doAssert cfg.CAPELLA_FORK_EPOCH == FAR_FUTURE_EPOCH
|
||||||
|
|
||||||
|
let forkVersions =
|
||||||
|
[cfg.GENESIS_FORK_VERSION, cfg.ALTAIR_FORK_VERSION,
|
||||||
|
cfg.BELLATRIX_FORK_VERSION, cfg.SHARDING_FORK_VERSION]
|
||||||
|
for i in 0 ..< forkVersions.len:
|
||||||
|
for j in i+1 ..< forkVersions.len:
|
||||||
|
doAssert distinctBase(forkVersions[i]) != distinctBase(forkVersions[j])
|
||||||
|
|
||||||
|
template assertForkEpochOrder(
|
||||||
|
firstForkEpoch: Epoch, secondForkEpoch: Epoch) =
|
||||||
|
doAssert distinctBase(firstForkEpoch) <= distinctBase(secondForkEpoch)
|
||||||
|
|
||||||
|
# TODO https://github.com/ethereum/consensus-specs/issues/2902 multiple
|
||||||
|
# fork transitions per epoch don't work in a well-defined way.
|
||||||
|
doAssert distinctBase(firstForkEpoch) < distinctBase(secondForkEpoch) or
|
||||||
|
firstForkEpoch in [GENESIS_EPOCH, FAR_FUTURE_EPOCH]
|
||||||
|
|
||||||
|
assertForkEpochOrder(cfg.ALTAIR_FORK_EPOCH, cfg.BELLATRIX_FORK_EPOCH)
|
||||||
|
assertForkEpochOrder(cfg.BELLATRIX_FORK_EPOCH, cfg.CAPELLA_FORK_EPOCH)
|
||||||
|
assertForkEpochOrder(cfg.CAPELLA_FORK_EPOCH, cfg.SHARDING_FORK_EPOCH)
|
||||||
|
|
Loading…
Reference in New Issue