ExonumTM é nossa estrutura de blockchain privada de código aberto. Hoje, mostraremos como o algoritmo de consenso dele funciona.
Imagem: BitfuryPor que algoritmos de consenso são necessários
Antes de prosseguir para a história de como o algoritmo de consenso Exonum
TM funciona, vamos falar sobre por que esses algoritmos geralmente são necessários em blockchains.
Blockchain é um sistema distribuído sem um administrador central. Para concordar com um novo bloco na rede (e, consequentemente, nas transações), os participantes da rede
usam algoritmos de consenso especiais. A tarefa de consenso é ajudar os nós da rede ponto a ponto a concordar com o que deve ser o seu novo estado - ou seja, escolher o próximo bloco na cadeia de blockchain.
Isso é necessário para proteger o blockchain e as informações armazenadas nele contra falsificação. Por exemplo, o blockchain baseado no Exonum
TM , implementado pela Russian Railways, registra informações sobre operações com peças para carros e trens. O blockchain garante a confiabilidade dos dados no bloco, o que permite à empresa monitorar a rota de peças de reposição do fornecedor e detectar oportunamente falhas. Falaremos mais sobre esse e outros casos ainda mais.
Que tarefas resolvemos criando o algoritmo de consenso Exonum
Ao desenvolver o algoritmo de consenso Exonum
TM , foi importante resolver o problema do
comportamento bizantino dos nós . Por comportamento bizantino, entendemos a atividade maliciosa de nós de rede individuais. Essas atividades também podem incluir situações em que os nós perdem a conexão com a rede ou ficam offline.
Em meados dos anos 80,
ficou provado que, para garantir a estabilidade de um sistema distribuído, ele deveria funcionar em condições de sincronismo parcial. Ao mesmo tempo, o algoritmo de consenso deve ter os seguintes critérios:
- Liveness - deve poder aceitar um novo bloco a qualquer momento.
- Consistência - o banco de dados de transações em todos os nós da rede deve ser idêntico.
- Resistência à censura - os nós não devem dar preferência a nenhuma transação ou ignorá-la.
Para uma rede com um número conhecido de participantes, um modelo de algoritmo de consenso resistente ao comportamento do nó bizantino (
tolerância a falhas bizantinas , BFT), sob sincronismo parcial,
permite menos de 1/3 dos participantes maliciosos (bizantinos) na rede.
Como funciona o algoritmo de consenso do exonum
Existem três tipos de nós na blockchain Exonum
TM : validadores, auditores e clientes light. Os primeiros são participantes diretos do algoritmo de consenso, enquanto os últimos distribuem a carga na rede e controlam os validadores. Quanto aos clientes light, eles apenas fornecem aos participantes da rede a oportunidade de enviar transações para o blockchain. Clientes e auditores Light não estão diretamente envolvidos no algoritmo de consenso, portanto não falaremos sobre eles neste material.
A tarefa dos validadores é votar na inclusão de novos blocos na blockchain. Como dissemos acima, a rede Exonum
TM pode funcionar de forma estável, mesmo que um terço de todos os nós seja bizantino. Consequentemente, para obter consenso, o bloco deve aprovar mais de 2/3 dos nós da rede blockchain. E esta afirmação pode ser confirmada matematicamente.
Suponha que a rede tenha h validadores de nós honestos (honestos) ef bizantinos (defeituosos). Então o número total de validadores pode ser representado como N = h + f. Todos os validadores decidem sobre um "vencedor" com base em uma regra de limite.
Diz: o número de votos para o vencedor deve ser maior ou igual a α * N , onde α é o número no intervalo de 0 a 1. Portanto, a maioria absoluta de votos é alcançada quando α> 1/2.
No final da votação, cada validador decide independentemente qual dos dois candidatos venceu. No entanto, os validadores não podem decidir em quem votar, se houver poucos validadores enviando seus votos para o restante. Isso pode acontecer se os nós bizantinos começarem a enviar votos para diferentes candidatos a membros honestos da rede, tentando confundi-los.
Para excluir uma situação semelhante, é necessário observar duas condições:
- Validadores honestos devem poder fazer escolhas sem a participação de nós bizantinos. Essa condição é determinada pela propriedade liveness, sobre a qual falamos acima. Matematicamente, é expresso pela seguinte desigualdade: h ≥ α * N.
- Um candidato para quem uma minoria de validadores honestos votou não pode superar o limite em α * N. Isso é ditado pelo critério de consistência. A condição é expressa da seguinte maneira: [h / 2] + f <α * N, onde [h / 2] é a parte inteira do número h / 2.
Como resultado, obtemos a seguinte cadeia de desigualdades: h> 2f, α> 2/3 e N ≥ 3f + 1. Segue-se que, para confirmar o bloqueio da transação, ele deve receber estritamente mais de 2/3 dos votos do validador.
Em seguida, vamos falar sobre como os validadores votam na blockchain Exonum
TM . Em termos gerais, o esquema é o seguinte:

O processo de obtenção de consenso começa com o fato de que o nó principal - é selecionado por um algoritmo separado e muda regularmente - forma uma lista de transações que devem ser adicionadas à blockchain (faz uma
proposta ). Essa lista é então transmitida por toda a rede para os nós do validador.
Os validadores verificam a mensagem recebida quanto à conformidade com o formato de serialização. Se algum erro for registrado, o nó ignorará completamente a mensagem recebida. Por exemplo, a proposta de adicionar um bloco ao meio da blockchain ou registrar novamente uma transação existente será ignorada. Se tudo estiver em ordem, o estágio de votação começará - os nós validadores votam para adicionar o bloco à blockchain, transmitindo a mensagem anterior.
Esse nó, cuja proposta recebeu mais de 2/3 das aprovações dos validadores, perde a oportunidade de votar em propostas de outros validadores e não pode alterar sua
proposta . Esse estado é chamado de
prova de bloqueio .
Depois que o número exigido de votos dos validadores é obtido, o nó principal registra as transações aprovadas no bloco e transmite uma mensagem especial -
pré -
confirmação . Ele contém um
hash do estado atualizado da blockchain e indica que o nó está pronto para adicionar o bloco proposto à cadeia. No momento em que a maioria dos validadores responde com uma mensagem de
pré -
confirmação semelhante (com o mesmo hash), o bloco é adicionado ao blockchain. O consenso é alcançado e o procedimento é repetido para cada bloco subsequente.
Para aumentar a estabilidade do sistema, os validadores trocam periodicamente mais duas mensagens -
Solicitação e
Bloqueio . O primeiro é gerado se os nós não tiverem dados de transação. O segundo é necessário para transmitir informações sobre o bloco de transações para um nó que está atrasado (por exemplo, desconectado), para sincronizar a operação de toda a rede.
Para avaliar as possibilidades do consenso Exonum
TM , testamos a operação do blockchain com base em duas configurações: em um data center e em vários data centers geograficamente distribuídos. Durante os testes, o parâmetro TPS foi avaliado - o número de transações por segundo - para um número diferente de validadores. A seguir, forneceremos gráficos das alterações no desempenho da rede em cadeias de blocos para trabalhar com criptomoedas (gráfico preto) e carimbos de data e hora (gráfico azul).
TPS em função do número de validadores no caso de um único data center
TPS em função do número de validadores no caso de vários data centersEm média, a blockchain Exonum
TM conseguiu processar de 2 a 13 mil transações por segundo, dependendo da configuração da rede.
Onde o Exonum já está sendo usado
A estrutura Exonum
TM é usada hoje em uma ampla variedade de projetos. No verão passado, em conjunto com a Technoprom,
criamos um mercado especial para a Russian Railways. A blockchain Exonum
TM registra operações com peças para trens e a folha de dados de cada carro. Isso possibilita rastrear o movimento de todas as peças de reposição de fornecedores oficiais e detectar falhas.
Também
lançamos um projeto educacional de blockchain baseado na University of Synergy. O registro registra e armazena todas as informações sobre o desempenho do aluno: notas, resultados de exames e diplomas. Segundo nossos colegas, essa abordagem elimina a possibilidade de fazer alterações nos documentos educacionais e ajuda a economizar em arquivamento e certificação.
Mesmo com base no Exonum
TM, implementamos uma série de projetos piloto acelerando o desenvolvimento e o lançamento de software. Nossos parceiros da organização de engenharia Aricent testam a estrutura há seis meses. A abordagem blockchain ao desenvolvimento de software aumentou a produtividade dos programadores e a velocidade da correção de erros.
Iniciamos outro projeto em conjunto com um grupo de empresas médicas. Incluindo a startup Insillico, onde eles aplicam treinamento profundo para encontrar novos medicamentos. O ExonumTM será o núcleo do ecossistema de dados do paciente. O sistema simplificará os ensaios clínicos e também ajudará na análise dos registros médicos e no DNA dos pacientes. Como resultado, os médicos poderão diagnosticar mais rapidamente doenças e prescrever um tratamento mais eficaz.
Esperamos que nossa blockchain encontre aplicação em outras tarefas e em outros setores. Atualmente, estamos trabalhando para implementar o Exonum TM nos sistemas de votação, leilão e gerenciamento de direitos digitais. Demonstrações de algumas dessas soluções podem ser encontradas no site oficial da Exonum TM .