Nostr pour le stockage hors chaîne

Il y a environ un mois, un post présentait trop rapidement Nostr.

Ce protocole a des caractéristiques qui, pour moi, en font un bon candidat pour les usages que tu cites (commentaires de transactions et messagerie instantanées).

Nostr en quelques lignes

Il se base sur des “events”, qui sont simplement des JSON signés. Les events peuvent être envoyés à plusieurs noeuds Nostr. Les events sont liés à la clef publique émettrice.

Les noeuds ne communiquent pas entre eux, c’est le client qui décide sur quel noeud il va chercher/publier un event.

La multiplicité des noeuds a à la fois le rôle de redondance de la donnée et de groupement par centres d’intérêts.

Il y a bien sûr un event de type “message”, qui peut contenir un sujet. Ceci remplit les deux cas d’usages : si on spécifie qu’un sujet au format ‘txc:<id_transaction>’ est un commentaire de transaction, alors on a d’un coup les commentaires de tx et la messagerie instantanée.

Les messages peuvent être chiffrés, naturellement, ce qui permettra d’avoir des commentaires de TX chiffrés.

Par ailleurs, le même protocole a des events destinés à:

  • publier un profil
  • échanger sur une marketplace
  • publier l’info “En général on trouvera mes events sur les noeuds X, Y, Z” (cet évènement est fait pour être envoyé à plein de noeuds pour qu’un tiers puisse retrouver les noeuds où un émetteur publie)

Et la modération ?

Il faut que je creuse un peu ce sujet. Les noeuds ne sont pas tenus d’accepter les events venant de n’importe où et n’importe qui. De ce que j’ai compris:

  • certains noeuds ont un modèle payant (je m’abonne pour pouvoir poster sur ce noeud)
  • d’autres demandent une PoW pour pouvoir poster un event chez eux
  • certains sont en accès libre
  • certains ont une whitelist (par ex. Nostr Relay relay.stoner.com - stoner : “for write access DM the admin”

Je suis persuadé que certains logiciels de noeuds ont un système de whitelist/blacklist par clef publique. Peut-être également des quotas par clef pub, mais j’en doute.

  • la whitelist pourrait être remplie
    • automatiquement avec les clefs pub de comptes Ğ1 avec un petit script auxiliaire
    • ou à la discrétion de l’admin
  • la blacklist pourrait être alimentée par l’administratrice du noeud

Le client peut également bloquer certaines clefs publiques, dans des cas de harcèlement par exemple.

Mais si les noeuds ne communiquent pas entre eux, comment on va indexer les commentaires de transaction ?

Justement : il ne me semble pas pertinent d’indexer tous les commentaires de transaction. Il faudrait avoir des noeuds Nostr spécifiques, surveillés par les indexeurs.

Si quelqu’un veut historiser un commentaire de transaction, il le publie sur ces noeuds pour que ce soit indexé.

S’il veut envoyer un commentaire “pour mémoire”, qui n’a pas vocation à durer très longtemps (genre “merci pour les carottes”) alors il peut le publier sur un noeud non indexé. Ceci peut permettre un (faible) niveau de confidentialité.

On a ainsi un système décentralisé qui permet l’indexation sur demande explicite de l’utilisateur.

J’aurais aimé explorer plus et monter mon noeud, mais mon temps est compté…

2 Likes

Je me permets de déplacer ce post qui a plus sa place dans la catégorie R&D que dans Migration board plutôt dédiée au suivi. Merci de nous aider à creuser, on est en pleine phase d’exploration pour les solutions de datapods v2. Nostr est sérieusement considéré (on en a parlé aux rml18), mais il nous manque actuellement des retours d’utilisateurs et de développeurs.

En lien avec NOSTR vs Duniter&césium

+

GitHub - servuscms/servus: Self-contained CMS & Personal Data Store je suis tombé sur ce projet dont la philosophie m’a plu

Si les nœuds sont isolés entre eux, alors perte d’un nœud signifie perte d’informations. Si la seule solution est pour le client de dupliquer ses données (commentaires, messages privés, profil) sur 3 nœuds, et de s’abonner à presque tous les nœuds existant en faisant leur travail de déduplication, ça semble coûteux.

Si ça fait comme Cesium+ sans la fédération, qu’est-ce qu’on y gagne ?

1 Like

La fédération des nœuds ne fait pas partie du protocole mais rien n’empêche d’en faire une implémentation. On peut écrire un système de copie similaire à celui de Cesium+ pour copier la donnée d’un “relais” à l’autre. Pour l’instant l’avantage n’est pas évident pour moi, si ce n’est qu’utiliser un format de message standardisé (similaire au json signé de C+ mais compatible avec d’autres apps). Mais j’imagine que ça permettrait plus de souplesse qu’un truc monolithique qui stocke tout, par exemple on pourrait séparer le stockage des commentaires de transaction, messages privés, profils, annonces… et construire des indexeurs spécifiques à une tâche, qu’ils soient basés sur elasticsearch, hasura, ou n’importe quoi d’autre.

Mais ça ne répond pas à un des points abordés aux rml18 qu’est la dépendances à des données blockchain (par exemple si on ne veut stocker des données que de comptes alimentés, ou de comptes membre, ou des commentaires de transaction existants, ou de comptes qui ont payé pour, ou…). Dans ce cas il faudra de toute façon un middleware.

PS : en fait on pourrait même implémenter du mail sans avoir à se taper la gestion IMAP/SMTP/authentification côté client. On bénéficierait de l’authentification par signature et de la lecture façon Nostr, et il n’y aurait qu’à implémenter SMTP côté serveur pour qu’il envoie un mail à l’adresse cible. Et donc niveau client, on choisirait juste des fonctionnalités (serveurs paramétrables en mode expert) et on serait redirigé vers les relais qui (comme dit plus haut) :

  • autorisent
    • les membres de la wot
    • les comptes avec au moins X Ǧ1
    • les comptes qui ont donné au moins X Ğ1 à une adresse cible
    • n’importe quelle adresse
  • fournissent le service
    • commentaires de transaction
    • messages privés
    • profils
    • annonces
    • modération côté serveur
    • SMTP, XMPP, Matrix, Mastodon, Peertube…
    • indexation de contenu
  • dupliquent la donnée
    • par backup “privées”
    • sur un autre relais public contrôlé par la même personne (relais de backup)
    • sur un autre relais public contrôlé par une autre personne (modération éventuellement différente)
1 Like