---
# System prepended metadata

title: 'Light Client Support in Prysm '
tags: [EPF]

---

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.



