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.
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.
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:
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:
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.
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.
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.
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:
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.
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.
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.
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:
o tamanho de cada campo no cabeçalho do bloco é o seguinte:
https://time.geekbang.org/column/article/5963
a estrutura da árvore de Merkle é a seguinte:
大后端私房菜]. alt="">
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:
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.
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.
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:
exemplo:
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:
como o blockchain evita interrupções intencionais e transações fraudulentas?
prevenindo distribuição inconsistente de blocos pelos mineradores
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).
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.
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.
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.
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.
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:
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.
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.
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.
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.
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.
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.
resolução de gastos duplos:
processo de validação:
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.
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.
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 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:
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] Conferência 12 | Tecnologia Blockchain em profundidade (4): Consenso Pow Explicação aprofundada do tempo Blockchain-Geek:aviso legal:
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.
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.
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:
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:
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.
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.
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.
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:
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.
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.
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.
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:
o tamanho de cada campo no cabeçalho do bloco é o seguinte:
https://time.geekbang.org/column/article/5963
a estrutura da árvore de Merkle é a seguinte:
大后端私房菜]. alt="">
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:
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.
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.
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:
exemplo:
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:
como o blockchain evita interrupções intencionais e transações fraudulentas?
prevenindo distribuição inconsistente de blocos pelos mineradores
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).
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.
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.
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.
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.
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:
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.
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.
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.
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.
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.
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.
resolução de gastos duplos:
processo de validação:
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.
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.
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 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:
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] Conferência 12 | Tecnologia Blockchain em profundidade (4): Consenso Pow Explicação aprofundada do tempo Blockchain-Geek:aviso legal: