Hard Fork

Uma atualização incompatível com versões anteriores do software

Diagrama mostrando um hard fork na blockchain.

Um hard fork acontece quando é feita uma atualização no software do Bitcoin que é incompatível com versões anteriores.

É quando mudanças são feitas nas regras de modo que blocos/transações antes inválidos passem a ser considerados válidos na nova versão do software.

Como resultado, a menos que todos atualizem para o novo software, a blockchain se dividirá em duas direções:

  1. Uma cadeia formada por blocos que seguem as regras antigas.
  2. Uma cadeia formada por blocos que seguem as regras novas.
Diagrama mostrando um hard fork na rede bitcoin.

Os nós antigos não conseguem aceitar esses novos blocos, então duas blockchains paralelas vão existir. Isso é conhecido como um "hard fork" na cadeia.

Portanto, se você quer que uma mudança via hard fork seja bem-sucedida, precisa que todos os nós da rede concordem com as mudanças e atualizem seu software. É a única forma de todos se manterem na mesma versão da blockchain após a atualização.

Cenário

Como você cria um hard fork?

Para criar um hard fork, você precisa mudar as regras do software para permitir que blocos/transações antes inválidos sejam considerados válidos.

Para dar um exemplo simples, digamos que o limite de tamanho do bloco seja 1 MB, e que atualizemos o software para aceitar blocos de até 10 MB. A mudança começa quando os mineradores atualizam para a nova versão; o hard fork de fato acontece quando o primeiro bloco de 10 MB é minerado:

Diagrama mostrando o início de um hard fork quando um novo bloco quebra as regras antigas.

Esse hard fork persistirá enquanto a nova cadeia (com blocos incompatíveis de 10 MB) permanecer como a cadeia mais longa da rede.

Causas

O que pode causar um hard fork?

Qualquer coisa que quebre as regras de consenso existentes resultará em um hard fork. Por exemplo: mudanças na estrutura do bloco (ex.: aumento direto do tamanho máximo), mudanças na estrutura da transação (ex.: mudar a criptografia das assinaturas) ou mudanças em outras regras de consenso (ex.: aumentar o fornecimento máximo de bitcoin).

Problemas

Por que você não iria querer criar um hard fork?

1. Todos precisam atualizar.

Quem não atualizar fica para trás. Não receberá os novos blocos incompatíveis e ficará no escuro sobre as transações mais recentes da rede. Essas pessoas não perdem seus bitcoins, mas não conseguem mais participar do sistema normalmente. Não é uma forma amigável de atualizar uma rede peer-to-peer.

2. Uma discordância dividirá a rede.

O pior cenário seria um "hard fork contencioso", onde alguns mineradores concordam com a atualização, mas uma parte significativa não. Isso resultaria na blockchain se ramificando em duas blockchains paralelas, efetivamente dividindo a moeda em duas direções.

Diagrama mostrando o bitcoin como moeda se dividindo em duas direções após um hard fork contencioso.

Isso causaria confusão entre usuários e comerciantes e minaria a confiança no sistema, o que não é ideal se o objetivo é criar uma moeda digital estável.

Uma divisão entre mineradores também dividiria o poder de mineração entre as duas cadeias. Cada cadeia ficaria, portanto, menos segura, com menos poder para se proteger de um ataque de 51%.

Benefícios

Quando você iria querer um hard fork?

Devido ao risco de dividir a blockchain em duas, um hard fork é evitado para melhorias gerais no software. Como resultado, atualizações via hard fork são reservadas para correções urgentes de eventos potencialmente catastróficos, como: trocar a função de hash SHA-256 (se uma fraqueza for encontrada) ou aumentar manualmente o valor do alvo (reduzir a dificuldade) em caso de perda irrecuperável de poder de mineração.

É por isso que todas as atualizações do Bitcoin até agora foram implementadas como soft forks; um hard fork só deve acontecer no caso de um problema fundamental no funcionamento do sistema.

Exemplos

Houve algum hard fork na história do Bitcoin?

Não houve nenhuma mudança intencional via hard fork proposta pelos desenvolvedores do Bitcoin Core. Porém, houve duas atualizações de software que causaram (ou poderiam ter causado) um hard fork acidental:

1. Atualização de BerkeleyDB para LevelDB

v0.7.0 para v0.8.0

Versões anteriores à v0.8.0 usavam o banco de dados BerkeleyDB, que impunha um limite inesperado no número de entradas em um bloco. Quando foi substituído pelo LevelDB na v0.8.0, esse limite desconhecido foi removido. Em , um bloco foi minerado com mais entradas do que um nó pré-v0.8.0 aceitaria, criando um hard fork não intencional. Um hard fork permanente foi então minerado em , na altura 252.451, removendo o limite.

2. Vulnerabilidade de gasto duplo (CVE-2018-17144)

As versões entre 0.15.0 e 0.16.2 poderiam ter causado um hard fork, mas a vulnerabilidade (que permitiria a um minerador gastar duas vezes a mesma UTXO) foi corrigida na 0.16.3 antes de ser explorada, então nenhum hard fork de fato ocorreu.

Resumo

Um hard fork é quando você faz uma atualização no software do Bitcoin que produz novos blocos/transações incompatíveis com a versão antiga.

Para um hard fork bem-sucedido, você quer que todos (nós e mineradores) atualizem. Se os mineradores discordarem e continuarem minerando com ambas as versões, a blockchain se ramifica em duas cadeias paralelas, dividindo o bitcoin em duas moedas separadas — o que seria ruim para o Bitcoin. Por isso, atualizações gerais são feitas preferencialmente via soft forks.

Recursos