Каталоги
На Reddit имя вроде r/opensource может принадлежать только одному сообществу, и тот, кто его контролирует, его и сохраняет. Если модераторы принимают решения, которые не нравятся пользователям, единственная альтернатива — создать r/opensource2. Новое сообщество начинает с нуля подписчиков, хотя большинство людей, подписавшихся на r/opensource, интересовались открытым исходным кодом, а не этой конкретной командой модераторов.
Приложения Bitsocial решают эту проблему с помощью каталогов. Каталог — это тематическое имя, например opensource, за которое соревнуются сообщества. Короткий маршрут для этого имени открывает сообщество, которое сейчас занимает первое место, поэтому более удачное сообщество может забрать имя без чьего-либо разрешения.
Как это работает
- Код каталога — это тематическое имя. Seedit использует маршруты вроде
/s/funny. 5chan использует пути в стиле имиджбордов, например/g/. - Сообщества соревнуются как кандидаты. У каждого каталога есть список сообществ-кандидатов, и у каждого из них свой точный адрес, например
funny-posting.bso. - Маршрут достаётся кандидату с наивысшим рейтингом. При открытии
/s/funnyпоказывается текущий победитель. - Проигрыш ничего не удаляет. Сообщество, которое не стало победителем, сохраняет свой адрес, посты и подписчиков, и любой по-прежнему может открыть его напрямую.
Имя — это входная дверь, а не идентичность
Код каталога — лишь маршрут для обнаружения. Всё долговременное указывает на точное сообщество:
- Подписка со страницы
/s/funnyоформляется на точный адрес текущего победителя. Сам код каталога никогда не сохраняется как подписка. - Ссылки на посты всегда используют точный адрес сообщества, поэтому старая ссылка не может начать вести на другое сообщество после смены победителя.
- Когда победитель меняется, Seedit не трогает существующие подписки и спрашивает каждого подписчика, перейти ли к новому победителю, оставить оба сообщества или сохранить текущее. Автоматическое переключение — это настройка для каждого каталога, которую нужно включить вручную, а при автоматическом переключении появляется уведомление с возможностью отмены.
Таким образом, конкурирующее сообщество не отбирает ничьи подписки. Оно выигрывает имя: новые посетители попадают к нему, а существующие подписчики получают выбор в один клик. Те, кому больше нравилось старое сообщество, остаются с ним.
Почему не по принципу «кто первый занял»
- Никакого захвата имён впрок. Владеть хорошим именем недостаточно. Сообщество должно оставаться лучшим кандидатом на него.
- Имена не раздаёт администратор. Распределение администратором воссоздало бы центральное право вето, которое Bitsocial призван устранить.
- У конкурентов остаётся путь к аудитории. Соперничающее сообщество претендует на то же имя, а не начинает заново под худшим.
- Клиенты сходятся в выборе победителя. Seedit ранжирует кандидатов детерминированно, поэтому каждый клиент, читающий один и тот же финализированный снимок каталога, показывает одного и того же победителя. Seedit не подставляет другого кандидата из-за того, что победитель временно недоступен через соединение одного пользователя.
Как сейчас выбираются победители
Кандидаты публикуются в виде JSON-файлов в репозитории bitsocialnet/lists, по одному файлу на каталог, а сообщество присоединяется к каталогу через пул-реквест к его файлу. Это временный стартовый этап. Цель в том, чтобы голосование заменило пул-реквесты как способ определения победителей.
- Seedit ранжирует кандидатов каталога по баллам, затем по времени добавления, затем по адресу. У каждого файла каталога есть номер ревизии, и любое изменение кандидатов или победителя публикует новую ревизию.
- 5chan проводит по одному голосованию на каждый каталог с помощью
@bitsocial/pubsub-voting. Клиенты обмениваются подписанными бюллетенями через libp2p gossipsub и сами подсчитывают итоги, без сервера, считающего голоса. Для голосования нужно иметь 5chan Pass — непередаваемый токен, и у каждого владельца один голос. Голос за доску, которой ещё нет в списке, выдвигает её в кандидаты. Сейчас голосования проходят в тестовой сети Base Sepolia, и пока они не перейдут из тестовой сети, итоги отображаются, но не меняют порядок списка.
Протокол или приложение?
Каталоги не входят в PKC — одноранговый уровень, который хранит и передаёт сообщества. Это соглашение, которое клиенты применяют поверх него наряду со списками по умолчанию и поиском; см. Обнаружение контента. Клиент может читать те же файлы каталогов, публиковать собственные или вовсе обходиться без каталогов, а пользователи по-прежнему могут открыть любое сообщество по его адресу.