add electra gossip transition
This commit is contained in:
parent
0b8cb4efc4
commit
69f13eaa51
|
@ -382,7 +382,8 @@ proc updateGossipStatus*(
|
||||||
|
|
||||||
currentEpochTargetGossipState = getTargetGossipState(
|
currentEpochTargetGossipState = getTargetGossipState(
|
||||||
epoch, cfg.ALTAIR_FORK_EPOCH, cfg.BELLATRIX_FORK_EPOCH,
|
epoch, cfg.ALTAIR_FORK_EPOCH, cfg.BELLATRIX_FORK_EPOCH,
|
||||||
cfg.CAPELLA_FORK_EPOCH, cfg.DENEB_FORK_EPOCH, isBehind)
|
cfg.CAPELLA_FORK_EPOCH, cfg.DENEB_FORK_EPOCH, cfg.ELECTRA_FORK_EPOCH,
|
||||||
|
isBehind)
|
||||||
targetGossipState =
|
targetGossipState =
|
||||||
if lcBehind or epoch < 1:
|
if lcBehind or epoch < 1:
|
||||||
currentEpochTargetGossipState
|
currentEpochTargetGossipState
|
||||||
|
@ -392,7 +393,8 @@ proc updateGossipStatus*(
|
||||||
# Therefore, LC topic subscriptions are kept for 1 extra epoch.
|
# Therefore, LC topic subscriptions are kept for 1 extra epoch.
|
||||||
let previousEpochTargetGossipState = getTargetGossipState(
|
let previousEpochTargetGossipState = getTargetGossipState(
|
||||||
epoch - 1, cfg.ALTAIR_FORK_EPOCH, cfg.BELLATRIX_FORK_EPOCH,
|
epoch - 1, cfg.ALTAIR_FORK_EPOCH, cfg.BELLATRIX_FORK_EPOCH,
|
||||||
cfg.CAPELLA_FORK_EPOCH, cfg.DENEB_FORK_EPOCH, isBehind)
|
cfg.CAPELLA_FORK_EPOCH, cfg.DENEB_FORK_EPOCH, cfg.ELECTRA_FORK_EPOCH,
|
||||||
|
isBehind)
|
||||||
currentEpochTargetGossipState + previousEpochTargetGossipState
|
currentEpochTargetGossipState + previousEpochTargetGossipState
|
||||||
|
|
||||||
template currentGossipState(): auto = lightClient.gossipState
|
template currentGossipState(): auto = lightClient.gossipState
|
||||||
|
|
|
@ -810,6 +810,9 @@ proc init*(T: type BeaconNode,
|
||||||
func getDenebForkEpoch(): Opt[Epoch] =
|
func getDenebForkEpoch(): Opt[Epoch] =
|
||||||
Opt.some(cfg.DENEB_FORK_EPOCH)
|
Opt.some(cfg.DENEB_FORK_EPOCH)
|
||||||
|
|
||||||
|
func getElectraForkEpoch(): Opt[Epoch] =
|
||||||
|
Opt.some(cfg.ELECTRA_FORK_EPOCH)
|
||||||
|
|
||||||
proc getForkForEpoch(epoch: Epoch): Opt[Fork] =
|
proc getForkForEpoch(epoch: Epoch): Opt[Fork] =
|
||||||
Opt.some(dag.forkAtEpoch(epoch))
|
Opt.some(dag.forkAtEpoch(epoch))
|
||||||
|
|
||||||
|
@ -979,7 +982,8 @@ proc updateBlocksGossipStatus*(
|
||||||
|
|
||||||
targetGossipState = getTargetGossipState(
|
targetGossipState = getTargetGossipState(
|
||||||
slot.epoch, cfg.ALTAIR_FORK_EPOCH, cfg.BELLATRIX_FORK_EPOCH,
|
slot.epoch, cfg.ALTAIR_FORK_EPOCH, cfg.BELLATRIX_FORK_EPOCH,
|
||||||
cfg.CAPELLA_FORK_EPOCH, cfg.DENEB_FORK_EPOCH, isBehind)
|
cfg.CAPELLA_FORK_EPOCH, cfg.DENEB_FORK_EPOCH, cfg.ELECTRA_FORK_EPOCH,
|
||||||
|
isBehind)
|
||||||
|
|
||||||
template currentGossipState(): auto = node.blocksGossipState
|
template currentGossipState(): auto = node.blocksGossipState
|
||||||
if currentGossipState == targetGossipState:
|
if currentGossipState == targetGossipState:
|
||||||
|
@ -1285,6 +1289,8 @@ proc updateGossipStatus(node: BeaconNode, slot: Slot) {.async.} =
|
||||||
TOPIC_SUBSCRIBE_THRESHOLD_SLOTS = 64
|
TOPIC_SUBSCRIBE_THRESHOLD_SLOTS = 64
|
||||||
HYSTERESIS_BUFFER = 16
|
HYSTERESIS_BUFFER = 16
|
||||||
|
|
||||||
|
static: doAssert high(ConsensusFork) == ConsensusFork.Electra
|
||||||
|
|
||||||
let
|
let
|
||||||
head = node.dag.head
|
head = node.dag.head
|
||||||
headDistance =
|
headDistance =
|
||||||
|
@ -1299,6 +1305,7 @@ proc updateGossipStatus(node: BeaconNode, slot: Slot) {.async.} =
|
||||||
node.dag.cfg.BELLATRIX_FORK_EPOCH,
|
node.dag.cfg.BELLATRIX_FORK_EPOCH,
|
||||||
node.dag.cfg.CAPELLA_FORK_EPOCH,
|
node.dag.cfg.CAPELLA_FORK_EPOCH,
|
||||||
node.dag.cfg.DENEB_FORK_EPOCH,
|
node.dag.cfg.DENEB_FORK_EPOCH,
|
||||||
|
node.dag.cfg.ELECTRA_FORK_EPOCH,
|
||||||
isBehind)
|
isBehind)
|
||||||
|
|
||||||
doAssert targetGossipState.card <= 2
|
doAssert targetGossipState.card <= 2
|
||||||
|
|
|
@ -222,7 +222,8 @@ programMain:
|
||||||
|
|
||||||
targetGossipState = getTargetGossipState(
|
targetGossipState = getTargetGossipState(
|
||||||
slot.epoch, cfg.ALTAIR_FORK_EPOCH, cfg.BELLATRIX_FORK_EPOCH,
|
slot.epoch, cfg.ALTAIR_FORK_EPOCH, cfg.BELLATRIX_FORK_EPOCH,
|
||||||
cfg.CAPELLA_FORK_EPOCH, cfg.DENEB_FORK_EPOCH, isBehind)
|
cfg.CAPELLA_FORK_EPOCH, cfg.DENEB_FORK_EPOCH, cfg.ELECTRA_FORK_EPOCH,
|
||||||
|
isBehind)
|
||||||
|
|
||||||
template currentGossipState(): auto = blocksGossipState
|
template currentGossipState(): auto = blocksGossipState
|
||||||
if currentGossipState == targetGossipState:
|
if currentGossipState == targetGossipState:
|
||||||
|
|
|
@ -155,13 +155,15 @@ func getDiscoveryForkID*(cfg: RuntimeConfig,
|
||||||
type GossipState* = set[ConsensusFork]
|
type GossipState* = set[ConsensusFork]
|
||||||
func getTargetGossipState*(
|
func getTargetGossipState*(
|
||||||
epoch, ALTAIR_FORK_EPOCH, BELLATRIX_FORK_EPOCH, CAPELLA_FORK_EPOCH,
|
epoch, ALTAIR_FORK_EPOCH, BELLATRIX_FORK_EPOCH, CAPELLA_FORK_EPOCH,
|
||||||
DENEB_FORK_EPOCH: Epoch, isBehind: bool): GossipState =
|
DENEB_FORK_EPOCH: Epoch, ELECTRA_FORK_EPOCH: Epoch, isBehind: bool):
|
||||||
|
GossipState =
|
||||||
if isBehind:
|
if isBehind:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
doAssert BELLATRIX_FORK_EPOCH >= ALTAIR_FORK_EPOCH
|
doAssert BELLATRIX_FORK_EPOCH >= ALTAIR_FORK_EPOCH
|
||||||
doAssert CAPELLA_FORK_EPOCH >= BELLATRIX_FORK_EPOCH
|
doAssert CAPELLA_FORK_EPOCH >= BELLATRIX_FORK_EPOCH
|
||||||
doAssert DENEB_FORK_EPOCH >= CAPELLA_FORK_EPOCH
|
doAssert DENEB_FORK_EPOCH >= CAPELLA_FORK_EPOCH
|
||||||
|
doAssert ELECTRA_FORK_EPOCH >= DENEB_FORK_EPOCH
|
||||||
|
|
||||||
# https://github.com/ethereum/consensus-specs/issues/2902
|
# https://github.com/ethereum/consensus-specs/issues/2902
|
||||||
# Don't care whether ALTAIR_FORK_EPOCH == BELLATRIX_FORK_EPOCH or
|
# Don't care whether ALTAIR_FORK_EPOCH == BELLATRIX_FORK_EPOCH or
|
||||||
|
@ -187,7 +189,9 @@ func getTargetGossipState*(
|
||||||
maybeIncludeFork(
|
maybeIncludeFork(
|
||||||
ConsensusFork.Capella, CAPELLA_FORK_EPOCH, DENEB_FORK_EPOCH)
|
ConsensusFork.Capella, CAPELLA_FORK_EPOCH, DENEB_FORK_EPOCH)
|
||||||
maybeIncludeFork(
|
maybeIncludeFork(
|
||||||
ConsensusFork.Deneb, DENEB_FORK_EPOCH, FAR_FUTURE_EPOCH)
|
ConsensusFork.Deneb, DENEB_FORK_EPOCH, ELECTRA_FORK_EPOCH)
|
||||||
|
maybeIncludeFork(
|
||||||
|
ConsensusFork.Electra, ELECTRA_FORK_EPOCH, FAR_FUTURE_EPOCH)
|
||||||
|
|
||||||
doAssert len(targetForks) <= 2
|
doAssert len(targetForks) <= 2
|
||||||
targetForks
|
targetForks
|
||||||
|
|
|
@ -14,7 +14,8 @@ import
|
||||||
../beacon_chain/spec/[forks, network]
|
../beacon_chain/spec/[forks, network]
|
||||||
|
|
||||||
template getTargetGossipState(a, b, c, d, e: int, isBehind: bool): auto =
|
template getTargetGossipState(a, b, c, d, e: int, isBehind: bool): auto =
|
||||||
getTargetGossipState(a.Epoch, b.Epoch, c.Epoch, d.Epoch, e.Epoch, isBehind)
|
getTargetGossipState(
|
||||||
|
a.Epoch, b.Epoch, c.Epoch, d.Epoch, e.Epoch, FAR_FUTURE_EPOCH, isBehind)
|
||||||
|
|
||||||
suite "Gossip fork transition":
|
suite "Gossip fork transition":
|
||||||
test "Gossip fork transition":
|
test "Gossip fork transition":
|
||||||
|
|
Loading…
Reference in New Issue