Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔗 Complete Blockchain Network

Una implementación completa de blockchain para Windows 11 usando Go (Golang) con consenso, memoria compartida, almacenamiento de 1GB y ejecución de programas en la blockchain.

🚀 Características

  • Blockchain Completa: Implementación completa con bloques, transacciones y Proof of Work
  • Consenso Proof of Work: Mecanismo de consenso robusto con dificultad ajustable
  • Gestión de Memoria Compartida: Gestión inteligente de RAM con límites configurables
  • Almacenamiento 1GB: Sistema de almacenamiento persistente con límite de 1GB
  • Smart Contracts: Motor de ejecución de contratos inteligentes con máquina virtual
  • Red P2P: Sistema de red distribuida para nodos de blockchain
  • API REST: Servidor API completo para interacción con la blockchain
  • Interfaz Web: Dashboard web para gestión y monitoreo

🛠️ Requisitos

  • Windows 11
  • Go 1.19 o superior
  • Puerto 8080 y 8081 disponibles (configurables)

📦 Instalación

1. Clonar/Descargar el Proyecto

# Si tienes los archivos en tu directorio actual:
cd c:\Users\victor.Batou\Desktop\blockchain

2. Instalar Dependencias

go mod tidy

3. Construir la Aplicación

go build -o blockchain.exe

🎯 Uso Rápido

Iniciar el Nodo Blockchain

# Iniciar con configuración por defecto
./blockchain.exe

# O con parámetros personalizados
./blockchain.exe -api-port=8080 -p2p-port=8081 -auto-mine=true -miner=mi_direccion

Acceder al Dashboard Web

Abrir navegador web en: http://localhost:8080

Usar la API REST

# Verificar estado del sistema
curl http://localhost:8080/api/health

# Ver estadísticas de la blockchain
curl http://localhost:8080/api/status

# Crear una transacción
curl -X POST http://localhost:8080/api/transactions \
  -H "Content-Type: application/json" \
  -d '{"from":"alice","to":"bob","amount":10}'

# Minar un bloque
curl -X POST http://localhost:8080/api/blocks/mine \
  -H "Content-Type: application/json" \
  -d '{"miner_address":"miner1"}'

📋 Parámetros de Configuración

-node-id string        # Identificador del nodo (por defecto: generado automáticamente)
-api-port int         # Puerto del servidor API (por defecto: 8080)
-p2p-port int         # Puerto de red P2P (por defecto: 8081)
-p2p-address string   # Dirección P2P (por defecto: 127.0.0.1)
-storage string       # Directorio de almacenamiento (por defecto: ./blockchain_data)
-max-ram int          # Máximo RAM en MB (por defecto: 512)
-max-storage float    # Máximo almacenamiento en GB (por defecto: 1.0)
-miner string         # Dirección del minero (por defecto: miner_address_default)
-auto-mine            # Habilitar minería automática (por defecto: false)
-bootstrap string     # Peer de arranque para conectar

🔧 Funcionalidades Avanzadas

1. Smart Contracts

Despliega y ejecuta contratos inteligentes:

# Desplegar contrato
curl -X POST http://localhost:8080/api/contracts \
  -H "Content-Type: application/json" \
  -d '{
    "owner": "developer1",
    "code": "FUNCTION increment\nSET counter 1\nSTORE counter\nRETURN\nEND",
    "gas_limit": 100000
  }'

# Ejecutar función del contrato
curl -X POST http://localhost:8080/api/contracts/{address}/execute \
  -H "Content-Type: application/json" \
  -d '{
    "function": "increment",
    "parameters": {},
    "gas_limit": 50000
  }'

2. Red P2P

Conectar múltiples nodos:

# Nodo 1 (puerto 8080/8081)
./blockchain.exe -node-id=node1 -api-port=8080 -p2p-port=8081

# Nodo 2 (puerto 8082/8083)  
./blockchain.exe -node-id=node2 -api-port=8082 -p2p-port=8083

# Conectar nodos
curl -X POST http://localhost:8080/api/network/peers \
  -H "Content-Type: application/json" \
  -d '{
    "node_id": "node2",
    "address": "127.0.0.1",
    "port": 8083
  }'

3. Gestión de Memoria y Almacenamiento

Monitorear recursos:

# Estadísticas de memoria
curl http://localhost:8080/api/memory/stats

# Estadísticas de almacenamiento  
curl http://localhost:8080/api/storage/stats

# Almacenar datos personalizados
curl -X PUT http://localhost:8080/api/storage/data/mi_clave \
  -H "Content-Type: application/json" \
  -d '"mis datos"'

📊 API Endpoints Completos

Blockchain

  • GET /api/blockchain - Obtener blockchain completa
  • GET /api/blockchain/stats - Estadísticas de blockchain
  • GET /api/blocks - Obtener bloques (paginados)
  • GET /api/blocks/{index} - Obtener bloque específico
  • POST /api/blocks/mine - Minar bloque

Transacciones

  • POST /api/transactions - Crear transacción
  • GET /api/transactions/pending - Transacciones pendientes
  • GET /api/transactions/{id} - Obtener transacción

Balances

  • GET /api/balances/{address} - Balance de dirección
  • GET /api/balances - Todos los balances

Smart Contracts

  • POST /api/contracts - Desplegar contrato
  • GET /api/contracts - Listar contratos
  • GET /api/contracts/{address} - Obtener contrato
  • POST /api/contracts/{address}/execute - Ejecutar función
  • GET /api/contracts/{address}/storage - Storage del contrato

Sistema

  • GET /api/health - Estado del sistema
  • GET /api/status - Estadísticas completas
  • GET /api/memory/stats - Estadísticas de memoria
  • GET /api/storage/stats - Estadísticas de almacenamiento
  • GET /api/network/stats - Estadísticas de red

🎮 Ejemplos de Uso

Ejemplo 1: Sistema de Votación

# 1. Desplegar contrato de votación
curl -X POST http://localhost:8080/api/contracts \
  -d '{
    "owner": "admin",
    "code": "FUNCTION vote\nGET candidate\nPUSH 1\nADD\nSTORE candidate\nEMIT VoteCast\nRETURN\nEND",
    "gas_limit": 200000
  }'

# 2. Votar por candidato
curl -X POST http://localhost:8080/api/contracts/{address}/execute \
  -d '{
    "function": "vote",
    "parameters": {"candidate": "alice"},
    "gas_limit": 50000
  }'

Ejemplo 2: Token Simple

# 1. Desplegar token
curl -X POST http://localhost:8080/api/contracts \
  -d '{
    "owner": "token_creator",
    "code": "FUNCTION transfer\nGET from\nGET amount\nSUB\nSTORE from\nGET to\nGET amount\nADD\nSTORE to\nEMIT Transfer\nRETURN\nEND",
    "gas_limit": 300000
  }'

# 2. Transferir tokens
curl -X POST http://localhost:8080/api/contracts/{address}/execute \
  -d '{
    "function": "transfer",
    "parameters": {"from": "alice", "to": "bob", "amount": 100},
    "gas_limit": 75000
  }'

🔍 Monitoreo y Debugging

Logs del Sistema

El sistema genera logs detallados en la consola:

📦 Initializing storage manager (1.0 GB limit)...
🧠 Initializing shared memory pool (512 MB limit)...
⛓️ Initializing blockchain...
🎯 Created new blockchain with genesis block
🤖 Initializing smart contract virtual machine...
🌐 Initializing P2P network (Port: 8081)...
🚀 Initializing API server (Port: 8080)...

Verificar Estado

# Estado general
curl http://localhost:8080/api/status | jq

# Solo blockchain
curl http://localhost:8080/api/blockchain/stats | jq

# Solo memoria  
curl http://localhost:8080/api/memory/stats | jq

🚨 Resolución de Problemas

Error: Puerto en Uso

# Cambiar puertos
./blockchain.exe -api-port=9080 -p2p-port=9081

Error: Memoria Insuficiente

# Reducir límite de RAM
./blockchain.exe -max-ram=256

Error: Almacenamiento Lleno

# Cambiar directorio de datos
./blockchain.exe -storage="D:\blockchain_data"

📁 Estructura del Proyecto

blockchain/
├── main.go           # Punto de entrada principal
├── blockchain.go     # Estructuras core de blockchain
├── memory.go         # Gestión de memoria compartida
├── storage.go        # Sistema de almacenamiento 1GB
├── contracts.go      # Motor de smart contracts
├── network.go        # Red P2P distribuida
├── api.go           # Servidor API REST
├── go.mod           # Dependencias Go
├── go.sum           # Checksums de dependencias
├── web/             # Interfaz web
│   └── index.html   # Dashboard web
└── blockchain_data/ # Datos persistentes (creado automáticamente)

🔐 Seguridad

  • Validación de Transacciones: Verificación de balances y firmas
  • Proof of Work: Consenso robusto contra ataques
  • Límites de Gas: Prevención de loops infinitos en contratos
  • Gestión de Memoria: Límites estrictos para prevenir ataques DoS
  • Validación de Bloques: Verificación completa de integridad

🚀 Optimización de Rendimiento

  • Memoria Compartida: Pool de contextos reutilizables
  • Limpieza Automática: Garbage collection periódico
  • Almacenamiento Eficiente: Compresión y índices optimizados
  • Red P2P Asíncrona: Comunicación no bloqueante
  • API Cache: Respuestas optimizadas

🤝 Contribuir

  1. Fork el proyecto
  2. Crear branch de feature (git checkout -b feature/AmazingFeature)
  3. Commit cambios (git commit -m 'Add AmazingFeature')
  4. Push al branch (git push origin feature/AmazingFeature)
  5. Abrir Pull Request

📝 Licencia

Este proyecto está bajo la Licencia MIT - ver el archivo LICENSE para detalles.

📞 Soporte

  • Issues: Reportar bugs y solicitar features
  • Wiki: Documentación extendida
  • Discussions: Preguntas y discusiones de la comunidad

Hecho con ❤️ para Windows 11 y Golang

About

nodo blockchain

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages