Reorganização da Cadeia
Quando um nó troca sua cadeia ativa por uma nova cadeia mais longa
Uma reorganização da cadeia (ou "reorg") acontece quando o seu nó recebe blocos que fazem parte de uma nova cadeia mais longa. O 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.
É estritamente necessário que a cadeia mais longa seja sempre considerada a válida.
Reorganizações recentes — a tabela ao vivo com as reorganizações reais observadas (altura/comprimento/data) será disponibilizada na Fase 3 (sobre uma API pública). Por enquanto, este é um marcador.
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.
Então, como podemos resolver essa disputa e garantir que todos concordem com a mesma versão da blockchain?
Bem, isso é resolvido quando o próximo bloco é minerado. O próximo bloco a ser minerado construirá em cima de 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.
Então, graças às reorganizações da cadeia, 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?
stale – com vigor ou eficácia comprometidos
Se um bloco é desativado devido a uma reorganização da cadeia (um "bloco stale"), as transações dentro dele deixam de fazer parte da blockchain.
Então, se você tentar gastar as saídas de uma transação dentro de um bloco stale, os nós rejeitariam a 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.
No entanto, 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.
Mas isso não é uma garantia, e se uma transação não existe na cadeia ativa, é como se ela nunca tivesse acontecido.
Vale esperar uma transação chegar a 2+ blocos de profundidade na blockchain 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 de volta 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 o 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.
Exemplo
Aqui podemos ver um exemplo de uma reorganização da cadeia real que aconteceu na blockchain na altura de bloco 578.141.
Tamanho
Quão grandes podem ser as reorganizações?
Uma reorganização pode ter qualquer número de blocos de comprimento. Se o seu nó recebe uma nova cadeia de blocos 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. Para o seu nó passar por uma reorganização honesta, o seguinte precisa acontecer:
- Dois blocos são minerados ao mesmo tempo.
- O seu nó recebe um dos blocos primeiro, mas o outro bloco é construído em cima e se torna a nova cadeia mais longa.
Não sei qual é a probabilidade matemática disso, então aqui está a frequência de reorganizações da cadeia com base nos dados de um nó Bitcoin (rodando continuamente desde março de 2021):
- Reorganizações reais: 43 (1 a cada 6.533 blocos / 44,9 dias)
- Recebemos uma nova cadeia mais longa e atualizamos para ela, desativando blocos da nossa cadeia mais longa antiga.
- Reorganizações evitadas: 231 (1 a cada 1.216 blocos / 8,4 dias)
- Ouvimos falar de uma cadeia que poderia se tornar a nova cadeia mais longa, mas a nossa cadeia ativa na época continuou como a mais longa.
Comandos
Como encontrar reorganizações da cadeia?
Você pode ver as reorganizações que o seu nó observou com o comando bitcoin-cli getchaintips.
Por exemplo:
[
{
"height": 589919,
"hash": "000000000000000000149b18e74316248d106e42ca410f509305ae58ccda6b13",
"branchlen": 0,
"status": "active"
},
{
"height": 578141,
"hash": "0000000000000000001253a5f37d3763dbe928d21f7d72a708f05268c044179c",
"branchlen": 1,
"status": "valid-fork"
},
{
"height": 575695,
"hash": "0000000000000000002409ed07fdbb1d0359a0c516014115c5451aea724baec8",
"branchlen": 1,
"status": "valid-headers"
},
...
] branchlen– diz quantos blocos há na cadeia concorrente de blocos.status– indica o seguinte:active– Esta é a nossa cadeia ativa atual (a cadeia mais longa).valid-fork– Nosso nó fez uma reorganização da cadeia. Baixamos e validamos estes blocos e os tínhamos como parte da nossa cadeia ativa, mas depois os desativamos ao receber uma cadeia de blocos mais longa.valid-headers– Nosso nó observou uma possível reorganização da cadeia. Baixamos estes blocos, mas não os validamos, pois a nossa cadeia ativa era equivalente e ficou mais longa.headers-only– Nosso nó observou uma possível reorganização da cadeia. Recebemos os cabeçalhos dos blocos de uma cadeia concorrente, mas não baixamos os blocos completos.invalid– Um ramo que contém blocos inválidos.
Os ramos com o status valid-fork são aqueles com blocos que originalmente considerávamos parte da nossa blockchain ativa, mas que depois desativamos após receber uma nova cadeia de blocos mais longa.
Os ramos com o status valid-headers são cadeias concorrentes que recebemos depois de já termos uma cadeia ativa equivalente. Elas poderiam ter resultado em uma reorganização, mas a nossa cadeia continuou como a mais longa, então nenhuma reorganização aconteceu.
É improvável que você veja reorganizações da cadeia se não estiver rodando o seu nó continuamente por algumas semanas ou meses. Quando o seu nó baixa a blockchain, ele só baixa os blocos da cadeia mais longa atual (e não blocos de ramos ou de reorganizações antigas). O seu nó precisa vivenciar as reorganizações conforme elas acontecem para que apareçam no bitcoin-cli getchaintips.
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, e as reorganizações da cadeia são apenas parte desse processo.
Transações dentro de blocos que são 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.
Então, basicamente, se a sua transação for minerada em um bloco, ainda há uma chance de ela ser jogada de volta ao mempool por causa de uma reorganização da cadeia. No entanto, essas reorgs naturais normalmente só afetam o bloco do topo da cadeia, então você deve esperar a sua transação chegar a 2 blocos de profundidade para ajudar a evitar esse cenário.