Bitcoin XT, Forks e tudo mais (parte 1)

Se você está querendo saber o que é Bitcoin @ wikipedia.org (en), esse artigo não é pra você. Se procura um posicionamento politico, também veio ao lugar errado. Esse artigo é sobre como funciona o mecanismo de consenso, e a bifurcação (Fork) que ocorrerá em consequência da adoção do Bitcoin XT.

O mecanismo de consenso e os forks

O Bitcoin se propõe a resolver um problema clássico da computação, conhecido como “Problema dos generais bizantinos Iterado”((ver Byzantine Generals @ wikipedia.org (en))). Esse problema pode ser resumido como sendo “buscar o consenso através de mensagens transmitidas por um meio inseguro”. Não vou entrar em detalhes aqui sobre como o consenso é atingido ou buscado, pois sairia do escopo desse artigo, mas basta saber que o objetivo do bitcoin é conseguir o consenso entre os participantes da rede. Quando esse consenso não é atingido, acontece  oque chamamos de “Fork“, ou bifurcação.

Nesse ponto quero deixar claro: um Fork na Block chain (database)|blockchain @ wikipedia.org (en) não tem nada a ver com um fork do código fonte. um Fork na blockchain pode acontecer sem haver fork no código fonte (e ja aconteceu algumas vezes antes por bugs no software do bitcoin core((ver os seguintes artigos: 1, 2 e 3 )) ). Forks no código fonte do bitcoin acontecem todo o tempo. São desenvolvedores criando novas criptomoedas concorrentes ou complementares ao bitcoin((Atualmente são tantos que a ferramenta de visualização do github nem permite ver o gráfico)). Note que esses forks sempre criam novas blockchains, começadas do zero. Ou seja, são forks do código fonte, mas não da blockchain.

Soft Fork

Voltando ao assunto. O consenso no contexto do bitcoin é definido pela blockchain. Ela nada mais é do que uma sequencia de blocos, estes compostos por transações, encadeados um ao outro através de assinaturas criptográficas((Pra quem quer saber em melhores detalhes, um bloco precisa conter o hash do bloco anterior e ser validado por um processo conhecido como mineração, veja esse artigo (não técnico) ou esse (mais técnico))). Sempre que há uma divergencia entre mineradores, ou seja, quando conjuntos diferentes de transações são validados ao mesmo tempo formando blocos diferentes para a mesma posição da blockchain, acontece um fork. Esse tipo de fork é chamado de “soft fork“, e faz parte do mecanismo de obtenção de consenso.

Como a rede decide qual desses dois blocos vai ser mantido e qual será descartado? Simples. Quando o proximo bloco for minerado, apenas um dos dois terá sido “assinado” pelo minerador. Aquele que ficar de fora, se torna “órfão”. E se dois mineradores criarem dois novos blocos simultâneos, cada um assinando um dos antecessores concorrentes criados na rodada anterior? Apesar de pouco provável, será formado um fork de dois blocos, ou três, quatro, etc, blocos até o momento em que algum minerador conseguir minerar sozinho o próximo bloco, sem conflitos, e criar uma sequencia mais longa que a concorrente. Quando essa sequencia é criada, a rede atinge novamente o consenso, e essa nova blockchain, mais longa que a concorrente, é mantida e a sequencia concorrente de blocos é tornada órfã.

Blockchain com soft forks
Soft Forks. Os blocos roxos se tornaram órfãos.

O mecanismo de consenso então é sempre decidir pela sequencia mais longa de blocos. Soft forks são mecanismos temporários que permitem que duas versões concorrentes da blockchain disputem qual delas atingirá o consenso. Soft forks com mais de um bloco são raras, muito raras.

E órfãos são ruins! Ninguém gosta de órfãos((No contexto de bitcoins, não tenho nada contra crianças que precisam de adoção)). Órfãos dão um prejuízo danado a quem os minera, pois gasta poder de processamento para encontrar um bloco que vai ser descartado pela rede e não vai gerar dividendos. A menos que se esteja tentando um ataque à rede, ninguém vai querer forçar a criação de soft forks na rede, pois o risco de tomar prejuízo é grande.

correção:

Estudando mais sobre o XT para o próximo artigo percebi que tem uma incorreção nessa seção, então volto pra corrigi-la. Quando eu falei de soft forks, eu cito apenas os forks involuntários da rede, mas o termo é usado de forma bem mais ampla que isso. Quando mudanças no protocolo são retro-compatíveis, isto é, não vão quebrar as regras das carteiras já existentes (por exemplo, se eu reduzo o tamanho dos blocos ao invés de aumentá-lo), isso é também chamado de soft fork. Os blocos gerados nas carteiras antigas podem ser rejeitados pelas carteiras novas, mas os blocos novos não serão rejeitados pela carteira antiga e a rede manterá sua consistência, com uma quantidade pequena de “orfãos”.

Hard Forks

Então chegamos no grande vilão do consenso: Os hard forks. Hard forks são quando alguma coisa impede que um consenso seja atingido.  Pode ser um bug no sistema, que cria blocos reconhecidos por algumas versões da carteira, mas não por outras. Esse tipo de bug já aconteceu mais de uma vez((ver os seguintes artigos: 1, 2 e 3 )). Pode também ser decisão do time de desenvolvedores, para acrescentar funcionalidades à moeda. Para evitar que um hard fork proposital tenha impacto na moeda, um consenso prévio entre desenvolvedores e usuários costuma ser buscado, e quando o hard fork acontece, estão todos (ou quase todos) com a versão correta da carteira e a cadeia “errada” é rapidamente descartada ou ignorada.

Exemplo de Hard Fork. A cadeia superior usa a versão antiga da carteira enquanto a cadeia inferior usa a versão nova. Como não houve consenso, duas cadeias paralelas se formam a partir do terceiro bloco.

Se órfãos já eram ruins, imagina um hard fork? é todo um ramo da blockchain que nunca vai virar o consenso. É a pior coisa que pode acontecer, e é motivo de morte para várias altcoins((veja nessa lista de altcoins mortas quantas morreram por hard forks)).

A rede e a propagação das transações

Além da blockchain, outro componente primordial do bitcoin é a rede. O bitcoin forma uma rede P2P conectando cada carteira com uma quantidade razoável de outras carteiras, de forma que as mensagens entre uma e outra consigam percorrer toda a rede. De uma forma simplificada, as transações criadas por uma carteira são enviadas a todas as outras conectadas a ela. Cada uma dessas carteiras, por sua vez, retransmite as transações recebidas de uma carteira conectada para todas as outras, e assim sucessivamente, até que toda a rede tenha recebido uma copia daquela transação. OS blocos minerados passam pelo mesmo processo. A diferença é que as transações ficam armazenadas em uma memória temporária, e os blocos são armazenados na blockchain, de forma permanente.

Exemplo de redes com clientes de versões diferentes. A primeira totalmente conectada. Na segunda, as linhas vermelhas indicam que clientes de versões diferentes irão se desconectar. Na terceira e quarta vemos as redes isoladamente.
Exemplo de redes com clientes de versões diferentes. Na primeira uma rede totalmente conectada. Na segunda, as linhas vermelhas indicam os pontos onde clientes de versões diferentes irão se desconectar. Na terceira e quarta vemos as redes isoladamente.

Quando acontece um fork, seja ele soft ou hard, a transmissão das transações e blocos continua ocorrendo normalmente. Ou seja, forks não afetam a propagação de transações pela rede. No caso de um hard fork, entretanto, alguns blocos gerados por carteiras de versão diferente ou com bug vão ser descartados como inválidos, e não serão gravados. Em casos graves, as carteiras que insistirem em enviar blocos “inválidos” podem ser desconectadas. Em alguns casos, essa desconexão pode separar a rede em duas redes que não se comunicam. Chamamos isso de split. Mas na maioria dos casos, as redes continuam se comunicando, mas ignorando os blocos gerados pela outra rede. Quando há um split, criam-se efetivamente duas redes separadas, com duas blockchains separadas, praticamente como se existissem duas moedas separadas.

O bitcoin XT

Também não vou entrar em detalhes sobre quais são as melhorias propostas pelo Bitcoin XT ou se elas são boas ou ruins. Apenas pretendo descrever o que deve acontecer com a blockchain e com a rede bitcoin devido a sua introdução.

O bitcoin XT é um fork do código do bitcoin que pretende gerar um hard fork da blockchain do bitcoin caso sua aceitação passe do limite de 75%((O valor exato é de 750 blocos minerados pelo XT entre os últimos 1000 blocos minerados, ver BIP-0101)). Após atingido esse limite ele emitirá uma mensagem para todos os clientes da rede informando que haverá um hard fork e dando o prazo de 2 semanas para que quem quiser possa adequar seus sistemas. Passadas duas semanas, o XT começará a minerar blocos seguindo as novas regras, gerando assim um hard fork.

Isso não seria um problema normalmente, já que o processo de consenso seria conduzido fora da rede e quando fosse finalmente colocado em prática o fork, todos os usuários já estariam com seus sistemas e carteiras atualizados. Só que isso não aconteceu. O XT optou por não passar pelo processo de obtenção de consenso fora da rede e usou esse novo  processo para decidir sobre a criação ou não do hard fork. Em termos práticos, o processo deixou de ser uma tentativa de consenso e passou a ser uma votação por maioria de 3/4 dos mineradores((na verdade 3/4 do poder de processamento, já que mineradores mais “poderosos” terão mais influencia no voto)).

A intenção dos criadores do XT é que, caso eles atinjam os 75%, todo mundo migre para o XT e o consenso seja atingido sem hard fork. Mas isso não necessariamente é verdade. Vou tentar descrever abaixo alguns dos cenários que podem acontecer.

1) Caminho Feliz sem XT

Esse é o cenário mais fácil de prever. O XT não obtém 75% dos mineradores, e tudo continua como está.

2) Caminho Feliz com XT

Esse cenário se dá com um consenso sendo atingido antes do término das duas semanas de adaptação. Nesse caso, todos migram par ao XT e quando o hard fork ocorrer, não haverá ninguém no lado “antigo” do fork, que morrerá rapidamente. O XT substitui o bitcoin totalmente. Esse cenário parece improvável dada a quantidade de pessoas defendendo o XT.

3) Hard Fork, mas o bitcoin “antigo” continua existindo.

Suponhamos que 20% dos mineradores optem por não migrar par ao XT. No momento do hard fork teremos a criação de duas moedas com um passado comum. Uma que chamarei de “core” e é minerada pelos que não migraram para o XT e outra que chamarei “XT”, minerada por quem optou pela mudança. Nesse cenário, existem diversas situações de risco e que podem causar problemas tanto para a rede como para os usuários.

Na próxima parte desse artigo eu vou tratar em mais detalhes desse cenário, que é o mais interessante tecnicamente.

 

Leave a Reply

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