O conceito básico de blockchain é muito simples: um banco de dados distribuído que mantém uma lista crescente de registros ordenados.
O blockchain é um termo normalmente associado ao Bitcoin e/ou Ethereum, mas blockchain é mais que isso, blockchain é a tecnologia por trás deles, e por trás de qualquer outra criptomoeda.
Há muitos usos de outros para blockchain, por exemplo, jogos (CryptoKitties) ou também blockchain + IOT (Internet das coisas), e este é apenas o começo para o tecnologia.
O blockchain é, como o nome diz, uma cadeia de blocos, então temos a primeira classe, o Block.
Nesse estágio meu bloco tem os atributos:
- índice - o índice de bloco a posição na cadeia
- timestamp - data e hora em que o bloco foi adicionado no Blockchain
- data - o valor dos dados, em outras palavras, o que você deseja salvar
- hash anterior - o hash do índice de blocos -1
- hash - o hash do bloco
Se você não sabe o que é hash, eu expliquei no meu último post aqui.
Você verá algumas coisas interessantes na foto e aqui vou explicar um pouco:
- deixe mais OOP a função isValid é para cada bloco responder se ele for válido
- O construtor define todas as coisas no bloco
- a função “update” é atualizar o dict ao ler um arquivo, isto é para salvar os dados para o futuro
- calculando o hash para arquivos salvos anteriormente, para converter sempre para o mesmo encode, no caso utf-8, porque encodes diferentes possuem caracteres diferentes e caracteres diferentes produzem hashes diferentes.
Portanto, esta é uma corrente válida, se o bloco foi alterado, o bloco atual saberá e ficará inválido, e se qualquer bloco anterior foi alterado, a cadeia saberá e toda a cadeia será inválida. Esse é o conceito que faz com que os dados salvos no Blockchain sejam imutáveis.
Então, olhando na nossa segunda classe, Blockchain:
Assim, a classe blockchain cria os blocos e procura por qualquer problema na cadeia, e essa classe é responsável por salvar em um arquivo JSON simples e ler dele. Nossa primeira versão blockchain está pronta !! \o/
Todo o código está abaixo, você pode executar e ver a saída
Nesta versão do nosso blockchain, não implementamos a Prova de Trabalho, a ideia primeiro é criar o blockchain e garantir a integração da cadeia. Esse será o meu próximo passo.
Eu criei um projeto que você pode seguir no GitHub, vou incrementar cada vez mais o meu blockchain, se tiver interesse basta me seguir, vou escrever alguns posts sobre todo o processo.
P.S: Eu não sou um expert no blockchain, então qualquer problema, correção de código, ou dicas, isso é muito bem vindo a comentar abaixo e vai ajudar algumas pessoas também. Ou você pode falar comigo em particular no LinkedIn.
Te vejo em breve!