Como é que a Monad escala o EVM enquanto preserva a descentralização? MonadBFT é o algoritmo de consenso utilizado na Monad, sendo a primeira implementação resistente a tailfork do Hotstuff (o que é que isso significa?) Aqui está como o MonadBFT pode escalar para milhares de validadores enquanto mantém a performance 🧵
1/7 Mecanismos de Consenso O mecanismo que as blockchains utilizam para garantir que novos blocos sejam acordados pela maioria dos validadores. Os algoritmos de consenso até agora não conseguem escalar além de algumas centenas de validadores, uma vez que a complexidade aumenta com base no quadrado do número de validadores (na maioria dos casos). Como cada validador se comunica com todos os outros validadores para concordar sobre os blocos: n validadores x n mensagens = mensagens ao quadrado. Assim, a complexidade aumenta significativamente com o número de validadores.
2/7 Hotstuff é um algoritmo de consenso que pode escalar linearmente (proporcional ao número de validadores) ao evitar a comunicação de todos para todos e permitindo que um único "líder" se comunique com todos os validadores para o consenso. Assim, Hotstuff pode escalar de forma mais eficiente do que o consenso PBFT tradicional, mas é vulnerável a ataques de tailforking. MonadBFT é a primeira implementação resistente a tailfork de Hotstuff.
3/7 O que é tailforking? Tailforking acontece quando o próximo líder (validador que propõe o próximo bloco), intencionalmente ou acidentalmente, falha em incluir o QC do bloco válido do líder anterior na sua proposta para o novo bloco. (QC significa certificado de quórum, que é uma prova de que todos os validadores concordaram com o bloco anterior) Como resultado, o bloco anterior, apesar de ser válido e ter o apoio da maioria, fica não comprometido e eventualmente é orfão ou substituído por um bloco diferente na mesma altura. Isto perturba o mecanismo de incentivo: proponentes honestos podem não receber recompensas de bloco ou taxas se o seu bloco for ignorado, encorajando comportamentos injustos e enfraquecendo a segurança da rede.
4/7 Como funciona o MonadBFT? → Um líder (Alice) transmite uma proposta de bloco assinada para todos os outros nós (fan out), que reconhecem a sua validade enviando uma atestação assinada para o próximo líder Bob (fan in). → Bob agrega as atenções em um “Certificado de Quorum” (QC) → Bob transmite o QC para todos os nós, que atestam ter recebido enviando uma mensagem para o 3º líder (Charlie), que agrega essas atenções. Como as atenções são sobre um QC, chamamos este novo QC de QC-on-QC. → Charlie envia o QC-on-QC para todos. Ao receber o QC-on-QC, todos sabem que o bloco de Alice foi finalizado.
5/7 Pipelining Na história acima, Bob e Charlie estão apenas a enviar QCs ou QCs-sobre-QCs, mas na realidade as propostas estão em pipeline: a mensagem de Bob contém tanto o QC para o bloco de Alice como também o conteúdo de um novo bloco. A mensagem de Charlie contém o QC para o bloco de Bob (que é um QC-sobre-QC para o bloco de Alice) e também contém as transações para um novo bloco. Quando os validadores enviam uma atestação para a mensagem de Bob, estão a atestar tanto a validade do bloco de Bob como a validade do QC. Este pipeline aumenta a capacidade da rede, uma vez que a cada slot um novo bloco é produzido.
6/7 Raptorcast: O protocolo de propagação de blocos da Monad O MonadBFT exige que o líder envie propostas de blocos a todos os validadores. No entanto, os blocos podem ser bastante grandes: 10.000 transações/s * 200 bytes/tx = 2 MB/s. Enviar diretamente para 200 validadores exigiria 400 MB/s. Idealmente, os validadores não deveriam ter uma largura de banda de upload tão alta. É aqui que o Raptorcast entra em cena. → Os blocos são codificados por eliminação pelo líder (A codificação por eliminação significa que a mensagem é dividida em um conjunto de partes, e pode ser decodificada a partir de um subconjunto grande o suficiente dessas partes) → O líder distribui um conjunto diferente de partes a todos os validadores na rede (validadores com maior participação recebem proporcionalmente mais) → Cada validador retransmite suas partes para todos os outros validadores na rede Dessa forma, toda a largura de banda da rede é utilizada para propagar propostas de blocos.
30,65K