====== 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]]. На данный момент, проект находится в разработке, но уже доступен онлайн для тестирования.\\ Реализованы все базовые функции веб-версии: просмотр комнат, мультимедиа (в зависимости от поддержки браузером) а также добавление новых публикаций. ==== npsapp ==== CLI версия сервера для протокола [[:nex_protocol#nps|NPS]], на базе библиотеки многопоточных сокетов - Ratchet. В рамках данной реализации, публикация сообщений бесплатна, в качестве защиты от спама используется ASCII каптча.\\ Есть возможность выбора любой комнаты из указанных администратором по blacklist или whitelist. Как следует из протокола, сервер ориентирован на приём и отправку сообщений.\\ Если требуется читать ресурсы посредством командной строки, удобно подключиться к инстансу Gemini, используя например клиент [[https://github.com/makew0rld/amfora|Amfora]] и аналогично - [[https://ru.wikipedia.org/wiki/Lynx_(браузер)|Lynx]] или [[https://github.com/browsh-org/browsh|Browsh]] - для HTTP. **Клиент** Отправлять сообщения можно CLI утилитами %%telnet%% или %%ncat%%, последний лучше поддерживает кириллицу.\\ Для обращения к адресам Yggdrasil/IPv6 посредством %%netcat%%, возможно потребуется доустановить из репозиториев пакет %%netcat-openbsd%%. Пример: nc 201:23b4:991a:634d:8359:4521:5576:15b7 1915 Интерфейс: {{:social_media:kevachat-npsapp.png?400|kevachat/npsapp}} ===== Модель ===== Зависит от сервера. Например, для публикации сообщений может взыматься плата за пост или использоваться общий кошелек, который пополняют пользователи или администрация по мере его расходования на публикации.\\ В виду того, что майнинг 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]]. Установить последнюю версию можно одной командой: composer create-project kevachat/webapp KevaChat Затем выполнить базовую настройку среды окружения по инструкции [[ 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 ===== Узлы ===== * YGGverse * http://[201:23b4:991a:634d:8359:4521:5576:15b7]/kevachat/ | %%gemini://[301:23b4:991a:634d::1965]%% * http://kevachat.ygg | %%gemini://kevachat.ygg%% * %%[201:23b4:991a:634d:8359:4521:5576:15b7]:1915%% - [[:nex_protocol#nps|NPS]] сервер ===== Каналы ===== * 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]] (в разработке) * https://github.com/kevachat/npsapp - приложение для протоколов [[https://nightfall.city/nps/info/specification.txt|NPS]] / [[:nex_protocol|NEX]] ~~DISCUSSION~~