Blockchain Parte 2 — O Bitcoin

No final dos anos 1980 quando o ramo da criptografia começou a deslanchar na ciência da computação, muitos pesquisadores tentaram utilizar esse conhecimento para desenvolver dinheiro digital que fosse seguro para ser amplamente utilizado em transações pela rede de computadores. A maioria dessas “moedas” iniciais eram lastreadas em dinheiro nacional (ou ouro) e ainda necessitavam de um “figurão” para intermediar as transações.

Em 2008 uma figura (não um “figurão”) denominada Satoshi Nakamoto publica um whitepaper entitulado Bitcoin: A Peer-to-Peer Eletronic Cash System onde ele combina diversas invenções prévias para criar uma sistema monetário completamente descentralizado que não necessita de nenhum “figurão” para garantir sua legitimidade e segurança e cuja unidade de valor (dinheiro) é denominado Bitcoin. A grande contribuição de Nakamoto foi na elaboração de um algoritmo de consenso denominado Proof-of-Work que permite que todos os participantes da rede cheguem a um acordo (consenso) sobre o conjunto de transações que foram realizadas.

Cadeia de blocos = Blockchain

No modelo proposto por Nakamoto o nosso ledger é implementado como sendo um conjunto de blocos de transações os quais estão linkados na forma de uma cadeia (pilha) que se denomina Blockchain. Cada bloco nessa cadeia contém o identificador (hash) para o bloco anterior na cadeia além das informações de algumas centenas de transações e alguns outros metadados que discutiremos em artigos posteriores. Todos os participantes da rede (full nodes) mantêm uma cópia completa desse Blockchain que é a nossa fonte absoluta de verdade.

Quando um desses participantes M recebe uma nova transação do tipo “Alice transfere X dinheiros para Bob”, ele primeiro verifica se a transação é válida (onde “validade” é algo definido pelo sistema) e em caso afirmativo o participante armazena essa transação temporariamente numa estrutura denominada de lista (pool) de transações não confirmadas e a reenvia para os demais participantes, de modo que a transação se propague para toda a rede e eventualmente acabe na lista de transações não confirmadas de todos os participantes.

Num dado momento, um participante especial denominado miner (minerador) seleciona certas transações dessa lista para compor o que pode vir a ser o próximo bloco do Blockchain, ou seja, ele constrói um bloco candidato. Vários outros miners fazem a mesma coisa e então começa uma disputa frenética entre esses participantes “especiais” para ver quem será o responsável por promover seu próprio bloco candidato ao próximo bloco legítimo do Blockchain. Essa disputa se dá na forma de um problema computacional padrão e difícil denominado Proof-of-Work que todos os miners devem tentar resolver. Esse problema tem uma característica muito interessante: encontrar uma solução para ele é extremamente difícil, mas por outro lado é extremamente fácil verificar se uma dada resposta é de fato solução para o problema (veremos isso melhor nos próximos artigos). O primeiro miner N que conseguir resolver o Proof-of-Work deve anexar a solução encontrada no seu bloco candidato e enviá-lo para todos os demais participantes (ou melhor, propagar o bloco para todos os participantes, miners ou não). Ao receber esse bloco, um miner M verifica se o bloco é válido (onde “validade” é algo definido pelo sistema, mas inclui verificar se a solução encontrada é de fato uma solução para o Proof-of-Work) e em caso afirmativo M declara sua derrota na competição e registra o bloco válido na sua própria cópia do Blockchain.

Como recompensa pelo esforço do miner N vitorioso, o sistema cria um certo número de dinheiros (bitcoins) e os transfere para o miner (ou seja, é como se o miner tivesse literalmente minerado o ouro que se denomina bitcoin). Essa transação especial que cria dinheiro no sistema é denominada coinbase e é do tipo “transfere X dinheiros para N”, ou seja, uma transação que não especifica a fonte, apenas o destinatário e o valor. Inicialmente essa recompensa era de 50 bitcoins e o sistema está programado para reduzi-la pela metade aproximadamente de 4 em 4 anos (de 210.000 em 210.000 blocos pra ser mais exato) [1]. Ou seja, dado que o sistema começou a rodar em 2009, tivemos uma queda da recompensa para 25 bitcoins em algum momento de 2012 e em seguida uma queda para 12,5 bitcoins em algum momento de 2016. Dessa forma, o número total de bitcoins nunca excederá os 21 milhões de bitcoins e a recompensa deve chegar a zero por volta do ano 2140 [2].

O recebimento de um bloco válido e sua anexação ao Blockchain é o estopim para se começar uma nova competição entre os miners. O sistema proposto por Nakamoto define um Proof-of-Work que demora algo em torno de 10 minutos para ser resolvido por um miner e, portanto, teremos pelo menos uma nova competição desse tipo a cada 10 minutos. A dificuldade desse problema Proof-of-Work é reajustada aproximadamente a cada duas semanas (ou de 2016 em 2016 blocos pra ser mais exato) de acordo com o poder computacional atual dos participantes da rede.

O interessante do Proof-of-Work é que ele atua como uma espécie sistema de votação: o primeiro participante (miner) que conseguir resolver esse problema é como se fosse eleito um "líder" no sistema e, portanto, ganha o direito de inserir um novo bloco no nosso ledger (blockchain) e alterar a "verdade" do sistema (lembre-se que o ledger é nossa fonte de verdade). Uma vez que encontrar uma solução pra esse problema Proof-of-Work é extremamente difícil (custo alto) e que todos os participantes do sistema só inserem o bloco recebido em seu blockchain local se (e somente se) a solução anexada for de fato válida (lembre-se que verificar se a solução é válida é extremamente fácil pro Proof-of-Work), então um participante mal intencionado não terá poder suficiente para fazer muita coisa de ruim como veremos melhor nos próximos artigos. Por ora, uma vantagem do Proof-of-Work que salta aos olhos é que ele impossibilita que participantes picaretas gerem "spam" na rede, ou seja, criem blocos numa velocidade frenética o que poderia "estourar" a capacidade de processamento dos demais participantes e eventualmente levar o sistema a ficar inoperável. Esse é um ataque típico denominado de Denial-of-service (DoS) e o spam é exemplo clássico desse tipo de ataque (email bomb). A idéia do Proof-of-Work de Nakamoto foi de fato inspirado no algoritmo denominado Hashcash [3] usado exatamente para prevenir esses tipos de ataques.

Essa visão geral do funcionamento do Blockchain usado no sistema Bitcoin será importante nos próximos artigos onde atacaremos (sem causar denial of service) cada parte discutida anteriormente com mais detalhes.

Referências

  1. https://en.bitcoin.it/wiki/Controlled_supply
  2. https://bitcoin.stackexchange.com/questions/10486/when-will-the-last-bitcoin-be-mined
  3. http://www.hashcash.org/papers/hashcash.pdf
  4. Mastering Bitcoin: Programming the Open Blockchain — by Andreas M. Antonopoulos
Like what you read? Give Bruno Fonseca a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.