configure block_sim to start with Deneb genesis (#6274)
This commit is contained in:
parent
963e0bb92b
commit
137d969f1d
|
@ -56,49 +56,6 @@ type Timers = enum
|
||||||
# version, so isolate these here pending refactoring of block_sim to prefer,
|
# version, so isolate these here pending refactoring of block_sim to prefer,
|
||||||
# when possible, to also use the forked version. It'll be worth keeping some
|
# when possible, to also use the forked version. It'll be worth keeping some
|
||||||
# example of the non-forked version because it enables fork bootstrapping.
|
# example of the non-forked version because it enables fork bootstrapping.
|
||||||
proc makeSimulationBlock(
|
|
||||||
cfg: RuntimeConfig,
|
|
||||||
state: var capella.HashedBeaconState,
|
|
||||||
proposer_index: ValidatorIndex,
|
|
||||||
randao_reveal: ValidatorSig,
|
|
||||||
eth1_data: Eth1Data,
|
|
||||||
graffiti: GraffitiBytes,
|
|
||||||
attestations: seq[phase0.Attestation],
|
|
||||||
deposits: seq[Deposit],
|
|
||||||
exits: BeaconBlockValidatorChanges,
|
|
||||||
sync_aggregate: SyncAggregate,
|
|
||||||
execution_payload: capella.ExecutionPayloadForSigning,
|
|
||||||
bls_to_execution_changes: SignedBLSToExecutionChangeList,
|
|
||||||
rollback: RollbackHashedProc[capella.HashedBeaconState],
|
|
||||||
cache: var StateCache,
|
|
||||||
# TODO:
|
|
||||||
# `verificationFlags` is needed only in tests and can be
|
|
||||||
# removed if we don't use invalid signatures there
|
|
||||||
verificationFlags: UpdateFlags = {}): Result[capella.BeaconBlock, cstring] =
|
|
||||||
## Create a block for the given state. The latest block applied to it will
|
|
||||||
## be used for the parent_root value, and the slot will be take from
|
|
||||||
## state.slot meaning process_slots must be called up to the slot for which
|
|
||||||
## the block is to be created.
|
|
||||||
|
|
||||||
# To create a block, we'll first apply a partial block to the state, skipping
|
|
||||||
# some validations.
|
|
||||||
|
|
||||||
var blck = partialBeaconBlock(
|
|
||||||
cfg, state, proposer_index, randao_reveal, eth1_data, graffiti,
|
|
||||||
attestations, deposits, exits, sync_aggregate, execution_payload)
|
|
||||||
|
|
||||||
let res = process_block(
|
|
||||||
cfg, state.data, blck.asSigVerified(), verificationFlags, cache)
|
|
||||||
|
|
||||||
if res.isErr:
|
|
||||||
rollback(state)
|
|
||||||
return err(res.error())
|
|
||||||
|
|
||||||
state.root = hash_tree_root(state.data)
|
|
||||||
blck.state_root = state.root
|
|
||||||
|
|
||||||
ok(blck)
|
|
||||||
|
|
||||||
proc makeSimulationBlock(
|
proc makeSimulationBlock(
|
||||||
cfg: RuntimeConfig,
|
cfg: RuntimeConfig,
|
||||||
state: var deneb.HashedBeaconState,
|
state: var deneb.HashedBeaconState,
|
||||||
|
@ -407,9 +364,7 @@ cli do(slots = SLOTS_PER_EPOCH * 7,
|
||||||
sync_aggregate =
|
sync_aggregate =
|
||||||
syncCommitteePool[].produceSyncAggregate(dag.head.bid, slot)
|
syncCommitteePool[].produceSyncAggregate(dag.head.bid, slot)
|
||||||
hashedState =
|
hashedState =
|
||||||
when T is capella.SignedBeaconBlock:
|
when T is deneb.SignedBeaconBlock:
|
||||||
addr state.capellaData
|
|
||||||
elif T is deneb.SignedBeaconBlock:
|
|
||||||
addr state.denebData
|
addr state.denebData
|
||||||
elif T is electra.SignedBeaconBlock:
|
elif T is electra.SignedBeaconBlock:
|
||||||
addr state.electraData
|
addr state.electraData
|
||||||
|
@ -432,14 +387,12 @@ cli do(slots = SLOTS_PER_EPOCH * 7,
|
||||||
eth1ProposalData.deposits,
|
eth1ProposalData.deposits,
|
||||||
BeaconBlockValidatorChanges(),
|
BeaconBlockValidatorChanges(),
|
||||||
sync_aggregate,
|
sync_aggregate,
|
||||||
when T is electra.SignedBeaconBlock:
|
(when T is electra.SignedBeaconBlock:
|
||||||
default(electra.ExecutionPayloadForSigning)
|
default(electra.ExecutionPayloadForSigning)
|
||||||
elif T is deneb.SignedBeaconBlock:
|
elif T is deneb.SignedBeaconBlock:
|
||||||
default(deneb.ExecutionPayloadForSigning)
|
default(deneb.ExecutionPayloadForSigning)
|
||||||
elif T is capella.SignedBeaconBlock:
|
|
||||||
default(capella.ExecutionPayloadForSigning)
|
|
||||||
else:
|
else:
|
||||||
default(bellatrix.ExecutionPayloadForSigning),
|
static: doAssert false),
|
||||||
static(default(SignedBLSToExecutionChangeList)),
|
static(default(SignedBLSToExecutionChangeList)),
|
||||||
noRollback,
|
noRollback,
|
||||||
cache)
|
cache)
|
||||||
|
@ -463,28 +416,6 @@ cli do(slots = SLOTS_PER_EPOCH * 7,
|
||||||
# HTTP server's state function, combine all proposeForkBlock functions into a
|
# HTTP server's state function, combine all proposeForkBlock functions into a
|
||||||
# single generic function. Until https://github.com/nim-lang/Nim/issues/20811
|
# single generic function. Until https://github.com/nim-lang/Nim/issues/20811
|
||||||
# is fixed, that generic function must take `blockRatio` as a parameter.
|
# is fixed, that generic function must take `blockRatio` as a parameter.
|
||||||
proc proposeCapellaBlock(slot: Slot) =
|
|
||||||
if rand(r, 1.0) > blockRatio:
|
|
||||||
return
|
|
||||||
|
|
||||||
dag.withUpdatedState(tmpState[], dag.getBlockIdAtSlot(slot).expect("block")) do:
|
|
||||||
let
|
|
||||||
newBlock = getNewBlock[capella.SignedBeaconBlock](updatedState, slot, cache)
|
|
||||||
added = dag.addHeadBlock(verifier, newBlock) do (
|
|
||||||
blckRef: BlockRef, signedBlock: capella.TrustedSignedBeaconBlock,
|
|
||||||
epochRef: EpochRef, unrealized: FinalityCheckpoints):
|
|
||||||
# Callback add to fork choice if valid
|
|
||||||
attPool.addForkChoice(
|
|
||||||
epochRef, blckRef, unrealized, signedBlock.message,
|
|
||||||
blckRef.slot.start_beacon_time)
|
|
||||||
|
|
||||||
dag.updateHead(added[], quarantine[], [])
|
|
||||||
if dag.needStateCachesAndForkChoicePruning():
|
|
||||||
dag.pruneStateCachesDAG()
|
|
||||||
attPool.prune()
|
|
||||||
do:
|
|
||||||
raiseAssert "withUpdatedState failed"
|
|
||||||
|
|
||||||
proc proposeDenebBlock(slot: Slot) =
|
proc proposeDenebBlock(slot: Slot) =
|
||||||
if rand(r, 1.0) > blockRatio:
|
if rand(r, 1.0) > blockRatio:
|
||||||
return
|
return
|
||||||
|
@ -571,8 +502,7 @@ cli do(slots = SLOTS_PER_EPOCH * 7,
|
||||||
case dag.cfg.consensusForkAtEpoch(slot.epoch)
|
case dag.cfg.consensusForkAtEpoch(slot.epoch)
|
||||||
of ConsensusFork.Electra: proposeElectraBlock(slot)
|
of ConsensusFork.Electra: proposeElectraBlock(slot)
|
||||||
of ConsensusFork.Deneb: proposeDenebBlock(slot)
|
of ConsensusFork.Deneb: proposeDenebBlock(slot)
|
||||||
of ConsensusFork.Capella: proposeCapellaBlock(slot)
|
of ConsensusFork.Phase0 .. ConsensusFork.Capella:
|
||||||
of ConsensusFork.Phase0 .. ConsensusFork.Bellatrix:
|
|
||||||
doAssert false
|
doAssert false
|
||||||
if attesterRatio > 0.0:
|
if attesterRatio > 0.0:
|
||||||
withTimer(timers[tAttest]):
|
withTimer(timers[tAttest]):
|
||||||
|
|
|
@ -60,7 +60,7 @@ func getSimulationConfig*(): RuntimeConfig {.compileTime.} =
|
||||||
cfg.ALTAIR_FORK_EPOCH = 0.Epoch
|
cfg.ALTAIR_FORK_EPOCH = 0.Epoch
|
||||||
cfg.BELLATRIX_FORK_EPOCH = 0.Epoch
|
cfg.BELLATRIX_FORK_EPOCH = 0.Epoch
|
||||||
cfg.CAPELLA_FORK_EPOCH = 0.Epoch
|
cfg.CAPELLA_FORK_EPOCH = 0.Epoch
|
||||||
cfg.DENEB_FORK_EPOCH = 1.Epoch
|
cfg.DENEB_FORK_EPOCH = 0.Epoch
|
||||||
cfg.ELECTRA_FORK_EPOCH = 3.Epoch
|
cfg.ELECTRA_FORK_EPOCH = 3.Epoch
|
||||||
cfg
|
cfg
|
||||||
|
|
||||||
|
@ -139,15 +139,15 @@ proc loadGenesis*(
|
||||||
depositContractState: merkleizer.toDepositContractState)
|
depositContractState: merkleizer.toDepositContractState)
|
||||||
|
|
||||||
let res = (ref ForkedHashedBeaconState)(
|
let res = (ref ForkedHashedBeaconState)(
|
||||||
kind: ConsensusFork.Capella,
|
kind: ConsensusFork.Deneb,
|
||||||
capellaData: capella.HashedBeaconState(
|
denebData: deneb.HashedBeaconState(
|
||||||
data: initialize_beacon_state_from_eth1(
|
data: initialize_beacon_state_from_eth1(
|
||||||
cfg, ZERO_HASH, 0, deposits,
|
cfg, ZERO_HASH, 0, deposits,
|
||||||
default(capella.ExecutionPayloadHeader), {skipBlsValidation})))
|
default(deneb.ExecutionPayloadHeader), {skipBlsValidation})))
|
||||||
|
|
||||||
info "Saving genesis file", fileName = genesisFn
|
info "Saving genesis file", fileName = genesisFn
|
||||||
try:
|
try:
|
||||||
SSZ.saveFile(genesisFn, res.capellaData.data)
|
SSZ.saveFile(genesisFn, res.denebData.data)
|
||||||
except IOError as exc:
|
except IOError as exc:
|
||||||
fatal "Genesis file failed to save",
|
fatal "Genesis file failed to save",
|
||||||
fileName = genesisFn, exc = exc.msg
|
fileName = genesisFn, exc = exc.msg
|
||||||
|
|
Loading…
Reference in New Issue