Like On Facebook

header ads

2. Construindo a Blockchain

 https://www.dtoklab.com/wp-content/uploads/2024/02/blockchain-applicazioni.png
Criando a base da estrutura de uma blockchain simples em Node.js.


Elementos principais de um Blockchain
:
  • 1. Blocos: Contêm dados, o hash do bloco anterior e um hash próprio.
  • 2. Hash: Identificador único gerado a partir do conteúdo do bloco.
  • 3. Encadeamento: Cada bloco referencia o hash do anterior, formando uma cadeia.
  • 4. Proof-of-Work ( PoW ): Processo que valida blocos resolvendo um problema computacional.


     
1. Configuração Inicial
 
Crie um novo projeto Node.js 
 mkdir meuBlockchain
 cd meuBlockchain
 npm init -y

2. Instale dependências necessárias

Para essa introdução, usaremos apenas o módulo crypto, que já está embutido no Node.js.

Estrutura do projeto:
meuBlockchain/
├── block.js ├── blockchain.js ├── app.js └── package.json

3. Criando a Classe Block

Abra o arquivo block.js e comece criando a classe Block:
 const crypto = require('crypto');

 class Block {
     constructor(index, timestamp, data, previousHash = '') {
         this.index = index; // Posição do bloco na cadeia
         this.timestamp = timestamp; // Data e hora do bloco
         this.data = data; // Dados armazenados no bloco
         this.previousHash = previousHash; // Hash do bloco anterior
         this.hash = this.calculateHash(); // Hash do bloco atual
         this.nonce = 0; // Contador usado na mineração
     }

     // Calcula o hash do bloco
     calculateHash() {
         return crypto
             .createHash('sha256')
             .update(
                 this.index +
                 this.timestamp +
                 JSON.stringify(this.data) +
                 this.previousHash +
                 this.nonce
             )
             .digest('hex');
     }

 }

 module.exports = Block;

4. Criando o Bloco Gênesis

Agora, no mesmo arquivo, crie a classe Blockchain para iniciar a cadeia de blocos:
 const Block = require('./block');

 class Blockchain {
     constructor() {
         this.chain = [this.createGenesisBlock()]; // Inicia com o bloco Gênesis
     }

     // Gera o Bloco Gênesis
     createGenesisBlock() {
         return new Block(0, "2024-01-01", "Bloco Gênesis", "0");
     }

     // Retorna o último bloco da cadeia
     getLatestBlock() {
         return this.chain[this.chain.length - 1];
     }

     // Adiciona um novo bloco à cadeia
     addBlock(newBlock) {
         newBlock.previousHash = this.getLatestBlock().hash; // Define o hash anterior
         newBlock.mineBlock(this.difficulty); // Minera o bloco
         this.chain.push(newBlock); // Adiciona à cadeia
     }
 }

 module.exports = Blockchain;
 
5. Testando o Blockchain

No arquivo app.js, inicialize e teste a cadeia de blocos:
 const Blockchain = require('./blockchain');

 // Inicializa o blockchain
 const myBlockchain = new Blockchain();

 // Adiciona novos blocos
 myBlockchain.addBlock(new Block(1, "2024-01-02", { amount: 100 }));
 myBlockchain.addBlock(new Block(2, "2024-01-03", { amount: 50 }));

 // Exibe o blockchain completo
 console.log(JSON.stringify(myBlockchain, null, 4));
 
6 .Executando o Projeto

Execute o programa:
 node index.js

O resultado deve mostrar os hashes dos blocos minerados e a estrutura da blockchain:
 {
     "chain": [
         {
             "index": 0,
             "timestamp": "2024-01-01",
             "data": "Bloco Gênesis",
             "previousHash": "0",
             "hash": "0000abcd... (hash do bloco)",
             "nonce": 1234
         },
         {
             "index": 1,
             "timestamp": "2024-01-02",
             "data": { "amount": 100 },
             "previousHash": "0000abcd...",
             "hash": "0000efgh... (hash do bloco)",
             "nonce": 5678
         },
         {
             "index": 2,
             "timestamp": "2024-01-03",
             "data": { "amount": 50 },
             "previousHash": "0000efgh...",
             "hash": "0000ijkl... (hash do bloco)",
             "nonce": 91011
         }
     ]
 }

Próximos Passos

Agora que você tem uma blockchain funcional com mineração básica, no próximo tutorial vamos implementar transações e um sistema de tokens. Fique ligado no blog! 🚀

Postar um comentário

0 Comentários