El protocolo Nostr
Este es un resumen de alto nivel del protocolo Nostr con detalles sobre los tipos de eventos y cómo funcionan las Posibilidades de Implementación de Nostr (NIPs).
§ Nostr de alto nivel
- La red Nostr tiene dos componentes principales: clientes y relés.
- Los clientes son la interfaz que utilizan los usuarios para leer y escribir datos en los repetidores. En el contexto de las redes sociales, piensa en esto como la aplicación web o la aplicación móvil de Twitter. Es un cliente que te permite leer y escribir datos en la base de datos centralizada de Twitter.
- Las relés son como bases de datos (aunque hacen mucho más que almacenar datos). Permiten a los clientes enviarles datos y almacenarlos en una base de datos. Los clientes pueden leer los datos de los repetidores para mostrárselos a los usuarios.
- Cada usuario se identifica mediante una llave pública. Cada objeto de evento (por ejemplo, mensaje que publica, actualización de su lista de seguidores, etc.) está firmado. Los clientes validan estas firmas para asegurarse de que son correctas.
- Los clientes obtienen datos de los repetidores y los publican en ellos. Casi siempre es el usuario quien elige los enlaces. Los enlaces no tienen por qué comunicarse entre sí, pero podrían hacerlo en el futuro.
- Por ejemplo, para actualizar tu perfil, sólo tienes que dar instrucciones a tu cliente para que envíe un evento del tipo 0 a los relés que quieras utilizar. Los repetidores almacenarán ese evento.
- Al iniciarse, tu cliente consulta los datos de los relés que le indiques. Esto puede ser filtrado para mostrar sólo los eventos de los usuarios que sigues o puedes pedir todo de todos, entonces el cliente te muestra esos datos.
- Hay muchos tipos diferentes de eventos. Los eventos pueden contener todo tipo de datos estructurados, y las estructuras más utilizadas están encontrando su camino en Nostr Implementation Possibilities (NIPs - estándares de protocolo a los que todo el mundo se adhiere) para que todos los clientes y relés puedan manejarlos sin problemas.
- Los datos que puedes ver en Nostr dependen completamente de los relés a los que decidas conectarte. Para más información, consulta el diagrama de red que aparece a continuación.
Diagrama de red
Puedes ver en el diagrama de arriba que tenemos 3 relés y 3 usuarios. Cada uno de los usuarios se conecta a Nostr con un cliente diferente (y en una plataforma diferente).
Dadas las lecturas y escrituras en el diagrama:
- Bob puede ver todos los mensajes de Alice, pero no puede ver nada de Mary (y ni siquiera sabe que existe)
- Alice puede ver todos los mensajes de Bob, pero no puede ver nada de Mary (y ni siquiera sabe que existe).
- Mary puede ver todos los mensajes de Bob y Alice. Esto se debe a que mientras ella sólo escribe al Relé 3, está leyendo desde el Relé 2, donde Bob y Alice están escribiendo sus mensajes.
Esta es una situación muy simple, pero ya puedes ver que la elección de los relés a los que quieres conectarte puede tener un gran impacto en quién y qué verás cuando utilices Nostr.
§ Eventos
Los eventos son el único tipo de objeto de la red Nostr. Cada objeto de evento tiene un “tipo”, que indica de qué tipo de evento se trata (qué tipo de acción puede realizar un usuario o qué tipo de mensaje puede recibir).
Este es el aspecto de un evento de tipo 1 (el tipo 1 es para notas de texto cortas, es decir, algo parecido a un tweet en Twitter)
{
"id": "4376c65d2f232afbe9b882a35baa4f6fe8667c4e684749af565f981833ed6a65",
"pubkey": "6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93",
"created_at": 1673347337,
"kind": 1,
"tags": [
["e", "3da979448d9ba263864c4d6f14984c423a3838364ec255f03c7904b1ae77f206"],
["p", "bf2376e17ba4ec269d10fcc996a4746b451152be9031fa48e74553dde5526bce"]
],
"content": "Walled gardens became prisons, and nostr is the first step towards tearing down the prison walls.",
"sig": "908a15e46fb4d8675bab026fc230a0e3542bfade63da02d542fb78b2a8513fcd0092619a2c8c1221e581946e0191f2af505dfdf8657a414dbca329186f009262"
}
- El campo
id
nos indica el ID del evento - El campo
pubkey
nos indica la clave pública del usuario que envió el evento - El campo
created_at
nos dice cuándo se publicó el evento - El campo “kind” indica de qué tipo de evento se trata.
- El campo
tags
nos informa sobre las etiquetas del evento. Éstas se utilizan para crear enlaces, añadir contenido multimedia y mencionar a otros usuarios o eventos. - El campo
content
nos da el contenido del evento. En este caso, el mensaje de texto corto. - El campo
sig
es la firma que los clientes utilizan para verificar que el usuario con esta pubkey envió de hecho este evento en la fecha especificada.
Tipos de eventos
Esta es una lista de los tipos de Eventos
actuales. La lista más actualizada se puede encontrar siempre en Repositorio Nostr NIPs.
kind | description | NIP |
---|---|---|
0 | Metadata | 1 |
1 | Short Text Note | 1 |
2 | Recommend Relay | 1 |
3 | Contacts | 2 |
4 | Encrypted Direct Messages | 4 |
5 | Event Deletion | 9 |
6 | Reposts | 18 |
7 | Reaction | 25 |
8 | Badge Award | 58 |
40 | Channel Creation | 28 |
41 | Channel Metadata | 28 |
42 | Channel Message | 28 |
43 | Channel Hide Message | 28 |
44 | Channel Mute User | 28 |
1063 | File Metadata | 94 |
1984 | Reporting | 56 |
9734 | Zap Request | 57 |
9735 | Zap | 57 |
10000 | Mute List | 51 |
10001 | Pin List | 51 |
10002 | Relay List Metadata | 65 |
13194 | Wallet Info | 47 |
22242 | Client Authentication | 42 |
23194 | Wallet Request | 47 |
23195 | Wallet Response | 47 |
24133 | Nostr Connect | 46 |
30000 | Categorized People List | 51 |
30001 | Categorized Bookmark List | 51 |
30008 | Profile Badges | 58 |
30009 | Badge Definition | 58 |
30017 | Create or update a stall | 15 |
30018 | Create or update a product | 15 |
30023 | Long-form Content | 23 |
30078 | Application-specific Data | 78 |
30402 | Classifieds | 99 |
31989 | Handler recommendation | 89 |
31990 | Handler information | 89 |
Tags estandarizados
nombre | valor | otros parmetros | NIP |
---|---|---|---|
e | event id (hex) | relay URL, marker | 1, 10 |
p | pubkey (hex) | relay URL | 1 |
a | coordinates to an event | relay URL | 33, 23 |
r | a reference (URL, etc) | 12 | |
t | hashtag | 12 | |
g | geohash | 12 | |
nonce | random | 13 | |
subject | subject | 14 | |
d | identifier | 33 | |
expiration | unix timestamp (string) | 40 |
§ NIPs
Las Posibilidades de Implementación de Nostr, o NIP por sus siglas en inglés, existen para documentar lo que DEBE, lo que DEBERÍA y lo que PUEDE ser implementado por el software cliente y de retransmisión compatible con Nostr. Las NIP son los documentos que describen cómo funciona el protocolo Nostr.
¿Por qué deberían importarme los NIPs?
Nostr está descentralizado y no es propiedad de un servicio centralizado (como Twitter). Esto significa que la dirección del protocolo depende de todos nosotros. Podemos sugerir y abogar por cambios y ofrecer comentarios sobre las ideas sugeridas por otros.
Ser parte activa de la comunidad te da voz y voto en la dirección de la red. Los NIP publicados en el repositorio principal ya están aprobados. Añadir nuevas ideas se hace a través de Pull Request en ese repositorio.
¿Dónde puedo encontrar los NIPs?
Puedes ver todos los NIPs actuales en Nostr NIP repo.