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 1)2). Hoje isso parece ser o suficiente, e a não ser em casos onde tentam fazer um “flood” na rede 3). Mike Hearn, o principal desenvolvedor do bitcoin XT fez estimativas usando o valor corrigido de 3,2 transações por segundo4) seria atingido ainda no primeiro semestre de 20165)6).
Surgiram então ao menos 3 propostas de aumento dos blocos, defendidas por diferentes membros do “core developers”7). O Jeff Garzik criou o BIP 1008), que propunha um sistema de votação para aumento dos blocos e o BIP 102 9) que aumenta o bloco para 2Mb uma única vez. O Gavin Adresen propôs o BIP 10110), 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ória11) que ficou conhecida como BIP “sipa” e não chegou a ganha numeração definitiva12). 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 grupo13)14) se posicionaram contra o aumento do tamanho do bloco, por entre outros motivos15) 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 rapidamente16). 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 deles17). 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.18)
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 correta19). O pacote completo de patches inclui, além do BIP 101, as seguintes funcionalidades:20)
- 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.21). 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.
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.22) 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”23), e é um dos principais pontos de crítica a forma como o projeto é conduzido 24)
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 maiores25). 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.26)
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.
References
↑ 1. | 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$$ |
↑ 2. | A conta de 250 bytes por transação foi feita pelo próprio Gavin Andresen e postada aqui |
↑ 3. | referencia par ao flood de transações na rede |
↑ 4. | 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 |
↑ 5. | ver “Bitcoin’s seasonal affective disorder“, por Mike Hearn |
↑ 6. | 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 |
↑ 7. | Core developers é o nome dado ao time principal de desenvolvimento do bitcoin core |
↑ 8. | BIP 100, por Jeff Garzik |
↑ 9. | BIP 102, por Jeff Garzik |
↑ 10. | BIP 101, por Gavin Andersen |
↑ 11. | como traduzir “compromise”, meu deus? |
↑ 12. | BIP “sipa”, por Pieter Wuille |
↑ 13. | Posição do Gregory Maxwell |
↑ 14. | Posição do Wladimir J. van der Laan |
↑ 15. | Veja um resumo dos argumentos aqui |
↑ 16. | 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.” |
↑ 17. | sobre a discussão com o Wladmir J. van der Laan |
↑ 18. | Why is Bitcoin forking?, por Mike Hearn |
↑ 19. | 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.” |
↑ 20. | Veja a lista detalhada dos patches |
↑ 21. | ver 1 e 2 para mais detalhes |
↑ 22. | O andamento da votação pode ser acompanhado aqui |
↑ 23. | ver “economic majority voting“, no bitcointalk |
↑ 24. | o outro é a estrutura hierárquica de tomada de decisão |
↑ 25. | 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 |
↑ 26. | ver uma discussão sobre isso aqui |