Skip to content
Snippets Groups Projects
Commit 5aca908a authored by ovari's avatar ovari
Browse files

jami-distributed-network.md: nameserver → name server

Change-Id: Iab781b8a96a32c81151af79f048075f210d6781f
parent 143def9f
Branches
No related tags found
No related merge requests found
...@@ -2,54 +2,46 @@ ...@@ -2,54 +2,46 @@
## Connectivity ## Connectivity
Jami relies on a distributed network, that brings multiple Jami relies on a distributed network, which brings multiple advantages when compared to federated networks:
advantages when compared to federated networks:
- No point of failure, * No point of failure,
- More resilient to censorship, * More resilient to censorship,
- Do not depend on anything other than its users, * Do not depend on anything other than its users,
- Trust amongst nodes is not necessary. * Trust amongst nodes is not necessary.
![Network topographies](https://git.jami.net/savoirfairelinux/jami-project/uploads/9b725e440c2705a2a3c4d0a3df092066/Network-topo.png) ![Network topographies](https://git.jami.net/savoirfairelinux/jami-project/uploads/9b725e440c2705a2a3c4d0a3df092066/Network-topo.png)
This network forms a Distributed Hash Table (DHT) This forms a Distributed Hash Table (DHT) network.
The core problem of distributed communication systems is peer The core problem of distributed communication systems is peer connectivity.
connectivity, Jami achieves it through two elements: Jami achieves it through two elements:
- Encrypted announcements on DHT, * Encrypted announcements on the DHT network,
- Use of standard protocols for NAT hole punching. * Use of standard protocols for NAT hole punching.
Jami is built on two distinct distributed networks: Jami is built on two distinct distributed networks:
- the OpenDHT kademlia network to provide distributed connectivity * the OpenDHT kademlia network to provide distributed connectivity establishment and message distribution,
establishment and message distribution, * the JamiNS blockchain to provide distributed name registration.
- the JamiNS blockchain to provide distributed name registration.
## The OpenDHT network ## The OpenDHT network
See ```{seealso}
[<https://github.com/savoirfairelinux/opendht>](https://github.com/savoirfairelinux/opendht) Visit the <https://github.com/savoirfairelinux/opendht> page for more information about OpenDHT.
for more information about OpenDHT, which provides a distributed OpenDHT provides a distributed key-value datastore for connectivity establishment (with ICE) and message distribution in Jami.
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 An OpenDHT network can be joined by knowing about any node already connected to the network.
connected to the network. This node will then share its knowledge about This node will then share its knowledge about other nodes on the network.
other nodes on the network.
Jami clients use a persistent node cache to reconnect to the network Jami clients use a persistent node cache to reconnect to the network after a first session.
after a first session. A configurable, known, stable "bootstrap" node is A configurable, known, stable "bootstrap" node is used for the first connection or if cached nodes don't answer.
used for the first connection or if cached nodes don't answer.
Jami clients currently use bootstrap.jami.net:4222 as the default Jami clients currently use bootstrap.jami.net:4222 as the default (configurable) bootstrap node and network ID 0 (the default, public OpenDHT network).
(configurable) bootstrap node and network ID 0 (the default, public
OpenDHT network).
### Contribute to the OpenDHT network ### Contribute to the OpenDHT network
Every Jami account runs an OpenDHT node, contributing to the network and Every Jami account runs an OpenDHT node, contributing to the network and allowing Jami to scale.
allowing Jami to scale.
Jami users can have full independence by running their own stable Jami users can have full independence by running their own stable
OpenDHT node and configure it as a bootstrap node in Jami, while helping OpenDHT node and configure it as a bootstrap node in Jami, while helping
...@@ -61,22 +53,23 @@ utility](https://github.com/savoirfairelinux/opendht/wiki/Running-a-node-with-dh ...@@ -61,22 +53,23 @@ utility](https://github.com/savoirfairelinux/opendht/wiki/Running-a-node-with-dh
included with OpenDHT. dhtnode doesn't persist any data and has a included with OpenDHT. dhtnode doesn't persist any data and has a
default in-memory storage limit of 8 MiB. default in-memory storage limit of 8 MiB.
Stable community-run DHT nodes will be added to the default bootstrap Stable community-run DHT nodes will be added to the default bootstrap server
list at the request of their owner, as more bootstrap nodes means a more list at the request of their owner, as more bootstrap nodes means a more
resilient, independent network. resilient, independent network.
```{note}
To add a community-run DHT node to the default bootstrap server list, please email <contact@jami.net>.
```
## The JamiNS blockchain ## The JamiNS blockchain
The JamiNS blockchain is experimental and its architecture is expected The JamiNS blockchain is experimental and its architecture is expected to evolve.
to evolve.
Jami clients don't run blockchain nodes themselves but rather 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.
communicate with a JamiNS server using HTTP for name registration and This is because the resources needed to run a blockchain node are too high for most end-users.
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 The name server is set at the account level.
Jami clients to various more or less centralized user directories. This enables the Jami client to connect simultaneously to multiple user directories.
### Contribute to the JamiNS blockchain ### Contribute to the JamiNS blockchain
...@@ -87,15 +80,14 @@ node and HTTP service, mine some Ether, and use it to pay the ...@@ -87,15 +80,14 @@ node and HTTP service, mine some Ether, and use it to pay the
transaction fee needed to register their username in Jami. transaction fee needed to register their username in Jami.
Code of the Ethereum contract, the blockchain genesis file, and the Code of the Ethereum contract, the blockchain genesis file, and the
NodeJS module (HTTP server) can be found here : NodeJS module (HTTP server) can be found [here](https://git.jami.net/savoirfairelinux/jami-nameservice).
[1](https://git.jami.net/savoirfairelinux/jami-nameservice)
### Running a Jami Node ### Running a Jami Node
#### Pre-requisites: #### Prerequisites
1. Geth 1.8.23+ (download from [HERE](https://geth.ethereum.org/downloads/)) 1. Geth 1.8.23+ (download from [here](https://geth.ethereum.org/downloads/))
2. Jami genesis file (download from [HERE](https://git.jami.net/savoirfairelinux/jami-nameservice/blob/master/instructions/genesis.json)) 2. Jami genesis file (download from [here](https://git.jami.net/savoirfairelinux/jami-nameservice/blob/master/instructions/genesis.json))
#### Joining the Jami Network #### Joining the Jami Network
...@@ -104,8 +96,8 @@ The process of joining the Jami network is similar to the process of joining a r ...@@ -104,8 +96,8 @@ The process of joining the Jami network is similar to the process of joining a r
1. Download the Jami genesis file from the Jami github repo 1. Download the Jami genesis file from the Jami github repo
2. Create a directory on your computer which you will use to store the Jami blockchain data 2. Create a directory on your computer which you will use to store the Jami blockchain data
* Example for MacOS (/Users/username/jamichain) * Example for GNU/Linux (/home/username/jamichain)
* Example for Linux (/home/username/jamichain) * Example for macOS (/Users/username/jamichain)
* Example for Windows (C:\Users\username\jamichain) * Example for Windows (C:\Users\username\jamichain)
3. Use geth to initialize the directory you created in (2) by running ```./geth --datadir /home/username/jamichain init genes is.json ``` 3. Use geth to initialize the directory you created in (2) by running ```./geth --datadir /home/username/jamichain init genes is.json ```
4. You can now start geth with the command-line options you need and specifying one of Jami's bootnodes as follows: 4. You can now start geth with the command-line options you need and specifying one of Jami's bootnodes as follows:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment