Categorias
Como funcionam? Mastering Bitcoin

Proof-of-Work – o Algoritmo que faz a Bitcoin Mexer

Para entendermos o papel dos mineradores e de como é conseguido o consenso através de uma rede descentralizada com milhares de nós sem uma autoridade central, primeiro temos que entender o algoritmo inovador que torna tudo isto possível.

Um algoritmo hash torna um input de dados de dimensão arbitrária num resultado determinístico de dimensão definida, uma impressão digital do input. Para um input específico o hash resultante será sempre o mesmo e pode ser verificado e validado facilmente por quem quer que corra o mesmo algoritmo. As características vitais de um algoritmo hash computacional são ser computacionalmente inviável descobrir dois inputs diferentes que produzam o mesmo resultado e ser praticamente impossível seleccionar o input que dará o resultado pretendido, de outra forma que não seja tentar inputs aleatórios. Referimo-nos aos resultados como impressões digitais por serem únicos.

Na rede Bitcoin os mineradores utilizam o algoritmo criptográfico SHA256. Um Algoritmo de Hash Seguro (AHS) que transforma quaisquer dados que sejam introduzidos num output com uma dimensão fixa de 256 bits. Na sua forma mais simples, o que os mineradores fazem é correr o cabeçalho de um bloco validado repetidamente, alterando um único parâmetro até que o resultado seja menor do que um alvo bem definido. Este resultado não se consegue determinar à partida nem se consegue definir um padrão para produzir um resultado específico. Visto que a única forma de alcançar o resultado é através da variação aleatória, diz-se que é utilizada força bruta computacional.

Da forma como o SHA256 funciona qualquer ínfima alteração no input alterará significativamente o resultado final. Apenas uma letra, um sinal de pontuação ou qualquer outro caracter produzirá (com uma probabilidade enorme) um resultado totalmente diferente.

exemplo_hash
O resultado de correr a frase “I am Satoshi Nakamoto” pelo algoritmo SHA256, incluindo um nonce. Pode notar-se que variando apenas o algarismo para o nonce o resultado é totalmente diferente.

A variável utilizada como parâmetro a ser alterado é chamada de nonce. Variando o nonce utilizado varia-se o resultado do algoritmo criptográfico até que seja encontrado o valor pretendido. Ou seja, a função irá variar o output até ter um resultado inferior ao definido pelo alvo. O limite definido pelo algoritmo é conhecido como alvo e será inversamente proporcional à dificuldade em encontrar um resultado que satisfaça essa condição – ser inferior ao alvo. Quanto menor o alvo, maior a dificuldade.

Um bom exemplo para entender este conceito é um jogo de dados onde os jogadores têm que lançar os dados com um resultado inferior a um alvo predefinido. Se dissermos que o alvo é 12, um jogador só perderá se sair seis em cada um dos dados. No entanto, se formos diminuindo o alvo aumentará o número de combinações que farão com que um jogador perca. Por exemplo, se definirmos o alvo para 5, mais de metade das combinações não servirão para vencer o jogo. Em média, os jogadores terão que lançar exponencialmente mais vezes de cada vez que se baixa o alvo. Quando o alvo for 2, apenas uma combinação em 36 será a combinação vencedora, apenas 2% das possibilidades. Um observador externo que saiba que o alvo é 2, pode assumir que um vencedor lançou, em média 36 vezes. Ou seja, é possível estimar o trabalho investido para vencer, com base na dificuldade imposta pelo alvo.

No algoritmo SHA256, a apresentação do próprio input – que irá criar o resultado pretendido – serve como prova do trabalho feito para alcançar o resultado abaixo do alvo definido. Por isso, o algoritmo utilizado na rede Bitcoin é chamado de Prova de Trabalho – Proof-of-Work.

Apesar da grande quantidade de trabalho de força bruta computacional necessário para descobrir o resultado abaixo do alvo, é necessário correr apenas uma vez a função para verificar que esta utiliza a variável correcta que produz aquele resultado. Por isso, depois de um mineiro enviar o resultado todos os nós da rede poderão verificar que ele achou o resultado correcto e despendeu o trabalho necessário para o alcançar. Ao aceitarem este resultado o bloco será publicado na blockchain e o mineiro terá direito à recompensa das bitcoins criadas naquele bloco.

Como vimos, a dificuldade para descobrir o alvo obriga a que se tentem múltiplas hashes até que se consiga descobrir o resultado que satisfaz a função e atribui a recompensa. Na rede Bitcoin este “jogo” é uma competição para publicar o próximo bloco na rede e se consiga receber as bitcoins, incluídas nesse bloco. Se estas ficarem mais atractivas, mais mineradores se juntarão à rede. A rede fica mais forte à medida que existem mais mineradores, o que faz com que exista maior poder computacional para alcançar o alvo. A dificuldade está calculada para o poder total da rede, assim, aumentando o poder da rede o resultado seria encontrado mais rapidamente e perder-se-ia a consistência dos 10 minutos por bloco.

Para evitar a perda desta característica, a rede ajusta por si só o alvo e, assim, ajusta também a dificuldade em encontrar o resultado e consegue manter a publicação de um bloco a cada 10 minutos. O ajuste do alvo é feito a cada 2016 blocos. O algoritmo mede o tempo que decorreu para descobrir os últimos 2016 blocos e divide-o por 20160 minutos (o tempo óptimo para publicar esse número de blocos publicando um bloco a cada 10 minutos). Calculando o rácio entre o tempo real e o tempo desejado, ajusta-se a dificuldade aumentando ou diminuindo-a conforme necessário.

De forma simples: se a rede descobrir blocos em menos de 10 minutos a dificuldade aumenta, diminuindo o alvo. Se a rede descobrir blocos, em média, em mais de 10 minutos, a dificuldade diminui. Para isso aumenta o alvo.

De forma a controlar a volatilidade na variação da dificuldade, o ajuste do alvo será sempre menor que um factor de 4 por ciclo de 2016 blocos (cerca de duas semanas). Se a dificuldade tiver que ser aumentada significativamente, sê-lo-à no máximo com um factor de 4. Os reajustes necessários serão feitos no ciclo seguinte.

Notar que o alvo é independente do número ou o valor das transacções. O aumento no poder computacional total da rede representa a entrada de novos mineradores na competição pela recompensa. A relação entre o preço da electricidade para alimentar um computador de mineração e o valor da Bitcoin será o factor determinante para a entrada de novos mineradores pois é esse o factor determinante dos incentivos para entrar ou sair do mercado, já que cada mineiro é livre de o fazer de cada vez que o desejar.

No próximo artigo vamos perceber melhor o papel dos mineradores.

5 replies on “Proof-of-Work – o Algoritmo que faz a Bitcoin Mexer”

Deixe uma resposta para Bloco – o Componente da Blockchain – André Barros – O Aprendiz de Cripto Cancelar resposta