-
Notifications
You must be signed in to change notification settings - Fork 6
Description
A vipnode-client who wants to participate in usage-metered pools will need to implement an additional protocol for reporting which nodes the client is connected to.
This is a rough draft of what this protocol would look like.
Requirements
vipnode_client: Request for a set of vipnodes that are ready for nodeID to connect.vipnode_update: Periodic updates with details about connected peers to the vipnode pool.- (Optional)
vipnode_register: Automatic registration flow to update nodeID <- address mapping.
Question: Does it make sense to use a vipnode_ RPC method prefix for these, or should it be something more general?
Considerations
Can be implemented as a push to, or a pull from, the vipnode pool. It can be implemented as a streaming API (e.g. websocket) or separate request/response (e.g. HTTPS).
Question: Assuming that the target audience for the protocol is mobile clients, it's probably a better idea to do client-initiated polling request/response for the sake of battery life?
For the sake of consistency with the rest Ethereum's RPC, the calls will be JSON-RPC 2.0.
Payloads must be signed and verified with the node key to avoid pools from being able to fake paid activity.
Request/Response Examples:
Warning: These are out of date. See discussion.
vipnode_client:
TODO
vipnode_update:
(From the client)
Request POST https://pool.vipnode.org/api with body:
{
"jsonrpc": "2.0",
"method": "vipnode_peers",
"params": {
"nodeID": "19b5013d2424...0738ac974f6",
"timestamp": "1527609234005",
"signature": "<Signature of subset of payload by private node key>",
"peers": [
{
"nodeID": "1234abcd...dcba4321"
},
{
"nodeID": "1234abcd...dcba4321"
}
]
},
"id": 1
}Response 200 from server with body:
{
"jsonrpc": "2.0",
"result": {
"balance": "xxx"
},
"id": 1
}Questions
- What other metadata do we need from the peers?
- Which subset of the payload should the
signaturesign? Should it include everything except the signature field, using a key-sorted deterministic JSON encoding? - Should
signaturebe a top-level field? This would allow us to only signparamswithout injecting a new key, but would it violate JSON-RPC 2.0 and make the implementation more difficult for some JSONRPC libraries? - Do we need anything else from the vipnode-pool in the response?
vipnode_register:
TODO, some related notes here: #7