Soft Fork

Uma mudança compatível com o software antigo

Diagrama mostrando um soft fork na blockchain.

Um soft fork é quando é feita uma atualização no software do Bitcoin que é compatível com as versões anteriores do software.

Para resumir a diferença entre um soft fork e um hard fork:

Com um soft fork, os nós que não atualizam seu software ainda conseguem aceitar blocos/transações criados pelo software atualizado. Portanto, nós que não atualizam conseguem se manter atualizados com a blockchain e não ficam para trás.

Diagrama mostrando um soft fork na rede bitcoin, com nós antigos que não atualizaram recebendo os novos blocos dos nós atualizados.

Para tornar uma mudança via soft fork bem-sucedida, você só precisa que uma maioria dos mineradores da rede atualize para a nova versão do software. Porque, se você tem uma maioria de mineradores atualizando, o poder de mineração deles vai construir a cadeia mais longa de blocos atualizados (que os nós antigos vão adotar).

Cenário

Como você cria um soft fork?

Para criar um soft fork, você precisa restringir as regras do que é considerado um bloco ou transação válido.

Em outras palavras, você precisa tornar blocos/transações antes válidos em inválidos.

Por exemplo, digamos que o limite de tamanho do bloco seja 1 MB (a capacidade do bloco agora é medida em peso, mas não se preocupe com isso por enquanto). Uma mudança via soft fork seria criar uma nova regra que restringe o tamanho do bloco para 0,5 MB (parece um passo para trás, eu sei, mas isto é só um exemplo).

Quando mineradores atualizados começam a minerar esses blocos menores, os nós antigos ainda os veem como válidos, então não há ramificação da blockchain como haveria num hard fork.

Diagrama mostrando nós antigos da rede aceitando os novos blocos (da atualização via soft fork) em sua blockchain.

Método

Como tornar um soft fork bem-sucedido?

Para tornar um soft fork bem-sucedido, você quer uma maioria de mineradores atualizando para a nova versão do software.

Isso porque os nós sempre aceitam a cadeia mais longa de blocos. Então, se a maioria dos mineradores está minerando os blocos atualizados com as regras restritas, os nós antigos naturalmente adotam isso como sua blockchain.

Diagrama mostrando nós adotando a cadeia mais longa de novos blocos, apesar de alguns mineradores ainda minerarem blocos antigos.

Então, mesmo que uma minoria de mineradores antigos continue construindo a blockchain com blocos antigos, eles não conseguirão competir com a velocidade em que os novos blocos estão sendo minerados pelos mineradores atualizados, de modo que os nós antigos vão adotar a mesma versão da blockchain que os nós atualizados.

Riscos

Quais são os riscos de um soft fork?

O principal risco de um soft fork é se você não conseguir a maioria dos mineradores atualizando.

Isso resultaria na blockchain se dividindo em duas, pois uma maioria de mineradores antigos continuaria minerando blocos antigos que são incompatíveis com a nova versão do software.

Diagrama mostrando uma maioria de mineradores antigos construindo a cadeia mais longa com blocos antigos, criando uma divisão de cadeia entre uma blockchain com blocos antigos e uma blockchain com blocos atualizados.

E como os blocos antigos formam a cadeia disponível mais longa, os nós antigos vão adotá-la como sua blockchain. Porém, os nós atualizados vão rejeitar esses blocos antigos (porque esses blocos agora são inválidos segundo suas regras atualizadas), e vão adotar a cadeia disponível mais longa contendo apenas os novos blocos.

Então, mais uma vez, assim como em um hard fork, você tem duas versões paralelas da blockchain: uma contendo blocos antigos e outra contendo blocos novos.

Porém, diferente de um hard fork, onde as duas cadeias nunca podem convergir, essa divisão de cadeia pode ser resolvida colocando mais poder de mineração na nova cadeia. Se os mineradores atualizados conseguem construir a cadeia mais longa, os nós antigos fazem uma reorganização da cadeia para adotar a blockchain feita com os novos blocos.

Diagrama mostrando nós antigos reorganizando sua cadeia assim que uma maioria de mineradores constrói a cadeia mais longa com os novos blocos.

Assim, ao conseguir que uma maioria de mineradores atualize, você "incentiva" todos na rede a se manterem atualizados com a mesma versão da blockchain.

Compromissos

Qual é a desvantagem de um soft fork?

A maior desvantagem dos soft forks é que eles tendem a tornar o software mais complexo (o Segregated Witness é um exemplo perfeito).

Seria mais fácil fazer atualizações diretas no software por meio de hard forks. Porém, uma mudança via hard fork é indesejável devido ao maior risco de uma divisão de cadeia (e à necessidade de forçar todos a atualizar), então a maioria das atualizações é feita por meio de soft forks.

Como resultado, o fato de você ter de manter as mudanças compatíveis com o software antigo significa que precisa fazer mais contornos técnicos, e isso torna o software mais complexo do que se você tivesse a liberdade de fazer mudanças incompatíveis com os nós antigos.

Em resumo:

Exemplos

Houve soft forks no bitcoin?

Todas as grandes atualizações do Bitcoin até agora foram implantadas como soft forks.

Aqui estão alguns exemplos, incluindo um resumo das novas restrições que introduziram:

1. BIP 16: Pay to Script Hash

Problema

Não havia uma forma conveniente de fazer outras pessoas usarem travas personalizadas de sua escolha ao lhe enviar bitcoins.

Restrição

Um padrão específico de ScriptPubKey agora tem regras de validação adicionais (veja P2SH).

Assim, enquanto o padrão de script de travamento OP_HASH160 OP_PUSHBYTES_20 digest OP_EQUAL antes exigia apenas que você fornecesse algum dado cujo hash resultasse em digest para destravá-lo, agora você precisa fornecer algum dado na forma de um script de travamento personalizado cujo hash resulte em digest e que possa ser avaliado e destravado em uma segunda etapa de execução.

Em outras palavras, regras adicionais foram acrescentadas para como um script de travamento específico pode ser destravado.

2. BIP 30: Transações duplicadas

Problema

Não se pensava ser possível ter transações duplicadas no Bitcoin.

Porém, transações coinbase em blocos diferentes poderiam ter o mesmo TXID, permitindo transações duplicadas na blockchain. Isso também permitiria que mais transações duplicadas fossem criadas posteriormente.

Restrição

Os blocos não podem conter uma transação com um TXID que coincida com o de uma transação anterior ainda não totalmente gasta na mesma cadeia.

3. BIP 34: Bloco v2, Altura na Coinbase

Problema

Mesmo após a introdução do BIP 30 (veja acima), ainda era possível que mineradores construíssem transações coinbase duplicadas em blocos diferentes.

Restrição

Uma transação coinbase deve conter a altura do bloco como primeiro campo do ScriptSig. Isso garante que toda transação coinbase será única (e, portanto, terá um TXID único).

Qualquer transação coinbase que não contivesse a altura do bloco atual passaria a ser inválida.

4. BIP 65: OP_CHECKLOCKTIMEVERIFY

Problema

Não havia mecanismo para tornar uma saída de transação não gastável até uma data futura.

Restrição

O opcode OP_NOP2 foi reaproveitado como OP_CHECKLOCKTIMEVERIFY.

Como resultado, o opcode OP_NOP2 deixou de "não fazer nada", e scripts que o usam não mais seriam executados com sucesso sem que regras adicionais fossem satisfeitas.

5. BIP 66: Assinaturas DER estritas

Problema

Falta de consistência na codificação das assinaturas nas transações devido à dependência da biblioteca OpenSSL.

Restrição

Restringir as assinaturas a seguir um único formato de codificação. Isso facilita que implementações do Bitcoin não precisem depender do OpenSSL como dependência.

6. BIP 141: Segregated Witness

Problema

O TXID podia ser modificado depois de enviar uma transação para a rede, o que significava que você não podia depender do TXID para referenciar a transação posteriormente.

Isso acontecia porque o TXID era feito incluindo as assinaturas dentro da transação, e essas assinaturas podiam ser modificadas depois de criadas (ainda assim permanecendo válidas).

Restrição

Dois novos padrões de ScriptPubKey (P2WPKH, P2WSH) que antes eram gastáveis por qualquer um agora só são gastáveis sob certas condições.

Isso permite uma nova estrutura de dados de transação, onde as assinaturas ficam no fim dos dados da transação (em uma nova área de testemunha) e não entram na criação do TXID.

O Segregated Witness também permitiu um aumento do tamanho do bloco. Isso foi possível por não enviar a nova seção de testemunha das transações (contendo as assinaturas) aos nós antigos. Os nós antigos veriam essas saídas como gastáveis por qualquer um de qualquer forma, então as assinaturas não eram necessárias para que as transações fossem consideradas válidas.

7. BIP 341: Taproot

Problema

Um ScriptPubKey revela todas as suas condições de gasto dentro dos dados da transação. Elas podem ser complexas e grandes, e exibir todas as condições de gasto não é bom para a privacidade.

Restrição

Um novo padrão de ScriptPubKey (P2TR) que antes era gastável por qualquer um agora só é gastável sob certas condições. Isso permite um novo mecanismo de travamento e destravamento que revela apenas uma condição de gasto (e não todas as outras condições de gasto que podem ter existido para a trava).

Implantação

Como os soft forks são implantados?

O objetivo de um soft fork bem-sucedido é fazer uma maioria de mineradores concordar com a atualização.

Então, antes de a mudança via soft fork ser ativada, os mineradores são solicitados a sinalizar sua prontidão de antemão. Os mineradores podem sinalizar prontidão definindo um bit específico no campo version do cabeçalho do bloco.

Por exemplo:

00100000 00000000 00000000 00000001 = Bit 0 = CHECKSEQUENCEVERIFY (BIP 65)
00100000 00000000 00000000 00000010 = Bit 1 = Segregated Witness (BIP 141)
00100000 00000000 00000000 00000100 = Bit 2 = Taproot (BIP 341)
Ícone Ferramenta Version Bits

Version Bits

Cada bit do campo versão pode sinalizar prontidão para uma atualização (BIP9). Os 3 bits do topo devem ser 001 para a sinalização valer.

Campo de Bits 00000000000000000000000000000000
0x
4 bytes
  • Version Bits: Habilitado

Quando 90-95% dos mineradores estão sinalizando que concordam com a atualização dentro de um período de ajuste de dificuldade (e que vão minerar os novos blocos com as novas regras), o soft fork fica "travado" (locked in), e em uma altura de bloco específica os mineradores começam a minerar os novos blocos.

  • Os 3 primeiros bits da versão precisam ser 001 para poder sinalizar prontidão para soft forks.
  • Soft forks anteriores (ex.: BIP 16) foram implantados antes desse sistema específico de sinalização ser criado.
  • Soft forks geralmente exigem 95% dos mineradores sinalizando para a ativação, mas para o Taproot isso foi mudado para exigir apenas 90%.

Resumo

Um soft fork é uma atualização do software do Bitcoin que é compatível com versões antigas do software. Ele mantém essa compatibilidade restringindo as regras sobre blocos/transações válidos, em vez de relaxá-las como em um hard fork.

O principal benefício de um soft fork é que todos os nós da rede conseguem se manter atualizados com a blockchain mesmo que não atualizem.

A chave para um soft fork bem-sucedido é conseguir que uma maioria de mineradores atualize para a nova versão do software. Ao fazer isso, os mineradores terão o poder de construir a cadeia mais longa de novos blocos/transações, e os nós antigos naturalmente adotarão essa cadeia mais longa contendo os blocos atualizados.

Todas as atualizações do software do Bitcoin até agora foram feitas via soft forks.

Recursos