---
# System prepended metadata

title: Very light client
tags: [Ethereum beacon chain, Ink, Aleph zero]

---

# Very light client
###### tags: `Aleph zero` `Ethereum beacon chain` `Ink` 


Ce qu'il faut faire :
- Implémenter un Stateless VLC de la beacon chain
- En Ink!
- Donc si y'avait un front ce serait : on se connecte avec leur wallet, on met une adresse ETH, on paie et ça envoie les fonds.

Challenges : 
- Apprendre le Ink
- Faire la partie Merkle proof (hash qui vérifie les roots)
- sha-256
- Signatures BLS

Route :
- Données de la transaction
- On les hash => txHash
- avec le merkle path on obtient la transactionsRoot
- avec cette transactionsRoot et les autres données du block header
- on obtient le blockHash
- Qui est signé par les validateurs


VLC :
- Dès que quelqu'un veut mint des wETH sur Aleph Zero, il lock sur ETH, puis envoie une requête (subventionnée) au contrat sur Aleph Zero
- La requête contient :
    - tx Info, Merkle path, blockHash
    - Le lien entre le dernier state et le nouveau :
        -    Le dernier sync committee a signé à 2/3 tel prochain
        -    Ce prochain a signé à 2/3 tel prochain etc (pour chaque 27h)
        -    Jusqu'à celui qui a signé le blockHash



Ce qu'on fait nous :
- Hasher les données de la tx pour avoir txHash
- Vérifier l'inclusion de txHash dans transactionsRoot
- Et l'inclusion de transactionsRoot and blockHash


- Comment exactement les données de la tx sont hashées




Notre lib JS call getProof etc (des méthodes RPC)
=> Il faut qu'elle nous donne un paquet : {
    txRaw,
    txProof,
    txRoot,
    blockHeader,
    blockHash
}

=> En Ink! :
- txHash = keccak256(txRaw)
- keccak (txHash + txProof) = txRoot (Patricia-Merkle, using SHA-256)
- txRoot + blockHeader = blockHash

- check txRaw.amount == _amount, txRaw.to == bridgeContract, txRaw.method == lock
- check blockHash == relayedBlockHash







Input : txHash and block number
- get transaction data from its hash
- get block from its hash
- fill Patricia-Merkle Trie with all of the transactions from the block
- call tree.findPath to get txProof
- Now we have the blockHeader (as buffer), txProof (as buffer) and txIndex in block (as hex)

- Verify that block hash is identical to the one on the contract
- Verify that txRoot from header is same as txRoot from proof












Liens en vrac :
https://github.com/protolambda/eth2-docs

https://raw.githubusercontent.com/protolambda/eth2-docs/master/eth2-htr.png


Beacon chain light clients :
https://github.com/uink45/Beacon-Chain-Light-Client-Prototype

https://github.com/sigp/lighthouse/blob/stable/crypto/eth2_hashing/src/lib.rs

https://github.com/dtbuchholz/blc-rs/blob/main/src/builder.rs

Verify merkle ts : https://github.com/ChainSafe/lodestar/blob/unstable/packages/light-client/src/utils/verifyMerkleBranch.ts

https://hackmd.io/@wemeetagain/SkuswKu_r

https://github.com/dtbuchholz/beacon-light-client/blob/main/src/builder.rs