---
# System prepended metadata

title: ETH Light Client

---

# ZK Light Client for Ethereum 
Light Clients are scaled down versions of full nodes just verifying block headers. This enables anyone running a light client to sync with the network without the requirement of having all the data on the blockchain.

<!-- ## Goal:
A protocol which:
1. Verifies consensus of blocks from Ethereum on to the target chain.
2. Verifies state proofs from Ethereum on the target chain
 -->
 On a high level, a light clients needs to verify two things:
 1. Validator Signatures
 2. Validator Set Commitment
 
 ![image](https://hackmd.io/_uploads/HyrNJj8wp.png)


### Signature Aggregation Proof
```
def verifyHeaderSignatures():
    public input header
    public input publicKeysCommitment
    private input aggregateSignature
    private input participationBitmap
    private input publicKeys
    # PoseidonHash is a hash function cheap to compute inside zkSNARKs
    assert publicKeysCommitment == PoseidonHash(publicKeys)
    aggregatePublicKey = aggregate(participationBitmap, publicKeys)
    assert BLSSignatureVerify(header, aggregateSignature, aggregatePublicKey)
    return sum(participationBitmap) # num of validators who signed
```

### Sync Committee SSZ Proof
```
def mapSSZToPoseidonCommitment():
    public input finalizedHeader # already validated in smart contract
    private input publicKeys
    private input aggregatePublicKey
    sszRootPublicKeys = SSZ(publicKeys, aggregatePublicKey)
    # SNARK-friendly commitment used in verifyHeaderSignatures
    poseidonRoot = PoseidonHash([publicKeys, aggregatePublicKey]) 
    assert finalizedHeader.nextSyncCommitteeRoot == sszRootPublicKeys
    return sszRootPublicKeys, poseidonRoot
```

Succinct Labs has already implemented this using circom. But we can take advantage of advnces in ZK SNARK tech and use a much faster proving system like Halo2 or Plonky2 to implement Ethereum PoS inside a SNARK. 

Ingredients:
1. Pairing library for BLS12-381 (verifying aggregated signatures)
2. SHA-256 implemention (Proving Sync Committee SSZ)

## References
1. https://blog.succinct.xyz/endgame/
2. https://blog.succinct.xyz/proof-of-consensus/
3. https://ethresear.ch/t/zkpos-with-halo2-pairing-for-verifying-aggregate-bls-signatures/14671