>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Swift

Jak działa BitChat i dlaczego komunikatory oparte na siatce Bluetooth znów zyskują popularność

BitChat Icon

Gdy zasięg sieci komórkowej całkowicie znika na festiwalu muzycznym lub w górach, znajome aplikacje stają się bezużytecznymi ikonami. Sygnał nie dociera nigdzie, a maszty są przeciążone. W takich sytuacjach przydają się rozwiązania peer-to-peer, które mogą przesyłać dane bezpośrednio z jednego smartfona na drugi.

Projekt BitChat oferuje interesujące podejście do tego problemu. Deweloperzy połączyli offline'ową sieć lokalną opartą na Bluetooth LE z globalnym protokołem Nostr. Efektem jest hybrydowy komunikator w stylu klasycznego IRC, działający bez kont i bez centralnych serwerów.

Jak działa transmisja wiadomości

BitChat opiera się na dwupoziomowej architekturze. Aplikacja automatycznie dostosowuje transport do aktualnych warunków łączności.

Pierwszy poziom: siatka Bluetooth LE. Jeśli odbiorca znajduje się w pobliżu, wiadomość trafia bezpośrednio. Gdy odbiorca jest poza zasięgiem Bluetooth, pakiet przemieszcza się łańcuchem przez smartfony innych użytkowników. Architektura obsługuje do 7 takich pośrednich skoków. Do tego nie jest potrzebny internet. Zabezpieczenia zapewnia protokół Noise, który zapewnia szyfrowanie pakietów typu end-to-end na poziomie lokalnym.

Drugi poziom: protokół Nostr. Jeśli kanał Bluetooth jest niedostępny, ale istnieje dostęp do sieci, BitChat wysyła dane przez publiczne relay'e Nostr.

Pokoje publiczne są organizowane za pomocą geohash'y. Poziom precyzji zależy od długości ciągu hash współrzędnych:

  • block (7 znaków): czat w obrębie kwartału miasta
  • neighborhood (6 znaków): poziom dzielnicy
  • city (5 znaków): czat w obrębie całego miasta
  • region (2 znaki): cały kraj

Przy wysyłaniu wiadomości prywatnej komunikator najpierw szuka bezpośredniego połączenia Bluetooth. Jeśli w pobliżu nie ma urządzeń, przełącza się na Nostr i pakuje tekst za pomocą algorytmu NIP-17. Gdy nie ma ani internetu, ani sąsiadów Bluetooth, wiadomość jest kolejkowana do momentu pojawienia się dowolnego dostępnego kanału.

Szczegóły implementacji i interfejs

Wizualnie BitChat przypomina czaty tekstowe z końca lat dziewięćdziesiątych. Obsługuje znajome polecenia jak /slap, /msg lub /who. Nie ma żadnego procesu rejestracji. Przy pierwszym uruchomieniu aplikacja generuje tymczasowe klucze kryptograficzne bez żądania numeru telefonu czy adresu e-mail.

Kilka interesujących rozwiązań technicznych w projekcie:

  • Awaryjne usunięcie. Potrójne stuknięcie w ekran trwale usuwa dane lokalne i klucze kryptograficzne.
  • Kompresja ruchu. Dane są kompresowane przez LZ4 przed wysłaniem, co jest kluczowe dla niskiej przepustowości Bluetooth LE.
  • Optymalizacja zużycia energii. W trybie offline czat dynamicznie zmienia interwały skanowania, oszczędzając baterię.
  • Open source. Repozytorium jest udostępnione na licencji Unlicense i może być swobodnie forkowane lub wykorzystywane w produktach komercyjnych.

Jak uruchomić projekt

Kod źródłowy jest napisany w Swift dla iOS i macOS.

Najszybszy sposób na uruchomienie wersji desktopowej to użycie narzędzia just:

brew install just
just run

Ta komenda skompiluje aplikację i uruchomi ją na Twoim Macu. Aby posprzątać wygenerowane pliki po testowaniu, wywołaj just clean.

Aby zbudować projekt dla iOS w Xcode, musisz wykonać standardowe przygotowanie konfiguracji:

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

Po tym wystarczy otworzyć bitchat.xcodeproj, ustawić swoje Developer Team ID w pliku Local.xcconfig i zaktualizować nazwę grupy w uprawnieniach.

Dlaczego warto studiować to repozytorium

Nikt prawdopodobnie nie będzie codziennie używać BitChat jako głównego komunikatora. Jednak projekt jest niezwykle interesujący z inżynierskiego punktu widzenia.

W kodzie można znaleźć czystą implementację niestandardowego protokołu binarnego przez CoreBluetooth, obsługę geohash'y oraz integrację z relay'ami Nostr. Jednocześnie aplikacja jest już gotowa do użycia i opublikowana w App Store, więc można mieć ją na swoim urządzeniu jako zapasową opcję komunikacji na wędrówki lub duże koncerty.

Powiązane projekty