Initial commit

This commit is contained in:
Maxim Kalistratov
2026-02-12 21:23:44 +04:00
commit a5744ea60d
18 changed files with 1769 additions and 0 deletions

85
docs/ru/web-of-trust.md Normal file
View File

@@ -0,0 +1,85 @@
# 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) настраивается при
запуске реле