Le protocole Nostr

Il s'agit d'une vue d'ensemble du protocole Nostr avec des détails sur les types d'événements et le fonctionnement des possibilités d'implémentation de Nostr (NIP).

§ Nostr au plus haut niveau

  • Le réseau Nostr se compose de deux éléments principaux : clients et relais.
    • Les clients sont l’interface que les utilisateurs utilisent pour lire et écrire des données dans les relais. Dans le contexte des médias sociaux, il s’agit de l’application web ou mobile de Twitter. C’est un client qui vous permet de lire et d’écrire des données dans la base de données centralisée de Twitter.
    • Les relais sont comme des bases de données (bien qu’ils fassent bien plus que stocker des données). Ils permettent aux clients de leur envoyer des données et de les stocker dans une base de données. Les clients peuvent ensuite lire les données des relais pour les montrer aux utilisateurs.
  • Chaque utilisateur est identifié par une clé publique. Chaque événement (par exemple, un message que vous publiez, une mise à jour de votre liste d’abonnés, etc. Les clients valident ces signatures pour s’assurer qu’elles sont correctes.
  • Les clients récupèrent des données auprès des relais et publient des données vers les relais. Les relais sont presque toujours choisis par l’utilisateur. Les relais n’ont pas besoin de communiquer entre eux, mais ils pourraient le faire à l’avenir.
  • Par exemple, pour mettre à jour votre profil, il vous suffit de demander à votre client d’envoyer un événement de type 0 aux relais que vous souhaitez utiliser. Les relais stockeront alors cet événement.
  • Au démarrage, votre client demande des données aux relais que vous lui avez indiqués. Vous pouvez filtrer ces données pour n’afficher que les événements des utilisateurs que vous suivez ou vous pouvez demander à tout le monde d’afficher ces données.
  • Il existe de nombreux types d’événements. Les événements peuvent contenir toutes sortes de données structurées, et les structures les plus utilisées trouvent leur place dans les Nostr Implementation Possibilities (NIPs - normes de protocole auxquelles tout le monde adhère) afin que tous les clients et relais puissent les gérer de manière transparente.
  • Les données que vous pouvez voir sur Nostr dépendent entièrement des relais auxquels vous décidez de vous connecter. Voir le diagramme de réseau ci-dessous pour plus d’informations.

Architecture

Diagramme du réseau Nostr

Vous pouvez voir dans le diagramme ci-dessus que nous avons 3 relais et 3 utilisateurs. Chacun des utilisateurs se connecte à Nostr avec un client différent (et sur une plateforme différente).

Étant donné les lectures et les écritures dans le diagramme :

  • Bob peut voir tous les messages d’Alice, mais ne peut rien voir de Mary (et ne sait même pas qu’elle existe).
  • Alice peut voir tous les messages de Bob, mais ne peut rien voir de Mary (et ne sait même pas qu’elle existe).
  • Marie peut voir tous les messages de Bob et d’Alice. En effet, bien qu’elle n’écrive qu’au relais 3, elle lit à partir du relais 2, où Bob et Alice écrivent leurs messages.

Il s’agit d’une situation très simplifiée, mais vous pouvez déjà constater que le choix des relais auxquels vous souhaitez vous connecter peut avoir un impact important sur qui et ce que vous verrez lorsque vous utiliserez Nostr.

§ Evénements

Les événements sont le seul type d’objet sur le réseau Nostr. Chaque objet événement a un kind, qui indique de quel type d’événement il s’agit (quel type d’action un utilisateur pourrait entreprendre ou quels messages pourraient être reçus).

Voici à quoi ressemble un événement de type (“kind”) 1 (le type 1 correspond à des notes de texte courtes, par exemple un tweet sur 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"
}
  • Le champ id indique l’ID de l’événement
  • Le champ pubkey indique la clé publique de l’utilisateur qui a envoyé l’événement
  • Le champ created_at indique la date de publication de l’événement
  • Le champ kind nous indique de quel type d’événement il s’agit
  • Le champ tags nous renseigne sur les tags de l’événement. Ceux-ci sont utilisés pour créer des liens, ajouter des médias et mentionner d’autres utilisateurs ou événements.
  • Le champ content nous donne le contenu de l’événement. Dans le cas présent, il s’agit d’un texte court.
  • Le champ sig est la signature que les clients utilisent pour vérifier que l’utilisateur avec cette pubkey a bien envoyé cet événement à la date spécifiée.

Types d’événements

Il s’agit d’une liste des types d’événements actuels. La liste la plus récente peut toujours être trouvée sur le [Nostr NIPs repository] (https://github.com/nostr-protocol/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 standardisés

nom valeur autre paramètre 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

Une “Nostr Implementation Possibility”, ou NIP en abrégé, existe pour documenter ce qui DOIT, ce qui DEVRAIT et ce qui PEUT être implémenté par les logiciels relais et clients compatibles avec Nostr. Les NIP sont les documents qui décrivent le fonctionnement du protocole Nostr.

Pourquoi devrais-je m’intéresser aux NIP ?

Nostr est décentralisé et n’appartient pas à un service centralisé (comme Twitter). Cela signifie que l’orientation du protocole dépend de nous tous et toutes ! Nous pouvons suggérer et préconiser des changements et donner notre avis sur les idées suggérées par d’autres.

En participant activement à la communauté, vous avez votre mot à dire sur l’orientation du réseau. Les NIPs publiés dans le dépôt principal sont déjà approuvés. L’ajout de nouvelles idées se fait par le biais d’une “Pull Request” sur ce dépôt.

Où puis-je trouver les NIPs ?

Vous pouvez consulter tous les NIPs actuels dans le Nostr NIP repo.