File size: 2,206 Bytes
163043c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | {
"$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" }
}
}
}
|