Guia Sobre Hard Forks e Soft Forks
Introdução
Ao ser notificado de uma atualização em seu aplicativo de banco digital no smartphone, você provavelmente não pensa duas vezes para aceitar. Talvez seu celular atualize automaticamente sem você perceber. Afinal, é um processo necessário – se você não instalar a versão mais recente do software, corre o risco de não conseguir utilizar seus serviços, quando precisar.
Entretanto, quando se trata de criptomoedas open-source (de código aberto), é diferente. Você não precisa ler todas as linhas de código do sistema Bitcoin para usá-lo, mas ter a opção de fazer isso é importante. Não existe hierarquia e nenhum banco que pode simplesmente enviar atualizações e fazer alterações como bem entender. Sendo assim, implementar novos recursos em redes blockchain pode ser um desafio.
Neste artigo, iremos discutir sobre como as redes de criptomoedas podem ser atualizadas, apesar de não existir uma autoridade central. Para isso, são usados dois mecanismos diferentes: hard forks e soft forks.
Quem toma as decisões em uma rede blockchain?
Para entender como forks funcionam, é importante primeiro entender os participantes envolvidos no processo de tomada de decisão (governança) da rede.
No sistema Bitcoin, podemos distinguir três subconjuntos de participantes – desenvolvedores, mineradores e usuários de full node. Estas são as partes que, de fato, contribuem para a rede. Light nodes (como aplicativos de carteiras em celulares, laptops, etc.) são muito utilizados, mas eles não são realmente “participantes” no que diz respeito ao funcionamento da rede.
Desenvolvedores
Os desenvolvedores são responsáveis por criar e atualizar o código. Considerando uma moeda típica, qualquer pessoa pode contribuir para o processo. O código está disponível publicamente, ou seja, é possível enviar alterações para que outros desenvolvedores possam revisar.
Mineradores
Os mineradores são responsáveis por proteger a rede. Eles executam o código da criptomoeda e dedicam recursos para adicionar novos blocos à blockchain. Na rede Bitcoin, por exemplo, eles fazem isso por meio do Proof of Work. Os mineradores são recompensados por seus serviços através da recompensa de bloco.
Usuários Full Node
Full nodes são o núcleo da rede de criptomoedas. Eles validam, enviam e recebem blocos e transações. Além disso, os full nodes também mantêm uma cópia da blockchain.
É comum encontrar sobreposições nessas categorias. Você poderia, por exemplo, ser um desenvolvedor e um usuário full node ao mesmo tempo. Ou um minerador e um usuário full node. É possível atuar nas três categorias ou em nenhuma. Na verdade, muitos dos usuários de criptomoedas não desempenham nenhuma dessas funções. Em vez disso, eles optam por usar light nodes ou serviços centralizados.
Observando as descrições acima, podemos estar convencidos de que são desenvolvedores e mineradores que tomam as decisões relacionadas à rede. Os desenvolvedores criam o código – sem eles, não existiria nenhum software em execução e ninguém para consertar bugs ou adicionar novos recursos. Os mineradores protegem a rede – sem uma competição saudável de mineração, a cadeia pode ser roubada ou parar por completo.
No entanto, se essas duas categorias tentassem forçar o resto da rede a seguir suas vontades, não daria muito certo. Muitos consideram, que o poder sobre a rede está, na realidade, concentrado nos full nodes. Provavelmente devido a rede ser opt-in, ou seja, os usuários podem escolher qual software desejam executar.
Os desenvolvedores não invadem sua casa armados e forçam você a fazer o download dos binários do Bitcoin Core. Caso os mineradores adotem uma postura autoritária forçando mudanças indesejadas dos usuários, os usuários simplesmente sairão da rede.
Esses participantes não são soberanos – eles são provedores de serviços. Se as pessoas decidirem não usar a rede, a moeda perderá seu valor. A perda de valor afeta diretamente os mineradores (suas recompensas valem menos, quando denominadas em dólares). Quanto aos desenvolvedores, eles podem ser simplesmente ignorados pelos usuários.
Como podemos ver, não é como se o software fosse proprietário da rede. Você pode fazer as alterações que quiser e, se as outras pessoas executarem seu software modificado, todos poderão manter a conexão. Nesse caso, você teria feito um fork no software e criado uma nova rede no processo.
O que é um fork?
Quando um software passa por um fork, ele é copiado e modificado. O projeto original continua existindo, mas de forma separada do novo, que assume uma direção diferente. Suponha que a equipe do seu site favorito, em termos de conteúdo de criptomoedas, tenha um grande desacordo. Uma parte da equipe pode replicar o site em um domínio diferente. Entretanto, após a separação, eles postariam conteúdo diferentes do site original.
Os projetos têm uma base em comum e compartilham parte da sua história. Da mesma forma que uma estrada que se divide em duas, agora existe uma divergência permanente nos caminhos de cada projeto.
Observe que esse tipo de coisa acontece muito em projetos open-source (de código aberto) e já é algo que acontece muito antes do surgimento do Bitcoin ou da Ethereum. No entanto, a distinção entre hard forks e soft forks é quase exclusiva de ambientes blockchain. Vamos discutir um pouco mais sobre isso.
Hard forks vs. soft forks
Apesar de terem nomes semelhantes e essencialmente a mesma finalidade, os hard forks e soft forks possuem diferenças significativas. Vamos avaliar cada um.
O que é um hard fork?
Hard forks são atualizações de software que são incompatíveis com versões anteriores. Normalmente, ocorre quando nodes (nós) adicionam novas regras que apresentam conflito com as regras de nodes mais antigos. Os novos nodes são capazes de se comunicar somente com outros que operam a nova versão. Como resultado, a blockchain se divide, criando duas redes distintas: uma com as regras antigas e outra com as novas.
Portanto, agora existem duas redes funcionando em paralelo. Ambas continuarão propagando blocos e transações, mas não estão mais trabalhando na mesma blockchain. Todos os nodes compartilharam uma mesma blockchain até o ponto de bifurcação (esse histórico permanece inalterado), mas depois disso, eles terão blocos e transações diferentes.
Considerando esse histórico compartilhado, caso você possua moedas desde antes do fork, terá moedas em ambas as redes. Suponha que você tem 5 BTC quando ocorre um fork no bloco 600.000. Você poderia gastar esses 5 BTC na cadeia antiga, no Bloco 600.001, mas eles não serão gastos no Bloco 600.001 da nova blockchain. Assumindo que não houve alteração na criptografia, suas chaves privadas ainda mantêm cinco moedas na rede que sofreu o fork (bifurcação).
Um exemplo de hard fork foi o de 2017 que dividiu a cadeia Bitcoin em duas – a original, Bitcoin (BTC), e uma nova, Bitcoin Cash (BCH). A bifurcação ocorreu depois de muita discussão sobre a melhor abordagem para a escalabilidade. Os proponentes do Bitcoin Cash queriam aumentar o tamanho de bloco mas membros da rede Bitcoin original se opuseram à mudança.
Um aumento no tamanho de bloco requer modificação das regras. Isso foi antes do soft fork SegWit (discutiremos isso em breve), então os nodes só aceitariam blocos menores que 1 MB. Se você criasse um bloco de 2 MB que seria válido, outros nodes o rejeitariam devido ao tamanho.
Somente os nodes que fizeram a alteração do software para permitir blocos com tamanho superior a 1 MB poderiam aceitar esses blocos. Claro, isso os tornaria incompatíveis com a versão anterior, portanto, só poderiam se comunicar, nodes com as mesmas modificações no protocolo.
O que é um soft fork
O soft fork é uma atualização que é compatível com versões anteriores, ou seja, nodes atualizados ainda podem se comunicar com os que ainda não fizeram a atualização. No soft fork, normalmente ocorre a adição de uma nova regra que não entra em conflito com as regras anteriores.
Por exemplo, uma redução do tamanho de bloco pode ser implementada através de um soft fork. Usando novamente o Bitcoin como exemplo: embora exista um limite para o tamanho máximo de um bloco, não há limite para o tamanho mínimo. Caso você queira aceitar apenas blocos menores do que um tamanho específico, basta rejeitar os maiores.
No entanto, isso não desconecta você da rede automaticamente. Você ainda se comunica com nodes que não implementaram as novas regras, mas algumas das informações que eles transmitem a você são filtradas.
Um bom exemplo real de soft fork foi o já mencionado Segregated Witness (SegWit), que ocorreu logo após a divisão Bitcoin/Bitcoin Cash. O SegWit foi uma atualização que mudou o formato de blocos e transações, mas foi minuciosamente elaborado. Os nodes antigos ainda podiam validar blocos e transações (a atualização não violava as regras), mas eles simplesmente não as entendiam completamente. Alguns campos só podiam ser lidos quando os nodes mudavam para o software mais recente, o que permitia a análise de dados adicionais.
Hard forks vs. soft forks – qual é melhor?
Fundamentalmente, os dois tipos de forks têm finalidades diferentes. Hard forks com muita controvérsia podem dividir uma comunidade por inteiro, mas os bem planejados proporcionam liberdade para modificar o software quando todos estão de acordo.
O soft fork é uma opção menos radical. De modo geral, as possibilidades são mais limitadas, pois as novas alterações não podem entrar em conflito com as regras já existentes. Dito isso, se sua atualização pode ser elaborada de forma que permaneça compatível, não existe a preocupação de fragmentação da rede.
Considerações finais
Hard forks e soft forks são cruciais para o sucesso de longo prazo das redes blockchain. Eles possibilitam mudanças e atualizações em sistemas descentralizados, mesmo com a ausência de uma autoridade central.
Forks permitem que blockchains e criptomoedas integrem novas funcionalidades à medida que se desenvolvem. Sem esses mecanismos, precisaríamos de um sistema centralizado com controle no sentido de cima para baixo. Caso contrário, estaríamos presos a exatamente às mesmas regras, durante todo o tempo de existência do protocolo.