{ "$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" } } } }