Desvendando o Mistério da Mineração

iniciantesJul 15, 2024
Este artigo fornece uma introdução detalhada ao processo de "mineração" em blockchain. Ao fazer 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 nova moeda.
Desvendando o Mistério da Mineração

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

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

um rápido resumo do conteúdo de 'blockchain simples 1: introdução ao bitcoin (o pioneiro da revolução blockchain e o desafiante da moeda soberana)', onde satoshi nakamoto projetou o sistema monetário do bitcoin para vincular as recompensas para a contabilidade com a emissão de moeda. essa abordagem permite que a emissão de moeda seja automatizada por meio do processo de contabilidade, resolvendo o problema da emissão de moeda e incentivando os contadores a participarem ativamente.

1. o que é mineração?

no mundo real, a mineração envolve mineiros usando várias ferramentas para escavar metais preciosos escondidos em rochas de minas. os mineiros extraem valor desses metais raros escondidos na natureza através do trabalho físico.

para projetos de blockchain com recompensas para a contabilidade (geralmente projetos de moeda digital), os nós de rede despendem recursos computacionais para resolver problemas. Uma vez que eles encontram a solução, eles empacotam o bloco e recebem uma recompensa na forma de uma moeda recém-emitida. Esse processo é análogo à extração de metais preciosos como o ouro do minério, por isso é comumente chamado de “mineração”. Aqui, os contadores são os mineradores, 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 serve para dois propósitos principais: validar transações recentes, agrupando-as em blocos e vinculando-as à blockchain, e emitir nova moeda recompensando os guardiões do livro. Abaixo estão as funções detalhadas da mineração:

  1. seleção de contadores: é necessário uma estratégia para selecionar os contadores reais entre numerosos candidatos. O resultado da mineração é usado como base para essa seleção, garantindo que todas as transações sejam reconhecidas por todos os participantes e alcançando consenso em toda a rede.
  2. verificação de 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 o 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.
    • verificando se a quantia de entrada excede a quantia de saída (com parte da quantia sendo tomada como taxa), garantindo que os tokens usados para o pagamento não tenham sido gastos duas vezes.
    • confirmar que a transação não foi incluída anteriormente em um bloco.
  3. emissão de nova moeda: a mineração também é a forma como novos bitcoins entram em circulação. quando um minerador minera com sucesso um novo bloco, eles recebem 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 de 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 seu desenvolvimento contínuo e robusto.
  5. aumentar a segurança e descentralização da rede: 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. Adotar o princípio da cadeia mais longa melhora ainda mais a segurança do sistema.

3. por que os mineradores estão dispostos a participar da mineração?

os mineradores são incentivados a participar da mineração porque recebem recompensas substanciais por empacotar com sucesso um bloco na blockchain. Essas recompensas vêm de duas fontes principais:

  • recompensas em bloco (nova moeda emitida): o sistema de moeda emite automaticamente nova moeda, que vai inteiramente para o minerador. Por exemplo, no sistema do Bitcoin, atualmente, os mineradores recebem 3,125 bitcoins para cada bloco que eles processam. Considerando que cada bitcoin vale cerca de US$65.000, processar um único bloco pode render mais de US$200.000, aproximadamente 1,47 milhão de RMB.
  • taxas de transação pagas pelos usuários: devido à capacidade limitada de um bloco para armazenar registros de transações, alguns usuários pagam taxas de transação para incentivar os mineradores a priorizarem suas transações para uma confirmação mais rápida. ao selecionar transações do pool a serem incluídas no bloco, os mineradores tendem a escolher aquelas com taxas mais altas. um bloco pode conter milhares de transações, e todas as taxas dessas transações vão para o minerador, representando outra fonte significativa de renda. à medida que mais pessoas usam bitcoin para transações, a competição pela inclusão em blocos se intensifica, levando a taxas mais altas que os usuários estão dispostos a pagar.

Com o tempo, as recompensas de bloco diminuirão (por exemplo, devido ao mecanismo de halving do Bitcoin, onde a recompensa é reduzida pela metade aproximadamente a cada quatro anos). Eventualmente, após todos os 21 milhões de bitcoins terem sido minerados, esperados em torno do ano de 2141, a recompensa automática de 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 redução pela metade a cada quatro anos e, até o momento, houve quatro desses eventos de redução. Atualmente, cada bloco gera 3,125 bitcoins, sendo que a redução mais recente ocorreu em abril de 2024. A próxima redução é esperada para cerca de 2028. Por volta de 2141, o bitcoin alcançará 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 ocupado pela transação no bloco.

4. como participar na mineração

para os mineradores, participar da mineração é simples. baixe 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 de bloco, o algoritmo de mineração é tipicamente escrito em um script integrado à carteira. os mineradores apenas precisam clicar em um botão para iniciar o script.

o algoritmo de mineração é determinístico, o que significa que, desde que os mineradores executem continuamente o algoritmo, eles eventualmente obterão um resultado. No entanto, devido aos recursos computacionais variáveis, o tempo necessário para calcular esse resultado pode ser diferente entre os mineradores. Uma vez que um nó calcula o valor-alvo, os esforços de outros mineradores durante esse período são inúteis, resultando em retornos negativos devido aos recursos físicos gastos.

para evitar esforço desperdiçado, os mineradores frequentemente agrupam seus recursos computacionais ao se juntarem a um nó de pool de mineração. Este nó funciona como qualquer outro nó, mas possui significativamente mais poder computacional. Quando o pool minera com sucesso um bloco, as recompensas são distribuídas entre os mineradores participantes com base em seus recursos computacionais contribuídos. É importante observar que, na blockchain, o minerador registrado como empacotador do bloco é o nó do pool de mineração, enquanto os mineradores individuais recebem sua parcela das recompensas alocadas pelo pool, não diretamente do sistema de moedas.

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

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

diferentes projetos de blockchain podem ter quebra-cabeças de mineração variados e níveis de dificuldade. aqui, usamos 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 despendida para prová-lo.

o quebra-cabeça 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 do bloco e processado por meio de uma função hash, deve produzir um valor hash que atenda a uma condição específica. Tipicamente, essa condição requer que o valor hash seja menor que um valor alvo (ou, equivalente, que os primeiros n bits do valor hash sejam zero). A equação é a seguinte: hash(nonce+block_data)≤target\text{hash}(\text{nonce} + \text{block_data}) \leq \text{target}hash(nonce+block_data)≤target

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 alteração contínua do nonce e o hash dos dados do cabeçalho do bloco usando sha-256 até encontrar um valor de hash que atenda à condição alvo.

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

convertendo isto para 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 com o poder computacional humano atual, excluindo computadores quânticos, é virtualmente 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 a tentativa contínua de diferentes nonces até que a condição seja atendida. Essa necessidade de equipamentos de computação de alto desempenho é o motivo pelo qual a mineração requer tais dispositivos.

como você não pode prever o valor hash gerado pela adição do nonce aos dados do bloco e passando-o pelo sha-256, o processo é totalmente aleatório. por exemplo, se o valor hash alvo é 10.000, você não tem como saber qual nonce combinado com os dados do bloco resultará em um valor hash menor que 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 múltiplos valores atenderem à condição, o menor valor hash é escolhido, uma vez que um valor 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 seguinte código 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 hashlib
def 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"):  # primeiros 4 dígitos hexadecimais são 0, equivalente aos primeiros 16 bits sendo 0
            print("hash:", pow_hash)
            print("nonce:", nonce, "tempo de varredura:", count)
            break
        nonce += 1

if __name__ == '__main__':
    main()

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 é de aproximadamente 58.000. se o requisito for aumentado para os primeiros 5 dígitos sendo 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"): # Os primeiros 4 dígitos hexadecimais são 0, o que equivale aos primeiros 16 bits sendo 0    print pow_hash    print "nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png"  número de verificações: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count)    break    nonce = nonce + 1

senome == ‘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 de bitcoin ajusta a dificuldade de mineração alterando o número de zeros iniciais necessários no valor do hash. esse mecanismo de ajuste de dificuldade é uma parte crucial do sistema de 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 iniciais (diminuindo o valor alvo). por outro lado, se levar mais do que duas semanas, a dificuldade diminui reduzindo o número de zeros iniciais (aumentando o valor alvo). esse mecanismo garante que o tempo para gerar um bloco permaneça em torno de 10 minutos, mesmo quando a taxa total de hash da rede flutua.

Esse 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 prejudicar 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: escolha várias transações da mempool (geralmente priorizando aquelas com taxas mais altas). gerar automaticamente uma transação especial (frequentemente chamada de transação de coinbase) onde o destinatário é o minerador, e o valor da transação é a recompensa do bloco mais todas as taxas de transação selecionadas. coloque esta transação especial no início das transações selecionadas para formar o conjunto de transações para o bloco a ser embalado.
  2. construindo a árvore de merkle: construa uma árvore de hash de merkle a partir do conjunto de transações. uma árvore de merkle é uma árvore binária onde cada nó folha armazena o hash de uma transação, identificando e indexando de forma única. cada nó superior armazena o hash combinado de seus nós filhos, culminando no nó raiz. o nó raiz identifica de forma única a árvore de 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, a versão do bloco, o hash do bloco anterior, o carimbo de data/hora, o alvo de dificuldade e o nonce. O tamanho do cabeçalho do bloco é de 80 bytes.
  4. hashing do cabeçalho do bloco: mude continuamente o valor de nonce no cabeçalho do bloco e execute um hash sha-256 duplo no conteúdo do cabeçalho do bloco (ou seja, sha256 (sha256 (block_header))). Compare o hash resultante com o valor alvo atual da rede. Se o resultado for menor do 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 os nós vizinhos, informando-os de 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 se 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 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 de Merkle é a seguinte:

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

9. controvérsias na mineração

a principal polêmica em torno da mineração envolve os algoritmos de prova de trabalho (PoW) usados pelo bitcoin e seus derivados. Esses algoritmos exigem que os mineradores alocem recursos computacionais substanciais para resolver problemas acordados pela rede. 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, não produzindo valor adicional.

existem duas vias principais para otimizar esse desperdício de recursos:

  1. mudar para algoritmos menos intensivos em recursos: o ethereum, por exemplo, transicionou do algoritmo pow para o algoritmo de prova de participação (pos), o que reduz significativamente o desperdício de recursos.
  2. usando recursos elétricos ociosos: nós de mineração estão experimentando o uso de fontes de energia renováveis, como energia eólica, para operações de mineração. outro desenvolvimento significativo é a utilização do gás natural que seria 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.

Revisitando a seção "Por que a mineração é necessária?" deste artigo, o significado direto da mineração é que ela suporta a emissão de moedas digitais. As recompensas de mineração incentivam mais pessoas a participar da manutenção das moedas digitais, tornando-as mais estáveis. Além disso, os algoritmos de mineração mantêm a consistência das transações dentro dos 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 sem confiança, onde as 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.

os retornos da mineração diminuirão a ponto de ficarem 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 uma receita significativa com taxas de transação. À medida que as moedas digitais ganham uma aceitação mais ampla, o mercado de transações de moedas digitais se expandirá. Esse aumento no volume de transações intensificará a competição 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 de bloco diminuem ao longo do tempo, as taxas de transação se tornam uma fonte crucial de renda para os mineradores. isso garante que, mesmo que os custos com eletricidade sejam altos, os mineradores 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?

vários mineradores dividem as recompensas de mineração se eles transmitirem simultaneamente seus novos blocos?

não, se vários mineradores resolverem o quebra-cabeça e transmitirem seus novos blocos ao mesmo tempo, isso cria um fork temporário na blockchain. é assim que 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. resolvendo 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 prova de trabalho mais acumulada). O minerador cujo bloco termina 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 na 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 ele é anexado à 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% de poder de hash não trapaceiam?

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

Um ataque de 51% ocorre quando uma única entidade ou grupo controla mais de 50% do poder computacional da rede. Veja por que os super nós não costumam trapacear:

  1. impossibilidade prática: possuir 51% do poder de hash da 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 gasto duplo são rejeitadas pela rede, tornando os esforços do super nó inú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:
    • double spend: tentativa de gastar as mesmas moedas duas vezes.
    • bloqueio de transações: impedindo que certas 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 carimbos de data/hora de bloco para obter uma vantagem de mineração.
    • Ataque de bloco vazio: blocos de mineração sem transações para tornar a rede mais lenta.

por que o blockchain assume nenhum livro-razão fixo para evitar transações fraudulentas

como o blockchain evita 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 verificarão as transações dentro do bloco. se encontrarem quaisquer transações inválidas, eles rejeitarão o bloco e não o propagarão mais.
  2. mecanismo de consenso: o mecanismo de consenso do bitcoin depende do 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, excluir uma transação), eles devem modificar todos os blocos subsequentes ligados ao bloco adulterado e garantir que a cadeia modificada seja mais longa do que a cadeia principal atual. isso requer enormes recursos computacionais, tornando-o praticamente impossível.

prevenindo distribuição inconsistente de blocos pelos mineradores

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

o que é uma pool de transações (mempool)?

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

estratégia de seleção de transações: os mineradores podem escolher transações do mempool com base em sua estratégia. geralmente, eles dão prioridade a 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 do sistema bitcoin são os mineradores, desenvolvedores e operadores de nós.

  1. Mineradores: Ganhe recompensas e taxas de transação por meio da mineração.
  2. desenvolvedores e operadores de nós: geralmente não ganham diretamente do sistema bitcoin. suas contribuições muitas vezes são idealistas, visando manter a integridade do sistema. eles podem receber renda por outros meios, como doações e patrocínios. sua participação na mineração depende das 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 tem levado a uma escassez de oferta, causando aumento nos preços.

mineração de GPUs: as GPUs de mineração são aquelas usadas anteriormente para mineração de criptomoedas. Essas GPUs passam por intensas computações, resultando em desgaste significativo. Devido ao seu desempenho diminuído, a maioria das pessoas prefere não comprar GPUs usadas para mineração.

os mineradores precisam armazenar todos os dados do razão?

Requisito de armazenamento redundante completo: Sim, os mineradores precisam armazenar todo o livro-razão blockchain para verificar se um token foi gasto anteriormente e para garantir a segurança e a integridade do livro-razão. No entanto, para blocos muito iniciais, os mineradores só precisam armazenar os cabeçalhos de bloco, 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 atinja seu limite de 21 milhões, o sistema não emitirá mais bitcoins como recompensa 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 poderá enfrentar desafios operacionais. No entanto, é provável que os usuários estejam dispostos a pagar taxas de transação para que suas transações sejam processadas, garantindo a continuidade 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 enquanto os mineradores estiverem dispostos a minerar e a agrupar transações em novos blocos. A altura do bloco não é limitada pelo limite de fornecimento de bitcoins.

Potencial para mudanças de consenso: A comunidade poderia propor mudanças nas regras de consenso, como aumentar a oferta total de Bitcoin, para permitir a geração de novas moedas, se necessário.

Como os mineiros são recompensados?

transação coinbase: no blockchain do bitcoin, as recompensas dos mineradores são distribuídas por meio de uma transação especial conhecida como 'transação coinbase' ou 'recompensa de bloco.' esta 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 de coinbase não tem entrada (não tem remetente). ela gera novos bitcoins que são recompensados ao minerador.
  3. Saídas: 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 minerar 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 conjunto de mineração mineram com sucesso um bloco e ele é confirmado pela rede, eles recebem a recompensa do bloco e as taxas de transação. Isso é executado por meio 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 após o bloco anterior ter sido minerado com sucesso e adicionado à cadeia.

Transações de embalagem

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 empacotar as transações individualmente.

utilização do espaço de bloco

blocos parcialmente preenchidos: a maioria dos blocos não é completamente utilizada. Os mineradores 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: blocos podem ser minerados mesmo se não houver transações para incluir. esses blocos, chamados de blocos vazios, ainda fornecem uma recompensa ao minerador.

Manipulando forks Blockchain

regra da cadeia mais longa: quando ocorre um fork, a rede segue a cadeia com a maior quantidade acumulada de provas de trabalho, que geralmente é a cadeia mais longa. Os nós mudam para a cadeia mais longa assim que fica evidente qual delas tem mais trabalho investido.

evitando gastos duplos

resolução de gastos duplos:

  • 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, aquela no bloco que for confirmado primeiro é considerada válida.

manipulação detalhada de gastos duplos

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 confirmada primeiro será considerada válida. O bloco que contém a transação conflitante 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 normalmente escolhe com base na taxa de transação (taxa mais alta recebe preferência) ou na idade da transação (transação anterior recebe 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−mudança

Os usuários definem a taxa de transação ajustando o valor de entrada, o valor de saída e o valor de alteração.

o processo de mineração de moeda digital

  1. preparar equipamentos de mineração: configurar hardware de mineração ou dispositivos de computação de alto desempenho.
  2. garanta acesso à internet: conecte o equipamento de mineração à internet.
  3. Baixar carteira digital: Obtenha uma carteira digital e gere suas chaves privadas e públicas.
  4. Iniciar mineração: clique no botão Mineração na carteira para começar a mineração.

mineração em uma piscina

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 no poder computacional contribuído por eles. Essa distribuição é executada por meio de transferências para as carteiras dos mineradores.

o que é mineração egoísta?

mineração egoísta: a mineração egoísta é uma estratégia onde um minerador (ou grupo de mineração) encontra um novo bloco, mas não o transmite imediatamente. Em vez disso, eles continuam minerando em privado em sua cadeia (cadeia oculta). Uma vez que encontram blocos adicionais, eles os transmitem todos de uma vez. Isso pode invalidar o trabalho de outros mineradores e inclinar o poder computacional e as recompensas para o minerador egoísta. O bitcoin pode mitigar o impacto da mineração egoísta melhorando o protocolo de transmissão.

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

validação da 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 de transação: verificar a correção da estrutura de dados da transação.
  2. Assinatura da transação: valide a autenticidade da assinatura da transação.
  3. double-spending: garantir que a entrada não tenha sido gasta anteriormente na mempool ou na blockchain.
  4. entradas e saídas: confirme que o valor total de entrada é maior ou igual ao valor total de saída.
  5. scripts de transação: executar e verificar scripts (principalmente em contratos inteligentes).
  6. locktime: verificar se a condição de locktime (altura do bloco ou tempo) é satisfeita.
  7. tamanho da transação e taxas: certifique-se de que o tamanho da transação e a taxa sejam adequados.

validação de bloco: quando um nó minerador recebe um novo bloco, ele realiza verificações extensivas no bloco e em suas transações:

  1. validade da transação: validar 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: certifique-se de que o tamanho do bloco esteja dentro dos limites permitidos.
    • recompensa do bloco: verifique 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.
    • Carimbo de data/hora: confirme se o carimbo de data/hora do bloco está dentro de um intervalo razoável.
    • alvo de dificuldade: verifique se o bloco atende ao alvo de dificuldade atual.

11. Referências

[1] Conferência 12 | Tecnologia Blockchain em profundidade (4): Consenso Pow Explicação aprofundada do tempo Blockchain-Geek:aviso legal:

  1. este artigo é reproduzido a partir de[Gate.io aprenderEquipe, e eles vão lidar com isso prontamente.
  2. Isenção de responsabilidade: Os pontos de vista e opiniões expressos neste artigo são exclusivamente do autor e não constituem qualquer conselho de investimento.
  3. as traduções do artigo para outros idiomas 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

iniciantesJul 15, 2024
Este artigo fornece uma introdução detalhada ao processo de "mineração" em blockchain. Ao fazer 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 nova moeda.
Desvendando o Mistério da Mineração

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

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

um rápido resumo do conteúdo de 'blockchain simples 1: introdução ao bitcoin (o pioneiro da revolução blockchain e o desafiante da moeda soberana)', onde satoshi nakamoto projetou o sistema monetário do bitcoin para vincular as recompensas para a contabilidade com a emissão de moeda. essa abordagem permite que a emissão de moeda seja automatizada por meio do processo de contabilidade, resolvendo o problema da emissão de moeda e incentivando os contadores a participarem ativamente.

1. o que é mineração?

no mundo real, a mineração envolve mineiros usando várias ferramentas para escavar metais preciosos escondidos em rochas de minas. os mineiros extraem valor desses metais raros escondidos na natureza através do trabalho físico.

para projetos de blockchain com recompensas para a contabilidade (geralmente projetos de moeda digital), os nós de rede despendem recursos computacionais para resolver problemas. Uma vez que eles encontram a solução, eles empacotam o bloco e recebem uma recompensa na forma de uma moeda recém-emitida. Esse processo é análogo à extração de metais preciosos como o ouro do minério, por isso é comumente chamado de “mineração”. Aqui, os contadores são os mineradores, 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 serve para dois propósitos principais: validar transações recentes, agrupando-as em blocos e vinculando-as à blockchain, e emitir nova moeda recompensando os guardiões do livro. Abaixo estão as funções detalhadas da mineração:

  1. seleção de contadores: é necessário uma estratégia para selecionar os contadores reais entre numerosos candidatos. O resultado da mineração é usado como base para essa seleção, garantindo que todas as transações sejam reconhecidas por todos os participantes e alcançando consenso em toda a rede.
  2. verificação de 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 o 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.
    • verificando se a quantia de entrada excede a quantia de saída (com parte da quantia sendo tomada como taxa), garantindo que os tokens usados para o pagamento não tenham sido gastos duas vezes.
    • confirmar que a transação não foi incluída anteriormente em um bloco.
  3. emissão de nova moeda: a mineração também é a forma como novos bitcoins entram em circulação. quando um minerador minera com sucesso um novo bloco, eles recebem 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 de 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 seu desenvolvimento contínuo e robusto.
  5. aumentar a segurança e descentralização da rede: 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. Adotar o princípio da cadeia mais longa melhora ainda mais a segurança do sistema.

3. por que os mineradores estão dispostos a participar da mineração?

os mineradores são incentivados a participar da mineração porque recebem recompensas substanciais por empacotar com sucesso um bloco na blockchain. Essas recompensas vêm de duas fontes principais:

  • recompensas em bloco (nova moeda emitida): o sistema de moeda emite automaticamente nova moeda, que vai inteiramente para o minerador. Por exemplo, no sistema do Bitcoin, atualmente, os mineradores recebem 3,125 bitcoins para cada bloco que eles processam. Considerando que cada bitcoin vale cerca de US$65.000, processar um único bloco pode render mais de US$200.000, aproximadamente 1,47 milhão de RMB.
  • taxas de transação pagas pelos usuários: devido à capacidade limitada de um bloco para armazenar registros de transações, alguns usuários pagam taxas de transação para incentivar os mineradores a priorizarem suas transações para uma confirmação mais rápida. ao selecionar transações do pool a serem incluídas no bloco, os mineradores tendem a escolher aquelas com taxas mais altas. um bloco pode conter milhares de transações, e todas as taxas dessas transações vão para o minerador, representando outra fonte significativa de renda. à medida que mais pessoas usam bitcoin para transações, a competição pela inclusão em blocos se intensifica, levando a taxas mais altas que os usuários estão dispostos a pagar.

Com o tempo, as recompensas de bloco diminuirão (por exemplo, devido ao mecanismo de halving do Bitcoin, onde a recompensa é reduzida pela metade aproximadamente a cada quatro anos). Eventualmente, após todos os 21 milhões de bitcoins terem sido minerados, esperados em torno do ano de 2141, a recompensa automática de 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 redução pela metade a cada quatro anos e, até o momento, houve quatro desses eventos de redução. Atualmente, cada bloco gera 3,125 bitcoins, sendo que a redução mais recente ocorreu em abril de 2024. A próxima redução é esperada para cerca de 2028. Por volta de 2141, o bitcoin alcançará 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 ocupado pela transação no bloco.

4. como participar na mineração

para os mineradores, participar da mineração é simples. baixe 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 de bloco, o algoritmo de mineração é tipicamente escrito em um script integrado à carteira. os mineradores apenas precisam clicar em um botão para iniciar o script.

o algoritmo de mineração é determinístico, o que significa que, desde que os mineradores executem continuamente o algoritmo, eles eventualmente obterão um resultado. No entanto, devido aos recursos computacionais variáveis, o tempo necessário para calcular esse resultado pode ser diferente entre os mineradores. Uma vez que um nó calcula o valor-alvo, os esforços de outros mineradores durante esse período são inúteis, resultando em retornos negativos devido aos recursos físicos gastos.

para evitar esforço desperdiçado, os mineradores frequentemente agrupam seus recursos computacionais ao se juntarem a um nó de pool de mineração. Este nó funciona como qualquer outro nó, mas possui significativamente mais poder computacional. Quando o pool minera com sucesso um bloco, as recompensas são distribuídas entre os mineradores participantes com base em seus recursos computacionais contribuídos. É importante observar que, na blockchain, o minerador registrado como empacotador do bloco é o nó do pool de mineração, enquanto os mineradores individuais recebem sua parcela das recompensas alocadas pelo pool, não diretamente do sistema de moedas.

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

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

diferentes projetos de blockchain podem ter quebra-cabeças de mineração variados e níveis de dificuldade. aqui, usamos 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 despendida para prová-lo.

o quebra-cabeça 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 do bloco e processado por meio de uma função hash, deve produzir um valor hash que atenda a uma condição específica. Tipicamente, essa condição requer que o valor hash seja menor que um valor alvo (ou, equivalente, que os primeiros n bits do valor hash sejam zero). A equação é a seguinte: hash(nonce+block_data)≤target\text{hash}(\text{nonce} + \text{block_data}) \leq \text{target}hash(nonce+block_data)≤target

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 alteração contínua do nonce e o hash dos dados do cabeçalho do bloco usando sha-256 até encontrar um valor de hash que atenda à condição alvo.

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

convertendo isto para 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 com o poder computacional humano atual, excluindo computadores quânticos, é virtualmente 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 a tentativa contínua de diferentes nonces até que a condição seja atendida. Essa necessidade de equipamentos de computação de alto desempenho é o motivo pelo qual a mineração requer tais dispositivos.

como você não pode prever o valor hash gerado pela adição do nonce aos dados do bloco e passando-o pelo sha-256, o processo é totalmente aleatório. por exemplo, se o valor hash alvo é 10.000, você não tem como saber qual nonce combinado com os dados do bloco resultará em um valor hash menor que 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 múltiplos valores atenderem à condição, o menor valor hash é escolhido, uma vez que um valor 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 seguinte código 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 hashlib
def 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"):  # primeiros 4 dígitos hexadecimais são 0, equivalente aos primeiros 16 bits sendo 0
            print("hash:", pow_hash)
            print("nonce:", nonce, "tempo de varredura:", count)
            break
        nonce += 1

if __name__ == '__main__':
    main()

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 é de aproximadamente 58.000. se o requisito for aumentado para os primeiros 5 dígitos sendo 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"): # Os primeiros 4 dígitos hexadecimais são 0, o que equivale aos primeiros 16 bits sendo 0    print pow_hash    print "nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png"  número de verificações: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count)    break    nonce = nonce + 1

senome == ‘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 de bitcoin ajusta a dificuldade de mineração alterando o número de zeros iniciais necessários no valor do hash. esse mecanismo de ajuste de dificuldade é uma parte crucial do sistema de 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 iniciais (diminuindo o valor alvo). por outro lado, se levar mais do que duas semanas, a dificuldade diminui reduzindo o número de zeros iniciais (aumentando o valor alvo). esse mecanismo garante que o tempo para gerar um bloco permaneça em torno de 10 minutos, mesmo quando a taxa total de hash da rede flutua.

Esse 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 prejudicar 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: escolha várias transações da mempool (geralmente priorizando aquelas com taxas mais altas). gerar automaticamente uma transação especial (frequentemente chamada de transação de coinbase) onde o destinatário é o minerador, e o valor da transação é a recompensa do bloco mais todas as taxas de transação selecionadas. coloque esta transação especial no início das transações selecionadas para formar o conjunto de transações para o bloco a ser embalado.
  2. construindo a árvore de merkle: construa uma árvore de hash de merkle a partir do conjunto de transações. uma árvore de merkle é uma árvore binária onde cada nó folha armazena o hash de uma transação, identificando e indexando de forma única. cada nó superior armazena o hash combinado de seus nós filhos, culminando no nó raiz. o nó raiz identifica de forma única a árvore de 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, a versão do bloco, o hash do bloco anterior, o carimbo de data/hora, o alvo de dificuldade e o nonce. O tamanho do cabeçalho do bloco é de 80 bytes.
  4. hashing do cabeçalho do bloco: mude continuamente o valor de nonce no cabeçalho do bloco e execute um hash sha-256 duplo no conteúdo do cabeçalho do bloco (ou seja, sha256 (sha256 (block_header))). Compare o hash resultante com o valor alvo atual da rede. Se o resultado for menor do 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 os nós vizinhos, informando-os de 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 se 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 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 de Merkle é a seguinte:

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

9. controvérsias na mineração

a principal polêmica em torno da mineração envolve os algoritmos de prova de trabalho (PoW) usados pelo bitcoin e seus derivados. Esses algoritmos exigem que os mineradores alocem recursos computacionais substanciais para resolver problemas acordados pela rede. 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, não produzindo valor adicional.

existem duas vias principais para otimizar esse desperdício de recursos:

  1. mudar para algoritmos menos intensivos em recursos: o ethereum, por exemplo, transicionou do algoritmo pow para o algoritmo de prova de participação (pos), o que reduz significativamente o desperdício de recursos.
  2. usando recursos elétricos ociosos: nós de mineração estão experimentando o uso de fontes de energia renováveis, como energia eólica, para operações de mineração. outro desenvolvimento significativo é a utilização do gás natural que seria 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.

Revisitando a seção "Por que a mineração é necessária?" deste artigo, o significado direto da mineração é que ela suporta a emissão de moedas digitais. As recompensas de mineração incentivam mais pessoas a participar da manutenção das moedas digitais, tornando-as mais estáveis. Além disso, os algoritmos de mineração mantêm a consistência das transações dentro dos 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 sem confiança, onde as 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.

os retornos da mineração diminuirão a ponto de ficarem 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 uma receita significativa com taxas de transação. À medida que as moedas digitais ganham uma aceitação mais ampla, o mercado de transações de moedas digitais se expandirá. Esse aumento no volume de transações intensificará a competição 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 de bloco diminuem ao longo do tempo, as taxas de transação se tornam uma fonte crucial de renda para os mineradores. isso garante que, mesmo que os custos com eletricidade sejam altos, os mineradores 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?

vários mineradores dividem as recompensas de mineração se eles transmitirem simultaneamente seus novos blocos?

não, se vários mineradores resolverem o quebra-cabeça e transmitirem seus novos blocos ao mesmo tempo, isso cria um fork temporário na blockchain. é assim que 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. resolvendo 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 prova de trabalho mais acumulada). O minerador cujo bloco termina 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 na 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 ele é anexado à 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% de poder de hash não trapaceiam?

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

Um ataque de 51% ocorre quando uma única entidade ou grupo controla mais de 50% do poder computacional da rede. Veja por que os super nós não costumam trapacear:

  1. impossibilidade prática: possuir 51% do poder de hash da 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 gasto duplo são rejeitadas pela rede, tornando os esforços do super nó inú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:
    • double spend: tentativa de gastar as mesmas moedas duas vezes.
    • bloqueio de transações: impedindo que certas 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 carimbos de data/hora de bloco para obter uma vantagem de mineração.
    • Ataque de bloco vazio: blocos de mineração sem transações para tornar a rede mais lenta.

por que o blockchain assume nenhum livro-razão fixo para evitar transações fraudulentas

como o blockchain evita 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 verificarão as transações dentro do bloco. se encontrarem quaisquer transações inválidas, eles rejeitarão o bloco e não o propagarão mais.
  2. mecanismo de consenso: o mecanismo de consenso do bitcoin depende do 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, excluir uma transação), eles devem modificar todos os blocos subsequentes ligados ao bloco adulterado e garantir que a cadeia modificada seja mais longa do que a cadeia principal atual. isso requer enormes recursos computacionais, tornando-o praticamente impossível.

prevenindo distribuição inconsistente de blocos pelos mineradores

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

o que é uma pool de transações (mempool)?

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

estratégia de seleção de transações: os mineradores podem escolher transações do mempool com base em sua estratégia. geralmente, eles dão prioridade a 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 do sistema bitcoin são os mineradores, desenvolvedores e operadores de nós.

  1. Mineradores: Ganhe recompensas e taxas de transação por meio da mineração.
  2. desenvolvedores e operadores de nós: geralmente não ganham diretamente do sistema bitcoin. suas contribuições muitas vezes são idealistas, visando manter a integridade do sistema. eles podem receber renda por outros meios, como doações e patrocínios. sua participação na mineração depende das 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 tem levado a uma escassez de oferta, causando aumento nos preços.

mineração de GPUs: as GPUs de mineração são aquelas usadas anteriormente para mineração de criptomoedas. Essas GPUs passam por intensas computações, resultando em desgaste significativo. Devido ao seu desempenho diminuído, a maioria das pessoas prefere não comprar GPUs usadas para mineração.

os mineradores precisam armazenar todos os dados do razão?

Requisito de armazenamento redundante completo: Sim, os mineradores precisam armazenar todo o livro-razão blockchain para verificar se um token foi gasto anteriormente e para garantir a segurança e a integridade do livro-razão. No entanto, para blocos muito iniciais, os mineradores só precisam armazenar os cabeçalhos de bloco, 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 atinja seu limite de 21 milhões, o sistema não emitirá mais bitcoins como recompensa 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 poderá enfrentar desafios operacionais. No entanto, é provável que os usuários estejam dispostos a pagar taxas de transação para que suas transações sejam processadas, garantindo a continuidade 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 enquanto os mineradores estiverem dispostos a minerar e a agrupar transações em novos blocos. A altura do bloco não é limitada pelo limite de fornecimento de bitcoins.

Potencial para mudanças de consenso: A comunidade poderia propor mudanças nas regras de consenso, como aumentar a oferta total de Bitcoin, para permitir a geração de novas moedas, se necessário.

Como os mineiros são recompensados?

transação coinbase: no blockchain do bitcoin, as recompensas dos mineradores são distribuídas por meio de uma transação especial conhecida como 'transação coinbase' ou 'recompensa de bloco.' esta 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 de coinbase não tem entrada (não tem remetente). ela gera novos bitcoins que são recompensados ao minerador.
  3. Saídas: 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 minerar 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 conjunto de mineração mineram com sucesso um bloco e ele é confirmado pela rede, eles recebem a recompensa do bloco e as taxas de transação. Isso é executado por meio 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 após o bloco anterior ter sido minerado com sucesso e adicionado à cadeia.

Transações de embalagem

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 empacotar as transações individualmente.

utilização do espaço de bloco

blocos parcialmente preenchidos: a maioria dos blocos não é completamente utilizada. Os mineradores 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: blocos podem ser minerados mesmo se não houver transações para incluir. esses blocos, chamados de blocos vazios, ainda fornecem uma recompensa ao minerador.

Manipulando forks Blockchain

regra da cadeia mais longa: quando ocorre um fork, a rede segue a cadeia com a maior quantidade acumulada de provas de trabalho, que geralmente é a cadeia mais longa. Os nós mudam para a cadeia mais longa assim que fica evidente qual delas tem mais trabalho investido.

evitando gastos duplos

resolução de gastos duplos:

  • 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, aquela no bloco que for confirmado primeiro é considerada válida.

manipulação detalhada de gastos duplos

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 confirmada primeiro será considerada válida. O bloco que contém a transação conflitante 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 normalmente escolhe com base na taxa de transação (taxa mais alta recebe preferência) ou na idade da transação (transação anterior recebe 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−mudança

Os usuários definem a taxa de transação ajustando o valor de entrada, o valor de saída e o valor de alteração.

o processo de mineração de moeda digital

  1. preparar equipamentos de mineração: configurar hardware de mineração ou dispositivos de computação de alto desempenho.
  2. garanta acesso à internet: conecte o equipamento de mineração à internet.
  3. Baixar carteira digital: Obtenha uma carteira digital e gere suas chaves privadas e públicas.
  4. Iniciar mineração: clique no botão Mineração na carteira para começar a mineração.

mineração em uma piscina

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 no poder computacional contribuído por eles. Essa distribuição é executada por meio de transferências para as carteiras dos mineradores.

o que é mineração egoísta?

mineração egoísta: a mineração egoísta é uma estratégia onde um minerador (ou grupo de mineração) encontra um novo bloco, mas não o transmite imediatamente. Em vez disso, eles continuam minerando em privado em sua cadeia (cadeia oculta). Uma vez que encontram blocos adicionais, eles os transmitem todos de uma vez. Isso pode invalidar o trabalho de outros mineradores e inclinar o poder computacional e as recompensas para o minerador egoísta. O bitcoin pode mitigar o impacto da mineração egoísta melhorando o protocolo de transmissão.

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

validação da 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 de transação: verificar a correção da estrutura de dados da transação.
  2. Assinatura da transação: valide a autenticidade da assinatura da transação.
  3. double-spending: garantir que a entrada não tenha sido gasta anteriormente na mempool ou na blockchain.
  4. entradas e saídas: confirme que o valor total de entrada é maior ou igual ao valor total de saída.
  5. scripts de transação: executar e verificar scripts (principalmente em contratos inteligentes).
  6. locktime: verificar se a condição de locktime (altura do bloco ou tempo) é satisfeita.
  7. tamanho da transação e taxas: certifique-se de que o tamanho da transação e a taxa sejam adequados.

validação de bloco: quando um nó minerador recebe um novo bloco, ele realiza verificações extensivas no bloco e em suas transações:

  1. validade da transação: validar 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: certifique-se de que o tamanho do bloco esteja dentro dos limites permitidos.
    • recompensa do bloco: verifique 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.
    • Carimbo de data/hora: confirme se o carimbo de data/hora do bloco está dentro de um intervalo razoável.
    • alvo de dificuldade: verifique se o bloco atende ao alvo de dificuldade atual.

11. Referências

[1] Conferência 12 | Tecnologia Blockchain em profundidade (4): Consenso Pow Explicação aprofundada do tempo Blockchain-Geek:aviso legal:

  1. este artigo é reproduzido a partir de[Gate.io aprenderEquipe, e eles vão lidar com isso prontamente.
  2. Isenção de responsabilidade: Os pontos de vista e opiniões expressos neste artigo são exclusivamente do autor e não constituem qualquer conselho de investimento.
  3. as traduções do artigo para outros idiomas são feitas pela equipe de aprendizado da Gate.io. A menos que mencionado, copiar, distribuir ou plagiar os artigos traduzidos é proibido.
Comece agora
Inscreva-se e ganhe um cupom de
$100
!