Navigation
Print Share Copy URL
Breadcrumb

Euro-Ecommerce: Una Stablecoin Propia para Comercio Descentralizado

Ecosistema completo de e-commerce descentralizado con stablecoin ERC-20 propia (EURT) vinculada al Euro, pagos Stripe, contratos Solidity y dApps web en Next.js.

[Maximiliano A. Paredes]

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