O Protocolo Nostr

Este é um resumo de alto nível do protocolo Nostr com detalhes sobre os tipos de eventos e como funcionam as Possibilidades de Implementação do Nostr (NIPs).

§ Nostr em alto nível

  • A rede Nostr tem dois componentes principais: clientes e relays.
    • Os clientes são a interface que os utilizadores usam para ler e escrever dados nos relays. No contexto das redes sociais, pensa nisso como a aplicação web ou a aplicação móvel do Twitter. É um cliente que lhe permite ler e escrever dados na base de dados centralizada do Twitter.
    • Os relays são como bases de dados (embora façam muito mais do que armazenar dados). Permitem que os clientes lhes enviem dados e os armazenem numa base de dados. Os clientes podem ler os dados dos repetidores para mostrá-los aos utilizadores.
  • Cada utilizador é identificado por uma chave pública. Cada objeto de evento (por exemplo, uma mensagem que publica, uma atualização da sua lista de seguidores, etc.) é assinado. Os clientes validam estas assinaturas para garantir que estão corretas.
  • Os clientes obtêm dados e publicam nos relays. Quase sempre é o utilizador que escolhe os relays. Os relays não têm de comunicar entre si, mas podem fazê-lo no futuro.
  • Por exemplo, para atualizar o seu perfil, só precisa de dar instruções ao seu cliente para enviar um evento do tipo 0 para os relays que desejar utilizar. Os relays armazenarão esse evento.
  • Ao iniciar, o seu cliente consulta os dados dos relays que lhe indicar. Isso pode ser filtrado para mostrar apenas os eventos dos utilizadores que segue ou pode solicitar tudo de todos, e o cliente mostra-lhe esses dados.
  • Existem muitos tipos diferentes de eventos. Os eventos podem conter todos os tipos de dados estruturados, e as estruturas mais utilizadas estão a encontrar o seu caminho nas Possibilidades de Implementação do Nostr (NIPs - padrões de protocolo que todos seguem) para que todos os clientes e relays possam lidar com eles sem problemas.
  • Os dados que pode ver no Nostr dependem completamente dos relays aos quais decidir ligar-se. Para obter mais informações, consulte o diagrama de rede abaixo.

Diagrama de rede

Diagrama de rede do Nostr

Podes ver no diagrama acima que temos 3 relays e 3 utilizadores. Cada um dos utilizadores liga-se ao Nostr com um cliente diferente (e numa plataforma diferente).

Dadas as leituras e escritas no diagrama:

  • O Bob pode ver todas as mensagens da Alice, mas não pode ver nada da Mary (e nem sequer sabe que ela existe).
  • A Alice pode ver todas as mensagens do Bob, mas não pode ver nada da Mary (e nem sequer sabe que ela existe).
  • A Mary pode ver todas as mensagens do Bob e da Alice. Isto acontece porque, embora ela apenas escreva para o relay 3, está a ler no relay 2, onde o Bob e a Alice estão a escrever as suas mensagens.

Esta é uma situação muito simples, mas já podes ver que a escolha dos relays aos quais desejas ligar-te pode ter um grande impacto em quem e te que verá quando usares o Nostr.

§ Eventos

Os eventos são o único tipo de objeto na rede Nostr. Cada objeto de evento tem um tipo, que indica que tipo de evento é (que tipo de ação um utilizador pode realizar ou que tipo de mensagem pode receber).

Aqui está o aspeto de um evento do tipo 1 (o tipo 1 é para notas de texto curto, ou seja, algo semelhante a um tweet no Twitter):

{
    "id": "4376c65d2f232afbe9b882a35baa4f6fe8667c4e684749af565f981833ed6a65",
    "pubkey": "6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93",
    "created_at": 1673347337,
    "kind": 1,
    "tags": [
        ["e", "3da979448d9ba263864c4d6f14984c423a3838364ec255f03c7904b1ae77f206"],
        ["p", "bf2376e17ba4ec269d10fcc996a4746b451152be9031fa48e74553dde5526bce"]
    ],
    "content": "Jardins murados tornaram-se prisões, e o Nostr é o primeiro passo para derrubar as paredes da prisão.",
    "sig": "908a15e46fb4d8675bab026fc230a0e3542bfade63da02d542fb78b2a8513fcd0092619a2c8c1221e581946e0191f2af505dfdf8657a414dbca329186f009262"
}
  • O campo id indica o ID do evento.
  • O campo pubkey indica a chave pública do utilizador que enviou o evento.
  • O campo created_at indica quando o evento foi publicado.
  • O campo kind indica que tipo de evento é.
  • O campo tags informa sobre as etiquetas do evento. Estas são usadas para criar ligações, adicionar conteúdo multimédia e mencionar outros utilizadores ou eventos.
  • O campo content fornece o conteúdo do evento. Neste caso, é uma mensagem de texto curta.
  • O campo sig é a assinatura que os clientes usam para verificar que o utilizador com esta chave pública enviou efetivamente este evento na data especificada.

Tipos de eventos

Esta é uma lista dos tipos de Eventos atuais. A lista mais atualizada pode ser sempre encontrada em Repositório 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

Etiquetas Padronizadas

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

As Possibilidades de Implementação do Nostr, ou NIPs, existem para documentar o que DEVE, o que DEVERIA e o que PODE ser implementado pelo software cliente e pelos relays compatíveis com o Nostr. Os NIPs são os documentos que descrevem como o protocolo Nostr funciona.

Porquê que os NIPs são importantes?

O Nostr é descentralizado e não é propriedade de um serviço centralizado (como o Twitter). Isso significa que a direção do protocolo depende de todos nós. Podemos sugerir e advogar por mudanças e oferecer feedback sobre as ideias sugeridas por outros.

Fazer parte ativa da comunidade dá-te uma voz e um voto no rumo da rede. Os NIPs publicados no repositório principal já foram aprovados. Adicionar novas ideias é feito através de Pull Requests nesse repositório.

Onde posso encontrar os NIPs?

Pode ver todos os NIPs atuais no repositório Nostr NIP.