Cómo perdimos $25k debido a una peculiaridad de la API de un DEX perp Operamos intensamente en un DEX perp (top 10 en puntos, top 5 por volumen). Resulta que su endpoint de API cancel_order() es... especial. Siempre devuelve 200 OK. Puedes llamar a cancel_order() con: • Un ID de orden válido (13295238234991) • Un ID de orden de cliente válido • Un ID de orden o ID de cliente inválido • Un ID de orden que ya fue cancelado • Un ID de orden de hace 6 meses • Un sándwich de jamón • Tu madre → Aún así, 200 OK. Esto está bien si sabes que está sucediendo y codificas en consecuencia. Nosotros no lo hicimos. El problema real: • Ocasionalmente, el RTT de create_order() se dispara a más de 50 ms durante los momentos de mayor actividad. • Lanzábamos una orden, luego la cancelábamos por ID de cliente antes de que la orden realmente se ejecutara. • Cancelar devuelve 200 OK, así que asumimos que la orden está muerta y la eliminamos de nuestros libros. • Unos segundos después, se ejecuta. → Nos penalizan con 10-20 bps por incidente. ¿La sorpresa? Estas ejecuciones estaban mezcladas con ejecuciones normales, así que era difícil detectarlas. También teníamos bucles de fondo de órdenes obsoletas en funcionamiento, pero son periódicos y no siempre captaban estas antes de la ejecución. Solución: • Para este DEX, ahora *requerimos* confirmaciones de cancelación por websocket o seguimos enviando la cancelación hasta que se agote nuestro límite de reintentos. Daño: • Pérdida estimada: $20K-$30K. Lección: • Cada API tiene peculiaridades. Generalmente no son lógicas, a veces ni siquiera visibles, y a menudo son costosas. • Siempre verifica que el éxito realmente signifique éxito, no confíes en un 200.
Sí, también estamos ejecutando estrategias de arb taker en este lugar y probablemente también nos estábamos "sacando". Pero es una carrera contra todos los MM y nuestros umbrales de taker para los DEX de perps son generalmente más altos, así que a menudo fallamos o no alcanzamos el umbral de taker antes de intentar.
lo otro que está un poco jodido es que ahora estoy incentivado a NO decirle al lugar sobre esto ya que se ha convertido en una ventaja para mí
@0xKeef
Loris
Loris27 jul 2025
lo otro que está un poco jodido es que ahora estoy incentivado a NO decirle al lugar sobre esto ya que se ha convertido en una ventaja para mí
42,64K