Como funciona o Bitcoin?

· 10 min read

O Bitcoin é um conceito de moeda digital apresentado pelo lendário e enigmático Satoshi Nakamoto em 2009, que usa a tecnologia blockchain como infraestrutura e funciona de pessoa para pessoa, sem autoridade central. O whitepaper que explica esse conceito, escrito por Nakamoto, é leitura obrigatória para quem quer entender o bitcoin e as criptomoedas em geral. Esse whitepaper não apenas explica o bitcoin como conceito, mas também mostra como um sistema de tolerância a falhas bizantinas poderia funcionar em um ambiente descentralizado.

Antes de tudo, quem se interessa por Bitcoin deve saber que o maior fator por trás da existência real do conceito de bitcoin é a tecnologia blockchain — e entender como essa tecnologia funciona.

O que é blockchain?

A blockchain é uma cadeia de blocos, cada um contendo valores de dados, que não é supervisionada nem gerenciada por nenhuma autoridade central. Essas cadeias de informação são protegidas criptograficamente e não podem ser silenciadas graças à sua estrutura descentralizada. A blockchain usa basicamente duas estruturas de dados: ponteiros (pointers) e listas encadeadas (linked lists).

Ponteiros

Ponteiros são variáveis que indicam onde outra variável está. Em circunstâncias normais, as variáveis na programação contêm dados. (No exemplo de int a = 10, uma variável inteira a tem o valor 10.) Os ponteiros, por outro lado, apontam para a localização da variável que guarda esse dado, em vez de manter um valor como dado.

Listas encadeadas

As listas encadeadas são uma das unidades mais importantes das estruturas de dados e, grosso modo, funcionam assim:

Uma sequência de blocos, cada um contendo um dado específico e ligado ao bloco seguinte por meio de um ponteiro. A variável de ponteiro contém o endereço do próximo nó e, assim, estabelece a conexão. Como vimos no nó final, o ponteiro do fim não contém nenhum dado.

O ponto importante aqui é que cada ponteiro contém o endereço do próximo bloco. E onde está o ponteiro do primeiro bloco? O primeiro bloco é chamado de bloco gênesis, e seu ponteiro está dentro do sistema.

Um hash pointer é um ponteiro que contém o hash do bloco anterior.

O hash é um processo que recebe dados de qualquer comprimento e produz um resultado sempre do mesmo tamanho, independentemente do conteúdo dos dados, por meio de uma determinada função. No caso do Bitcoin, o processo de transferência é tomado como dado e processado com o algoritmo SHA-256 para produzir um resultado de comprimento fixo. Independentemente do tamanho dos dados inseridos, o algoritmo SHA-256 sempre produz um resultado de 256 bits.

A blockchain, na sua forma mais simples, é uma lista encadeada como descrito abaixo.

Uma blockchain é uma lista encadeada em que cada bloco contém um dado e um hash pointer apontando para o bloco que o precede. Então, o que é um hash pointer? Os hash pointers são muito parecidos com os ponteiros comuns, mas, em vez de conter apenas as informações de endereço do bloco anterior, também contêm o resultado do hash dos dados desse bloco. Essa pequena diferença de configuração é o que torna a tecnologia blockchain tão segura.

Vamos supor por um momento que um invasor queira atacar o bloco 3 e alterar os dados nele contidos. Devido à função hash, a menor mudança nos dados se refletirá no resultado como uma diferença incrivelmente grande. A menor alteração nos dados do bloco 3 mudará o resultado do hash armazenado no bloco 2, a mudança no bloco 2 afetará o resultado do hash no bloco 1 e, assim, toda a cadeia teria que ser alterada — o que é impossível. Esse é o método que torna as blockchains impossíveis de silenciar.

O que é mineração?

A mineração é o processo necessário para criar novos bitcoins. A mineração de Bitcoin funciona segundo o princípio de Proof of Work (POW). Simplificando: resolver um problema deve ser muito difícil, mas, uma vez resolvido, deve ser muito fácil provar que sua solução está correta.

Vamos tentar entender por que as criptomoedas precisam de um sistema assim, antes de chegar ao uso do POW pelo Bitcoin como conceito.

Antes do Bitcoin, diferentes moedas digitais foram criadas, mas, quando se cria uma rede sem autoridade central e de pessoa para pessoa no ambiente digital, o maior obstáculo é o problema de lógica chamado Problema dos Generais Bizantinos. Como Nakamoto conseguiu superar esse problema no bitcoin com o POW, o bitcoin pôde iniciar sua vida — e segue firme.

O Problema dos Generais Bizantinos

Vamos continuar explicando o Problema dos Generais Bizantinos, também usado com frequência em estudos acadêmicos. Os generais bizantinos que planejam atacar a cidade inimiga têm dois problemas:

Os generais estão localizados muito longe uns dos outros, então é impossível dirigir o cerco por meio de uma autoridade central.

O inimigo também tem um exército forte, então o ataque precisa ser realizado por todos os generais ao mesmo tempo para que haja sucesso.

Enquanto os exércitos sitiantes cercam a cidade, cada exército transmite a mensagem de ordem do exército à sua direita para o exército à sua esquerda, e a comunicação é mantida dessa forma. Mas o problema é que, quando chega uma ordem de "atacamos na quarta-feira", um exército pode não estar pronto e mandar de volta uma mensagem dizendo "não, atacamos na sexta". Ou o soldado que carrega a mensagem pode ser capturado pelo inimigo, ou o conteúdo da mensagem pode ser alterado. Em um ambiente tão inseguro, qualquer ataque fracassará se não houver coordenação total.

O mesmo problema de lógica se aplica às redes blockchain, que são a infraestrutura de criptomoedas como o bitcoin. São redes incrivelmente grandes — e como confiar em cada pessoa da rede? Podemos querer enviar 4 ether a alguém, mas como confiar que alguém mal-intencionado não transformará esse valor em 40 ether?

Satoshi Nakamoto conseguiu superar esse problema de lógica introduzindo o protocolo de proof-of-work. Vejamos como funciona:

Quando o exército sitiante quer transmitir a mensagem "atacamos na segunda-feira" ao exército à sua esquerda, ele precisa seguir estes passos:

Primeiro, atribui-se à mensagem original um valor aleatório gerado uma única vez, chamado de "nonce". O nonce pode ser qualquer valor no sistema numérico hexadecimal.

Em seguida, obtém-se um resultado passando o texto da mensagem com o nonce atribuído pela função hash. No ataque, que consideramos imaginário, vamos supor que os comandantes escolham compartilhar entre si, de forma segura, apenas resultados da função hash cujos 5 primeiros dígitos sejam zero.

Se o resultado da função hash der o esperado, eles encaminham a mensagem ao próximo general. Se os resultados não corresponderem ao desejado, é necessário mudar aleatoriamente o valor do nonce e repetir o processo até obter um resultado com os cinco primeiros dígitos iguais a zero. Esse sistema exige períodos incrivelmente longos de poder computacional.

Se o soldado que carrega a mensagem for capturado ou o conteúdo for alterado, o resultado do hash variará enormemente devido às características da função hash. Ao revisar a mensagem, os generais perceberão que os cinco primeiros dígitos do resultado do hash não são zero e cancelarão o ataque.

No entanto, embora seja muito improvável, toda função hash pode ter resultados conflitantes. Em teoria, quando A e B são duas entradas distintas, H(A) e H(B) não deveriam ter nenhuma probabilidade de resultar em H(A) = H(B); mas, na aplicação da vida real, nenhuma função hash é totalmente à prova de colisões.

Bem, nessa baixa probabilidade, o que acontece se o soldado que carrega a mensagem for capturado, a mensagem for alterada e ocorrer um ataque em que o resultado do hash saia como os generais querem? Seria um processo demorado, claro, mas não impossível. Em contrapartida, os generais usam sua vantagem numérica.

Esse problema pode ser superado com três generais enviando mensagens para a esquerda ao mesmo tempo, em vez de um único general repassando a mensagem da direita para a esquerda, um por vez. Se os generais que criam suas próprias mensagens montarem uma mensagem cumulativa, passarem essa mensagem pela função hash, atribuírem um nonce ao resultado e o colocarem novamente na função hash, desta vez os seis primeiros dígitos do resultado precisam ser zero.

Nesse estágio, encontrar o nonce dessa mensagem e alterar seu conteúdo seria um sério desperdício de tempo.

Já a tarefa dos generais que recebem a mensagem é fácil: basta adicionar o nonce recebido ao resultado do hash e comparar os resultados. Essa etapa é um processo muito rápido e simples. Essa ideia é o mecanismo de funcionamento do princípio de proof-of-work.

Encontrar o valor de nonce para o hash apropriado exige enorme poder computacional e tempo.

No entanto, examinar os resultados e determinar se há alguma má intenção leva pouquíssimo tempo.

É assim que os mineradores implementam o protocolo de proof-of-work na mineração de Bitcoin. Eles usam seu poder computacional para resolver o problema criptográfico à sua frente e criar o próximo bloco. Na blockchain do Bitcoin, os blocos são criados a cada 10 minutos.

Como acontecem as transferências na rede Bitcoin?

Digamos que John queira enviar alguns bitcoins para Dave. Como essa transferência acontece? As transferências de bitcoin funcionam de forma muito diferente das transferências de dinheiro fiduciário. Se John quisesse dar US$ 10 a Dave, ele tiraria fisicamente a nota de US$ 10 da carteira, entregaria a Dave e a transferência estaria concluída. Mas com o bitcoin é diferente: não é algo que possuímos fisicamente. O que temos é a prova de que temos bitcoin.

Há duas coisas que devemos saber e às quais devemos prestar atenção:

Os mineradores confirmam e protegem as transações de transferência com os dados que colocam no bloco que criam. Eles também cobram uma taxa por esse serviço.

Quando olhamos para as moedas fiduciárias, não conhecemos nem rastreamos o histórico de nenhuma cédula que temos em mãos. Não há forma prática de fazer isso. No entanto, toda transação de transferência de bitcoin é registrada na rede.

À luz dessas informações, vamos analisar a transferência de bitcoin entre John e Dave. Essa transferência tem duas partes: entrada e saída (input-output).

Para que John realize essa transferência, ele precisa ter bitcoins de transferências anteriores. Como mencionamos antes, todas as transferências são registradas na rede bitcoin.

John precisa reunir os bitcoins das transferências que recebeu anteriormente, com os nomes TR(0), TR(1) e TR(2), criar uma nova transferência com o nome TR(INPUT) e enviá-la a Dave. Aqui, TR(INPUT) se torna o dado de entrada da nova transferência.

É mais ou menos assim que a transferência de bitcoin por input funciona.

O dado de saída conterá simplesmente a quantidade de bitcoins que Dave deve ter após a nova transferência e o troco restante, que é então enviado de volta a John como o valor TR(INPUT) da sua próxima transferência.

Esse processo inclui um único resultado de saída se não considerarmos a parte do troco, mas transferências com múltiplos resultados de saída são possíveis. Essa narrativa mostra de forma simples como uma transferência acontece na rede bitcoin. Porém, para que tudo ocorra com sucesso, certas condições devem ser atendidas.

Condições que as transferências devem cumprir:

TR(INPUT) > TR(OUTPUT). A transferência de entrada deve ser sempre maior que a de saída. Em cada transferência, a diferença entre a entrada e a saída (saída + troco) é paga aos mineradores como taxa. Ou seja: taxa de mineração = TR(INPUT) - (TR(OUTPUT) + TROCO).

No lado da entrada, deve valer TR(0)+TR(1)+TR(2)=TR(INPUT). Em outras palavras, John deve ter bitcoin suficiente para enviar a Dave. Se ele não tiver bitcoin suficiente para processar a transação, a transferência é rejeitada pelos mineradores.

Agora Dave precisa provar que é o dono dos bitcoins enviados a ele. John criptografou sua transferência de bitcoin com a chave pública de Dave. Dave só consegue abrir essa senha com sua chave privada.

Enquanto isso, John precisa provar que tem bitcoin suficiente para enviar a Dave. Ele faz isso assinando a transferência que deseja realizar com sua própria chave privada. Qualquer pessoa pode abri-la com a chave pública de John e verificar que ele realmente tem a quantidade necessária de bitcoins. Essa prova é chamada de dado de assinatura.

Os dados de entrada (incluindo o dado de assinatura) e os dados de saída são somados e passados pelo algoritmo de hash SHA-256. A saída desse algoritmo é chamada de transferência.

Há algo a se ter em mente: para que uma transferência de bitcoin ocorra, o minerador que minerou o bloco precisa efetivamente colocar essa transferência no bloco. O minerador que minerou o bloco pode receber uma taxa por todas as transferências que colocou naquele bloco. À medida que o volume de transferências aumenta com o tempo, elas precisam esperar por um novo bloco por causa dos blocos completamente cheios. Na prática, as pessoas que não querem esperar pagam taxas de mineração mais altas, fazendo suas transferências se destacarem e ficarem mais atraentes para os mineradores.

Isso introduziu o princípio do replace-by-fee. Ele funciona simplesmente assim: mesmo que John tenha enviado 5 BTC a Dave, a transferência nunca é incluída no bloco e fica pendente porque a taxa de mineração foi mantida baixa. Não há como desfazer ou cancelar essa transação, já que bitcoin gasto não pode ser recuperado. No entanto, se John fizer uma transferência para o mesmo endereço, com a mesma quantidade de BTC, mantendo a taxa de mineração mais alta, a transferência antiga é considerada inválida e a nova aguarda o processamento.

O futuro do Bitcoin e das criptomoedas em geral está cheio de possibilidades incontáveis. As aplicações da blockchain não conhecem fronteiras, e os projetos nessa área se tornam mais bem-sucedidos e seguros a cada dia.

Na jornada das moedas-mercadoria ao uso de metais preciosos como ouro e prata, passando pelo papel-moeda e pelas moedas nominais, a ideia de dinheiro no ambiente virtual não é muito nova, mas só na história recente ela se tornou aplicável.

Segundo alguns, ele é um grupo dentro da CIA; segundo outros, um alienígena — ou talvez seja realmente um cyberpunk, Satoshi Nakamoto. Seja quem for, ele nos deixou sozinhos para decidir o que fazer a seguir com suas ideias e sua prática, que mudarão completamente a forma como enxergamos nossos ativos e como os guardamos. Ele abriu caminho para o surgimento de ideias mais avançadas que as suas e convenceu o mundo a adotar uma perspectiva completamente diferente.

Satoshi não deixou de esconder uma mensagem no bloco gênesis, o bloco inicial, gravada em código como algo permanente. Registrando a data de 3 de janeiro de 2009, ele anexou uma manchete do Times do Reino Unido daquele dia sobre os bancos responsáveis pela crise econômica mundial: "Minister is on the verge of second bailout for banks" (Ministro está prestes a aprovar o segundo resgate dos bancos). Ele provavelmente estava zombando do sistema bancário de reservas federais com essas palavras. Não se sabe por que Satoshi criou esse endereço não gastável no bloco inicial. Até hoje, 16 BTC já foram enviados anonimamente para esse endereço e, portanto, a oferta total de 21 milhões de bitcoins nunca vai se concretizar de fato.

Levou apenas 9 anos para o Bitcoin atingir níveis capazes de assustar os bancos centrais do mundo — e ele ainda tem um longo caminho pela frente.

como funciona o bitcoin o que é blockchain mineração de bitcoin satoshi nakamoto proof of work rede bitcoin