Ce réseau forme une table de hachage distribuée (DHT).
Le problème central des systèmes de communication distribués est la connectivité entre pairs.
Jami y parvient grâce à deux éléments :
- Annonces cryptées sur la DHT,
- L'utilisation de protocoles standards pour le "hole punching" NAT.
Jami est construit sur deux réseaux distribués distincts :
- le réseau OpenDHT kademlia pour fournir une connectivité distribuée, l'établissement de la connectivité distribuée et la distribution des messages,
- la blockchain JamiNS pour assurer l'enregistrement distribué des noms.
Le réseau OpenDHT
-------------------
Voir
[<https://github.com/savoirfairelinux/opendht>](https://github.com/savoirfairelinux/opendht) pour plus d'informations sur OpenDHT, qui fournit une base de données distribuée pour l'établissement de la connectivité (avec ICE) et la distribution de messages dans Jami.
Un réseau OpenDHT peut être rejoint en connaissant un nœud déjà connecté au réseau. Ce nœud partagera ensuite ses connaissances avec
d'autres nœuds sur le réseau.
Les "clients Jami" (le logiciel jami installé sur l'appareil de l'utilisateur) utilisent un cache de nœud persistant pour se reconnecter au réseau après une première session. Un nœud "bootstrap" configurable, connu et stable est utilisé pour la première connexion ou si les nœuds en cache ne répondent pas.
Les clients Jami utilisent actuellement bootstrap.jami.net:4222 comme nœud d'amorçage par défaut (configurable), et l'ID réseau 0 (le réseau OpenDHT public par défaut).
### Contribuer au réseau OpenDHT
Chaque compte Jami fait tourner un noeud OpenDHT, contribuant au réseau et permettant à Jami de s'adapter.
Les utilisateurs de Jami peuvent avoir une indépendance totale en faisant tourner leur propre nœud OpenDHT stable et le configurer comme un nœud de démarrage dans Jami, tout en aidant à améliorer la stabilité, la robustesse et la résilience du réseau pour chaque utilisateur du réseau public OpenDHT.
Un noeud autonome peut être lancé en utilisant l'utilitaire [dhtnode
utility](https://github.com/savoirfairelinux/opendht/wiki/Running-a-node-with-dhtnode) inclus avec OpenDHT. dhtnode ne conserve aucune donnée et a une limite de stockage en mémoire par défaut de 8 MiB.
Les noeuds DHT stables gérés par la communauté seront ajoutés à la liste d'amorçage par défaut à la demande de leur propriétaire, car plus de nœuds d'amorçage signifie un réseau plus résistant, résilient et indépendant.
La blockchain JamiNS
---------------------
La blockchain JamiNS est expérimentale et son architecture est appelée à évoluer.
Les clients Jami ne gèrent pas eux-mêmes les nœuds de la blockchain, mais ils communiquent avec un serveur JamiNS en utilisant le protocole HTTP pour l'enregistrement et l'interrogation, avec une API REST. Cela est dû au fait que les ressources nécessaires pour faire fonctionner un
nœud de blockchain sont trop élevées pour la plupart des utilisateurs finaux.
Le serveur de noms peut être configuré par compte dans Jami, ce qui permet de connecter les clients de Jami à divers systèmes plus ou moins complexes, à divers répertoires d'utilisateurs plus ou moins centralisés.
### Contribuer à la blockchain JamiNS
Le service de nom par défaut de Jami est ns.jami.net, fourni par Savoir-faire Linux, connecté à un nœud de blockchain Ethereum ; le but étant de donner à chacun la possibilité (s'il le souhaite) d'exécuter son propre nœud de blockchain et service HTTP, extraire un "Ether" et de l'utiliser pour payer les frais de transaction nécessaires afin d'enregistrer leur nom d'utilisateur dans Jami.
Code du contrat Ethereum, du fichier de genèse de la blockchain et du module NodeJS (serveur HTTP) peuvent être trouvés ici :
1. Geth 1.8.23+ (à télécharger depuis [ICI](https://geth.ethereum.org/downloads/))
2. Fichier Jami genesis (à télécharger à partir de [ICI](https://github.com/savoirfairelinux/ring-nameservice/blob/master/instructions/genesis.json))
#### Rejoindre le réseau Jami
Le processus d'adhésion au réseau Jami est similaire au processus d'adhésion à un réseau ethereum ordinaire, à la différence que le fichier genesis est utilisé pour initialiser le répertoire de données.
1. Téléchargez le fichier genesis de Jami depuis le dépôt github de Jami.
2. Créez un répertoire sur votre ordinateur que vous utiliserez pour stocker les données de la blockchain Jami.
* Exemple pour MacOS (/Users/username/jamichain)
* Exemple pour Linux (/home/username/jamichain)
* Exemple pour Windows (C:\Users/username/jamichain)
3. Utilisez geth pour initialiser le répertoire que vous avez créé en (2) en exécutant ``./geth --datadir /home/username/jamichain init genes is.json ```
4. Vous pouvez maintenant lancer geth avec les options de ligne de commande dont vous avez besoin et en spécifiant l'un des bootnodes de Jami comme suit :