Photo by Eelco Böhtlingk on Unsplash
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.
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
# 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