KevaChat - приватно-ориентированный, устойчивый к цензуре чат с децентрализованной базой данных в блокчейне [[ https://github.com/kevacoin-project/ | Kevacoin]].
Есть возможность читать содержимое других узлов по их namespace ID - своего рода модель [[wpru>Fediverse|Fediverse]].\\
Также отдельные комнаты можно использовать для интеграции на сторонние ресурсы в качестве чат-окна или фида новостей проекта в режиме read-only ([[http://[201:23b4:991a:634d:8359:4521:5576:15b7]/chesslablab/|пример]])
* 1.7 - поддержка мультимедиа контента в блокчейне - фото, видео и другие бинарные данные.\\
* 1.8 - регистрация пользователей с перманентным реестром логин/bcrypt хеш пароля в блокчейн (namespace _KEVACHAT_USERS_ текущего узла).\\
* 1.9 - настройки комиссий за публикации, создание новых комнат и регистрацию аккаунтов. Используется в основном в качестве анти-спама, также может служить в качестве монетизации узла.
Для публикации сообщений используется общий кошелек, который могут пополнять пользователи или администрация узла по мере его расходования на публикации.\\
В виду того, что майнинг KevaCoin осуществляется посредством алгоритма randomx, при текущем хешрейте, публикацию сообщений можно условно считать бесплатной.
На случай удорожания монеты (если это будет иметь место в перспективе), владельцы узлов могут предоставлять альтернативную модель для публикации сообщений:\\
например, выписывать за каждое сообщение в пуле уникальный адрес для оплаты отправителем, получая от каждой транзакции комиссию и монитизировать ресурс.
===== Хранение данных =====
Не смотря на то, что протокол KevaCoin предусматривает [[wpru>CRUD|CRUD]] операции, как показал опыт, такие команды как _KEVA_DELETE_ лишь скрывают сообщение в кошельке, при этом физические данные остаются в блоках перманентно.
Если по каким-то причинам узел скрывает или удаляет сообщения локально, прочитать их можно с любого внешнего узла KevaChat, эксплорера блоков или кошелька KevaCoin.
KevaChat реализует стандартный протокол KevaCoin и легко читаем в исходном виде с помощью сторонних приложений.
Тем не менее, для построения цепочки сообщений и социальных функций, используются следующий подход:
* приложение читает все namespace в аккаунте, которые принято считать чат комнатами;
* данные об авторе сообщения сохраняются в значение key, в формате unixtime@username - таким образом, можно открыть например [[ http://kevachat.ygg/room/NgKBKkBAJMtzsuit85TpTpo5Xj6UQUg1wr | официальный блог KevaCoin]], но сообщения в нем прочитаны не будут, поскольку не соответствуют формату чат-приложения.
* текст сообщений сохраняется в значениях value и поддерживает следующие макросы:
* @txid в начале сообщения - указывает ссылку на родительский пост, используется в "ответах" (reply) - Web UI скрывает такие ссылки и добавляет вложенность;
* namespace hash - в системе KevaCoin всегда начинается с символа N, такие вхождения заменяются кликабельной ссылкой;
* url - автоматически заменяется на кликабельную ссылку;
* #теги - на данный момент поиск по тегам не реализован, но уже используется в сообщениях.
Для базы пользователей используется namespace _KEVACHAT_USERS_, с парой ключ (логин) и значение (хеш пароля bcrypt).\\
Подлинность авторизации обеспечивается подписью узла, на котором осуществлена регистрация.
В остальном, протокол стремится минимизировать объем сохраняемых данных, а также читаемость в исходном виде.\\
Любая разметка удаляется приложением, в том числе с целью предотвращения XSS и запросов к внешним ресурсам.
Также не используются обертки JSON и прочие программные слои для расширения возможностей базы данных KevaCoin.
===== Публикации =====
Публиковать сообщения можно анонимно (в блокчейне не сохраняется какой либо инфорации об авторе, кроме timestamp и сообщения)
или подписывать зарегистрированным парой логин/пароль - юзернеймом.
Читать сообщения можно из других узлов KevaChat, с помощью сторонних експлореров, например [[ https://github.com/kvazar-network | KVAZAR ]], [[ https://github.com/kawww/galaxy/releases | galaxy ]] и т.д. или непосредственно в [[ https://github.com/kevacoin-project/kevacoin/releases | кошельке Kevacoin]].
===== Установка =====
В веб-приложении используется фреймворк Symfony 7 / PHP 8.2.
Для работы узла требуется подключение к локальному или удаленному серверу Kevacoin и [[wpru>Memcached|Memcached]].
Установить последнюю версию можно одной командой:
<code>
composer create-project kevachat/webapp KevaChat
</code>
Затем выполнить базовую настройку среды окружения по инструкции [[ https://github.com/kevachat/webapp#setup | README.md ]]