dht_protocol

Источник: dht_protocol.md

DHT Protocol Specification (Draft)

1. Общие положения

  • DHT-протокол предназначен для обмена информацией о пирах между агентами.
  • Используется DID (Decentralized Identifier) как уникальный идентификатор агента.
  • Для проверки подлинности применяется криптоподпись (публичный/приватный ключ).
  • Для защиты от спама/флуда используется Proof-of-Work (PoW).
  • Каждый агент может иметь несколько сетевых интерфейсов (адресов).
  • У агента может быть только одна устойчивая пара DID + pubkey.

2. Интерфейсы

Формат интерфейса:

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

Используется для объявления себя в локальной сети.

{
  "type": "DISCOVERY",
  "id": "did:example:123",
  "name": "Agent_X",
  "pubkey": "base58...",
  "addresses": [ { ... }, { ... } ]
}

4.2 PEER_EXCHANGE_REQUEST / RESPONSE

Запрос и обмен известными пирами.

{
  "type": "PEER_EXCHANGE_REQUEST",
  "id": "did:example:123",
  "name": "Agent_X",
  "addresses": [ { ... } ]
}

Ответ:

[
  {
    "id": "did:example:456",
    "name": "Agent_Y",
    "pubkey": "base58...",
    "addresses": [ { ... } ]
  }
]

5. Обработка ошибок и нестыковок

  • Разные pubkey для одного DID → принимается первый, остальные игнорируются.
  • Адрес подписан чужим ключом → запись отклоняется.
  • Адрес без PoW / с некорректным PoW → запись отклоняется.
  • Несколько интерфейсов → сохраняются все; новый с более свежей датой заменяет старый.

6. Безопасность

  • Для всех сообщений требуется подпись отправителя (в будущем: обязательная проверка).
  • Сообщения без подписи или с невалидным PoW могут игнорироваться.
  • В перспективе можно добавить шифрование трафика (например, на уровне TCP/TLS или QUIC).

Комментарии

Популярные сообщения из этого блога

HMP-agent-REPL-cycle

index

HMP-Agent_Emotions