---
# System prepended metadata

title: CDAP Development Update 4

---

# CDAP Development Update 4

This is my fourth development update for the [Ethereum Core Developer Apprenticeship](https://github.com/ethereum-cdap/cohort-one). Future updates will follow every two weeks.

Over the past two weeks I've been continuing work on [LEO](https://github.com/valist-io/leo), a libp2p portal network client. My goal was to build the header gossip network.

The header gossip network is designed to update all network peers with the latest chain header. A secondary function is to validate the headers ensuring only valid headers are shared.

Since LEO is built on libp2p, we can use the existing [go-libp2p-pubsub](https://github.com/libp2p/go-libp2p-pubsub) library. The library contains implementations for flood and gossip pubsub.

For the LEO network I decided to use the gossip pubsub because it seemed to be the best option for a large p2p network. The gossip pubsub implementation has also undergone [hardening](https://github.com/libp2p/gossipsub-hardening).

Another cool feature of the pubsub library is the concept of [peer scoring](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md#peer-scoring). This allows bad peers to be dropped from the network for providing invalid headers.

After finishing the header network I turned my focus back to bridging. The current bridge implementation works only for accounts, and there's no easy way to access the storage over RPC.

While researching an approach to solve the bridging problem, I had the idea of using [graphsync](https://github.com/ipfs/go-graphsync) as a bridge. Graphsync is a network protocol that allows clients to traverse IPLD graphs on a remote peer.

Since I had already figured out how to convert Ethereum state to IPLD, the only thing left was to create an Ethereum node with a graphsync service. I picked back up where I left off on my [go-ethereum fork](https://github.com/valist-io/go-ethereum/tree/graphsync) and added the graphsync service.

After some fiddling around with settings, I was able to successfully sync sections of the header chain over graphsync!

## What's Next?

My goal for the next two weeks is to research and acquire the hardware for an Ethereum archive node. This will enable me to start benchmarking and optimizing the combined Ethereum graphsync node.

I have high hopes for this approach being the solution to a scalable and decentralized storage network for Ethereum state.