Ecosistema Bitcoin: Mining e Puzzles Criptográficos – demonstrados na prática. Parte 1.

anastasia-zhenina-194730-unsplash

Quando se fala em Bitcoin, já quase todos ouviram falar em mining e alguns até em puzzles criptográficos.

Mas afinal, o que são? Porque existem? E como funcionam na prática?

Este tema pode parecer extremamente chato e meramente técnico, mas na verdade é bem mais importante do que parece.

Saber as respostas a estas questões permite-nos falar com mais propriedade e confiança sobre Bitcoin e Blockchain do que a grande maioria das pessoas.

Aqueles que têm lido os meus textos provavelmente já sabem que existem três tipos de agentes no protocolo Bitcoin: os nodes, os miners e as SPV’s.

A função dos miners é, especificamente, a de validação de transações. Esse processo de validação é conhecido por mining e as transações são validadas através da resolução de um puzzle criptográfico.

Entender as nuances de um puzzle criptográfico é ficar verdadeiramente a conhecer as especificidades por trás do protocolo Bitcoin.

(No meu último artigo, explico a função de cada agente do protocolo Bitcoin e tento exemplificar como funcionam as transações com bitcoin. Se, em algum momento, tiverem dificuldade em acompanhar este post, sugiro que leiam o artigo primeiro).

Então vamos lá. Primeiro que tudo, o que é um puzzle criptográfico?

Para o efeito, voltamos a usar a minha definição mais simplista de protocolo blockchain: uma corrente de blocos criptograficamente ligados para guardar informação sobre transações.

E voltamos igualmente a recorrer a um link que partilhei anteriormente quando falámos de hash functionshttps://anders.com/blockchain/block.html

Hoje vou ainda usar alguns print screens.

Screen Shot 2018-02-20 at 11.06.11Na imagem acima temos um bloco, com as seguintes transações:

“TX 1: Alice enviou 5 BTC para Bob”

“TX 2: Bob enviou 5 BTC para Ze”

Como podemos ver, é composto por quatro elementos: block number (número do bloco), Nonce, Data e Hash. Onde Hash é o único campo não editável.

Se experimentarmos alterar qualquer informação no bloco, por exemplo alterando o valor de uma das transações de 5 BTC para 4 BTC, o valor do Hash altera-se automaticamente.

Hash é a impressão digital única de cada bloco. É (quase) matematicamente impossível existirem dois blocos com o mesmo Hash.

(Se não sabem o que é uma hash function sugiro que leiam o meu artigo sobre hash functions, private keys e public keys).

Como se pode verificar, no exemplo acima, o Hash começa com quatro zeros. Não é por acaso. Estes quatro zeros no início do Hash, estão relacionados com o nível de dificuldade de mining ou Mining Difficulty (em inglês). Iremos abordar este ponto mais à frente.

Continuando, como estamos a falar do protocolo Bitcoin, o campo “Data” (ou Dados, traduzido em português) é composto por transações. Neste caso são duas mas podiam ser mais, ou menos.

Block Number é mais obvio, é apenas o número atribuído ao bloco.

O que nos deixa, finalmente, com o quarto elemento: Nonce.

Nonce é um número aleatório. De forma a exercer a sua função de mining, isto é, de forma a resolver o puzzle criptográfico, os miners precisam, nada mais nada menos, que “adivinhar” um valor do Nonce que garanta um Hash válido.

“Adivinhar” este valor requer poder computacional pois é feito através de múltiplas tentativas. Manualmente seria quase impossível encontrar um valor do Nonce que garantisse um Hash válido, ou demoraria demasiado tempo. Na verdade, é isto que os miners fazem o dia todo.

Mas afinal o que é um Hash válido?

Para responder a esta pergunta, precisamos explorar os conceitos de Mining Target (objetivo de mining) e Mining Difficulty (dificuldade de mining).

Como vimos, para o miner validar uma transação, ele precisa “adivinhar” um determinado valor do Nonce. Esse valor tem que garantir que o Hash do bloco é inferior ao objetivo de mining, ou Mining Target.

Quanto menor for o objetivo de mining, maior será a dificuldade de mining.

Peguemos no valor do Hash na imagem acima: 0000d5e158ef1b8ab675d530644407f5ac3433203d6cbfcfa9f8955286dcab2f. Cada Hash contem 64 caracteres.

Agora imaginemos que as letras do alfabeto são igualmente números e que representam também elas um valor. Podemos pensar no A como o valor a seguir ao 9, no B como o valor a seguir ao A e por aí adiante.

No mundo computacional, tudo se resume a 0’s e 1’s por isso não é descabido assumirmos tal coisa.

Continuem comigo.

Num exemplo paralelo, pensemos na combinação 118, que é superior à combinação 117. Da mesma forma, também a combinação 11A será superior à combinação 119. Porque A é o caracter que se segue ao 9 na cadeia de valor. Concordam?

Assim, ordenando estas quatro combinações da maior para a menor, temos:

11A < 119 < 118 < 117 .

E poderíamos continuar: 116 < 115 < 114 < 113 < 112 < 111 < 110 < 10Z < 10Y < 10X < …

Até eventualmente acabarmos na combinação 000.

Confusos? Requer um pouco de ginástica mental mas com um pouco de esforço chegamos lá.

Este exemplo serviu para ilustrar o seguinte. Imaginemos uma lista ordenada de Hashes de 64 caracteres compostos por todas as combinações possíveis de números de 0 a 9 e letras de A a Z.

E imaginemos, como referi acima, que as letras também representam um valor. Por exemplo, o A é o valor seguinte ao 9. E o B o valor seguinte ao A.

Facilmente percebemos que as combinações que começam com muitos zeros surgem em primeiro nessa lista. Essas são as combinações com “menor” valor.

Ou melhor, se imaginarmos essa lista ordenada na vertical da maior combinação para a menor, as combinações que começam por muitos zeros aparecem todas cá em baixo.

Vejamos a seguinte representação gráfica.

Screen Shot 2018-02-19 at 21.06.11

Definido o Mining Target (seta a vermelho), todas as Hashes abaixo desse target são soluções do nosso puzzle criptográfico.

Assim, os miners precisam “apenas” de adivinhar o Nonce do bloco que garanta um Hash válido, isto é, que seja abaixo do Mining Target.

Podemos agora perceber, na prática, o porquê de um objetivo de mining (Mining Target) baixo significar uma maior dificuldade de mining (Mining Difficulty).

Como é fácil observar, existem menos Hashes que são possíveis soluções do puzzle criptográfico. Assim, será mais difícil para o miner encontrar um Nonce que garanta um Hash válido do bloco.

Se o Mining Target aumentar, passam a existir automaticamente mais Hashes válidos e torna-se mais fácil a resolução do puzzle criptográfico.

Vamos então terminar de forma mais prática para todos perceberem.

Voltemos ao link que partilhei acima e acrescentemos a seguinte transação:

“TX 3: Alice enviou 5 BTC para Pedro”

Screen Shot 2018-02-20 at 11.07.55Como podemos observar, o bloco ficou agora vermelho e o Hash obtido é: 49d8cb3e7e548f8461b0eebf0a751e916a4dc1703e4868fffb6058002c6b8943

Obtivemos um Hash inválido. Não começa por quatro zeros, como o Hash do nosso bloco anterior com duas transações. Significa que está acima do Mining Target.

Observemos também que o Nonce do nosso bloco é atualmente 85368.

Vamos então validar o nosso bloco e clicar no botão azul “Mine“.

Screen Shot 2018-02-20 at 11.09.43Pronto. Temos agora um bloco válido (verde) e um Hash que começa por quatro zeros. Reparemos ainda no novo valor do Nonce: 54373.

O que aconteceu?

Basicamente, o simulador que estamos a utilizar simulou o processo de mining. Isto é, por tentativas, testou vários valores do Nonce que garantissem um Hash válido, até finalmente encontrar um.

Sugiro agora que testem e experimentem vocês mesmos. Nada como praticar para perceber.

Espero que esteja agora mais claro para todos como funciona na prática este aspeto tão importante dos protocolos blockchain.

Na segunda parte deste artigo, vamos ver quais as suas implicações e ainda explorar os conceitos de Block Interval (intervalo do bloco), Block Reward (recompensa do bloco) Stale Block (bloco obsoleto).

 

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google photo

Está a comentar usando a sua conta Google Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s

search previous next tag category expand menu location phone mail time cart zoom edit close