Reorganização da Cadeia

Quando um nó troca sua cadeia ativa por uma nova cadeia mais longa

Diagrama mostrando uma reorganização da cadeia pelos nós da rede.

Uma reorganização da cadeia (ou "reorg") acontece quando seu nó recebe blocos que fazem parte de uma nova cadeia mais longa. Seu nó vai desativar os blocos da sua cadeia mais longa antiga em favor dos blocos que formam a nova cadeia mais longa.

Esse processo permite que nós individuais pela rede concordem com a mesma versão da blockchain, porque a visão globalmente aceita será sempre a cadeia de blocos mais longa*.

*Tecnicamente é a cadeia com mais trabalho, mas o maior número de blocos geralmente é a mesma coisa.

Cenário

Quando acontece uma reorganização da cadeia?

Uma reorganização acontece mais comumente depois que dois blocos são minerados ao mesmo tempo.

Devido à velocidade de propagação dos blocos pela rede, alguns nós recebem um bloco primeiro e outros recebem o outro bloco primeiro. Portanto, haverá um desacordo temporário sobre qual desses blocos foi de fato o "primeiro" e pertence ao topo da blockchain de todos.

Isso é resolvido quando o próximo bloco é minerado. O próximo bloco vai construir sobre um desses blocos, criando uma nova cadeia mais longa. Quando os nós recebem esse bloco mais novo, eles veem que ele cria uma nova cadeia mais longa e fazem uma reorganização da cadeia para adotá-la.

Diagrama mostrando um fork temporário sendo resolvido quando o próximo bloco é minerado.

Então, graças às reorganizações, cada nó eventualmente concorda com a mesma versão da blockchain que todos os outros.

Blocos "Stale"

O que acontece com as transações da cadeia mais longa antiga?

Se um bloco é desativado devido a uma reorganização (um "bloco stale"), as transações dentro dele deixam de fazer parte da blockchain. Se você tentar gastar as saídas de uma transação dentro de um bloco stale, os nós rejeitariam sua transação, porque você estaria tentando gastar bitcoins que não existem na cadeia válida.

Na prática, porém, se dois blocos são minerados ao mesmo tempo, eles provavelmente incluem as mesmas transações (ou parecidas), então uma reorg geralmente não causa problema. Mas, se houver transações no bloco stale que não estão no bloco concorrente, elas voltam para o memory pool do seu nó e são propagadas de novo pela rede, para a chance de serem mineradas em um bloco futuro.

Vale esperar uma transação chegar a 2+ blocos de profundidade antes de considerá-la final. Sempre há a chance de ela ser removida por uma reorg, e você terá que esperar/torcer para que seja re-minerada na cadeia mais longa.

Um "bloco stale" às vezes é chamado de "bloco órfão", mas "stale" é o termo mais preciso. Um bloco órfão é quando seu nó recebe um bloco antes de receber o bloco pai sobre o qual ele constrói; blocos stale não são órfãos porque têm pais.

Tamanho

Quão grandes podem ser as reorganizações?

Uma reorganização pode ter qualquer número de blocos de comprimento. Se seu nó recebe uma nova cadeia mais longa que a sua cadeia ativa atual, ele faz a reorganização para adotá-la, não importa quantos blocos serão substituídos.

É por isso que é possível para um minerador com a maioria do poder de hash substituir blocos e transações da sua cadeia mais longa atual via um ataque de 51%. A cadeia mais longa sempre vence.

Porém, reorganizações "naturais" (que acontecem por dois blocos minerados ao mesmo tempo) raramente envolvem mais do que o bloco do topo da sua cadeia.

Frequência

Com que frequência acontecem reorganizações?

Não muito frequentemente. Com base nos dados de um nó rodando continuamente desde março de 2021, reorganizações reais aconteceram cerca de 1 a cada 6.505 blocos (44,7 dias).

Comandos

Como encontrar reorganizações da cadeia?

Você pode ver as reorganizações que seu nó observou com o comando bitcoin-cli getchaintips. Os campos principais são:

  • branchlen – quantos blocos há na cadeia concorrente.
  • status:
    • active – Nossa cadeia ativa atual (a mais longa).
    • valid-forkNosso nó fez uma reorganização. Baixamos e validamos estes blocos e os tínhamos como parte da cadeia ativa, mas depois os desativamos ao receber uma cadeia mais longa.
    • valid-headersNosso nó observou uma possível reorganização. Baixamos estes blocos, mas não os validamos, pois nossa cadeia ativa era equivalente e ficou mais longa.
    • invalid – Um ramo que contém blocos inválidos.

Resumo

Reorganizações da cadeia são uma parte perfeitamente normal do funcionamento de um nó Bitcoin. Adotar a cadeia conhecida mais longa permite que nós pela rede concordem com a mesma blockchain.

Transações dentro de blocos desativados por uma reorganização se tornam inválidas, mas são recicladas de volta ao memory pool para a oportunidade de serem mineradas em um bloco da nova cadeia mais longa. Como essas reorgs naturais normalmente só afetam o bloco do topo, espere sua transação chegar a 2 blocos de profundidade para evitar esse cenário.

Recursos