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*(
eth2Network: Option[string]
): Eth2NetworkMetadata {.raises: [Defect, IOError].} =
network_name.set(2, labelValues = [eth2Network.get(otherwise = "mainnet")])
when not defined(gnosisChainBinary):
if eth2Network.isSome:
getMetadataForNetwork(eth2Network.get)
const defaultName =
when defined(gnosisChainBinary) and const_preset == "mainnet":
"gnosis"
elif const_preset == "mainnet":
"mainnet"
else:
when const_preset == "mainnet":
mainnetMetadata
else:
# Presumably other configurations can have other defaults, but for now
# this simplifies the flow
echo "Must specify network on non-mainnet node"
quit 1
"(unspecified)"
network_name.set(2, labelValues = [eth2Network.get(otherwise = defaultName)])
if eth2Network.isSome:
getMetadataForNetwork(eth2Network.get)
else:
checkNetworkParameterUse eth2Network
gnosisMetadata
when defined(gnosisChainBinary) and const_preset == "mainnet":
gnosisMetadata
elif const_preset == "mainnet":
mainnetMetadata
else:
# Presumably other configurations can have other defaults, but for now
# this simplifies the flow
fatal "Must specify network on non-mainnet node"
quit 1
template loadEth2Network*(config: BeaconNodeConf): Eth2NetworkMetadata =
loadEth2Network(config.eth2Network)

View File

@ -200,76 +200,79 @@ template mergeTestnet(path: string, eth1Network: Eth1Network): Eth2NetworkMetada
loadCompileTimeNetworkMetadata(mergeTestnetsDir & "/" & path,
some eth1Network)
when not defined(gnosisChainBinary):
when const_preset == "mainnet":
const
mainnetMetadata* = eth2Network("shared/mainnet", mainnet)
praterMetadata* = eth2Network("shared/prater", goerli)
ropstenMetadata* = mergeTestnet("ropsten-beacon-chain", ropsten)
sepoliaMetadata* = mergeTestnet("sepolia", sepolia)
static:
for network in [mainnetMetadata, praterMetadata, ropstenMetadata, sepoliaMetadata]:
checkForkConsistency(network.cfg)
when defined(gnosisChainBinary) and const_preset == "mainnet":
const
gnosisMetadata* = loadCompileTimeNetworkMetadata(
currentSourcePath.parentDir.replace('\\', '/') &
"/../../media/gnosis")
static:
for network in [gnosisMetadata]:
checkForkConsistency(network.cfg)
proc getMetadataForNetwork*(networkName: string): Eth2NetworkMetadata {.raises: [Defect, IOError].} =
template loadRuntimeMetadata: auto =
if fileExists(networkName / "config.yaml"):
try:
loadEth2NetworkMetadata(networkName)
except CatchableError as exc:
fatal "Cannot load network", msg = exc.msg, networkName
quit 1
else:
fatal "config.yaml not found for network", networkName
elif const_preset == "mainnet":
const
mainnetMetadata* = eth2Network("shared/mainnet", mainnet)
praterMetadata* = eth2Network("shared/prater", goerli)
ropstenMetadata* = mergeTestnet("ropsten-beacon-chain", ropsten)
sepoliaMetadata* = mergeTestnet("sepolia", sepolia)
static:
for network in [
mainnetMetadata, praterMetadata, ropstenMetadata, sepoliaMetadata]:
checkForkConsistency(network.cfg)
proc getMetadataForNetwork*(
networkName: string): Eth2NetworkMetadata {.raises: [Defect, IOError].} =
template loadRuntimeMetadata(): auto =
if fileExists(networkName / "config.yaml"):
try:
loadEth2NetworkMetadata(networkName)
except CatchableError as exc:
fatal "Cannot load network", msg = exc.msg, networkName
quit 1
else:
fatal "config.yaml not found for network", networkName
quit 1
var
metadata = when const_preset == "mainnet":
case toLowerAscii(networkName)
of "mainnet":
mainnetMetadata
of "prater", "goerli":
praterMetadata
of "ropsten":
ropstenMetadata
of "sepolia":
sepoliaMetadata
else:
loadRuntimeMetadata()
let metadata =
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()
if metadata.incompatible:
fatal "The selected network is not compatible with the current build",
reason = metadata.incompatibilityDesc
quit 1
metadata
elif const_preset == "mainnet":
case toLowerAscii(networkName)
of "mainnet":
mainnetMetadata
of "prater", "goerli":
praterMetadata
of "ropsten":
ropstenMetadata
of "sepolia":
sepoliaMetadata
else:
loadRuntimeMetadata()
proc getRuntimeConfig*(
eth2Network: Option[string]): RuntimeConfig {.raises: [Defect, IOError].} =
if eth2Network.isSome:
return getMetadataForNetwork(eth2Network.get).cfg
defaultRuntimeConfig
else:
loadRuntimeMetadata()
else:
const
gnosisMetadata* = loadCompileTimeNetworkMetadata(
currentSourcePath.parentDir.replace('\\', '/') & "/../../media/gnosis")
if metadata.incompatible:
fatal "The selected network is not compatible with the current build",
reason = metadata.incompatibilityDesc
quit 1
static: checkForkConsistency(gnosisMetadata.cfg)
metadata
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 getRuntimeConfig*(
eth2Network: Option[string]): RuntimeConfig {.raises: [Defect, IOError].} =
if eth2Network.isSome:
return getMetadataForNetwork(eth2Network.get).cfg
defaultRuntimeConfig
proc extractGenesisValidatorRootFromSnapshot*(
snapshot: string): Eth2Digest {.raises: [Defect, IOError, SszError].} =