Prova de trabalho ou POW

Como funcionam os algoritmos de prova de trabalho no processo de mineração das Blockchains?

Tem algum tempo que venho estudando sobre Blockchain e o que mais me chamou a atenção nos estudos, é o funcionamento do processo de mineração. E o que mais me chamou atenção nesse processo é que se compararmos a uma arquitetura distríbuida (não descentralizada), teriamos computadores centralizados que seriam responsaveis por fazer esse processo de validação/mineração/consenso.

https://101blockchains.com/pt/tecnologia-blockchain-guia/

Certo, o que diz a wikipédia?

    "Em criptografia, o Protocolo Prova de Trabalho ou PoW (do inglês, Proof-of-work) é um protocolo utilizado para a prevenção de ataques cibernéticos como DDOS e Spam. Ele surgiu como uma tentativa de reduzir os efeitos desses ataques utilizando de funções hash. Para um usuário realizar alguma ação, ele deve ser capaz de provar que realizou alguma tarefa, essa prova é a garantia de que o usuário gastou tempo para gerar uma resposta que satisfaça algum requisito do avaliador. Para esse sistema funcionar, tal prova deve ser trabalhosa de ser criada, mas facilmente verificada pelo avaliador. Seu uso inicial foi em correspondência eletrônica[1], mas foi eventualmente aplicado em criptomoedas como o Bitcoin para verificar transações, garantir consenso na blockchain e minerar moedas."

Referência: https://pt.wikipedia.org/wiki/Prova_de_trabalho

Como funciona?

Resumidamente, prova de trabalho no processo de mineração é uma forma de validar que uma operação é valida e ela pode ser adicionada na Blockchain.

Na prática existe o que o algoritmo que valida o hash, existe o dado e um valor aleatório que adicionamos no dado para conseguir encontrar uma determinada sequeência de zeros (0) no inicio da hash gerada.

O processo detalhado pode ser visto aqui: https://www.criptofacil.com/o-que-e-e-como-funciona-o-proof-of-work/ 

Muito bem e o que eu fiz?

Bom, aproveitando que estou estudando Rust, busquei replicar a lógica da prova de trabalho em rust e fiz isso com algumas etapas simples. Primeiro criei os dados base que vou utulizar no processo e entre os dados, o nível de difficuldade (que é basicamente quantos "zeros" (0) estou buscando na minha hash), em seguida, uma função que calcula o hash e por fim, uma função que verifica o hash gerado validando se atende a quantidade de "zeros" que estou buscando com o nível de dificuldade informado.

Projeto no github: https://github.com/rcelebrone/Rust-Proof-Of-Work

Estou no começo dos estudos, em abril/2022 vou iniciar a pós graduação de Aplicações e Tecnologias de Blockchain da PUC Minas e certamente terei muito mais para colaborar a respeito do tema Blockchain.