Steps to take: - [x] Create a document containing the accumulation of the light client specs throughout different upgrades. - [ ] Read and cross check the [implemented 4 functions](https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/rpc/eth/light-client/handlers.go) with the new specs and find mismatches. - [ ] [`create_light_client_bootstrap`](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/light-client/full-node.md#create_light_client_bootstrap) - [ ] [`create_light_client_update`](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/light-client/full-node.md#create_light_client_update) - [ ] [`create_light_client_finality_update`](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/light-client/full-node.md#create_light_client_finality_update) - [ ] [`create_light_client_optimistic_update`](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/light-client/full-node.md#create_light_client_optimistic_update) - [ ] Update the code, and add the missing logic based on the specs. Also update and add [tests](https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/rpc/eth/light-client/handlers_test.go). - [x] Implement the [APIs](https://ethereum.github.io/beacon-APIs/#/Beacon/getLightClientBootstrap) for the light clients, and connect them to the 4 functions implemented before. - [ ] Check and update the implementation of the [gossip events](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/light-client/p2p-interface.md#the-gossip-domain-gossipsub) (just the parts concerning the full node) to broadcast the finality and optimistic updates to light clients. - [ ] Test the implementation using [Helios](https://github.com/a16z/helios) and [blsync](https://geth.ethereum.org/docs/fundamentals/blsync) (against [Nimbus](https://github.com/status-im/nimbus-eth2) and [Lodestar](https://github.com/ChainSafe/lodestar)) - [ ] Implement the improvements proposed by [@rkapka](https://github.com/rkapka) in [this issue](https://github.com/prysmaticlabs/prysm/issues/12991) --- I found these resources to be useful for understanding what a light client server is supposed to do: - [consensus specs on light client support in full node](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/light-client/full-node.md) - [Implementation of Nimbus light client RPC in Helios](https://github.com/a16z/helios/blob/master/consensus/src/rpc/nimbus_rpc.rs) - [Implementation of light client support in Nimbus](https://github.com/status-im/nimbus-eth2/blob/stable/beacon_chain/rpc/rest_light_client_api.nim) - [Implementation of light client support in Lodestar](https://github.com/ChainSafe/lodestar/blob/b453b37d53a946b6faf73277fe1d75becff3ae8f/packages/beacon-node/src/api/impl/lightclient/index.ts) - [Beacon APIs on light client](https://github.com/ethereum/beacon-APIs/tree/master/apis/beacon/light_client) - The Nimbus REST APIs are nice for seeing what the result should be. for example: [http://unstable.mainnet.beacon-api.nimbus.team/eth/v1/beacon/light_client/bootstrap/0x654f9ce85babc5b9592fb9d5ecfa0be78954d2c3da44bf7f29f020796de38353](http://unstable.mainnet.beacon-api.nimbus.team/eth/v1/beacon/light_client/bootstrap/0x654f9ce85babc5b9592fb9d5ecfa0be78954d2c3da44bf7f29f020796de38353) - [A list of light client sync endpoints](https://s1na.github.io/light-sync-endpoints/) - Other than Helios, you can use [Geth's blsync](https://geth.ethereum.org/docs/fundamentals/blsync) - A [GPT based on the Prysm source code](https://chatgpt.com/g/g-13AH3Zb0G-prysm-gpt). can help some times. Light client implementation state in Prysm: - [This is the (old) tracking issue](https://github.com/ChainSafe/lodestar/blob/b453b37d53a946b6faf73277fe1d75becff3ae8f/packages/beacon-node/src/api/impl/lightclient/index.ts) - [This PR contains most of the work done](https://github.com/prysmaticlabs/prysm/pull/12854) - [Future improvements that should be done after the two previous issues are merged](https://github.com/prysmaticlabs/prysm/pull/12854) It seems that most of the work needed based on the specs and APIs, have already been implemented in Prysm. some are a little out of date, and it is missing a few things from the new specs. and it seems that there might be some bugs.