Conheça os conceitos para entender como funciona uma rede blockchain 

Neste artigo você vai ver:

Muito se fala de rede blockchain, Web3, criptomoedas, Metaverso, NFT e toda essa sopa de letrinhas que envolve esse ramo da computação (já posso chamar assim será?).

Para entender melhor o funcionamento de tudo isso, é interessante saber um pouco da sequência em que algumas coisas foram criadas e como isso aconteceu, assim fica mais fácil entender como chegamos até aqui e para onde podemos e devemos ir.

Bitcoin

Você já deve ter ouvido falar em Bitcoin, por isso é muito difícil introduzir essa “coisa” sem explicar muitos detalhes, pois foi sua criação que viabilizou tudo o que temos até aqui. Além disso, Bitcoin é muito “simples” em relação ao resto da Web3.

Inclusive, você deve ter percebido que chamei de “coisa”, pois até hoje há uma discussão sobre o que é Bitcoin. Se é moeda? Um ativo digital? Ou uma pirâmide? 

Bom, vou tentar diminuir ao máximo meu viés aqui e explicar tecnicamente como foi construído, sei que pra quem estudou system design (arquitetura) é meio que um contra senso alguns pontos, como prova de trabalho PoW (Proof of Work), mas talvez esse assunto não caiba aqui com a profundidade que merece. No futuro, posso fazer outro artigo só sobre este tema.

Conceitos importantes

Antes de começarmos a falar sobre a estrutura da rede blockchain, vamos conhecer alguns conceitos que fazem parte da base da compreensão da própria rede, são eles: criptografia, hashes e assinatura digital.

Criptografia Assimétrica

No ramo da segurança é muito comum esse tipo de criptografia e em blockchains não é diferente. Vou explicar os conceitos, pois a implementação requer um conhecimento matemático (ou matemágico?) que não possuo e não interessa muito para o nosso entendimento.

Em criptografia assimétrica, usa-se um número aleatório muito grande para gerar outros dois números.

Imagem voltado para o conteúdo sobre rede blockchain, que mostra um número muito grande (chamado de seed), localizado no topo, gerando outros dois números indicados por flechas à direita e à esquerda: A (pintado de verde) e B (pintado de vermelho).
Um número muito grande (seed) gera outros dois números: A (pintado de verde) e B (pintado de vermelho)

Com base nisso é possível fazer algumas coisas diferentes, mas a principal é:

  • Usar o número A para embaralhar um número qualquer e só será possível desembaralhar usando o número B
  • O contrário também é possível, mas falaremos sobre isso mais adiante.

Em computação, é possível fazer operações matemáticas muito rapidamente e representar números de diversas formas. Podemos representar o número 156 em: binário (10011100), octal (234), hexadecimal (9C) e qualquer outra forma que quiser apresentá-lo e seja interessante para o nosso contexto. 

Por uma questão prática, não representamos em binário e, por segurança, quanto maior esse número mais difícil de quebrar a criptografia. Portanto, os números são enormes e representados utilizando caracteres alfanuméricos, fazendo com que a representação tenha uma quantidade menor de caracteres, reduzindo o tamanho da string gerada:

Imagem semelhante a anterior. Neste caso, ela mostra um número muito grande, o seed (654654654…..254654654) gerando outros dois números indicados por setas à direita e à esquerda: “Chave pública” (0314da2c8c7…04b4550642f6d7d3), representado utilizando caracteres alfanuméricos, e outro “Chave privada” (L11EZHa9aUyAa….kf8JTLZVuVrRBJ) representado também por caracteres alfanuméricos.
Um número muito grande (seed) gera outros dois números: “Chave pública” (pintado de verde), representado utilizando caracteres alfanuméricos; e outro “Chave privada” (pintado de vermelho), que também é representado utilizando caracteres alfanuméricos

Além de representar esses números de uma forma mais “humana”, também damos o nome de Chave Pública (A) e Chave Privada (B).

Sendo assim, é possível deixar A disponível para qualquer pessoa (por isso, chave pública), então embaralhar (criptografar) qualquer número (ou mensagem, pois podemos converter mensagens em números) e só quem mantém a chave privada guardada de forma segura consegue entender essa mensagem. Esse conceito é usado amplamente na web e devs em geral estão acostumados com ele.

Abaixo estão dois exemplos de como esse conceito funciona na prática:

Conteúdo rede blockchain, com uma imagem com o desenho humano em palitos “Marvin, o Androide paranóide” com um balão de fala com a frase: “Isso de nada adiantará, vamos todos morrer… se tivermos sorte!”. A frase é direcionada por uma seta e colocada num algoritmo RSA junto com uma chave pública alfanumérica (a chave pública do esquema anterior: 0314da2c8c7…04b455062f6d7d3). Por fim, o algoritmo gera uma mensagem cifrada que parece aleatória: ASUDHF9AS8HF9ASHFA8S7DHF87HVXBVHXHV8HW4HR,AFNAS7HA8SD7FHAKSDF.
A frase é colocada num algoritmo RSA junto com uma chave pública alfanumérica (a primeira da imagem anterior). Esse algoritmo gera uma mensagem cifrada que parece aleatória.
Imagem com dois parâmetros passados para um algoritmo RSA para descriptografar a mensagem: 1- Chave privada alfanumérica do primeiro exemplo (L11EZHa9aUyAa…kf8JTLZVuVrRBJ) e 2- Mensagem cifrada do exemplo acima (ASUDHF9AS8HF9ASHFA8S7DHF87HVXBVHXHV8HW4HR,AFNAS7HA8SD7FHAKSDF). Ambos possuem setas até RSA. Indicado por uma seta a partir de RSA, o resultado é o droid, chamado de R2D2, conseguir ler a mensagem: “Isso de nada adiantará, vamos todos morrer… se tivermos sorte!”, que é a mensagem do esquema anterior.
Dois parâmetros são passados para um algoritmo RSA para descriptografar a mensagem: 1- chave privada alfanumérica e 2- mensagem cifrada do exemplo acima. Como resultado, o droid R2D2 consegue ler a mensagem inicial.

Antes de prosseguirmos com a rede blockchain, precisaremos entender outro conceito: hashes.

Hashes

Outro tipo de algoritmo amplamente utilizado em geral na computação, muitos estão familiarizados, mas vou fazer uma explicação breve.

Um algoritmo de hash gera um número com um tamanho fixo com base em uma entrada de qualquer tamanho, é um algoritmo determinístico, pois ele sempre vai gerar a mesma saída se a entrada não mudar. Assim como descrevi na explicação anterior, esse número pode ser representado por um código alfanumérico.

Algoritmos de hash são utilizados para “armazenamento / integridade” seguro de senhas, mapas (a estrutura de dados), assinaturas digitais, entre outros.

Repare no tamanho do resultado do algoritmo MD5 independentemente do tamanho da entrada:

Imagem voltada para o conteúdo rede blockchain, onde conta com uma imagem que representa, em ordem, três personagens com balões de fala um embaixo do outro, ao lado de cada um está um bloco escrito “algoritmo de Hash” e, por fim, os respectivos hashes. O primeiro boneco palito, Éowyn, diz “Mas eu não sou um homem! Você olha para uma mulher.” e o hash é 149e315c748e1eda6afd34276b2058ea; Groot diz “Eu sou Groot!” e o hash é 277b4dbec436107c13ce02a7c6a3bee4; Sam diz “Eu sei. Tá tudo errado! Nós nem deveríamos estar aqui… mas estamos. É como nas grandes histórias Senhor Frodo. As realmente importantes. Eram cheias de perigo e de escuridão. E, às vezes, não queria nem saber o final… porque como o fim poderia ser feliz? Como o mundo poderia voltar a ser o que sempre foi quando tanta coisa ruim aconteceu? Mas no final, essa sombra vai passar… com certeza… até mesmo a escuridão acabará… um novo dia virá, e quando o sol nascer ele brilhará ainda mais. Essas são as histórias que ficavam com a gente. Que significavam alguma coisa. Mesmo quando era pequeno demais para entender por quê. Mas eu acho, Senhor Frodo, que eu entendo. Agora eu já sei! As pessoas daquelas histórias tiveram muitas chances para desistir, mas não desistiram. Elas foram em frente, porque estavam se agarrando a alguma coisa.” e o hash é d7738bddc09c1fdc57b3ace7be16a1bb. Importante perceber que as frases têm conteúdos e tamanhos diferentes, cada mensagem passa pelo mesmo algoritmo de hash e três hashes diferentes são gerados, porém o destaque é que o tamanho de caracteres dos hashes é o mesmo.
Os três personagens dizem frases com conteúdos e tamanhos diferentes. Todas passam pelo mesmo algoritmo de hash e três hashes diferentes são gerados, mas o destaque é que o tamanho dos caracteres dos hashes é o mesmo.

Assinatura digital

Se unirmos os dois conceitos acima, criptografia assimétrica e hashes, chegaremos à assinatura digital.

Vou fazer uma analogia: imagine que o Rei Theoden precisa informar os Rohirrim que o mago branco Saruman não é mais um aliado (os Rohirrim são os súditos de Theoden pra quem não manja de Senhor dos Anéis):

  • Em tempos de paz, o rei compartilha sua chave pública para líderes regionais espalhados pelo reino;
  • Ao montar a mensagem a ser enviada, o rei passa a mensagem por um algoritmo de hash, gerando o hash da mensagem;
  • Então, ele criptografa o hash usando sua chave privada, pega o resultado e anexa à mensagem;
  • Ao receber a mensagem, os líderes cavaleiros, espalhados pelo reino, leem a mensagem e não sabem se ela é verdadeira, a mensagem pode ter sido criada por Sauron;
  • Então esses líderes, descriptografam a assinatura que chegou junto com a mensagem, fazem um hash da mensagem que chegou e comparam as duas. Desta forma, atestam que a mensagem veio do Rei Theoden e é verdadeira.
Primeiro, representado por um boneco palito e um balão de fala, Éowyn escreve uma mensagem: “Atenção Rohirrim, nosso inimigo ganhou um aliado. Saruman, o mago branco agora se juntou a Sauron e está produzindo um exército de Uruk Hai”. Essa mensagem passa por um algoritmo de hash gerando o hash (3446f5f4c4d8a8b4abd4e4c3a9af48b8). Em seguida, esse hash passa por um algoritmo RSA junto com a chave privada do rei Theoden (L11EZHa9aUyAa…kf8JTLZVuVrRBJ), como resultado uma assinatura é gerada: a3s2e1f3a21f32s1df.
A mensagem inicial passa por um algoritmo de hash gerando o hash com caracteres alfanuméricos. Esse hash passa por um algoritmo RSA junto com a chave privada do rei Theoden, como resultado uma assinatura é gerada.
Imagem que dá sequência a anterior. Utilizando a chave pública do rei Theoden + assinatura (a3s2e1f3a21f32s1df) um Rohirrim descriptografa a assinatura encontrando um hash (3446f5f4c4d8a8b4abd4e4c3a9af48b8). Em paralelo, ele aplica o algoritmo de hash à mensagem que veio acompanhada da assinatura e gera o mesmo hash (3446f5f4c4d8a8b4abd4e4c3a9af48b8). Ao atestar que a assinatura é verdadeira o Rihirrim diz: “Pelas barbas de Gandalf, Saruman virou a casaca!”
Utilizando a chave pública do rei Theoden mais a assinatura, um Rohirrim descriptografa a assinatura encontrando um hash. Em paralelo, ele aplica o algoritmo de hash à mensagem que veio acompanhada da assinatura e gera o mesmo hash. Esse processo atesta que a assinatura é verdadeira.

Estrutura Blockchain

Entendendo os três conceitos, criptografia assimétrica, hash e assinatura digital, temos a base para entender como uma rede blockchain funciona.

O que o tal Satoshi Nakamoto (ou seja lá quantas pessoas e quais são, afinal é um codinome) pensou foi algo do tipo:

“E se eu usasse assinatura digital para que as pessoas pudessem atestar que estão transferindo saldos de uma moeda entre si e um sistema colocasse essas operações numa sequência definida formando um bloco de transações, em seguida aplicasse um hash nesse bloco, assim quando um bloco chegar no seu tamanho máximo, posso usar o hash do bloco anterior no próximo, fazendo uma corrente de blocos?”

Esse pensamento (que obviamente extraí diretamente da cabeça de Satoshi Nakamoto), mostra como o encadeamento de blocos usando hash do bloco anterior transforma a blockchain em um castelo de cartas, pois se algo for alterado no passado, impacta diretamente no futuro. 

Mas isso ainda não explica como isso se transformou em uma rede (a rede blockchain), porém vamos por partes:

A figura representa diversos blocos em sequência, cada um deles sendo uma tabela de transações exibindo quatro colunas cada (chave pública origem, chave pública destino, quantidade e assinatura digital). Cada transação do bloco gera um código hash, todos os hashes do bloco mais o hash do bloco anterior são ligados sucessivamente, formando um “castelo de cartas”, onde se você alterar qualquer código hash da estrutura, os subsequentes são todos alterados.
Os blocos estão em sequência, cada um deles sendo uma tabela de transações e cada uma gera um código hash. Todos os hashes do bloco + o hash do bloco anterior são ligados sucessivamente, formando um “castelo de cartas”, onde se você alterar qualquer código hash da estrutura, os subsequentes são todos alterados.

Blockchain Distribuído

Para construir um sistema descentralizado, que não ocorra gasto duplo, foi criado o conceito de nonce. Até agora, vimos que o código hash de um bloco é composto de um hash do conteúdo do bloco (transações) + hash do bloco anterior, se adicionarmos um número aleatório para gerar um novo hash, cada número vai gerar um hash diferente:

Imagem com os blocos de informações igual ao da imagem anterior. O primeiro contém o hash de cada transação e um número (555), chamado de nonce. A junção do hash das transações + nonce + hash do bloco anterior forma o hash do bloco. Na sequência, o mesmo bloco utiliza um nonce diferente (777), mostrando como o nonce impacta no hash do bloco.
Um bloco contém o hash de cada transação e um número (555), chamado de nonce. A junção do hash das transações + nonce + hash do bloco anterior forma o hash do bloco. Na sequência, o mesmo bloco utiliza um nonce diferente (777), mostrando como o nonce impacta no hash do bloco.

Quando temos dois ou mais computadores (nós) em uma rede blockchain, as transações são submetidas para a rede através de um protocolo P2P (Peer-to-Peer), que são transações assinadas pela pessoa dona da chave privada, assim atestando que ela está enviando fundos.

Essas transações são acumuladas por cada nó até atingir um tamanho máximo do bloco, nesse momento o bloco para de receber novas transações e começa o processo chamado de mineração (tão famoso).

Nele, cada nó validador gera um nonce (um número aleatório arbitrário) e na sequência o hash do bloco. Todos os nós estão procurando um hash específico, portanto esse processo é feito continuamente até encontrar o nonce ou até outro nó encontrar primeiro. Quando um nó encontra o nonce, ele faz algumas coisas:

  • Adiciona uma unidade de bitcoin (no caso do bitcoin) na própria chave pública;
  • Avisa os outros nós qual o nonce correto;
  • Recomeça o processo de receber transações.

Dessa forma, os outros nós, que perderam a batalha para descobrir o nonce desse bloco, verificam que o nonce é verdadeiro, acatam o fechamento do bloco e seguem para o próximo.

Mas o que é um nonce verdadeiro?

Simplificando, é um hash que comece com uma determinada quantidade de zeros (000), confira na imagem:

Imagem que mostra um hash sendo montado a partir de um bloco de transações, o hash do bloco anterior e o número (nonce) 126, gerando o hash 4a8a08f09d37b73795649038408b5f33; na sequência outro hash é montado usando os mesmos parâmetros, mas o nonce muda (895) e o hash gerado é b4206b74b7563ec684336f054582605b; por fim, é usado o nonce 42 e dessa vez o hash gerado é 00000ba8f33d97256e9db5e462c0af53. Na imagem, o último hash possui uma cor diferente, com destaque para os cinco zeros à esquerda e há uma etiqueta escrita BINGO.
Um hash sendo montado a partir de um bloco de transações, o hash do bloco anterior e o número (nonce) 126; na sequência outro hash é montado usando os mesmos parâmetros, mas o nonce muda (895); por fim, há outra tentativa com o nonce 42 e dessa vez o hash gerado começa com zeros à esquerda.

Quanto mais zeros à esquerda, mais difícil é de ser encontrado esse número, os zeros à esquerda na verdade representam um número pequeno. É como se você jogasse um dado de 20 lados e tivesse que acertar 5 ou menos. 

Quanto menor o número a ser encontrado, mais demorado, portanto foi possível criar um mecanismo para fazer com que os blocos sejam minerados há uma frequência quase fixa: 10 minutos. A dificuldade desse nonce varia de acordo com o tempo que demorou pra minerar o último bloco.

Mas e se houver um nó malicioso na rede e não reconhecer um gasto, ou “fingir” que não viu um gasto duplo?

Mecanismo de Consenso

Esse mecanismo do nonce, junto com o fato de que os nós validadores gastaram muito dinheiro no passado para manter a rede íntegra, garantem que não haverá gasto duplo. Na imagem é possível ilustrar essa situação:

magem que contém cinco nós representados e abaixo de cada nó há uma sequência de quatro blocos formando uma matriz. Alguns blocos estão destacados nessa matriz: nó 5 - bloco 0; nó 3 - bloco 1; nó 4 - bloco 2; e nó 5 - bloco 3.
Abaixo de cada nó, há uma sequência de quatro blocos formando uma matriz e alguns deles estão destacados.

A imagem acima ilustra que num cenário coeso somente um nó consegue acertar o nonce por vez, nesse caso todos utilizam o mesmo “algoritmo de consenso” (o tal do mecanismo do nonce), mas se um ou até dois nós quiserem quebrar o consenso e “fingir” que não viram um gasto duplo (tipo eu tenho 10 bitcoins e vou enviar 20 bitcoins para duas pessoas diferentes)?

 Imagem semelhante à anterior, a diferença é que os nós 4 e 5 estão pintados de roxo. Além disso, a partir do bloco 1 desses nós, os blocos estão pintados de cores diferentes.
Aqui a diferença é que os nós 4 e 5 estão pintados de roxo. Além disso, a partir do bloco 1 desses nós, todos estão com cores diferentes.

Essa imagem representa um cenário onde os nós 1,2 e 3 possuem o algoritmo de consenso explicado acima, baseado no nonce; e os nós 4 e 5, a partir do bloco 1 resolveram aceitar “transferências maliciosas” e ignorar o nonce dos outros nós. Dessa forma, formou-se um fork da rede, no conjunto à esquerda (nós 1,2 e 3), os nós vencedores foram em sequência 3, 2, 2, 1; já no conjunto da direita (nós 4 e 5), os nós vencedores foram em sequência 3, 5, 5, 4.

Outra forma de representar o desenho acima seria esse:

A imagem representa uma sequência de blocos de 0 até 3 com o número do nó vencedor ao seu lado esquerdo (3, 2, 2, 3). Ao lado dessa sequência, derivado do bloco 0 há outra sequência de outra cor, que vai do bloco 1 ao bloco 3, com o nó vencedor ao lado (5, 5, 4).
Sequência de blocos de 0 até 3 com o número do nó vencedor ao seu lado esquerdo (3, 2, 2, 3). Ao lado dessa sequência, derivado do bloco 0 há outra sequência de outra cor, que vai do bloco 1 ao bloco 3, com o nó vencedor ao lado (5, 5, 4).

Nessa ilustração fica mais claro o fork acontecendo, a “derivação” na sequência de blocos. Os motivos pelos quais os nós validadores não fariam o que foi ilustrado é porque gastaram muito dinheiro minerando o passado e, ao fazer isso, causa uma queda no preço do bitcoin (o que os nós validadores não querem). 

Eu costumo ilustrar com uma situação que a maioria de nós vivenciou quando era criança: quando você estava na porta da escola indagando colegas “se você não entrar, eu não entro”.

Afirmações sobre rede blockchain

Após tudo que aprendemos até aqui sobre rede blockchain, temos algumas afirmações para fazer parte da nossa base de conhecimento e nos instigar a aprender mais:

  • Uma unidade de criptomoeda não é um conjunto de bytes (arquivo txt, png, etc) que você guarda no seu computador ou smartphone, é possível alguém copiar e colar. Ele é, na verdade, um saldo que existe numa rede descentralizada;
  • Para poder usar sua criptomoeda é necessário assinar a transação usando sua chave privada, por isso que ela é privada e só você deve saber qual ela é. Por isso, devs que trabalham com criptomoedas devem entender os mecanismos de segurança para manter as chaves privadas seguras. Se pesquisar um pouco sobre isso, vai acabar encontrando alguns termos interessantes sobre essa área (MPC, enclave computacional, HSM);
  • O processo de consenso do bitcoin (chamado de proof of work) é uma “loteria probabilística”, onde há muito gasto de energia para achar um “número mágico” e com isso chegar num consenso. Atualmente, há outros mecanismos de consenso que funcionam tão bem quanto PoW, vale pesquisar: Proof of Stake, Proof of Resource, Proof of Authority e Federated Byzantine Agreement;
  • Usando a lógica das blockchains é possível não só manter um saldo de uma criptomoeda, como também armazenar outros dados (criptografados ou não) e até fazer processamentos na própria rede. É aí que aparecem os smart contracts e consequentemente o que se chama de Web3, afinal se é possível fazer processamento e armazenamento de dados numa rede descentralizada, muda-se o paradigma da web tradicional (Web2);
  • Por conta desse último ponto surgiram as DAOs (Decentralized Autonomous Organizations), que se utilizam de blockchains para construir e gerir negócios sem fazer deploy do software numa infraestrutura tradicional, mas usa uma rede de blockchain para fazer o deploy.

Conclusões

Entender o processo de criptografia assimétrica, hash e assinatura digital são básicos para qualquer dev que quer se aventurar nessa área, se entender bem os três pilares o raciocínio lógico vai te fazer automaticamente entender várias outras coisas e te instigar a procurar mais a respeito.

Além disso, é importante perceber que os dados estão distribuídos em nós numa rede onde não há um coordenador, ou seja, há um processo de consenso para que não haja divergência dos dados.

Quer ficar por dentro dos assuntos mais quentes da tecnologia? Então assine nossa newsletter:

Banner com a identidade visual da Zup, nele está escrito Assine nossa Newsletter, os melhores conteúdos sobre carreira e tecnologia no seu e-mail. No final, está um botão com "assinar agora".

E você, aprendeu algo que não sabia sobre criptomoedas? Gostaria de mais conteúdos técnicos relacionados à Web3? Um podcast talvez? Então comente qual assunto gostaria de saber mais!

Referências

Imagem referente ao conteúdo com o tema "Rede Blockchain". Na capa do conteúdo, conta com o conceito de blockchain. Folha de papel com ideias ou plano, xícara de café e óculos na mesa.
Staff Engineer
Staff Engineer na Zup, é programador faz 21 anos e já trabalhou com todo tipo de sistema e tecnologia (desde mainframe até microsserviços). Na Zup há quase 3 anos, atuou em projetos como a entrega do PIX em 2020 e recentemente está atuando com blockchain e criptomoedas, participando do liftlab sobre pools de liquidez e stablecoins.

Este site utiliza cookies para proporcionar uma experiência de navegação melhor. Consulte nossa Política de Privacidade.