Skip to content

Client Implementation Status

subtly edited this page Mar 18, 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++ uses left128 instead of right128
  • whether to update mac state after sending mac digest
  • C++ client distance is xor(pubkA,pubkB) instead of sha3(pubkA,pubkB)

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++ [x] Py [x]: timeout any packet operation if response is not received within 300ms
  • Go [?] C++ [ ] Py [ ]: distance based on xor(sha3(NodeIdA),sha3(NodeIdB))

Alex WiP:

  • peer protocol maintains an ideal peer count

Authentication Handshake

  • Go [x] C++ [x] Py [ ]: Initiation and Acknowledge implemented with ECIES std w/AES128-CTR for symmetric cipher
  • Go [x] C++ [x] Py [ ]: Initiation, Acknowledgement, and Authentication for unknown node
  • Go [x] C++ [x] Py [ ]: Initiation, Acknowledgement, and Authentication for known node
  • Go [x] C++ [x] Py [ ]: Derive shared secrets from handshake
  • Go [x] C++ [x] Py [ ]: Move capabilities into authentication payload (replaces Hello packet)

Framing

  • Go [ ] C++ [ ] Py [ ]: basic frame, move protocol-type into frame header (replace magic sequence w/frame header)
  • Go [x] C++ [x] Py [ ]: 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 [ ]: 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 [ ]: poc9+ dynamic framing

Encryption

  • Go [x] C++ [x] Py [ ]: encryption

Clone this wiki locally