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.
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:
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.
Faça o download do arquivo Jami genesis do repo do Jami github
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)
Use o geth para inicializar o diretório que você criou no passo (2) executando
./geth --datadir /home/username/jamichain init genes is.json
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.