Blockchain Parte2

PoW atua como um intermediário não-humano entre os negociadores de criptomoedas. Em média, uma transação em bitcoin dura 10 minutos.

Categoria de Tecnologia

Postado em 10 abril 2022

Atualizado em 21 julho 2022

Palavras-chave: cryptocurrency,criptomoeda,dinheiro,virtual,digital,blockchain,pow,proof,work

Visualizações: 1024

Este tópico é uma continuação da postagem abaixo. Caso não tenha lido ainda, é recomendável entender a parte 1.

Blockchain Parte 1

Blockchain está em constante evolução. Já é possível notar algumas diferenças entre a pioneira Bitcoin e as criptomoedas mais recentes.

Para adicionar um bloco na corrente(chain), é necessário passar pela PoW.

Diferente de transações de cartão de crédito e pix, criptomoedas não possuem intemerdiários financeiros. Ou seja, todas as transações no blockchain não são verificadas por humanos, e sim por máquinas

O que é PoW no blockchain?

PoW é a sigla para Proof-of-work. Em português pode ser traduzido para algo como, prova de trabalho.

PoW existe para que seja possível realizar transações com criptomoedas. Em criptomoedas como bitcoin, todas as transações terão que passar pelo PoW, que é como se fosse um autorizador de transações.

PoW atua como um intermediário não-humano entre os negociadores de criptomoedas. Em média, uma transação em bitcoin dura 10 minutos. Todo esse tempo é resultado da demora do processo de autorização da PoW.

PoW é um processo muito simples, porém difícil de ser resolvido.

class Bloco{
	constructor(...) {
		this.hash = this.getHash();
		this.nonce = 0;
		this.timestamp = ...;
		this.data = ...;
		...
    }

	// Gera um hash
	calculateHash() {
		return SHA256(this.previousHash + this.timestamp + JSON.stringify(this.data) + this.nonce).toString();
	}
	
	...

    // PoW
    function proofOfWork(difficulty) {
	    // Enquanto o número de zeros no prefixo do hash
	    // não for igual ao número de
	    // zeros necessários, esse loop
	    // continuará infinitamente (em média demora 10 minutos)
    	while (this.hash.substring(0, difficulty) !== Array(difficulty + 1).join('0') {
    		this.hash = this.calculateHash();
    		this.nonce++;
    	}
	}
}

No código acima podemos observar no método “proofOfWork” que um while está sendo utilizado.

Cada vez que o while for repetido, adicionamos 1 à variável nonce. Essa variável será aumentada até o número de zeros no prefixo do hash ficar igual ao número de zeros necessário. Se explicarmos em detalhes:

Não
Sim
PoW
1.
2.
3.
Explicação gráfico acima

1. O número de zeros consecutivos no prefixo do hash é igual ao número de zeros necessário? (Sim ou não)
2. Aumenta o nonce do bloco atual (this.nonce++)
3. Bloco é gerado e adicionado ao blockchain. Processo é finalizado

Um computador mediano pode repetir o while mais de 100.000 vezes por segundo. Ou seja, se o tempo de demora da PoW é de 10 minutos, logo podemos afirmar o seguinte:

x = Hashs gerados por segundo
y = Tempo para o PoW ser processado em minutos

x=100.000(y60)x=100.000(1060)x=100.000600x=60.000.000 \begin{align*} x= 100.000 * (y * 60) \\ x= 100.000 * (10 * 60) \\ x = 100.000 * 600 \\ x = 60.000.000 \end{align*}

São em média 60 milhões de hashs gerados até o processo ser concluído. Isso não é pouca coisa.

PoW foi introduzido principalmente para criar um consenso entre os usuários que possuem a criptomoeda. Uma vez que cada transação precisa passar por esse processo fica difícil fazer fraudes.

Porém essa técnica tem algumas grandes desvantagens, como altíssimo consumo de energia.

O alto consumo de energia com blockchains que usam PoW tem sido alvo de várias críticas, segundo algumas reportagens, bitcoin chega a usar mais energia do que alguns países.

Hoje, esse sistema já está sendo substituído pelo PoS (Proof of stake), que não gasta tanta energia.

blockchain

Conclusão

Bitcoin tem grandes vantagens por não ser administrada de modo centralizado. Isso gera bastante transparência atraindo muitos investidores de todo o mundo.

Porém seu alto índice de consumo de energia é um grande problema, que já está sendo trabalhado.

Projetos práticos

Desenvolvendo um jogo de quebra blocos em javascript

Programando um jogo clássico de arcade usando javascript e p5.js. O usuário deve quebrar os blocos utilizando uma bola ao mesmo tempo que evita que a bola saia pela parte inferior da tela

Tutorial de programação do jogo da serpente em javascript

Programando o clássico jogo da serpente usando o framework p5.js. Tutorial indicado para iniciantes da programação que querem aprender os conceitos básico da área criando jogos.

Usando dados fornecidos pelo TSE para simular o gráfico das eleições presidenciais de 2022

Simulação dos gráficos do segundo turno das eleições presidenciais, utilizando python e ferramentas de análise de dados, pandas e jupyter.

Criando o esqueleto de um jogo de tiro 2D visto de cima usando P5.js

Usando lógicas matemáticas como trigonometria para criar e calcular o esqueleto de um jogo de tiro 2D em javascript

Criando um sistema de integração contínua (CI/CD)

Fazendo a integração contínua de Jenkins, Sonatype Nexus, Sonatype, JUnit e Gradle para automatizar processos repetitivos. Prática bastante usada em tecnologias de DevOps.

Veja também

Um algoritmo não pode ser composto por instruções ambíguas, isso pode trazer resultados inesperados

Os algoritmos na ciência da computação são o principal meio para o desenvolvedor poder escrever instruções para o computador, operando a sua maneira

Pessoas sem um endereço não podem utilizar os correios. Dispositivos sem um endereço não podem acessar a internet.

Quando nos conectamos à internet, nós recebemos um endereço IP. O endereço IP é o nosso endereço virtual que vai servir como localização para a transferência de dados na internet

Modelo OSI

Modelo teórico dividido em sete camadas que fornece uma arquitetura padrão de rede para realizar a transferência de dados entre computadores.

Hub, Switch e Roteador

Se destacam o hub, switch e o roteador como dispositivos que possibilitam o estabelecimento de uma rede local. Cada dispositivo possui suas vantagens.

Protocolos de e-mail

Ao todo, temos três protocolos que usados para o envio e o recebimento de e-mails. Esses protocolos são SMTP, POP3 e IMAP.

DHCP

O DHCP é um protocolo que automatiza o processo de atribuição de informações que são necessárias para um dispositivo poder se conectar à internet.