Содержание

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

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

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

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

webapp

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

Обновления:

geminiapp

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

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

npsapp

CLI версия сервера для протокола NPS, на базе библиотеки многопоточных сокетов - Ratchet.

В рамках данной реализации, публикация сообщений бесплатна, в качестве защиты от спама используется ASCII каптча.
Есть возможность выбора любой комнаты из указанных администратором по blacklist или whitelist.

Как следует из протокола, сервер ориентирован на приём и отправку сообщений.
Если требуется читать ресурсы посредством командной строки, удобно подключиться к инстансу Gemini, используя например клиент Amfora и аналогично - Lynx или Browsh - для HTTP.

Клиент

Отправлять сообщения можно CLI утилитами telnet или ncat, последний лучше поддерживает кириллицу.
Для обращения к адресам Yggdrasil/IPv6 посредством netcat, возможно потребуется доустановить из репозиториев пакет netcat-openbsd.

Пример:

nc 201:23b4:991a:634d:8359:4521:5576:15b7 1915

Интерфейс:

kevachat/npsapp

Модель

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

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

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

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

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

Протокол

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

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

Для базы пользователей зарезервирован 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, используются флаги:

Пиры

Узлы

Каналы

Ссылки

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