- O AT Protocol é o protocolo que serve de base para redes sociais descentralizadas, e todos os dados são identificados por um URI at://
- O URI at:// define o criador dos dados (usuário) como autoridade, e o local onde esses dados estão realmente hospedados precisa ser descoberto separadamente
- O processo de resolução do URI ocorre na seguinte ordem: converter o handle em uma identidade (DID), verificar o servidor de hospedagem consultando o documento DID e então solicitar os dados JSON nesse servidor
- Há suporte a dois tipos de DID (did:web, did:plc), cada um com vantagens, desvantagens e formas de preservação de dados diferentes
- Essa abordagem enfatiza que a propriedade dos dados pertence ao usuário e garante persistência que mantém o vínculo mesmo que o handle e a hospedagem mudem
AT Protocol, URI at:// e o processo de resolução da identidade dos dados sociais
# Estrutura básica do AT Protocol e do URI at://
- O AT Protocol faz com que vários servidores distribuídos se comuniquem de acordo com um padrão específico, e esse conjunto como um todo é chamado de "atmosphere"
- Cada dado dentro da atmosphere recebe um URI exclusivo iniciado por at://, e esse URI funciona como uma espécie de link para dados JSON
- Diferentemente da estrutura tradicional de URI, no AT Protocol o criador dos dados (usuário) é definido como a autoridade do URI
- Por exemplo, em
at://ruuuuu.de/app.bsky.feed.post/3lzy2ji4nms2z, ruuuuu.de indica quem é o proprietário daqueles dados
- O servidor físico onde os dados estão realmente hospedados não aparece diretamente no URI, e é necessário um processo adicional de resolução para encontrá-lo
# As três etapas da resolução de um URI at://
- São necessárias três etapas para mapear um URI at:// para os dados reais (JSON)
- Converter o handle (
ruuuuu.de etc.) em uma identidade (DID: Decentralized Identifier)
- O handle é um apelido para identificar o usuário e pode mudar
- Por isso, ele precisa ser convertido em um DID, que é um ID global imutável
- Formas de conversão:
- Verificar as informações de hospedagem dos dados consultando o documento DID (DID Document)
- O documento DID inclui informações como a chave pública daquela identidade e o endpoint de serviço (servidor)
- No caso de
did:web:~, a abordagem é baseada em domínio (https://domínio/.well-known/did.json)
- No caso de
did:plc:~, a consulta é feita no diretório PLC (https://plc.directory/DID)
- O endpoint de serviço (
serviceEndpoint) é o servidor real de hospedagem dos dados
- Solicitar os dados JSON pela API do servidor de hospedagem
- Solicitar os dados passando cada parte do
at:// como parâmetro para o endpoint com.atproto.repo.getRecord
- O JSON retornado corresponde aos dados reais mapeados para aquele URI at://
# Explicando o processo de resolução com um exemplo
- Exemplo:
at://ruuuuu.de/app.bsky.feed.post/3lzy2ji4nms2z
- Mesmo que o handle mude, se for usado um URI at:// baseado em DID (permalink), a ligação entre conta e dados continua preservada
# Formas de DID: diferença entre did:web e did:plc
- did:web:
- Você pode gerenciar e autenticar seu próprio domínio
- Se perder o controle sobre o domínio, pode acabar perdendo toda a identidade
- did:plc:
- O PLC (Public Ledger of Credentials) é o responsável pela operação da identidade
- Não está vinculado a um domínio, mas pode haver controle limitado, como a possibilidade de o operador do PLC recusar atualizações
- Todo o histórico de mudanças pode ser verificado e rastreado por hash
# Separação entre identidade, hospedagem e dados, e sua persistência
- O
at:// separa identidade e hospedagem dos dados, permitindo portabilidade dos dados do usuário e a criação de links permanentes
- O handle (apelido) pode ser alterado a qualquer momento, e o servidor de hospedagem também pode ser migrado da mesma forma
- O DID (identidade) é imutável, e um URI
at:// baseado nele pode ser usado como permalink persistente
- O DID Document contém prova de posse do handle, chaves para verificação de assinatura e informações de hospedagem, garantindo confiança e flexibilidade
# Aplicações reais e observações para desenvolvimento
- Na prática, a maioria dos apps baseados em AT recebe dados por push via WebSocket etc. e os agrega em um banco de dados interno
- Ainda assim, entender como resolver um URI
at:// é essencial para compreender as características da rede e a portabilidade dos dados
- O sistema
at:// fornece uma abstração de rede social sobre HTTP, DNS e JSON, implementando tecnicamente o princípio de que a propriedade dos dados pertence ao usuário
# Conclusão
- O AT Protocol e o URI
at:// representam uma evolução técnica na identidade, conectividade e persistência dos dados sociais
- Desenvolvedores precisam dominar o fluxo de trabalho central, como resolução de handles, uso de DID, estrutura de documentos DID e formas de solicitar os dados reais
- Graças a essa estrutura, é possível obter flexibilidade e propriedade sobre o próprio conteúdo, identidade e local de hospedagem
1 comentários
Comentários do Hacker News
Entrei no bsky inspirado por alguns posts recentes sobre ATProto, mas tudo o que vejo é um fluxo interminável de política dos EUA. Mesmo clicando repetidamente em "mostrar menos disso", quase não faz diferença. Fico me perguntando se essa é a essência da plataforma; para a minha saúde mental, é bem ruim ter de ficar vendo só opiniões previsíveis sobre discussões estranhas do exterior.
Ainda não sei se esse projeto realmente resolve de forma significativa os problemas de identidade e posse de dados. Em termos de identidade, no fim das contas é só usar o próprio domínio ou o domínio de outra pessoa (Bluesky etc.). Como a maioria das pessoas não tem domínio, a identidade delas acaba ficando com terceiros. Com os dados é a mesma coisa: se a conta for bloqueada no Bluesky ou em outro servidor, o repositório também é fechado e você perde até a chance de mover seus dados para outro lugar. Isso é igual ao e-mail: se você não tem o próprio domínio e servidor, na prática não controla nada.
As explicações do Dan são sempre excelentes, e isso é oportuno com a notícia recente de que o Bluesky vai transferir a operação do PLC. Nosso time também escolheu o mesmo sistema DID na fair.pm para distribuição descentralizada de plugins do WordPress (seria algo como gerenciamento de pacotes no estilo App Store). O pessoal do Bluesky — especialmente o Bryan — ajudou bastante, e conseguimos até suporte a chaves Ed25519 para poder usar libsodium. Nosso protocolo está sendo projetado sobre DID e a moderação empilhável do Bluesky, mas não usa atproto diretamente. O importante é que DID é um padrão da W3C, então o PLC não fica preso ao atproto.
Para localizar um at://, é preciso enviar uma requisição GET para plc.directory, e é aí que o sistema parece virar um modelo 100% centralizado. Eu gostaria que pelo menos fosse possível separar vários diretórios confiáveis do protocolo, como acontece com root DNS ou CA.
Todo servidor que armazena links at:// no fim parece precisar passar por DNS/HTTPS para encontrar a representação formal (permalink). Se o DNSSEC não estiver funcionando direito, toda essa estrutura parece meio frágil. Ainda não pensei profundamente sobre isso, mas a preocupação imediata que me vem à cabeça é algo como envenenamento de DNS, que permitiria a um atacante publicar posts em meu nome (já que a chave pública está incluída no DID obtido via DNS).
O texto traz poucas informações sobre as chaves usadas no histórico de mudanças do DID. Por exemplo, se eu fosse foobar.bsky.social, não lembro de ter enviado uma chave eu mesmo nem de ter recebido instruções para baixá-la. Quero entender exatamente onde essa chave fica, quem a possui e como/quando ela é usada. E, se o DID está no plc.directory, qual é o mecanismo que impede o operador desse site de simplesmente sobrescrever meu DID arbitrariamente e roubar minha identidade?
O conceito de at:// é interessante, mas também me preocupo com problemas que podem surgir em um sistema realmente baseado em posse de dados. Por exemplo, como o usuário tem os dados, ele pode alterar ou apagar o conteúdo quando quiser. Se alguém escrever algo aceitável no começo e depois mudar maliciosamente, um serviço novo talvez não saiba disso, mesmo que outro tenha guardado o hash antigo para detectar alterações. Também parece difícil rastrear coisas como upvotes; se cada um armazenar tudo como objetos próprios, fica complicado descobrir quem deu upvote. E nada parece impedir alguém de criar contas falsas e ficar promovendo os próprios posts. Por fim, se houver um número enorme de contas vindas de várias plataformas, não seria impossível moderar spam ou atividade maliciosa? Com a premissa de que cada conta gerencia seus próprios dados, não vejo claramente como o desenho do sistema fecha em termos de transparência, responsabilização, moderação e bloqueio de spam.
Isso me lembra vários protocolos cripto que falam de descentralização, mas acabam presos a uma plataforma no mundo real.
Há uma dúvida estrutural do tipo "como encontrar o JSON a partir de um URI at://". Mesmo lendo a documentação, eu não consigo sentir intuitivamente por que seria necessário "aquele JSON"; pessoalmente, esse modelo não me agrada.
Estou curioso se o protocolo funciona como uma espécie de grande tópico público de Kafka. Por exemplo, ao criar um novo webapp, em vez de armazenar os dados diretamente, cada usuário salvaria seus dados no próprio espaço, e o app teria um listener para escutar isso, contando que o protocolo garanta a propagação dos dados para o app ouvir e armazenar em cache. Conceitualmente isso é fascinante, mas também me pergunto se conceitos do Kafka, como offsets para não perder atualizações e partições para escalar, se aplicam aqui.