Escolar Documentos
Profissional Documentos
Cultura Documentos
Training Center
Conectamos
Construindo uma Simples Blockchain
pessoas que querem
aprender algo com JavaScript
relacionado a
desenvolvimento de
Jorge luís Follow
software com gen…
Jan 22, 2018 · 5 min read
Follow
175
https://medium.com/trainingcenter/construindo-uma-simples-blockchain-com-javascript-173183c85632#id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjYwZjQwNjBlNThkNzVmZDNmNzBiZWZmODhjNzk0YTc3NTMyN2FhMzEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJuYm… 1/12
16/08/2019 Construindo uma Simples Blockchain com JavaScript - Training Center - Medium
Training Center Blockchain foi uma das grandes Buzzwords de 2017, foi um tema muito
Conectamos discutido durante o ano. Para algumas pessoas blockchain era a resposta pra
pessoas que querem
aprender algo todos os problemas…O que não é bem assim, nós que somos da área de TI
relacionado a
desenvolvimento de sabemos que não existe bala de prata na questão de resolução de
software com gen… problemas, cada problema pode ser resolvido de diversas formas, “corretas”
Follow ou não.
E a blockchain é uma tecnologia que foi criada para o bitcoin ser possível,
mas isso não a limita sua aplicação em apenas criptomoedas, no projeto
Ethereum, por exemplo, ela te da a possibilidade de criar contratos
https://medium.com/trainingcenter/construindo-uma-simples-blockchain-com-javascript-173183c85632#id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjYwZjQwNjBlNThkNzVmZDNmNzBiZWZmODhjNzk0YTc3NTMyN2FhMzEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJuYm… 2/12
16/08/2019 Construindo uma Simples Blockchain com JavaScript - Training Center - Medium
inteligentes e você pode usar esse conceito para diversas aplicações desde se
você necessita de:
Autenticidade;
175
“A Melhor forma de aprender algo novo é
construindo com suas próprias mãos” .(Roman
Stremedlovskyi)
O Bloco;
A Chain;
https://medium.com/trainingcenter/construindo-uma-simples-blockchain-com-javascript-173183c85632#id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjYwZjQwNjBlNThkNzVmZDNmNzBiZWZmODhjNzk0YTc3NTMyN2FhMzEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJuYm… 3/12
1. O Bloco
16/08/2019 Construindo uma Simples Blockchain com JavaScript - Training Center - Medium
Follow Data;
Hash;
175
Onde a propriedade index como está explicito é a referência do nosso Bloco,
prevHash é o hash do nosso ultimo bloco e é uma propriedade que usaremos
para fazer a validação de blocos, timestamp é a hora que nosso bloco foi
adicionado à Chain, a propriedade data é onde iremos colocar nossos
dados, que na verdade, podem armazenar qualquer coisa seja uma
quantidade de moedas virtuais até mesmo uma certidão de nascimento.
175
Neste arquivo temos só três funções, que estão bem auto-explicativas, uma
vai gerar os hashs dos blocos, uma para criação de novos blocos, e uma para
verificar se o bloco é valido, bem simples de ler e de escrever.
2. A Chain
A chain é um pouco mais complexa, para que isto funcione direito,
precisamos implementar um singleton.
desenvolvimento de 67 }
software com gen… 68
69 return instance;
Follow 70
71 }
72 };
73
175 74 })();
75
76 module.exports = Chain.init();
Agora, vamos dar uma olhada em cada parte do código em nosso arquivo
Chain.js :
Training Center
Nessa primeira parte do código nós importamos o nosso arquivo bloco,
Conectamos declaramos nossa const Chain como uma função auto-executável do
pessoas que querem
aprender algo javascript, na linha 4 declaramos nossa variável instance , essa variavel vai
relacionado a fazer nosso controle do objeto e é com ela que vamos garantir que só
desenvolvimento de
software com gen… teremos uma instancia de Chain (Lembra que eu falei que precisamos de
uma singleton?).
Follow
Depois disso nós declaramos um objeto que será o genesis block da nossa
175 blockchain. (linha 6)
1 function validateChain(chain) {
2 let validChain = true;
3 if(JSON.stringify(chain[0]) !== JSON.stringify(fistBlock)) {
4 validChain = false;
5 return validChain;
6 }
7
8 const temp = [chain[0]];
9
10 for(let i=1; i < chain.length; i++) {
11 if (block.validateBlock(chain[i], temp[i-1])) {
12 temp.push(chain[i]);
13 } else {
14 validChain = false;
15 return validChain;
16 }
17 }
18
19 return validChain;
20
21 }
Nessa função nós primeiro verificamos que o genesis block da chain que
Training Center
Conectamos recebemos é igual ao objeto que declaramos na primeira parte do arquivo.
pessoas que querem Se ele for diferente a gente retorna a chain inválida.
aprender algo
relacionado a
desenvolvimento de
software com gen…
Se o genesis block for válido a gente passar para o nosso loop que verifica
cada bloco da chain que a gente recebeu e compara com a chain que temos
Follow
na memoria se os blocos passarem no teste a gente retorna a variável
validChain como true , se algum bloco falhar na verificação a gente retorna
false.
175
1 function get() {
2 return chain;
3 };
4
5 function last() {
6 return chain.slice().pop();
7 }
8
9 function update(newBlock) {
10 block.validateBlock(newBlock) ? chain.push(newBlock) : console.log('invalid block recived');
11 }
Essas são as funções mais simples do nosso arquivo, basicamente são dois
getters e um setter .
Na função get() nós retornamos nosso array com a chain que está na
memoria, a função last() é auto explicativa e a função update verifica se o
bloco que ele recebeu da rede é valido, se for ele atualiza a chain da
memoria, se não ele cospe aquele console.log() com uma mensagem de
error (eu sei, eu sei, tem maneiras melhores de tratar ou jogar errors, mas
para o nosso exemplo esse basta :D).
https://medium.com/trainingcenter/construindo-uma-simples-blockchain-com-javascript-173183c85632#id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjYwZjQwNjBlNThkNzVmZDNmNzBiZWZmODhjNzk0YTc3NTMyN2FhMzEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJuYm… 9/12
16/08/2019 Construindo uma Simples Blockchain com JavaScript - Training Center - Medium
1 function replace(newChain) {
2 if (validateChain(newChain) && newChain.length > chain.length) {
3 chain.splice(0, chain.length);
4 chain.push(...newChain);
5 } else {
6 console.log('invalid chain recived');
7 }
Training Center 8 }
Conectamos 9
pessoas que querem 10 function create() {
aprender algo 11 return {get, last, update, replace}
relacionado a 12 }
desenvolvimento de
fhrt-part-chain.js hosted with ❤ by GitHub view raw
software com gen…
Follow
Estamos chegando no final do nosso arquivo Chain.js essas são as duas
ultima funções do nosso objeto, na função replace() é usado para substituir
175 nossa chain por outra que a gente receber da rede, nessa função nós usamos
a função validateChain() que definimos no começo do arquivo (segunda
parte) para verificar se o array que recebemos é valido e se ele é maior que a
o array que temos em memória.
1 return {
2 init() {
3 if (!instance) {
4 instance = create();
5 }
6
7 return instance;
8
9 }
10 };
11
12 })();
13
14 module.exports = Chain.init();
https://medium.com/trainingcenter/construindo-uma-simples-blockchain-com-javascript-173183c85632#id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjYwZjQwNjBlNThkNzVmZDNmNzBiZWZmODhjNzk0YTc3NTMyN2FhMzEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJuY… 10/12
16/08/2019 Construindo uma Simples Blockchain com JavaScript - Training Center - Medium
Essa é a ultima parte do nosso arquivo(e da nossa função), que retorna a
função init() que é responsável por verificar se existe uma instancia do
nosso objeto Chain, se existir nós exportamos a nossa instancia, se não
existir, nós criamos a instancia e depois exportamos ela.
Training Center . . .
Conectamos
pessoas que querem
aprender algo
relacionado a Vou parar esse artigo por aqui com nossa base da blockchain implementada,
desenvolvimento de
software com gen… no próximo vou mostrar como vai ser implementado a nossa conexão P2P
usando o modulo webSocket do node.
Follow
Referencias:
Introduction to Blockchain;
Awesome Blockchain;
https://medium.com/trainingcenter/construindo-uma-simples-blockchain-com-javascript-173183c85632#id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjYwZjQwNjBlNThkNzVmZDNmNzBiZWZmODhjNzk0YTc3NTMyN2FhMzEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJuY… 11/12
16/08/2019 Construindo uma Simples Blockchain com JavaScript - Training Center - Medium
About Help Legal
Training Center
Conectamos
pessoas que querem
aprender algo
relacionado a
desenvolvimento de
software com gen…
Follow
175
https://medium.com/trainingcenter/construindo-uma-simples-blockchain-com-javascript-173183c85632#id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjYwZjQwNjBlNThkNzVmZDNmNzBiZWZmODhjNzk0YTc3NTMyN2FhMzEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJuY… 12/12