Cách chúng tôi mất $25k vì một lỗi API DEX perp Chúng tôi giao dịch mạnh mẽ trên một DEX perp (top 10 người nắm giữ điểm, top 5 theo khối lượng). Hóa ra endpoint API cancel_order() của họ thì... đặc biệt. Nó luôn trả về 200 OK. Bạn có thể gọi cancel_order() với: • Một ID đơn hàng hợp lệ (13295238234991) • Một ID đơn hàng của khách hàng hợp lệ • Một ID đơn hàng hoặc ID đơn hàng của khách hàng không hợp lệ • Một ID đơn hàng đã bị hủy trước đó • Một ID đơn hàng từ 6 tháng trước • Một chiếc bánh mì kẹp thịt • Mẹ bạn → Vẫn 200 OK. Điều này không sao nếu bạn biết điều đó đang xảy ra và lập trình xung quanh nó. Chúng tôi thì không. Vấn đề thực sự: • Thỉnh thoảng, thời gian RTT của create_order() tăng vọt lên 50ms+ trong những thời điểm bận rộn. • Chúng tôi sẽ gửi một đơn hàng, sau đó hủy nó bằng ID đơn hàng của khách hàng trước khi đơn hàng thực sự được thực hiện. • Hủy trả về 200 OK, vì vậy chúng tôi giả định đơn hàng đã chết và loại bỏ nó khỏi sổ sách của chúng tôi. • Vài giây sau, nó được thực hiện. → Chúng tôi bị mất 10-20 bps cho mỗi sự cố. Điều đáng chú ý? Những lần thực hiện này được trộn lẫn với những lần thực hiện bình thường, vì vậy rất khó để phát hiện. Chúng tôi cũng có các vòng lặp nền đơn hàng cũ đang chạy, nhưng chúng có tính chu kỳ và không phải lúc nào cũng bắt kịp những lần thực hiện này trước khi chúng xảy ra. Cách khắc phục: • Đối với DEX này, chúng tôi giờ đây *yêu cầu* xác nhận hủy qua websocket hoặc chúng tôi tiếp tục gửi yêu cầu hủy cho đến khi đạt giới hạn thử lại tối đa của chúng tôi. Thiệt hại: • Ước tính thiệt hại: $20K-$30K. Bài học: • Mỗi API đều có những điểm đặc biệt. Chúng thường không hợp lý, đôi khi thậm chí không thể nhìn thấy, và thường rất tốn kém. • Luôn xác minh rằng thành công thực sự có nghĩa là thành công, đừng tin vào 200.
Vâng, chúng tôi cũng đang thực hiện các chiến lược arb taker trên nền tảng này và có lẽ cũng đang "tự nâng mình lên". Nhưng đó là một cuộc đua với tất cả các MM và ngưỡng taker của chúng tôi cho các DEXs perps thường cao hơn, vì vậy thường thì chúng tôi sẽ bỏ lỡ hoặc không đạt được ngưỡng taker trước khi thử.
Điều khác mà thật sự tệ hại là bây giờ tôi có động lực để KHÔNG nói cho địa điểm biết về điều này vì nó đã trở thành một lợi thế cho tôi.
@0xKeef
Loris
Loris27 thg 7, 2025
Điều khác mà thật sự tệ hại là bây giờ tôi có động lực để KHÔNG nói cho địa điểm biết về điều này vì nó đã trở thành một lợi thế cho tôi.
42,63K