---
tags: ethereum, epf
---
# EPF - Eighth Update
My last update was based on the implementation of the Req/Res Protocol module for the Consensus Layer peer-to-peer setup [project](https://github.com/brech1/cl-p2p-setup). Some changes were still pending for this to be fully functional so that will be the main topic of this update
## Req/Res Protocol
The work for this feature took place in this pull request:
- [https://github.com/brech1/cl-p2p-setup/pull/1](https://github.com/brech1/cl-p2p-setup/pull/1)
I worked on implementing the required responses for each request. This is a code snippet for the match arm of a new RPC event:
```rust
BehaviourEvent::Rpc(rpc_message) => {
match rpc_message.event {
Ok(received) => match received {
rpc::RPCReceived::Request(substream, inbound_req) => {
...
},
rpc::RPCReceived::Response(_, _) => (),
},
Err(_) => (),
}
}
```
I only match the event of the RPC message since the other data is not relevant for the message processing. The following is the `RPCReceived::Request` match arm:
```rust
rpc::RPCReceived::Request(substream, inbound_req) => {
match inbound_req {
InboundRequest::Status(status)=>{
swarm.behaviour_mut().rpc.send_response(rpc_message.peer_id, (rpc_message.conn_id,substream), RPCCodedResponse::Success(RPCResponse::Status(status)));
},
InboundRequest::Ping(_) => {
swarm.behaviour_mut().rpc.send_response(rpc_message.peer_id, (rpc_message.conn_id,substream), RPCCodedResponse::Success(RPCResponse::Pong(rpc::methods::Ping {
data: 0,
})));
},
InboundRequest::MetaData => {
swarm.behaviour_mut().rpc.send_response(rpc_message.peer_id, (rpc_message.conn_id,substream), RPCCodedResponse::Success(RPCResponse::MetaData(MetaData{
seq_number: 0,
attnets: EnrAttestationBitfield::default(),
syncnets: EnrSyncCommitteeBitfield::default(),
})));
},
_ => {
swarm.behaviour_mut().rpc.send_response(rpc_message.peer_id, (rpc_message.conn_id,substream), RPCCodedResponse::Error);
},
}
}
```
For each request I use the `send_response` method of the RPC and build the specific `RPCResponse` for it.
## Debugging
I spent quite some time doing small fixes during the debugging stage. But after some time I got it working. This is the output of a local lighthouse node:
```bash
Feb 06 18:22:35.807 DEBG Connection established connection: Listener, peer_id: 16Uiu2HAmQAF6yFrbm7u1q9XJUsqupMYDgs6XZcuBavBrG6RBo7h5, service: libp2p
Feb 06 18:22:35.808 DEBG Obtained peer's metadata new_seq_no: 0, peer_id: 16Uiu2HAmQAF6yFrbm7u1q9XJUsqupMYDgs6XZcuBavBrG6RBo7h5, service: libp2p
```
In the lighthouse client, the first step after connecting to a new peer is to request the metadata. In the above snippet, we can see that this metadata has been received successfully! 🎉🎊🎉🎊
Eventually you’ll be disconnected for the node having “Too many peers”, this clearly shows the need of a peer manager.
```bash
Feb 06 18:23:00.295 DEBG Peer Manager disconnecting peer reason: Too many peers, peer_id: 16Uiu2HAmQAF6yFrbm7u1q9XJUsqupMYDgs6XZcuBavBrG6RBo7h5, service: libp2p
```
However, in the real world scenario I still get disconnected without the protocol being used, so I need to start looking at:
- Networking debugging tools
- Different client compatibilities
## Helios CL P2P Possible Contributions
I laid out a document with possible contributions to the current state of this project.
- [https://hackmd.io/@brech1/cl-p2p-contribution](https://hackmd.io/@brech1/cl-p2p-contribution)
This is for any contributor interested on contributing to this new feature.
## Rust Ethereum Consensus Specs
While exploring the helios codebase, I noticed this issue:
- [https://github.com/a16z/helios/issues/132](https://github.com/a16z/helios/issues/132)
I’m aware that I need to refactor some parts of the code to be compatible with some of the current or future helios crates or standards. So I decided to check out the Alex Stokes’ [Ethereum Consensus](https://github.com/ralexstokes/ethereum-consensus) repository.
I noticed that the P2P Interface types were only implemented for the phase0 specs, so I reached out to Alex and asked about how could this be implemented. These are the links for the issue and pull request:
- [https://github.com/ralexstokes/ethereum-consensus/issues/185](https://github.com/ralexstokes/ethereum-consensus/issues/185)
- [https://github.com/ralexstokes/ethereum-consensus/pull/186](https://github.com/ralexstokes/ethereum-consensus/pull/186)
## Next Steps
My first priority will be to test locally with other CL clients to see if any other errors come up. But also I need to implement the peer manager to keep a stable amount of peers.