Rede distribuída Jami

Conectividade

O Jami baseia-se numa rede distribuída, que apresenta várias vantagens em comparação com as redes federadas:

  • Nenhum ponto de falha,

  • Mais resistente à censura,

  • Não depende de nada para além dos seus utilizadores,

  • Não é necessária a confiança entre os nós.

Topografia da rede

Esta rede forma uma Tabela de Hash Distribuída (DHT)

O problema central dos sistemas de comunicação distribuídos é a conectividade entre pares, o Jami consegue-o através de dois elementos:

  • Anúncios encriptados no DHT,

  • Utilização de protocolos normalizados para a perfuração de NAT.

O Jami assenta em duas redes distribuídas distintas:

  • a rede OpenDHT kademlia para fornecer estabelecimento de conetividade distribuída e distribuição de mensagens,

  • a blockchain JamiNS para fornecer registo de nomes distribuídos.

A rede OpenDHT

Veja https://github.com/savoirfairelinux/opendht para mais informações sobre o OpenDHT, que fornece uma base de dados de valores-chave distribuída para o estabelecimento de conetividade (com ICE) e distribuição de mensagens no Jami.

Uma rede OpenDHT pode ser ligada através do conhecimento de qualquer nó já ligado à rede. Este nó irá então partilhar o seu conhecimento sobre outros nós na rede.

Os clientes Jami utilizam uma cache de nós persistente para se reconectarem à rede após uma primeira sessão. Um nó «bootstrap» configurável, conhecido e estável é utilizado para a primeira ligação ou se os nós em cache não responderem.

Os clientes Jami atualmente usam bootstrap.jami.net:4222 como o nó de bootstrap padrão (configurável) e o ID de rede 0 (a rede OpenDHT pública padrão).

Contribuir para a rede OpenDHT

Cada conta Jami executa um nó OpenDHT, contribuindo para a rede e permitindo que o Jami seja escalável.

Os utilizadores do Jami podem ter total independência, executando o seu próprio nó OpenDHT estável e configurando-o como um nó de arranque no Jami, enquanto ajudam a melhorar a estabilidade, robustez e resiliência para todos os utilizadores da rede pública OpenDHT.

Um nó independente pode ser executado usando o utilitário dhtnode incluído com o OpenDHT. O dhtnode não persiste quaisquer dados e tem um limite de armazenamento na memória predefinido de 8 MiB.

Os nós DHT estáveis geridos pela comunidade serão adicionados à lista de bootstrap por defeito a pedido do seu proprietário, uma vez que mais nós bootstrap significam uma rede mais resiliente e independente.

A blockchain JamiNS

A blockchain JamiNS é experimental e espera-se que a sua arquitetura evolua.

Os clientes Jami não executam eles próprios nós de blockchain, mas comunicam com um servidor JamiNS utilizando HTTP para registo e consulta de nomes, com uma API REST. Isto deve-se ao facto de os recursos necessários para executar um nó de blockchain serem demasiado elevados para a maioria dos utilizadores finais.

O servidor de nomes pode ser configurado por conta no Jami, permitindo ligar os clientes Jami a vários diretórios de utilizadores mais ou menos centralizados.

Contribuir para a blockchain JamiNS

O serviço de nomes padrão do Jami é o ns.jami.net, fornecido pela Savoir-faire Linux Inc., ligado a um nó de blockchain Ethereum; o objetivo é dar a todos a possibilidade (se assim o desejarem) de executar o seu próprio nó de blockchain e serviço HTTP, minerar algum Ether, e usá-lo para pagar a taxa de transação necessária para registar o seu nome de utilizador no Jami.

O código do contrato Ethereum, o ficheiro de génese da blockchain e o módulo NodeJS (servidor HTTP) podem ser encontrados em: 1

Executar um nó Jami

Pré-requisitos:

  1. Geth 1.8.23+ (descarregar AQUI)

  2. Ficheiro Jami genesis (descarregar AQUI)

Aderir à rede Jami

O processo de adesão à rede Jami é semelhante ao processo de adesão a uma rede Ethereum normal, com a diferença de que é utilizado o ficheiro genesis para inicializar o diretório de dados.

  1. Descarregue o ficheiro Jami genesis a partir do repositório Jami github

  2. Crie um diretório no seu computador que irá utilizar para armazenar os dados da blockchain Jami

  • Exemplo para MacOS (/Users/username/jamichain)

  • Exemplo para Linux (/home/username/jamichain)

  • Exemplo para Windows (C:\Users\username\jamichain)

  1. Use geth para inicializar o diretório que criou em (2) executando ./geth --datadir /home/username/jamichain  init genes is.json

  2. Pode agora iniciar o geth com as opções de linha de comandos que precisa e especificando um dos bootnodes do Jami como se segue:

geth --datadir=/home/username/jamichain --syncmode=full --networkid 1551 --bootnodes "enode://11ba6d3bfdc29a8afb24dcfcf9a08c8008005ead62756eadb363523c2ca8b819efbb264053db3d73949f1375bb3f03090f44cacfb88bade38bb6fc2cb3d890a5@173.231.120.228:30301" console

Isto irá iniciar um daemon geth com uma consola anexada que está agora a sincronizar com a rede da Jami.