Following up on the Ethereum Foundation Grant announcement, $150k will see Nimbus – in collaboration with Protocol Labs and the Ethereum Foundation – create an implementation of libp2p focusing on mobile devices as well as future private, secure messaging protocols.

Nimbus, Protocol Labs, and the Ethereum Foundation aim to produce a native implementation of libp2p in Nim focusing on mobile phones and other resource restricted devices. The implementation will be designed in a way that is flexible for future use in new private communication protocols as well as integrations with projects like IPFS and Swarm.

One of the high level goals of this initiative (and the trio of projects involved) is to make secure, private, decentralized communication possible for the masses. However, there are many challenges associated with replacing the current client/server model we are all accustomed to today. Challenges such as networking between clients in a distributed network which involves the incredibly complex process of having nodes - programs using these technologies - find each other on a global scale without prior advertising of locations or communication protocols to talk through. Add to this the relative ease with which bad actors can censor or otherwise prevent and falsify information between these nodes, and communication without a central relayer of information becomes a tough problem to solve.

libp2p can help overcome these issues. libp2p is a peer-to-peer networking framework for creating decentralized applications. Specifically, libp2p allows a peer on the network to advertise the ways through which one can connect to it using a multitude of protocols, so that even if another peer cannot reach out via, for example, QUIC, they can try WebRTC or TCP.

libp2p was originally the networking protocol of IPFS, and now has multiple implementations. The Nimbus team’s implementation will be a highly reusable plug and play library compatible with a wide range of projects in different programming languages.

Why Nim?

The libp2p implementation will be written in Nim. Nim is a lightweight and efficient programming language that suits itself well to resource restricted devices. It is an efficient, general-purpose systems language with a Python-like syntax that compiles to C.

Nim will allow us to implement libp2p rapidly and to take advantage of the mature C-language tooling: in compilation of machine code, and in the analysis of static code. Components written in Nim can easily be embedded in projects using languages that already interface with C.

Goals of the Project

The trio of collaborators aim to achieve the following goals:

Creation of an implementation of libp2p suitable for resource-restricted devices

Participate in the research, development and specification of protocols within the libp2p stack

Grow a libp2p implementation team

Follow permissive licensing ensuring the widest possible deployment of libp2p

We are really excited to be supporting this new implementation of libp2p. This collaboration creates an even more robust ecosystem of R&D and implementations. We share a common vision with the Nimbus team and are happy to be working with the team on this. Mike Goelzer

Deliverables of the Project

For the initial implementation, the teams will focus on the components necessary for building a production-grade Ethereum 2 client. The initial scope of work consists of four focus areas:

Complete tasks set out in https://github.com/status-im/nim-libp2p/issues/10

Audit security-critical parts of implementation

Publish these components as independently reusable modules and libraries

Provide documentation, tutorials and study materials ensuring a good developer experience



Open Licensing

The code will be licensed under Apache 2.0 and MIT licenses, at the users choice. This ensures the widest compatibility with existing licenses and applications.

This is key to deploying the technologies on major commercial distribution platforms such as the App Store of Apple Inc.

Support from Status

Status is dedicated to the research and development of not only initiatives such as this libp2p implementation, but also to the R&D of lightweight Eth2 clients as well as private and secure communication protocols.

This initiative sees the Nimbus team receive a grant of $150k which will be matched by Status for a total of $300k, further depicting Status’ commitment to Web3 and distributed technologies.

The Nimbus team - which is in part funded by Status - is participating in the research and development of Ethereum 2.0 in collaboration with the Ethereum Foundation and other implementing teams. Nimbus is presently using the go daemon version of libp2p which is proving insufficient for production use.

Status is also sponsoring the development of the Nim language itself, ensuring long-term viability of the programming language. As mentioned above, Nim provides a lightweight language optimal for use in resource restricted devices including mobile phones.

Status is also researching protocols for secure communication in collaboration with the Web3 foundation and Validity Labs.

We have been making good progress on Nimbus - our Eth2.0 client and this implementation is a much needed peice in bringing secure and private internet to resource restricted devices. We look forward to collaborating closely with Protocol Labs and the Ethereum Foundation to make this effort as successful as possible. Jacek Sieka

Protocol Labs

Protocol Labs is a research and development company actively pushing Web3 forward through protocol R&D, systems development, and tooling. Protocol Labs has been committed to creating the infrastructure for the future decentralized Internet.

Ethereum Foundation

This grant comes as part of a series of co-funded grants aimed at furthering Serenity (Eth2.0) development as we move nearer to the launch of the Beacon Chain.

In recent months, the Ethereum Foundation granted substantial awards to leading client development teams currently tasked with delivering long-standing multi-client testnets as development approaches the launch of Phase 0.

Get Involved

This is an entirely open source initiative in which all teams will communicate progress and invite all to get involved.

Join us in Github or follow along in Gitter

You can also follow along on Twitter