Theo thông tin ban đầu từ Crypto Briefing, MetronomeDAO vừa công bố khoảng 16 triệu đô la bốc hơi khỏi giao thức, nguyên nhân được cho là do độ trễ oracle. Một vụ mất tiền không đến từ hack, không đến từ tấn công quản trị, mà đến từ một dòng dữ liệu giá bị chậm lại vài nhịp. Nghe có vẻ kỹ thuật, nhưng nó chạm vào gốc rễ niềm tin của toàn bộ DeFi.
Để hiểu vấn đề, cần nhìn vào cách giao thức nhận giá. MetronomeDAO là một giao thức tài chính vận hành theo mô hình DAO, chuyên xử lý tài sản xuyên chuỗi. Hợp đồng thông minh không thể tự biết giá tài sản trên thị trường. Nó phải đọc từ một oracle, một lớp hạ tầng đưa dữ liệu bên ngoài vào blockchain. Oracle hoạt động bình thường, giá cập nhật đều đặn. Oracle chậm, giá trong hợp đồng trở thành một tấm gương phản chiếu quá khứ.
Trong một hệ thống tài chính tự động, dữ liệu cũ không chỉ là dữ liệu sai. Nó là một cánh cửa cơ hội cho những kẻ săn chênh lệch giá. Kịch bản có thể diễn ra như thế này: giá thực tế của tài sản biến động mạnh, oracle chưa kịp cập nhật, nhưng hợp đồng vẫn dùng mức giá cũ. Một con bot phát hiện ra sự chênh lệch. Nó mua tài sản theo giá cũ, bán theo giá thị trường bên ngoài, lặp lại cho đến khi oracle đồng bộ. Mỗi vòng lặp tạo ra một khoản lỗ cho giao thức. Số tiền 16 triệu đô la có thể là kết quả của nhiều vòng lặp như vậy.

Lỗi không đến từ code, mà từ giả định. Giao thức giả định rằng giá từ oracle luôn đủ mới, luôn đủ chính xác để thực hiện giao dịch. Nhưng không có gì đảm bảo điều đó, trừ khi giao thức tự kiểm tra. Việc kiểm tra timestamp, giới hạn độ lệch giá, cơ chế tạm dừng khẩn cấp, thường là những thứ bị bỏ quên trong thiết kế ban đầu. Oracle chỉ có nghĩa vụ trả lời. Giao thức mới là người phải đặt câu hỏi. Hoặc không.
Từ năm 2018, tôi đã dành nhiều thời gian để đọc mã nguồn của các giao thức DeFi. Tôi từng phát hiện những lỗi logic có thể dẫn đến mất hàng nghìn ETH trong các hợp đồng thanh khoản. Nhưng loại rủi ro mà MetronomeDAO vừa trải qua lại khác. Nó không nằm ở một phép tính sai bên trong code, mà nằm ở một giả định sai về thế giới bên ngoài. Năm 2020, khi tôi xây dựng công cụ phân tích thanh khoản cho Uniswap v2, tôi thấy nhiều pool có độ trượt giá nguy hiểm. Hồi đó, ít ai quan tâm. Thị trường đang sôi động, lợi nhuận che mờ rủi ro. Phải đến khi một sự cố xảy ra, người ta mới tự hỏi vì sao không nhìn thấy trước.
Vấn đề càng phức tạp hơn khi đối tượng gặp sự cố là một DAO. MetronomeDAO không có một giám đốc điều hành có thể ra quyết định trong vài giờ. Mọi phương án xử lý, từ bồi thường bằng kho bạc đến phát hành token mới, đều phải chờ bỏ phiếu. Trong thời gian chờ đợi, người dùng có xu hướng rút vốn để bảo toàn tài sản. Thanh khoản giảm, sự hoang mang tăng, và mọi thứ trở nên khó khăn hơn. Cấu trúc DAO giúp minh bạch quyết định, nhưng lại là một gánh nặng khi cần phản ứng nhanh với khủng hoảng.
Tôi không đồng tình với cách gọi đây là sự cố oracle. Oracle không thất bại; nó chỉ chậm trễ, như một chiếc đồng hồ chạy sai vài phút. Một chiếc đồng hồ sai không tự giết chết bạn. Giết chết bạn là việc bạn dùng chiếc đồng hồ đó để tính toán tài sản của mình mà không hề biết nó sai. Vấn đề nằm ở kiến trúc tin cậy: giao thức đặt toàn bộ sự sống còn của mình vào một nguồn thông tin mà nó không kiểm soát, và không thiết kế cho kịch bản nguồn thông tin đó hỏng hóc.
Mã nguồn mở không có nghĩa là tin tưởng. Đây là bài học mà tôi muốn nhấn mạnh. Mã nguồn mở cho phép bất kỳ ai đọc code, kiểm tra logic, phát hiện lỗi. Nhưng nó không đảm bảo rằng các điều kiện vận hành bên ngoài code sẽ đúng trong mọi tình huống. Oracle là một ví dụ điển hình. Một hợp đồng thông minh được kiểm toán hoàn hảo vẫn có thể sụp đổ nếu nó tin tưởng mù quáng vào nguồn dữ liệu mà không kiểm tra độ trễ. Các cuộc kiểm toán truyền thống thường tập trung vào logic nội tại, nhưng hiếm khi mô phỏng được những cú sốc từ bên ngoài. Các bài kiểm tra cần thêm kịch bản dữ liệu cũ, dữ liệu lệch, dữ liệu bị bơm thành nhiều phiên bản, và xem giao thức phản ứng thế nào.
Trong bối cảnh thị trường đang giảm, sự kiện MetronomeDAO có thể làm tăng thêm sự thận trọng của nhà đầu tư với các giao thức phụ thuộc oracle. Những câu hỏi nên được đặt ra ngay bây giờ: giao thức của bạn có kiểm tra tuổi dữ liệu trước khi thực hiện giao dịch không? Có giới hạn chênh lệch giá hay không? Có kế hoạch xử lý sự cố cụ thể? Nếu câu trả lời là không, thì sự an toàn hiện tại chỉ là một sự may mắn chưa bị thử thách. Tôi không nói rằng mọi giao thức nên bị nghi ngờ. Tôi nói rằng câu hỏi về nguồn dữ liệu cần được đặt lên bàn trước, không phải sau khi có tổn thất.
Sự kiện lần này không phải là lần đầu tiên, và chắc chắn sẽ không phải là lần cuối cùng. Nhưng mỗi lần xảy ra, chúng ta lại có cơ hội nhìn lại những giả định mà mình đang đặt trong thiết kế. Có bao nhiêu giao thức đang chạy trên nền tảng của niềm tin vào dữ liệu luôn đúng giờ? Có bao nhiêu nhà phát triển đã thực sự kiểm tra xem hợp đồng của họ sẽ hành xử thế nào khi giá đến muộn vài phút? Những kẻ hưởng lợi từ sự chậm trễ không có tên. Họ là bot, là thuật toán, là những dòng lệnh chạy 24/7 tìm kiếm sự bất cẩn của người khác. Trong DeFi, không có tội phạm, chỉ có cơ hội.

Lỗi không đến từ code, mà từ giả định. MetronomeDAO vừa trả 16 triệu đô la cho một giả định sai về thời gian. Câu hỏi còn lại là: bao nhiêu giao thức khác đang ngồi trên cùng một quả bom hẹn giờ mà chưa ai biết tên.