This project is not supported anymore. You can find the up to date version in this repo
Overview
DEVP2P is a set of network protocols which form the Ethereum peer-to-peer network and act as an entry point for multiple different networks and applications. A service discovery system is thus necessary to allow each user to find its peers. The main challenge facing such a decentralised system is to efficiently manage the scarce resources of registrant nodes. The platform needs to decide how to place service advertisement to enable fast lookups for application with thousands of users and avoid starving users of less popular services. This task is crucial for the efficiency of the whole platform, but becomes especially challenging under the presence of malicious nodes who can try to manipulate or overload the system.
The goal of this project is to develop a secure, efficient and robust service discovery protocol for Ethereum 2.0 (Discv5). The project has 3 main stages:
- Develop a Discv5 simulation environment allowing us to prototype and evaluate different variants of the protocol (Objective 1).
- Implement the proposed mechanism of service discovery (Objective 2).
- Perform an extensive evaluation, verification and incremental improvement of the proposed protocol (Objective 3).
An improved service discovery system will increase the synchronization speed between peers, improve user experience and enhance the overall security of the network by providing larger and more divers set of peers to connect to.
Project Plan
The project is organised in three main milestones of the project together with their deliverables. We represent our progress with the following:
-
[X] Complete tasks
-
[ ] Pending or uncomplete tasks
-
Objective 1: Discv5 simulation environment
- [X] Task 1: Selection of an appropriate simulator: Investigate the scalability of the Speer simulator (https://github.com/danalex97/Speer) which is written in Go. In case of problems, we will proceed with Peersim (http://peersim.sourceforge.net/) simulator in the rest of the tasks.
- [X] Task 2: Adding Ethereum DHT to the simulator: Implement the Ethereum’s modified version of Kademlia protocol in the chosen simulator.
- [X] Task 3: Adding discv5 to the simulator: Implement the existing discovery protocol using radius estimation in the chosen simulator.
- Deliverables: Discv5 network simulator, including code repository, docs and examples. Deadline: Deadline: 31st August 2020.
-
Objective 2: Implementation of the proposed enhancements to discv5
- [X] Task 4: New discv5 discovery: Implementation of the proposed topic registration and discovery protocol where registrar nodes make individual admission decisions on topic registration requests (based on considerations such as load, popularity of topic, and so on) in the chosen simulator.
- [X] Task 5: Adding Sybil resistance to discv5: Detection of Sybil attacks by evaluating different evaluating differenct attack vectors and proposing countermeasures.
- [X] Task 6: Large-scale simulations: Run large-scale simulations in a setting with hundred of thousands of nodes.
Deadline: 30th September 2020.
- Deliverables: Service discovery implementation in the simulation environment and an initial version of the specification.
-
Objective 3: Performance evaluation and improvement
- [X] Task 7: Add threat model and performance analysis: Implement malicious nodes and computation of performance metrics for discovery and Sybil resistance.
- [X] Task 8: Evaluation of performance: Investigate the effectiveness of the proposed extensions under heavy presence of malicious nodes and make necessary changes to optimise the performance.
- Deliverables: Analysis and performance evaluation of service discovery in the presence of malicious actors and final specification of the protocol. Deadline: 30th November 2020.
Service Discovery Requirements
Requirements
Security Analysis
Security
Discv5 Service Discovery Design
Design
Service Discovery Simulator
Simulator
Simulation results
Evaluation results
Resources
Eth crawling results
How the list above is created
Notes
-
p2p/discover <--- use this
-
p2p/discv5 <----------- OLD, don't use
-
Specification of the wire protocol - for find node, we don't reveal the node you're looking for. This is to avoid malicious peers to generate the node being looked for on the fly and responding with this fake identity.
-
If we have parallel lookups we need to make sure that the paths are disjoin.
-
S-Kademlia
-
Check this code - here's the main for the protocol, handling messages etc. How a look the lookupWorker and lookupDistances
Other
Service discovery implementation