Block Building é um aspecto crucial do ciclo de vida do Ethereum, consistindo em várias partes móveis. Ele determina quais transações são incluídas em um bloco e em que ordem, impactando diretamente a eficiência da rede, a descentralização e a justiça. Com o tempo, o processo de produção de blocos do Ethereum evoluiu, especialmente com o papel crescente do MEV e a mudança da seleção orientada por validadores para construtores especializados.
Esta postagem discutirá como a construção de blocos do Ethereum evoluiu junto com a introdução da separação do Proposer Builder e pesquisas futuras.
O Ethereum organiza o tempo em unidades discretas:
No final de cada época, as tarefas do validador são embaralhadas para garantir a descentralização e a segurança. O Ethereum atinge a finalidade econômica após 2 épocas (~12,8 min) , após as quais é quase impossível reverter os blocos.
O Ethereum tem um grande número de Validadores na rede. No momento da escrita, há 1.051.349 validadores ativos, de acordo com beaconcha.in . Seria inviável se tantos validadores tivessem que verificar cada bloco a cada 12 segundos. Portanto, os validadores são divididos em comitês para validar transações de forma eficiente e atestar a validade do bloco.
Cada comitê:
O tamanho de um comitê depende do número total de validadores ativos na rede, mas geralmente cada comitê tem pelo menos 128 validadores.
Em cada slot:
Digamos que há N
Comitês atribuídos por slot e digamos que há M
Validadores em cada Comitê (onde M
>128). Isso significa que há NxM
atestados para cada slot. Como você pode entender, pode rapidamente se tornar opressor para a rede fofocar sobre tantos atestados.
Os agregadores em cada Comitê são encarregados de agregar as atestações de seus respectivos Comitês. Isso significa que de um Comitê de M
Validadores, há apenas 1 Aggregated Attestation
final em vez de M
.
Então, em cada slot, há um final de N
Atestações (1 para cada comitê daquele slot) sendo fofocadas para o tópico global. O Proponente do próximo slot pega essas N
atestações.
Alguns pontos a ter em mente
Durante uma época, cada validador ativo é membro de exatamente um comitê, então todos os comitês da época são separados.
O protocolo ajusta o número total de comitês em cada época de acordo com o número de validadores ativos.
O projeto atual é ter 64
comitês por vaga, ou seja, N=64
O embaralhamento da cadeia de beacons é projetado para fornecer um mínimo de 1 Epoch (32 slots) lookahead nas próximas atribuições do comitê do validador para atestar ditadas pelo embaralhamento e slot. Observe que esse lookahead não se aplica à proposição, que deve ser verificada durante a epoch em questão.
get_committee_assignment
pode ser chamado no início de cada época para obter a atribuição para a próxima época ( current_epoch + 1
). Isso também permite que os validadores calculem o id da sub-rede, ingressem no respectivo comitê e estejam preparados para suas tarefas.
Além disso, um Validador pode ser designado como Aggregator
de um comitê específico. Se for o caso, ele deve assinar o tópico respectivo também.
Dentro de cada slot, um único validador do respectivo comitê é selecionado como proponente para criar e enviar um bloco.
O papel do proponente é crucial, pois ele:
SignedBeaconBlock
para a rede.MEV é o lucro adicional extraído pelos validadores (antigos mineradores) ao reordenar, incluir ou censurar as transações dentro de um bloco.
Algumas estratégias comuns de MEV são:
Antes da transição do Ethereum para o PBS, o proponente (anteriormente mineradores em PoW) tinha controle total sobre a ordenação de transações . Isso criou um ecossistema onde o MEV era extraído diretamente por validadores ou terceirizado para pesquisadores especializados.
priority_fee
, que são as taxas que o usuário está disposto a pagar para ser incluído primeiro. Também poderia ser ordenado de forma que o Validador tenha mais receita (por meio de sandwich/frontrunning).Isto é um pouco vagamente abstraído para simplificar. Mas este era o fluxo geral. Isto pode ser denominado como Vanilla Block Building
Para abordar os riscos de centralização e ineficiências da construção de blocos controlada pelo validador, a Separação Propositor-Construtor (PBS) foi introduzida. O PBS divide as responsabilidades da produção de blocos entre duas entidades separadas:
Searchers → que são entidades externas que escaneiam o mempool continuamente para encontrar oportunidades MEV ( mais sobre isso abaixo ). Eles buscam as respectivas transações e inserem as suas próprias se e quando necessário para obter lucro. Então, eles criam um pacote dessas transações, cuja ordem deve ser mantida para que o Searcher obtenha lucro. Pacotes são transações ordenadas que devem ser executadas atomicamente. Junto com esse pacote, eles podem adicionar uma transação no final do pacote que denota um "suborno" ao Builder. Esse pacote é enviado ao Builder por meio da chamada eth_sendBundle
.
Observação : os pesquisadores são entidades externas e influenciam a ordem das transações, mas não participam da validação de blocos ou de decisões de consenso.
Construtores → A próxima entidade é o Construtor, que realmente constrói o bloco. Eles tentam maximizar tanto a receita de taxas quanto a receita de MEV. Eles incluem as transações agrupadas enviadas pelos Pesquisadores (esperançosamente em ordem) e aceitam o pagamento (suborno) enviado pelos Pesquisadores. Os Construtores constroem cargas úteis de execução usando transações recebidas.
Eles preenchem os blocos com:
Pacotes enviados pelos Searchers.
Transações de alta prioridade.
Ordene transações gerais tendo em mente maximizar a receita.
Eles também definem o campo feeRecipient
para seu próprio endereço, significando que receberão tanto os subornos do Searcher quanto todas as taxas das transações em seu bloco enviado. Os Builders enviam uma transação no final de seu bloco que serve como um suborno para o proponente, semelhante ao que o Searcher fez para o Builder.
Observação : os construtores são entidades externas e não interagem diretamente com o blockchain.
Colocando tudo junto
É inteiramente possível que, ao receber o payload do bloco, o proponente desembrulhe o bloco, insira suas transações e altere a ordenação conforme sua preferência, bem como defina o feeRecipient
para seu próprio endereço. Isso significaria que cada entidade que trabalhou no processo de construção do bloco até agora (Searcher → Builder → Relay) será enganada ou fará "MEV stealing". Para evitar isso, o Relay envia apenas o Header do Block Payload selecionado. Isso acontece quando o proponente faz a chamada eth_getPaylaodHeader
. O Relay agora envia um PayloadHeader
que contém o hash do corpo, o lance e a assinatura do construtor.
O proponente tem 2 opções neste momento:
Para selecionar o PayloadHeader
(também chamado de Blinded Block ) fornecido pelo Relay. Se for o caso, o proponente deve assinar o cabeçalho com sua chave e enviá-lo de volta ao Relay e, consequentemente, solicitar o PayloadBody
usando a chamada eth_returnSignedHeader
. Agora, o Relay executa a chamada eth_sendPayload
que retorna todo o ExecutionPayload
ao proponente. O Proponente então simplesmente propõe esse bloco à rede Ethereum Validator ou, mais especificamente, ao comitê ao qual foi atribuído.
O Proponente pode escolher não aceitar o PayloadHeader
enviado pelo Relay, caso em que ele deve construir o bloco ele mesmo. Isso inclui encontrar oportunidades de MEV e ordenar transações adequadamente. Claro, neste caso, o Proponente consegue manter toda a receita das taxas + MEV. No entanto, isso não é tão simples quanto parece. Encontrar MEV e otimizar a receita é uma tarefa bastante pesada em computação e há a possibilidade de que o proponente não consiga construir o bloco a tempo (12 segundos), portanto, haverá um slot perdido. Neste cenário, o proponente pode ser cortado da rede.
Bem, o proponente é obrigado a assinar o PayloadHeader
por esse exato motivo. Antes de enviar o Header, o Relay envia o PayloadBody
para um Escrow
para guarda. Uma vez que o Relay recebe o PayloadHeader
assinado do proponente, ele verifica a assinatura e envia o PayloadBody
armazenado no escrow para o Proposer. Agora, digamos que o proponente não inclua esse Block. Ele constrói seu próprio bloco, ignorando a ordenação feita até então. Nesse caso, a assinatura não corresponderá, pois os cabeçalhos foram alterados.
Observação : é uma infração punível com corte assinar dois cabeçalhos diferentes para o mesmo slot de proposta.
O Construtor agora pode transmitir esses Cabeçalhos Assinados conflitantes para a rede e o Proponente pode ser excluído da rede.
Bem, nada. O motivo mais comum pelo qual os Builders podem censurar uma transação é porque ela interage com endereços OFAC . Para simplificar, OFAC aborda transações interativas que podem ter repercussões legais, o que obviamente ninguém gostaria de ter sobre suas cabeças.
De acordo com o Censorship.pics, os blocos criados pelos Builders incluem apenas 0-7% de transações sancionadas pelo OFAC.
Uma das soluções mais conhecidas para censura de transações no momento em que este artigo foi escrito são Inclusion Lists
.
Listas de inclusões são uma lista de transações (junto com algo chamado Resumo) que são publicadas pelo Proponente do Slot N junto com a proposta do Bloco do Slot N.
As Listas de Inclusão impõem que as transações na lista devem ser incluídas no Bloco N ou no Bloco N+1, caso contrário, o bloco N+1 será inválido. Elas são chamadas de Listas de Inclusão de Encaminhamento.
Nota : Há também uma noção para Listas de Inclusão Spot que faz IL para o atual Bloco N em si. Mas esse design tinha falhas econômicas que levaram às Listas de Inclusão Forward.
É claro que esse design de ILs não permitirá 100% de resistência à censura, mas há pesquisas ativas em andamento para reforçar essas propostas e muitas otimizações interessantes que podem ser aplicadas para melhorar a estrutura de incentivos.
As Listas de Inclusão Forçadas pela Fork Choice (FOCIL) são um novo design proposto em 2024 que desenvolve e aprimora as Listas de Inclusão para aumentar a neutralidade confiável.
O FOCIL permite que vários Validadores forneçam sugestões na Lista de Inclusão para um slot específico. Para ser mais preciso, 16 Validadores são escolhidos aleatoriamente em cada slot para formar um Comitê de Lista de Inclusão. Cada um desses membros forma seu próprio IL local e o espalha para a rede. O Proponente coleta e agrega listas de inclusão locais disponíveis em um IL final. Os designs de IL são leves, pois não há necessidade de reconstruir o bloco para incluir essas transações; elas podem ser simplesmente anexadas ao bloco. A condição para um Bloco satisfazer o requisito de validação de IL é " O bloco é válido se contiver todas as transações de todos os ILs até que o bloco esteja cheio".
Nota : Os membros do comitê IL não podem garantir nenhuma forma de ordenação de transação, pois as transações IL podem ser incluídas em qualquer ordem. Eles apenas garantem a inclusão da transação.
Separação Propositor-Construtor do Ethereum: Promessas e Realidades
Estado da pesquisa: resistência à censura na PBS
Censura do Construtor: o núcleo podre do ethereum
Lista de inclusão de encaminhamento
Quem ganha os leilões de construção de blocos Ethereum e por quê?