KevaChat - чат в блокчейне

KevaChat - приватно-ориентированный, устойчивый к цензуре чат с децентрализованной базой данных в блокчейне Kevacoin.

Есть возможность читать содержимое других узлов по их namespace ID - своего рода модель Fediverse.

Функциональность

webapp

Имеется поддержка базовых социальных функций чата - комнаты, аватарки, mentions, подписки RSS.

Обновления:

  • 1.7 - поддержка мультимедиа контента в блокчейне - фото, видео и другие бинарные данные.
  • 1.8 - регистрация пользователей с перманентным реестром логин/bcrypt хеш пароля в блокчейн (namespace _KEVACHAT_USERS_ текущего узла).
  • 1.9 - настройки комиссий за публикации, создание новых комнат и регистрацию аккаунтов. Используется в основном в качестве анти-спама, также может служить в качестве монетизации узла.
  • 1.10 - введена система внутренней экономики: зарегистрированные пользователи теперь имеют собственный счёт, баланс которого могут расходовать на публикации а также получать на него донаты.
  • 1.11 - обновление протокола: в значениях убраны знаки @ для построения дерева вложенности (для идентификации используется только цитируемый txid в начале цитирующей строки)
  • 1.12 - убрана спецификация ключей: приложение теперь не привязано к протоколу и может читать любой внешний namespace KevaCoin в формате фида

geminiapp

Появился экспериментальный клиент/сервер для пользователей протокола Gemini.

На данный момент, проект находится в разработке, но уже доступен онлайн для тестирования.
Реализованы все базовые функции веб-версии: просмотр комнат, мультимедиа (в зависимости от поддержки браузером) а также добавление новых публикаций.

Модель

Для публикации сообщений используется общий кошелек, который могут пополнять пользователи или администрация узла по мере его расходования на публикации.
В виду того, что майнинг KevaCoin осуществляется посредством алгоритма randomx, при текущем хешрейте, публикацию сообщений можно условно считать бесплатной.

На случай удорожания монеты (если это будет иметь место в перспективе), владельцы узлов могут предоставлять альтернативную модель для публикации сообщений:
например, выписывать за каждое сообщение в пуле уникальный адрес для оплаты отправителем, получая от каждой транзакции комиссию и монитизировать ресурс.

Хранение данных

Не смотря на то, что протокол KevaCoin предусматривает CRUD операции, как показал опыт, такие команды как _KEVA_DELETE_ лишь скрывают сообщение в кошельке, при этом физические данные остаются в блоках перманентно. Если по каким-то причинам узел скрывает или удаляет сообщения локально, прочитать их можно с любого внешнего узла KevaChat, эксплорера блоков или кошелька KevaCoin.

Протокол

KevaChat реализует стандартный протокол KevaCoin и легко читаем в исходном виде с помощью сторонних приложений.

Тем не менее, для построения цепочки сообщений и социальных функций, используются следующий подход:

  • namespace - чат комнаты;
  • key - главное и общее с KevaСoin требование для ключа - быть уникальным для каждой записи в namespace. Приложения KevaChat обычно поддерживают постфикс @username;
  • value используется для хранения текста сообщений и поддерживает следующие макросы:
    • txid в начале сообщения - указывает ссылку на родительский пост, используется в «ответах» (reply) - например, webapp скрывает такие ссылки и добавляет вложенность, в то время как geminiapp - добавляет цитату;
    • namespace hash - в системе KevaCoin всегда начинается с символа N, такие вхождения заменяются кликабельной ссылкой;
    • url - автоматически заменяется на кликабельную ссылку;
    • #теги - на данный момент поиск по тегам не реализован, но уже используется в сообщениях.

Для базы пользователей зарезервирован namespace _KEVACHAT_USERS_, с парой ключ (логин) и значение (хеш пароля bcrypt).
Подлинность авторизации обеспечивается подписью узла, на котором осуществлена регистрация.

В остальном, протокол стремится минимизировать объем сохраняемых данных, а также читаемость в исходном виде.
Любая разметка обычно фильтруется клиентским приложением, в том числе с целью предотвращения XSS и запросов к внешним ресурсам.

Также не используются обертки JSON и прочие программные слои, затрудняющие чтение исходной базы данных.

Публикации

Публиковать сообщения можно анонимно (в блокчейне не сохраняется какой либо инфорации об авторе, кроме timestamp и сообщения) или подписывать зарегистрированным парой логин/пароль - юзернеймом.

Читать сообщения можно из других узлов KevaChat, с помощью сторонних експлореров, например KVAZAR , galaxy и т.д. или непосредственно в кошельке Kevacoin.

Установка

В веб-приложении используется фреймворк Symfony 7 / PHP 8.2.

Для работы узла требуется подключение к локальному или удаленному серверу Kevacoin и Memcached.

Установить последнюю версию можно одной командой:

composer create-project kevachat/webapp KevaChat

Затем выполнить базовую настройку среды окружения по инструкции README.md

KevaCoin

Для подключения кошелька KevaCoin в сети Yggdrasil, используются флаги:

  • -externalip=xxx:xxx:xxx - внешний IP подключаемого узла (без квадратных скобок) если открыт соответствующий порт, посредством данного адреса узел сможет обмениваться данными с другими пирами
  • -port=9338 - порт, по умолчанию 9338
  • -onlynet=ipv6 - отключить IPv4, если не используется
  • -bind=[xxx:xxx:xxx]:9338 - запуск на указанном интерфейсе, если указан 0200::/7 для работы узла необходим минимум один узел Yggdrasil
  • -connect=[xxx:xxx:xxx]:9338 - подключение непосредственно к указанному пиру, DNS поиск других узлов в таком случае не используется

Пиры

  • [201:23b4:991a:634d:8359:4521:5576:15b7]:9338

Узлы

Каналы

  • NfqYRoWFZAydVyS4GjDa6o31CDSpGXVyXE - канал новостей проекта KevaChat
  • NhyiMaHCcxVKNFuirFcovEyrMZuiUZmrsT - темы, связанные с Yggdrasil
  • NftxqjcCXrZ6Y537sYQoNA7JzMpXtFqGRi - администрирование Linux
  • NRzhB7LF4Fv5RQUtfhRtnUpTWzArSQ55R2 - канал поисковой площадки Yo!
  • NWVP1GPp59qEWYGVWWVxGR2JScHHbicWTy - канал внутрисетевого трекера YGGtracker
  • Nj3UDaQ89rF5W5dGUbMSgb1C84cHW2562j - новости и поддержка пользователей игрового сервера ChesslaBlab

Ссылки

Исходный код на GitHub:

Только авторизованные участники могут оставлять комментарии.
social_media/kevachat.txt · Последнее изменение: 2024/02/22 07:16 — d4708
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki