A NIP-73 define uma forma padrão de referenciar conteúdo externo dentro de eventos Nostr. Ela usa tags i para o próprio identificador e tags k para o tipo de identificador, para que clientes possam agrupar discussões em torno do mesmo livro, site, episódio de podcast, local, hashtag ou objeto de blockchain. A especificação atual está marcada como rascunho e opcional.

Como Funciona

Um evento que usa a NIP-73 inclui uma tag i com um identificador externo normalizado e uma tag k que nomeia a família do identificador. Os clientes podem consultar relays por um assunto exato por meio de i ou por uma família inteira por meio de k. A NIP-73 não adiciona nenhum kind de evento próprio. Comentários, resenhas e outros eventos carregam as tags.

Fragmento de tag, não um evento completo:

{
  "tags": [
    ["i", "isbn:9780765382030"],
    ["k", "isbn"]
  ]
}

Uma página web coloca sua URL normalizada em i e define k como web. A especificação cobre várias famílias de identificadores, incluindo:

  • URLs web normalizadas sem fragmento
  • ISBNs para livros
  • ISANs para filmes
  • DOIs
  • geohashes e códigos ISO 3166 de países ou subdivisões
  • GUIDs de feeds, episódios e publicadores de podcast
  • hashtags
  • identificadores de transações e endereços de blockchain

Regras de Normalização

A correspondência depende de strings idênticas, então a especificação define uma forma escrita para cada família. Exemplos da especificação:

  • geohashes usam geo:<value> e devem estar em minúsculas
  • códigos de países e subdivisões usam iso3166:<code> e devem estar em maiúsculas
  • ISBNs omitem hífens
  • DOIs ficam em minúsculas
  • URLs web descartam fragmentos
  • hashes de transações de blockchain usam hex em minúsculas

A normalização fixa como um único identificador é escrito. Ela não mescla aliases. ISBNs específicos de edição e URLs que se normalizam em strings diferentes continuam sendo identificadores separados, então a discussão sobre um mesmo livro ou artigo ainda pode se espalhar por vários valores i.

Dicas de URL

Uma tag i pode incluir uma dica de URL opcional como terceiro elemento do array, que é o segundo valor depois do nome da tag. Um cliente sem renderizador personalizado para aquele tipo de identificador pode usar a dica como link alternativo.

Fragmento de tag: ["i", "isbn:9780765382030", "<url-hint>"]

O autor escolhe a dica. Ela não faz parte da identidade, não prova propriedade e não nomeia um site canônico.

Confiança e Contexto

Dois eventos com o mesmo identificador acabam na mesma conversa, e o identificador compartilhado não estabelece nada além disso. Um evento assinado identifica seu autor. Ele não autentica o livro, o site ou o publicador do podcast que referencia, e não mostra quem os controla.

O significado de uma tag i depende do evento. Nos comentários da NIP-22, I/K maiúsculas marcam o escopo raiz e i/k minúsculas marcam o pai. Essa estrutura de thread vem da NIP-22, e a NIP-73 não define nenhum kind de comentário. A NIP-39 usa i para identidades externas em perfis, então nem toda tag i é um assunto NIP-73.

As Trusted Assertions da NIP-85 também podem ter como alvo identificadores NIP-73, como livros, sites, hashtags e locais.

Implementações

O nip73.rs do rust-nostr no commit 4c8099a interpreta prefixos conhecidos como um ExternalContentId tipado e transforma uma dica opcional em uma URL tipada. Ele escreve o terceiro elemento da tag apenas quando existe uma dica. Seus testes mantêm ISBNs com hífens: o parser remove o prefixo e armazena o restante sem aplicar a normalização da especificação, então o parsing tipado não garante strings canônicas. Ele mantém os IDs de cadeia fora da família, mapeando ethereum:100:tx:<hash> para ethereum:tx. Essa revisão não tem variante de país iso3166.

O DisplayExternalId.kt do Amethyst no commit 553f761 envia identificadores de geohash, hashtag e URL para exibições dedicadas e mostra outros tipos suportados como um chip de escopo genérico. Uma URL abre a rota de thread do próprio app para aquela página. Com as pré-visualizações desativadas, a renderização normal mostra um chip de link simples e não solicita pré-visualização. Com as pré-visualizações ativadas, buscar uma pré-visualização ausente pode contatar o site de destino. Nenhum dos arquivos mostra como uma versão lançada se comporta.


Fontes primárias:

Mencionado em:

Veja também: