# Soft fork

O softfork é uma alteração de protocolos em uma rede de criptomoedas, onde os nodes atualizados possuem compatibilidade reversa com os outros, de modo que os novos protocolos são aceitos por todos os nodes da rede. Softforks procuram preservar o código original, fazendo com que pequenas mudanças no código sejam implementadas no projeto original, sendo todas elas aceitas pela comunidade de desenvolvedores, nodos, usuários e mineradores. As novas regras permitem que um novo subconjunto derivado dos blocos válidos anteriormente, faça parte da cadeia de blocos original. Com um Soft fork, somente os mineradores terão que atualizar a plataforma, ou então eles vão acabar na blockchain perdedora. Usuários e comerciantes podem continuar executando nodos antigos, que agora aceitarão os blocos mais recentes que os mineradores encontrarem.
Os soft forks permitem mecanismos de implementação muito mais suaves que não exigem que todos os nós sejam atualizados de uma só vez e fornecem muitos mecanismos de mitigação para evitar divisões de cadeia. Além disso, os tipos de soft forks que foram implantados no Bitcoin foram especialmente projetados para serem compatíveis com versões anteriores e preservar o comportamento esperado de softwares mais antigos. Isso significa que você pode criar uma carteira antiga que você esqueceu em algum disco rígido antigo e ainda funcionará como esperado! Você ainda poderá enviar e receber bitcoins da mesma maneira que sempre fez
Como acontece frequentemente com aplicativos de celular, algumas atualizações são feitas sem que você precise baixar uma nova versão do aplicativo. Esse é o mesmo processo da soft fork: o sistema de uma criptomoeda é aprimorado para uma versão melhor, mas pode ser que o usuário nem note — as atualizações são feitas mantendo o sistema compatível com a versão anterior. Os soft forks podem ser uma correção de pequenas falhas que não comprometem a moeda ou uma melhoria em algum processo interno. Softforks foram feitos e usados nas blockchain do bitcoin e do ethereum, além de outras criptomoedas, com o intuito de implementar ou atualizar funcionalidades que são retro compatíveis..

## Definição

Um soft fork é uma versão atualizada do protocolo que é retrocompatível com as versões anteriores, pelo que versões mais antigas do software Bitcoin reconhecem novos blocos. A realização de uma soft fork do software Bitcoin é menos desafiadora na rede, pois apenas a maioria dos usuários de nós precisa fazer upgrade. Todos os nós, atualizados ou não, continuarão a reconhecer novos blocos e manterão a compatibilidade no Blockchain. O soft fork pode se tornar a cadeia mais curta e ser evitado pela rede quando é suportado apenas por uma minoria de hash na rede. Ou pode agir como um hard fork e uma corrente pode ser desalojada. Os soft forks têm sido a opção mais comumente usada para atualizar o Bitcoin Blockchain até o momento por causa de sua capacidade de reduzir o risco de dividir a rede. Atualizações de software como o BIP 66 - que lidou com a validação de assinatura - e P2SH - que alteraram a formatação de endereço do bitcoin - são exemplos passados de soft foks de sucesso.
O melhor exemplo pra explicar o soft fork é: Windows, da Microsoft. Vamos supor que você tem o Windows 7. Sempre que se conecta, há uma atualização ou outra para fazer no software, às vezes, nem precisa reiniciar o computador - você navega enquanto o PC vai sendo atualizado e não sente diferença nenhuma durante ou depois das alterações. Podemos considerar a mesma coisa para a Blockchain do Bitcoin.

### Diferença entre Hard e Soft Fork

Existem dois tipos de forks: soft-fork e hard-fork. O soft-fork é quando a rede é compatível com versões anteriores, o que significa que os nós atualizados podem usar os novos recursos, enquanto os nós antigos ainda funcionarão normalmente, mas não terão os novos recursos. A recente atualização do SegWit do Bitcoin é um ótimo exemplo de um soft-fork. Um hard-fork é exatamente o oposto: todos os nós devem atualizar. Qualquer nó que não atualize simplesmente não funcionará mais. O perigo real é o seguinte: os soft-forks são reversíveis, pois seguir as novas regras é opcional. Os hard-forks não são reversíveis, e qualquer erro no código ou comportamento imprevisto na rede só pode ser corrigido através de outro hard fork. Isso pode levar rapidamente a um buraco profundo.
Tanto hard forks quanto soft forks requerem um esforço de coordenação para garantir uma transição suave e evitar ou atenuar as divisões da cadeia. Hard forks por padrão dividem a cadeia a menos que todos os nós da rede atualizem seu software no momento em que as regras mudam. Considere por um momento as complicações logísticas e questões filosóficas sobre forçar todos os usuários (e desenvolvedores de aplicativos) a aceitar a mudança ou o risco real de segurança de potencialmente causar uma falha de consenso.Os soft forks permitem mecanismos de implementação muito mais suaves que não exigem que todos os nós sejam atualizados de uma só vez e fornecem muitos mecanismos de mitigação para evitar divisões de cadeia. Além disso, os tipos de soft forks que foram implantados no Bitcoin foram especialmente projetados para serem compatíveis com versões anteriores e preservar o comportamento esperado de softwares mais antigos. Isso significa que você pode criar uma carteira antiga que você esqueceu em algum disco rígido antigo e ainda funcionará como esperado! Você ainda poderá enviar e receber bitcoins da mesma forma que sempre fez.

### Como se decide um Soft Fork?

Para que uma atualização entre em vigor, ela deve passar antes no consenso da comunidade, ou seja, a grande maioria dos usuários devem votar e decidir se tal atualização deve ser aplicada ou não.Essa votação é feita através do próprio sistema do bitcoin e pode levar alguns minutos ou até várias semanas. Não se preocupe se você nunca votou, normalmente esse processo é feito pelos mineradores, e os usuários comuns, aqueles que apenas usam a moeda como forma de pagamento ou coisas do tipo, não passam por esse processo. Nos casos em que a atualização não receba a maioria dos votos, ela nunca acontece e acaba sendo ignorada, contudo, em alguns casos, alguns grupos resolvem lançar a atualização mesmo assim, ignorando a vontade da maioria.

## User Activated Hard Fork

User-activated soft fork (UASF) é um mecanismo onde o momento de ativação do soft fork ocorre em uma data especifica imposta pelos full nodes, um conceito referido às vezes como maioria econômica. Um soft fork user-activated necessita de muito suporte e coordenação da indústria, o que é uma boa pratica para um eventual hard fork, que requer muito mais coordenação da indústria. No passado, um UASF foi implementado com sucesso para ativar o P2SH soft fork (BIP16). Esse conceito foi utilizado em conjunto com o SegWit activation na proposta BIP148. Esse metodo requer muito mais tempo para trabalhar do que o soft fork ativado por poder de hash. Na verdade, se acredita que pode demorar um ano ou mais para escrever o codigo e deixar todos estarem preparados. Alem disso, se a maioria dos mineradores acabarem por não aceitarem a proposta e ativarem posteriormente novas regras, eles podem usar o seu enorme poder de hash para dividir a rede.
Os céticos mostram preocupação à medida que a solução ativada pelo usuário cresce em popularidade, pois algumas pessoas especulam que, se alguns mineiros ignorarem a transição, isso pode resultar em uma Miner Activated Chain Split (MACP). Isso, por sua vez, levaria a um hashrate minoritário, e outro símbolo com uma blockchain separada, ou seja, outro “Bitcoin”.Se as pools de mineração ignorarem a transição para o UASF e apenas os usuários (operadores de nó) ativarem, acredita-se que determinados nós pararão de receber blocos. De acordo com alguns céticos dentro da comunidade, a menos que 100% dos mineiros executem o código UASF, a implementação irá dividir a blockchain em duas.

## Miner Activated Hard Fork

Miner activated soft fork é um mecanismo onde mineradores disparam a ativação de soft forks quando a maioria dos mineradores sinaliza a prontidão para atualizar. isso permite uma ativação mais rapida para esse soft fork, deixando os full nodes atualizar a sua vontade. Esse método é uma troca, porque coloca a confiança no poder de hash realmente imposto às novas regras. Se não fizerem isso, pode causar varias cadeias invalidas na rede. Por exemplo, esse mecanismo foi o caso do BIP66, quando o poder de hash indicou uma atualização quando na verdade mais de 50% não tinha. A outra troca é que o metodo permite um numero pequeno de poder de hash para vetar a ativação do softfork para todos na rede. Porem, se todos cooperarem, esse metodo é muito conveniente e foi muito usada para ativar com sucesso varios soft fork como o BIP CLTV e o BIP112 CSV
No caso de os mineradores não chagarem a um acordo com os usuários, um grupo maior pode atacar um grupo menor, assim, toda transação feita por um grupo menor pode ser descartada, portanto é arriscada. O grupo menor poderia implementar algumas estratégias defensivas, como fazer alterações de algoritmo e protocolos. Porem, isso pode ser extremamente prejudicial para esse grupo minoritário.

## Soft Forks Ativodos no Bitcoin
### Pay-to-Script-Hash

Pay-to-Script-hash, ou P2SH são uma extensão da idéia de assinaturas multiplas, mas reduzindo a carga sobre a infra-estrutura do Bitcoin em termos de armazenamento requerido. Uma transação comum de 2-de-3 assinaturas múltiplas pode levar até cinco vezes mais espaço do que um pagamento simples para endereçar ou pagar para uma transação de chave pública. Eles também reduzem a complexidade da codificação e transferem a carga em termos de taxas do remetente para o destinatário - afinal, é sua solicitação ter a complexidade das condições para a liberação dos fundos. Isso é feito transferindo o script usado para passar as transações para o <ScripSig> e fazendo com que o <ScriptPubKey> mantenha um hash do script. Isso significa que um novo endereço foi criado - um endereço de script. Sua ativação ocorreu no dia 1 de abril de 2012

### SegWit

SegWit foi uma proposta apresentada pela equipe Bitcoin Core. Nas transações do Bitcoin existem três elementos chave. Quem envia, recebe, e as assinaturas (chamadas de testemunhas) e estas ocupam uma grande parte do tamanho da transação. Ao contrário da crença popular, a segwit não separa as assinaturas das transações. Em vez disso, a SegWit passa a utilizar outra forma de contabilizar o tamanho dos blocos. Em vez de usar um limite de 1MB para os blocos, usa um valor maior. Este limite passa a ser de 4 Milhões de unidades. Neste sistema, cada byte de assinaturas (testemunhas) é contabilizado como uma unidade e cada byte informação restante é contabilizada com quatro unidades. Essencialmente, a SegWit introduz um novo formato de transações. Isto significa que o tamanho dos blocos é aumentado sem ser necessário um hard-fork. Isto porque depois da SegWit, cada byte de assinaturas é contado como 0.25 bytes, ou seja se as transações tivessem apenas dados de assinaturas, o tamanho máximo seriam aproximadamente 4MB.
Para implantar SegWit com um soft fork, os dados da ‘witness’ tiveram que ser colocados em uma nova parte de um bloco do Bitcoin. E a “âncora” para todos esses dados da ‘witness’ (a “Merkle root”) teve que ser movida para uma parte um pouco convencional de um bloco Bitcoin: a transação da moeda que recompensa mineradores com novas moedas. Em meados de julho, os mineradores de Bitcoin perderam sua janela para ativar o SegWit através do método proposto pela equipe de desenvolvimento do Bitcoin Core a tempo de serem compatíveis com o BIP148. Como resultado, os mercados ficaram agitados com uma possível “divisão” entre uma cadeia BIP148 e uma cadeia não BIP148. No intervalo de apenas uma semana, o preço do bitcoin caiu de cerca de US$ 2500 para US$ 1900. Possivelmente assustado por esses movimentos do mercado, a comunidade de mineração de Bitcoin começou a sinalizar rapidamente o suporte para o BIP91, mesmo antes do cronograma estabelecido pelo Acordo de Nova York. E no dia 20 de julho, dez dias antes do ‘dia D’ para ativação, o BIP91 deu ‘lock in’. E foi ativado um pouco mais de dois dias depois.

## Controversias sobre os Soft Forks

Alguns críticos, porem, acreditam que a existência de soft forks prejudicam o bitcoin, com o argumento de que destroem alguns fundamentos do bitcoin, pois o fato de um node ter que aceitar transações com protocolos dos quais são irreconhecíveis para o mesmo, tendo em vista que existam nodes não atualizados na rede e que os protocolos novos permitem a existência normal desses nodes, faz com que se perca o sentido de se ter um node rodando na rede, já que, nesse caso, o node não pode servir como uma especie de "auditor descentralizado" da blockchain, como seria na ideia inicial do bitcoin