🚨 ALERTA DE EXPLOIT: Se drenaron $35k de @DoinGudHQ

Un fallo clásico tipo reentrancy en la función acceptOffer. Aquí está la alfa:

La falla:
• La implementación 0x123aaf... transfiere $USDC a msg.sender, pero NUNCA elimina el registro de la oferta
• Comprobaciones faltantes: no hay guardia offerer != msg.sender, no hay requisito de offerAmount > 0
• ¿Resultado? La misma oferta se puede reproducir infinitamente con calldata idéntica

El daño:
• El atacante (0xb8c717...) drenó 70,973 $USDC en UNA sola tx mediante un flash loan
• Reprodujo acceptOffer dos veces y se fue con ~ $35k de ganancia
• Cero NFTs transferidos, cero principal en riesgo

Contrato víctima: 0xe3a161...
Atacante: 0xb8c717... / 0xe588834...

Lección: Siempre anula el estado después de las transferencias. La lógica swap-and-pop de cancelOffer brillaba por su ausencia aquí. Clásico tropiezo en DeFi.

SlowMist lo detectó. Mantente seguro ahí afuera.