Euro-Ecommerce: Una Stablecoin Propia para Comercio Descentralizado

Más Allá del Simple "Pago en Crypto"

La gran mayoría de los proyectos de e-commerce Web3 simplemente aceptan ETH o USDC como método de pago. Este proyecto va un paso más: emite su propia stablecoin vinculada al Euro (EURT) y construye sobre ella un ecosistema completo de comercio electrónico.

Arquitectura del Ecosistema

El proyecto es un monorepo compuesto por cuatro subproyectos que interactúan entre sí:

ecommerce/ ├── sc-ecommerce/ ← Smart Contracts de la tienda (Solidity/Foundry) ├── stablecoin/sc/ ← Smart Contract del token EURT (ERC-20) ├── web-customer/ ← dApp para compradores (Next.js) └── web-admin/ ← Dashboard de administración (Next.js)

El Token EURT

// Token estable vinculado al Euro // Precisión: 6 decimales (como USDC, representa céntimos) // Emisión controlada: solo el owner puede hacer mint // Estándar: ERC-20 (OpenZeppelin)

La decisión de usar 6 decimales (en lugar de los 18 estándar de ETH) es intencional: representa céntimos de Euro, evitando problemas de truncamiento en los cálculos de precio.

On-ramp Fiat → Crypto

El flujo más interesante es el on-ramp: cómo pasar de dinero fiat al token EURT.

Usuario paga con tarjeta → Stripe procesa el pago ↓ Webhook de Stripe notifica al backend ↓ Backend verifica el pago y llama mint() en el contrato EURT ↓ EURT aparecen en el wallet del usuario

Smart Contracts de la Tienda

El contrato de ecommerce usa una arquitectura de Librerías Modulares en Solidity:

Librería Responsabilidad
CompanyLib Registro y activación de comercios
ProductLib CRUD de productos, control de stock on-chain
CustomerLib Registro de clientes
ShoppingCartLib Carrito y cálculo de totales

Los estados de un pago siguen el patrón estándar de máquinas de estado:

Pending → Completed → (Refunded si es necesario) ↘ Failed

Lecciones Aprendidas

Stripe + Blockchain es un puente fascinante

Conectar el mundo de los pagos tradicionales con la blockchain requiere ser muy cuidadoso con la idempotencia: si el webhook de Stripe se envía dos veces (lo hace por reintentos), el contrato podría hacer mint dos veces. La solución fue registrar el payment_intent_id de Stripe en el contrato para evitar duplicados.

El Admin Panel importa

Un ecosistema DeFi sin un buen panel de administración no escala. El web-admin cubre gestión de inventario, métricas de ventas y registro de nuevas empresas en el contrato.

Código fuente: github.com/87maxi/ecommerce

💬

Comentarios

Powered by Giscus · GitHub Discussions

🧠 Web3 & Blockchain