Soft fork e Hard fork na blockchain. O que são?


#1

Vou explicar aqui neste tópico de forma simplificada o que significam os termos soft fork e hard fork quando estamos falando de blockchain.

O que é um fork?

Fork é um conceito muito conhecido na área de programação.

O termo, como não era de se estranhar, acabou chegando e tomando conta também do mundo de criptomoedas.

O nome talvez não seja tão explicativo quanto pareça, afinal fork significa “garfo” em inglês, e a princípio isto não explica nada.

Apesar de alguns termos terem uma tradução direta para o português, este é um dos que eu nunca vi (nem ouvi) ninguém usando a tradução direta.

Na visão de um programador é meio estranho ouvir algo como “Haverá um garfo do projeto”.

Para simplificar: O nome fork se dá pelo formato do garfo, e não pela sua utilidade.

O garfo tem um tronco central e único, e ao chegar na ponta há uma ramificação (divisão do tronco em ramificações menores).

Geralmente programas de computador começam a ser desenvolvidos por um grupo, ou uma pessoa.

Ao longo do seu desenvolvimento várias decisões precisam ser tomadas para encaminhar o projeto para o seu verdadeiro objetivo.

O que acontece é que em muitos casos os próprios desenvolvedores discordam de como o projeto deve ser continuado, e neste momento pode acontecer um fork.

Há uma divisão (ou cópia) do projeto original (que seria o tronco), e a partir deste momento ambos os projetos seguem caminhos diversos (suas ramificações).

E nas criptomoedas?

Se você já assistiu o vídeo aqui da tribo sobre blockchain, já deve ter entendido um pouco sobre como os mineradores mantém a sincronia e integridade das transações através do processo de mineração.

Portanto todos os mineradores precisam obedecer as mesmas regras e chegar as mesmas conclusões para que o processo seja confiável. Estas regras que permitem o consenso entre os mineradores são feitas através de um protocolo.

O resultado da mineração é a produção de mais blocos encadeados na blockchain, e esta base de dados chamada de blockchain é guardada no computador de cada minerador.

Algo importante a se considerar é que o código do software que os mineradores utilizam pode sofrer atualizações com o tempo, principalmente para arrumar problemas (bugs) detectados e corrigir diversos tipos de limitações que vão sendo descobertas conforme a rede recebe mais transações.

Estas mudanças no código do software podem gerar dois tipos de forks: soft fork e hard fork.

Qual a diferença entre Soft fork e Hard fork?

Em inglês, soft é algo mais suave, e hard é o oposto: algo mais brusco ou radical.

Um soft fork se dá quando a mudança no código que é usado pelos mineradores oferece compatibilidade com as versões anteriores, e por este motivo é possível que mineradores com códigos diferentes ainda trabalhem em harmonia mantendo a mesma cópia da blockchain.

Para este software novo, blocos existentes anteriores ao hard fork são considerados inválidos, mas para o software antigo, tanto os blocos novos quanto os anteriores são válidos.

A idéia é que ao longo do tempo, todos os mineradores atualizem suas versões, e que a rede continue funcionando sem qualquer impacto.

Já o hard fork acontece quando uma modificação no código propõe uma mudança mais radical na forma como os blocos são minerados/gerados, de forma que os blocos produzidos pelo software novo não possam ser validados por mineradores que utilizam o software anterior.

A partir do momento em que um minerador decide utilizar este novo software incompatível, na prática a base de dados anterior (blockchain) é ramificada.

Mineradores com o novo código começarão a manter uma blockchain que a partir deste momento será diferente da original, o que na prática significa dar origem a uma nova rede e nova moeda: Hard fork.

Os mineradores da rede anterior que decidirem não migrar para usar o código incompatível, continuarão mantendo a blockchain anterior, que seguirá seu rumo como se nada tivesse acontecido.

Algo que é interessante de saber é que no momento do fork todas as pessoas que tiverem uma certa quantidade de moedas na blockchain automaticamente também terão a mesma quantidade de moedas na nova ramificação.

Ps: Se você não sabia que suas moedas ficam na blockchain, veja este tópico aqui.

Isto foi exatamente o que aconteceu nos casos dos hard forks mais recentes: Bitcoin Cash e Bitcoin Gold.

Lembre-se: apesar de haver uma certa “duplicação” de moedas no momento do fork, as moedas terão valores diferentes no mercado. O valor de uma moeda é, além de outras coisas, definido pela sua confiabilidade, e por isso é muito difícil de prever o valor de uma moeda após um hard fork.

Muitas pessoas ao saber que um hard fork se aproxima decidem se posicionar (comprar moedas), para se beneficiar desta consequente duplicação, e garantir algumas moedas de graça na nova blockchain.

Esta é uma explicação simplificada do que hard fork e soft fork significam quando falamos de blockchain.

E você? Já conhecia os termos? Tem algo para acrescentar sobre o assunto?
Fique a vontade para responder o tópico e expôr o seu ponto de vista.


#2

Eita, excelente explicação, creio que vai ajudar bastante aos novatos que chegarem a tribo.
Vou mim manter atualizado, quaisquer novidades volto aqui.:sorrir:


#3

Opa! Muito obrigado, Tayrone!
Seja bem-vindo!


#4

Olá, acabei de me registrar, e gostaria de contribuir com o entendimento de soft/hardforks. Em um grupo do face eu fiz uma explicação envolvendo truco em resposta a uma dúvida… talvez outras pessoas achem interessante!
Tentarei desenvolver melhor a explicação no futuro… mas por enquanto é esta:


Você tá jogando truco.
As cartas na mão e na mesa é a blockchain.
As regras que você segue é o código.

soft-fork:
para apimentar um pouco, você decide jogar com uma das cartas no escuro (olhando apenas duas).
Isso é algo que só muda pra você e pro seu time estrategicamente, mas para os outros jogadores é indiferente, pois você não quebra nenhuma regra quando for mexer nas cartas da mesa (jogar carta na mesa, etc).

hard-fork:
o truco mineiro tem manilhas fixas (4 de paus, etc… sei lá). Se você partir do truco paulista, isso é algo que tem que ser aceito por todos os participantes, senão a coisa não funciona.
A interpretação sobre as cartas na mesa tem significados diferentes, e caso você fizesse a mudança sem avisar ninguém, isso muito provavelmente daria conflito sobre “quem venceu e quem perdeu” a rodada.

pq hardforks são complicados?
pq blockchain é um jogo de truco infinito que nunca acaba, no qual as regras são alteradas no meio do jogo - e as informações não são perdidas, ou seja, é como se cada carta jogada na mesa, de alguma forma, permacesse na mesa, pra sempre.
Pra alguém ver o placar do jogo, esta pessoa precisará ter em mente as regras de vitória para cada momento em específico.
Ficar fazendo hardforks deixa tudo mais complicado, dificulta melhorias futuras e é uma porta pra bugs ou alguma outra falha.

code-fork:
pode ser considerado um hard-fork, no qual as regras são alteradas, porém o jogo (e as mesas) são reiniciados com as novas regras apenas. Ou seja, o estado das mesas não tem resquícios do jogo/regra anterior.
É o caso do litecoin, cujo as regras foram baseadas no bitcoin, e tem sua própria blockchain.

Hard-fork “natural”:
No caso do Bitcoin, também pode acontecer um hardfork naturalmente. No caso, apesar das regras serem as mesmas, as cartas na mesa, pra jogadores diferentes, são diferentes. Trazendo isso pro truco, é como se uma carta estivesse quase totalmente embaixo das outras, apenas com o número “6” de fora. Só que outro jogador pensa que é o número “9”.
Ou seja, seguem as mesmas regras mas discordam das cartas que estão na mesa.

Portanto, pode ter soft-fork da regra, hard-fork da regra (que implica numa mudança das cartas na mesa), hard-fork “natural” (mudança das cartas “na mesa” mas sem mudar as regras) e fork do código.

edit:
Agora imagine que todos os jogadores, mesas e cartas são fantasmas.
Se acontece um hard-fork (do truco paulista pro mineiro), na verdade ambas as regras existem, e ambos os jogos. É como se tivesse um universo paralelo sobre o mesmo universo, ou dois cenários de fantasmas no memso lugar.
Se você é um jogador, pode continuar jogando ambos os jogos ao mesmo tempo. Mas se todos pararem de jogar, e por coincidência ninguém nunca mais voltar para usar aquele universo fantasmagórico em específico, pode-se dizer que tal universo morreu ou foi boicotado.

No bitcoin aconteceu de uma falha gerar tipo bilhares de moedas pra um cara. É como se um jogador tivesse aproveitado uma regra pra fazer camaço, “roubar” no jogo. Todos os participantes, sendo fantasmas, apenas “pegaram” um universo fantasmagórico em específico (no caso, um que estava eternamente “parado” antes do acontecimento do camaço), fizeram uma mudança de regra (hardfork) que preveniu aquela situação do camaço se repetir, e seguiram daí pra frente, deixando os outros universos de lado.
Então tem disto também, cada momento no passado também pode ser considerado um universo paralelo fantasmagórico que ficará eternamente esperando.

Bem, quando comprei bitcoin eu tinha entendido isso, que depende muito da interpretação e aceitação de nós jogadores.


Qualquer crítica e sugestão são bem-vindas!


#5

Nunca tinha pensado que eu veria menções a truco neste forum :slight_smile: Muito obrigado pela contribuição!
Achei muito interessante o seu conceito. Descobri que entendo mais de blockchain do que de truco.

Que venham mais contribuições assim!