Execução diferida

Preparação de execução de consenso em pipeline

Um dos novos aspectos do blockchain Monad é que a execução é dissociada do consenso.

Para recapitular, o consenso é o processo em que os nós do Monad chegam a um acordo sobre a ordem oficial das transações, enquanto a execução é o processo de realmente executar essas transações e atualizar o estado.

No consenso da Monad, os nós chegam a um acordo sobre a ordem oficial das transações, mas sem que o líder ou os nós de validação tenham que ter executado essas transações ainda.

Ou seja, o líder propõe uma ordenação sem ainda conhecer a raiz do estado resultante, e os nós validadores votam na validade do bloco sem saber (por exemplo) se todas as transações no bloco são executadas sem reversão.

Como isso pode ser? E por que Monad faz isso?

A resposta é a base do design do Monad e permite que o Monad desbloqueie acelerações significativas que permitem que um blockchain de fragmento único seja dimensionado para milhões de usuários.

Intercalar execução e consenso é ineficiente

No Ethereum, a execução é um pré-requisito para o consenso, portanto, quando os nós chegam a um consenso sobre um bloco, eles concordam tanto (1) na lista de transações no bloco quanto (2) na raiz merkle que resume todo o estado após a execução. essa lista de transações. Como resultado, o líder deve executar todas as transações no bloco proposto antes de compartilhar a proposta, e os nós validadores devem executar essas transações antes de responder com um voto.

Neste paradigma, o orçamento de tempo para a execução é extremamente limitado, uma vez que tem de acontecer duas vezes e deixar tempo suficiente para múltiplas rondas de comunicação interglobal para consenso. Além disso, como a execução bloqueará o consenso, o limite de gás deve ser escolhido de forma extremamente conservadora, garantindo que o cálculo seja concluído em todos os nós dentro do orçamento, mesmo no pior cenário.

Ordenação determinada implica determinismo de estado

Aqui está uma visão óbvia, mas crucial: dada uma ordem oficial de transações, o verdadeiro estado é completamente determinado. A execução é necessária para desvendar a verdade, mas a verdade já está determinada.

A Monad aproveita esse insight removendo a exigência de que os nós sejam executados antes do consenso. O acordo do nó é puramente sobre o pedido oficial; cada nó executa as transações no bloco Nde forma independente enquanto inicia o consenso no bloco N+1.

Isto permite um orçamento de gás correspondente ao tempo total do bloco, uma vez que a execução necessita apenas de acompanhar o consenso. Além disso, essa abordagem é mais tolerante à variação no tempo exato de computação, uma vez que a execução só precisa acompanhar, em média, o consenso.

As raízes merkle atrasadas ainda garantem a replicação da máquina de estado

As principais objeções que se pode ter ao acima exposto são:

  • O que acontece se um dos nós for malicioso e não executar as transações exatas especificadas em consenso? (Por exemplo, digamos que ele omite certas transações ou apenas define uma variável de estado com um valor arbitrário de sua escolha.)

  • O que acontece se um dos nós cometer um erro de execução?

    Para resolver essas preocupações, no Monad as propostas de bloco incluem uma raiz merkle atrasada por Dblocos, onde Dé um parâmetro de todo o sistema (atualmente previsto para ser 10). Como resultado desta raiz merkle atrasada:

    1. Depois que a rede chegar a um consenso (2/3 dos votos majoritários) sobre o bloco N, isso significa que a rede concordou que a consequência oficial do bloco N-Dé um estado enraizado na raiz merkle M. Os clientes leves podem então consultar nós completos em busca de provas merkle de valores de variáveis ​​de estado no bloco N-D.

    2. Qualquer nó com erro de execução no bloco N-Dsairá do consenso a partir do bloco N. Isso irá desencadear uma reversão nesse nó para o estado final do bloco N-D-1, seguido pela reexecução das transações no bloco N-D(resultando, esperançosamente, na correspondência da raiz merkle), seguida por uma reexecução das transações no bloco N-D+1, N-D+2, etc.

    A abordagem do Ethereum usa o consenso para impor a replicação da máquina de estado de uma forma muito estrita: depois que os nós chegam ao consenso, sabemos que a grande maioria concorda sobre a ordem oficial e o estado resultante dessa ordem. No entanto, esse rigor tem um grande custo – rendimento extremamente limitado. Monad afrouxa ligeiramente a rigidez, com grande efeito.

Em definitivo

No MonadBFT, a finalidade é de slot único (1 segundo) e o resultado da execução geralmente terá um atraso de menos de 1 segundo para aqueles que usam um nó completo. Vamos descompactar isso um pouco.

A finalidade no Monad é de slot único (1 segundo) . Se você enviar uma transação, verá a ordem oficial da transação (entre todas as outras transações) após um único bloco. Não há potencial para reordenação, impedindo ações maliciosas de uma grande maioria da rede. Isso torna a finalidade do Monad significativamente mais rápida do que a do Ethereumarrow-up-right (2 épocas, também conhecidas como 12,8 minutos).

O resultado da execução de uma transação (foi bem-sucedida ou falhou? quais são os saldos depois?) geralmente atrasará a finalização em menos de 1 segundo em nós completos. Qualquer pessoa que precise saber rapidamente o resultado de uma transação (por exemplo, um trader de alta frequência que queira saber o status de uma ordem) pode executar um nó completo. O Monad foi projetado para minimizar o custo de nós completos; consulte Requisitos de hardware para obter mais informações.

Qualquer pessoa que queira consultar com segurança o resultado de uma transação sem executar um nó completo pode executar um cliente leve enquanto consulta um nó completo em busca de saldos com provas merkle. Nesse caso, as consultas serão atrasadas pelo atraso da raiz merkle (D=10blocos, ou seja, 10 segundos). Observe que a maioria dos usuários atualmente visualiza o estado do blockchain usando carteiras de software (navegador) ou por meio de um explorador de blocos. Nenhum desses padrões de uso envolve um cliente leve.

Alguns leitores podem confundir erroneamente o atraso ( D=10blocos) da raiz merkle com finalidade e assumir erroneamente que a finalidade é de 10 blocos. Isso não é verdade. A ordem oficial da transação é determinada após 1 bloco, após o qual não haverá reorganizações sem comportamento bizantino por maioria absoluta.

Last updated