Démarrer son relai Nostr sur Nym

Nostr (Notes and Other Stuff Transmitted by Relays) est un nouveau protocole simple, ouvert et résistant à la censure.

·

4 min read

Pour comprendre la volonté d'avoir des relais Nostr qui fonctionnent sur le mixnet retrouvez l'article Nostr x Nym qui détail nos motivations.

Introduction

Le fait d'avoir un relai Nostr qui fonctionne à travers le mixnet va permettre de protéger les utilisateurs comme par exemple que leur fournisseur d'accès Internet puissent savoir qu'ils utilisent Nostr, à quelle fréquence et vers quel relai, ou encore d'avoir le risque de vous voir demander toutes les adresses IP qui contactées votre serveur. Le système proposé ici est fonctionnel avec tous les relais actuels, il est encore en phase de développement, donc des bugs ne sont pas exclus.

Voici l'architecture finale résumée

Plusieurs composants sont nécessaires à installer pour arriver à cela:

  • Un relai, une liste très complète est disponible ici. Pour cet article, nostr-rs-relay sera utilisé car il est très simple, utilise SQLite et tourne facilement sur Docker

  • nym-client, qui va faire le lien entre votre relai et le mixnet

  • nostr-nym, pour "traduire" les requêtes reçu du mixnet et les envoyer au relai

Relai

Si Docker n'est pas installé vous pouvez retrouver les informations ici: https://docs.docker.com/get-docker/. Docker n'est pas indispensable pour qu'un relai fonctionne mais simplifie grandement les explications

Il faut maintenant démarrer le relai

mkdir data
docker run -it -p 7000:8080 \
  --mount src=$(pwd)/data,target=/usr/src/app/db,type=bind \
  scsibug/nostr-rs-relay

Si tout se passe bien, voilà la sortie qui devrait apparaitre. Le relai est maintenant démarré

Nym-client

Le nym-client est le composant qui va permettre de communiquer avec le mixnet

Le téléchargement se passe sur Github: https://github.com/nymtech/nym/releases, il faut rechercher une release appelé "Nym Binaries v1.1.x". Dans cet exemple, la version [Nym Binaries v1.1.14](https://github.com/nymtech/nym/releases/tag/nym-binaries-v1.1.14) est utilisé

# Download the nym-client and give exec permission
wget https://github.com/nymtech/nym/releases/download/nym-binaries-v1.1.14/nym-client -O nym-client && chmod +x nym-client

# Init the nym-client
./nym-client init --id nostr-relay --latency-based-selection

# Start the nym-client
./nym-client run --id nostr-relay

Si tout s'est correctement le nym-client devrait maintenant afficher son nym-client id. C'est cet élément qui va permettre d'identifier le relai et l'atteindre dans le mixnet

La fenêtre doit rester ouverte

Nostr-nym

C'est cet élément qui va faire le lien entre le mixnet et le relai. Il va se charger d'établir une connexion avec le nym-client, écouter les messages envoyé par les clients, transmettre les evénements Nostr et renvoyer la réponse ou notifier les clients.

Pour plus de flexibilité, pipenv est utilisé. Pour l'installer pip est nécessaire: pip install pipenv

# clone the repo
git clone https://github.com/notrustverify/nostr-nym
cd nostr-nym

# start pipenv shell and install dependencies
pipenv shell
pipenv install

Résultat final, la fenêtre doit rester ouverte

Le relai est maintenant accessible via le mixnet, dans cet exemple c'est à l'adresse (=nym-client id) 5LhfbB9oGFEx4pTEUJ514LjCRuTr6zHq3kYmr45DeyAw.FfzyFK1GTAkRfpeKYMeQX3Ld1ascJUujXiHHozqunv6w@CfWcDJq8QBz6cVAPCYSaLbaJEhVTmHEmyYgQ6C5GdDW9 qu'il peut être atteint

La section suivante explique comment tester le relai, un client nostr simple à été développé.

Test

Maintenant que tous les éléments sont en place, il est possible de tester que la création de note et la souscription à des nouveaux fonctionne.

Dans le dépôt précédemment cloné, un dossier comporte un client Nostr léger compatible avec le mixnet. Le démarrage d'un autre nym-client est nécessaire

# Init the nym-client
./nym-client init --id nostr-client --latency-based-selection --port 1978

# Start the nym-client
./nym-client run --id nostr-client
Un relai public est disponible sur le mixnet pour tester facilement le fonctionnement
2gc9QidpXs4YGKmphinsDhWTHxdy2TZgWYWz2VenN5jL.dkwwJqS1zXa9BuPAFdniRN2HxFvAbTybAmrUHGAT5KV@2BuMSfMW3zpeAjKXyKLhmY4QW1DXurrtSPEJ6CjX3SEh
# navigate to nostr client
cd nostr-nym/client

# start pipenv shell and install dependencies
pipenv shell
pipenv install

Publication d'un nouvel événement

python main.py --cmd text-note --message "Hello world (from the Nym mixnet)" --relay <nym-client of relay started before> --nym-client ws://127.0.0.1:1978

Souscription aux nouveaux événements

python main.py --cmd subscribe --relay <nym-client id of relay started before> --nym-client ws://127.0.0.1:1978

Filtrage des événements

python main.py --cmd filter --authors <npub to filter> --relay <nym-client id of relay started before> --nym-client ws://127.0.0.1:1978

Conclusion

Le relai est maintenant accessible via le mixnet. C'est un premier pas vers plus de vie privée et de protection pour les relais.

Un futur article présentera les bénéfices de mettre en place une telle infrastructure pour Nostr ainsi que l'intégration du nym-client dans un client existant comme iris.to, snort.social, damus sur iOS ou encore Amethyst sur Android

Ressources:

Nostr-nym

Nym