Desvendando o Mistério da Mineração

PrincipianteJul 15, 2024
Este artigo fornece uma introdução detalhada ao processo de "mineração" em blockchain. Através de uma analogia com atividades de mineração tradicionais, ele explica o conceito básico de mineração digital, que envolve o uso de recursos computacionais para resolver problemas matemáticos para validação de transações e emissão de novas moedas.
Desvendando o Mistério da Mineração

encaminhar o título original '白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?'

um dos conceitos mais familiares relacionados à blockchain para todos é provavelmente a mineração. muitas pessoas podem ter ouvido falar sobre mineração várias vezes, mas não têm certeza do que isso realmente envolve. nesta seção, interromperemos nossa programação regular para primeiro introduzir a “mineração”.

um breve resumo do conteúdo de 'plain blockchain 1: introdução ao bitcoin (o pioneiro da revolução blockchain e o desafiador da moeda soberana)', onde satoshi nakamoto projetou o sistema monetário do bitcoin para vincular as recompensas contábeis com a emissão de moeda. essa abordagem permite que a emissão de moeda seja automatizada por meio do processo contábil, solucionando o problema da emissão de moeda e incentivando os contadores a participar ativamente.

1. O que é mineração?

No mundo real, a mineração envolve mineiros que usam várias ferramentas para escavar metais preciosos escondidos em rochas de minas. Os mineiros extraem valor desses metais raros escondidos na natureza por meio de trabalho físico.

para projetos de blockchain com recompensas para contabilidade (geralmente projetos de moeda digital), os nós de rede gastam recursos computacionais para resolver problemas. uma vez que encontram a solução, empacotam o bloco e recebem uma recompensa na forma de moeda recém-emitida. este processo é análogo à extração de metais preciosos como ouro do minério, daí ser comumente referido como “mineração”. aqui, os contadores são os mineiros, que competem para empacotar blocos usando hardware e eletricidade, resultando na criação de nova moeda.

2. por que a mineração é necessária?

A mineração tem dois objetivos principais: validar transações recentes, embalando-as em blocos e ligando-as à blockchain, e emitir nova moeda, recompensando os responsáveis pelo registro. Abaixo estão as funções detalhadas da mineração:

  1. seleção de contabilistas: é necessária uma estratégia para selecionar os contabilistas reais entre numerosos candidatos. O resultado da mineração é usado como base para esta seleção, garantindo que todas as transações sejam reconhecidas por todos os participantes, alcançando consenso em toda a rede.
  2. verificação da transação: cada transação de bitcoin precisa ser verificada pelos mineradores na rede. esse processo confirma a validade da transação, incluindo:
    • garantindo que o formato e tamanho da transação atendam às especificações.
    • verificando a validade da assinatura de cada transação para garantir que foi iniciada pelo usuário que possui a chave privada relacionada.
    • verificar se o valor de entrada excede o valor de saída (com uma parte do valor sendo cobrada como taxa), garantindo que os tokens usados para pagamento não tenham sido gastos duas vezes.
    • confirmando que a transação não foi incluída anteriormente num bloco.
  3. emissão de nova moeda: a mineração também é o modo pelo qual novos bitcoins entram em circulação. quando um minerador consegue minerar um novo bloco, ele recebe uma certa quantidade de bitcoin como recompensa. esse mecanismo de recompensa não apenas incentiva as pessoas a participarem da mineração, mas também serve como um método de emissão de bitcoins. esse método de emissão de moeda garante um aumento constante e controlado na circulação da moeda, ajudando a controlar a inflação.
  4. incentivando a participação: o mecanismo de recompensa motiva mais pessoas a participar na manutenção do sistema de moeda, promovendo o seu desenvolvimento contínuo e robusto.
  5. aumentando a segurança da rede e a descentralização: as recompensas da mineração levam a um grande número de mineradores, resultando em um poder computacional distribuído. essa descentralização garante que nenhuma entidade única possa controlar 50% do poder computacional, aumentando assim a transparência e a segurança do sistema. aderir ao princípio da cadeia mais longa melhora ainda mais a segurança do sistema.

3. por que os mineiros estão dispostos a participar na mineração?

Os mineradores são incentivados a participar da mineração porque recebem recompensas substanciais por empacotarem com sucesso um bloco no blockchain. Estas recompensas provêm de duas fontes principais:

  • recompensas de bloco (moeda recém-emitida): o sistema de moeda emite automaticamente nova moeda, que vai inteiramente para o mineiro. por exemplo, no sistema bitcoin, atualmente, os mineiros recebem 3,125 bitcoins por cada bloco que eles empacotam. dado que cada bitcoin tem um valor de cerca de $65,000, empacotar um único bloco pode render mais de $200,000, aproximadamente 1,47 milhões de rmb.
  • taxas de transação pagas pelos utilizadores: devido à capacidade limitada de um bloco para conter registos de transações, alguns utilizadores pagam taxas de transação para incentivar os mineiros a priorizarem as suas transações para confirmação mais rápida. ao selecionar transações do pool para serem incluídas no bloco, os mineiros tendem a escolher aquelas com taxas mais elevadas. um bloco pode conter milhares de transações, e todas as taxas destas transações vão para o mineiro, representando outra fonte significativa de rendimento. à medida que mais pessoas utilizam bitcoin para transações, a competição pela inclusão em blocos intensifica-se, levando a taxas mais elevadas que os utilizadores estão dispostos a pagar.

com o tempo, as recompensas em bloco diminuirão (por exemplo, devido ao mecanismo de halving do bitcoin, onde a recompensa é reduzida pela metade aproximadamente a cada quatro anos). eventualmente, depois que todos os 21 milhões de bitcoins forem minerados, esperados por volta do ano 2141, a recompensa automática em bloco deixará de existir e as taxas de transação se tornarão a principal fonte de renda para os mineradores.

dicas

O bitcoin gera um novo bloco aproximadamente a cada 10 minutos. Inicialmente, cada novo bloco produzia 50 bitcoins. Essa recompensa sofre metade a cada quatro anos e, até o momento, houve quatro eventos de metade. Atualmente, cada bloco gera 3,125 bitcoins, com a mais recente metade ocorrendo em abril de 2024. A próxima metade é prevista para cerca de 2028. Por volta de 2141, o bitcoin atingirá seu limite de emissão.

a taxa de transação é influenciada não apenas pela oferta e demanda, mas também pelo tamanho da transação, pois as taxas são proporcionais ao espaço que a transação ocupa no bloco.

4. como participar na mineração

para os mineiros, participar na mineração é simples. descarregue um cliente de carteira de moeda digital e, dentro do cliente, clique no botão de mineração para começar a minerar.

para projetos de blockchain com recompensas em blocos, o algoritmo de mineração é normalmente inserido em um script integrado na carteira. os mineradores só precisam clicar em um botão para iniciar o script.

o algoritmo de mineração é determinístico, o que significa que, desde que os mineiros executem continuamente o algoritmo, eventualmente obterão um resultado. no entanto, devido aos recursos computacionais variados, o tempo necessário para calcular este resultado pode diferir entre os mineiros. uma vez que um nó calcula o valor alvo, os esforços de outros mineiros durante esse período tornam-se fúteis, resultando em retornos negativos devido aos recursos físicos gastos.

Para evitar esforço desperdiçado, os mineiros frequentemente agrupam seus recursos computacionais ao se juntarem a um nó de pool de mineração. Este nó opera como qualquer outro nó, mas tem significativamente mais poder computacional. Quando o pool consegue minerar um bloco, as recompensas são distribuídas entre os mineiros participantes com base em seus recursos computacionais contribuídos. É importante notar que na blockchain, o mineiro registrado como empacotando o bloco é o nó do pool de mineração, enquanto os mineiros individuais recebem sua parte das recompensas alocadas pelo pool, e não diretamente do sistema monetário.

bitmain, uma empresa que fabrica chips de mineração especializados de alta eficiência, solidificou o papel das piscinas de mineração, contribuindo para a centralização do poder de contabilidade.

5. os detalhes do quebra-cabeça de mineração

Projetos de blockchain diferentes podem ter quebra-cabeças de mineração variados e níveis de dificuldade. Aqui, tomamos o Bitcoin como exemplo. O algoritmo de mineração usado pelo Bitcoin é chamado de Prova de Trabalho (PoW). A essência desse algoritmo é que para obter um resultado, uma certa quantidade de trabalho deve ser gasta para prová-lo.

O puzzle de mineração não é um problema matemático tradicional, mas envolve encontrar um número aleatório, conhecido como nonce. Este nonce, quando combinado com os dados no bloco e processado através de uma função de hash, deve produzir um valor de hash que satisfaça uma condição específica. Normalmente, essa condição requer que o valor de hash seja inferior a um valor alvo (ou, de forma equivalente, que os primeiros n bits do valor de hash sejam zero). A equação é a seguinte: hash(nonce+dados_do_bloco)≤alvo\text{hash}(\text{nonce} + \text{dados_do_bloco}) \leq \text{alvo}hash(nonce+dados_do_bloco)≤alvo

o bitcoin usa a função de hash sha-256, que converte qualquer comprimento de entrada em uma saída de comprimento fixo de 256 bits (equivalente a 64 dígitos hexadecimais ou 32 bytes). a saída é quase aleatória, mas garantida de ser a mesma para a mesma entrada. a mineração envolve a mudança contínua do nonce e o hash dos dados do cabeçalho do bloco usando sha-256 até que um valor de hash que atenda à condição alvo seja encontrado.

por exemplo, um valor de hash sha-256 com os primeiros 30 bits sendo zeros: 000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110

a conversão disso em hexadecimal resulta em um valor começando com sete zeros: 00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90

para simplificar, a probabilidade de encontrar um hash com os primeiros n bits sendo zero é 12n\frac{1}{2^n}2n1​. quanto maior o n, mais bits são zero e menor a probabilidade:

  • n = 10n = 10n = 10: 1 em 1.024
  • n=20n = 20n=20: 1 in 1,048,576
  • n=30n = 30n=30: 1 in 1,073,741,824
  • n=40n = 40n=40: 1 em 1.099.511.627.776
  • n=50n = 50n=50: 1 em 1.125.899.906.842.624

com n até 256, encontrar um valor de hash assim com a atual capacidade computacional humana, excluindo computadores quânticos, é praticamente impossível antes que a Terra deixe de existir.

devido às propriedades do sha-256, o único método é a força bruta, que envolve continuamente tentar diferentes nonces até que a condição seja atendida. essa necessidade de equipamentos de computação de alta performance é por isso que a mineração requer tais dispositivos.

uma vez que não é possível prever o valor de hash gerado ao adicionar o nonce aos dados do bloco e passá-lo pelo sha-256, o processo é totalmente aleatório. por exemplo, se o valor de hash de destino for 10.000, você não tem como saber qual nonce combinado com os dados do bloco produzirá um valor de hash inferior a 10.000. essa natureza imprevisível e aleatória significa que os mineradores devem continuar enumerando possibilidades até que a condição seja satisfeita. se vários valores atenderem à condição, o menor valor de hash é escolhido, uma vez que um valor de hash menor indica maior dificuldade e menor probabilidade de ocorrência.

verificar se um valor de hash gerado atende ao requisito é fácil, exigindo apenas uma operação de comparação. no entanto, encontrar um valor de hash menor ou igual ao valor de destino só pode ser alcançado por meio de enumeração de força bruta. essa característica, em que verificar um resultado é fácil, mas encontrar o resultado é difícil, é conhecida como assimetria computacional.

6. simulação de código do algoritmo de mineração

o código a seguir simula o processo de mineração. ele começa com uma string de dados do cabeçalho do bloco "geekbang" e busca incrementalmente a partir de um valor de nonce de 10.000 até encontrar um nonce que atenda à condição especificada.

aqui está um script python que demonstra o processo de mineração:

import hashlibdef main(): base_string = "geekbang" nonce = 10000 count = 0 while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string.encode()).hexdigest() count += 1 if pow_hash.startswith("0000"): # os primeiros 4 dígitos hexadecimais são 0, equivalentes aos primeiros 16 bits sendo 0 print("hash:", pow_hash) print("nonce:", nonce, "scan times:", count) break nonce += 1if __name__ == '__main__':     principal()

quando o requisito é que os primeiros 4 dígitos hexadecimais do resultado do hash sejam zero (equivalente aos primeiros 16 bits sendo zero), o número de cálculos é aproximadamente 58.000. se o requisito for aumentado para os primeiros 5 dígitos serem zero, o número de cálculos aumenta para 1,23 milhão. quando o requisito é que os primeiros 7 dígitos sejam zero, o número de cálculos chega a 160 milhões. isso ilustra que cada zero adicional no prefixo do hash aumenta o cálculo aproximadamente 16 vezes.

aqui estão os resultados para diferentes condições-alvo:

os primeiros 4 dígitos hexadecimais são zero (16 bits):

import hashlib

def main():

base_string = "geekbang"nonce = 10000count = 0while true:    target_string = base_string + str(nonce)    pow_hash = hashlib.sha256(target_string).hexdigest()    count = count + 1    if pow_hash.startswith("0000"): # 前4个16进制位是0,相当于前16个比特位是0    print pow_hash    print "nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png"  scan times: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count)    break    nonce = nonce + 1

se nome == ‘principal‘:

main()

como visto, aumentar o número de zeros principais necessários no hash aumenta significativamente o número de tentativas necessárias, seguindo um padrão de crescimento exponencial. isso demonstra a dificuldade computacional e os recursos necessários para a mineração, destacando a necessidade de dispositivos de computação de alto desempenho no processo de mineração.

7. ajuste dinâmico de dificuldade

para garantir que um bloco seja gerado aproximadamente a cada 10 minutos, o sistema bitcoin ajusta a dificuldade de mineração alterando o número de zeros principais necessários no valor hash. esse mecanismo de ajuste de dificuldade é uma parte crucial do sistema bitcoin. ele avalia o tempo necessário para gerar os últimos 2016 blocos, que idealmente deveriam ser cerca de duas semanas. se esses blocos forem minerados em menos de duas semanas, a dificuldade aumenta adicionando mais zeros principais (diminuindo o valor alvo). inversamente, se levar mais do que duas semanas, a dificuldade diminui reduzindo o número de zeros principais (aumentando o valor alvo). esse mecanismo garante que o tempo para gerar um bloco permaneça em cerca de 10 minutos, mesmo quando a taxa total de hash da rede flutua.

Este mecanismo de ajuste de dificuldade, projetado pelo criador do bitcoin, Satoshi Nakamoto, foi planejado desde o início para se adaptar automaticamente ao poder computacional total da rede. Ele mantém um ritmo constante de mineração e impede que a moeda seja emitida muito rapidamente, o que poderia perturbar a economia de mercado.

8. processo de execução do algoritmo de mineração

Diferentes projetos de blockchain podem ter algoritmos de mineração variados. Aqui, descrevemos o mais famoso: o algoritmo de mineração do Bitcoin.

o processo de execução do algoritmo de mineração subjacente do bitcoin é o seguinte:

  1. seleção de transações: escolher várias transações da mempool (geralmente priorizando aquelas com taxas mais altas). gerar automaticamente uma transação especial (geralmente chamada de transação coinbase) onde o destinatário é o minerador, e o valor da transação é a recompensa em bloco mais todas as taxas de transação selecionadas. colocar esta transação especial no início das transações selecionadas para formar o conjunto de transações para o bloco a ser empacotado.
  2. Construindo a árvore Merkle: Construa uma árvore de hash Merkle a partir do conjunto de transações. Uma árvore Merkle é uma árvore binária onde cada nó de folha armazena o hash de uma transação, identificando-o e indexando-o de forma exclusiva. Cada nó superior armazena o hash combinado de seus nós filho, culminando no nó raiz. O nó raiz identifica exclusivamente a árvore Merkle e, por extensão, todas as transações.
  3. construindo o cabeçalho do bloco: montar o cabeçalho do bloco a partir do valor da raiz de Merkle, um nonce, versão do bloco, hash do bloco anterior, timestamp, alvo de dificuldade e nonce. O tamanho do cabeçalho do bloco é de 80 bytes.
  4. hashar o cabeçalho do bloco: alterar continuamente o valor do nonce no cabeçalho do bloco e realizar um hash duplo sha-256 no conteúdo do cabeçalho do bloco (ou seja, sha256(sha256(cabeçalho_do_bloco))). comparar o hash resultante com o valor alvo atual da rede. se o resultado for menor que o valor alvo (indicando que os primeiros n bits são zero), o quebra-cabeça é resolvido, e a prova de trabalho está completa.
  5. transmitindo o bloco: envie o bloco recém-minerado para nós vizinhos, informando-os que o bloco foi minerado com sucesso.
  6. verificação e propagação: ao receber o novo bloco, outros nós realizam um hash duplo no cabeçalho do bloco para obter o hash do bloco. eles verificam que os primeiros n bits do hash do bloco são zero, reconhecem o bloco, interrompem os cálculos para este bloco e o propagam para os seus nós vizinhos.

o tamanho de cada campo no cabeçalho do bloco é o seguinte:

https://time.geekbang.org/column/article/5963

alt="">

a estrutura da árvore Merkle é a seguinte:

大后端私房菜]. alt="">

9. controvérsias na mineração

a principal controvérsia em torno da mineração envolve os algoritmos de prova de trabalho (PoW) usados pelo bitcoin e seus derivados. Esses algoritmos requerem que os mineradores alocem recursos computacionais substanciais para resolver problemas com os quais a rede concorda. Muitas pessoas estão trabalhando nessas computações simultaneamente, mas apenas o primeiro a resolver o problema recebe a recompensa. Os recursos computacionais e elétricos dos outros participantes são efetivamente desperdiçados, sem produzir valor adicional.

Existem duas formas principais de otimizar esse desperdício de recursos:

  1. mudar para algoritmos menos intensivos em recursos: ethereum, por exemplo, mudou do algoritmo pow para o algoritmo proof of stake (pos), que reduz significativamente o desperdício de recursos.
  2. usar recursos elétricos ociosos: os nós de mineração estão experimentando o uso de fontes de energia renovável, como a energia eólica, para operações de mineração. outro desenvolvimento significativo é a utilização de gás natural desperdiçado. além disso, algumas instituições estão explorando maneiras de reciclar o excesso de calor gerado pela mineração de bitcoin.

10. perguntas

qual é o valor da mineração? parece ser um desperdício de recursos e sem sentido para a sociedade.

Ao revisitar a secção "por que é necessária a mineração?" deste artigo, a importância direta da mineração é que ela suporta a emissão de moedas digitais. As recompensas de mineração incentivam mais pessoas a participar na manutenção de moedas digitais, tornando-as mais estáveis. Além disso, os algoritmos de mineração mantêm a consistência das transações nos sistemas de moedas digitais, tornando-os mais robustos e menos suscetíveis a ataques internos e externos.

O significado indireto da mineração é derivado das próprias moedas digitais. As moedas digitais criam um sistema monetário global e confiável, onde transações seguras podem ocorrer sem a necessidade de instituições centralizadas, evitando as desvantagens da centralização. Sua natureza global também permite transações transfronteiriças eficientes e de baixo custo.

o retorno da mineração diminuirá a ponto de cair abaixo dos custos, fazendo com que os mineradores parem de minerar e as transações cessem?

É uma preocupação comum que os retornos da mineração dependam exclusivamente das recompensas do sistema, que diminuem ao longo do tempo. No entanto, a mineração também gera receitas significativas com taxas de transação. À medida que as moedas digitais ganham uma aceitação mais ampla, o mercado de transações de moeda digital irá expandir. Este aumento do volume de transações intensificará a concorrência pela inclusão de blocos, levando a taxas mais altas que os usuários estão dispostos a pagar para priorizar suas transações. Consequentemente, os mineradores podem continuar a ganhar taxas de transação substanciais, garantindo a viabilidade contínua do processamento de transações.

Se os custos de mineração excederem as taxas do blockchain, a mineração pode continuar?

as taxas de transação compensarão os custos de mineração?

sim, as taxas de transação podem ajudar a compensar os custos da mineração. à medida que as recompensas em bloco diminuem ao longo do tempo, as taxas de transação tornam-se uma fonte crucial de renda para os mineiros. isso garante que, mesmo que os custos de eletricidade sejam elevados, os mineiros ainda possam sustentar suas operações por meio das taxas pagas pelos usuários para processamento de transações.

o que acontece se vários mineradores resolverem o quebra-cabeça simultaneamente?

os mineiros múltiplos dividem as recompensas de mineração se eles transmitirem simultaneamente seus novos blocos?

não, se vários mineiros resolverem o quebra-cabeça e transmitirem seus novos blocos ao mesmo tempo, isso cria um fork temporário na blockchain. aqui está como funciona:

  1. garfos temporários: quando alguns nós recebem dois blocos válidos da mesma altura, eles armazenam temporariamente ambos os blocos, causando um garfo temporário na blockchain.
  2. resolução de forks: à medida que novos blocos são minerados, os nós continuarão a construir na cadeia mais longa. A rede eventualmente converge para uma única cadeia, descartando a(s) mais curta(s).
  3. escolhendo a cadeia principal: os nós seguem a cadeia mais longa (aquela com a maior quantidade de prova de trabalho acumulada). O minerador cujo bloco acaba na cadeia mais longa recebe a recompensa, enquanto o outro bloco se torna um bloco 'órfão'.

exemplo:

  • o minerador A e o minerador B mineram um bloco com a mesma altura e o transmitem.
  • alguns nós recebem primeiro o bloco do minerador a, enquanto outros recebem o bloco do minerador b.
  • ambas as cadeias existem temporariamente.
  • quando o próximo bloco é minerado, se for adicionado à cadeia do minerador A, essa cadeia se torna a mais longa e os nós a adotarão como a cadeia principal.
  • O minerador A recebe a recompensa e o bloco do minerador B é descartado.

por que os nós com mais de 50% do poder de hash não trapaceiam?

o que é um ataque de 51% e por que é que os super nós não fazem batota?

um ataque de 51% ocorre quando uma única entidade ou grupo controla mais de 50% do poder computacional da rede. aqui está o motivo pelo qual os super nodos geralmente não trapaceiam:

  1. impossibilidade prática: possuir 51% do hash power de rede total é altamente improvável devido à escala e descentralização das principais criptomoedas como o Bitcoin.
  2. validação de rede: mesmo que um super nó tente trapacear, todos os nós validam cada bloco independentemente. Transações inválidas ou tentativas de gastos duplos são rejeitadas pela rede, tornando os esforços do super nó fúteis.
  3. reputação e incentivos econômicos: os super nós ganham mais ao manter a integridade da blockchain do que ao atacá-la. Ataques bem-sucedidos poderiam desvalorizar a criptomoeda, prejudicando o investimento do atacante.
  4. tipos de ataques:
    • gasto duplo: tentativa de gastar as mesmas moedas duas vezes.
    • bloqueio de transações: impedindo que determinadas transações sejam incluídas em blocos.
    • mineração egoísta: tentando obter mais recompensas de mineração revelando seletivamente blocos.
    • manipulação de carimbo de data/hora: alterando os carimbos de data/hora dos blocos para obter vantagem na mineração.
    • ataque de bloco vazio: mineração de blocos sem transações para desacelerar a rede.

porque a blockchain assume que não há contadores fixos para evitar transações fraudulentas

como é que a blockchain previne interrupções intencionais e transações fraudulentas?

  1. verificação pelos nós vizinhos: quando um bloco é distribuído para os nós vizinhos, esses nós irão verificar as transações dentro do bloco. se encontrarem transações inválidas, irão rejeitar o bloco e não o propagar mais.
  2. mecanismo de consenso: o mecanismo de consenso do bitcoin baseia-se no princípio da cadeia mais longa. Todos os nós da rede tentam estender a cadeia válida mais longa. Se alguém tentar alterar registros históricos (por exemplo, excluindo uma transação), eles devem modificar todos os blocos subsequentes vinculados ao bloco adulterado e garantir que a cadeia modificada seja mais longa do que a cadeia principal atual. Isso requer enormes recursos computacionais, tornando isso praticamente impossível.

prevenir a distribuição inconsistente de blocos pelos mineradores

  1. consistência na distribuição de blocos: um minerador não pode encontrar múltiplos valores de nonce válidos dentro de um curto período de tempo, impedindo-os de distribuir blocos legítimos diferentes para diferentes nós simultaneamente. qualquer bloco ilegal será descartado pelos nós vizinhos.

o que é uma transação na memória (mempool)?

definição e função: numa rede blockchain, todas as transações transmitidas que ainda não foram incluídas num bloco são armazenadas temporariamente na mempool (piscina de memória) dos nós da rede. os mineradores monitorizam a sua mempool para selecionar transações para a construção de novos blocos.

estratégia de seleção de transação: os mineradores podem escolher transações do mempool com base em sua estratégia. Geralmente, eles dão prioridade às transações com taxas mais altas, mas alguns também podem considerar outros fatores, como a idade da transação (o tempo que ela passou no mempool).

fontes de receita no sistema bitcoin

quem participa e como eles ganham: além dos usuários, os três principais participantes no sistema bitcoin são os mineradores, desenvolvedores e operadores de nós.

  1. mineiros: ganham recompensas e taxas de transação através da mineração.
  2. Desenvolvedores e operadores de nós: Geralmente não ganham diretamente do sistema Bitcoin. As suas contribuições são muitas vezes idealistas, visando manter a integridade do sistema. Podem receber rendimentos através de outros meios, como donativos e patrocínios. sua participação na mineração depende de preferências individuais.

por que os preços das GPUs aumentaram? Por que as GPUs de mineração são indesejáveis?

aumento nos preços das GPUs: a alta demanda por GPUs pelos mineradores para fins de mineração levou a uma escassez de oferta, fazendo com que os preços aumentassem.

gpus de mineração: gpus de mineração são aquelas anteriormente usadas para mineração de criptomoedas. essas gpus passam por intensa computação, resultando em desgaste significativo. devido ao seu desempenho reduzido, a maioria das pessoas prefere não comprar gpus de mineração usadas.

Os mineradores precisam armazenar todos os dados do livro-razão inteiro?

requisito de armazenamento totalmente redundante: sim, os mineradores precisam armazenar todo o registro do blockchain para verificar se um token foi gasto anteriormente e garantir a segurança e integridade do registro. No entanto, para blocos muito antigos, os mineradores só precisam armazenar os cabeçalhos dos blocos, não o conteúdo completo do bloco. Isso ajuda a manter a eficiência do blockchain, preservando sua segurança.

O que acontece quando o limite de fornecimento do Bitcoin é atingido?

sem recompensas automáticas além de 21 milhões de bitcoins: uma vez que o fornecimento total de bitcoin atingir seu limite de 21 milhões, o sistema não emitirá mais novos bitcoins como recompensas para os mineradores. Se os usuários também não estiverem dispostos a pagar taxas de transação, teoricamente, o sistema de transação pode enfrentar desafios operacionais. No entanto, é provável que os usuários estejam dispostos a pagar taxas de transação para terem suas transações processadas, garantindo a continuação do sistema.

a altura do bloco continuará a aumentar: mesmo após atingir o fornecimento máximo de 21 milhões de bitcoins, a altura do bloco (o número total de blocos) continuará a aumentar desde que os mineradores estejam dispostos a minerar e empacotar transações em novos blocos. A altura do bloco não é limitada pelo limite de fornecimento de bitcoin.

potencial para alterações de consenso: a comunidade pode propor alterações nas regras de consenso, como aumentar o fornecimento total de bitcoin, para permitir a geração de novas moedas, se necessário.

como são recompensados os mineiros?

transação de coinbase: na blockchain do bitcoin, as recompensas dos mineradores são distribuídas através de uma transação especial conhecida como "transação de coinbase" ou "recompensa do bloco". Essa transação possui características únicas:

  1. não é necessário transmitir: a transação coinbase é a primeira transação em cada bloco, criada automaticamente pelo algoritmo de mineração e não precisa ser transmitida para outros nós.
  2. sem entradas: ao contrário das transações regulares de bitcoin, a transação da coinbase não tem entrada (sem remetente). ela gera novos bitcoins que são recompensados ao minerador.
  3. outputs: a transação coinbase envia a recompensa para o endereço da carteira do minerador, que inclui os bitcoins recém cunhados e todas as taxas de transação das transações incluídas no bloco.

como é calculada a receita do minerador?

cálculo de receita por bloco: a receita do minerador é calculada cada vez que um bloco é minerado com sucesso e confirmado pelo mecanismo de consenso da rede. O minerador (ou pool de mineração) que minera o bloco recebe a recompensa do bloco e as taxas de transação acumuladas de todas as transações incluídas no bloco.

Processo de recebimento de recompensas: Uma vez que um minerador ou pool de mineração minera com sucesso um bloco e isso é confirmado pela rede, eles recebem a recompensa do bloco e as taxas de transação. Isso é executado através da transação Coinbase, que converte as taxas e recompensas em saídas de transação não gastas (UTXOs) creditadas na conta do minerador.

os blocos são criados sequencialmente ou em paralelo?

criação sequencial: os blocos são criados sequencialmente na blockchain. um novo bloco só pode ser criado depois que o bloco anterior foi minerado com sucesso e adicionado à cadeia.

embalagem de transações

múltiplas transações por bloco: os blocos geralmente contêm múltiplas transações. os mineradores incluem o máximo de transações possível para maximizar seus ganhos com taxas de transação, em vez de agrupar as transações individualmente.

utilização do espaço de bloco

blocos parcialmente preenchidos: a maioria dos blocos não está totalmente utilizada. os mineiros começam a trabalhar no próximo bloco assim que encontram um hash válido que atenda ao requisito de dificuldade, independentemente de o bloco estar completamente cheio.

mineração sem transações

blocos vazios: os blocos podem ser minerados mesmo que não haja transações para incluir. Esses blocos, chamados de blocos vazios, ainda fornecem uma recompensa ao minerador.

lidar com bifurcações de blockchain

regra da corrente mais longa: quando ocorre um fork, a rede segue a corrente com a maior prova de trabalho acumulada, que geralmente é a corrente mais longa. os nós mudam para a corrente mais longa uma vez que se torna evidente qual delas tem mais trabalho investido.

prevenir gastos duplos

resolução de gasto duplo:

  • se um bloco contiver transações conflitantes (gasto duplo), apenas a primeira transação válida a ser incluída em um bloco é considerada válida. a outra transação conflitante é descartada.
  • se duas transações conflitantes forem incluídas em blocos diferentes, a transação no bloco que for confirmado primeiro é considerada válida.

Tratamento detalhado de despesas duplas

Processo de validação:

  • entre blocos: se duas transações que tentam gastar a mesma moeda forem incluídas em blocos separados, a transação no bloco que for confirmado primeiro será considerada válida. o bloco contendo a transação em conflito será rejeitado.
  • dentro de um único bloco: se duas transações conflitantes forem incluídas no mesmo bloco, o minerador incluirá apenas uma. O minerador geralmente escolhe com base na taxa de transação (taxa mais alta tem preferência) ou na idade da transação (transação mais antiga tem preferência).

Como os usuários controlam o valor das taxas de transação que pagam?

cálculo da taxa de transação: os usuários podem controlar a taxa de transação para acelerar a confirmação de suas transações. A taxa é determinada pela seguinte fórmula:

taxa de transação=total de entrada−total de saída−variação

os utilizadores definem a taxa de transação ajustando o montante de entrada, o montante de saída e o montante de troco.

o processo de mineração de moeda digital

  1. Preparar equipamentos de mineração: configure hardware de mineração ou dispositivos de computação de alto desempenho.
  2. garantir acesso à internet: conecte o equipamento de mineração à internet.
  3. descarregar carteira digital: obter uma carteira digital e gerar as suas chaves privadas e públicas.
  4. começar a mineração: clique no botão de mineração na carteira para começar a mineração.

mineração em um pool

Distribuição de ganhos: Ao minerar em um pool, o nó do pool recebe a recompensa do bloco. O pool então distribui os ganhos para seus membros com base em seu poder computacional contribuído. Esta distribuição é executada através de transferências para as carteiras dos mineiros.

o que é a mineração egoísta?

mineração egoísta: a mineração egoísta é uma estratégia em que um mineiro (ou pool de mineração) encontra um novo bloco, mas não o transmite imediatamente. Em vez disso, continuam a minerar em privado na sua cadeia (cadeia oculta). Uma vez que encontram blocos adicionais, transmitem-nos todos de uma vez. Isto pode invalidar o trabalho de outros mineiros e inclinar o poder computacional e as recompensas para o mineiro egoísta. O bitcoin pode mitigar o impacto da mineração egoísta ao melhorar o protocolo de transmissão.

validação de nó ao receber transações e blocos

validação de transação: quando uma transação é transmitida para um nó, ela passa por várias verificações para determinar se deve ser adicionada ao mempool:

  1. formato da transação: verificar a correção da estrutura dos dados da transação.
  2. assinatura da transação: validar a autenticidade da assinatura da transação.
  3. gasto duplo: certifique-se de que a entrada não foi gasta anteriormente no mempool ou blockchain.
  4. entradas e saídas: confirme que o montante total de entradas é maior ou igual ao montante total de saídas.
  5. scripts de transação: executar e verificar scripts (principalmente em contratos inteligentes).
  6. Locktime: Verifique se a condição de locktime (altura ou tempo do bloco) está satisfeita.
  7. tamanho da transação e taxas: certifique-se de que o tamanho da transação e a taxa são adequados.

Validação de bloco: Quando um nó minerador recebe um novo bloco, ele executa extensas verificações no bloco e em suas transações:

  1. Validade da transação: valide cada transação dentro do bloco (mesmas verificações que a validação da transação).
  2. verificações específicas do bloco:
    • tamanho do bloco: garantir que o tamanho do bloco esteja dentro dos limites permitidos.
    • recompensa do bloco: verificar se a recompensa do bloco (bitcoins recém-criados e taxas de transação) está correta.
    • Raiz de Merkle: Calcule e valide a raiz de Merkle do bloco.
    • timestamp: confirmar que o carimbo de data/hora do bloco está dentro de um intervalo razoável.
    • Meta de dificuldade: verifique se o bloco atende à meta de dificuldade atual.

11. Referências

[1] palestra 12 | tecnologia blockchain aprofundada (4): pow consenso-explicação aprofundada do blockchain-tempo geek:Declaração de exoneração de responsabilidade:

  1. este artigo é reimpresso de[Gate.io aprender equipe, e eles vão lidar com isso prontamente.
  2. aviso de responsabilidade: as opiniões expressas neste artigo são exclusivamente do autor e não constituem nenhum conselho de investimento.
  3. as traduções do artigo para outras línguas são feitas pela equipe de aprendizado da Gate.io. a menos que mencionado, copiar, distribuir ou plagiar os artigos traduzidos é proibido.

Desvendando o Mistério da Mineração

PrincipianteJul 15, 2024
Este artigo fornece uma introdução detalhada ao processo de "mineração" em blockchain. Através de uma analogia com atividades de mineração tradicionais, ele explica o conceito básico de mineração digital, que envolve o uso de recursos computacionais para resolver problemas matemáticos para validação de transações e emissão de novas moedas.
Desvendando o Mistério da Mineração

encaminhar o título original '白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?'

um dos conceitos mais familiares relacionados à blockchain para todos é provavelmente a mineração. muitas pessoas podem ter ouvido falar sobre mineração várias vezes, mas não têm certeza do que isso realmente envolve. nesta seção, interromperemos nossa programação regular para primeiro introduzir a “mineração”.

um breve resumo do conteúdo de 'plain blockchain 1: introdução ao bitcoin (o pioneiro da revolução blockchain e o desafiador da moeda soberana)', onde satoshi nakamoto projetou o sistema monetário do bitcoin para vincular as recompensas contábeis com a emissão de moeda. essa abordagem permite que a emissão de moeda seja automatizada por meio do processo contábil, solucionando o problema da emissão de moeda e incentivando os contadores a participar ativamente.

1. O que é mineração?

No mundo real, a mineração envolve mineiros que usam várias ferramentas para escavar metais preciosos escondidos em rochas de minas. Os mineiros extraem valor desses metais raros escondidos na natureza por meio de trabalho físico.

para projetos de blockchain com recompensas para contabilidade (geralmente projetos de moeda digital), os nós de rede gastam recursos computacionais para resolver problemas. uma vez que encontram a solução, empacotam o bloco e recebem uma recompensa na forma de moeda recém-emitida. este processo é análogo à extração de metais preciosos como ouro do minério, daí ser comumente referido como “mineração”. aqui, os contadores são os mineiros, que competem para empacotar blocos usando hardware e eletricidade, resultando na criação de nova moeda.

2. por que a mineração é necessária?

A mineração tem dois objetivos principais: validar transações recentes, embalando-as em blocos e ligando-as à blockchain, e emitir nova moeda, recompensando os responsáveis pelo registro. Abaixo estão as funções detalhadas da mineração:

  1. seleção de contabilistas: é necessária uma estratégia para selecionar os contabilistas reais entre numerosos candidatos. O resultado da mineração é usado como base para esta seleção, garantindo que todas as transações sejam reconhecidas por todos os participantes, alcançando consenso em toda a rede.
  2. verificação da transação: cada transação de bitcoin precisa ser verificada pelos mineradores na rede. esse processo confirma a validade da transação, incluindo:
    • garantindo que o formato e tamanho da transação atendam às especificações.
    • verificando a validade da assinatura de cada transação para garantir que foi iniciada pelo usuário que possui a chave privada relacionada.
    • verificar se o valor de entrada excede o valor de saída (com uma parte do valor sendo cobrada como taxa), garantindo que os tokens usados para pagamento não tenham sido gastos duas vezes.
    • confirmando que a transação não foi incluída anteriormente num bloco.
  3. emissão de nova moeda: a mineração também é o modo pelo qual novos bitcoins entram em circulação. quando um minerador consegue minerar um novo bloco, ele recebe uma certa quantidade de bitcoin como recompensa. esse mecanismo de recompensa não apenas incentiva as pessoas a participarem da mineração, mas também serve como um método de emissão de bitcoins. esse método de emissão de moeda garante um aumento constante e controlado na circulação da moeda, ajudando a controlar a inflação.
  4. incentivando a participação: o mecanismo de recompensa motiva mais pessoas a participar na manutenção do sistema de moeda, promovendo o seu desenvolvimento contínuo e robusto.
  5. aumentando a segurança da rede e a descentralização: as recompensas da mineração levam a um grande número de mineradores, resultando em um poder computacional distribuído. essa descentralização garante que nenhuma entidade única possa controlar 50% do poder computacional, aumentando assim a transparência e a segurança do sistema. aderir ao princípio da cadeia mais longa melhora ainda mais a segurança do sistema.

3. por que os mineiros estão dispostos a participar na mineração?

Os mineradores são incentivados a participar da mineração porque recebem recompensas substanciais por empacotarem com sucesso um bloco no blockchain. Estas recompensas provêm de duas fontes principais:

  • recompensas de bloco (moeda recém-emitida): o sistema de moeda emite automaticamente nova moeda, que vai inteiramente para o mineiro. por exemplo, no sistema bitcoin, atualmente, os mineiros recebem 3,125 bitcoins por cada bloco que eles empacotam. dado que cada bitcoin tem um valor de cerca de $65,000, empacotar um único bloco pode render mais de $200,000, aproximadamente 1,47 milhões de rmb.
  • taxas de transação pagas pelos utilizadores: devido à capacidade limitada de um bloco para conter registos de transações, alguns utilizadores pagam taxas de transação para incentivar os mineiros a priorizarem as suas transações para confirmação mais rápida. ao selecionar transações do pool para serem incluídas no bloco, os mineiros tendem a escolher aquelas com taxas mais elevadas. um bloco pode conter milhares de transações, e todas as taxas destas transações vão para o mineiro, representando outra fonte significativa de rendimento. à medida que mais pessoas utilizam bitcoin para transações, a competição pela inclusão em blocos intensifica-se, levando a taxas mais elevadas que os utilizadores estão dispostos a pagar.

com o tempo, as recompensas em bloco diminuirão (por exemplo, devido ao mecanismo de halving do bitcoin, onde a recompensa é reduzida pela metade aproximadamente a cada quatro anos). eventualmente, depois que todos os 21 milhões de bitcoins forem minerados, esperados por volta do ano 2141, a recompensa automática em bloco deixará de existir e as taxas de transação se tornarão a principal fonte de renda para os mineradores.

dicas

O bitcoin gera um novo bloco aproximadamente a cada 10 minutos. Inicialmente, cada novo bloco produzia 50 bitcoins. Essa recompensa sofre metade a cada quatro anos e, até o momento, houve quatro eventos de metade. Atualmente, cada bloco gera 3,125 bitcoins, com a mais recente metade ocorrendo em abril de 2024. A próxima metade é prevista para cerca de 2028. Por volta de 2141, o bitcoin atingirá seu limite de emissão.

a taxa de transação é influenciada não apenas pela oferta e demanda, mas também pelo tamanho da transação, pois as taxas são proporcionais ao espaço que a transação ocupa no bloco.

4. como participar na mineração

para os mineiros, participar na mineração é simples. descarregue um cliente de carteira de moeda digital e, dentro do cliente, clique no botão de mineração para começar a minerar.

para projetos de blockchain com recompensas em blocos, o algoritmo de mineração é normalmente inserido em um script integrado na carteira. os mineradores só precisam clicar em um botão para iniciar o script.

o algoritmo de mineração é determinístico, o que significa que, desde que os mineiros executem continuamente o algoritmo, eventualmente obterão um resultado. no entanto, devido aos recursos computacionais variados, o tempo necessário para calcular este resultado pode diferir entre os mineiros. uma vez que um nó calcula o valor alvo, os esforços de outros mineiros durante esse período tornam-se fúteis, resultando em retornos negativos devido aos recursos físicos gastos.

Para evitar esforço desperdiçado, os mineiros frequentemente agrupam seus recursos computacionais ao se juntarem a um nó de pool de mineração. Este nó opera como qualquer outro nó, mas tem significativamente mais poder computacional. Quando o pool consegue minerar um bloco, as recompensas são distribuídas entre os mineiros participantes com base em seus recursos computacionais contribuídos. É importante notar que na blockchain, o mineiro registrado como empacotando o bloco é o nó do pool de mineração, enquanto os mineiros individuais recebem sua parte das recompensas alocadas pelo pool, e não diretamente do sistema monetário.

bitmain, uma empresa que fabrica chips de mineração especializados de alta eficiência, solidificou o papel das piscinas de mineração, contribuindo para a centralização do poder de contabilidade.

5. os detalhes do quebra-cabeça de mineração

Projetos de blockchain diferentes podem ter quebra-cabeças de mineração variados e níveis de dificuldade. Aqui, tomamos o Bitcoin como exemplo. O algoritmo de mineração usado pelo Bitcoin é chamado de Prova de Trabalho (PoW). A essência desse algoritmo é que para obter um resultado, uma certa quantidade de trabalho deve ser gasta para prová-lo.

O puzzle de mineração não é um problema matemático tradicional, mas envolve encontrar um número aleatório, conhecido como nonce. Este nonce, quando combinado com os dados no bloco e processado através de uma função de hash, deve produzir um valor de hash que satisfaça uma condição específica. Normalmente, essa condição requer que o valor de hash seja inferior a um valor alvo (ou, de forma equivalente, que os primeiros n bits do valor de hash sejam zero). A equação é a seguinte: hash(nonce+dados_do_bloco)≤alvo\text{hash}(\text{nonce} + \text{dados_do_bloco}) \leq \text{alvo}hash(nonce+dados_do_bloco)≤alvo

o bitcoin usa a função de hash sha-256, que converte qualquer comprimento de entrada em uma saída de comprimento fixo de 256 bits (equivalente a 64 dígitos hexadecimais ou 32 bytes). a saída é quase aleatória, mas garantida de ser a mesma para a mesma entrada. a mineração envolve a mudança contínua do nonce e o hash dos dados do cabeçalho do bloco usando sha-256 até que um valor de hash que atenda à condição alvo seja encontrado.

por exemplo, um valor de hash sha-256 com os primeiros 30 bits sendo zeros: 000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110

a conversão disso em hexadecimal resulta em um valor começando com sete zeros: 00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90

para simplificar, a probabilidade de encontrar um hash com os primeiros n bits sendo zero é 12n\frac{1}{2^n}2n1​. quanto maior o n, mais bits são zero e menor a probabilidade:

  • n = 10n = 10n = 10: 1 em 1.024
  • n=20n = 20n=20: 1 in 1,048,576
  • n=30n = 30n=30: 1 in 1,073,741,824
  • n=40n = 40n=40: 1 em 1.099.511.627.776
  • n=50n = 50n=50: 1 em 1.125.899.906.842.624

com n até 256, encontrar um valor de hash assim com a atual capacidade computacional humana, excluindo computadores quânticos, é praticamente impossível antes que a Terra deixe de existir.

devido às propriedades do sha-256, o único método é a força bruta, que envolve continuamente tentar diferentes nonces até que a condição seja atendida. essa necessidade de equipamentos de computação de alta performance é por isso que a mineração requer tais dispositivos.

uma vez que não é possível prever o valor de hash gerado ao adicionar o nonce aos dados do bloco e passá-lo pelo sha-256, o processo é totalmente aleatório. por exemplo, se o valor de hash de destino for 10.000, você não tem como saber qual nonce combinado com os dados do bloco produzirá um valor de hash inferior a 10.000. essa natureza imprevisível e aleatória significa que os mineradores devem continuar enumerando possibilidades até que a condição seja satisfeita. se vários valores atenderem à condição, o menor valor de hash é escolhido, uma vez que um valor de hash menor indica maior dificuldade e menor probabilidade de ocorrência.

verificar se um valor de hash gerado atende ao requisito é fácil, exigindo apenas uma operação de comparação. no entanto, encontrar um valor de hash menor ou igual ao valor de destino só pode ser alcançado por meio de enumeração de força bruta. essa característica, em que verificar um resultado é fácil, mas encontrar o resultado é difícil, é conhecida como assimetria computacional.

6. simulação de código do algoritmo de mineração

o código a seguir simula o processo de mineração. ele começa com uma string de dados do cabeçalho do bloco "geekbang" e busca incrementalmente a partir de um valor de nonce de 10.000 até encontrar um nonce que atenda à condição especificada.

aqui está um script python que demonstra o processo de mineração:

import hashlibdef main(): base_string = "geekbang" nonce = 10000 count = 0 while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string.encode()).hexdigest() count += 1 if pow_hash.startswith("0000"): # os primeiros 4 dígitos hexadecimais são 0, equivalentes aos primeiros 16 bits sendo 0 print("hash:", pow_hash) print("nonce:", nonce, "scan times:", count) break nonce += 1if __name__ == '__main__':     principal()

quando o requisito é que os primeiros 4 dígitos hexadecimais do resultado do hash sejam zero (equivalente aos primeiros 16 bits sendo zero), o número de cálculos é aproximadamente 58.000. se o requisito for aumentado para os primeiros 5 dígitos serem zero, o número de cálculos aumenta para 1,23 milhão. quando o requisito é que os primeiros 7 dígitos sejam zero, o número de cálculos chega a 160 milhões. isso ilustra que cada zero adicional no prefixo do hash aumenta o cálculo aproximadamente 16 vezes.

aqui estão os resultados para diferentes condições-alvo:

os primeiros 4 dígitos hexadecimais são zero (16 bits):

import hashlib

def main():

base_string = "geekbang"nonce = 10000count = 0while true:    target_string = base_string + str(nonce)    pow_hash = hashlib.sha256(target_string).hexdigest()    count = count + 1    if pow_hash.startswith("0000"): # 前4个16进制位是0,相当于前16个比特位是0    print pow_hash    print "nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png"  scan times: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count)    break    nonce = nonce + 1

se nome == ‘principal‘:

main()

como visto, aumentar o número de zeros principais necessários no hash aumenta significativamente o número de tentativas necessárias, seguindo um padrão de crescimento exponencial. isso demonstra a dificuldade computacional e os recursos necessários para a mineração, destacando a necessidade de dispositivos de computação de alto desempenho no processo de mineração.

7. ajuste dinâmico de dificuldade

para garantir que um bloco seja gerado aproximadamente a cada 10 minutos, o sistema bitcoin ajusta a dificuldade de mineração alterando o número de zeros principais necessários no valor hash. esse mecanismo de ajuste de dificuldade é uma parte crucial do sistema bitcoin. ele avalia o tempo necessário para gerar os últimos 2016 blocos, que idealmente deveriam ser cerca de duas semanas. se esses blocos forem minerados em menos de duas semanas, a dificuldade aumenta adicionando mais zeros principais (diminuindo o valor alvo). inversamente, se levar mais do que duas semanas, a dificuldade diminui reduzindo o número de zeros principais (aumentando o valor alvo). esse mecanismo garante que o tempo para gerar um bloco permaneça em cerca de 10 minutos, mesmo quando a taxa total de hash da rede flutua.

Este mecanismo de ajuste de dificuldade, projetado pelo criador do bitcoin, Satoshi Nakamoto, foi planejado desde o início para se adaptar automaticamente ao poder computacional total da rede. Ele mantém um ritmo constante de mineração e impede que a moeda seja emitida muito rapidamente, o que poderia perturbar a economia de mercado.

8. processo de execução do algoritmo de mineração

Diferentes projetos de blockchain podem ter algoritmos de mineração variados. Aqui, descrevemos o mais famoso: o algoritmo de mineração do Bitcoin.

o processo de execução do algoritmo de mineração subjacente do bitcoin é o seguinte:

  1. seleção de transações: escolher várias transações da mempool (geralmente priorizando aquelas com taxas mais altas). gerar automaticamente uma transação especial (geralmente chamada de transação coinbase) onde o destinatário é o minerador, e o valor da transação é a recompensa em bloco mais todas as taxas de transação selecionadas. colocar esta transação especial no início das transações selecionadas para formar o conjunto de transações para o bloco a ser empacotado.
  2. Construindo a árvore Merkle: Construa uma árvore de hash Merkle a partir do conjunto de transações. Uma árvore Merkle é uma árvore binária onde cada nó de folha armazena o hash de uma transação, identificando-o e indexando-o de forma exclusiva. Cada nó superior armazena o hash combinado de seus nós filho, culminando no nó raiz. O nó raiz identifica exclusivamente a árvore Merkle e, por extensão, todas as transações.
  3. construindo o cabeçalho do bloco: montar o cabeçalho do bloco a partir do valor da raiz de Merkle, um nonce, versão do bloco, hash do bloco anterior, timestamp, alvo de dificuldade e nonce. O tamanho do cabeçalho do bloco é de 80 bytes.
  4. hashar o cabeçalho do bloco: alterar continuamente o valor do nonce no cabeçalho do bloco e realizar um hash duplo sha-256 no conteúdo do cabeçalho do bloco (ou seja, sha256(sha256(cabeçalho_do_bloco))). comparar o hash resultante com o valor alvo atual da rede. se o resultado for menor que o valor alvo (indicando que os primeiros n bits são zero), o quebra-cabeça é resolvido, e a prova de trabalho está completa.
  5. transmitindo o bloco: envie o bloco recém-minerado para nós vizinhos, informando-os que o bloco foi minerado com sucesso.
  6. verificação e propagação: ao receber o novo bloco, outros nós realizam um hash duplo no cabeçalho do bloco para obter o hash do bloco. eles verificam que os primeiros n bits do hash do bloco são zero, reconhecem o bloco, interrompem os cálculos para este bloco e o propagam para os seus nós vizinhos.

o tamanho de cada campo no cabeçalho do bloco é o seguinte:

https://time.geekbang.org/column/article/5963

alt="">

a estrutura da árvore Merkle é a seguinte:

大后端私房菜]. alt="">

9. controvérsias na mineração

a principal controvérsia em torno da mineração envolve os algoritmos de prova de trabalho (PoW) usados pelo bitcoin e seus derivados. Esses algoritmos requerem que os mineradores alocem recursos computacionais substanciais para resolver problemas com os quais a rede concorda. Muitas pessoas estão trabalhando nessas computações simultaneamente, mas apenas o primeiro a resolver o problema recebe a recompensa. Os recursos computacionais e elétricos dos outros participantes são efetivamente desperdiçados, sem produzir valor adicional.

Existem duas formas principais de otimizar esse desperdício de recursos:

  1. mudar para algoritmos menos intensivos em recursos: ethereum, por exemplo, mudou do algoritmo pow para o algoritmo proof of stake (pos), que reduz significativamente o desperdício de recursos.
  2. usar recursos elétricos ociosos: os nós de mineração estão experimentando o uso de fontes de energia renovável, como a energia eólica, para operações de mineração. outro desenvolvimento significativo é a utilização de gás natural desperdiçado. além disso, algumas instituições estão explorando maneiras de reciclar o excesso de calor gerado pela mineração de bitcoin.

10. perguntas

qual é o valor da mineração? parece ser um desperdício de recursos e sem sentido para a sociedade.

Ao revisitar a secção "por que é necessária a mineração?" deste artigo, a importância direta da mineração é que ela suporta a emissão de moedas digitais. As recompensas de mineração incentivam mais pessoas a participar na manutenção de moedas digitais, tornando-as mais estáveis. Além disso, os algoritmos de mineração mantêm a consistência das transações nos sistemas de moedas digitais, tornando-os mais robustos e menos suscetíveis a ataques internos e externos.

O significado indireto da mineração é derivado das próprias moedas digitais. As moedas digitais criam um sistema monetário global e confiável, onde transações seguras podem ocorrer sem a necessidade de instituições centralizadas, evitando as desvantagens da centralização. Sua natureza global também permite transações transfronteiriças eficientes e de baixo custo.

o retorno da mineração diminuirá a ponto de cair abaixo dos custos, fazendo com que os mineradores parem de minerar e as transações cessem?

É uma preocupação comum que os retornos da mineração dependam exclusivamente das recompensas do sistema, que diminuem ao longo do tempo. No entanto, a mineração também gera receitas significativas com taxas de transação. À medida que as moedas digitais ganham uma aceitação mais ampla, o mercado de transações de moeda digital irá expandir. Este aumento do volume de transações intensificará a concorrência pela inclusão de blocos, levando a taxas mais altas que os usuários estão dispostos a pagar para priorizar suas transações. Consequentemente, os mineradores podem continuar a ganhar taxas de transação substanciais, garantindo a viabilidade contínua do processamento de transações.

Se os custos de mineração excederem as taxas do blockchain, a mineração pode continuar?

as taxas de transação compensarão os custos de mineração?

sim, as taxas de transação podem ajudar a compensar os custos da mineração. à medida que as recompensas em bloco diminuem ao longo do tempo, as taxas de transação tornam-se uma fonte crucial de renda para os mineiros. isso garante que, mesmo que os custos de eletricidade sejam elevados, os mineiros ainda possam sustentar suas operações por meio das taxas pagas pelos usuários para processamento de transações.

o que acontece se vários mineradores resolverem o quebra-cabeça simultaneamente?

os mineiros múltiplos dividem as recompensas de mineração se eles transmitirem simultaneamente seus novos blocos?

não, se vários mineiros resolverem o quebra-cabeça e transmitirem seus novos blocos ao mesmo tempo, isso cria um fork temporário na blockchain. aqui está como funciona:

  1. garfos temporários: quando alguns nós recebem dois blocos válidos da mesma altura, eles armazenam temporariamente ambos os blocos, causando um garfo temporário na blockchain.
  2. resolução de forks: à medida que novos blocos são minerados, os nós continuarão a construir na cadeia mais longa. A rede eventualmente converge para uma única cadeia, descartando a(s) mais curta(s).
  3. escolhendo a cadeia principal: os nós seguem a cadeia mais longa (aquela com a maior quantidade de prova de trabalho acumulada). O minerador cujo bloco acaba na cadeia mais longa recebe a recompensa, enquanto o outro bloco se torna um bloco 'órfão'.

exemplo:

  • o minerador A e o minerador B mineram um bloco com a mesma altura e o transmitem.
  • alguns nós recebem primeiro o bloco do minerador a, enquanto outros recebem o bloco do minerador b.
  • ambas as cadeias existem temporariamente.
  • quando o próximo bloco é minerado, se for adicionado à cadeia do minerador A, essa cadeia se torna a mais longa e os nós a adotarão como a cadeia principal.
  • O minerador A recebe a recompensa e o bloco do minerador B é descartado.

por que os nós com mais de 50% do poder de hash não trapaceiam?

o que é um ataque de 51% e por que é que os super nós não fazem batota?

um ataque de 51% ocorre quando uma única entidade ou grupo controla mais de 50% do poder computacional da rede. aqui está o motivo pelo qual os super nodos geralmente não trapaceiam:

  1. impossibilidade prática: possuir 51% do hash power de rede total é altamente improvável devido à escala e descentralização das principais criptomoedas como o Bitcoin.
  2. validação de rede: mesmo que um super nó tente trapacear, todos os nós validam cada bloco independentemente. Transações inválidas ou tentativas de gastos duplos são rejeitadas pela rede, tornando os esforços do super nó fúteis.
  3. reputação e incentivos econômicos: os super nós ganham mais ao manter a integridade da blockchain do que ao atacá-la. Ataques bem-sucedidos poderiam desvalorizar a criptomoeda, prejudicando o investimento do atacante.
  4. tipos de ataques:
    • gasto duplo: tentativa de gastar as mesmas moedas duas vezes.
    • bloqueio de transações: impedindo que determinadas transações sejam incluídas em blocos.
    • mineração egoísta: tentando obter mais recompensas de mineração revelando seletivamente blocos.
    • manipulação de carimbo de data/hora: alterando os carimbos de data/hora dos blocos para obter vantagem na mineração.
    • ataque de bloco vazio: mineração de blocos sem transações para desacelerar a rede.

porque a blockchain assume que não há contadores fixos para evitar transações fraudulentas

como é que a blockchain previne interrupções intencionais e transações fraudulentas?

  1. verificação pelos nós vizinhos: quando um bloco é distribuído para os nós vizinhos, esses nós irão verificar as transações dentro do bloco. se encontrarem transações inválidas, irão rejeitar o bloco e não o propagar mais.
  2. mecanismo de consenso: o mecanismo de consenso do bitcoin baseia-se no princípio da cadeia mais longa. Todos os nós da rede tentam estender a cadeia válida mais longa. Se alguém tentar alterar registros históricos (por exemplo, excluindo uma transação), eles devem modificar todos os blocos subsequentes vinculados ao bloco adulterado e garantir que a cadeia modificada seja mais longa do que a cadeia principal atual. Isso requer enormes recursos computacionais, tornando isso praticamente impossível.

prevenir a distribuição inconsistente de blocos pelos mineradores

  1. consistência na distribuição de blocos: um minerador não pode encontrar múltiplos valores de nonce válidos dentro de um curto período de tempo, impedindo-os de distribuir blocos legítimos diferentes para diferentes nós simultaneamente. qualquer bloco ilegal será descartado pelos nós vizinhos.

o que é uma transação na memória (mempool)?

definição e função: numa rede blockchain, todas as transações transmitidas que ainda não foram incluídas num bloco são armazenadas temporariamente na mempool (piscina de memória) dos nós da rede. os mineradores monitorizam a sua mempool para selecionar transações para a construção de novos blocos.

estratégia de seleção de transação: os mineradores podem escolher transações do mempool com base em sua estratégia. Geralmente, eles dão prioridade às transações com taxas mais altas, mas alguns também podem considerar outros fatores, como a idade da transação (o tempo que ela passou no mempool).

fontes de receita no sistema bitcoin

quem participa e como eles ganham: além dos usuários, os três principais participantes no sistema bitcoin são os mineradores, desenvolvedores e operadores de nós.

  1. mineiros: ganham recompensas e taxas de transação através da mineração.
  2. Desenvolvedores e operadores de nós: Geralmente não ganham diretamente do sistema Bitcoin. As suas contribuições são muitas vezes idealistas, visando manter a integridade do sistema. Podem receber rendimentos através de outros meios, como donativos e patrocínios. sua participação na mineração depende de preferências individuais.

por que os preços das GPUs aumentaram? Por que as GPUs de mineração são indesejáveis?

aumento nos preços das GPUs: a alta demanda por GPUs pelos mineradores para fins de mineração levou a uma escassez de oferta, fazendo com que os preços aumentassem.

gpus de mineração: gpus de mineração são aquelas anteriormente usadas para mineração de criptomoedas. essas gpus passam por intensa computação, resultando em desgaste significativo. devido ao seu desempenho reduzido, a maioria das pessoas prefere não comprar gpus de mineração usadas.

Os mineradores precisam armazenar todos os dados do livro-razão inteiro?

requisito de armazenamento totalmente redundante: sim, os mineradores precisam armazenar todo o registro do blockchain para verificar se um token foi gasto anteriormente e garantir a segurança e integridade do registro. No entanto, para blocos muito antigos, os mineradores só precisam armazenar os cabeçalhos dos blocos, não o conteúdo completo do bloco. Isso ajuda a manter a eficiência do blockchain, preservando sua segurança.

O que acontece quando o limite de fornecimento do Bitcoin é atingido?

sem recompensas automáticas além de 21 milhões de bitcoins: uma vez que o fornecimento total de bitcoin atingir seu limite de 21 milhões, o sistema não emitirá mais novos bitcoins como recompensas para os mineradores. Se os usuários também não estiverem dispostos a pagar taxas de transação, teoricamente, o sistema de transação pode enfrentar desafios operacionais. No entanto, é provável que os usuários estejam dispostos a pagar taxas de transação para terem suas transações processadas, garantindo a continuação do sistema.

a altura do bloco continuará a aumentar: mesmo após atingir o fornecimento máximo de 21 milhões de bitcoins, a altura do bloco (o número total de blocos) continuará a aumentar desde que os mineradores estejam dispostos a minerar e empacotar transações em novos blocos. A altura do bloco não é limitada pelo limite de fornecimento de bitcoin.

potencial para alterações de consenso: a comunidade pode propor alterações nas regras de consenso, como aumentar o fornecimento total de bitcoin, para permitir a geração de novas moedas, se necessário.

como são recompensados os mineiros?

transação de coinbase: na blockchain do bitcoin, as recompensas dos mineradores são distribuídas através de uma transação especial conhecida como "transação de coinbase" ou "recompensa do bloco". Essa transação possui características únicas:

  1. não é necessário transmitir: a transação coinbase é a primeira transação em cada bloco, criada automaticamente pelo algoritmo de mineração e não precisa ser transmitida para outros nós.
  2. sem entradas: ao contrário das transações regulares de bitcoin, a transação da coinbase não tem entrada (sem remetente). ela gera novos bitcoins que são recompensados ao minerador.
  3. outputs: a transação coinbase envia a recompensa para o endereço da carteira do minerador, que inclui os bitcoins recém cunhados e todas as taxas de transação das transações incluídas no bloco.

como é calculada a receita do minerador?

cálculo de receita por bloco: a receita do minerador é calculada cada vez que um bloco é minerado com sucesso e confirmado pelo mecanismo de consenso da rede. O minerador (ou pool de mineração) que minera o bloco recebe a recompensa do bloco e as taxas de transação acumuladas de todas as transações incluídas no bloco.

Processo de recebimento de recompensas: Uma vez que um minerador ou pool de mineração minera com sucesso um bloco e isso é confirmado pela rede, eles recebem a recompensa do bloco e as taxas de transação. Isso é executado através da transação Coinbase, que converte as taxas e recompensas em saídas de transação não gastas (UTXOs) creditadas na conta do minerador.

os blocos são criados sequencialmente ou em paralelo?

criação sequencial: os blocos são criados sequencialmente na blockchain. um novo bloco só pode ser criado depois que o bloco anterior foi minerado com sucesso e adicionado à cadeia.

embalagem de transações

múltiplas transações por bloco: os blocos geralmente contêm múltiplas transações. os mineradores incluem o máximo de transações possível para maximizar seus ganhos com taxas de transação, em vez de agrupar as transações individualmente.

utilização do espaço de bloco

blocos parcialmente preenchidos: a maioria dos blocos não está totalmente utilizada. os mineiros começam a trabalhar no próximo bloco assim que encontram um hash válido que atenda ao requisito de dificuldade, independentemente de o bloco estar completamente cheio.

mineração sem transações

blocos vazios: os blocos podem ser minerados mesmo que não haja transações para incluir. Esses blocos, chamados de blocos vazios, ainda fornecem uma recompensa ao minerador.

lidar com bifurcações de blockchain

regra da corrente mais longa: quando ocorre um fork, a rede segue a corrente com a maior prova de trabalho acumulada, que geralmente é a corrente mais longa. os nós mudam para a corrente mais longa uma vez que se torna evidente qual delas tem mais trabalho investido.

prevenir gastos duplos

resolução de gasto duplo:

  • se um bloco contiver transações conflitantes (gasto duplo), apenas a primeira transação válida a ser incluída em um bloco é considerada válida. a outra transação conflitante é descartada.
  • se duas transações conflitantes forem incluídas em blocos diferentes, a transação no bloco que for confirmado primeiro é considerada válida.

Tratamento detalhado de despesas duplas

Processo de validação:

  • entre blocos: se duas transações que tentam gastar a mesma moeda forem incluídas em blocos separados, a transação no bloco que for confirmado primeiro será considerada válida. o bloco contendo a transação em conflito será rejeitado.
  • dentro de um único bloco: se duas transações conflitantes forem incluídas no mesmo bloco, o minerador incluirá apenas uma. O minerador geralmente escolhe com base na taxa de transação (taxa mais alta tem preferência) ou na idade da transação (transação mais antiga tem preferência).

Como os usuários controlam o valor das taxas de transação que pagam?

cálculo da taxa de transação: os usuários podem controlar a taxa de transação para acelerar a confirmação de suas transações. A taxa é determinada pela seguinte fórmula:

taxa de transação=total de entrada−total de saída−variação

os utilizadores definem a taxa de transação ajustando o montante de entrada, o montante de saída e o montante de troco.

o processo de mineração de moeda digital

  1. Preparar equipamentos de mineração: configure hardware de mineração ou dispositivos de computação de alto desempenho.
  2. garantir acesso à internet: conecte o equipamento de mineração à internet.
  3. descarregar carteira digital: obter uma carteira digital e gerar as suas chaves privadas e públicas.
  4. começar a mineração: clique no botão de mineração na carteira para começar a mineração.

mineração em um pool

Distribuição de ganhos: Ao minerar em um pool, o nó do pool recebe a recompensa do bloco. O pool então distribui os ganhos para seus membros com base em seu poder computacional contribuído. Esta distribuição é executada através de transferências para as carteiras dos mineiros.

o que é a mineração egoísta?

mineração egoísta: a mineração egoísta é uma estratégia em que um mineiro (ou pool de mineração) encontra um novo bloco, mas não o transmite imediatamente. Em vez disso, continuam a minerar em privado na sua cadeia (cadeia oculta). Uma vez que encontram blocos adicionais, transmitem-nos todos de uma vez. Isto pode invalidar o trabalho de outros mineiros e inclinar o poder computacional e as recompensas para o mineiro egoísta. O bitcoin pode mitigar o impacto da mineração egoísta ao melhorar o protocolo de transmissão.

validação de nó ao receber transações e blocos

validação de transação: quando uma transação é transmitida para um nó, ela passa por várias verificações para determinar se deve ser adicionada ao mempool:

  1. formato da transação: verificar a correção da estrutura dos dados da transação.
  2. assinatura da transação: validar a autenticidade da assinatura da transação.
  3. gasto duplo: certifique-se de que a entrada não foi gasta anteriormente no mempool ou blockchain.
  4. entradas e saídas: confirme que o montante total de entradas é maior ou igual ao montante total de saídas.
  5. scripts de transação: executar e verificar scripts (principalmente em contratos inteligentes).
  6. Locktime: Verifique se a condição de locktime (altura ou tempo do bloco) está satisfeita.
  7. tamanho da transação e taxas: certifique-se de que o tamanho da transação e a taxa são adequados.

Validação de bloco: Quando um nó minerador recebe um novo bloco, ele executa extensas verificações no bloco e em suas transações:

  1. Validade da transação: valide cada transação dentro do bloco (mesmas verificações que a validação da transação).
  2. verificações específicas do bloco:
    • tamanho do bloco: garantir que o tamanho do bloco esteja dentro dos limites permitidos.
    • recompensa do bloco: verificar se a recompensa do bloco (bitcoins recém-criados e taxas de transação) está correta.
    • Raiz de Merkle: Calcule e valide a raiz de Merkle do bloco.
    • timestamp: confirmar que o carimbo de data/hora do bloco está dentro de um intervalo razoável.
    • Meta de dificuldade: verifique se o bloco atende à meta de dificuldade atual.

11. Referências

[1] palestra 12 | tecnologia blockchain aprofundada (4): pow consenso-explicação aprofundada do blockchain-tempo geek:Declaração de exoneração de responsabilidade:

  1. este artigo é reimpresso de[Gate.io aprender equipe, e eles vão lidar com isso prontamente.
  2. aviso de responsabilidade: as opiniões expressas neste artigo são exclusivamente do autor e não constituem nenhum conselho de investimento.
  3. as traduções do artigo para outras línguas são feitas pela equipe de aprendizado da Gate.io. a menos que mencionado, copiar, distribuir ou plagiar os artigos traduzidos é proibido.
Comece agora
Registe-se e ganhe um cupão de
100 USD
!