Rede distribuída de Jami

Conectividade

Jami conta com uma rede distribuída, que traz múltiplas vantagens em comparação com redes federadas:

  • Não há ponto de falha.

  • Mais resistente à censura,

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

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

Topologia de 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, Jami consegue-o através de dois elementos:

  • Anúncios criptografados no DHT,

  • Utilização de protocolos padrão para perforar buracos NAT.

Jami é construída em duas redes distribuídas distintas:

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

  • O sistema de blocos JamiNS para fornecer registro distribuído de nomes.

A rede OpenDHT

Veja https://github.com/savoirfairelinux/opendht> para mais informações sobre o OpenDHT, que fornece um armazém de dados de valor-chave distribuído para estabelecimento de conectividade (com ICE) e distribuição de mensagens em Jami.

Uma rede OpenDHT pode ser conectada conhecendo qualquer nó já conectado à rede.

Os clientes Jami usam um cache de nós persistente para se reconectar à rede após uma primeira sessão. Um nó configurável, conhecido e estável “bootstrap” é usado para a primeira conexã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 da Jami tem um nó OpenDHT, contribuindo para a rede e permitindo que a Jami se escale.

Os usuários de Jami podem ter total independência executando seu próprio nó OpenDHT estável e configurando-o como um nó bootstrap em Jami, ajudando a melhorar a estabilidade, robustez e resiliência para cada usuário 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 em dados e tem um limite de armazenamento na memória padrão de 8 MiB.

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

A blockchain JamiNS

A blockchain JamiNS é experimental e sua arquitetura deve evoluir.

Os clientes da Jami não executam nós blockchain por si mesmos, mas sim se comunicam com um servidor da JamiNS usando HTTP para registro de nome e consulta, com uma API REST. Isso ocorre porque os recursos necessários para executar um nodo blockchain são muito altos para a maioria dos usuários finais.

O servidor de nomes pode ser configurado como uma conta de base em Jami, permitindo conectar os clientes Jami a vários diretórios de usuários mais ou menos centralizados.

Contribuir para o bloco de blocos JamiNS

O serviço padrão de nome Jami é ns.jami.net, fornecido pelo Savoir-faire Linux, conectado a um nó blockchain Ethereum; o objetivo é dar a todos a possibilidade (se eles o fizerem) de executar seu próprio nó blockchain e serviço HTTP, extrair algum Ether e usá-lo para pagar a taxa de transação necessária para registrar seu nome de usuário em Jami.

O código do contrato Ethereum, o arquivo de gênese do blockchain e o módulo NodeJS (servidor HTTP) podem ser encontrados aqui: 1

A execução de um nó Jami

Pré-requisitos:

  1. Geth 1.8.23+ (baixe AQUI)

  2. Arquivo Jami genesis (baixe AQUI)

Acompanhando a Rede Jami

O processo de ingressão na rede Jami é semelhante ao processo de ingressão em uma rede ethereum regular com a diferença de que o arquivo genesis é usado para inicializar o diretório de dados.

  1. Faça o download do arquivo Jami genesis do repo do Jami github

  2. Crie um diretório no seu computador que você usará para armazenar os dados da blockchain Jami

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

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

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

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

  2. Agora você pode começar a geth com as opções de linha de comando que você precisa e especificar um dos nós de inicialização de Jami como segue:

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

Esta ação iniciará um daemon geth com um console anexado, que agora está sincronizando com a rede Jami.