Do blockchain ao DAG: livrar-se dos intermediários

Neste artigo, falarei sobre o DAG (Directed Acyclic Graph) e seu uso em registros distribuídos, e o compararemos com o blockchain.



O DAG não é novo no mundo das criptomoedas. Você pode ter ouvido falar dele como uma solução para problemas de escalabilidade de blockchain. Hoje, porém, não falaremos sobre escalabilidade, mas sobre o que torna as criptomoedas diferentes de tudo: descentralização, ausência de intermediários e resistência à censura.



Também mostrarei que o DAG é realmente mais resistente à censura e que não há intermediários para acessar o registro.



Nas blockchains habituais para nós, os usuários não têm acesso direto ao próprio registro. Quando você deseja adicionar uma transação ao registro, é necessário "pedir" ao produtor do bloco (produtor do bloco, também conhecido como "minerador") para fazer isso. São os mineradores que decidem qual transação adicionar ao próximo bloco e quais não. São os mineradores que têm acesso exclusivo aos blocos e têm o direito de decidir qual transação aceitar para adicionar ao registro.

Os mineiros são intermediários entre você e o registro distribuído.



Na prática, geralmente um pequeno número de pools de mineradores controla coletivamente mais da metade do poder de computação da rede. Para bitcoin, essas são quatro piscinas, para Ethereum - duas. Em caso de conluio, eles podem bloquear as transações que desejarem.



Nos últimos anos, muitas variações de cadeias de blocos foram propostas, diferindo nos princípios de escolha dos produtores de blocos. Mas os próprios produtores de bloco não vão a lugar algum, eles ainda estão "em pé na barreira": cada transação deve passar pelo produtor de bloco e, se ele não o aceitar, a transação, de fato, não existe.



Este é um problema inevitável no caso da blockchain. E se queremos resolvê-lo, precisamos mudar radicalmente o design e nos livrar completamente dos blocos e fabricantes de blocos. E, em vez de criar uma cadeia de blocos, uniremos as transações, incluindo os hashes de vários anteriores em cada transação. Como resultado, obtemos uma estrutura conhecida em matemática como um gráfico acíclico direcionado - DAG.

Agora todo mundo tem acesso direto ao registro, sem intermediários. Quando você deseja adicionar uma transação ao registro, basta adicioná-la. Escolha várias transações pai, adicione seus dados, assine e envie sua transação aos pares na rede. Feito. Não há ninguém para impedi-lo de fazer isso; portanto, sua transação já está no registro.

Essa é a maneira mais descentralizada e sem censura de adicionar transações ao registro sem intermediários. Porque todo mundo quer simplesmente adicionar suas transações ao registro sem pedir permissão a ninguém.



O DAG pode ser considerado o terceiro estágio da evolução do registro. No início, havia registros centralizados, onde um lado controlava o acesso a eles. Depois vieram as blockchains, nas quais já havia vários controladores que registravam transações no registro. E, finalmente, no DAG não há controladores, os usuários adicionam suas transações diretamente.



Agora que temos essa liberdade, isso não deve levar ao caos. Precisamos ter um acordo sobre o status do registro. E esse consentimento, ou consenso, geralmente significa concordar em duas coisas:

  1. O que aconteceu
  2. Em que ordem isso aconteceu?

Podemos facilmente responder à primeira pergunta: assim que uma transação criada corretamente foi adicionada ao registro, aconteceu. E o ponto. As informações sobre isso podem alcançar todos os participantes em momentos diferentes, mas no final todos os nós receberão essa transação e descobrirão que ela ocorreu.

Se fosse uma blockchain, os mineradores decidiriam o que estava acontecendo. Tudo o que o mineiro decide incluir no bloco é o que acontece. Tudo o que não inclui no bloco não acontece.

Nas cadeias de blocos, os mineradores também resolvem o segundo problema de consenso: ordem. Eles têm permissão para organizar transações dentro do bloco como quiserem.

Como determinar a ordem das transações no DAG?



Só porque nosso gráfico é direcionado, já temos alguma ordem. Cada transação refere-se a um ou mais pais anteriores. Os pais, por sua vez, referem-se aos pais e assim por diante. Os pais obviamente aparecem antes das transações com filhos. Se alguma transação puder ser alcançada clicando nos links pai-filho, sabemos com certeza o pedido entre as transações nessa cadeia de transações.



Mas a ordem entre transações nem sempre pode ser determinada apenas a partir da forma do gráfico. Por exemplo, quando duas transações se encontram em ramificações paralelas de um gráfico.



Para resolver a ambiguidade nesses casos, contamos com os chamados fornecedores de pedidos. Também os chamamos de "testemunhas". Esses são usuários comuns cuja tarefa é enviar constantemente transações para a rede de maneira ordenada, ou seja, para que cada uma das transações anteriores possa ser realizada clicando nos links "pai e filho". Os fornecedores de pedidos são usuários confiáveis ​​e toda a rede conta com eles para não violar esta regra. Para confiar neles racionalmente , exigimos que cada fornecedor de pedidos seja uma pessoa ou organização bem conhecida (não anônima) e tenha algo que pode ser perdido se quebrar as regras, por exemplo, uma reputação ou um negócio baseado em confiança.



Os provedores de pedidos são selecionados pelos usuários e cada usuário inclui uma lista de seus provedores confiáveis ​​em cada transação que ele envia à rede. Esta lista consiste em 12 fornecedores. Esse é um número bastante pequeno para que uma pessoa possa verificar a identidade e a reputação de cada uma delas, e suficiente para garantir que a rede continue funcionando em caso de problemas inevitáveis ​​com uma minoria de fornecedores de pedidos.

Essa lista de provedores varia de usuário para usuário, mas as listas de transações vizinhas podem diferir no máximo em um provedor.



Agora que temos os fornecedores de pedidos, podemos destacar suas transações no DAG e organizar todas as outras transações em torno do pedido criado por eles. Existe a possibilidade de criar esse algoritmo (consulte o Livro Branco da Obyte para obter detalhes técnicos).

Mas o pedido em toda a rede não pode ser determinado instantaneamente. Precisamos de tempo para que os provedores de pedidos enviem um número suficiente de transações para garantir a ordem final das transações passadas.

E, como o pedido é determinado apenas pelas posições das transações dos provedores no DAG, mais cedo ou mais tarde todos os nós da rede receberão todas as transações e chegarão à mesma conclusão em relação à ordem das transações.



Portanto, temos um acordo sobre o que consideramos ter acontecido: qualquer transação que entrou no DAG aconteceu. Também concordamos com a ordem dos eventos: isso é visível com base nas transações relacionadas ou é deduzido da ordem das transações enviadas pelos fornecedores de pedidos. Portanto, temos um consenso.



Temos essa opção de consenso na Obyte. Apesar de o acesso ao registro Obyte ser completamente descentralizado, o consenso sobre a ordem das transações ainda é centralizado, pois 10 dos 12 fornecedores são controlados pelo criador (Anton Churyumov), e apenas dois deles são independentes. Estamos procurando candidatos que desejam se tornar um dos fornecedores independentes de pedidos para nos ajudar a descentralizar o estabelecimento de pedidos no registro.

Recentemente, apareceu um terceiro candidato independente que deseja estabelecer e manter um nó do fornecedor de pedidos - a Universidade de Nicósia.



Agora, como controlamos os gastos duplos?

De acordo com as regras, após a detecção de duas transações que gastam a mesma moeda, a transação que apareceu anteriormente na ordem final de todas as transações vence. O segundo é desativado pelo algoritmo de consenso.


Se for possível estabelecer uma ordem entre duas transações que gastam uma moeda (nos relacionamentos pai-filho), todos os nós rejeitam imediatamente tal tentativa de gasto duplo.



Se o pedido não for visível no relacionamento dos pais entre duas dessas transações, elas serão aceitas no registro e precisaremos aguardar um consenso e estabelecer um pedido entre eles usando os fornecedores do pedido. A transação anterior vence e a segunda se torna inválida.



Embora a segunda transação se torne inválida, ela ainda permanece no registro, porque já possui transações subsequentes que se referem a ela, que não violaram nada e não sabiam que no futuro essa transação se tornaria inválida. Caso contrário, teríamos de remover o pai das boas transações subsequentes, o que violaria o princípio principal da rede - qualquer transação correta é aceita no registro.



Essa é uma regra muito importante que permite que todo o sistema seja resistente a tentativas de censura.

Vamos fingir que todos os fornecedores de pedidos conspiram na tentativa de "censurar" uma transação específica. Eles podem ignorá-lo e nunca escolher um "pai" para suas transações, mas isso não é suficiente, ainda pode ser incluída indiretamente como pai de alguma outra transação emitida por qualquer usuário da rede que não esteja envolvido na conspiração. Com o tempo, essa transação receberá cada vez mais filhos, netos e bisnetos de usuários comuns, expandindo-se como uma bola de neve, e todos os fornecedores de pedidos acordados também terão que ignorar essas transações. No final, eles terão que censurar toda a rede, o que equivale a sabotar.



Assim, o DAG permanece resistente a censura, mesmo que haja um conluio de fornecedores de pedidos, superando assim a blockchain na resistência à censura, na qual nada podemos fazer se os mineradores decidirem não incluir nenhuma das transações. E isso decorre da propriedade principal do DAG: a participação no registro é absolutamente independente e sem intermediários, e as transações são irreversíveis.

Source: https://habr.com/ru/post/pt477032/


All Articles