2024-02-23 01:00:04 +00:00

116 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

====== KevaChat - чат в блокчейне ======
KevaChat - приватно-ориентированный, устойчивый к цензуре чат с децентрализованной базой данных в блокчейне [[ https://github.com/kevacoin-project/ | Kevacoin]].
Есть возможность читать содержимое других узлов по их namespace ID - своего рода модель [[wpru>Fediverse|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_protocol|Gemini]].
На данный момент, проект находится в разработке, но уже доступен онлайн для тестирования.\\
Реализованы все базовые функции веб-версии: просмотр комнат, мультимедиа (в зависимости от поддержки браузером) а также добавление новых публикаций.
===== Модель =====
Для публикации сообщений используется общий кошелек, который могут пополнять пользователи или администрация узла по мере его расходования на публикации.\\
В виду того, что майнинг KevaCoin осуществляется посредством алгоритма randomx, при текущем хешрейте, публикацию сообщений можно условно считать бесплатной.
На случай удорожания монеты (если это будет иметь место в перспективе), владельцы узлов могут предоставлять альтернативную модель для публикации сообщений:\\
например, выписывать за каждое сообщение в пуле уникальный адрес для оплаты отправителем, получая от каждой транзакции комиссию и монитизировать ресурс.
===== Хранение данных =====
Не смотря на то, что протокол KevaCoin предусматривает [[wpru>CRUD|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, с помощью сторонних експлореров, например [[ 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 ]]
===== 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
===== Узлы =====
* http://[201:23b4:991a:634d:8359:4521:5576:15b7]/kevachat/ | %%gemini://[301:23b4:991a:634d::1965]%%
* http://kevachat.ygg | %%gemini://kevachat.ygg%%
===== Каналы =====
* NfqYRoWFZAydVyS4GjDa6o31CDSpGXVyXE - канал новостей проекта KevaChat
* NhyiMaHCcxVKNFuirFcovEyrMZuiUZmrsT - темы, связанные с Yggdrasil
* NftxqjcCXrZ6Y537sYQoNA7JzMpXtFqGRi - администрирование Linux
* NRzhB7LF4Fv5RQUtfhRtnUpTWzArSQ55R2 - канал поисковой площадки [[ yggdrasil:sites_and_services:search_services:yo | Yo! ]]
* NWVP1GPp59qEWYGVWWVxGR2JScHHbicWTy - канал внутрисетевого трекера [[ yggdrasil:bittorrent:yggtracker | YGGtracker ]]
* Nj3UDaQ89rF5W5dGUbMSgb1C84cHW2562j - новости и поддержка пользователей игрового сервера [[yggdrasil:games:chesslablab_game_server| ChesslaBlab ]]
===== Ссылки =====
Исходный код на GitHub:
* https://github.com/kevachat/webapp - веб-приложение
* https://github.com/kevachat/geminiapp - приложение для [[:gemini_protocol|Gemini Protocol]] (в разработке)
~~DISCUSSION~~