Receive connection from host (websocket),
verify signed stats payload,
add to poolnodes,
receive signed stats recurringly (update node metadata).
Receive Connect from client (verify signed jsonrpc2),
send connect request to hosts subset (websocket),
respond with host candidates (jsonrpc2) when all responses complete or timeout is
When host disconnects (websocket), remove from poolnodes.
Connect to pool (websocket) and send signed stats (sync state, peers).
Receive connect request (websocket),
respond when whitelist is complete (ethrpc.AddTrustedPeer).
Receive disconnect request (websocket),
issue eth RPC to disconnect (ethrpc.RemoveTrustedPeer).
TODO: Register flow
Send Connect to pool (signed jsonrpc2),
receive a set of host candidates (jsonrpc2),
add hosts to ethrpc (ethrpc.AddTrustedPeer).
Send Update to pool (signed jsonrpc2),
receive balance update
vipnode-host frontend: Registration process to join the vipnode pool.
vipnode-client frontend: Registration process (can be a smart contract, or anything else) to associate a light client's enodeID with the account.
vipnode-pool will act as a bootstrapping server, routing connecting vipnode light clients to the next available vipnode full node.
vipnode-pool will keep track of which light client is connected to which full node, and other usage-related analytics.
vipnode-pool will keep track of full node availability and capacity, in order to avoid routing light clients if the full node is full or down.
vipnode-host will run on fulll nodes which will interface with the geth or parity RPC and keep track of which enodeIDs need to be whitelisted, and which ones are connected and for how long (from the host's perspective).
vipnode-client will implement an vipnode-pool API to:
Register the current enodeID (if not already registered)
Send back the set of connected peers (to allow time-usage billing), from the client's perspective.