This upgrade updates light client data to include the Electra changes to the
generalized indices of BeaconState. It extends the
Deneb Light Client specifications.
The fork document explains how to upgrade existing Deneb based
deployments to Electra.
Additional documents describes the impact of the upgrade on certain roles:
| Name | SSZ equivalent | Description |
|---|---|---|
FinalityBranch |
Vector[Bytes32, floorlog2(FINALIZED_ROOT_GINDEX_ELECTRA)] |
Merkle branch of finalized_checkpoint.root within BeaconState |
CurrentSyncCommitteeBranch |
Vector[Bytes32, floorlog2(CURRENT_SYNC_COMMITTEE_GINDEX_ELECTRA)] |
Merkle branch of current_sync_committee within BeaconState |
NextSyncCommitteeBranch |
Vector[Bytes32, floorlog2(NEXT_SYNC_COMMITTEE_GINDEX_ELECTRA)] |
Merkle branch of next_sync_committee within BeaconState |
Existing GeneralizedIndex constants are frozen at their
Altair values.
| Name | Value |
|---|---|
FINALIZED_ROOT_GINDEX |
get_generalized_index(altair.BeaconState, 'finalized_checkpoint', 'root') (= 105) |
CURRENT_SYNC_COMMITTEE_GINDEX |
get_generalized_index(altair.BeaconState, 'current_sync_committee') (= 54) |
NEXT_SYNC_COMMITTEE_GINDEX |
get_generalized_index(altair.BeaconState, 'next_sync_committee') (= 55) |
| Name | Value |
|---|---|
FINALIZED_ROOT_GINDEX_ELECTRA |
get_generalized_index(BeaconState, 'finalized_checkpoint', 'root') (= 169) |
CURRENT_SYNC_COMMITTEE_GINDEX_ELECTRA |
get_generalized_index(BeaconState, 'current_sync_committee') (= 86) |
NEXT_SYNC_COMMITTEE_GINDEX_ELECTRA |
get_generalized_index(BeaconState, 'next_sync_committee') (= 87) |
def finalized_root_gindex_at_slot(slot: Slot) -> GeneralizedIndex:
epoch = compute_epoch_at_slot(slot)
# [Modified in Electra]
if epoch >= ELECTRA_FORK_EPOCH:
return FINALIZED_ROOT_GINDEX_ELECTRA
return FINALIZED_ROOT_GINDEXdef current_sync_committee_gindex_at_slot(slot: Slot) -> GeneralizedIndex:
epoch = compute_epoch_at_slot(slot)
# [Modified in Electra]
if epoch >= ELECTRA_FORK_EPOCH:
return CURRENT_SYNC_COMMITTEE_GINDEX_ELECTRA
return CURRENT_SYNC_COMMITTEE_GINDEXdef next_sync_committee_gindex_at_slot(slot: Slot) -> GeneralizedIndex:
epoch = compute_epoch_at_slot(slot)
# [Modified in Electra]
if epoch >= ELECTRA_FORK_EPOCH:
return NEXT_SYNC_COMMITTEE_GINDEX_ELECTRA
return NEXT_SYNC_COMMITTEE_GINDEX