This article has been translated from English to Portuguese.
Como funciona a mineração de Bitcoin?
Na lição anterior, aprendeste o que é um minerador de Bitcoin, como ele armazena novas transacções no seu pool de memória e, em seguida, inicia o processo de "mineração" criando um bloco candidato.
Se o que acabei de escrever te soa a uma língua estrangeira, recomendo vivamente que comeces com a primeira lição do meu Guia para Principiantes na Exploração Mineira de Bitcoin.
Se ainda estás comigo, vamos ver mais de perto o bloco candidato...
Tal como tu podes ser separado em duas partes básicas com uma cabeça e um corpo, um bloco candidato pode ser dividido em duas partes:
- Cabeçalho do bloco (área amarela)
-
Corpo do bloco (área cinzenta)
Se olharmos mais de perto para um bloco candidato, na verdade ele NÃO contém apenas transacções.
Quando um mineiro cria um bloco candidato, inclui um "cabeçalho de bloco" (área amarela).
O "corpo" do bloco (área cinzenta) contém as transacções.
AED um bloco candidato que contém um conjunto de transacções, contém também alguns metadados que fornecem um "resumo" do bloco.
Os metadados são apenas dados que fornecem informações sobre outros dados. Neste caso, os metadados fornecem informações sobre o próprio bloco. Esta informação é conhecida como o "cabeçalho do bloco".
Dentro do cabeçalho do bloco, há vários dados.
Para o propósito desta lição, vou simplificar o que está dentro do cabeçalho do bloco.
Carimbo de data/hora
O primeiro dado dentro do cabeçalho do bloco é o "carimbode data/hora".
O carimbo de tempo indica quando o bloco foi criado.
Hash do bloco anterior
O próximo dado é chamado de "Previous Block" (bloco anterior) ou, mais especificamente, o "Previous Block Hash" (hash doblocoanterior).
O Hash do Bloco Anterior é o hash do bloco anterior na cadeia de blocos.
Para entenderes o que isto significa, precisamos de dar uma vista de olhos no ficheiro.

Agora que estamos a olhar para dentro do ficheiro, podemos ver que os dados estão estruturados de uma forma específica.

Visualiza isto como a cadeia de blocos.
O bloco candidato que o mineiro criou tem de ser adicionado ao bloco mais recente.
Digamos que o bloco mais recente é o que tem a cor azul.
Uma vez que o Block Hash do bloco a azul é o bloco mais recente do ficheiro (a "blockchain"), então é sobre esse bloco que o mineiro quer construir.
Pensa no Block Hash como um número de identificação personalizado para um bloco.
Então, o que o minerador fará é adicionar isso como o "Previous Block Hash" no Block Header do seu PRÓPRIO bloco candidato.
Hash "Resumo da transação"
O próximo dado é o que chamarei de Hash "Resumo da Transação".
Como o nome sugere, fornece um "resumo" de todas as transações no bloco expressas como uma cadeia de caracteres.
Sem entrar em detalhes, o que acontece é que todas as transações no bloco (destacadas em vermelho) são colocadas em uma função de hash e hash em uma determinada ordem e tu acabas com um único hash.
Este hash é o que é usado como Hash de "Resumo da Transação".
O que este hash fornece é uma "impressão digital" única baseada em todas as transacções incluídas num bloco.
Isso ajuda a garantir que as transações não tenham sido adulteradas.
Este Hash de "Resumo de Transação" é conhecido como a "Raiz de Merkle". 🤓
Lembra-te, uma pequena alteração nos dados irá alterar totalmente o hash. Isso significa que, se alguém tentar alterar qualquer transação no bloco no futuro, isso fará com que o Hash "Resumo da transação" mude e seja totalmente diferente do valor original que está no cabeçalho do bloco.
Basicamente, a alteração da transação criaria uma "impressão digital" totalmente diferente e não corresponderia à "impressão digital" original.
Esta alteração permitiria que todos soubessem instantaneamente que uma transação (ou transacções) foi adulterada.
Hash do bloco
Até agora, o cabeçalho do bloco contém três dados:
- Carimbo de data/hora
- Hash do bloco anterior
- Hash "Resumo da transação".
O próximo passo é colocar esses dados do cabeçalho do bloco numa função hash.
Isto produzirá um número aleatório chamado "Block Hash".
(Embora um nome mais preciso seria "Block Header Hash", pois é o hash apenas do cabeçalho do bloco, não do bloco inteiro).
Assim como o Hash do Bloco Anterior mencionado anteriormente, pensa no Hash do Bloco como um número de identificação personalizado que será atribuído ao bloco candidato.

Porque é que o mineiro faz isto?
Para que o mineiro possa adicionar o seu bloco à blockchain, tem de encontrar um Block Hash que cumpra um determinado requisito.
Se NÃO conseguir cumprir este requisito, então o bloco NÃO será considerado válido e o mineiro não poderá adicionar o seu bloco à cadeia de blocos.
Mais especificamente, o Block Hash deve ser um número que começa com um certo número de zeros.
Quantos zeros exatamente?
Varia. O software do sistema Bitcoin determina o número mínimo de zeros com que o Block Hash deve começar.
Originalmente, a exigência era de apenas um pequeno número de zeros, mas à medida que mais e mais mineiros se juntaram, o software Bitcoin começou a exigir um maior número de zeros.
Um mineiro deve gerar uma saída (o "Block Hash") que satisfaça o limite de saída definido pelo software Bitcoin.
Este "limiar" apenas especifica o número de zeros com que o Block Hash deve começar.
É como a dança do "limbo".

Quanto mais baixo o limiar, mais zeros são necessários.
Quanto mais zeros forem necessários, maior será a dificuldade de encontrar um Block Hash "correto".
Isto acontece porque mais zeros à esquerda significam menos soluções possíveis, o que significa que é necessário mais tempo para "encontrar" um Block Hash correto.
Encontrar um valor que começa com três zeros como "000123..."é muito mais difícil do que tentar encontrar um valor com seis zeros como "000000123..."
Aqui tens um exemplo recente de um Block Hash válido:
0000000000000000000586b367c292dfd274bf2e67575cf8b4d00735fc1df6ff
Repara no número de zeros com que começa.
O "certo número de zeros" vem daquilo a que se chama "dificuldade de mineração". Esta é ajustada automaticamente para cima ou para baixo pelo software que gere a rede Bitcoin. A dificuldade muda de acordo com o número de mineradores. Quanto mais computadores estiverem a minerar, maior será a dificuldade e mais zeros serão necessários no início, tornando mais difícil encontrar o nonce vencedor.
Um Block Hash pode ser interpretado como um número muito grandee deve estar abaixo de um determinado limite. É por isso que os hashes de bloco começam com uma série de zeros seguidos de uma cadeia alfanumérica. Alguns blocos têm até vinte zeros à esquerda, enquanto os anteriores têm apenas oito. O número de zeros necessários demonstra aproximadamente a dificuldade de mineração no momento em que o bloco foi publicado.
O que acontece se o Block Hash não começar com o número necessário de zeros?
Então o bloco NÃO pode ser adicionado ao ficheiro (a "blockchain").
Felizmente, o mineiro pode fazer várias tentativas.
Mas se um mineiro passar apenas o cabeçalho do bloco contendo apenas o carimbo de data/hora, o hash do bloco anterior e o hash do "resumo da transação" pela função hash novamente, obterá sempre o mesmo resultado.
O minerador precisa alterar os dados de alguma forma antes de tentar fazer o hash do Block Header novamente.
O Bitcoin fornece-te uma maneira!
O Nonce
No cabeçalho do bloco, há um campo extra chamado "nonce" (caixa azul claro)
Existe uma parte especial do cabeçalho do bloco que os mineiros podem preencher com um número arbitrário.
O mineiro é livre de colocar o número que quiser.
O nonce é completamente separado das transacções do bloco. O seu único objetivo é permitir que os mineiros o preencham com um número e alterem o número se o Block Hash não cumprir o requisito de começar com um certo número de zeros.
Ao usar um nonce, um mineiro pode manipular a saída da função hash para "adivinhar" a saída desejada.
Como os outros dados no cabeçalho do bloco não podem ser alterados, o único dado que pode ser alterado é o nonce.
Assim, se a primeira tentativa de hashing do Block Hader falhar, o minerador altera o valor do nonce.
Podes pensar neste processo como se estivesses a tentar encontrar a combinação de um cadeado.

Não há atalhos possíveis quando tentas encontrar a combinação de números que o desbloqueia. Tens de tentar todas as combinações possíveis até que, a dada altura, encontres a correta por acaso.
Tens de tentar adivinhar várias vezes até teres sorte!
E tal como é extremamente fácil e rápido verificar se a combinação de um cadeado é a correta (ou desbloqueia ou não), é extremamente fácil e rápido para o mineiro, e para os outros nós depois, verificar se o nonce é de facto o correto.
O mineiro também está a competir com outros mineiros. O primeiro mineiro a encontrar um nonce que resulte num Block Hash válido tem o direito de adicionar o seu bloco à cadeia de blocos e é recompensado por isso.
Por exemplo, digamos que o Block Hash precisa de começar com pelo menos quatro zeros.
A única maneira de encontrar um Block Hash com o número necessário de zeros iniciais é escolher aleatoriamente um valor nonce e passar o Block Header pela função hash.
Neste cenário, o minerador começa com "0" para o valor do nonce (caixa azul claro).
Se isso não produzir o resultado desejado, então tudo o que o minerador pode fazer é tentar novamente com um nonce diferente.
O minerador muda o nonce, depois começa de novo até conseguir encontrar um Block Hash com pelo menos o número mínimo de zeros exigido. Neste caso, quatro zeros.
Lembra-te, mesmo que tenhas feito apenas um pequeno ajuste, com uma função hash, até a mais pequena alteração produzirá resultados completamente diferentes.
Assim, a primeira tentativa do mineiro foi usar o número "0" no nonce. Em seguida, passa o Block Header pela função hash e vê se o Block Hash começa com quatro zeros.
Como podes ver, o Bloch Hash só começa com dois zeros, pelo que NÃO cumpre os critérios necessários para adicionar o bloco à blockchain.
Se a saída não for válida, o mineiro continua a tentar com diferentes valores de nonce.
Uma vez que o valor de "0" não funcionou, o mineiro pode alterar o valor do Nonce para "1" (caixa azul clara) e, em seguida, executar o Block Header através da função hash novamente.
Como podes ver, o Block Hash começa sem zeros, pelo que isto também não funciona.
Uma vez que o valor de "1" não funcionou, o mineiro pode alterar o valor do Nonce para "2" (caixa azul clara) e, em seguida, passar novamente o Block Header pela função de hash.
Neste caso, o Block Hash começa finalmente com quatro zeros e cumpre os critérios.
É um resultado de Block Hash bem sucedido! 🎉
Como podes ver, é imprevisível qual o nonce que produzirá um Block Hash com o número correto de zeros, por isso o mineiro tem de continuar a tentar diferentes nonces para encontrar o valor certo.
Os mineiros podem minerar durante longos períodos de tempo sem qualquer garantia de que alguma vez encontrarão um nonce correto. A maioria nunca encontrará!
O nonce é usado como um contador, em que o seu valor é constantemente incrementado até que encontre o Block Hash correto ou outro mineiro o faça.
É como um jogo de adivinhação de números!
Estás simplesmente a tentar encontrar um hash que comece com um certo número de zeros, alterando o valor do nonce.
Os mineiros fazem isto repetidamente.... ESPERANDO que o resultado produza um Block Hash que cumpra os critérios.
Quanto mais potentes forem os seus computadores, mais "palpites" podem fazer.
Este processo de "adivinhação" é conhecido como mineração.
O mineiro "vencedor" é recompensado com um determinado número de bitcoin (mais taxas de transação) chamado "recompensa de bloco".
Um mineiro ganha a recompensa do bloco aproximadamente a cada 10 minutos.
Recompensa por bloco
Uma vez que os mineiros gastam tanto tempo e energia para "adivinhar" o nonce correto e confirmar as transacções na blockchain da Bitcoin, o software Bitcoin recompensa-os pelo seu esforço:
- Bitcoin recém-criado Quando um mineiro confirma transações, elas são agrupadas em um bloco e adicionadas ao blockchain do Bitcoin. Por cada novo bloco que é adicionado à blockchain, são pagos novos bitcoins ao mineiro. Isto é conhecido como o subsídio do bloco. A quantidade específica de bitcoins baseia-se num calendário de emissão determinado pelo protocolo no momento da criação do bloco. A partir de 20 de abril de 2024, a nova emissão é de 3,125 BTC por bloco, após o mais recente evento de redução para metade. A próxima redução pela metade está programada para ocorrer por volta de 2 de abril de 2028, quando a recompensa do bloco diminuirá para 1,5625 BTC por bloco.
- Taxas de transação. Quando as pessoas fazem transacções com bitcoin, pagam uma taxa aos mineiros para os incentivar a confirmar a transação. Quando um mineiro confirma um conjunto de transacções, também recolhe todas as taxas de cada transação individual.
A mineração é um processo monótono e repetitivo:
Pega num Block Header com o nonce, faz o hash, vê se o hash começa com um certo número de zeros, e se não começar, repete o processo com um nonce diferente.
Estou a ficar com sono só de pensar nisso. 😴
Por isso, quando lês ou ouves dizer que a mineração envolve "resolver problemas matemáticos complexos", agora sabes que essa não é uma descrição correta.
Não há nada de complexo na exploração mineira! O processo em si é bastante simples. Estás apenas a tentar adivinhar um número correto o mais rápido possível ou apenas o suficiente para seres o PRIMEIRO mineiro a adivinhar corretamente, para que o teu bloco candidato seja aquele que é adicionado à blockchain. É isso mesmo!
A "taxa de hash" indica o "poder de adivinhação" de um computador de mineração. Quanto mais hashes conseguires adivinhar por segundo, maior será a tua taxa de hash. Por exemplo, 1 trilião (1.000.000.000) de adivinhações por segundo é igual a uma taxa de hash de 1 terrahash (TH/s).
Só porque o processo é simples, não significa que seja fácil. É por isso que se chama "mineração". Estás a tentar "escavar" o número correto, o que requer um grande esforço, semelhante à mineração no mundo real.
Agora que o mineiro encontrou um nonce para poder gerar um Block Hash que cumpre os requisitos (começa com pelo menos 4 zeros), o bloco é adicionado à cópia do ficheiro do mineiro (a "blockchain").
Lembras-te de como o bloco azul era o bloco mais recente na blockchain do mineiro? Já não te lembras.
Uma vez que o mineiro foi capaz de adivinhar o nonce correto, pôde adicionar o seu bloco à cadeia de blocos (colorido a verde).
Assim, de uma perspetiva de alto nível, o ficheiro no computador do mineiro foi atualizado (assinalado a verde).
E depois, o nó transmite este bloco aos nós próximos aos quais está diretamente ligado.
Os nós verificam-no, verificam-no e certificam-se de que o Block Header produz um Block Hash que cumpre os critérios. Neste caso, o Block Hash precisa de começar com quatro zeros.
Estes nós actualizarão o seu ficheiro (a "blockchain") adicionando o bloco ao ficheiro.
O teu ficheiro será atualizado e terá agora a mesma versão que o ficheiro do mineiro vencedor( ficheiroverde ).
Todas as transacções no seu mempool que fazem parte deste bloco vencedor passam de "fresh" (ou "unconfirmed") para o estado "confirmed" e são agora permanentemente adicionadas ao ficheiro.
Quaisquer transacções em conflito serão expulsas.
Graças ao processo de mineração, apenas a transação púrpura será incluída na cadeia de blocos.
Em seguida, esses nós passarão o bloco para outros nós.
Quando o novo bloco é aceite pela maioria dos mineiros, todos os mineiros recomeçam e criam um novo bloco candidato e o processo de mineração repete-se.
A mineração actua como um mecanismo de classificação para transacções através de uma rede de computadores, onde os blocos "minerados" têm a palavra final sobre o que pertence à cadeia de blocos.
O Block Hash deste bloco recém-criado será agora utilizado pelos mineiros para o "Previous Block Hash" nos seus blocos candidatos.
O Block Hash actua como a "cadeia".
Os mineiros devem agora incluir o Block Hash do bloco anterior no novo bloco que estão a criar.
Por exemplo, isto significa que para minerar o bloco 101, os mineiros precisam de saber o hash do bloco 100.
Enquanto o bloco 101 não tiver sido minerado, o bloco 102 não poderá ser minerado.
Isto obriga os mineiros a concentrarem-se no bloco 101 que, por sua vez, inclui o hash do bloco 100. Nenhum mineiro pode passar à frente.
Mas em vez de cada bloco ter um "número de bloco", cada bloco refere-se ao bloco anterior pelo seu Bock Hash.
Isto implica que todos os blocos estão ligados uns aos outros e é isto que cria uma "cadeia de blocos" conhecida como blockchain.
Esta "cadeia de blocos" é mantida unida não por números de blocos, mas por hashes de blocos.
Porque não podes fazer batota com a Bitcoin
Digamos que todos estão a trabalhar no bloco 101.
Mas um mineiro quer alterar uma transação no bloco 80.
Teria que fazer as alterações e refazer todos os cálculos dos blocos 80-100 E também fazer o bloco 101.
São 21 blocos de computação dispendiosa!
Não só isso, mas o minerador teria que fazer tudo isso antes que os outros mineradores na rede Bitcoin terminassem o bloco atual (bloco 101) em que estão trabalhando. Isto é basicamente impossível.
É muito difícil conseguir adulterar quaisquer transacções que já façam parte da cadeia de blocos.
É isto que queres dizer quando as blockchains são descritas como imutáveis.
Prova de Trabalho (PoW)
O processo de mineração é muitas vezes referido como uma "Prova de Trabalho" ou PoW.
PoW é conhecido como o "mecanismo de consenso" que o Bitcoin usa para fazer com que todos os nós concordem com a cópia "oficial" da blockchain do Bitcoin. É assim que o Bitcoin é capaz de chegar a um consenso sem a necessidade de resolução de disputas ou intervenção de uma autoridade central.
O termo "prova de trabalho" refere-se apenas ao facto de ser necessário "trabalho" para encontrar um hash de bloco abaixo de um determinado limite. E quando o consegues, qualquer pessoa pode verificá-lo, o que fornece a "prova".
O processo de "adivinhar um nonce" e depois passar o cabeçalho do bloco pela função hash está a ser utilizado como uma forma de provar que realizaste uma quantidade necessária de "trabalho" no teu bloco.
O primeiro mineiro a produzir um hash válido é autorizado a adicionar um novo bloco à cadeia de blocos e recebe uma recompensa de bitcoins.
Se uma onda de mineiros se juntar à rede Bitcoin, o PoW ajustar-se-á para tornar mais difícil encontrar um hash de bloco válido. Se este aumento de dificuldade desencorajar demasiados mineiros e estes pararem de minerar, a dificuldade será diminuída para facilitar a mineração.
Este processo, conhecido como ajuste de dificuldade, ocorre aproximadamente a cada duas semanas e garante que novos blocos sejam adicionados à cadeia de blocos aproximadamente a cada 10 minutos, independentemente de quantos mineiros entrem ou saiam da rede.
Os ajustes de dificuldade são feitos com base na velocidade a que os mineiros estão a criar novos blocos.
Ao ajustar a dificuldade de mineração, o Bitcoin pode garantir que novos bitcoins sejam criados a uma taxa predeterminada, independentemente da quantidade de poder de computação que participa da rede.
O ajuste da dificuldade é importante porque garante que os mineiros não consigam minerar uma quantidade excessiva de bitcoins muito rapidamente.
O hardware especializado e a eletricidade necessários para minerar também significam que atacar a rede é proibitivamente caro. Isso garante a segurança e a integridade do blockchain do Bitcoin.
Qualquer pessoa com poder de computação suficiente para atacar a rede é melhor minerar honestamente e ganhar a recompensa do bloco (novos bitcoins mais taxas de transação).
Interessado em aprender mais sobre os aspectos técnicos do Bitcoin? learnmeabitoin.com fornece um guia incrível e fácil de seguir para ajudar as pessoas a entender como o Bitcoin funciona.
Resumo
Parabéns! Agora sabes como funciona a "mineração" em Bitcoin!
- Os mineiros procuram um hash aceitável que será o "Block Hash", escolhendo um nonce, executando a função hash e verificando a saída.
- Se o hash não tiver a quantidade certa de zeros à esquerda, os mineiros mudam o nonce, executam a função hash e verificam novamente.
- Quando um minerador finalmente tem a sorte de encontrar um nonce que funcione, e "ganha", o bloco é enviado para outros nós (incluindo outros mineradores) na rede Bitcoin, cada um dos quais pode então executar a função hash com o nonce do minerador vencedor, e verificar se funciona.
- Se a solução for aceite pela maioria dos nós, o bloco é adicionado à blockchain e o mineiro vencedor recebe a recompensa do bloco.
- Todos os mineiros "reiniciam" e começam a trabalhar num novo bloco candidato, usando o hash do bloco recentemente extraído como referência no seu cabeçalho de bloco (como o "cabeçalho de bloco anterior").
- Este processo em que os mineiros tentam "adivinhar" ou encontrar um nonce correto é conhecido como "Proof-of-Work" (PoW).
Agora que aprendemos sobre mineradores e mineração, vamos atualizar nosso mapa do sistema Bitcoin:


















