Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add light client functionality to ePBS #18

Open
wants to merge 2 commits into
base: epbs_fix_tests
Choose a base branch
from

Conversation

etan-status
Copy link

Update light client protocol to proof execution data based on state. A new field latest_execution_payload_root is required for this reason. There is an open issue where initialize_beacon_state_from_eth1 takes an ExecutionPayloadHeader but is not properly updated for the new semantics of this type to be a bid instead of an SSZ summary. latest_execution_payload_root is not correctly initialized, requiring hackery in light_client.py. This is left as is for now until naming of the SSZ summary vs the bid type is resolved.

With ePBS, the execution data inside the LightClientHeader is at least one slot behind the latest BeaconBlockHeader, as execution data is only made available after the beacon block is signed. While noticeable in interactive use cases, this is not really avoidable as ePBS makes the ExecutionPayload available later than at slot start.

The test framework lacks proper end to end ePBS related capabilities and some non light client test logic was minimally adjusted to fix LC tests.

The LC implementation may be simplified further with EIP-7688 as it stabilizes hash_tree_root across forks. For example, the conversions to recover historical ExecutionPayload roots during the initial handful of epochs where finalized_header is in ELECTRA while attested_header is in EIP-7332, would be easier.

Update light client protocol to proof execution data based on state.
A new field `latest_execution_payload_root` is required for this reason.
There is an open issue where `initialize_beacon_state_from_eth1` takes
an `ExecutionPayloadHeader` but is not properly updated for the new
semantics of this type to be a bid instead of an SSZ summary.
`latest_execution_payload_root` is not correctly initialized, requiring
hackery in `light_client.py`. This is left as is for now until naming
of the SSZ summary vs the bid type is resolved.

With ePBS, the execution data inside the `LightClientHeader` is
at least one slot behind the latest `BeaconBlockHeader`, as execution
data is only made available after the beacon block is signed. While
noticeable in interactive use cases, this is not really avoidable as
ePBS makes the `ExecutionPayload` available later than at slot start.

The test framework lacks proper end to end ePBS related capabilities and
some non light client test logic was minimally adjusted to fix LC tests.

The LC implementation may be simplified further with EIP-7688 as it
stabilizes `hash_tree_root` across forks. For example, the conversions
to recover historical `ExecutionPayload` roots during the initial
handful of epochs where `finalized_header` is in ELECTRA while
`attested_header` is in EIP-7332, would be easier.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant