Bitcoin XT, Forks e tudo mais (parte 2)

No post anterior eu expliquei o que eram os forks, e o que isso tinha a ver com o Bitcoin XT. Nesse post vou tentar esmiuçar um pouco o que é o Bitcoin XT.

Histórico

Desde os primórdios do bitcoin, o tamanho do bloco é o principal fator limitador da capacidade da rede de processar transações. No modelo atual, um bloco pode ter no máximo um megabyte de tamanho, o que limita o numero de transações a cerca de 7 por segundo (( Bloco de 1Mb, 250 bytes por transação, um bloco a cada 10 minutos, ou 600 segundos, em média $$ \Rightarrow \frac{1000000}{250 \times 600} \approx 6.66$$ ))((A conta de 250 bytes por transação foi feita pelo próprio Gavin Andresen e postada aqui)). Hoje isso parece ser o suficiente, e a não ser em casos onde tentam fazer um “flood” na rede ((referencia par ao flood de transações na rede)). Mike Hearn, o principal desenvolvedor do bitcoin XT fez estimativas usando o valor corrigido de 3,2 transações por segundo((3,2 transações por segundo é o limite atualmente aceito pois o tamanho médio de transações cresceu desde a previsão do Adresen, veja aqui)) seria atingido ainda no primeiro semestre de 2016((ver “Bitcoin’s seasonal affective disorder“, por Mike Hearn))((Opinião pessoal do autor aqui, olhando o gráfico de tamanho médio dos blocos (e não de numero de transações, como o Hearn fez) vejo que o crescimento dele é sublinear – pode ter a ver com a variação sazonal que ele explica no artigo – e, a não ser durante os ataques de flood que podem ser mitigados de outras maneiras, não está nem perto de chegar no limite dentro de um ano. Veja nesse gráfico)).

Dos piezas - on Flickr

Surgiram então ao menos 3 propostas de aumento dos blocos, defendidas por diferentes membros do “core developers”((Core developers é o nome dado ao time principal de desenvolvimento do bitcoin core)). O Jeff Garzik criou o BIP 100((BIP 100, por Jeff Garzik)), que propunha um sistema de votação para aumento dos blocos e o BIP 102 ((BIP 102, por Jeff Garzik)) que aumenta o bloco para 2Mb uma única vez. O Gavin Adresen propôs o BIP 101((BIP 101, por Gavin Andersen)), que propunha um aumento fixo inicial para 8Mb, dobrando esse tamanho a cada 2 anos até o limite de 20Mb. Por ultimo, o Pieter “sipa” Wuille fez uma proposta conciliatória((como traduzir “compromise”, meu deus?)) que ficou conhecida como BIP “sipa” e não chegou a ganha numeração definitiva((BIP “sipa”, por Pieter Wuille)). Essa proposta aumenta o blockchain gradualmente a cada 97 dias, numa média de 17.7% ao ano a partir de 2017. Os outros dois desenvolvedores do grupo((Posição do Gregory Maxwell))((Posição do Wladimir J. van der Laan)) se posicionaram contra o aumento do tamanho do bloco, por entre outros motivos((Veja um resumo dos argumentos aqui)) acharem que forçar um hard fork sem consenso da comunidade seria arriscado.

Nesse contexto, a comunidade e os desenvolvedores não conseguiram entrar em consenso. O Gavin Adresen como lider nominal do grupo se sentia pressionado para que uma decisão fosse tomada rapidamente((citação: “A lot of people are pushing me to be more of a dictator (like Mike) … that may be what has to happen with the block size. I may just have to throw my weight around and say this is what it’s going to be. If you don’t like it, find another project.”)). Aqui entra  em cena o Mike Hearn que já estava descontente com a forma como time de core developers tomava as decisões sobre o desenvolvimento do bitcoin e já vinha se desentendendo com alguns deles((sobre a discussão com o Wladmir J. van der Laan)). Ele então convenceu o Gavin Andresen a ajudá-lo em um novo projeto, construído em cima do Bitcoin Core, onde o processo de tomada de decisão fosse mais ágil e mais focado em atender as necessidades do usuário. O carro chefe desse novo projeto seria a BIP 101 do Gavin, mas ele comportaria outra mudanças. Em meados de agosto o projeto gerou seu primeiro fruto, que é o Bitcoin XT.((Why is Bitcoin forking?, por Mike Hearn))

O que vem no pacote?

O Bitcoin XT, como o próprio projeto diz, nada mais é que uma série de patches aplicados ao Bitcoin Core para conduzi-lo na direção que os novos desenvolvedores, em especial o Mike Hear, acham correta((citação: “Bitcoin XT is an implementation of a Bitcoin full node, based upon the source code of Bitcoin Core. It is built by taking the latest stable Core release, applying a series of patches, and then doing deterministic builds so anyone can check the downloads correspond to the source code.”)). O pacote completo de patches inclui, além do BIP 101, as seguintes funcionalidades:((Veja a lista detalhada dos patches))

  • Retransmissão de double spending pelos clientes (para facilitar a identificação de golpistas, a rede não mais filtrará as tentativas de gastar duas vezes a mesma moeda);
  • BIP 64 – “getutxos”, que permite que informações sobre transações sejam requisitadas na rede, auxiliando na implementação de carteiras descentralizadas e permitindo melhorias na interface;
  • Melhorias na lista de DNS seeds, permitindo maior diversidade e robustez nas conexões da rede;
  • Funcionalidades anti DoS – Duas propostas de proteção contra DoS, uma do Mike Hearn, outra do Tom Harding foram implementadas;

Votação e entrada em operação

O aumento de blocos não é uma mudança trivial, e não pode ser feito com uma mera atualização do software. É preciso forçar um hard fork na rede. Não existe uma forma de fazer a transição suave (usando soft forks), porque os blocos de tamanho maior seriam fatalmente rejeitados pelos clientes antigos, e não há uma maneira alternativa de encaixá-los no protocolo já que foi implementado como uma regra fixa em todos os clientes.((ver 1 e 2 para mais detalhes)). Um hard fork é uma medida arriscada, que pode gerar prejuízos se feito apenas por uma parcela da rede. Normalmente ele é conduzido com o consenso da comunidade que atualiza os principais nós e clientes da rede antes de um prazo pré estabelecido. Entretanto a implementação do aumento de blocos ainda é um assunto polêmico, e o consenso nunca foi atingido. Então o Bitcoin XT se utiliza de um mecanismo de “votação” para mensurar o consenso da rede, e só após esse consenso ser atingido é que ele irá ativar as novas funcionalidades. Nesse meio tempo, ele opera exatamente igual a um cliente bitcoin core.

LuMaxArt Free Election 01

A votação tem uma regra bem simples: Após 11 de janeiro de 2016, se em algum momento 750 dos últimos 1000 blocos minerados (75%) forem marcados com o numero de versão do Bitcoin XT, o sistema considera que o consenso foi atingido.((O andamento da votação pode ser acompanhado aqui)) Uma mensagem pedindo a atualização da carteira para o XT é então enviada e exibida em todas as carteiras que ainda não foram trocadas pela versão XT, e após 2 semanas, as regras do XT passam a valer. Essa regra muda a dinâmica de obtenção de consenso de forma prévia para o que os autores do XT chama de “Economic majority voting”((ver “economic majority voting“, no bitcointalk)), e é um dos principais pontos de crítica a forma como o projeto é conduzido ((o outro é a estrutura hierárquica de tomada de decisão))

Não existe Bitcoin XT, apenas Bitcoin

Em todas as discussões que acompanhei na internet o que mais tenho visto é a dificuldade de entender o que exatamente é o Bitcoin XT. Apesar da discussão ser complexa e cheia de nuances, termos tecnicos especificos do bitcoin como “fork”, “blockchain” e “broadcast de transações”, um ponto é bastante claro:

O Bitcoin XT e o Bitcoin são uma coisa só.

O bitcoin XT é uma carteira que implementa um conjunto de regras mais abrangente (blocos maiores), e por isso necessita de um hard fork para entrar em operação, mas ele não cria uma moeda paralela nem “mata” o bitcoin. Mudanças de regras no bitcoin sempre foram implementadas e nem por isso ele deixou de ser “bitcoin”. O bitcoin não deixa de existir, nem é substituído pelo XT. O XT apenas atualiza as regras de validação de blocos que o bitcoin usa, estabelecendo um novo consenso na rede, agora com blocos maiores((estou deliberadamente ignorando as outras mudanças introduzidas pelo XT pois elas não envolvem a blockchain nem o fork, apenas afetam a apresentação ou a conectividade dos clientes, e mesmo que não forem implementadas em carteiras alternativas, não impediriam o funcionamento correto delas)). A moeda continua sendo o bitcoin, a blockchain continua sendo a blockchain do bitcoin e a rede continua sendo a rede bitcoin. A expectativa dos desenvolvedores do XT é que o consenso seja atingido ainda durante  o período de duas semanas da atualização do XT e que no momento em que o primeiro bloco maior do que 1Mb for gerado, já não existam clientes desatualizados rodando na rede.((ver uma discussão sobre isso aqui))

Existe uma controvérsia quanto ao que acontecerá se o defensores radicais do bitcoin core continuarem minerando e mantendo o bitcoin core vivo e conectado à rede. O próximo artigo irá focar nesse problema e em outros possíveis problemas do XT.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.