encaminhar o título original '白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?'
um dos conceitos mais familiares relacionados à blockchain para todos é provavelmente a mineração. muitas pessoas podem ter ouvido falar sobre mineração várias vezes, mas não têm certeza do que isso realmente envolve. nesta seção, interromperemos nossa programação regular para primeiro introduzir a “mineração”.
um breve resumo do conteúdo de 'plain blockchain 1: introdução ao bitcoin (o pioneiro da revolução blockchain e o desafiador da moeda soberana)', onde satoshi nakamoto projetou o sistema monetário do bitcoin para vincular as recompensas contábeis com a emissão de moeda. essa abordagem permite que a emissão de moeda seja automatizada por meio do processo contábil, solucionando o problema da emissão de moeda e incentivando os contadores a participar ativamente.
No mundo real, a mineração envolve mineiros que usam várias ferramentas para escavar metais preciosos escondidos em rochas de minas. Os mineiros extraem valor desses metais raros escondidos na natureza por meio de trabalho físico.
para projetos de blockchain com recompensas para contabilidade (geralmente projetos de moeda digital), os nós de rede gastam recursos computacionais para resolver problemas. uma vez que encontram a solução, empacotam o bloco e recebem uma recompensa na forma de moeda recém-emitida. este processo é análogo à extração de metais preciosos como ouro do minério, daí ser comumente referido como “mineração”. aqui, os contadores são os mineiros, que competem para empacotar blocos usando hardware e eletricidade, resultando na criação de nova moeda.
A mineração tem dois objetivos principais: validar transações recentes, embalando-as em blocos e ligando-as à blockchain, e emitir nova moeda, recompensando os responsáveis pelo registro. Abaixo estão as funções detalhadas da mineração:
Os mineradores são incentivados a participar da mineração porque recebem recompensas substanciais por empacotarem com sucesso um bloco no blockchain. Estas recompensas provêm de duas fontes principais:
com o tempo, as recompensas em bloco diminuirão (por exemplo, devido ao mecanismo de halving do bitcoin, onde a recompensa é reduzida pela metade aproximadamente a cada quatro anos). eventualmente, depois que todos os 21 milhões de bitcoins forem minerados, esperados por volta do ano 2141, a recompensa automática em bloco deixará de existir e as taxas de transação se tornarão a principal fonte de renda para os mineradores.
O bitcoin gera um novo bloco aproximadamente a cada 10 minutos. Inicialmente, cada novo bloco produzia 50 bitcoins. Essa recompensa sofre metade a cada quatro anos e, até o momento, houve quatro eventos de metade. Atualmente, cada bloco gera 3,125 bitcoins, com a mais recente metade ocorrendo em abril de 2024. A próxima metade é prevista para cerca de 2028. Por volta de 2141, o bitcoin atingirá seu limite de emissão.
a taxa de transação é influenciada não apenas pela oferta e demanda, mas também pelo tamanho da transação, pois as taxas são proporcionais ao espaço que a transação ocupa no bloco.
para os mineiros, participar na mineração é simples. descarregue um cliente de carteira de moeda digital e, dentro do cliente, clique no botão de mineração para começar a minerar.
para projetos de blockchain com recompensas em blocos, o algoritmo de mineração é normalmente inserido em um script integrado na carteira. os mineradores só precisam clicar em um botão para iniciar o script.
o algoritmo de mineração é determinístico, o que significa que, desde que os mineiros executem continuamente o algoritmo, eventualmente obterão um resultado. no entanto, devido aos recursos computacionais variados, o tempo necessário para calcular este resultado pode diferir entre os mineiros. uma vez que um nó calcula o valor alvo, os esforços de outros mineiros durante esse período tornam-se fúteis, resultando em retornos negativos devido aos recursos físicos gastos.
Para evitar esforço desperdiçado, os mineiros frequentemente agrupam seus recursos computacionais ao se juntarem a um nó de pool de mineração. Este nó opera como qualquer outro nó, mas tem significativamente mais poder computacional. Quando o pool consegue minerar um bloco, as recompensas são distribuídas entre os mineiros participantes com base em seus recursos computacionais contribuídos. É importante notar que na blockchain, o mineiro registrado como empacotando o bloco é o nó do pool de mineração, enquanto os mineiros individuais recebem sua parte das recompensas alocadas pelo pool, e não diretamente do sistema monetário.
bitmain, uma empresa que fabrica chips de mineração especializados de alta eficiência, solidificou o papel das piscinas de mineração, contribuindo para a centralização do poder de contabilidade.
Projetos de blockchain diferentes podem ter quebra-cabeças de mineração variados e níveis de dificuldade. Aqui, tomamos o Bitcoin como exemplo. O algoritmo de mineração usado pelo Bitcoin é chamado de Prova de Trabalho (PoW). A essência desse algoritmo é que para obter um resultado, uma certa quantidade de trabalho deve ser gasta para prová-lo.
O puzzle de mineração não é um problema matemático tradicional, mas envolve encontrar um número aleatório, conhecido como nonce. Este nonce, quando combinado com os dados no bloco e processado através de uma função de hash, deve produzir um valor de hash que satisfaça uma condição específica. Normalmente, essa condição requer que o valor de hash seja inferior a um valor alvo (ou, de forma equivalente, que os primeiros n bits do valor de hash sejam zero). A equação é a seguinte: hash(nonce+dados_do_bloco)≤alvo\text{hash}(\text{nonce} + \text{dados_do_bloco}) \leq \text{alvo}hash(nonce+dados_do_bloco)≤alvo
o bitcoin usa a função de hash sha-256, que converte qualquer comprimento de entrada em uma saída de comprimento fixo de 256 bits (equivalente a 64 dígitos hexadecimais ou 32 bytes). a saída é quase aleatória, mas garantida de ser a mesma para a mesma entrada. a mineração envolve a mudança contínua do nonce e o hash dos dados do cabeçalho do bloco usando sha-256 até que um valor de hash que atenda à condição alvo seja encontrado.
por exemplo, um valor de hash sha-256 com os primeiros 30 bits sendo zeros: 000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110
a conversão disso em hexadecimal resulta em um valor começando com sete zeros: 00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90
para simplificar, a probabilidade de encontrar um hash com os primeiros n bits sendo zero é 12n\frac{1}{2^n}2n1. quanto maior o n, mais bits são zero e menor a probabilidade:
com n até 256, encontrar um valor de hash assim com a atual capacidade computacional humana, excluindo computadores quânticos, é praticamente impossível antes que a Terra deixe de existir.
devido às propriedades do sha-256, o único método é a força bruta, que envolve continuamente tentar diferentes nonces até que a condição seja atendida. essa necessidade de equipamentos de computação de alta performance é por isso que a mineração requer tais dispositivos.
uma vez que não é possível prever o valor de hash gerado ao adicionar o nonce aos dados do bloco e passá-lo pelo sha-256, o processo é totalmente aleatório. por exemplo, se o valor de hash de destino for 10.000, você não tem como saber qual nonce combinado com os dados do bloco produzirá um valor de hash inferior a 10.000. essa natureza imprevisível e aleatória significa que os mineradores devem continuar enumerando possibilidades até que a condição seja satisfeita. se vários valores atenderem à condição, o menor valor de hash é escolhido, uma vez que um valor de hash menor indica maior dificuldade e menor probabilidade de ocorrência.
verificar se um valor de hash gerado atende ao requisito é fácil, exigindo apenas uma operação de comparação. no entanto, encontrar um valor de hash menor ou igual ao valor de destino só pode ser alcançado por meio de enumeração de força bruta. essa característica, em que verificar um resultado é fácil, mas encontrar o resultado é difícil, é conhecida como assimetria computacional.
o código a seguir simula o processo de mineração. ele começa com uma string de dados do cabeçalho do bloco "geekbang" e busca incrementalmente a partir de um valor de nonce de 10.000 até encontrar um nonce que atenda à condição especificada.
aqui está um script python que demonstra o processo de mineração:
import hashlibdef main(): base_string = "geekbang" nonce = 10000 count = 0 while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string.encode()).hexdigest() count += 1 if pow_hash.startswith("0000"): # os primeiros 4 dígitos hexadecimais são 0, equivalentes aos primeiros 16 bits sendo 0 print("hash:", pow_hash) print("nonce:", nonce, "scan times:", count) break nonce += 1if __name__ == '__main__': principal()
quando o requisito é que os primeiros 4 dígitos hexadecimais do resultado do hash sejam zero (equivalente aos primeiros 16 bits sendo zero), o número de cálculos é aproximadamente 58.000. se o requisito for aumentado para os primeiros 5 dígitos serem zero, o número de cálculos aumenta para 1,23 milhão. quando o requisito é que os primeiros 7 dígitos sejam zero, o número de cálculos chega a 160 milhões. isso ilustra que cada zero adicional no prefixo do hash aumenta o cálculo aproximadamente 16 vezes.
aqui estão os resultados para diferentes condições-alvo:
os primeiros 4 dígitos hexadecimais são zero (16 bits):
import hashlib
def main():
base_string = "geekbang"nonce = 10000count = 0while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string).hexdigest() count = count + 1 if pow_hash.startswith("0000"): # 前4个16进制位是0,相当于前16个比特位是0 print pow_hash print "nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png" scan times: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count) break nonce = nonce + 1
se nome == ‘principal‘:
main()
como visto, aumentar o número de zeros principais necessários no hash aumenta significativamente o número de tentativas necessárias, seguindo um padrão de crescimento exponencial. isso demonstra a dificuldade computacional e os recursos necessários para a mineração, destacando a necessidade de dispositivos de computação de alto desempenho no processo de mineração.
para garantir que um bloco seja gerado aproximadamente a cada 10 minutos, o sistema bitcoin ajusta a dificuldade de mineração alterando o número de zeros principais necessários no valor hash. esse mecanismo de ajuste de dificuldade é uma parte crucial do sistema bitcoin. ele avalia o tempo necessário para gerar os últimos 2016 blocos, que idealmente deveriam ser cerca de duas semanas. se esses blocos forem minerados em menos de duas semanas, a dificuldade aumenta adicionando mais zeros principais (diminuindo o valor alvo). inversamente, se levar mais do que duas semanas, a dificuldade diminui reduzindo o número de zeros principais (aumentando o valor alvo). esse mecanismo garante que o tempo para gerar um bloco permaneça em cerca de 10 minutos, mesmo quando a taxa total de hash da rede flutua.
Este mecanismo de ajuste de dificuldade, projetado pelo criador do bitcoin, Satoshi Nakamoto, foi planejado desde o início para se adaptar automaticamente ao poder computacional total da rede. Ele mantém um ritmo constante de mineração e impede que a moeda seja emitida muito rapidamente, o que poderia perturbar a economia de mercado.
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 Merkle é a seguinte:
大后端私房菜]. alt="">
a principal controvérsia em torno da mineração envolve os algoritmos de prova de trabalho (PoW) usados pelo bitcoin e seus derivados. Esses algoritmos requerem que os mineradores alocem recursos computacionais substanciais para resolver problemas com os quais a rede concorda. Muitas pessoas estão trabalhando nessas computações simultaneamente, mas apenas o primeiro a resolver o problema recebe a recompensa. Os recursos computacionais e elétricos dos outros participantes são efetivamente desperdiçados, sem produzir valor adicional.
Existem duas formas principais de otimizar esse desperdício de recursos:
qual é o valor da mineração? parece ser um desperdício de recursos e sem sentido para a sociedade.
Ao revisitar a secção "por que é necessária a mineração?" deste artigo, a importância direta da mineração é que ela suporta a emissão de moedas digitais. As recompensas de mineração incentivam mais pessoas a participar na manutenção de moedas digitais, tornando-as mais estáveis. Além disso, os algoritmos de mineração mantêm a consistência das transações nos sistemas de moedas digitais, tornando-os mais robustos e menos suscetíveis a ataques internos e externos.
O significado indireto da mineração é derivado das próprias moedas digitais. As moedas digitais criam um sistema monetário global e confiável, onde transações seguras podem ocorrer sem a necessidade de instituições centralizadas, evitando as desvantagens da centralização. Sua natureza global também permite transações transfronteiriças eficientes e de baixo custo.
o retorno da mineração diminuirá a ponto de cair abaixo dos custos, fazendo com que os mineradores parem de minerar e as transações cessem?
É uma preocupação comum que os retornos da mineração dependam exclusivamente das recompensas do sistema, que diminuem ao longo do tempo. No entanto, a mineração também gera receitas significativas com taxas de transação. À medida que as moedas digitais ganham uma aceitação mais ampla, o mercado de transações de moeda digital irá expandir. Este aumento do volume de transações intensificará a concorrência pela inclusão de blocos, levando a taxas mais altas que os usuários estão dispostos a pagar para priorizar suas transações. Consequentemente, os mineradores podem continuar a ganhar taxas de transação substanciais, garantindo a viabilidade contínua do processamento de transações.
as taxas de transação compensarão os custos de mineração?
sim, as taxas de transação podem ajudar a compensar os custos da mineração. à medida que as recompensas em bloco diminuem ao longo do tempo, as taxas de transação tornam-se uma fonte crucial de renda para os mineiros. isso garante que, mesmo que os custos de eletricidade sejam elevados, os mineiros ainda possam sustentar suas operações por meio das taxas pagas pelos usuários para processamento de transações.
os mineiros múltiplos dividem as recompensas de mineração se eles transmitirem simultaneamente seus novos blocos?
não, se vários mineiros resolverem o quebra-cabeça e transmitirem seus novos blocos ao mesmo tempo, isso cria um fork temporário na blockchain. aqui está como funciona:
exemplo:
o que é um ataque de 51% e por que é que os super nós não fazem batota?
um ataque de 51% ocorre quando uma única entidade ou grupo controla mais de 50% do poder computacional da rede. aqui está o motivo pelo qual os super nodos geralmente não trapaceiam:
como é que a blockchain previne interrupções intencionais e transações fraudulentas?
prevenir a distribuição inconsistente de blocos pelos mineradores
definição e função: numa rede blockchain, todas as transações transmitidas que ainda não foram incluídas num bloco são armazenadas temporariamente na mempool (piscina de memória) dos nós da rede. os mineradores monitorizam a sua mempool para selecionar transações para a construção de novos blocos.
estratégia de seleção de transação: os mineradores podem escolher transações do mempool com base em sua estratégia. Geralmente, eles dão prioridade às transações com taxas mais altas, mas alguns também podem considerar outros fatores, como a idade da transação (o tempo que ela passou no mempool).
quem participa e como eles ganham: além dos usuários, os três principais participantes no sistema bitcoin são os mineradores, desenvolvedores e operadores de nós.
aumento nos preços das GPUs: a alta demanda por GPUs pelos mineradores para fins de mineração levou a uma escassez de oferta, fazendo com que os preços aumentassem.
gpus de mineração: gpus de mineração são aquelas anteriormente usadas para mineração de criptomoedas. essas gpus passam por intensa computação, resultando em desgaste significativo. devido ao seu desempenho reduzido, a maioria das pessoas prefere não comprar gpus de mineração usadas.
requisito de armazenamento totalmente redundante: sim, os mineradores precisam armazenar todo o registro do blockchain para verificar se um token foi gasto anteriormente e garantir a segurança e integridade do registro. No entanto, para blocos muito antigos, os mineradores só precisam armazenar os cabeçalhos dos blocos, não o conteúdo completo do bloco. Isso ajuda a manter a eficiência do blockchain, preservando sua segurança.
sem recompensas automáticas além de 21 milhões de bitcoins: uma vez que o fornecimento total de bitcoin atingir seu limite de 21 milhões, o sistema não emitirá mais novos bitcoins como recompensas para os mineradores. Se os usuários também não estiverem dispostos a pagar taxas de transação, teoricamente, o sistema de transação pode enfrentar desafios operacionais. No entanto, é provável que os usuários estejam dispostos a pagar taxas de transação para terem suas transações processadas, garantindo a continuação do sistema.
a altura do bloco continuará a aumentar: mesmo após atingir o fornecimento máximo de 21 milhões de bitcoins, a altura do bloco (o número total de blocos) continuará a aumentar desde que os mineradores estejam dispostos a minerar e empacotar transações em novos blocos. A altura do bloco não é limitada pelo limite de fornecimento de bitcoin.
potencial para alterações de consenso: a comunidade pode propor alterações nas regras de consenso, como aumentar o fornecimento total de bitcoin, para permitir a geração de novas moedas, se necessário.
transação de coinbase: na blockchain do bitcoin, as recompensas dos mineradores são distribuídas através de uma transação especial conhecida como "transação de coinbase" ou "recompensa do bloco". Essa transação possui características únicas:
cálculo de receita por bloco: a receita do minerador é calculada cada vez que um bloco é minerado com sucesso e confirmado pelo mecanismo de consenso da rede. O minerador (ou pool de mineração) que minera o bloco recebe a recompensa do bloco e as taxas de transação acumuladas de todas as transações incluídas no bloco.
Processo de recebimento de recompensas: Uma vez que um minerador ou pool de mineração minera com sucesso um bloco e isso é confirmado pela rede, eles recebem a recompensa do bloco e as taxas de transação. Isso é executado através da transação Coinbase, que converte as taxas e recompensas em saídas de transação não gastas (UTXOs) creditadas na conta do minerador.
criação sequencial: os blocos são criados sequencialmente na blockchain. um novo bloco só pode ser criado depois que o bloco anterior foi minerado com sucesso e adicionado à cadeia.
múltiplas transações por bloco: os blocos geralmente contêm múltiplas transações. os mineradores incluem o máximo de transações possível para maximizar seus ganhos com taxas de transação, em vez de agrupar as transações individualmente.
blocos parcialmente preenchidos: a maioria dos blocos não está totalmente utilizada. os mineiros começam a trabalhar no próximo bloco assim que encontram um hash válido que atenda ao requisito de dificuldade, independentemente de o bloco estar completamente cheio.
blocos vazios: os blocos podem ser minerados mesmo que não haja transações para incluir. Esses blocos, chamados de blocos vazios, ainda fornecem uma recompensa ao minerador.
regra da corrente mais longa: quando ocorre um fork, a rede segue a corrente com a maior prova de trabalho acumulada, que geralmente é a corrente mais longa. os nós mudam para a corrente mais longa uma vez que se torna evidente qual delas tem mais trabalho investido.
resolução de gasto duplo:
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−variação
os utilizadores definem a taxa de transação ajustando o montante de entrada, o montante de saída e o montante de troco.
Distribuição de ganhos: Ao minerar em um pool, o nó do pool recebe a recompensa do bloco. O pool então distribui os ganhos para seus membros com base em seu poder computacional contribuído. Esta distribuição é executada através de transferências para as carteiras dos mineiros.
mineração egoísta: a mineração egoísta é uma estratégia em que um mineiro (ou pool de mineração) encontra um novo bloco, mas não o transmite imediatamente. Em vez disso, continuam a minerar em privado na sua cadeia (cadeia oculta). Uma vez que encontram blocos adicionais, transmitem-nos todos de uma vez. Isto pode invalidar o trabalho de outros mineiros e inclinar o poder computacional e as recompensas para o mineiro egoísta. O bitcoin pode mitigar o impacto da mineração egoísta ao melhorar o protocolo de transmissão.
validação de 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 executa extensas verificações no bloco e em suas transações:
[1] palestra 12 | tecnologia blockchain aprofundada (4): pow consenso-explicação aprofundada do blockchain-tempo geek:Declaração de exoneração de responsabilidade:
encaminhar o título original '白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?'
um dos conceitos mais familiares relacionados à blockchain para todos é provavelmente a mineração. muitas pessoas podem ter ouvido falar sobre mineração várias vezes, mas não têm certeza do que isso realmente envolve. nesta seção, interromperemos nossa programação regular para primeiro introduzir a “mineração”.
um breve resumo do conteúdo de 'plain blockchain 1: introdução ao bitcoin (o pioneiro da revolução blockchain e o desafiador da moeda soberana)', onde satoshi nakamoto projetou o sistema monetário do bitcoin para vincular as recompensas contábeis com a emissão de moeda. essa abordagem permite que a emissão de moeda seja automatizada por meio do processo contábil, solucionando o problema da emissão de moeda e incentivando os contadores a participar ativamente.
No mundo real, a mineração envolve mineiros que usam várias ferramentas para escavar metais preciosos escondidos em rochas de minas. Os mineiros extraem valor desses metais raros escondidos na natureza por meio de trabalho físico.
para projetos de blockchain com recompensas para contabilidade (geralmente projetos de moeda digital), os nós de rede gastam recursos computacionais para resolver problemas. uma vez que encontram a solução, empacotam o bloco e recebem uma recompensa na forma de moeda recém-emitida. este processo é análogo à extração de metais preciosos como ouro do minério, daí ser comumente referido como “mineração”. aqui, os contadores são os mineiros, que competem para empacotar blocos usando hardware e eletricidade, resultando na criação de nova moeda.
A mineração tem dois objetivos principais: validar transações recentes, embalando-as em blocos e ligando-as à blockchain, e emitir nova moeda, recompensando os responsáveis pelo registro. Abaixo estão as funções detalhadas da mineração:
Os mineradores são incentivados a participar da mineração porque recebem recompensas substanciais por empacotarem com sucesso um bloco no blockchain. Estas recompensas provêm de duas fontes principais:
com o tempo, as recompensas em bloco diminuirão (por exemplo, devido ao mecanismo de halving do bitcoin, onde a recompensa é reduzida pela metade aproximadamente a cada quatro anos). eventualmente, depois que todos os 21 milhões de bitcoins forem minerados, esperados por volta do ano 2141, a recompensa automática em bloco deixará de existir e as taxas de transação se tornarão a principal fonte de renda para os mineradores.
O bitcoin gera um novo bloco aproximadamente a cada 10 minutos. Inicialmente, cada novo bloco produzia 50 bitcoins. Essa recompensa sofre metade a cada quatro anos e, até o momento, houve quatro eventos de metade. Atualmente, cada bloco gera 3,125 bitcoins, com a mais recente metade ocorrendo em abril de 2024. A próxima metade é prevista para cerca de 2028. Por volta de 2141, o bitcoin atingirá seu limite de emissão.
a taxa de transação é influenciada não apenas pela oferta e demanda, mas também pelo tamanho da transação, pois as taxas são proporcionais ao espaço que a transação ocupa no bloco.
para os mineiros, participar na mineração é simples. descarregue um cliente de carteira de moeda digital e, dentro do cliente, clique no botão de mineração para começar a minerar.
para projetos de blockchain com recompensas em blocos, o algoritmo de mineração é normalmente inserido em um script integrado na carteira. os mineradores só precisam clicar em um botão para iniciar o script.
o algoritmo de mineração é determinístico, o que significa que, desde que os mineiros executem continuamente o algoritmo, eventualmente obterão um resultado. no entanto, devido aos recursos computacionais variados, o tempo necessário para calcular este resultado pode diferir entre os mineiros. uma vez que um nó calcula o valor alvo, os esforços de outros mineiros durante esse período tornam-se fúteis, resultando em retornos negativos devido aos recursos físicos gastos.
Para evitar esforço desperdiçado, os mineiros frequentemente agrupam seus recursos computacionais ao se juntarem a um nó de pool de mineração. Este nó opera como qualquer outro nó, mas tem significativamente mais poder computacional. Quando o pool consegue minerar um bloco, as recompensas são distribuídas entre os mineiros participantes com base em seus recursos computacionais contribuídos. É importante notar que na blockchain, o mineiro registrado como empacotando o bloco é o nó do pool de mineração, enquanto os mineiros individuais recebem sua parte das recompensas alocadas pelo pool, e não diretamente do sistema monetário.
bitmain, uma empresa que fabrica chips de mineração especializados de alta eficiência, solidificou o papel das piscinas de mineração, contribuindo para a centralização do poder de contabilidade.
Projetos de blockchain diferentes podem ter quebra-cabeças de mineração variados e níveis de dificuldade. Aqui, tomamos o Bitcoin como exemplo. O algoritmo de mineração usado pelo Bitcoin é chamado de Prova de Trabalho (PoW). A essência desse algoritmo é que para obter um resultado, uma certa quantidade de trabalho deve ser gasta para prová-lo.
O puzzle de mineração não é um problema matemático tradicional, mas envolve encontrar um número aleatório, conhecido como nonce. Este nonce, quando combinado com os dados no bloco e processado através de uma função de hash, deve produzir um valor de hash que satisfaça uma condição específica. Normalmente, essa condição requer que o valor de hash seja inferior a um valor alvo (ou, de forma equivalente, que os primeiros n bits do valor de hash sejam zero). A equação é a seguinte: hash(nonce+dados_do_bloco)≤alvo\text{hash}(\text{nonce} + \text{dados_do_bloco}) \leq \text{alvo}hash(nonce+dados_do_bloco)≤alvo
o bitcoin usa a função de hash sha-256, que converte qualquer comprimento de entrada em uma saída de comprimento fixo de 256 bits (equivalente a 64 dígitos hexadecimais ou 32 bytes). a saída é quase aleatória, mas garantida de ser a mesma para a mesma entrada. a mineração envolve a mudança contínua do nonce e o hash dos dados do cabeçalho do bloco usando sha-256 até que um valor de hash que atenda à condição alvo seja encontrado.
por exemplo, um valor de hash sha-256 com os primeiros 30 bits sendo zeros: 000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110
a conversão disso em hexadecimal resulta em um valor começando com sete zeros: 00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90
para simplificar, a probabilidade de encontrar um hash com os primeiros n bits sendo zero é 12n\frac{1}{2^n}2n1. quanto maior o n, mais bits são zero e menor a probabilidade:
com n até 256, encontrar um valor de hash assim com a atual capacidade computacional humana, excluindo computadores quânticos, é praticamente impossível antes que a Terra deixe de existir.
devido às propriedades do sha-256, o único método é a força bruta, que envolve continuamente tentar diferentes nonces até que a condição seja atendida. essa necessidade de equipamentos de computação de alta performance é por isso que a mineração requer tais dispositivos.
uma vez que não é possível prever o valor de hash gerado ao adicionar o nonce aos dados do bloco e passá-lo pelo sha-256, o processo é totalmente aleatório. por exemplo, se o valor de hash de destino for 10.000, você não tem como saber qual nonce combinado com os dados do bloco produzirá um valor de hash inferior a 10.000. essa natureza imprevisível e aleatória significa que os mineradores devem continuar enumerando possibilidades até que a condição seja satisfeita. se vários valores atenderem à condição, o menor valor de hash é escolhido, uma vez que um valor de hash menor indica maior dificuldade e menor probabilidade de ocorrência.
verificar se um valor de hash gerado atende ao requisito é fácil, exigindo apenas uma operação de comparação. no entanto, encontrar um valor de hash menor ou igual ao valor de destino só pode ser alcançado por meio de enumeração de força bruta. essa característica, em que verificar um resultado é fácil, mas encontrar o resultado é difícil, é conhecida como assimetria computacional.
o código a seguir simula o processo de mineração. ele começa com uma string de dados do cabeçalho do bloco "geekbang" e busca incrementalmente a partir de um valor de nonce de 10.000 até encontrar um nonce que atenda à condição especificada.
aqui está um script python que demonstra o processo de mineração:
import hashlibdef main(): base_string = "geekbang" nonce = 10000 count = 0 while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string.encode()).hexdigest() count += 1 if pow_hash.startswith("0000"): # os primeiros 4 dígitos hexadecimais são 0, equivalentes aos primeiros 16 bits sendo 0 print("hash:", pow_hash) print("nonce:", nonce, "scan times:", count) break nonce += 1if __name__ == '__main__': principal()
quando o requisito é que os primeiros 4 dígitos hexadecimais do resultado do hash sejam zero (equivalente aos primeiros 16 bits sendo zero), o número de cálculos é aproximadamente 58.000. se o requisito for aumentado para os primeiros 5 dígitos serem zero, o número de cálculos aumenta para 1,23 milhão. quando o requisito é que os primeiros 7 dígitos sejam zero, o número de cálculos chega a 160 milhões. isso ilustra que cada zero adicional no prefixo do hash aumenta o cálculo aproximadamente 16 vezes.
aqui estão os resultados para diferentes condições-alvo:
os primeiros 4 dígitos hexadecimais são zero (16 bits):
import hashlib
def main():
base_string = "geekbang"nonce = 10000count = 0while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string).hexdigest() count = count + 1 if pow_hash.startswith("0000"): # 前4个16进制位是0,相当于前16个比特位是0 print pow_hash print "nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png" scan times: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count) break nonce = nonce + 1
se nome == ‘principal‘:
main()
como visto, aumentar o número de zeros principais necessários no hash aumenta significativamente o número de tentativas necessárias, seguindo um padrão de crescimento exponencial. isso demonstra a dificuldade computacional e os recursos necessários para a mineração, destacando a necessidade de dispositivos de computação de alto desempenho no processo de mineração.
para garantir que um bloco seja gerado aproximadamente a cada 10 minutos, o sistema bitcoin ajusta a dificuldade de mineração alterando o número de zeros principais necessários no valor hash. esse mecanismo de ajuste de dificuldade é uma parte crucial do sistema bitcoin. ele avalia o tempo necessário para gerar os últimos 2016 blocos, que idealmente deveriam ser cerca de duas semanas. se esses blocos forem minerados em menos de duas semanas, a dificuldade aumenta adicionando mais zeros principais (diminuindo o valor alvo). inversamente, se levar mais do que duas semanas, a dificuldade diminui reduzindo o número de zeros principais (aumentando o valor alvo). esse mecanismo garante que o tempo para gerar um bloco permaneça em cerca de 10 minutos, mesmo quando a taxa total de hash da rede flutua.
Este mecanismo de ajuste de dificuldade, projetado pelo criador do bitcoin, Satoshi Nakamoto, foi planejado desde o início para se adaptar automaticamente ao poder computacional total da rede. Ele mantém um ritmo constante de mineração e impede que a moeda seja emitida muito rapidamente, o que poderia perturbar a economia de mercado.
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 Merkle é a seguinte:
大后端私房菜]. alt="">
a principal controvérsia em torno da mineração envolve os algoritmos de prova de trabalho (PoW) usados pelo bitcoin e seus derivados. Esses algoritmos requerem que os mineradores alocem recursos computacionais substanciais para resolver problemas com os quais a rede concorda. Muitas pessoas estão trabalhando nessas computações simultaneamente, mas apenas o primeiro a resolver o problema recebe a recompensa. Os recursos computacionais e elétricos dos outros participantes são efetivamente desperdiçados, sem produzir valor adicional.
Existem duas formas principais de otimizar esse desperdício de recursos:
qual é o valor da mineração? parece ser um desperdício de recursos e sem sentido para a sociedade.
Ao revisitar a secção "por que é necessária a mineração?" deste artigo, a importância direta da mineração é que ela suporta a emissão de moedas digitais. As recompensas de mineração incentivam mais pessoas a participar na manutenção de moedas digitais, tornando-as mais estáveis. Além disso, os algoritmos de mineração mantêm a consistência das transações nos sistemas de moedas digitais, tornando-os mais robustos e menos suscetíveis a ataques internos e externos.
O significado indireto da mineração é derivado das próprias moedas digitais. As moedas digitais criam um sistema monetário global e confiável, onde transações seguras podem ocorrer sem a necessidade de instituições centralizadas, evitando as desvantagens da centralização. Sua natureza global também permite transações transfronteiriças eficientes e de baixo custo.
o retorno da mineração diminuirá a ponto de cair abaixo dos custos, fazendo com que os mineradores parem de minerar e as transações cessem?
É uma preocupação comum que os retornos da mineração dependam exclusivamente das recompensas do sistema, que diminuem ao longo do tempo. No entanto, a mineração também gera receitas significativas com taxas de transação. À medida que as moedas digitais ganham uma aceitação mais ampla, o mercado de transações de moeda digital irá expandir. Este aumento do volume de transações intensificará a concorrência pela inclusão de blocos, levando a taxas mais altas que os usuários estão dispostos a pagar para priorizar suas transações. Consequentemente, os mineradores podem continuar a ganhar taxas de transação substanciais, garantindo a viabilidade contínua do processamento de transações.
as taxas de transação compensarão os custos de mineração?
sim, as taxas de transação podem ajudar a compensar os custos da mineração. à medida que as recompensas em bloco diminuem ao longo do tempo, as taxas de transação tornam-se uma fonte crucial de renda para os mineiros. isso garante que, mesmo que os custos de eletricidade sejam elevados, os mineiros ainda possam sustentar suas operações por meio das taxas pagas pelos usuários para processamento de transações.
os mineiros múltiplos dividem as recompensas de mineração se eles transmitirem simultaneamente seus novos blocos?
não, se vários mineiros resolverem o quebra-cabeça e transmitirem seus novos blocos ao mesmo tempo, isso cria um fork temporário na blockchain. aqui está como funciona:
exemplo:
o que é um ataque de 51% e por que é que os super nós não fazem batota?
um ataque de 51% ocorre quando uma única entidade ou grupo controla mais de 50% do poder computacional da rede. aqui está o motivo pelo qual os super nodos geralmente não trapaceiam:
como é que a blockchain previne interrupções intencionais e transações fraudulentas?
prevenir a distribuição inconsistente de blocos pelos mineradores
definição e função: numa rede blockchain, todas as transações transmitidas que ainda não foram incluídas num bloco são armazenadas temporariamente na mempool (piscina de memória) dos nós da rede. os mineradores monitorizam a sua mempool para selecionar transações para a construção de novos blocos.
estratégia de seleção de transação: os mineradores podem escolher transações do mempool com base em sua estratégia. Geralmente, eles dão prioridade às transações com taxas mais altas, mas alguns também podem considerar outros fatores, como a idade da transação (o tempo que ela passou no mempool).
quem participa e como eles ganham: além dos usuários, os três principais participantes no sistema bitcoin são os mineradores, desenvolvedores e operadores de nós.
aumento nos preços das GPUs: a alta demanda por GPUs pelos mineradores para fins de mineração levou a uma escassez de oferta, fazendo com que os preços aumentassem.
gpus de mineração: gpus de mineração são aquelas anteriormente usadas para mineração de criptomoedas. essas gpus passam por intensa computação, resultando em desgaste significativo. devido ao seu desempenho reduzido, a maioria das pessoas prefere não comprar gpus de mineração usadas.
requisito de armazenamento totalmente redundante: sim, os mineradores precisam armazenar todo o registro do blockchain para verificar se um token foi gasto anteriormente e garantir a segurança e integridade do registro. No entanto, para blocos muito antigos, os mineradores só precisam armazenar os cabeçalhos dos blocos, não o conteúdo completo do bloco. Isso ajuda a manter a eficiência do blockchain, preservando sua segurança.
sem recompensas automáticas além de 21 milhões de bitcoins: uma vez que o fornecimento total de bitcoin atingir seu limite de 21 milhões, o sistema não emitirá mais novos bitcoins como recompensas para os mineradores. Se os usuários também não estiverem dispostos a pagar taxas de transação, teoricamente, o sistema de transação pode enfrentar desafios operacionais. No entanto, é provável que os usuários estejam dispostos a pagar taxas de transação para terem suas transações processadas, garantindo a continuação do sistema.
a altura do bloco continuará a aumentar: mesmo após atingir o fornecimento máximo de 21 milhões de bitcoins, a altura do bloco (o número total de blocos) continuará a aumentar desde que os mineradores estejam dispostos a minerar e empacotar transações em novos blocos. A altura do bloco não é limitada pelo limite de fornecimento de bitcoin.
potencial para alterações de consenso: a comunidade pode propor alterações nas regras de consenso, como aumentar o fornecimento total de bitcoin, para permitir a geração de novas moedas, se necessário.
transação de coinbase: na blockchain do bitcoin, as recompensas dos mineradores são distribuídas através de uma transação especial conhecida como "transação de coinbase" ou "recompensa do bloco". Essa transação possui características únicas:
cálculo de receita por bloco: a receita do minerador é calculada cada vez que um bloco é minerado com sucesso e confirmado pelo mecanismo de consenso da rede. O minerador (ou pool de mineração) que minera o bloco recebe a recompensa do bloco e as taxas de transação acumuladas de todas as transações incluídas no bloco.
Processo de recebimento de recompensas: Uma vez que um minerador ou pool de mineração minera com sucesso um bloco e isso é confirmado pela rede, eles recebem a recompensa do bloco e as taxas de transação. Isso é executado através da transação Coinbase, que converte as taxas e recompensas em saídas de transação não gastas (UTXOs) creditadas na conta do minerador.
criação sequencial: os blocos são criados sequencialmente na blockchain. um novo bloco só pode ser criado depois que o bloco anterior foi minerado com sucesso e adicionado à cadeia.
múltiplas transações por bloco: os blocos geralmente contêm múltiplas transações. os mineradores incluem o máximo de transações possível para maximizar seus ganhos com taxas de transação, em vez de agrupar as transações individualmente.
blocos parcialmente preenchidos: a maioria dos blocos não está totalmente utilizada. os mineiros começam a trabalhar no próximo bloco assim que encontram um hash válido que atenda ao requisito de dificuldade, independentemente de o bloco estar completamente cheio.
blocos vazios: os blocos podem ser minerados mesmo que não haja transações para incluir. Esses blocos, chamados de blocos vazios, ainda fornecem uma recompensa ao minerador.
regra da corrente mais longa: quando ocorre um fork, a rede segue a corrente com a maior prova de trabalho acumulada, que geralmente é a corrente mais longa. os nós mudam para a corrente mais longa uma vez que se torna evidente qual delas tem mais trabalho investido.
resolução de gasto duplo:
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−variação
os utilizadores definem a taxa de transação ajustando o montante de entrada, o montante de saída e o montante de troco.
Distribuição de ganhos: Ao minerar em um pool, o nó do pool recebe a recompensa do bloco. O pool então distribui os ganhos para seus membros com base em seu poder computacional contribuído. Esta distribuição é executada através de transferências para as carteiras dos mineiros.
mineração egoísta: a mineração egoísta é uma estratégia em que um mineiro (ou pool de mineração) encontra um novo bloco, mas não o transmite imediatamente. Em vez disso, continuam a minerar em privado na sua cadeia (cadeia oculta). Uma vez que encontram blocos adicionais, transmitem-nos todos de uma vez. Isto pode invalidar o trabalho de outros mineiros e inclinar o poder computacional e as recompensas para o mineiro egoísta. O bitcoin pode mitigar o impacto da mineração egoísta ao melhorar o protocolo de transmissão.
validação de 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 executa extensas verificações no bloco e em suas transações:
[1] palestra 12 | tecnologia blockchain aprofundada (4): pow consenso-explicação aprofundada do blockchain-tempo geek:Declaração de exoneração de responsabilidade: