# SegWit2x

O SegWit2x é um hard fork da criptomoeda Bitcoin. Resumidamente, hard fork é quando uma blockchain divide-se em dois caminhos distintos que coexistem de modo paralelo. A proposta desta mudança é de duplicar o tamanho dos blocos de transações. Este aumento tem como intenção melhorar a escalabilidade da rede e tornar as transações mais rápidas. A integração do SegWit2x à rede Bitcoin estava prevista para acontecer no dia 16 de novembro de 2017 mas foi suspensa segundo um dos autores Mike Belshe, por não haver o total consenso da comunidade em relação a mudança.
O código do programa da implementação do SegWit2x foi criado no repositório do BTC1 e liderado pelo programador Jeff Garzik. De acordo com o acordo de Nova York, o SegWit2x viria a acontecer 144*90 (centro e quarenta e quatro vezes noventa) blocos após a ativação do SegWit2x. Esse número foi escolhido baseado na criação de blocos a cada 10 minutos, sendo 144 blocos por dia vezes 90 dias.

## Contexto

Durante três anos houve muitos debates em relação às preocupações futuras da rede Bitcoin e a maior delas é em relação a sua escalabilidade. O número de usuários do Bitcoin têm aumentado muito, com o número de usuários dobrando a cada 12 meses mas em relação a sua infraestrutura não houve muitas mudanças. Fazendo uma analogia, é como uma cidade onde cresce muito o número de carros na rua mas não há nenhuma melhoria ou aumento das pistas.
Apesar de algumas mudanças terem sido aplicadas, a preocupação em relação ao crescimento da rede ainda é contínua, uma vez que para que um novo fork seja aplicado é necessário haver um consenso dos membros da comunidade do Bitcoin tornando a implementação de novos forks um pouco mais demorado e muitas vezes até suspenso como foi o caso do SegWit2x.

### Tamanho do bloco

Em meados de 2015 Gavin Andresen, ex-desenvolvedor do Bitcoin Core, e o desenvolvedor principal do Bitcoin, Mike Hearn, acreditavam que o limite de tamanho de bloco de 1 megabyte do Bitcoin deveria ser aumentado com um hard fork. A partir disso o debate sobre o tamanho dos blocos se intensificou ainda mais e em 2017 o fundador e CEO da DCG, Barry Silbert, também preocupado com um possível fork organizou uma reunião antes da Consensus Conference 2017 em Nova York.

### O acordo de Nova Iorque

Esta reunião organizada por Barry Silbert envolveu empreendedores de Bitcoin e outros membros proeminentes da indústria (um pedaço significativo da indústria Bitcoin). Este encontro ficou conhecido como o Acordo de Nova York e ficou decidido que, com base em uma ideia originalmente proposta pelo fundador da RSK Sergio Demian Lerner, a SegWit seria ativado em condições específicas, enquanto também haveria um hard fork para duplicar o limite de tamanho dos blocos do Bitcoin (mudança futuramente conhecido como SegWit2x).

## Pontos positivos
### Menores taxas de transação e/ou confirmações mais rápidas

Com o aumento dos blocos de Bitcoin, mais transações poderão ser feitas na rede e isso deve aumentar a velocidade das transações e reduzir as taxas médias. Também acredita-se que o aumento do tamanho do bloco trará mais usuários de forma mais rapidamente. Esse aumento do número de usuários pode aumentar a taxa de câmbio de Bitcoin ocasionando o aumento da receita de mineração, o que deveria se traduzir em mais poder de hash para proteger a rede.

### Manter a rede unida

O protocolo alternativo Bitcoin Unlimited, um dos impulsionadores da criação do acordo de Nova Irque, era considerado uma ameaça iminente para a rede Bitcoin. Esse movimento foi liderado por empresas que apoiavam o aumento do limite do tamanho dos blocos da blockchain e opositores da atualização do protocolo SegWit. Essas empresas alavancaram o poder de hash de seus pools de mineração para atrasar a ativação do SegWit, enquanto planejava aumentar o limite do tamanho do bloco com um hard fork. Isso poderia ter “dividido” a rede Bitcoin em duas blockchains e moedas incompatíveis.
O SegWit2x foi apresentado como um compromisso intermediário entre os dois campos de guerra do debate em escala. “Um lado” obteria o SegWit, enquanto o “outro lado” receberia um hard fork de aumento de capacidade. A maioria dos signatários acreditava, pelo menos no momento do acordo, que esta seria uma solução que deveria manter a rede Bitcoin junta.

## Pontos negativos
### Aumento dos custos

Em contrapartida às menores taxas e confirmações mais rápidas, o aumento dos blocos também aumentam os requisitos de recursos para operar um nó completo, como maior uso de banda e maior tempo de sincronização. Isso aumenta o custo para os usuários individuais participarem da rede.

### Efeito centralizador

Blocos maiores tornariam mais devagar a propagação do bloco através da rede peer-to-peer, o que potencialmente beneficia os mineradores maiores e as pools de mineração e isso é visto como mais um efeito centralizador que vai contra toda a filosofia do Bitcoin.

## Posicionamento da Comunidade

A mudança para duplicar o tamanho do bloco pareceu ser controvérsia e isso traz bastante tensão e incerteza para a comunidade. De acordo com o site Coin Dance, os mineradores do Bitcoin foram maioria em relação ao apoio do hard fork para o SegWit2x. O número de mineradores que apoiam a mudança chegou a 84% em meados de Julho/Agosto e atingiu 95% em setembro e em 06 de dezembro este número ficou em 9%. O principal argumento dos mineradores é que o aumento do tamanho dos blocos é necessário para o crescimento da rede e que também irá reduzir o aumento das taxas de transação que acompanham esse crescimento. Entre os apoiadores estavam também empresas como casas de câmbios de bitcoin, wallet providers, market makers e donos de Cofre de Bitcoin (o posicionamento dessas empresas mudam muito de acordo com o sentimento da comunidade).
Embora uma grande fração da comunidade de mineradores apoiem a mudança, muitas pessoas concordam que o aumento do tamanho do bloco Bitcoin vem com uma série de poréns. A maioria da comunidade de desenvolvedores do Bitcoin, algumas empresas e algumas pools de mineração e (se as pesquisas públicas e os mercados de futuros são representativos) a maioria dos usuários e o mercado não estão à vontade com este hard fork. Alguns deles estão envolvidos em uma espécie de protesto, sob a bandeira “NO2X”.
O site Bitcoin Magazine publicou alguns dos principais pontos levantados pelos que levantas a bandeira "NO2X" que são:
* NÃO para “acordos de portas fechadas”. Muitos não ficaram satisfeitos com o fato da decisão da implementação do SegWit2x ter sido tomada em uma reunião privada por um grupo relativamente pequeno. Embora haja um canal de discussão no BTC1, ele não é muito movimentado, ou seja, não há muitas discussões da implementação.
* NÃO para hard forks controversos e apressados. As regras do sistema não devem ser alteradas em relação à vontade de um usuário: isso prejudicaria a confiança neste tipo de dinheiro. E mesmo que o fork não fosse controverso, a implementação do SegWit2x foi feita em apenas três meses e muitos acreditam que o tempo mínimo necessário para preparar melhor a comunidade é de 1 a 2 anos.
* NÃO para confusão da marca. Caso houvesse uma divisão do Bitcoin, muitos usuários poderiam se confundir na hora de identificar qual é qual podendo ocasionar uma compra de um Bitcoin quando se queria comprar o outro ou até transferir a cripto-moeda errada. Uma solução para isso seria a troca do nome do novo fork.
* NÃO para os mineradores sendo o fator decisivo. Os usuários acreditam que eles é quem devem decidem qual moeda eles querem comprar ou aceitam como pagamento. Ou seja, são eles quem decidem qual protocolo é mais valioso. E segundo os oposicionistas, este é o protocolo que os mineiros querem minerar e ponto.
Em contrapartida, também há os pontos dos que apoiam o SegWit2x:
* SIM para baixar taxas de transação e/ou confirmações mais rápidas. Como já dito anteriormente, o aumento do tamanho dos bloco devem aumentar a velocidade das transações e reduzir as taxas médias.
* SIM para o comprometimento e mantimento da palavra. O acordo de Nova Iorque propôs como solução tanto a implementação do SegWit como o aumento do tamanho dos blocos (SegWit2x) e como apenas o SegWit foi devidamente implementado e integrado, o acordo ficaria feito pela metade.
* SIM aos mineradores sendo o fator decisivo. O número de mineradores que apoiaram o SegWit2x chegou a 95% e alguns defensores da mudança dizem que os mineradores são quem decidem ou devem decidir o futuro dos protocolos do Bitcoin.

## Suspensão do SegWit2x

Em 08 de novembro de 2017, em uma postagem, um dos responsáveis pelo SegWit2x anunciou a suspensão do hard fork. Na postagem, ele explicou os principais motivos da suspensão e declarou que a mudança poderia dividir a comunidade e prejudicar o crescimento do Bitcoin, já que não conseguiu o consenso total para a mudança.

### Reação à suspensão

A Reação do mercado à suspensão foi quase imediata, aumentando seu preço a quase 400 dólares, pois diminui a tensão e incerteza dos que eram contra o aumento da capacidade dos blocos e dos que achavam que o fork era de alto risco.
Mesmo com a notícia da suspensão, alguns programadores e empresas continuaram insistindo de que a mudança deveria ser feita de qualquer forma e aguardaram ansiosamente pelo bloco 494784 para verificar se o fork 2x seria minerado ou não. A reviravolta foi que havia algum erro no código do SegWit2x e o fez com que parasse no bloco 494782.

### A falha na ativação

A diferença de linhas do código no repositório do BTC1 para o do Bitcoin Core era de aproximadamente 500 linhas onde a maioria não era consensus-critical. Mas mesmo assim, haviam bugs em pelo menos 100 linhas de código no suporte para a realização do fork no bloco 494784. A falha mais crítica envolve a principal verificação, que é a condição de verificar se o tamanho possuía 2MB ou mais (anteriormente, a verificação era feita para 1MB). Esta é a parte crítica do código de consenso que rejeita blocos muito grandes e, portanto, requer um hard fork.
A falha encontrada foi na verificação que era foi feita quando o bloco 144 * 90 após a ativação do SegWit foi alcançado. Deveria verificado se o bloco 144 * 90 antes do atual é o que possui o SegWit ativado mas acontece que a verificação foi feita no bloco (144 * 90) - 1 onde o SegWit não havia sido ativado.
O pull request realizado possui cerca de 220 comentários mas a maioria é sobre o aumento do tamanho do bloco para 2mb. Outros fatores que podem ter ocasionado o não percebimento dos bugs, é que apenas uma pessoa aprovou a mudança no repositório e também há algumas reclamações de que o código não foi bem testado pelos desenvolvedores.
Este bug fez com que os mineradores de Bitcoin não pudessem minerar a criptomoeda com os blocos maiores quando necessário. E mesmo que eles procedessem com o fork, eles não iriam conseguir, não de forma automática.Os mineradores teriam, ao invés disso, que configurar manualmente o tamanho dos blocos mas dificilmente saberiam como fazê-lo. Jeff Garzik que defendeu que não havia problemas com o código submeteu um patch no repositório que resolve este problema.

### Outros bugs

O bug encontrado na lógica da ativação dos blocos com 2MB não era o único, outro bug foi encontrado no código do BlockAssembler que é o responsável pela criação de novos blocos.Essa parte é mais voltadas para os mineradores que são os responsáveis pela criação de novos blocos. O erro era basicamente uma variável que estava sendo usada mas nunca havia sido declarada e a importância dela é que essa variável é a responsável por definir qual o tamanho e peso que o bloco produzido terá. Se a variável booleana tiver o valor como false, os blocos maiores nunca serão ativados. Esse pull havia sido revisado por apenas um usuário (que provavelmente não percebeu a falha).

### Próximos passos

As discussões sobre o futuro da escalabilidade do Bitcoin ainda é algo que vai continuar pelos próximos meses ou até anos. Ainda não se sabe o futuro do SegWit2x, talvez o aumento do tamanho dos blocos das transações seja algo necessário no futuro e talvez ela tenha o tão esperado consenso que não foi obtido na primeira tentativa. Espera-se também que estes acontecimentos sirvam de aprendizado para os próximos forks, pois uma mudança traz muito mais confiança para os usuários de algum software quando ela é feita com calma e bem testada.