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.
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:
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.
Descarregue o ficheiro Jami genesis a partir do repositório Jami github
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)
Use geth para inicializar o diretório que criou em (2) executando
./geth --datadir /home/username/jamichain init genes is.json
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.