Pular para o conteúdo

Sobre a rede Cardano

Por volta de 7 min

A rede Cardano é uma infraestrutura técnica que combina nós Cardano e suas interações relativas em um sistema unificado. Ela consiste em uma coleção de nós que se comunicam entre si para manter o ledger distribuído. Esses nós são os atores no Cardano que validam blocos, adicionam blocos à cadeia e distribuem transações.

A camada de rede é a força motriz para fornecer requisitos de troca de informações, que inclui a difusão de novos blocos e informações de transações para estabelecer um melhor fluxo de dados. Os nós Cardano mantêm conexões com pares que foram escolhidos por meio de um processo de seleção de pares personalizado.

Siga estes links para encontrar especificações detalhadas de:

Fluxo de dados entre e dentro dos nós

Para entender como os nós se comunicam entre si, suponha que o nó A esteja conectado ao nó B. Então, o protocolo Ouroboros agenda um nó N para gerar um novo bloco em um determinado intervalo de tempo. Dependendo da localização dos nós A, B e N na topologia da rede e se um novo bloco chega primeiro ao A ou ao B, o nó A pode ser upstream ou downstream do nó B.

Um conjunto de mini protocolos é usado para permitir a comunicação entre diferentes nós. Cada mini protocolo implementa um requisito básico de troca de informações, como informar pares sobre o último bloco, compartilhar blocos conforme necessário ou compartilhar novas transações ao redor da rede Cardano. Para fins de conexão, mini protocolos são determinados pela versão do protocolo de rede. Por exemplo, existem dois conjuntos de protocolos: nó-a-nó e nó-a-cliente. O conjunto de protocolos nó-a-cliente é usado por carteiras e consumidores de blockchain. Os conjuntos de protocolos usam diferentes conjuntos de mini protocolos e a versão é negociada quando uma nova conexão é estabelecida usando um protocolo específico (os protocolos são descritos nas seções seguintes).

Os clientes também podem escolher quais mini protocolos nó-a-cliente usar, mas é importante observar que o nó precisa ser capaz de responder a todos eles para suportar diferentes casos de uso. Por exemplo, para se comunicar, o nó A executa sua instância do lado do cliente do mini protocolo de sincronização de cadeia que conversa com uma instância do servidor do mini protocolo de sincronização de cadeia no nó B. Essa situação é semelhante à funcionalidade de outros mini protocolos.

O esquema abaixo ilustra como os dados fluem dentro de um nó. Círculos representam threads de protocolo e threads internos que são responsáveis por executar os processos do cliente e do servidor dentro dos respectivos mini protocolos.

fluxo_de_dados_do_no

Existem dois tipos de fluxo de dados:

  1. Mini protocolos comunicam-se com mini protocolos de outros nós enviando e recebendo mensagens em uma rede pública (internet); este fluxo não é abordado no esquema acima, mas pode ser potencialmente projetado para melhor entendimento.
  2. Dentro de um nó, mini protocolos comunicam-se entre si lendo e escrevendo em uma variável mutável compartilhada, representada por caixas no esquema. As setas indicam se um thread tem acesso de leitura ou escrita ao estado compartilhado.

Endereçando complexidades e restrições de rede

Para projetar uma arquitetura de rede eficiente e robusta, várias questões potenciais relacionadas à complexidade e restrições foram avaliadas.

Controle de congestionamento é uma dessas características e é usado para lidar com sobrecarga do sistema. O controle de congestionamento é vital para garantir que o sistema seja robusto o suficiente ao operar cargas de trabalho elevadas. Dentro do projeto de rede, é comum que o número de transações que ocorrem possa ser maior do que o número que pode ser processado para inclusão no blockchain. Portanto, é importante garantir que a taxa crescente de envio de transações para um bloco não diminua o desempenho do blockchain.

O nó real tem um limite para a quantidade de dados que pode processar. Em particular, um nó pode ter que compartilhar sua capacidade de processamento com outros processos que são executados na mesma máquina ou instância do sistema operacional. Isso significa que um nó pode desacelerar e resultar no sistema não sendo capaz de processar todos os dados disponíveis da rede.

Para lidar com essas questões, o recurso de controle de congestionamento foi projetado para operar adequadamente em tal situação e se recuperar de condições transitórias. Em qualquer caso, um nó não deve exceder seus limites de memória, portanto, deve haver limites de memória definidos, cujas violações são tratadas como violações de protocolo. Esses fatores significam que o sistema será capaz de atender às metas de desempenho.

Restrições em tempo real e tempo universal coordenado são outros aspectos considerados ao projetar a arquitetura de rede. No Cardano, os protocolos de consenso Ouroboros modelam a passagem do tempo físico como uma sequência infinita de intervalos de tempo, atribuindo líderes de slot para criar um novo bloco nesses intervalos de tempo. Escolher um tempo de slot, no entanto, pode causar certas complexidades em termos de duração do slot, pois deve ser longo o suficiente para que um novo bloco tenha uma boa chance de alcançar o próximo líder de slot a tempo. Portanto, um valor escolhido para o comprimento do slot foi inicialmente definido como 20 segundos na era Byron. Com Ouroboros Praosopen in new window agora implementado na era Shelley, um comprimento de slot de 1 segundo é escolhido, mas, em média, apenas 0,05 dos slots produzirão um bloco (e assim, em média, haverá intervalos de 20 segundos entre blocos). Assume-se que os desvios de relógio entre os relógios locais dos nós são pequenos em relação ao comprimento do slot. Possíveis imprecisões de relógio ainda devem ser levadas em consideração, especialmente ao lidar com blocos recebidos com carimbo de tempo. É importante diferenciar se há uma diferença de tempo ou se o nó considera um comportamento adversarial de outro nó.

Utilizando mini protocolos

Mini protocolos são usados para comunicar entre vários nós enquanto implementam requisitos de troca de informações. Um mini protocolo é um bloco de construção modular definido do protocolo de rede. Estruturar o protocolo de rede em torno de mini protocolos ajuda a gerenciar a complexidade geral do design enquanto garante flexibilidade útil.

Mini protocolos descrevem tanto o iniciador quanto o respondente dentro do fluxo de comunicação. O iniciador é o elemento dual do respondente e vice-versa. Um nó normalmente executa muitas instâncias de mini protocolos, o que inclui muitas instâncias do mesmo mini protocolo. Cada instância do mini protocolo do nó então se comunica com a instância dual do peer exato. Todos os mini protocolos que se comunicam com o mesmo peer compartilham um único canal de comunicação (pipe ou socket). Um multiplexador ou demultiplexador é usado para multiplexar protocolos respectivos sobre esse canal.

O conjunto de mini protocolos que é usado para conexão entre dois participantes do sistema depende do papel desses participantes, por exemplo, se o nó atua como um nó completo ou um consumidor de blockchain (por exemplo, uma carteira).

Também vale ressaltar que a implementação de mini protocolos usa um framework genérico para máquinas de estado. Este framework usa técnicas de correção por construção para garantir a implementação de várias propriedades do protocolo. Em particular, essa técnica garante que nenhum impasse ocorra e a comunicação é cancelada nos seguintes cenários:

  • quando um lado é esperado para transmitir a próxima mensagem, e o outro lado está aguardando a mensagem, e ambos os lados concordam que o protocolo foi encerrado
  • quando um dos lados recebe uma mensagem que não é esperada de acordo com o protocolo

Todos os mini protocolos baseados neste framework incluem as seguintes informações em sua descrição:

  • uma descrição informal do protocolo
  • estados da máquina de estado
  • mensagens trocadas
  • um gráfico de transição da visão global da máquina de estado
  • a implementação do cliente do protocolo
  • a implementação do servidor do protocolo

Exemplos de mini protocolos

Esta seção delineia alguns exemplos de mini protocolos.

Protocolo Ping Pong

Este é um protocolo simples para testar se um cliente pode verificar se o servidor está responsivo. O protocolo Ping-Pong é muito simples porque as mensagens não carregam nenhum dado e o cliente Ping-Pong, assim como o servidor Ping-Pong, não acessam o estado interno do nó.

Protocolo de Solicitação Resposta

O protocolo de solicitação resposta é polimórfico nos dados de solicitação e resposta que estão sendo transmitidos. Isso significa que existem diferentes aplicações possíveis deste protocolo e a aplicação do protocolo determina os tipos de solicitações enviadas e as respostas recebidas.

Protocolo de Sincronização de Cadeia

O protocolo de sincronização de cadeia é usado por um consumidor de blockchain para replicar o blockchain do produtor localmente. Um nó se comunica com vários nós upstream e downstream e executa uma instância de cliente independente e uma instância de servidor independente para cada nó com o qual se comunica.

O protocolo de sincronização de cadeia é polimórfico. O protocolo de nó-para-cliente usa uma instância do protocolo de sincronização de cadeia que transfere blocos completos, enquanto a instância de nó-para-nó apenas transfere cabeçalhos de bloco. No cenário de nó-para-nó, o protocolo de busca de bloco é usado para transferir blocos completos.

Protocolo de Busca de Bloco

O protocolo de busca de bloco permite que um nó baixe uma faixa de blocos.

Mini Protocolo de Submissão de Transação Local

O mini protocolo de submissão de transação local é usado por clientes locais, por exemplo, carteiras ou ferramentas de CLI, para enviar transações para um nó local. O protocolo não é usado para encaminhar transações de um núcleo para outro. O protocolo segue um padrão simples de solicitação-resposta:

  1. o cliente envia uma solicitação com uma única transação.
  2. o servidor aceita a transação (retornando uma confirmação) ou a rejeita (retornando o motivo).

Protocolo de Submissão de Transação Nó-a-Nó

O protocolo de submissão de transação nó-a-nó é usado para transferir transações entre nós completos. O protocolo segue uma estratégia baseada em solicitação onde o iniciador solicita novas transações e o respondente responde com transações. É adequado para um ambiente sem confiança onde ambos os lados precisam se proteger contra ataques de consumo de recursos do outro lado. A implementação do mini protocolo de transação nó-a-nó é baseada em um framework genérico de mini protocolo (o mesmo que para todos os outros mini protocolos). Por razões técnicas, os papéis do iniciador e do respondente são invertidos neste caso em comparação com a maneira como outros mini protocolos são implementados no framework. Em outras palavras, o servidor é o iniciador que solicita novas transações, e o cliente é o respondente que responde com transações.

Mini Protocolo de Handshake

O mini protocolo de handshake é usado para negociar a versão do protocolo e os parâmetros do protocolo que são usados pelo cliente e pelo servidor. Ele é usado primeiro quando uma nova conexão é inicializada e consiste em uma única solicitação do cliente e uma única resposta do servidor. O mini protocolo de handshake é um protocolo genérico que pode negociar qualquer tipo de parâmetros de protocolo. Assume-se que os parâmetros do protocolo podem ser codificados em termos de Objetos Binários Concretos Concisos (CBOR). Um nó que executa o protocolo de handshake deve instanciá-lo com o conjunto de versões de protocolo suportadas e funções de retorno de chamada para manipular os parâmetros do protocolo. Essas funções de retorno de chamada são específicas para as versões de protocolo suportadas.

Última atualização:
Contribuidores: cauechianca