# Morpheus — Сеть доверия (Web of Trust) ## Основная идея Реле Morpheus принимает события только от публичных ключей, на которые подписаны как минимум **N** существующих участников реле. Используется граф подписок, уже существующий в Nostr (NIP-02 списки контактов) — никаких кастомных NIP, токенов-приглашений или специальных событий поручительства. ## Как это работает 1. Пользователь A публикует список контактов NIP-02, включающий публичный ключ пользователя B 2. Реле подсчитывает, сколько существующих участников подписаны на B 3. Если количество достигает порога (например, 3), реле начинает принимать события от B 4. Если количество подписчиков B падает ниже порога (отписки), реле перестаёт принимать новые события от него ```text Реле получает событие от pubkey X → Подсчитать NIP-02 списки контактов на этом реле, включающие X → Если количество >= N: принять событие → Если количество < N: отклонить с auth-required или closed ``` ## Почему это работает - **Спам умирает естественно** — боты не могут набрать реальные подписки от существующих участников и никогда не достигают порога - **Нет затрат на модерацию** — граф подписок и есть слой модерации; ни одному админу не нужно вручную одобрять или банить пользователей - **Сообщество остаётся целостным** — начальное сообщество русскоязычное, подписки распространяются через реальные социальные связи, поэтому сеть остаётся культурно и лингвистически однородной без явных языковых фильтров - **Нерелевантный шум исчезает** — реле обслуживает только события от множества участников, случайный глобальный трафик Nostr не попадает в ленту - **Нет кастомного протокола** — используются только NIP-01 (события) и NIP-02 (списки контактов), которые поддерживает каждый клиент Nostr - **Децентрализованное доверие** — нет единого привратника; доверие распределено по графу подписок ## Настройка порога | N | Эффект | | --- | --- | | 1 | Минимальный барьер — одна подписка от любого участника даёт доступ. Лёгкий рост, слабая защита от спама. | | 3 | Баланс — требуется небольшой социальный кластер. Хорошо для фазы раннего роста. | | 5+ | Тесное сообщество — труднее попасть, сильная защита от спама. Хорошо для зрелой сети. | Порог может быть динамическим — ниже в период раннего роста, выше по мере взросления сети. Также может различаться по типу событий (например, публикация требует 3 подписок, а ЛС — только 1). ## Граничные случаи - **Проблема курицы и яйца** — первые N пользователей добавляются вручную (начальное множество). Это основатели сообщества. - **Наблюдатели** — пользователи, которые читают, но не публикуют, тоже нуждаются в подписках для взаимодействия. Доступ на чтение может быть открытым. - **Кросс-реле** — пользователи могут подключаться к публичным реле параллельно с реле Morpheus. Барьер WoT применяется только к ленте реле Morpheus. - **Защита от сибилов** — создание фейковых аккаунтов для подписки на себя возможно, но затратно в масштабе (каждому фейку самому нужно N реальных подписчиков). Рекурсия делает сибил-атаки экспоненциально сложнее. - **Потеря подписчиков** — если кто-то отписывается и количество падает ниже N, существующие события остаются на реле, но новые отклоняются до восстановления числа подписчиков. ## Заметки по реализации - Реле поддерживает материализованное представление графа подписок (NIP-02, kind:3 события) - При каждом входящем событии проверяется количество входящих подписок автора относительно порога - Подсчёт обновляется в реальном времени при публикации списков контактов NIP-02 - Начальное множество (вручную разрешённые pubkey) настраивается при запуске реле