Mineração

O processo de adicionar novos blocos à blockchain

Diagrama mostrando um nó da rede bitcoin minerando um novo bloco na blockchain.

A mineração é o processo de tentar adicionar um novo bloco de transações à blockchain.

É uma competição em toda a rede, onde qualquer nó pode trabalhar para tentar adicionar o próximo bloco à cadeia.

Quando um novo bloco é minerado, ele é transmitido pela rede, onde cada nó independentemente o verifica e o adiciona à sua blockchain. Depois, cada nó minerador reinicia o processo para tentar construir em cima desse novo bloco.

O sistema é projetado para que um novo bloco seja minerado a cada 10 minutos, em média.

Método

Como funciona a mineração?

O processo de mineração começa enchendo um bloco candidato com transações do memory pool do seu nó.

Em seguida, construímos um cabeçalho de bloco para esse bloco candidato. É basicamente um resumo curto de todos os dados do bloco, que inclui uma referência a um bloco existente sobre o qual queremos construir.

Ícone Ferramenta Cabeçalho do Bloco
Ícone Ferramenta

Cabeçalho do Bloco

Monte os 80 bytes do cabeçalho e calcule o hash do bloco (HASH256 do cabeçalho, em ordem de bytes invertida).

Agora estamos prontos para começar a minerar este bloco. Para isso, passamos o cabeçalho do bloco pela função de hash SHA-256 duas vezes (chamada HASH256, abreviando), e torcemos para que o número que ela cospe esteja abaixo do alvo atual.

Ícone Ferramenta HASH256
Ícone Ferramenta

HASH256

SHA-256 dupla. Faz o hash dos bytes de dados usando SHA-256 duas vezes: SHA256(SHA256(dados)).

0 bytes 0 bytes

Se o hash do seu cabeçalho de bloco não estiver abaixo do alvo, você pode continuar tentando incrementando o campo nonce. Isso permite manter o mesmo cabeçalho básico, mas obter um resultado de hash completamente diferente. E, com sorte, você pode acabar obtendo um hash de bloco abaixo do alvo atual.

Prova de Trabalho

O que significa prova de trabalho?

O processo de mineração é frequentemente chamado de prova de trabalho (proof of work). O termo se refere ao fato de que é preciso trabalho para obter um hash de bloco abaixo do alvo. E, se você conseguir, qualquer outra pessoa pode verificar que o trabalho foi feito, confirmando que o hash do bloco que você construiu está de fato abaixo do alvo.

A prova de trabalho envolve procurar um valor que, ao ser hasheado (por exemplo, com SHA-256), produza um hash que comece com um número de bits zero.
Satoshi Nakamoto, Whitepaper do Bitcoin

Mineradores

Quem pode minerar blocos?

Qualquer nó pode tentar minerar um bloco, e cada nó tem uma chance de sucesso. Porém, conseguir fazer cálculos de hash o mais rápido possível melhora suas chances. Como resultado, mineradores com mais poder de processamento têm mais probabilidade de minerar um bloco, o que favorece quem tem hardware especializado e acesso a energia barata. Mas, ainda assim, nada impede você de minerar se quiser.

Recompensa do Bloco

Qual é o incentivo para minerar?

Se você conseguir minerar um bloco, pode reivindicar uma recompensa de bloco. Ao construir um bloco candidato, você coloca a sua própria transação coinbase no topo, que permite enviar a si mesmo uma quantidade fixa de bitcoins que não existiam antes (gastáveis após o bloco atingir 100 blocos de profundidade). Essa recompensa funciona como incentivo para os mineradores estenderem a cadeia conhecida mais longa.

Intervalo

Quanto tempo leva para minerar um bloco?

O sistema é projetado para que um minerador na rede minere um novo bloco a cada 10 minutos (em média). O tempo é controlado pelo alvo, que é como uma barra de limbo que o hash de um bloco precisa ficar abaixo. Se os blocos são minerados mais rápido que 10 minutos em média ao longo de duas semanas (ex.: porque mais mineradores entraram), o alvo se ajusta para baixo, tornando mais difícil minerar, e o tempo médio volta a cerca de 10 minutos.

Ícone Ferramenta

Ajuste de Dificuldade

Calcule o novo alvo a partir do alvo atual e do tempo real de mineração de um período de 2016 blocos.

0x
0 bytes
Tempo (segundos)
0d
0d

O período de ajuste de dificuldade é de 2016 blocos. Em média, um bloco é minerado a cada 600 segundos (10 minutos), então o tempo esperado é 2016 × 600 = 1.209.600 segundos.

Razão

O tempo real dividido pelo tempo esperado. Multiplicamos o alvo atual por essa razão para obter o novo alvo.

0x
0x
0 bytes

Nota: esse valor de alvo é levemente truncado para ser armazenado no campo bits do cabeçalho do bloco, e é esse o alvo de fato usado na mineração.

Propósito

Por que usamos mineração?

O sistema de mineração permite que computadores em uma rede resolvam conflitos sem a necessidade de um computador central. É possível criar duas transações conflitantes (enviando os mesmos bitcoins para lugares diferentes) e inseri-las em nós diferentes ao mesmo tempo. Mas, graças à mineração, apenas uma delas chega à blockchain: um nó minera um bloco do seu memory pool e o transmite; os outros nós o adicionam e removem quaisquer transações conflitantes. Assim, a mineração funciona como um mecanismo de ordenação de transações, e nenhum nó isolado controla quais transações entram na blockchain.

Comandos