allow custom configs in Gnosis binary (#4134)

When running as Gnosis-chain binary the config was no longer adjustable.
Restores loading custom configs when running as Gnosis-chain binary,
as long as the following keys remain same:
- SLOTS_PER_EPOCH=16
- SECONDS_PER_SLOT=5
- BASE_REWARD_FACTOR=25
- EPOCHS_PER_SYNC_COMMITTEE_PERIOD=512

This allows running the Gnosis-chain binary on custom test networks.
This commit is contained in:
Etan Kissling 2022-09-19 11:25:41 +02:00 committed by GitHub
parent ca871a5435
commit abd6581b22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 82 additions and 73 deletions

View File

@ -1223,21 +1223,27 @@ proc readValue*(r: var TomlReader, a: var Address)
proc loadEth2Network*( proc loadEth2Network*(
eth2Network: Option[string] eth2Network: Option[string]
): Eth2NetworkMetadata {.raises: [Defect, IOError].} = ): Eth2NetworkMetadata {.raises: [Defect, IOError].} =
network_name.set(2, labelValues = [eth2Network.get(otherwise = "mainnet")]) const defaultName =
when not defined(gnosisChainBinary): when defined(gnosisChainBinary) and const_preset == "mainnet":
"gnosis"
elif const_preset == "mainnet":
"mainnet"
else:
"(unspecified)"
network_name.set(2, labelValues = [eth2Network.get(otherwise = defaultName)])
if eth2Network.isSome: if eth2Network.isSome:
getMetadataForNetwork(eth2Network.get) getMetadataForNetwork(eth2Network.get)
else: else:
when const_preset == "mainnet": when defined(gnosisChainBinary) and const_preset == "mainnet":
gnosisMetadata
elif const_preset == "mainnet":
mainnetMetadata mainnetMetadata
else: else:
# Presumably other configurations can have other defaults, but for now # Presumably other configurations can have other defaults, but for now
# this simplifies the flow # this simplifies the flow
echo "Must specify network on non-mainnet node" fatal "Must specify network on non-mainnet node"
quit 1 quit 1
else:
checkNetworkParameterUse eth2Network
gnosisMetadata
template loadEth2Network*(config: BeaconNodeConf): Eth2NetworkMetadata = template loadEth2Network*(config: BeaconNodeConf): Eth2NetworkMetadata =
loadEth2Network(config.eth2Network) loadEth2Network(config.eth2Network)

View File

@ -200,19 +200,29 @@ template mergeTestnet(path: string, eth1Network: Eth1Network): Eth2NetworkMetada
loadCompileTimeNetworkMetadata(mergeTestnetsDir & "/" & path, loadCompileTimeNetworkMetadata(mergeTestnetsDir & "/" & path,
some eth1Network) some eth1Network)
when not defined(gnosisChainBinary): when defined(gnosisChainBinary) and const_preset == "mainnet":
when const_preset == "mainnet": const
gnosisMetadata* = loadCompileTimeNetworkMetadata(
currentSourcePath.parentDir.replace('\\', '/') &
"/../../media/gnosis")
static:
for network in [gnosisMetadata]:
checkForkConsistency(network.cfg)
elif const_preset == "mainnet":
const const
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)
sepoliaMetadata* = mergeTestnet("sepolia", sepolia) sepoliaMetadata* = mergeTestnet("sepolia", sepolia)
static: static:
for network in [mainnetMetadata, praterMetadata, ropstenMetadata, sepoliaMetadata]: for network in [
mainnetMetadata, praterMetadata, ropstenMetadata, sepoliaMetadata]:
checkForkConsistency(network.cfg) checkForkConsistency(network.cfg)
proc getMetadataForNetwork*(networkName: string): Eth2NetworkMetadata {.raises: [Defect, IOError].} = proc getMetadataForNetwork*(
template loadRuntimeMetadata: auto = networkName: string): Eth2NetworkMetadata {.raises: [Defect, IOError].} =
template loadRuntimeMetadata(): auto =
if fileExists(networkName / "config.yaml"): if fileExists(networkName / "config.yaml"):
try: try:
loadEth2NetworkMetadata(networkName) loadEth2NetworkMetadata(networkName)
@ -223,8 +233,19 @@ when not defined(gnosisChainBinary):
fatal "config.yaml not found for network", networkName fatal "config.yaml not found for network", networkName
quit 1 quit 1
var let metadata =
metadata = when const_preset == "mainnet": when defined(gnosisChainBinary) and const_preset == "mainnet":
case toLowerAscii(networkName)
of "gnosis":
gnosisMetadata
of "gnosis-chain":
warn "`--network:gnosis-chain` is deprecated, " &
"use `--network:gnosis` instead"
gnosisMetadata
else:
loadRuntimeMetadata()
elif const_preset == "mainnet":
case toLowerAscii(networkName) case toLowerAscii(networkName)
of "mainnet": of "mainnet":
mainnetMetadata mainnetMetadata
@ -236,6 +257,7 @@ when not defined(gnosisChainBinary):
sepoliaMetadata sepoliaMetadata
else: else:
loadRuntimeMetadata() loadRuntimeMetadata()
else: else:
loadRuntimeMetadata() loadRuntimeMetadata()
@ -243,34 +265,15 @@ when not defined(gnosisChainBinary):
fatal "The selected network is not compatible with the current build", fatal "The selected network is not compatible with the current build",
reason = metadata.incompatibilityDesc reason = metadata.incompatibilityDesc
quit 1 quit 1
metadata metadata
proc getRuntimeConfig*( proc getRuntimeConfig*(
eth2Network: Option[string]): RuntimeConfig {.raises: [Defect, IOError].} = eth2Network: Option[string]): RuntimeConfig {.raises: [Defect, IOError].} =
if eth2Network.isSome: if eth2Network.isSome:
return getMetadataForNetwork(eth2Network.get).cfg return getMetadataForNetwork(eth2Network.get).cfg
defaultRuntimeConfig defaultRuntimeConfig
else:
const
gnosisMetadata* = loadCompileTimeNetworkMetadata(
currentSourcePath.parentDir.replace('\\', '/') & "/../../media/gnosis")
static: checkForkConsistency(gnosisMetadata.cfg)
proc checkNetworkParameterUse*(eth2Network: Option[string]) =
# Support `gnosis-chain` as network name which was used in v22.3
if eth2Network.isSome and eth2Network.get notin ["gnosis", "gnosis-chain"]:
fatal "The only supported value for the --network parameter is 'gnosis'"
quit 1
if eth2Network.isSome and eth2Network.get == "gnosis-chain":
warn "`--network:gnosis-chain` is deprecated, use `--network:gnosis` instead"
proc getRuntimeConfig*(eth2Network: Option[string]): RuntimeConfig {.raises: [Defect, IOError].} =
checkNetworkParameterUse eth2Network
gnosisMetadata.cfg
proc extractGenesisValidatorRootFromSnapshot*( proc extractGenesisValidatorRootFromSnapshot*(
snapshot: string): Eth2Digest {.raises: [Defect, IOError, SszError].} = snapshot: string): Eth2Digest {.raises: [Defect, IOError, SszError].} =
sszMount(snapshot, phase0.BeaconState).genesis_validators_root[] sszMount(snapshot, phase0.BeaconState).genesis_validators_root[]