Skip to content

Client Implementation Status

subtly edited this page Jul 24, 2015 · 27 revisions

This page contains a list of major RLPx features and the current status of those features for client implementations.

Known Issues

  • Go,C++,Py uses left128 instead of right128
  • whether to update mac state after sending mac digest

Node Discovery

  • Go [ ] C++ [ ] Py [ ]: discovery performed via 8 bits-per-hop routing
  • Go [x] C++ [x] Py [ ]: udp addresses determined by socket address of recvd Ping packets
  • Go [x] C++ [x] Py [x]: tcp addresses determined by contents of Ping packet
  • Go [ ] C++ [ ] Py [x]: tcp addresses are only updated upon receipt of Pong packet
  • Go [x] C++ [x] Py [x]: Signed discovery packets
  • Go [x] C++ [ ] Py [x]: idle bucket refresh: for each bucket which, isn't empty or is empty and furthest away, and which hasn't been touched in 3600 seconds, pick a random value in the range of the bucket and perform discovery for that value
  • Go [x] C++ [x] Py [x]: perform discovery protocol with a concurrency of 3
  • Go [x] C++ [ ] Py [x]: timeout any packet operation if response is not received within 500ms
  • Go [x] C++ [x] Py [x!]: distance based on xor(sha3(NodeIdA),sha3(NodeIdB))

Alex WiP:

  • peer protocol maintains an ideal peer count

Authentication Handshake

  • Go
  • C++
  • Py
  • Java
  • JS

Framing

  • Go [ ] C++ [ ] Py [x]: basic frame, move protocol-type into frame header (replace magic sequence w/frame header)
  • Go [x] C++ [x] Py [x]: mac of header and frame
  • Go [ ] C++ [ ] Py []: chunking with static 1KB frame size (requires fair queueing)
  • Go [ ] C++ [ ] Py [ ]: poc9+ sequence-ids for non-chunked packets
  • Go [ ] C++ [ ] Py [x!]: poc9+ dynamic framing

Flow Control

  • Go [ ] C++ [ ] Py [ ]: fair queueing (required for chunking)
  • Go [ ] C++ [ ] Py [ ]: DeltaUpdate packet (required for fair queueing)
  • Go [ ] C++ [ ] Py [x!]: poc9+ dynamic framing

x! py implemented but not active

Encryption

  • Go
  • C++
  • Py
  • Java
  • JS