Как устроен BitChat и почему мессенджеры на Bluetooth mesh снова в тренде

26 Jul, 2026
28,633
🔱 4,264
👥 273

BitChat Icon

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

Проект BitChat предлагает интересный подход к этой проблеме. Разработчики объединили оффлайновую локальную сеть на Bluetooth LE и глобальный протокол Nostr. Получился гибридный мессенджер в стиле классического IRC, работающий без аккаунтов и без центральных серверов.

Как устроена передача сообщений

В базе BitChat лежит двойная архитектура. Приложение автоматически подстраивает транспорт под текущие условия связи.

Первый уровень: Bluetooth LE Mesh. Если адресат находится рядом, сообщение уходит напрямую. Когда получатель находится дальше зоны действия Bluetooth, пакет передвигается по цепочке через смартфоны других пользователей. Архитектура поддерживает до 7 таких промежуточных шагов (hops). Интернета для этого не требуется. За безопасность ответит протокол Noise, который отвечает за сквозное шифрование пакетов на локальном уровне.

Второй уровень: протокол Nostr. Если прямой Bluetooth-канал недоступен, но есть выход в сеть, BitChat отправляет данные через публичные ретрансляторы Nostr.

Для организации публичных комнат используются геошарды (geohash). Уровень точности зависит от длины строки координатного хеша:

  • block (7 символов): чат в пределах городского квартала
  • neighborhood (6 символов): уровень района
  • city (5 символов): общегородской чат
  • region (2 символа): целая страна

При отправке личного сообщения мессенджер сначала ищет прямое Bluetooth-соединение. Если соседних устройств нет, он переключается на Nostr и запаковывает текст с помощью алгоритма NIP-17. Когда нет ни интернета, ни соседей по Bluetooth, сообщение встает в очередь до появления любого доступного канала.

Особенности реализации и интерфейс

Внешне BitChat напоминает текстовые чаты конца девяностых. Здесь поддерживаются привычные команды вроде /slap, /msg или /who. Процесс регистрации полностью отсутствует. При первом запуске приложение генерирует временные криптографические ключи, не запрашивая ни номер телефона, ни email.

Несколько любопытных технических решений в проекте:

  • Экстренное удаление. Тройной тап по экрану безвозвратно очищает локальное хранилище и криптографические ключи.
  • Сжатие трафика. Данные перед отправкой сжимаются через LZ4, что критично для низкой пропускной способности Bluetooth LE.
  • Оптимизация энергопотребления. В оффлайн-режиме чат динамически меняет интервалы сканирования эфира, сохраняя заряд аккумулятора.
  • Открытый код. Репозиторий выложен под лицензией Unlicense, его можно свободно разбирать на форки или использовать в коммерческих продуктах.

Как запустить проект

Исходный код написан на Swift для iOS и macOS.

Быстрее всего запустить десктопную версию через утилиту just:

brew install just
just run

Команда скомпилирует приложение и запустит его на вашем Mac. Очистить сгенерированные файлы после тестов можно вызовом just clean.

Для сборки под iOS в Xcode придется выполнить стандартную процедуру подготовки конфигурации:

cd bitchat
cp Configs/Local.xcconfig.example Configs/Local.xcconfig

После этого остается открыть bitchat.xcodeproj, прописать ваш Developer Team ID в файле Local.xcconfig и обновить имя группы в entitlements.

Зачем изучать этот репозиторий

Применять BitChat как основной мессенджер на каждый день вряд ли кто-то станет. Однако проект представляет огромный интерес с инженерной точки зрения.

В коде можно посмотреть опрятную реализацию кастомного бинарного протокола поверх CoreBluetooth, работу с геохешами и интеграцию с Nostr-реле. При этом приложение уже готово к использованию и опубликовано в App Store, так что его вполне можно держать на устройстве как запасной вариант связи для походов или крупных концертов.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.