Join Nostr
2026-10-31 01:20:59 UTC

tokio on Nostr: Um NIP para contar visitas, bem pensado. ...

Um NIP para contar visitas, bem pensado.

Quem escreve quer saber se está sendo lido. Não por vaidade, mas porque é assim que se decide o próximo texto, o melhor horário para publicar ou se aquele tema merece continuação e claro, se continua a escrever. Nas plataformas centralizadas, essa resposta vem pronta. No Nostr, até hoje, não existia um jeito comum de fazer.

Hoje, cada cliente que quer mostrar visualizações conta sozinho, no próprio servidor e do próprio jeito. O resultado é um número diferente em cada app. Nenhum deles é verificável, e todos somem se o app sair do ar.

Por isso propus o NIP-F8, um contador de visitas no relay:

Como funciona

1. O cliente avisa que houve uma visita.\ Ao abrir um artigo, o app envia ao relay um evento efêmero, de kind 20918, com uma tag a apontando para o conteúdo. O relay não guarda o evento, só conta.

2. O relay conta com regras públicas. Uma visita entra na conta da hora cheia (UTC) apenas se o visitante não é o autor e se a mesma chave e o mesmo IP ainda não visitaram aquele conteúdo naquela hora. O relay responde OK sempre, para ninguém sondar quem já foi contado.

3. O relay publica só o resultado, assinado. Ele mantém um contador por conteúdo e por hora e publica eventos de kind 30918, assinados com a própria chave: um com o total diário, hora a hora, e outro com o total geral.

Privacidade: o relay só entrega os eventos 30918 a uma conexão autenticada pelo NIP-42 com a chave do autor. Ninguém mais vê os seus números.

Confiança: o relay anuncia a chave de assinatura no campo self do NIP-11. O cliente ignora estatísticas assinadas por qualquer outra chave.

Instalando no seu relay

A implementação é uma branch do nostr-rs-relay e roda com SQLite. Para compilar:

git clone -b feat/visit-counter https://github.com/robersonfox/nostr-rs-relay
cd nostr-rs-relay
cargo build --release

O relay assina as estatísticas com uma chave própria, e sem ela o contador não liga. Qualquer chave Nostr serve, em hex ou nsec; para gerar uma nova:

openssl rand -hex 32

No config.toml, ligue a autenticação NIP-42 e o contador:

[authorization]
nip42_auth = true

[visits]
enabled = true
secret_key = "<chave gerada acima>"

# Se o relay estiver atrás de um proxy, informe o cabeçalho com o IP real:
[network]
remote_ip_header = "cf-connecting-ip"

Ao subir, o relay migra o banco sozinho e passa a anunciar a chave no NIP-11:

curl -s -H 'Accept: application/nostr+json' https://relay.exemplo.com/ | jq .self

Como ajudar

  • Desenvolvedores de clientes: enviem o evento 20918 ao abrir um artigo, como no primeiro exemplo.
  • Operadores de relay: instalem a branch e testem.
  • Escritores: peçam isso aos apps que vocês usam.
  • Todos: comentem e apoiem a proposta no PR #2532.

Métricas de leitura são uma das razões pelas quais escritores continuam presos às plataformas centralizadas. Se o Nostr quer ser a casa de quem escreve, precisa oferecer isso de um jeito aberto: um número que qualquer cliente pode pedir, que qualquer relay pode implementar e que pertence só a quem escreveu.

​‌‍⁠​‌‍⁠Venha fazer parte do The Hakon, o maior blog NOSTR de língua portuguesa