2022-07-28 03:08:40 +08:00
Jami distributed network
========================
2019-06-15 23:46:20 +08:00
### Connectivity
Jami relies on a [distributed
network](tutorials/Jami-distributed-network), that brings multiple
advantages when compared to federated networks:
- No point of failure,
- More resilient to censorship,
- Do not depend on anything other than its users,
- Trust amongst nodes is not necessary.
2022-07-29 04:02:16 +08:00

2019-06-15 23:46:20 +08:00
This network forms a Distributed Hash Table (DHT)
The core problem of distributed communication systems is peer
connectivity, Jami achieves it through two elements:
- Encrypted announcements on DHT,
- Use of standard protocols for NAT hole punching.
2019-02-12 03:46:19 +08:00
Jami is built on two distinct distributed networks:
2018-05-17 07:03:24 +08:00
- the OpenDHT kademlia network to provide distributed connectivity
establishment and message distribution,
2019-02-12 03:46:19 +08:00
- the JamiNS blockchain to provide distributed name registration.
2018-05-17 07:03:24 +08:00
The OpenDHT network
-------------------
See
[<https://github.com/savoirfairelinux/opendht> ](https://github.com/savoirfairelinux/opendht )
for more information about OpenDHT, which provides a distributed
key-value datastore for connectivity establishment (with ICE) and
2019-02-12 03:46:19 +08:00
message distribution in Jami.
2018-05-17 07:03:24 +08:00
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.
2019-02-12 03:46:19 +08:00
Jami clients use a persistent node cache to reconnect to the network
2018-05-17 07:03:24 +08:00
after a first session. A configurable, known, stable "bootstrap" node is
used for the first connection or if cached nodes don't answer.
2019-12-14 06:04:24 +08:00
Jami clients currently use bootstrap.jami.net:4222 as the default
2018-05-17 07:03:24 +08:00
(configurable) bootstrap node and network ID 0 (the default, public
OpenDHT network).
### Contribute to the OpenDHT network
2019-02-12 03:46:19 +08:00
Every Jami account runs an OpenDHT node, contributing to the network and
allowing Jami to scale.
2018-05-17 07:03:24 +08:00
2019-02-12 03:46:19 +08:00
Jami users can have full independence by running their own stable
OpenDHT node and configure it as a bootstrap node in Jami, while helping
2018-05-17 07:03:24 +08:00
to improve stability, robustness and resilience for every user of the
public OpenDHT network.
A standalone node can be run using the [dhtnode
utility](https://github.com/savoirfairelinux/opendht/wiki/Running-a-node-with-dhtnode)
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.
2019-02-12 03:46:19 +08:00
The JamiNS blockchain
2018-05-17 07:03:24 +08:00
---------------------
2019-02-12 03:46:19 +08:00
The JamiNS blockchain is experimental and its architecture is expected
2018-05-17 07:03:24 +08:00
to evolve.
2019-02-12 03:46:19 +08:00
Jami clients don't run blockchain nodes themselves but rather
communicate with a JamiNS server using HTTP for name registration and
2018-05-17 07:03:24 +08:00
query, with a REST API. This is because the resources needed to run a
blockchain node are too high for most end-users.
2019-02-12 03:46:19 +08:00
The nameserver can be configured by-account in Jami, allowing to connect
Jami clients to various more or less centralized user directories.
2018-05-17 07:03:24 +08:00
2019-02-12 03:46:19 +08:00
### Contribute to the JamiNS blockchain
2018-05-17 07:03:24 +08:00
2024-12-14 11:13:30 +08:00
The default Jami name service is ns.jami.net, provided by Savoir-faire Linux Inc.,
connected to an Ethereum blockchain node; the goal being to give
2018-05-17 07:03:24 +08:00
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
2019-02-12 03:46:19 +08:00
transaction fee needed to register their username in Jami.
2018-05-17 07:03:24 +08:00
Code of the Ethereum contract, the blockchain genesis file, and the
NodeJS module (HTTP server) can be found here :
2024-05-15 00:52:46 +08:00
[1 ](https://git.jami.net/savoirfairelinux/jami-nameservice )
2019-05-21 22:41:52 +08:00
### Running a Jami Node
#### Pre-requisites:
1. Geth 1.8.23+ (download from [HERE ](https://geth.ethereum.org/downloads/ ))
2024-05-15 00:52:46 +08:00
2. Jami genesis file (download from [HERE ](https://git.jami.net/savoirfairelinux/jami-nameservice/blob/master/instructions/genesis.json ))
2019-05-21 22:41:52 +08:00
#### Joining the Jami Network
The process of joining the Jami network is similar to the process of joining a regular ethereum network with the difference that the genesis file is used to initialize the data directory.
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
* Example for MacOS (/Users/username/jamichain)
* Example for Linux (/home/username/jamichain)
* Example for Windows (C:\Users\username\jamichain)
2024-05-15 00:52:46 +08:00
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:
2019-05-21 22:41:52 +08:00
```
geth --datadir=/home/username/jamichain --syncmode=full --networkid 1551 --bootnodes "enode://11ba6d3bfdc29a8afb24dcfcf9a08c8008005ead62756eadb363523c2ca8b819efbb264053db3d73949f1375bb3f03090f44cacfb88bade38bb6fc2cb3d890a5@173.231.120.228:30301" console
```
2022-07-28 03:08:40 +08:00
This will start a geth daemon with an attached console which is now syncing with Jami's network.