- Bitchat là ứng dụng nhắn tin P2P phi tập trung cho iOS và macOS, kết hợp mạng mesh Bluetooth với Nostr dựa trên Internet, hoạt động không cần tài khoản, số điện thoại hay máy chủ trung tâm
- Khi ngoại tuyến, ứng dụng hỗ trợ chuyển tiếp tối đa 7 hop qua Bluetooth LE; khi có kết nối Internet, ứng dụng kết nối tới các kênh toàn cầu và theo vị trí thông qua hơn 290 relay Nostr
- Tin nhắn riêng tư ưu tiên dùng Noise Protocol qua Bluetooth; nếu không thể kết nối thì chuyển sang NIP-17 của Nostr, và nếu cả hai đều không khả dụng thì được giữ trong hàng đợi cho đến khi có thể gửi
- Cung cấp các kênh theo cấp độ khối phố, khu phố, thành phố, tỉnh/bang và quốc gia tùy theo độ chính xác geohash; hỗ trợ các lệnh kiểu IRC như
/slap, /msg, /who và Emergency Wipe để xóa dữ liệu bằng cách chạm ba lần
- Dự án được phát hành dưới dạng public domain và có thể chạy bằng Xcode hoặc
just, nhưng để build trên thiết bị thật cần cấu hình Developer Team ID và entitlement
Kiến trúc truyền tải kết hợp Bluetooth và Nostr
- Bitchat là ứng dụng native cho iOS và macOS kết hợp Bluetooth mesh với Nostr, đồng thời cũng có trên App Store
- Mạng mesh Bluetooth tự động tìm và kết nối các thiết bị xung quanh mà không cần Internet
- Giao tiếp P2P trực tiếp qua Bluetooth LE, chuyển tiếp tin nhắn qua các thiết bị lân cận tối đa 7 hop
- Hỗ trợ mã hóa đầu cuối dựa trên Noise Protocol và forward secrecy
- Sử dụng định dạng gói nhị phân nén phù hợp với giới hạn của Bluetooth LE và duty cycle tối ưu pin
- Kênh
mesh #bluetooth nhắm tới liên lạc ngoại tuyến trong các tình huống như biểu tình, thảm họa và khu vực xa xôi
- Lớp truyền tải Nostr cung cấp nhắn tin qua Internet thông qua hơn 290 relay trên toàn cầu
- Tạo phòng chat theo vị trí bằng tọa độ geohash và sử dụng danh tính mã hóa tạm thời mới cho mỗi khu vực
- Tin nhắn riêng tư được bảo vệ bằng NIP-17 gift wrapping
- Kênh vị trí cần kết nối Internet và được dùng cho cộng đồng địa phương, sự kiện tại chỗ và thảo luận khu vực
block 7 ký tự: khối phố trong đô thị
neighborhood 6 ký tự: khu vực, khu phố
city 5 ký tự: thành phố
province 4 ký tự: bang, tỉnh
region 2 ký tự: quốc gia, khu vực quy mô lớn
- Định tuyến tin nhắn riêng tư tự động chọn phương thức truyền tải khả dụng
- Nếu có thể dùng phiên Noise hiện có, ưu tiên kết nối Bluetooth nhanh và riêng tư hơn
- Nếu không thể dùng Bluetooth, gửi qua mạng relay bằng khóa công khai Nostr của người nhận và NIP-17
- Nếu cả hai cách đều không khả dụng, giữ tin nhắn trong hàng đợi và tự động chuyển tiếp khi kết nối được thiết lập
- Cũng cung cấp nén tin nhắn LZ4, chế độ pin thích ứng, tối ưu hóa mạng, các lệnh kiểu IRC và Emergency Wipe để xóa tức thì toàn bộ dữ liệu bằng cách chạm ba lần
- Có thể xem giao thức chi tiết trong Technical Whitepaper
Build, bản địa hóa và giấy phép
- Để chạy trong Xcode, dùng các lệnh sau trong repository
cd bitchat
open bitchat.xcodeproj
- Để chạy trên thiết bị thật, cần chuẩn bị cấu hình cục bộ và ký mã
- Nhân bản file cấu hình bằng
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
- Khi thêm Developer Team ID vào file mới, Bundle ID mặc định sẽ được đặt thành
chat.bitchat.<team_id>
- Cần tự đổi
group.chat.bitchat trong entitlement thành group.<your_bundle_id>
- Trên macOS, sau khi
brew install just, có thể chạy cấu hình và mã nguồn bằng just run
- Sau đó chạy
just clean để khôi phục về trạng thái ban đầu cho việc build và phát triển ứng dụng di động
- Tài nguyên bản địa hóa được chia giữa ứng dụng và share extension
- Chuỗi của ứng dụng chính và quy tắc số nhiều được thêm vào
Localizable.strings và Localizable.stringsdict trong bitchat/Localization/Base.lproj/
- Chuỗi của share extension được quản lý tại
bitchatShareExtension/Localization/Base.lproj/Localizable.strings
- Khóa nên được viết sao cho thể hiện rõ ý định, như
app_info.features.offline.title, và tái sử dụng khóa hiện có nhiều nhất có thể
- Kiểm tra biên dịch các thay đổi bản địa hóa bằng
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build
- Dự án được phân phối dưới dạng public domain; có thể xem điều kiện chi tiết trong LICENSE
1 bình luận
Ý kiến trên Hacker News
Hôm qua tôi đã cài client desktop Radicle rồi nhập tên người dùng và mật khẩu mới, nhưng không có gì xảy ra. Khởi động lại ứng dụng cũng không vượt qua được màn hình tạo tài khoản/đăng nhập, nên việc dùng Radicle của tôi kết thúc ở đó
Nếu coi trọng tính khả dụng, cần xem xét lại phụ thuộc
libs.gms.locationvà cũng nên phát hành trên F-Droid(https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)Tôi bật Bitchat khi đi quanh Fusion Festival và phát hiện khoảng 20 thiết bị cùng vài tin nhắn, nhưng không ai trả lời tin nhắn tôi gửi. Trong 80.000 người mà có 20 thiết bị thì không phải là không có người dùng, nhưng cũng không nhiều; hơn nữa chỉ tối đa 2 hop, nên mật độ chưa đủ để phủ ngang khu vực sự kiện
Nó hữu ích khi bạn bị tách khỏi nhóm trên máy bay vì không muốn trả thêm 50 đô la để ngồi cạnh nhau
Nếu quan tâm đến BitChat, cũng đáng cài sẵn phòng khi nó trở nên phổ biến hoặc gặp được người cùng dùng. Tự thử thì cảm giác nhắn tin mà không có Wi-Fi hay mạng di động khá phi thực tế
Geohash chồng lớp cũng có thể ổn, nhưng tôi lo sẽ gây rối như bộ đàm: nếu chỉ một bên nằm trong phạm vi thì chỉ thấy một nửa cuộc trò chuyện. Geohash hiện tại có thể thu hẹp xuống khoảng 1 acre, quá chi tiết, nhưng có thể hữu ích khi toàn bộ một ký túc xá đại học 12 tầng dùng chung một phòng chat
Trang Radicle cho thấy một thiết kế thú vị với tư cách nền tảng kho Git. Tôi thích lề toàn chiều rộng, cấu trúc điều hướng được tổ chức tốt và phần render code đẹp mắt
Bitchat là một dự án của AOS. Khá bất ngờ là nó không được host lại trên ngit, cũng là một dự án AOS
Khi sa vào chủ nghĩa thuần túy Nostr, kết quả thường là chỉ có khoảng 5 người xem bài đăng. Tôi thích giao thức này, nhưng nếu muốn tăng người dùng thì phải đặt ứng dụng ở nơi mọi người đã có mặt
Tôi tò mò liệu nó có tính năng gì đặc biệt so với các sản phẩm nhắn tin phi tập trung khác như Nostr hay XMTP không
Thảo luận liên quan hôm trước: “Government orders GitHub to remove Bluetooth-based chat app Bitchat: Jack Dorsey”
https://news.ycombinator.com/item?id=49036433