⚠️ ESTADO DEL PROYECTO:
BORRADOR - EN DESARROLLO, NO DEFINITIVO
Sistema distribuido para el procesamiento masivo y análisis de bloques de Ethereum, utilizando una arquitectura de colas de mensajes con múltiples consumidores paralelos y almacenamiento persistente de eventos.
- Productor: Genera mensajes con rangos de bloques a procesar
- Mensajes: Cada mensaje contiene:
- Rango de bloques (inicio-fin)
- Tarea específica a ejecutar por bloque definida con un codigo.
- Cola de reintentos: Los mensajes fallidos se reenvían automáticamente
- Configuración: Base de datos postgresql con URLs de endpoints RPC de Ethereum que obtenemos de logs-eth/rpcs.json. Las migraciones de la base de datos se haran con flyway.1
{
"name": "LlamaRPC",
"url": "https://eth.llamarpc.com",
"lastBlock": 23654300,
"date": "2025-10-25T11:53:23.000Z",
"active": true,
"tested": true,
"executionTime": "42.94s"
}- Gestión desde Web:
- Activar/desactivar RPCs en tiempo real
- Visualizar estado de cada endpoint
- Asignación inteligente: Los consumidores seleccionan automáticamente RPCs disponibles y no utilizados
- Biblioteca: Ethers.js para todas las interacciones con la blockchain
- Procesamiento paralelo: Múltiples consumidores trabajando simultáneamente
- Tolerancia a fallos:
- Detección automática de errores
- Reenvío del mensaje a la cola
- Terminación segura del consumidor fallido
- Asignación exclusiva de RPC: Cada consumidor usa un endpoint diferente
- Inicio: Registro en BD con estado "en proceso"
- Procesamiento:
- Obtención de bloques del rango asignado
- Extracción de transacciones y eventos
- Decodificación de eventos usando 4byte.directory API
- Finalización:
- Estado "finalizado" si completa exitosamente
- Estado "fallido" si encuentra errores
Almacena cada evento procesado con la siguiente estructura:
- Identificadores: Hash de bloque, hash de transacción
- Metadatos del evento: Nombre, signature hexadecimal
- Parámetros decodificados: Hasta 20 columnas (param_1 a param_20) para datos del evento
- Timestamps: Marca temporal del bloque
Registro agregado del proceso completo:
- Total de bloques procesados
- Tiempo total de ejecución
- Número de consumidores fallidos
- Tasa de procesamiento (bloques/segundo)
Registro individual de cada ejecución:
- Identificación: ID de consumidor, RPC utilizado
- Rendimiento:
- Tiempo de ejecución
- Bloques procesados
- Eventos extraídos
- Número de fallos/reintentos
- Estado: En proceso / Finalizado / Fallido
- Timestamps: Inicio y fin de ejecución
Gestión de endpoints:
- URL del RPC
- Estado (activo/inactivo)
- Métricas de uso y rendimiento
- Última actualización
- Endpoint:
https://www.4byte.directory/api/v1/event-signatures/ - Propósito: Resolución de signatures hexadecimales a nombres legibles de eventos
- Uso: Decodificación automática de eventos de contratos inteligentes
-
Dashboard en tiempo real:
- Métricas globales del sistema
- Progreso del procesamiento de bloques
- Estado de consumidores activos
-
Gestión de RPCs:
- Lista de todos los endpoints configurados
- Toggle activar/desactivar RPCs
- Métricas de rendimiento por RPC
-
Visualización de métricas:
- Gráficos de rendimiento histórico
- Tabla de consumidores con sus estadísticas
- Logs de errores y fallos
-
Monitoreo:
- Consumidores activos vs fallidos
- Velocidad de procesamiento actual
- Estimación de tiempo restante
Para el manejo de migraciones de la basae de datos usaremos flyway.
docker run -d \
--name ethereum-processor-db \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=mi_contraseña \
-e POSTGRES_DB=ethereum_events \
-p 5432:5432 \
postgres:latestRABBITMQ_URL: URL de conexión a RabbitMQPOSTGRES_CONNECTION: String de conexión a PostgreSQLETHEREUM_START_BLOCK: Bloque inicial (x)ETHEREUM_END_BLOCK: Bloque final (y)WORKER_INSTANCES: Número de consumidores paralelos
- Inicialización: Creación de mensajes para rangos de bloques (x → y)
- Distribución: RabbitMQ distribuye mensajes a consumidores disponibles
- Procesamiento:
- Consumidor obtiene bloque via RPC exclusivo
- Extrae transacciones y eventos
- Decodifica eventos usando 4byte.directory
- Almacena en PostgreSQL
- Monitoreo: Panel web muestra métricas en tiempo real
- Recuperación: Mensajes fallidos se reencolan automáticamente
- ✅ Escalabilidad horizontal: Añade más consumidores según necesidad
- ✅ Resiliencia: Manejo automático de fallos y reintentos
- ✅ Observabilidad: Métricas detalladas de cada componente
- ✅ Flexibilidad: Gestión dinámica de RPCs sin downtime
- ✅ Trazabilidad: Registro completo de eventos y transacciones procesadas