Mas afinal, que raios é minerar um bloco?

Explica Bitcoin
9 min readJul 30, 2022

Por Norbert

Nota do autor: Apesar de tratar-se de um assunto extremamente técnico do bitcoin, tentei escrevê-lo de forma que pessoas que não sejam da área da computação possam entender mais de perto o que é o processo de mineração, mas especificamente, do bitcoin. A compreensão deste processo foi fundamental para minha entrada na toca do coelho.

Para explicar o que ocorre na mineração, preciso explicar brevemente alguns conceitos envolvidos, mas prometo ser bem breve em cada um deles.

Mineradores

No início do bitcoin qualquer um com um computador e uma conexão à internet poderia minerar bitcoin. Hoje em dia, devido aos custos energéticos e à grande concorrência pela mineração, essa atividade demanda um tipo de computador específico (ASIC), construído desde o projeto somente para esta finalidade. Um computador pessoal é bastante generalista, precisa resolver diversos tipos de atividades. Uma máquina mineradora de bitcoin não faz nada além de processar os cálculos que você conhecerá a seguir.

Pools de mineração

Hoje em dia as pessoas que querem ganhar dinheiro minerando blocos precisam adquirir uma ou mais destas máquinas dedicadas. Essas máquinas não são baratas (as mais modernas custam mais de R$ 20 mil cada). Com isso, minerar um bloco com poucas máquinas dedicadas seria economicamente ruim, demandaria muito tempo e muita energia para obter êxito. A probabilidade de encontrar um bloco atuando assim é como tentar encontrar uma pepita de ouro no seu próprio quintal. O melhor seria você ingressar em um pool de mineração. Mas o que são pools?

Um pool é uma associação de várias máquinas de mineração que podem estar em qualquer lugar do mundo. O pool coordena a mineração entre todas essas máquinas e soma o poder de processamento de cada uma ao conjunto. As chances de um pool conseguir minerar um bloco são bem maiores. Cada participante do pool será remunerado na proporção do poder de processamento que agrega.

Algoritmo SHA-256

Antes de chegar na mineração de um bloco em si, eu preciso explicar basicamente o que é o tal algoritmo SHA-256, utilizado no processo de mineração.

Um algoritmo é meramente uma sequência determinada de passos. Uma receita de bolo é um algoritmo. Execute os passos na mesma ordem e você sempre terá o mesmo bolo. A sigla SHA vem de Secure Hash Algorithm (Algoritmos de Hash Seguro).

Pense no SHA-256 como uma caixa preta. Entra qualquer coisa de um lado (um número, um texto ou até um arquivo) e do outro lado sai um valor, o resultado: o tal hash. Existem diversas implementações de cálculos de hash, sendo o SHA-256 uma delas.

Ok, não é bem uma caixa preta. O cálculo é bastante complexo e não convém explicar aqui, mas a implementação é pública, existem diversas bibliotecas de código aberto implementando o SHA-256.

No caso do SHA-256, sempre teremos um resultado cujo valor é representado em 64 caracteres, não importando o tamanho da entrada. Um mero caractere em um texto e um arquivo de 10 GB produzem valores diferentes, mas todos os hashes sempre serão alguma coisa semelhante a isto:

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Uma característica fundamental do cálculo de um hash é que trata-se de um cálculo de mão única. Qualquer informação pode ter seu hash calculado, mas é impossível fazer o caminho inverso: extrair qual informação gerou um determinado hash. Se eu não disser aqui no texto o que produziu tal hash, você jamais saberia.

Outra característica do sha-256 é o “efeito avalanche”. Um mísero caractere diferente provoca um hash completamente diferente, a letra “a” (minúscula) gera o hash

ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb

Já a letra “A” (maiúscula) produz um hash completamente diferente:

559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd

Don’t trust, verify: teste você mesmo. Há diversas ferramentas para calcular o hash SHA-256 de qualquer coisa, sejam bibliotecas prontas nas linguagens de programação, sejam sites com este: https://md5calc.com/hash/sha256 ou este: https://xorbin.com/tools/sha256-hash-calculator

Veja se eu estou te enganando com os valores citados acima!

Transações

Resumindo grosseiramente, uma transação bitcoin é o envio de uma quantia do endereço A para o endereço B. Além disso, há também uma quantia paga aos mineradores. O minerador fica com as taxas das transações que ele conseguir colocar dentro de um bloco.

A taxa a ser paga é variável. Quem tem urgência na confirmação de suas transações paga uma taxa mais alta. Quem não tem pressa paga as taxas mais baixas e sua transação pode levar horas ou até dias para ser confirmada dependendo da quantidade de transações pendentes na rede.

As transações que foram criadas e propagadas recentemente pela rede ficam aguardando serem mineradas, no que chamamos de mempool.

Os blocos

Entenda um bloco como um conjunto de transações (limitados a +/- 1 MB de informação) e um cabeçalho (ou header), com metadados (informações referentes ao bloco em si).

Cada novo bloco minerado é adicionado à cadeia de blocos existentes.

Esta cadeia de blocos por sua vez está armazenada em cada um dos milhares de nós validadores espalhados pelo mundo. Um nó de validação nada mais é do que um software que qualquer pessoa pode baixar e rodar por conta própria para colaborar com a rede.

Dentre todas as informações contidas no bloco, vamos nos concentrar nas mais básicas para a compreensão da mineração:

1-Timestamp (o segundo em que o bloco está sendo minerado)

2-Lista das transações que o minerador colocou no bloco, limitada a 1 MB de dados

3-Hash do bloco anterior

4-Nonce (explico em breve)

Pelo fato do bloco conter o hash do bloco minerado anteriormente cria-se uma trava de segurança perfeita. Se fosse possível alterar qualquer um bloco já minerado, haveria uma quebra do hash de todos os blocos subsequentes. É isso que traz a confiabilidade da blockchain.

A principal qualidade da blockchain é que só existe um único caminho possível na sequência dos blocos, saindo do bloco atual e indo até o bloco gênesis (o primeiro bloco minerado). Assim, todos os participantes (nós e mineradores) concordam com a ordem das transações.

Halvings

O mecanismo de halving é a política monetária do bitcoin. Ele controla a velocidade da expansão da base monetária, a inflação do bitcoin. A cada 210.000 blocos a recompensa recebida a cada bloco minerado cai pela metade (daí o termo halving). Os primeiros 210.000 pagavam 50 BTCs, os 210.000 seguintes pagavam 25 BTCs e assim por diante, até o momento em que todos os quase 21 milhões de bitcoins terão sido minerados.

Mineração

Chegamos finalmente. A blockchain, timechain ou livro-razão é onde todas as transações ficam registradas, desde a primeira, em 03/01/2009, até hoje. Ela é composta pela sequência dos blocos, na ordem em que foram minerados.

O processo consiste em criar o próximo bloco a ser adicionado à blockchain. O minerador que conseguir incluir o próximo bloco recebe a quantidade de bitcoins determinada pelo ciclo de halvings, acrescida de todas as taxas das transações incluídas no bloco.

O software de mineração irá selecionar a maior quantidade possível de transações que cabem dentro de um bloco, priorizando aquelas que possuem as maiores taxas.

Junto dessa lista de transações, o software precisa juntar todas as informações no bloco e calcular o hash obtido: transações + hash do bloco anterior + timestamp.

Até aí, pode aparecer qualquer hash, correto? Agora as coisas começam a esquentar (literalmente).

Dificuldade da mineração

Para o bloco ser considerado como válido, é necessário que o hash obtido tenha um valor inferior à dificuldade atual vigente na rede.

Vamos colocar uma regra arbitrária para fins didáticos. Só iremos aceitar blocos cujo hash calculado se inicie por “00”. O minerador precisa comprovar que, por tentativa e erro, conseguiu encontrar um hash que atenda a dificuldade vigente. É desta forma que exigimos uma prova de trabalho.

Esta é uma das regras vigentes na rede cujos nós de validação (nodes) irão verificar quando receberem um novo bloco. Caso o hash do bloco propagado por um minerador seja superior à dificuldade programada, o bloco é rejeitado por todos eles.

Para termos uma ideia do poder de processamento da rede BTC, vamos comparar o poder de processamento de uma CPU moderna de um computador pessoal com uma máquina de mineração dedicada:

  • Hoje em dia, uma CPU para desktop consegue calcular algo próximo de 15.000.000 hashes por segundo, ou então 15MH/s (megahashes).
  • Uma única máquina de mineração dedicada, como a Antminer S19 consegue calcular 110.000.000.000.000 hashes por segundo, ou então 110TH/s (terahashes). 7,3 milhões de vezes mais rápida que uma CPU topo de linha para desktop.
  • Todas as máquinas mineradoras somadas na rede bitcoin atualmente calculam aproximadamente 195.339.327.381.705.800.000, ou então 195EH/s (exahashes).

Ou seja, a rede tem um poder de processamento equivalente a 13 trilhões de CPUs top de linha.

Todo este poder computacional prova que a rede é segura. Para atacar efetivamente a rede bitcoin, gerando qualquer tipo de impacto, seria necessário controlar mais da metade dessas máquinas mineradoras ao mesmo tempo. A quantidade de equipamentos, energia e dinheiro necessário para executar tal ataque inviabiliza o mesmo (fica muito caro e inviável). Pela teoria dos jogos, faz muito mais sentido se juntar à rede e receber suas recompensas em bitcoin do que atacar a rede.

Ajuste na dificuldade

A rede BTC foi projetada para que um novo bloco seja minerado a cada 10 minutos. A cada 2016 blocos minerados, a dificuldade é ajustada, seja para aumentar a dificuldade (um aumento de computadores na rede está fazendo novos blocos serem calculados mais rapidamente), seja para reduzi-la (queda na quantidade de mineradores, um país que bane a mineração, blackouts etc).

O incremento ou decremento na dificuldade é realizado na proporção calculada para que a média de intervalo entre os blocos fique sempre em 10 minutos. Isso é fantástico, pois torna a mineração do bitcoin constante. Pense no ouro. Se o preço disparar no mercado, haverá um incentivo para que a mineração de ouro aumente no mundo. Consequentemente, a oferta de ouro aumentará numa velocidade maior, ajustando também o seu preço. Já o bitcoin possui uma oferta inelástica: O aumento no número de mineradores não interfere na velocidade da criação de novos bitcoins devido ao ajuste.

Nonce

Se o minerador precisa encontrar um hash que atenda a dificuldade desejada, o que ele pode fazer para calcular novos hashes uma vez que ele não pode fazer nada além de juntar as transações, o hash do bloco anterior e o timestamp? Aí que entra o nonce.

Nonce vem de “number used only once”. É um número inteiro que pode ir de 0 até aproximadamente 4 bilhões.

O nonce é o valor que minerador precisa descobrir para produzir um hash iniciado em “00” no nosso exemplo. O processo se dá por força bruta, tentativa e erro. É isso que irá demandar energia e todo o poder de processamento dos processadores das ASICS (hardware dedicado para cálculo do sha-256), assim como está fritando seu cérebro agora.

Então, ao iniciar o cálculo, o nonce vale 0:

  1. Calcula o hash do bloco
  2. Hash calculado atende a dificuldade? Se sim, sucesso, propaga o bloco e ganha a recompensa. Caso contrário, incrementa o nonce em 1 e tenta de novo.

Então é isso? Não, tem mais!

O nonce pode ir de 0 ao valor máximo 4.294.967.296 sem que se obtenha um hash válido de acordo com a dificuldade. Isso mesmo, não é nada fácil. O que fazer então?

Notou que um dos fatores do cálculo é o timestamp? Notou também que o timestamp possui uma precisão de segundos? A capacidade do processamento atual da rede é tão absurda que os valores do nonce podem ser esgotados em menos de 1 segundo. Sim, você leu direito, é rápido mesmo. Aguardar o próximo segundo seria um grande desperdício.

O software minerador efetua diversas alterações no bloco que está tentando minerar, como por exemplo trocar alguma das transações, ele pode descartar uma delas e utilizar outra, reiniciando tudo do 0.

Assim que algum dos mineradores consegue encontrar um nonce que produza um hash válido para o bloco que está sendo minerado no momento (bingo!), ele propaga o bloco encontrado na rede. Todos os mineradores, ao receberem as informações do novo bloco e a mempool atualizada, partem então para a mineração do próximo bloco.

À medida que a dificuldade de mineração foi aumentando com o ingresso de mais mineradores, criou-se um outro atributo, o extra nonce. É um outro valor que pode ser ajustado da mesma forma que o nonce citado acima, na tentativa de produzir um hash válido.

Veja um exemplo prático e divirta-se com essa ferramenta: https://tools.superdatascience.com/blockchain/blockchain

--

--

Explica Bitcoin

Alguém cansado de ler tanta bobagem a respeito de um tema importante. Este espaço será utilizado para traduções e para textos autorais