Livora Labs · ETH Lima 2026

Livora — Arquitectura del sistema

Plataforma de reciclaje trazable con liquidación de incentivos Web3. Cada kilo pesado y verificado en un centro de acopio se ancla en Arbitrum y dispara el minteo automático de EcoTokens hacia las billeteras de hogares y recolectores.

NestJS 11 Arbitrum Stylus · Rust→WASM PostgreSQL 16 + PostGIS Redis · BullMQ IPFS · Pinata Cloudflare R2 & Turnstile Native JWT Auth Ethers.js v6 Socket.IO

Vista general

App móvil HOGAR · RECOLECTOR App Centro de Acopio pesaje · recepción API Gateway NestJS · REST + WebSockets Auth & Users · wallet custodial Collections · matching PostGIS Batches · idempotencia 409 Stores · B2B · Sales WebSockets · Socket.IO REST · JWT tiempo real Cloudflare R2 Storage S3 · multimedia y docs upload/get PostgreSQL + PostGIS Prisma ORM · dominio y estados SQL Redis · BullMQ blockchain-queue encola · 202 BlockchainProcessor worker asíncrono · Ethers v6 consume IPFS · Pinata manifiesto del lote pin JSON → CID Arbitrum Stylus EcoBatchRegistry · Rust→WASM tarifas × peso · 80/20 on-chain ERC-20 ECO · evento BatchWeighed pesos (g) txHash · evento
El pesaje de un lote responde de inmediato (HTTP 202) y delega a un worker el anclaje en IPFS, la transacción en Arbitrum y la notificación en tiempo real al centro de acopio.

Ciclo de vida de un lote

  1. Pesaje industrialPOST /batches/:id/receive valida el estado IN_TRANSIT y responde 202 Accepted; el lote pasa a PROCESSING.
  2. Encolado resilienteJob en blockchain-queue (BullMQ) con 3 reintentos y backoff exponencial ante fallos de RPC o Pinata.
  3. Manifiesto en IPFSParticipantes, materiales y pesos reales se fijan en Pinata; se obtiene el CID content-addressed.
  4. Preparación de vectoresNormalización de materiales a códigos bytes32, pesos a gramos enteros y resolución de wallets custodiales vía Prisma.
  5. Cálculo y minteo on-chainregister_batch_weighed(id, cid, recolector, hogares[], materiales[], gramos[]): el contrato aplica tarifas (PET 10 ECO/kg, aluminio 15…) y el split 80/20, y mintea atómico a N beneficiarios.
  6. ConfirmaciónEstado RECEIVED en PostgreSQL y evento Socket.IO con el txHash al centro de acopio.

Diseño híbrido on-chain / off-chain

On-chain — Arbitrum Stylus

  • batch_id (bytes32) y timestamp sellados
  • CID de IPFS — ancla criptográfica del manifiesto
  • Saldos ERC-20 de EcoToken y recompensa total del lote
  • Evento BatchRegistered auditable por terceros

Off-chain — IPFS + PostgreSQL

  • Manifiesto completo: desglose por material, kg en báscula
  • Participantes y solicitudes de recolección vinculadas
  • Estados operativos del flujo (OPEN → … → CONSOLIDATED)
  • Geodatos PostGIS para matching por proximidad

El contrato solo almacena el hash CID de 46 caracteres: alterar un byte del manifiesto lo invalida. Arbitrum actúa como notario criptográfico del dato completo a una fracción del costo de guardarlo en la cadena.

Modelo de confianza — resolviendo el oráculo físico

El punto de confianza crítico de todo sistema de trazabilidad es el puente entre el mundo físico y la cadena. Livora lo ataca con verificación cruzada entre actores con intereses contrapuestos (teoría de juegos) y un invariante de conservación de masa.

Capa 1 · Hogar ↔ Recolector hoy

  • El hogar declara itemsEstimated; el recolector valida en persona con PIN de 4 dígitos y confirma lo recogido.
  • Dos partes independientes registran el mismo material: las discrepancias quedan trazadas por solicitud.
  • EcoScore roadmap: precisión ±10% otorga multiplicador de bonificación; desvíos >30% reiterados penalizan reputación y bloquean temporalmente nuevas solicitudes.

Capa 2 · Recolector ↔ Centro hoy

  • El pesaje industrial (materialsActual) se contrasta contra la suma de recolecciones vinculadas al lote.
  • Margen de merma tolerable roadmap: 3–5% por humedad y descarte no reciclable.
  • Si la discrepancia excede el margen, el lote pasa a Auditoría / Disputa y la liberación de tokens se suspende hasta revisión.

Capa 3 · Invariante de conservación de masa roadmap

Un centro de acopio no puede vender ni despachar material que nunca registró como entrada. Los módulos de inventario y transferencias B2B ya registran ambos lados de la ecuación; el sistema valida el invariante al autorizar cada despacho:

∑ salidasB2B(centro, material) ≤ ∑ entradaspesadas(centro, material) × (1 − δmerma)

Inflar un pesaje de entrada genera inventario fantasma que la contabilidad de masa expone en el primer despacho; subdeclarar entradas impide vender el material real. El equilibrio racional de cada actor es reportar el peso verdadero.

Custodia de claves — hoy: billeteras custodiales con clave privada cifrada (AES) por usuario. Roadmap: llave maestra en KMS/HSM, flujo de exportación a self-custody y migración a account abstraction (ERC-4337), nativo en Arbitrum, para que el usuario gradúe de custodial a soberano sin fricción.

Idempotencia en 3 capas — cero pagos duplicados

1 · Redis lockrechaza reintentos simultáneos del mismo lote (HTTP 409)
→
2 · Job ID BullMQun solo job por lote: batch-${batchId}
→
3 · On-chainel mapping processed_batches revierte con BatchAlreadyExists

El acceso al contrato está restringido por roles: solo la wallet del worker backend (o el owner) puede registrar lotes y mintear. Cada usuario recibe al registrarse una billetera Ethereum custodial con clave privada cifrada — usuarios sin experiencia cripto participan sin fricción.

Por qué Stylus y no Solidity

Minteo vectorizado de lotes hoy

  • Un lote industrial consolida 50–100 hogares: register_batch itera y mintea a todos en una transacción atómica.
  • En Solidity, loops de ese tamaño arriesgan out-of-gas; la ejecución WASM itera estructuras dinámicas en memoria a un costo marginal muy inferior al de la EVM interpretada.

Matemática de incentivos on-chain hoy

  • register_batch_weighed recibe pesos en gramos: el contrato aplica las tarifas por material y el split 80/20 con aritmética de punto fijo, y emite el evento BatchWeighed como auditoría pública del cálculo.
  • El backend ya no dicta montos: los tokens se derivan verificablemente de los pesos anclados en IPFS. Tarifas gobernables on-chain (set_material_rate). Equivalencias de CO₂ por polímero: roadmap.

Verificación criptográfica de evidencia roadmap

  • Validación de pruebas de Merkle sobre el manifiesto IPFS (fotos, recolecciones individuales) con librerías nativas de Rust, antes de autorizar el minteo.
  • Verificar hashes y estructuras de datos complejas es prohibitivo en gas EVM; en WASM es cómputo casi nativo.

Seguridad por construcción hoy

  • El borrow checker de Rust elimina clases enteras de errores de memoria y aritmética en compilación.
  • Reentrada desactivada por defecto a nivel de VM en Stylus — sin depender de guards externos.
  • Sin el límite stack too deep de Solidity al manejar lotes con metadatos ricos (pesos por material, participantes, geodatos).

Stack y despliegue

CapaTecnologíaRol
Smart contractRust + Stylus SDK → WASMERC-20 EcoToken + registro inmutable de lotes en un solo contrato; ABI 100% compatible con EVM. Desplegado en Arbitrum Sepolia.
BackendNestJS 11 · Prisma · Ethers v6API Gateway modular, worker BullMQ, firma de transacciones con wallet en custodia.
DatosPostgreSQL 16 + PostGIS · Redis 7Dominio y trazabilidad operativa; colas y adapter de Socket.IO.
IdentidadNative JWT AuthMotor nativo: credenciales con hashing Bcrypt (12 rondas OWASP), refresh tokens rotativos y sesiones gestionadas en Redis.
InfraestructuraAWS Lightsail · Docker ComposeAPI + Postgres + Redis en contenedores; entorno alterno en Render.