jami-docs/tutorials/Jami-distributed-network.md

2.9 KiB

Jami is built on two distinct distributed networks:

  • the OpenDHT kademlia network to provide distributed connectivity establishment and message distribution,
  • the JamiNS blockchain to provide distributed name registration.

The OpenDHT network

See https://github.com/savoirfairelinux/opendht for more information about OpenDHT, which provides a distributed key-value datastore for connectivity establishment (with ICE) and message distribution in Jami.

An OpenDHT network can be joined by knowing about any node already connected to the network. This node will then share its knowledge about other nodes on the network.

Jami clients use a persistent node cache to reconnect to the network after a first session. A configurable, known, stable "bootstrap" node is used for the first connection or if cached nodes don't answer.

Jami clients currently use bootstrap.ring.cx:4222 as the default (configurable) bootstrap node and network ID 0 (the default, public OpenDHT network).

Contribute to the OpenDHT network

Every Jami account runs an OpenDHT node, contributing to the network and allowing Jami to scale.

Jami users can have full independence by running their own stable OpenDHT node and configure it as a bootstrap node in Jami, while helping to improve stability, robustness and resilience for every user of the public OpenDHT network.

A standalone node can be run using the dhtnode utility included with OpenDHT. dhtnode doesn't persist any data and has a default in-memory storage limit of 8 MiB.

Stable community-run DHT nodes will be added to the default bootstrap list at the request of their owner, as more bootstrap nodes means a more resilient, independent network.

The JamiNS blockchain

The JamiNS blockchain is experimental and its architecture is expected to evolve.

Jami clients don't run blockchain nodes themselves but rather communicate with a JamiNS server using HTTP for name registration and query, with a REST API. This is because the resources needed to run a blockchain node are too high for most end-users.

The nameserver can be configured by-account in Jami, allowing to connect Jami clients to various more or less centralized user directories.

Contribute to the JamiNS blockchain

The default Jami name service is ns.jami.net, provided by Savoir-faire Linux, connected to an Ethereum blockchain node; the goal being to give everyone the possibility (if they which so) to run their own blockchain node and HTTP service, mine some Ether, and use it to pay the transaction fee needed to register their username in Jami.

Code of the Ethereum contract, the blockchain genesis file, and the NodeJS module (HTTP server) can be found here : 1