specs/status-spec.md

3.9 KiB

Status Client Specification

Version: 0.1 (Draft)

Authors: Oskar Thorén oskar@status.im, Dean Eigenmann dean@status.im

Table of Contents

Abstract

In this specification, we describe how to write a Status client for communicating with other Status clients.

We present a reference implementation of the protocol 1 that is used in a command line client 2 and a mobile app 3.

This document consists of two parts. The first outlines the specifications that have to be implemented in order to be a full Status client.

P2P Overlay

Status clients run on the public Ethereum network, as specified by the devP2P network protocols. devP2P provides a protocol for node discovery which is in draft mode (here)[https://github.com/ethereum/devp2p/blob/master/discv5/discv5.md]. See more on node discovery and management in the next section.

To communicate between Ethereum nodes, the (RLPx Transport Protocol, v5)[https://github.com/ethereum/devp2p/blob/master/rlpx.md] is used, which allows for TCP-based communication between nodes.

On top of this we run the RLPx-based subprotocol (Whisper v6)[https://eips.ethereum.org/EIPS/eip-627] for privacy-preserving messaging.

Node discovery and roles

  • Bootstrap nodes
  • Whisper relayers
  • Mailservers
  • Mobile nodes (Status Clients)

Design Rationale

P2P Overlay

Why devp2p? Why not use libp2p?

At the time the main Status clients were being developed, devp2p was the most mature. However, it is likely we'll move over to libp2p in the future, as it'll provide us with multiple transports, better protocol negotiation, NAT traversal, etc.

For very experimental bridge support, see the bridge between libp2p and devp2p in Murmur.

What about other RLPx subprotocols like LES, and Swarm?

Status is primarily optimized for resource restricted devices, and at present time light client support for these protocols are suboptimal. This is a work in progress.

For better Ethereum light client support, see (Re-enable LES as option)[https://github.com/status-im/status-go/issues/1025]. For better Swarm support, see (Swarm adaptive nodes)[https://github.com/ethersphere/SWIPs/pull/12].

For transaction support, Status clients currently have to rely on Infura.

Status clients currently do not offer native support for file storage.

Why do you use Whisper?

Whisper is one of the (three parts)[http://gavwood.com/dappsweb3.html] of the vision of Ethereum as the world computer, Ethereum and Swarm being the other two. Status was started as an encapsulation of and a clear window to this world computer.

I heard you were moving away from Whisper?

Whisper is not currently under active development, and it has several drawbacks. Among others:

  • It is very wasteful bandwidth-wise and it doesn't appear to be scalable
  • Proof of work is a poor spam protection mechanism for heterogenerous devices
  • The privacy guarantees provided are not rigorous
  • There's no incentives to run a node

Finding a more suitable transport privacy is an ongoing research effort, together with (Vac)[https://vac.dev/vac-overview] and other teams in the space.

Footnotes

  1. https://github.com/status-im/status-protocol-go/
  2. https://github.com/status-im/status-console-client/
  3. https://github.com/status-im/status-react/

Acknowledgements