The main characteristic that differentiates Jami from other communication platforms is its distributed architecture. It allows users to safely communicate without having to rely on a third party to relay their messages through a central server. Instead, each device that is part of the network contributes by helping others establish a direct connection between them using OpenDHT (for more information on how this works, see this article). An important challenge that is caused by this design is the implementation of unique usernames.
Users are identified internally by Jami with a forty characters long string called a hash. This hash is different for every user but is very hard for humans to memorize. Usernames can be associated to the hash in order to increase the ease of use and security of Jami, by allowing users to recognize each other on the platform and to be aware of who they are talking to at all times.
We are aiming to keep Jami completely distributed, but usernames need to be managed by some sort of authority in order to make sure they remain unique and that there is no ambiguity on the hash that is associated with them. This is why we chose to rely on Ethereum blockchain smart contracts to handle Jami usernames. These smart contracts have the advantage of being able to handle the management of unique usernames while remaining distributed.
Blockchains are basically a list of records that are separated into a series of blocks linked to each other through cryptography. This list is distributed across multiple devices, called nodes, who each maintain a copy of it. Blockchains must rely on consensus mechanisms in order to make sure all nodes agree on the state of the list and the legitimacy of the changes that were made on it.
There currently is only one node on the blockchain that is maintained by us and all Jami devices have to connect to this node through our name server in order to create new Jami usernames or get information about them. This means that in theory, we could access the metadata of people who make requests to our name server. We don’t, but we want you to not have to trust us on this. In an effort to make Jami truly distributed, we want to give other people the opportunity to become a node maintainer on the Jami blockchain. This will allow anyone to create their own name server and make sure we don’t temper with the blockchain in any way.
For this reason, we recently made the switch from the proof of work (PoW) to the proof of authority (PoA) consensus mechanism. This change will allow us to give away some authority on the blockchain while preventing a potential attack that could compromise the name directory. In the future, we plan to switch again to the proof of stake (PoS) consensus mechanism because it provides more flexibility by allowing coin holders to exchange coins with each other. PoS is not yet implemented in Ethereum but we will make the switch as soon as possible when it is. If you are interested in maintaining your own node, please contact us and we will happily give you authority on the blockchain. We will soon publish documentation on how to create your own name server.
To contact us : firstname.lastname@example.org
By François Naggar-Tremblay