| | --- |
| | title: DHT Protocol Specification (Draft) |
| | description: '## 1. Общие положения * DHT-протокол предназначен для обмена информацией |
| | о пирах между агентами. * Используется **DID** (Decentralized Identifier) как уникальный |
| | идентификатор агента. * Для проверки ...' |
| | type: Article |
| | tags: |
| | - Agent |
| | - JSON |
| | --- |
| | |
| | # DHT Protocol Specification (Draft) |
| |
|
| | ## 1. Общие положения |
| |
|
| | * DHT-протокол предназначен для обмена информацией о пирах между агентами. |
| | * Используется **DID** (Decentralized Identifier) как уникальный идентификатор агента. |
| | * Для проверки подлинности применяется криптоподпись (публичный/приватный ключ). |
| | * Для защиты от спама/флуда используется **Proof-of-Work (PoW)**. |
| | * Каждый агент может иметь несколько сетевых интерфейсов (адресов). |
| | * У агента может быть только **одна устойчивая пара DID + pubkey**. |
| |
|
| | --- |
| |
|
| | ## 2. Интерфейсы |
| |
|
| | Формат интерфейса: |
| |
|
| | ```json |
| | { |
| | "addr": "tcp://1.2.3.4:4000", |
| | "nonce": 123456, |
| | "pow_hash": "abcd1234...", |
| | "difficulty": 22, |
| | "datetime": "2025-09-14T21:00:00Z", |
| | "type": "internet" |
| | } |
| | ``` |
| |
|
| | ### Поддерживаемые протоколы |
| |
|
| | * `tcp://` |
| | * `udp://` |
| |
|
| | ### Поле `type` (опционально) |
| |
|
| | * `localhost` — адреса локальной машины. |
| | * `lan:[маска_подсети]` — локальная сеть, пример: `lan:192.168.10.0`. |
| | (Один агент может иметь несколько сетевых интерфейсов и, соответственно, несколько LAN-сегментов.) |
| | * `internet` — обычное TCP/UDP-подключение через глобальную сеть. |
| | * `yggdrasil` — узел доступен через Yggdrasil overlay. |
| | * `i2p` — узел доступен через I2P. |
| |
|
| | ### Правила |
| |
|
| | * Если `port = 0` → интерфейс считается **отключённым**. |
| | * Корректный интерфейс с более новой датой заменяет аналогичный старый (после проверки PoW). |
| | * При обмене рекомендуется **не передавать локальные интерфейсы** в Интернет (исключение: Yggdrasil и I2P). |
| |
|
| | --- |
| |
|
| | ## 3. Proof-of-Work (PoW) |
| |
|
| | * Каждый интерфейс сопровождается PoW. |
| | * Сложность PoW должна быть выбрана так, чтобы генерация занимала **несколько минут** (операция нечастая). |
| | * Поля: |
| |
|
| | * `nonce` — число, подобранное агентом. |
| | * `pow_hash` — хэш значения (`addr + nonce`). |
| | * `difficulty` — число ведущих нулей (или иное условие). |
| |
|
| | --- |
| |
|
| | ## 4. Сообщения |
| |
|
| | ### 4.1 DISCOVERY |
| |
|
| | Используется для объявления себя в локальной сети. |
| |
|
| | ```json |
| | { |
| | "type": "DISCOVERY", |
| | "id": "did:example:123", |
| | "name": "Agent_X", |
| | "pubkey": "base58...", |
| | "addresses": [ { ... }, { ... } ] |
| | } |
| | ``` |
| |
|
| | ### 4.2 PEER\_EXCHANGE\_REQUEST / RESPONSE |
| |
|
| | Запрос и обмен известными пирами. |
| |
|
| | ```json |
| | { |
| | "type": "PEER_EXCHANGE_REQUEST", |
| | "id": "did:example:123", |
| | "name": "Agent_X", |
| | "addresses": [ { ... } ] |
| | } |
| | ``` |
| |
|
| | Ответ: |
| |
|
| | ```json |
| | [ |
| | { |
| | "id": "did:example:456", |
| | "name": "Agent_Y", |
| | "pubkey": "base58...", |
| | "addresses": [ { ... } ] |
| | } |
| | ] |
| | ``` |
| |
|
| | --- |
| |
|
| | ## 5. Обработка ошибок и нестыковок |
| |
|
| | * **Разные pubkey для одного DID** → принимается **первый**, остальные игнорируются. |
| | * **Адрес подписан чужим ключом** → запись отклоняется. |
| | * **Адрес без PoW / с некорректным PoW** → запись отклоняется. |
| | * **Несколько интерфейсов** → сохраняются все; новый с более свежей датой заменяет старый. |
| |
|
| | --- |
| |
|
| | ## 6. Безопасность |
| |
|
| | * Для всех сообщений требуется **подпись отправителя** (в будущем: обязательная проверка). |
| | * Сообщения без подписи или с невалидным PoW могут игнорироваться. |
| | * В перспективе можно добавить шифрование трафика (например, на уровне TCP/TLS или QUIC). |
| |
|
| | --- |
| | > ⚡ [AI friendly version docs (structured_md)](../index.md) |
| |
|
| |
|
| | ```json |
| | { |
| | "@context": "https://schema.org", |
| | "@type": "Article", |
| | "name": "DHT Protocol Specification (Draft)", |
| | "description": "# DHT Protocol Specification (Draft) ## 1. Общие положения * DHT-протокол предназначен для обмена ..." |
| | } |
| | ``` |
| |
|