Noções básicas de Blockchain - Proof of Work
Neste artigo, vamos falar sobre uma das tecnologias ou componentes de blockchain mais importantes, a Proof of Work (prova de trabalho). A prova de trabalho é o componente revolucionário da blockchain que evita gastos duplos.
O que são gastos duplos?
Para perceber o problema que a Prova de Trabalho resolve, é preciso primeiro perceber qual é o problema real.
Gastar em duplicado é uma ação ilegal na blockchain, onde um Bitcoin é gasto mais de uma vez.
Num mundo físico, Bob dá uma foto a Alice. Como Bob deu a foto para Alice, ele não possui mais a foto. Bob não pode dar a mesma foto a John pois é a Alice quem a possui agora.
Num mundo digital, Bob envia um e-mail com a foto para Alice. Bob ainda possui a foto no seu computador e pode enviar a mesma foto para John. Assim, ele enviou a mesma imagem duas vezes e pode continuar fazendo isso indefinidamente.
Este foi um grande problema com as moedas digitais no passado. Como evitar o envio da mesma moeda digital duas vezes? E como evitar que alguém simplesmente copie e cole as suas moedas virtuais indefinidamente. A Prova de Trabalho resolveu isso.

O que é a Prova de Trabalho?
A Prova de Trabalho (Proof of Work) ou PoW, em resumo, é um método de confirmação de transações na blockchain, também chamado de mineração.
A blockchain é um livro-razão distribuído (banco de dados) de blocos anteriores. A Blockchain é distribuída em todo o mundo por nodes que permitem a descentralização. Uma das funcionalidades do node é adicionar novos blocos à blockchain, esses nodes são chamados de mineradores. Apenas os nodes que desejam gastar recursos computacionais são capazes de adicionar novos blocos à blockchain.
Como é que a prova de trabalho realmente funciona?
Com a PoW, os mineiros estão resolvendo funções matemáticas unilaterais. Vários mineiros competem simultaneamente entre si. Quem quer que resolva a função primeiro, recebe uma recompensa financeira e sua solução é transmitida para todos os outros nodes.
Com SHA256, pode-se obter Y de X, mas não pode obter X de volta de Y. Isso é chamado função unilateral e é frequentemente usado em criptografia. O endereço da carteira do Bitcoin, por exemplo, é uma saída de uma chave privada, que é codificada numa saída SHA256.
Exemplo da palavra com hash SHA256 “NiceHash”:
D22df564d771ed4e6785029de215e9f9e2affe9bbe37bacc8544c32f0a162ba3
A palavra NiceHash atua como uma chave privada e a saída é uma chave pública. Seria praticamente impossível reverter a função e descobrir o que ela significa sem a chave privada ou os dados de entrada.
Repare que o Sha256 pode ser usado com uma quantidade infinita de dados, pode até ser usado com imagens.
Experimente você mesmo:
Se um mineiro tiver alguns dados de entrada, ele obterá um texto (string) aleatório longo, que não pode ser revertido. Mas a blockchain usa outra string chamada nonce (número usado apenas uma vez). Usando um nonce, um minerador pode manipular a saída SHA256 para adivinhar a saída desejada.
A rede Blockchain irá, por exemplo, definir uma saída desejada começando com 6 zeros, por exemplo: 000000c49ede7f965ba8e7e6419d6efb0afc99e7ecd10095b286310ca55a6355
O minerador irá literalmente adivinhar o nonce até que a saída do hash do bloco comece com 000000. Isso é o que os mineiros fazem, eles combinam as transações do bloco como uma entrada de dados e então adivinha o nonce, até que a saída SHA256 comece com 000000.
Insira dados aleatórios no formulário abaixo e tente encontrar um hash que comece com quatro zeros (0000) adivinhando o nonce:
Ou simplesmente pressione MINE para encontrar o nonce correto automaticamente.
Repare que esta é uma versão simplificada. Um minerador também deve incluir a saída de hash do bloco anterior na entrada de dados junto com os dados da transação. Além disso, com dificuldade crescente, o número de zeros aumenta, o que torna menos provável a ocorrência do nonce correto, portanto, é mais difícil adivinhar o hash de saída correto. É mais fácil encontrar a saída com um zero (0) do que com quatro zeros (0000).