| { |
| "$schema": "http://json-schema.org/draft-07/schema#", |
| "title": "DHT Protocol Schema", |
| "type": "object", |
| "oneOf": [ |
| { "$ref": "#/definitions/discovery" }, |
| { "$ref": "#/definitions/peerExchangeRequest" }, |
| { "$ref": "#/definitions/peerExchangeResponse" } |
| ], |
| "definitions": { |
| "interface": { |
| "type": "object", |
| "required": ["addr", "nonce", "pow_hash", "difficulty", "datetime"], |
| "properties": { |
| "addr": { "type": "string", "pattern": "^(tcp|udp)://.+" }, |
| "nonce": { "type": "integer", "minimum": 0 }, |
| "pow_hash": { "type": "string" }, |
| "difficulty": { "type": "integer", "minimum": 1 }, |
| "datetime": { "type": "string", "format": "date-time" }, |
| "type": { |
| "type": "string", |
| "enum": ["localhost", "internet", "yggdrasil", "i2p"], |
| "pattern": "^(lan:[0-9]{1,3}(\\.[0-9]{1,3}){3})$" |
| } |
| } |
| }, |
| "peer": { |
| "type": "object", |
| "required": ["id", "name", "pubkey", "addresses"], |
| "properties": { |
| "id": { "type": "string" }, |
| "name": { "type": "string" }, |
| "pubkey": { "type": "string" }, |
| "addresses": { |
| "type": "array", |
| "items": { "$ref": "#/definitions/interface" } |
| } |
| } |
| }, |
| "discovery": { |
| "type": "object", |
| "required": ["type", "id", "name", "pubkey", "addresses"], |
| "properties": { |
| "type": { "const": "DISCOVERY" }, |
| "id": { "type": "string" }, |
| "name": { "type": "string" }, |
| "pubkey": { "type": "string" }, |
| "addresses": { |
| "type": "array", |
| "items": { "$ref": "#/definitions/interface" } |
| } |
| } |
| }, |
| "peerExchangeRequest": { |
| "type": "object", |
| "required": ["type", "id", "name", "addresses"], |
| "properties": { |
| "type": { "const": "PEER_EXCHANGE_REQUEST" }, |
| "id": { "type": "string" }, |
| "name": { "type": "string" }, |
| "addresses": { |
| "type": "array", |
| "items": { "$ref": "#/definitions/interface" } |
| } |
| } |
| }, |
| "peerExchangeResponse": { |
| "type": "array", |
| "items": { "$ref": "#/definitions/peer" } |
| } |
| } |
| } |
|
|