# Démarrer son relai Nostr sur Nym

Pour comprendre la volonté d'avoir des relais [Nostr](https://nostr.how) qui fonctionnent sur le mixnet retrouvez l'article [Nostr x Nym](https://hashnode.com/post/clg3dj0d90026nnnv44xbh0a0) 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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1680680079923/bdd9f2a5-658a-482f-9e55-1e22d03b7de2.jpeg?auto=compress,format&format=webp align="center")

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

* Un relai, une liste très complète est disponible [ici](https://github.com/aljazceru/awesome-nostr#relays). Pour cet article, [nostr-rs-relay](https://sr.ht/~gheartsfield/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/](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

```bash
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é

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1680857785360/e71dae05-dc7f-4c30-bf61-49cc7053eb1d.png align="center")

## 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](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](https://github.com/nymtech/nym/releases/tag/nym-binaries-v1.1.14)) est utilisé

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1680858054472/2cf7827d-70f9-4444-90c0-deaca3f33efd.png align="center")

```bash
# 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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1680862124591/d23a2dc6-5ac5-4236-987e-f0d58ecec946.png align="center")

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](https://pip.pypa.io/en/stable/installation/) est nécessaire: `pip install pipenv`

```bash
# 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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1680860438724/2e4e709c-9cc0-4599-86fc-001c05959637.png align="center")

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

```bash
# 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
```

<details data-node-type="hn-details-summary"><summary>Un relai public est disponible sur le mixnet pour tester facilement le fonctionnement</summary><div data-type="detailsContent">2gc9QidpXs4YGKmphinsDhWTHxdy2TZgWYWz2VenN5jL.dkwwJqS1zXa9BuPAFdniRN2HxFvAbTybAmrUHGAT5KV@2BuMSfMW3zpeAjKXyKLhmY4QW1DXurrtSPEJ6CjX3SEh</div></details>

```bash
# navigate to nostr client
cd nostr-nym/client

# start pipenv shell and install dependencies
pipenv shell
pipenv install
```

Publication d'un nouvel événement

```bash
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
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1680861642213/11ba748e-bf7c-4fba-a9e2-a0c84804aefe.png align="center")

Souscription aux nouveaux événements

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1680861709790/b3df1123-6808-4d3d-a05e-62464d13f762.png align="center")

Filtrage des événements

```bash
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
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1680861826888/e17e576c-80c3-4c9f-83de-f452582447e0.png align="center")

## 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](https://iris.to), [snort.social](https://snort.social), [damus sur iOS](https://damus.io/) ou encore [Amethyst sur Android](https://github.com/vitorpamplona/amethyst)

### Ressources:

**Nostr-nym**

* [https://github.com/notrustverify/nostr-nym/](https://github.com/notrustverify/nostr-nym/)
    
* [https://github.com/notrustverify/nostr-nym/tree/main/client](https://github.com/notrustverify/nostr-nym/tree/main/client)
    

**Nym**

* [https://nymtech.net/](https://nymtech.net/)
    
* [https://nymtech.net/docs/](https://nymtech.net/docs/)
    
* [https://nymtech.net/developers/](https://nymtech.net/developers/)
    

---

%%[footer-french]
