Mineração
O processo de adicionar novos blocos à 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.
Cabeçalho do Bloco
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.
HASH256
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.
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.
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
bitcoin-cli getblocktemplate– obtém um modelo de bloco candidato para minerar.bitcoin-cli submitblock [hex]– envia um bloco minerado à rede.bitcoin-cli getmininginfo– informações de mineração (dificuldade, hashes por segundo da rede, etc.).