paint-brush
Un vistazo al protocolo AT de BlueSky me ayudó a comprender por qué debe existirpor@thebojda
1,716 lecturas
1,716 lecturas

Un vistazo al protocolo AT de BlueSky me ayudó a comprender por qué debe existir

por Laszlo Fazekas15m2025/01/11
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Descubra BlueSky, la alternativa federada a Twitter, impulsada por el innovador protocolo AT. Conozca su estructura descentralizada, sistema de repositorio, integración DID y características únicas que priorizan la libertad y autenticidad del usuario. Explore cómo BlueSky podría dar forma al futuro de las redes sociales.

People Mentioned

Mention Thumbnail

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coin Mentioned

Mention Thumbnail
featured image - Un vistazo al protocolo AT de BlueSky me ayudó a comprender por qué debe existir
Laszlo Fazekas HackerNoon profile picture
0-item
1-item


En 2022, Elon Musk adquirió Twitter, que desde entonces pasó a llamarse X. Esta parte de la historia es ampliamente conocida. Sin embargo, menos gente sabe que dentro de Twitter se estaba gestando un proyecto para descentralizar la plataforma. Este proyecto, llamado BlueSky , se lanzó en 2019. En 2021, se escindió en Bluesky Social Benefit Corporation, lo que le permitió continuar independientemente de Twitter. En cierto modo, BlueSky puede considerarse un sucesor de Twitter tanto como X.


X es un servicio con fines de lucro que ofrece validación paga y funciones premium. Por el contrario, BlueSky es un sistema completamente abierto construido sobre protocolos abiertos similares al Fediverse , que consta de una multitud de nodos independientes.


Como el equipo de BlueSky no estaba satisfecho con el estándar ActivityPub , desarrollaron su propio protocolo, llamado Protocolo AT .


El elemento central del protocolo es el repositorio, que es similar a una base de datos. Aquí es donde se almacenan las publicaciones, los me gusta y todos los demás datos. Cada usuario (o cualquier entidad) tiene un repositorio. El repositorio contiene colecciones (similares a las tablas de bases de datos), y las colecciones contienen registros en un formato clave-valor. El repositorio almacena datos como IPFS . Cada registro tiene un CID , que es un hash basado en contenido. Si un usuario modifica algo en la base de datos, se genera un hash de confirmación a partir de los datos (similar a una confirmación de Git). Incluso un cambio de un solo bit en la base de datos da como resultado un nuevo hash de confirmación. El propietario del repositorio firma digitalmente este hash de confirmación después de cada cambio, autenticando así la base de datos.


La ventaja de esta solución es que todo el repositorio o sus partes se pueden transferir libremente entre sistemas manteniendo la capacidad de cualquier sistema de verificar fácilmente la autenticidad de los datos.


Los usuarios pueden alojar su repositorio en un servidor de datos personales (PDS) de su elección. En este sentido, el PDS funciona como un servidor de base de datos. A través del PDS, los usuarios pueden modificar su repositorio y hacerlo accesible a otros. Además de esto, el PDS proporciona una amplia gama de servicios adicionales. Permite el acceso a los datos de otros usuarios, recupera feeds y más. Básicamente, el PDS funciona como un nodo de redes sociales completamente funcional, que permite a los usuarios conectarse a la red.


Dado que el PDS es simplemente el sistema que ejecuta el repositorio, los usuarios tienen la libertad de mover su repositorio entre diferentes PDS o incluso operar su propio PDS. Esta flexibilidad es lo que le da libertad al sistema.


El contenido de los repositorios almacenados en los PDS es monitoreado por generadores de feeds, que crean feeds basados en criterios específicos. En otras plataformas de redes sociales (por ejemplo, Facebook), normalmente solo hay un feed, pero en el caso de BlueSky, los usuarios tienen la libertad de elegir de qué feed quieren ver publicaciones. Si un usuario siente que un generador de feeds no muestra publicaciones relevantes para sus intereses, está censurando publicaciones que desea ver o está intentando manipularlas, simplemente puede cambiar a otro proveedor de feeds.


Esta red flexible de sistemas y la facilidad de transferencia de repositorios brindan una libertad total sin sacrificar la eficiencia. Por ejemplo, el cliente no necesita recopilar publicaciones de varias fuentes, ya que esto lo gestionan el generador de feeds y el PDS.


Ahora que entendemos la estructura del sistema y los componentes principales, profundicemos un poco más y veamos cómo funciona el protocolo.


A cada usuario (y a otras entidades) se le asigna un identificador descentralizado único (DID) . Este DID está asociado con el repositorio y el par de claves que utiliza el usuario para firmar las confirmaciones del repositorio. Como los DID son difíciles de recordar, los usuarios se identifican por nombres de dominio, que el sistema traduce en DID.


Por ejemplo, mi nombre de usuario es thebojda.bsky.social . El DID se puede vincular a este de dos maneras: ya sea especificándolo en el registro TXT del dominio con la clave adecuada o simplemente a través de la URL conocida. Se puede acceder al DID en esta URL:


 https://thebojda.bsky.social/.well-known/atproto-did


Por ejemplo, mi DID es: did:plc:4x7rynvskplz54p5pofj3jxa


El protocolo AT admite los tipos PLC y Web de DID. Un DID Web es una URL simple, mientras que el DID PLC es un estándar personalizado del protocolo AT, generado a partir de la clave pública y algunos datos adicionales (aquellos interesados en profundizar más pueden leer más sobre esto aquí ).


Cada DID está asociado a un documento DID, que contiene la clave pública vinculada al DID y la URL del PDS donde está alojado el repositorio.


Un DID se puede resolver de la siguiente manera:


 https://plc.directory/did:plc:4x7rynvskplz54p5pofj3jxa


El documento DID se ve así:


 { "@context": [ "https://www.w3.org/ns/did/v1", "https://w3id.org/security/multikey/v1", "https://w3id.org/security/suites/secp256k1-2019/v1" ], "id": "did:plc:4x7rynvskplz54p5pofj3jxa", "alsoKnownAs": [ "at://thebojda.bsky.social" ], "verificationMethod": [ { "id": "did:plc:4x7rynvskplz54p5pofj3jxa#atproto", "type": "Multikey", "controller": "did:plc:4x7rynvskplz54p5pofj3jxa", "publicKeyMultibase": "zQ3shaNKzE66K1Kr3dmbnDwXWHh6v4nUcBmpEaK7bVktKTwfh" } ], "service": [ { "id": "#atproto_pds", "type": "AtprotoPersonalDataServer", "serviceEndpoint": "https://fibercap.us-west.host.bsky.network" } ] }


En este documento, la URL del PDS debe actualizarse si alguien se muda a un nuevo PDS. Por ejemplo, mi PDS actual está accesible en https://fibercap.us-west.host.bsky.network .


La comunicación con el PDS se realiza a través de XRPC , un protocolo simple basado en HTTP/JSON. Cada llamada tiene un nombre de estilo DNS inverso. Por ejemplo, si quiero obtener todo mi repositorio, puedo hacerlo de esta manera:


 https://fibercap.us-west.host.bsky.network/xrpc/com.atproto.sync.getRepo?did=did:plc:4x7rynvskplz54p5pofj3jxa


El método com.atproto.sync.getRepo se utiliza para consultar el repositorio y tiene un parámetro did .


El equipo de BlueSky desarrolló un lenguaje descriptivo basado en JSON llamado Lexicon para definir la API y las estructuras de datos. Es similar a JSON Schema y se puede utilizar para generar interfaces de tipo seguro, por ejemplo, para TypeScript, lo que simplifica la implementación del protocolo.


La siguiente llamada se puede utilizar para obtener mis últimas 10 publicaciones:


 https://public.api.bsky.app/xrpc/app.bsky.feed.getAuthorFeed?actor=thebojda.bsky.social&limit=10


El resultado se ve así:


 { "feed": [ { "post": { "uri": "at://did:plc:4x7rynvskplz54p5pofj3jxa/app.bsky.feed.post/3le3esbhaek2l", "cid": "bafyreihagjnwrkakkajkaighz6kyqww3wznvbdcqpnl4wbfnpwrr2xwmmi", "author": { "did": "did:plc:4x7rynvskplz54p5pofj3jxa", "handle": "thebojda.bsky.social", "displayName": "Laszlo Fazekas", "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:4x7rynvskplz54p5pofj3jxa/bafkreibxd4mx7rehgkc77diautavpcota6jotzkaagp4zv2t6w3a52n7sq@jpeg", "labels": [], "createdAt": "2024-11-24T01:36:39.146Z" }, "record": { "$type": "app.bsky.feed.post", "createdAt": "2024-12-24T21:20:56.891Z", "embed": { "$type": "app.bsky.embed.external", "external": { "description": "MyETHMeta is a decentralized metadata service for Ethereum accounts. It is something like Gravatar. There are no backend servers, you fully own your data.", "thumb": { "$type": "blob", "ref": { "$link": "bafkreifoezhkdtesuhkaoqt3yml44geozu6ckg2cfffg5t5omob2bdjmo4" }, "mimeType": "image/jpeg", "size": 669185 }, "title": "MyETHMeta v2 – Some Improvements on the Gravatar for Your Ethereum Account | HackerNoon", "uri": "https://hackernoon.com/myethmeta-v2-some-improvements-on-the-gravatar-for-your-ethereum-account" } }, "facets": [ { "features": [ { "$type": "app.bsky.richtext.facet#link", "uri": "https://hackernoon.com/myethmeta-v2-some-improvements-on-the-gravatar-for-your-ethereum-account" } ], "index": { "byteEnd": 270, "byteStart": 240 } } ], "langs": [ "en" ], "reply": { "parent": { "cid": "bafyreieipk3kgwonq3h62wyadauplzgcpdgcg6pxp2776oeldcstgybwha", "uri": "at://did:plc:4x7rynvskplz54p5pofj3jxa/app.bsky.feed.post/3le3es7kzmc2l" }, "root": { "cid": "bafyreieipk3kgwonq3h62wyadauplzgcpdgcg6pxp2776oeldcstgybwha", "uri": "at://did:plc:4x7rynvskplz54p5pofj3jxa/app.bsky.feed.post/3le3es7kzmc2l" } }, "text": "MyETHMeta is a decentralized metadata service for Ethereum accounts. It is something like Gravatar, but here the metadata and your profile picture is assigned to your Ethereum address. There are no backend servers, you fully own your data. hackernoon.com/myethmeta-v2..." }, "embed": { "$type": "app.bsky.embed.external#view", "external": { "uri": "https://hackernoon.com/myethmeta-v2-some-improvements-on-the-gravatar-for-your-ethereum-account", "title": "MyETHMeta v2 – Some Improvements on the Gravatar for Your Ethereum Account | HackerNoon", "description": "MyETHMeta is a decentralized metadata service for Ethereum accounts. It is something like Gravatar. There are no backend servers, you fully own your data.", "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:4x7rynvskplz54p5pofj3jxa/bafkreifoezhkdtesuhkaoqt3yml44geozu6ckg2cfffg5t5omob2bdjmo4@jpeg" } }, "replyCount": 0, "repostCount": 0, "likeCount": 0, "quoteCount": 0, "indexedAt": "2024-12-24T21:21:02.466Z", "labels": [] }, "reply": {} }, {}, {}, {}, {}, {}, {}, {}, {} ] }


Cada elemento contiene una publicación y sus respuestas asociadas. Como se mencionó anteriormente, cada publicación es un registro en el repositorio y tiene su propio identificador único. A cada publicación se le puede asignar un URI único, que consta del DID, el nombre de la colección y el ID de la publicación. En el ejemplo anterior, el URI se ve así: at://did:plc:4x7rynvskplz54p5pofj3jxa/app.bsky.feed.post/3le3esbhaek2l


Esto significa que la publicación se encuentra en el repositorio asociado con mi DID, dentro de la colección app.bsky.feed.post y su ID es 3le3esbhaek2l .


Además de la URI, también se incluye el CID de la publicación, que es un hash único generado a partir del contenido. Estos elementos juntos forman el hash de confirmación único del repositorio.


Otro aspecto destacable es la sección thumb , que hace referencia a una imagen asociada a la publicación. Se trata de un objeto de tipo blob que no pertenece a ninguna colección. El sistema almacena archivos de gran tamaño (como imágenes, vídeos, etc.) como blobs, a los que se puede hacer referencia en registros individuales (por ejemplo, publicaciones) mediante su hash (CID).


Para aquellos interesados en conocer más a fondo la estructura del repositorio y los registros, la herramienta go-repo-export puede resultar bastante útil. Con este pequeño programa, puede descargar todo el repositorio de usuarios y extraer las colecciones y sus registros en un directorio en formato JSON. Esto le permite ver exactamente cómo BlueSky almacena los datos.


Otra buena fuente de información es Chrome DevTools. En el sitio web https://bsky.app , puedes ver claramente las llamadas a la API y cómo se comunica el lado del cliente con el PDS.


Y, por supuesto, está la documentación oficial. El protocolo AT y BlueSky tienen una documentación excelente y en GitHub puedes encontrar ejemplos, así como el código fuente tanto del lado del cliente como del servidor.


Cuando leí por primera vez sobre el Protocolo AT, mi primer pensamiento fue por qué necesitamos otro protocolo federado junto con ActivityPub . Sin embargo, el Protocolo AT tiene ciertas características que justifican plenamente su existencia. El protocolo, por supuesto, no es perfecto y probablemente experimentará un desarrollo significativo. Por ejemplo, si queremos construir una red verdaderamente resistente a la censura, no puede depender de un sistema de nombres de dominio centralizado. Un sistema de nombres basado en blockchain, que sea realmente resistente a la censura, sería valioso (incluso podría escribir una propuesta al respecto).


BlueSky tiene actualmente entre 20 y 30 millones de usuarios, una cifra que palidece en comparación con la base de usuarios de X (Twitter), pero sigue siendo significativa. En cuanto a lo que depara el futuro, nadie puede decirlo con certeza. La red federada es una gran ventaja y hay intensos debates sobre si es demasiado poder para una entidad poseer una plataforma de comunicación global como Twitter o Facebook. No descartaría por completo la posibilidad de que BlueSky pueda superar algún día a sus competidores. Con buenos generadores de feeds y una construcción de comunidad eficaz, esto es posible. En cualquier caso, vale la pena prestar atención a este proyecto y comprender cómo funciona.