86 lines
6.3 KiB
Markdown
86 lines
6.3 KiB
Markdown
# 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) настраивается при
|
||
запуске реле
|