Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Como o SHA256 e a mineração protegem a rede Bitcoin

Como o Bitcoin é defendido pela energia? E o que é um nonce? Essas e outras perguntas são respondidas dentro!

Como a mineração funciona é fascinante. Quando eu explico isso para as pessoas, eu gosto de ver seu rosto no momento em que sua mente está explodindo. Vou explicar aqui, mas saiba que estou imaginando todos os seus rostos enquanto suas mentes explodem!

Eu tenho que começar com funções de hash. Sem funções de hash, o Bitcoin não seria possível. Deixe-me explicar o que eles são primeiro, não apenas para que você possa parecer legal em festas, mas também porque é fundamental entender como o Bitcoin funciona – particularmente mineração, mas também transações – sob o capô.

Você não precisa entender como o Bitcoin funciona para se beneficiar dele, assim como você não precisa entender como o TCP/IP funciona para usar a internet. Mas continue, porque é bem interessante e vou facilitar a compreensão, prometo.

Funções Hash

Vamos começar com um esquema que explicarei abaixo…

Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
(Gráfico/@jirols_btc)

À esquerda está a entrada, o centro é a função e à direita está a saída. A entrada pode ser qualquer dado, desde que seja digital. Pode ser de qualquer tamanho, desde que seu computador possa lidar com isso. Os dados são passados ​​para a função SHA256. A função pega os dados e calcula um número de aparência aleatória, mas com propriedades especiais (discutidas posteriormente).

O primeiro algoritmo de hash seguro (SHA) foi originalmente desenvolvido pela NSA e existem muitas versões diferentes agora (Bitcoin usa SHA256). É um conjunto de instruções sobre como misturar os dados de uma maneira muito complicada, mas especificada. As instruções não são um segredo e até é possível fazê-lo à mão, mas é muito tedioso.

Para SHA256, a saída é um número de 256 bits (não é coincidência).

Um número de 256 bits significa um número binário de 256 dígitos. Binário significa que o valor é representado com dois símbolos, 0 ou 1. Os números binários podem ser convertidos para qualquer outro formato, por exemplo, números decimais, que são os que conhecemos.

Embora a função retorne um número binário de 256 dígitos, o valor geralmente é expresso em formato hexadecimal, com 64 dígitos.

Hexadecimal significa que em vez de 10 símbolos possíveis como estamos acostumados com decimal (0 a 9), temos 16 símbolos (Os dez que estamos acostumados, 0-9, mais as letras a, b, c, d, e, e f; que possuem os valores de 11 a 15). Como exemplo, para representar o valor do decimal 15 em hexadecimal, basta escrever “f” e é o mesmo valor. Há muitas informações disponíveis on-line com uma rápida pesquisa no Google, se você precisar de mais elaboração.

Para demonstrar o SHA256 em ação, posso pegar o número 1 e executá-lo em um calculadora de hash online, e obtive esta saída (em hexadecimal):

Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

A caixa superior é a entrada, a caixa inferior é a saída resultante.

Observe que todos os computadores do mundo produzirão a mesma saída, desde que a entrada seja a mesma e a função SHA256 seja usada.

A saída do número hexadecimal, se convertida em decimal, é (observe que são necessários mais dígitos para escrever):

48,635,463,943,209,834,798,109,814,161,294,753,926,839,975,257,569,795,305,637,098,542,720,658,922,315

E convertido para binário fica:

11010111000011010110010011100111111111100110100111111001110000110011101011010111000000001001110111111110101101000111111010101110100011110101101101001001110101010100010001011110001110101001001110000000001111001010010110111011011011110000111010110110100101111010111001101011100110101110011010111001101011100110101110011010111001101011100111

Só por interesse, aqui está o mesmo valor em base 64.

1w1k5/5p+cM61wCd/rR+ro9bSdVEXjqTgDylu28OtpY=

Observe que o menor valor possível que SHA256 pode retornar é zero, mas o LENGTH ainda é 256 bits. É assim que o zero é representado:

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

E o maior valor possível é:

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

Em decimal, fica:

115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935

Em hexadecimal, é:

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Observe que há exatamente 64 F's.

Zero em hexadecimal pode ser simplesmente escrito como um único zero, mas para saída de hash, são 64 deles para manter o requisito de uma saída de tamanho fixo:

0000000000000000000000000000000000000000000000000000000000000000

Aqui está um resumo de alguns fatos sobre a função hash que são vitais para apreciar:

  • A entrada não pode ser determinada a partir da saída
  • A entrada pode ter qualquer comprimento
  • A saída é sempre do mesmo comprimento
  • A saída será sempre reproduzida de forma idêntica se você fornecer a mesma entrada.
  • Qualquer alteração na entrada, não importa quão pequena, causará uma saída imprevisível e muito diferente
  • A saída é aparentemente aleatória, mas na verdade é determinística (o que significa que é calculada e reproduzível)
  • A saída não pode ser prevista. Só pode ser calculado e isso exige uma quantidade mensurável de trabalho por um computador (e horas com lápis e papel! Não faça isso).

Agora que você entende o conceito básico do que é um hash, pode entender a explicação de como funciona a mineração de Bitcoin.

Mas antes de seguir em frente, recomendo que você vá a uma calculadora de hash online e brinque um pouco com ela e teste por si mesmo o que eu disse sobre funções de hash. Eu gosto deste.

Mineração

Vou começar demonstrando um conceito de trabalho, que é de onde vem a “prova de trabalho” no Bitcoin.

Vá para a calculadora de hash online e digite “Estou criando 50 bitcoins e me pagando esse valor”.

Digite exatamente, diferenciando maiúsculas de minúsculas, incluindo o ponto final. Você deve obter esta saída:

Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Agora, vamos criar uma regra que diga para que essa mensagem de pagamento seja válida, precisamos que o hash comece com um zero. Para fazer isso, temos que alterar a entrada de alguma forma. Mas, como você aprendeu, não é previsível qual seria a saída para uma determinada entrada. Que modificação podemos fazer para garantir um hash começando com zero?

Temos que adicionar dados usando tentativa e erro. Mas também não queremos alterar o significado da mensagem de entrada. Então, vamos criar um campo (uma seção alocada) chamado “nonce” que conterá um valor sem sentido.

A palavra "Nonce" deveria ser derivada de "número usado apenas uma vez", mas não a vejo.

Observe abaixo como apenas adicionar “Nonce:” como um cabeçalho de campo extra altera a saída do hash.

Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

A saída ainda não começa com um “0”, então vamos adicionar algumas bobagens (adicionei um “x” sem sentido):

Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Ainda não começa com um zero. Tentei mais alguns caracteres até o hash começar com zero:

Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Aqui vamos nós. Agora, de acordo com as regras arbitrárias que defini para esta versão fingida do Bitcoin, o texto na janela de entrada é um bloco válido com uma única transação me pagando 50 bitcoins.

Observe que os blocos Bitcoin são essencialmente páginas de um livro-razão. Cada bloco é numerado e cria novos bitcoins, além de listar as transações entre os usuários. Este registro é onde o bitcoin vive.

Agora uma nova regra. Para o próximo bloco, o hash do bloco anterior deve ser incluído. Vou adicionar um pouco de complexidade e adicionar mais alguns campos para abordar o que um bloco Bitcoin real tem.

Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

O hash começa com um “f” e não “0”, então terei que tentar alguns valores no campo nonce:

Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Desta vez tive mais sorte e encontrei um nonce adequado depois de apenas quatro tentativas. Lembre-se que para o primeiro bloco foram necessárias 22 tentativas. Há alguma aleatoriedade aqui, mas geralmente não é muito difícil encontrar um hash válido se tudo o que estamos tentando obter é um zero. Existem 16 valores possíveis para o primeiro dígito de hash, então eu tenho uma chance de 1 em 16 de que qualquer modificação que eu fizer no campo de entrada resultará no primeiro dígito de hash sendo “0”.

Observe que os campos do Bitcoin são assim, mas há mais detalhes que não adicionei. Isso é apenas para ilustrar um ponto, não necessariamente para detalhar exatamente como é um bloco Bitcoin.

Vou adicionar um campo de tempo ao próximo bloco, pois preciso disso para explicar o “ajuste de dificuldade” a seguir:

Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Acima está o bloco número três. Inclui o hash do bloco anterior e agora também comecei a incluir o tempo. O nonce que encontrei com sucesso fez o hash começar com zero (apenas continuei digitando um “1” até que o alvo do hash fosse atingido).

Há o suficiente aqui agora para que eu possa começar a explicar alguns conceitos interessantes sobre o blockchain e a mineração do Bitcoin.

Ganhando um bloco

O processo de mineração é competitivo. Quem produzir um bloco válido primeiro paga a si mesmo uma recompensa de bloco definida. Um minerador que produz o mesmo número de bloco um pouco mais tarde não recebe nada — esse bloco é rejeitado. Explicar por que isso causará muita distração agora, então explicarei no apêndice.

Depois que o bloco três é encontrado e transmitido para todos (todos os nós Bitcoin), todos os mineradores param de trabalhar no que seria sua versão do bloco três. Eles começam a construir em cima daquele bloco três bem-sucedido (puxando seu hash de bloco para um novo bloco) e começam a trabalhar para encontrar um nonce adequado para o bloco quatro. O vencedor publica o resultado e então todos começam a trabalhar no bloco cinco, etc.

A cada bloco, novos bitcoins estão sendo criados e coletivamente compõem a oferta total até agora. Se houver muitos mineradores, estatisticamente devemos esperar que os blocos sejam produzidos mais rapidamente e, portanto, o bitcoin será criado mais rapidamente. Problema, certo?

Buscando um suprimento limitado de bitcoin com emissão previsível ao longo do tempo, Satoshi Nakamoto pensou nesse problema e introduziu um ciclo de feedback negativo para manter a produção de blocos em intervalos de 10 minutos em média. Quão? Veja se você pode pensar em uma maneira. Pare por um momento e pondere – veja se você consegue encontrar a mesma solução genial e continue lendo quando desistir.

NODES: Menciono blocos “válidos”. E daí? Quem está verificando? Os nós Bitcoin são. Um nó Bitcoin mantém uma cópia do blockchain até o momento e segue um conjunto de regras para verificar se novos blocos estão dentro das regras e rejeitar aqueles que não estão. Onde estão as regras? No código. Um computador que baixa o código Bitcoin é um nó.

O ajuste de dificuldade

O tempo médio para criar novos blocos Bitcoin é calculado por cada nó a cada 2016 blocos (é por isso que o campo de tempo é necessário). Isso faz parte do protocolo e das regras que os nós seguem. Uma fórmula é aplicada para ajustar o número de zeros com que cada hash de bloco deve começar para ser válido.

Estritamente, não é o número de zeros que é ajustado, mas um valor de destino que o hash deve estar abaixo, mas pensar em zeros à esquerda é mais simples de explicar.

Se os blocos estão sendo produzidos muito rápido, então o destino de hash é ajustado de acordo com regras pré-definidas que todos os nós seguem de forma idêntica (está em seu código).

Mantendo simples para o meu exemplo, digamos que outras pessoas estão competindo comigo, os bloqueios estão acontecendo muito rápido e agora o quarto bloco precisa de dois zeros em vez de um, de acordo com um cálculo imaginário.

Vou demorar um pouco mais para conseguir dois zeros, mas estamos imaginando que existem muitas outras pessoas competindo comigo, então o tempo total necessário para alguém encontrar um bloco é limitado a um alvo.

Segue o próximo bloco:

Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Observe o tempo. Mais de 10 minutos se passaram desde o bloco anterior (acabei de fazer a demonstração). A meta de 10 minutos é probabilística; nunca se sabe exatamente quando o próximo bloco será encontrado.

Fiquei mexendo no teclado por um minuto até aparecerem dois zeros. Isso era exponencialmente mais difícil do que encontrar um único zero. A chance de encontrar dois zeros seguidos é de 1 em 162, ou uma chance de 1 em 256.

Se mais pessoas se juntarem à mineração e à competição por novos bitcoins, eventualmente três zeros serão necessários.

Acabei de pesquisar o último bloco Bitcoin real, que contém o hash do bloco anterior. O hash foi:

000000000000000000084d31772619ee08e21b232f755a506bc5d09f3f1a43a1

São 19 zeros! Há um 1 em 1619 chance de encontrar tal bloqueio a cada tentativa. Os mineradores de Bitcoin fazem muitas, muitas tentativas por segundo, coletivamente em todo o mundo.

O número de tentativas por segundo é conhecido como “taxa de hash”. Atualmente, a taxa de hash mundial estimada é de pouco menos de 200 milhões de terahashes por segundo (um terahash é um trilhão de hashes). Com tantas tentativas por segundo, um bloco com um hash começando com 19 zeros é encontrado a cada 10 minutos.

No futuro, à medida que mais mineradores se juntarem, a taxa de hash aumentará, os blocos serão encontrados mais rapidamente e a dificuldade do Bitcoin se ajustará para exigir 20 zeros, o que reduzirá a produção de blocos para cerca de 10 minutos.

The Halving

Quando o Bitcoin começou, 50 bitcoins foram produzidos com cada bloco. As regras do blockchain do Bitcoin especificam que a cada 210,000 blocos a recompensa será cortada pela metade. Esse momento é conhecido como “halving” e acontece aproximadamente a cada quatro anos. O halving, combinado com o ajuste de dificuldade mantendo os blocos em intervalos de 10 minutos, significa que por volta do ano 2140, a recompensa do bloco será de 0.00000001, ou 1 satoshi, a menor unidade de um bitcoin, e não pode mais ser reduzida pela metade. A mineração não vai parar, mas a recompensa do bloco será zero. A partir desse momento, nenhum novo bitcoin será criado daqui para frente e o número de bitcoins é matematicamente calculável e próximo o suficiente de 21 milhões de moedas. É assim que o suprimento total é conhecido – é definido programaticamente.

Mesmo com a recompensa do bloco em zero, os mineradores ainda serão incentivados a continuar trabalhando para ganhar taxas de transação.

Como exatamente a recompensa do bloco é cortada pela metade? Está no código mantido pelos nós. Eles sabem rejeitar qualquer novo bloco após 210,000, onde um minerador paga a si mesmo mais de 25 bitcoins. E então rejeitar quaisquer blocos após 420,000, onde um minerador paga a si mesmo mais de 12.5 bitcoins e assim por diante.

Taxas de transação

Até agora, mostrei apenas blocos imaginários com uma única transação - a transação em que o minerador recebe uma recompensa. Isso é chamado de “transação de base de moedas”.

Não tem o nome da empresa Conbase, quero dizer Coinbase. A empresa se nomeou após a transação coinbase, e não o contrário. Não se confunda.

Além da transação da base de moedas, existem transações de pessoas pagando umas às outras. Aqui está um exemplo imaginado:

Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Desta vez, não me preocupei em encontrar um hash real (na verdade, é o hash real relatado no bloco 200,001). O nonce eu apenas compensei por diversão, mas observe que uma mensagem pode ser incorporada lá.

Satoshis famosamente incluiu as palavras “Chanceler à beira do segundo resgate de bancos” no primeiro bloco Bitcoin (The Genesis Block), após a manchete do jornal do dia.

Como o SHA256 e a mineração protegem a rede Bitcoin PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

O ponto aqui é que existem 132 transações incluídas (nem todas mostradas). Veja a transação #132 – 2.3 bitcoins de um endereço está pagando 2.1 bitcoins para outro endereço e também para um segundo endereço o valor de 0.1 bitcoin (eu usei pontos para encurtar o comprimento do endereço).

Assim, uma fonte de 2.3 bitcoins paga um total de 2.2 bitcoins (2.2 + 0.1 = 2.2). Está faltando 0.1 bitcoin? Não, a diferença é reivindicada pelo mineiro, como explicarei.

O minerador pode pagar a si mesmo 25 bitcoins como recompensa do bloco (porque 210,000 blocos passaram, então a recompensa foi reduzida pela metade de 50 para 25). Mas se você olhar, a transação da base de moedas é 27.33880022. Os 2.33880022 bitcoins extras vêm das outras 132 transações do bloco – as entradas serão todas ligeiramente maiores que o total das saídas. Assim, o minerador pode reivindicar esse bitcoin “abandonado” como pagamento para si mesmo. Estas são consideradas taxas de transação pagas ao minerador.

O espaço do bloco é limitado. Quando o Bitcoin era novo, os usuários podiam enviar transações sem taxa e os mineradores incluíam a transação no bloco. Mas agora há mais usuários e como chegar ao próximo bloco é competitivo, os usuários incluem uma taxa na transação para atrair o minerador a escolher sua transação em detrimento de outras.

Portanto, quando a recompensa do bloco diminui constantemente, reduzindo pela metade a cada quatro anos e, eventualmente, para zero, os mineradores ainda são pagos dessa maneira.

Alguns sugeriram que um dia a recompensa para os mineradores não será suficiente e fará com que o Bitcoin falhe. Essa preocupação foi completamente desmascarada e não vou repeti-la aqui.

Um bloco pode ser reescrito?

Isso é extremamente improvável e vale a pena entender o porquê. Você então entenderá por que as transações Bitcoin são imutáveis ​​(imutáveis).

Expliquei anteriormente que o hash do bloco anterior está incluído no bloco atual. Isso significa que qualquer edição de transações em um bloco antigo altera o hash desse bloco editado. Mas esse hash é registrado no próximo bloco, o que significa que o próximo bloco também precisa ser atualizado. Mas se você alterar o hash registrado no próximo bloco, seu hash precisará ser alterado e assim por diante.

Observe que sempre que um hash é alterado, você perde todos esses lindos zeros e ficará com um hash de aparência aleatória - e terá que fazer todo o trabalho novamente para recuperar os zeros. Se você fizer isso para o bloco que tentou editar, terá que refazer o trabalho para o próximo bloco e o próximo até o bloco mais recente. Você não pode simplesmente parar no bloco antigo, porque as regras do Bitcoin são tais que a cadeia mais longa de blocos é o registro real do Bitcoin. Se você voltar e editar um bloco 10 blocos atrás, você não terá mais a cadeia mais longa. Você tem que adicionar mais 10 blocos e depois um pouco mais, porque enquanto você cria esses 10 blocos, a cadeia real provavelmente se tornou um pouco mais longa. Você tem que correr para ultrapassar a cadeia real. Se for bem-sucedido, a nova versão se tornará a versão real.

Repetir o esforço coletivo de hash do mundo inteiro do bloco editado para o bloco mais recente é a barreira para a edição do Bitcoin. A energia foi gasta para criar esses hashes com todos esses zeros improváveis ​​e esse gasto de energia deve ser repetido para editar o Bitcoin. É por isso que a energia usada para minerar Bitcoin não é “desperdiçada”; está lá para defender o Bitcoin de edições, para tornar o livro-razão imutável sem precisar confiar em uma autoridade central.

O que acontece se dois mineradores encontrarem um bloco ao mesmo tempo?

Isso realmente acontece de vez em quando, e sempre se resolve da seguinte forma:

Cada nó receberá primeiro um dos novos blocos quase simultâneos e aceitará aquele e rejeitará o que chegar momentos depois. Isso resulta em uma divisão da rede, mas é temporária.

Para ilustrar, vamos chamar um dos blocos de azul e o outro de vermelho (eles não têm cor, basta ter paciência comigo).

Os mineradores trabalham no próximo bloco, mas haverá uma divisão sobre de qual bloco eles estendem a cadeia.

Digamos que o minerador vencedor encontrou um bloco usando a corrente azul. Eles enviarão o novo bloco para todos os nós e a cadeia mais longa ficará aparente. Os nós que aceitaram a cadeia vermelha a descartarão e adotarão a cadeia azul.

Todos os mineradores que estavam trabalhando na cadeia vermelha pararão e agora trabalharão na cadeia mais longa, que é a cadeia azul. A corrente vermelha está morta.

Apêndice

Por que o bloco de um mineiro vice-campeão é inválido

Suponha que o bloco 700,000 tenha sido minerado pelo MINER-A. Trinta segundos depois, o MINER-B também criou uma versão diferente do bloco 700,000. Quando o MINER-B transmite essa alternativa, todos os nodos vão rejeitá-la porque já viram e aceitaram o bloco do MINER-A. Além disso, nesses 30 segundos, digamos que o MINER-C encontrou o bloco 700,001. Dado que o bloco 700,000 concorrente do MINER-B não estende a cadeia atual (que é de até 700,001), também é rejeitado por esse motivo.

Ainda mais interessante é que se o MINER-B estivesse trabalhando no bloco 700,001 em vez de uma versão concorrente de 700,000, eles teriam tanta chance de minerar um bloco válido 700,001 quanto teriam que finalmente encontrar um bloco alternativo 700,000. Portanto, assim que qualquer minerador ver um novo bloco, ele deve se esforçar no próximo bloco.

Se, no entanto, o Miner-B encontrou o bloco 700,000 um segundo depois do MINER-A, é possível que alguns nós vejam o bloco do MINER-A primeiro, enquanto outros vejam o bloco do MINER-B primeiro, dependendo das localizações geográficas e da velocidade da Internet. Nesse caso, há um fork temporário, e alguns mineradores estarão trabalhando para estender uma versão, enquanto outros estarão trabalhando para estender a outra. Conforme explicado anteriormente usando os descritores “cadeia azul” e “cadeia vermelha”, eventualmente uma das versões se estenderá mais antes da outra e se tornará a versão válida por unanimidade.

Este é um post convidado por Arman The Parman. As opiniões expressas são inteiramente próprias e não refletem necessariamente as da BTC Inc ou Bitcoin Magazine.

Carimbo de hora:

Mais de Bitcoin Magazine