Hook
Tuần trước, giao thức lending XYZ kích hoạt circuit breaker lần thứ 7 trong vòng 72 giờ. Mỗi lần, thanh lý hàng loạt hơn 50 triệu USD tài sản thế chấp. Trên kênh Telegram của giao thức, một trader tổ chức – đại diện cho một quỹ đầu tư lớn – đặt câu hỏi: "Khi nào sự hoảng loạn này kết thúc? Chúng tôi đã mất 40% vị thế WBTC."
Đây không phải là một dự án rác. XYZ từng nằm trong top 5 DeFi theo TVL, được kiểm toán bởi ba công ty hàng đầu. Nhưng 7 lần chạm ngưỡng thanh lý chỉ trong một tuần – đó là tín hiệu của một vấn đề cấu trúc, không phải thị trường biến động ngẫu nhiên.
Oracle lỗi. Không có gì mới dưới EVM.
Context
XYZ là giao thức lending đa tài sản, cho phép người dùng vay stablecoin bằng cách thế chấp ETH, WBTC, và một số token blue-chip. Cơ chế thanh lý của nó dựa trên oracle giá on-chain lấy từ Uniswap V3 TWAP với thời gian 30 phút. Khi giá tài sản thế chấp giảm nhanh, oracle cập nhật chậm, tạo ra cơ hội chênh lệch giá. Các bot thanh lý lợi dụng khoảng trống này, thực hiện các giao dịch chớp nhoáng (flash loan) để kích hoạt thanh lý hàng loạt trước khi oracle kịp điều chỉnh.
Hệ thống circuit breaker của XYZ được thiết kế để tạm dừng thanh lý nếu tổng giá trị thanh lý trong một block vượt quá ngưỡng 2% tổng TVL. Nhưng vấn đề là: sau mỗi lần kích hoạt, cơ chế tự động reset sau 10 phút. Kẻ tấn công chỉ cần chờ reset, lặp lại kịch bản tương tự. Đã xảy ra 7 lần, mỗi lần thanh lý thêm 50-70 triệu USD.
Core
Tôi đã kiểm toán mã nguồn XYZ hai năm trước. Khi đó, tôi báo cáo rằng thiết kế oracle TWAP 30 phút kết hợp với circuit breaker có thể dẫn đến tấn công dây chuyền. Đội ngũ XYZ đã sửa một phần: thêm độ trễ 5 block cho circuit breaker, nhưng không giải quyết gốc rễ – sự phụ thuộc vào một oracle duy nhất với độ trễ quá lớn.
Bảy lần chạm ngưỡng thanh lý tuần này không phải do một lỗ hổng mã nguồn mới. Đó là hậu quả tất yếu của một quyết định thiết kế: chọn độ chính xác thấp để hy sinh tính kịp thời. Cụ thể, 30 phút TWAP làm mượt biến động giá, nhưng khi thị trường giảm mạnh (ETH giảm 12% trong 1 giờ), giá oracle lệch tới 15% so với giá thị trường giao ngay. Bot thanh lý khai thác chênh lệch này: vay một lượng lớn stablecoin từ XYZ, mua token thế chấp trên sàn giao ngay (khiến giá thị trường giảm thêm), sau đó gây ra thanh lý với giá oracle cũ – mua token thế chấp với giá rẻ từ quỹ thanh lý. Lợi nhuận mỗi lần lên tới 5-8% trên vốn flash loan.
Dựa trên dữ liệu on-chain tôi phân tích, 90% các giao dịch thanh lý trong đợt này đến từ cùng một địa chỉ bot. Bot này đã kiếm được 17 triệu USD lợi nhuận chỉ trong ba ngày. Phần thiệt hại thuộc về các LP stablecoin và người vay bị thanh lý bất công.
Sai lầm thứ hai là thiết kế circuit breaker reset quá nhanh. Sau mỗi lần kích hoạt, chỉ 10 phút là hệ thống cho phép thanh lý lại. Kẻ tấn công chỉ cần đợi đúng thời gian reset, thực hiện một cú flash loan nhỏ hơn (để không vượt ngưỡng 2% TVL), kích hoạt thanh lý một phần, giá tài sản tiếp tục giảm, và chu trình lặp lại. Nếu circuit breaker có cơ chế tăng dần thời gian khóa (ví dụ: nhân đôi thời gian sau mỗi lần kích hoạt), bot sẽ khó lặp lại.
EVM không có gì mới. Vấn đề oracle và circuit breaker đã được thảo luận từ năm 2019. Tuy nhiên, các giao thức vẫn lặp lại sai lầm vì chọn thiết kế đơn giản, ít tốn gas, thay vì đầu tư vào cơ chế chống tấn công dây chuyền.
Contrarian
Phe bò sẽ nói: "XYZ vẫn còn TVL khổng lồ, thanh lý chỉ là một phần tất yếu của thị trường giảm. Circuit breaker đã ngăn chặn thảm họa lớn hơn." Họ đúng một phần. Không có circuit breaker, tổn thất có thể lên tới 500 triệu USD thay vì 350 triệu. Nhưng điểm mù là: việc kích hoạt 7 lần cho thấy thiết kế không phòng thủ được tấn công lặp lại, mà chỉ làm kéo dài cơn đau.
Thực tế, sau mỗi lần chạm ngưỡng, giá token XYZ giảm thêm 5-10% do LP rút thanh khoản. Khủng hoảng niềm tin mới là thiệt hại lớn nhất. Các nhà đầu tư tổ chức sẽ rút lui, TVL giảm dần. Trong dài hạn, giao thức mất vị thế top 5.
Một bài học ngược: Đôi khi, circuit breaker nên được thiết kế để kích hoạt toàn bộ thị trường thay vì chỉ dừng thanh lý. Như trường hợp của dYdX hồi 2021, khi họ dừng toàn bộ giao dịch trong 1 giờ và cho phép oracle cập nhật đầy đủ, sau đó mở lại với spread được điều chỉnh. Điều đó giúp họ tránh được thanh lý dây chuyền.
Takeaway
Bảy lần chạm ngưỡng thanh lý không phải là một sự cố, mà là một dấu hiệu chẩn đoán. Một giao thức lending không thể sống sót nếu tin tưởng vào oracle đơn lẻ với độ trễ lớn, và circuit breaker chỉ là băng gạc cầm máu tạm thời.
Khi nào sự hoảng loạn kết thúc? Câu trả lời nằm ở việc giao thức có chịu nâng cấp cơ chế oracle theo hướng phi tập trung nhiều nguồn (Chainlink, Pyth) kết hợp với TWAP linh hoạt hay không. Nếu không, lần thứ 8 sẽ đến, sớm thôi.
Và lần đó, có thể không còn circuit breaker nào để dừng nó.