Projeto educacional para explorar e entender a arquitetura e os processos por trás de uma Blockchain com algoritmo de consenso Proof-of-Work, usando JavaScript e Node.js.
- 📦 Sobre o Projeto
- 🛠️ Tecnologias Utilizadas
- 🏗️ Estrutura do Projeto
- 🔐 Funcionamento da Blockchain
- ⛏️ Protocolo de Consenso: Proof-of-Work
- 🔄 Rede Peer-to-Peer
- 💳 Carteira e Transações
- 📡 API REST
- 🚀 Como Executar
- 🤝 Contribuição
- 📄 Licença
Este é um protótipo funcional e didático de uma Blockchain com algoritmo Proof-of-Work (PoW) que inclui:
- Criação de blocos e conexão com blocos anteriores.
- Geração de hash criptografado usando SHA256.
- Bloco gênesis (bloco inicial).
- Criação de uma API REST para comunicação com a blockchain.
- Implementação de um servidor P2P para mineradores.
- Validação e sincronização de blockchains entre peers.
- Simulação de uma carteira de transações.
- Criação de objetos de transação e pool de transações (mempool).
- JavaScript
- Node.js
- Express – API HTTP
- crypto-js – Criptografia SHA256
- WebSocket – Comunicação entre pares (P2P)
📁 blockchain/
┣ 📄 block.js ← Classe do Bloco
┣ 📄 blockchain.js ← Classe principal da Blockchain
┣ 📄 transaction.js ← Modelo de transação
┣ 📄 transactionPool.js ← Pool de transações pendentes
┣ 📄 wallet.js ← Lógica da carteira
┣ 📄 p2pServer.js ← Servidor Peer-to-Peer
┗ 📄 apiServer.js ← Servidor da API REST
---
## 🔗 Funcionalidades
- ✅ Criação de blocos com dados encadeados por hash
- ✅ Bloco genesis fixo e validado
- ✅ Algoritmo de mineração Proof-of-Work
- ✅ Validação da blockchain (estrutura e integridade)
- ✅ Servidor HTTP com rotas de API
- ✅ Rede peer-to-peer para sincronização de blocos
- ✅ Carteiras com chaves públicas e privadas (criptografia)
- ✅ Transações assinadas com validação de saldo
- ✅ Pool de transações (mempool)
- ✅ Mineração de blocos contendo as transações pendentes
- ✅ Atualização automática da blockchain entre os peers
---
## 📡 API REST - Endpoints
| Método | Rota | Descrição |
|--------|--------------------|--------------------------------------------|
| GET | `/blocks` | Retorna todos os blocos da blockchain |
| POST | `/transact` | Cria nova transação |
| GET | `/transactions` | Lista as transações pendentes na mempool |
| GET | `/mine` | Inicia mineração de um novo bloco |
| GET | `/balance` | Mostra o saldo atual da carteira local |
| GET | `/public-key` | Retorna a chave pública da carteira local |
---
## 🧪 Como Executar Localmente
### 1. Clone o Repositório
```bash
git clone https://github.com/seu-usuario/simple-blockchain.git
cd simple-blockchain