mirror of
https://github.com/status-im/eth2.0-specs.git
synced 2025-01-09 18:25:47 +00:00
2e97af2627
While the light client sync protocol currently provides access to the latest `BeaconBlockHeader`, obtaining the matching execution data needs workarounds such as downloading the full block. Having ready access to the EL state root simplifies use cases that need a way to cross-check `eth_getProof` responses against LC data. Access to `block_hash` unlocks scenarios where a CL light client drives an EL without `engine_newPayload`. As of Altair, only the CL beacon block root is available, but the EL block hash is needed for engine API. Other fields in the `ExecutionPayloadHeader` such as `logs_bloom` may allow light client applications to monitor blocks for local interest, e.g. for transfers affecting a certain wallet. This enables to download only the few relevant blocks instead of every single one. A new `LightClientStore` is proposed into the Capella spec that may be used to sync LC data that includes execution data. Existing pre-Capella LC data will remain as is, but can be locally upgraded before feeding it into the new `LightClientStore` so that light clients do not need to run a potentially expensive fork transition at a specific time. This enables the `LightClientStore` to be upgraded at a use case dependent timing at any time before Capella hits. Smart contract and embedded deployments benefit from reduced code size and do not need synchronization with the beacon chain clock to perform the Capella fork.
100 lines
4.6 KiB
Markdown
100 lines
4.6 KiB
Markdown
# Capella Light Client -- Networking
|
|
|
|
**Notice**: This document is a work-in-progress for researchers and implementers.
|
|
|
|
## Table of contents
|
|
|
|
<!-- TOC -->
|
|
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
|
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
|
|
|
- [Networking](#networking)
|
|
- [The gossip domain: gossipsub](#the-gossip-domain-gossipsub)
|
|
- [Topics and messages](#topics-and-messages)
|
|
- [Global topics](#global-topics)
|
|
- [`light_client_finality_update`](#light_client_finality_update)
|
|
- [`light_client_optimistic_update`](#light_client_optimistic_update)
|
|
- [The Req/Resp domain](#the-reqresp-domain)
|
|
- [Messages](#messages)
|
|
- [GetLightClientBootstrap](#getlightclientbootstrap)
|
|
- [LightClientUpdatesByRange](#lightclientupdatesbyrange)
|
|
- [GetLightClientFinalityUpdate](#getlightclientfinalityupdate)
|
|
- [GetLightClientOptimisticUpdate](#getlightclientoptimisticupdate)
|
|
|
|
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
|
<!-- /TOC -->
|
|
|
|
## Networking
|
|
|
|
The [Altair light client networking specification](../../altair/light-client/p2p-interface.md) is extended to exchange [Capella light client data](./sync-protocol.md).
|
|
|
|
### The gossip domain: gossipsub
|
|
|
|
#### Topics and messages
|
|
|
|
##### Global topics
|
|
|
|
###### `light_client_finality_update`
|
|
|
|
[0]: # (eth2spec: skip)
|
|
|
|
| `fork_version` | Message SSZ type |
|
|
| ------------------------------------------------------ | ------------------------------------- |
|
|
| `GENESIS_FORK_VERSION` | n/a |
|
|
| `ALTAIR_FORK_VERSION` through `BELLATRIX_FORK_VERSION` | `altair.LightClientFinalityUpdate` |
|
|
| `CAPELLA_FORK_VERSION` and later | `capella.LightClientFinalityUpdate` |
|
|
|
|
###### `light_client_optimistic_update`
|
|
|
|
[0]: # (eth2spec: skip)
|
|
|
|
| `fork_version` | Message SSZ type |
|
|
| ------------------------------------------------------ | ------------------------------------- |
|
|
| `GENESIS_FORK_VERSION` | n/a |
|
|
| `ALTAIR_FORK_VERSION` through `BELLATRIX_FORK_VERSION` | `altair.LightClientOptimisticUpdate` |
|
|
| `CAPELLA_FORK_VERSION` and later | `capella.LightClientOptimisticUpdate` |
|
|
|
|
### The Req/Resp domain
|
|
|
|
#### Messages
|
|
|
|
##### GetLightClientBootstrap
|
|
|
|
[0]: # (eth2spec: skip)
|
|
|
|
| `fork_version` | Response SSZ type |
|
|
| ------------------------------------------------------ | ------------------------------------- |
|
|
| `GENESIS_FORK_VERSION` | n/a |
|
|
| `ALTAIR_FORK_VERSION` through `BELLATRIX_FORK_VERSION` | `altair.LightClientBootstrap` |
|
|
| `CAPELLA_FORK_VERSION` and later | `capella.LightClientBootstrap` |
|
|
|
|
##### LightClientUpdatesByRange
|
|
|
|
[0]: # (eth2spec: skip)
|
|
|
|
| `fork_version` | Response chunk SSZ type |
|
|
| ------------------------------------------------------ | ------------------------------------- |
|
|
| `GENESIS_FORK_VERSION` | n/a |
|
|
| `ALTAIR_FORK_VERSION` through `BELLATRIX_FORK_VERSION` | `altair.LightClientUpdate` |
|
|
| `CAPELLA_FORK_VERSION` and later | `capella.LightClientUpdate` |
|
|
|
|
##### GetLightClientFinalityUpdate
|
|
|
|
[0]: # (eth2spec: skip)
|
|
|
|
| `fork_version` | Response SSZ type |
|
|
| ------------------------------------------------------ | ------------------------------------- |
|
|
| `GENESIS_FORK_VERSION` | n/a |
|
|
| `ALTAIR_FORK_VERSION` through `BELLATRIX_FORK_VERSION` | `altair.LightClientFinalityUpdate` |
|
|
| `CAPELLA_FORK_VERSION` and later | `capella.LightClientFinalityUpdate` |
|
|
|
|
##### GetLightClientOptimisticUpdate
|
|
|
|
[0]: # (eth2spec: skip)
|
|
|
|
| `fork_version` | Response SSZ type |
|
|
| ------------------------------------------------------ | ------------------------------------- |
|
|
| `GENESIS_FORK_VERSION` | n/a |
|
|
| `ALTAIR_FORK_VERSION` through `BELLATRIX_FORK_VERSION` | `altair.LightClientOptimisticUpdate` |
|
|
| `CAPELLA_FORK_VERSION` and later | `capella.LightClientOptimisticUpdate` |
|