1 pontos por GN⁺ 3 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • Bitchat é um app de mensagens P2P descentralizado para iOS e macOS que combina rede mesh via Bluetooth com o Nostr baseado na internet, funcionando sem conta, número de telefone ou servidor central
  • Offline, oferece suporte a retransmissão de até 7 saltos via Bluetooth LE e, com conexão à internet, conecta-se a canais globais e baseados em localização por meio de mais de 290 relays Nostr
  • Mensagens privadas usam primeiro o Noise Protocol do Bluetooth e, se isso não for possível, mudam para o NIP-17 do Nostr; se nenhum dos dois estiver disponível, ficam na fila até poderem ser enviadas
  • Oferece canais por quarteirão, bairro, cidade, estado e país conforme a precisão do geohash, além de comandos no estilo IRC como /slap, /msg e /who, e o Emergency Wipe, que apaga os dados com três toques
  • O projeto foi publicado em domínio público e pode ser executado com Xcode ou just, mas builds para dispositivos reais exigem Developer Team ID e configuração de entitlement

Estrutura de transporte que combina Bluetooth e Nostr

  • Bitchat é um app nativo para iOS e macOS que combina mensagens via Bluetooth e Nostr, e também está disponível na App Store
  • A rede mesh Bluetooth descobre e conecta automaticamente dispositivos próximos sem internet
    • Faz comunicação P2P direta por Bluetooth LE e retransmite mensagens por até 7 saltos via dispositivos vizinhos
    • Oferece criptografia de ponta a ponta baseada no Noise Protocol e sigilo de encaminhamento
    • Usa formato de pacote binário compactado ajustado às limitações do Bluetooth LE e duty cycle otimizado para bateria
    • O canal mesh #bluetooth é voltado para comunicação offline em protestos, desastres, áreas remotas etc.
  • A camada de transporte Nostr fornece mensagens pela internet por meio de mais de 290 relays globais
    • Cria salas de chat baseadas em localização com coordenadas geohash e usa uma nova identidade criptográfica temporária para cada região
    • Mensagens privadas são protegidas com NIP-17 gift wrapping
    • Canais de localização exigem conexão com a internet e podem ser usados para comunidades locais, eventos locais e discussões regionais
      • block 7 caracteres: quarteirão urbano
      • neighborhood 6 caracteres: distrito ou bairro
      • city 5 caracteres: cidade
      • province 4 caracteres: estado ou província
      • region 2 caracteres: país ou região ampla
  • O roteamento de mensagens privadas escolhe automaticamente o meio de transporte disponível
    1. Se uma sessão Noise existente puder ser usada, prioriza a conexão Bluetooth por ser mais rápida e mais privada
    2. Se o Bluetooth não puder ser usado, envia pela rede de relays usando a chave pública Nostr do destinatário e o NIP-17
    3. Se nenhum dos dois métodos estiver disponível, mantém a mensagem na fila e a entrega automaticamente quando a conexão for estabelecida
  • Também oferece compressão de mensagens LZ4, modo de bateria adaptativo, otimização de rede, comandos no estilo IRC e o Emergency Wipe, que apaga imediatamente todos os dados com três toques
  • O protocolo detalhado pode ser consultado no Technical Whitepaper

Build, localização e licença

  • Para executar no Xcode, use os seguintes comandos no repositório
cd bitchat
open bitchat.xcodeproj
  • Para executar em um dispositivo real, é preciso preparar a configuração local e a assinatura de código
    • Duplique o arquivo de configuração com cp Configs/Local.xcconfig.example Configs/Local.xcconfig
    • Ao adicionar o Developer Team ID no novo arquivo, o Bundle ID padrão será definido como chat.bitchat.<team_id>
    • É necessário alterar manualmente o entitlement group.chat.bitchat para group.<your_bundle_id>
  • No macOS, é possível configurar e executar o código-fonte com brew install just e depois just run
    • Em seguida, execute just clean para restaurar o estado original voltado ao build e desenvolvimento do app móvel
  • Os recursos de localização são divididos entre o app e a extensão compartilhada
    • Adicione strings básicas do app e regras de plural em bitchat/Localization/Base.lproj/ nos arquivos Localizable.strings e Localizable.stringsdict
    • As strings da extensão compartilhada são gerenciadas em bitchatShareExtension/Localization/Base.lproj/Localizable.strings
    • As chaves devem explicitar a intenção, como app_info.features.offline.title, e, sempre que possível, reutilizar chaves existentes
    • Verifique a compilação das alterações de localização com xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build
  • O projeto é distribuído em domínio público; os detalhes podem ser consultados em LICENSE

1 comentários

 
GN⁺ 3 시간 전
Comentários do Hacker News
  • Ontem instalei o cliente de desktop do Radicle e inseri um novo nome de usuário e senha, mas nada aconteceu. Mesmo reiniciando o app, não consegui passar da tela de criação de conta/login, então meu uso do Radicle terminou ali

  • Se a disponibilidade é importante, vale reconsiderar a dependência de libs.gms.location e também distribuir no F-Droid (https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)

    • Parece que o mantenedor do repositório parou tanto de revisar PRs quanto de responder mensagens. Para continuar, é bem possível que alguém precise fazer um fork
  • Liguei o Bitchat no Fusion Festival e andei por lá, encontrando cerca de 20 dispositivos e algumas mensagens, mas ninguém respondeu às mensagens que enviei. Entre 80 mil pessoas, 20 dispositivos significa que não não havia usuários, mas também não eram muitos, e o limite de 2 hops não deu densidade suficiente para atravessar o local do evento

    • Pelo que sei, ele foi usado em vários protestos e também está sendo usado atualmente nos protestos do CJP na Índia. O governo indiano também pediu ao GitHub a remoção do repositório
    • Pelo menos o Wi-Fi mesh foi adicionado, mas fora de protestos em que a vida ou a morte estão em jogo, a adoção parece bem lenta
      É útil quando você acaba separado do seu grupo no avião porque não quis pagar 50 dólares extras para sentar junto
    • Para um projeto de nicho como esse, 20 dispositivos já é um número bem significativo
    • É bem legal que isso realmente funcione. Levei um AirTag para encontrar meu grupo em um festival com 30 mil pessoas, mas foi um fracasso total
    • Da última vez que usei, só tinha uma imagem de Hitler desenhada em arte ASCII. Ainda assim, é um começo
  • Se você tem interesse no BitChat, talvez valha a pena instalar desde já para quando ele ficar popular ou você encontrar alguém para usar junto. Quando testei pessoalmente, a sensação de trocar mensagens sem Wi‑Fi nem rede móvel pareceu surreal

    • Sempre que vou a um lugar lotado, eu abro e confiro. Mas em chat pela internet, não em mesh, eu gostaria que houvesse chat baseado nas proximidades em vez de geohash. Com geo, é sempre difícil escolher a granularidade da área desejada
      Geos sobrepostos também poderiam funcionar, mas me preocupa a confusão de, como num rádio, só um lado estar dentro do alcance e você acabar vendo só metade da conversa. O geo atual vai até cerca de 1 acre, o que é preciso demais, mas pode ser útil quando um dormitório universitário inteiro de 12 andares usa a mesma sala de chat
    • Apps de chat por Bluetooth já existem. No ano passado, usei o Berkanan, que achei na App Store para conversar com amigos sentados longe de mim num voo da Ryanair na Europa; a aparência era péssima, mas funcionava direito
  • O site do Radicle mostra um design interessante como plataforma de repositórios Git. Gosto das margens em largura total, da navegação bem estruturada e da renderização de código agradável de ver

    • Fico curioso se daria para criar um serviço que conectasse qualquer URL de repositório Git e o exibisse no mesmo formato
  • Bitchat é um projeto da AOS. Surpreende que não tenha sido hospedado novamente no ngit, que é outro projeto da AOS

    • É um pouco surpreendente não haver mirror no ngit, mas dá para entender não usá-lo como local principal de hospedagem. Precisa estar em algum lugar onde as pessoas realmente consigam descobrir
      Quando se cai no purismo do Nostr, muitas vezes o resultado é que só 5 pessoas veem a postagem. Gosto do protocolo, mas para aumentar a base de usuários é preciso colocar o app onde as pessoas já estão
  • Fico curioso se há algum recurso especial em comparação com outros produtos de mensagens descentralizadas como Nostr ou XMTP