Why I Resist Joy

Something great happened recently to me. I was really excited, running around shouting, “Thank you, Universe” and generally expressing joy. I was also feeling very good about myself, seeing that I’d…

Smartphone

独家优惠奖金 100% 高达 1 BTC + 180 免费旋转




Entendendo como funciona uma Blockchain com Python

Vamos criar uma simples Blockchain para assimilar os principais conceitos

Temos visto muito sobre Bitcoin e criptomoedas e podemos dizer que estão na moda. E como todo desenvolvedor, devemos sempre nos atualizar e conhecer novos conceitos e tecnologias.

Blockchain é o conceito base de toda criptomoeda, mas não é limitado a esse escopo e pode ser aplicado de diversas maneiras. Para entender melhor esse conceito, resolvi criar uma simplória blockchain.

Uma blockchain é feita de blocos. No nosso caso, um bloco será composto de: uma data, um índice e algum conteúdo (uma mensagem, por exemplo) e o hash do bloco anterior.

No fim das contas, nossa blockchain será uma lista de hashes, cada um com 64 caracteres. E como mencionado, o hash do bloco anterior está contido no bloco seguinte e é por isso que chamamos de blockchain (cadeia de blocos).

Uma blockchain não é contruída apenas criando hashes dos blocos. Um hash precisa ser válido. No nosso caso, um hash será válido se começar com quatro “0” (por exemplo, “0000abc…”). Chamamos essa validação de difficulty (dificuldade). Quanto maior essa dificuldade, mais tempo vai levar para encontrar um hash válido.

MAS… Se o hash não é válido na primeira vez, algo precisa mudar para conseguir um hash diferente, certo? Se você já trabalhou com hashes, sabe que se utilizámos o mesmo dado, sempre resultará no mesmo hash. Para contornar isso, utilizamos um nonce, que, em outras palavras, é um valor arbitrário. É um simples número inteiro que vamos incrementar sempre que um hash não for válido.

Resumindo, vamos realizar o hash do nosso bloco (data, índice, mensagem e hash anterior) e um valor arbitrário de 1. Se o hash não for válido, vamos tentar com um valor arbitrário de 2. E vamos incrementando o valor arbitrário de 1 em 1 até encontrar um hash válido.

Pelo nome você deve ter adivinhado que se trata do primeiro bloco da nossa blockchain. O problema é que esse bloco não tem hash anterior, porque não existe bloco anterior. Vamos apenas utilizar um valor arbitrário para criar um hash para representar o bloco anterior e assim criar o primeiro bloco da nossa blockchain.

Claro que vamos ter uma função para contruir e iniciar nossa blockchain. A principal responsabilidade será criar o bloco de gênese.

Uma função responsável por gerar um hash válido para nossos blocos.

Também teremos uma função que irá validar se o hash começa com “0000”, ou seja, se é válido para nossa blockchain.

Vamos precisar de uma função que recupere o último hash da nossa blockchain para incluir ao criar um novo bloco.

E por último, precisamos oferecer uma forma de adicionar um novo bloco.

Vamos ver como colocamos esses conceitos no código

Nosso pequeno projeto tem apenas dois arquivos: blockchain.py e main.py. O primeiro contém nossa classe Blockchain com todas as funções necessárias. E o segundo é um exemplo de uso.

Nesse módulo, temos uma classe com alguns métodos que vamos analisar. Antes de tudo, importo as funções que vamos precisar:

Agora vamos dá uma olhada no que está acontecendo nos métodos:

Muito bom, agora vamos ver como utilizamos essa classe Blockchain no nosso main.py.

O que está acontecendo aqui é que importamos nossa classe Blockchain e:

Por último, damos uma olhada de como está nossa cadeia de blocos. A saída é mais ou menos assim:

O array representa nossos 4 blocos (bloco de gênese e os 3 adicionados). Como você pode ver, cada um deles começa com “0000”, então cada um deles é válido. Se algum deles não começasse com quatro zeros, saberíamos que se trata de hash inválido e portanto o conteúdo correspondente desse bloco não é confiável.

Isso é um exemplo bem simples de como funciona uma blockchain. Provavelmente algumas coisas ficaram de fora, outras foram simplificadas. Nesse pequeno projeto aprendi:

Isso é tudo por hoje. Isso me ajudou a compreender melhor os conceitos para criação de uma blockchain e como ela funciona, espero que seja útil para você também. Sinta-se livre para me corrigir nos comentários abaixo.

Add a comment

Related posts:

Some People Think That the Price of Bitcoin Will Rise By the First Week of November

Bitcoin flashes bullish signs. In light of the 30th of September, SEC decision on the VanEck/ SolidX Bitcoin-ETF, which is a growing number of experts forecasts that November is going to mark a final…

The Ultimate Comparison of SRE and DevOps for Web Developers

In the world of software engineering, the roles of Site Reliability Engineering (SRE) and DevOps often intersect, but they are not necessarily mutually exclusive. While there may be some similarities…

Connect to an API without writing code!

Five minutes after reading this blog, you’ll be able to dismiss all the developers on your team and connect to an API without any programming knowledge. OK, maybe don’t fire your team, but you’ll…