POTHIEDU Não Decore a Resposta. Entenda o Caminho

O Que Significa Uncle

O Que Significa Uncle

O que é um uncle block

Uncle block é um conceito do Ethereum. Quando dois mineradores encontram um bloco quase ao mesmo tempo, a rede fica com dois ramos competindo. O bloco que não acaba sendo included na chain principal vira uncle. Ele existe, foi workado, mas não faz parte do canonical chain. É importante entender isso antes de mexer com reorgs ou análises de gas, porque uncle status altera como você lê transações e como calcula reward de mining.

O que significa uncle no contexto do Ethereum

Significa simplesmente "bloco primo" — um bloco órfão que teve trabalho de proof-of-work válido, mas não entrou na chain principal por questão de timing. A rede não desperdiça esse esforço. Mineradores podem incluir um uncle dentro de outro bloco que succeeds e ganham uma recompensa reduzida por isso. O mecanismo existe para reduzir o problema de centralização de hash power. Sem uncles, a probabilidade de você perder seu bloco encontrado seria alta demais e só grandes pools sobreviveriam. Uncles dão um retorno mínimo para quem perde a corrida. Na prática, quando você vê uma transação ou bloco e precisa saber se é canonical ou uncle, olha os campos `branchId` e `uncleIndex` na resposta da RPC. Se o bloco tem height igual ao pai mas hash diferente, ele é candidato a uncle. Não tenta adivinhar pelo timestamp — o tempo pode coincidir em reorgs legítimos.
  • A recompensa de um uncle varia. É 1/3 do reward base do bloco, calculada como (8 - distance) / 8, onde distance é a diferença entre o height do bloco pai do minerador e o uncle. Bônus de inclusiveNonce também entra na conta, mas é marginal na maioria dos casos.
  • Um detalhe que muitos ignoram: uncle blocks não incluem transações no sentido funcional. As transações dentro dele ficam em mempool ou precisam ser repostas manualmente. Se você está monitorando tx que caiu num uncle, assume que ela sumiu e resubmeta com fee maior. Não espere ela reaparecer sozinha.
  • Edge case que eu encontrei: durante um período de alta volatilidade de gas em 2022, vários blocos estavam sendo tratados como uncles por redes sob congestionamento. Meu script de reconciliação de carteira estava contando o saldo com base na chain canonical e pulava as tx dos uncles, gerando um gap de aproximadamente 3% no total movimentado. A solução foi queryar `eth_getBlockByNumber` com o parâmetro `includeUncles: true` e depois cruzar os nonces das transações nos uncles com as contas de origem. Isso me obrigou a manter uma lista de endereços já processados para evitar contagem dupla, porque às vezes uma tx aparece no uncle E no canonical branch se o bloco principal for reorganized depois.
  • Não adianta depender de uncles para auditoria financeira séria. Eles são eventos transitórios. Se o seu sistema precisa rastrear cada centavo movimentado, trate uncle como dados de referência, não como verdade definitiva. Outro ponto: em validadores pós-merge, o conceito de uncle block ainda aparece em contextos de MEV e builder-relay, mas a dinâmica mudou. A propagação de bloco agora é via builder, e "uncle" virou sinônimo de proposta rejeitada ou block com slot vazio que poderia ter sido preenchido. Se você está lendo documentação antiga de pre-merge, desconfie. A terminologia colapsou depois da atualização. Se precisa verificar uncles de forma prática, use RPC nodes com histórico completo. Infura e Alchemy retornam campos de uncle corretamente. Nós pequenos de vez em quando truncateam esse dado por economia de storage, então seu script pode parecer que não existem uncles quando simplesmente o nó não os armazena.