Hôm qua, một tàu chở dầu mang tên Hormuz Spirit bị trúng đạn tại eo biển Hormuz. Động cơ hư hỏng nặng, thương vong chưa rõ. Tin tức lan nhanh trên Bloomberg, Reuters, nhưng tôi không quan tâm đến dầu. Tôi quan tâm đến điều mà không ai để ý: chiếc tàu này được bảo hiểm bởi một syndicate dùng smart contract trên Ethereum. Và hợp đồng đó vừa bị kích hoạt một hàm withdraw bất thường.
Bối cảnh: Cầu nối Hormuz là một giao thức bảo hiểm hàng hải phi tập trung, ra mắt cuối 2023, hứa hẹn thanh toán tự động khi tàu gặp sự cố. TVL đạt 120 triệu USD vào tháng 6. Nhưng tôi đã cảnh báo từ tháng 4: cơ chế oracle của họ quá phụ thuộc vào một nguồn duy nhất. Hôm qua, oracle đó báo cáo sự cố, và smart contract lập tức giải phóng 4.200 ETH vào một địa chỉ lạ. Không phải chủ tàu, không phải người được bảo hiểm. Một địa chỉ mới tạo, không có lịch sử giao dịch.
Phân tích kỹ thuật bề mặt: Tôi mở Etherscan, tra cứu hàm withdraw. Dòng code 147: if (oracle.report(block.timestamp) == true) { transfer(owner, amount); }. Vấn đề: owner ở đây không phải là chủ hợp đồng đa chữ ký, mà là một địa chỉ được set bằng hàm setOwner không có access control. Ai đó đã gọi setOwner trước khi oracle kích hoạt. Bằng chứng: giao dịch 0xabc...def, cách đây 48 giờ, từ một ví được tài trợ bởi sàn Mặt Trăng. Tôi đã truy vết dòng tiền: 500 ETH từ sàn đó vào ví trung gian, rồi vào hợp đồng Hormuz. Kẻ tấn công biết trước sự cố? Hay họ tạo ra sự cố?
Trái với quan điểm phe bò: Nhiều người cho rằng đây là minh chứng cho sức mạnh của DeFi – thanh toán tự động, không cần giấy tờ. Sai. Đây là minh chứng cho sự yếu kém của thiết kế oracle đơn lẻ. Hormuz đã có 6 tháng để thêm multisig hoặc timelock. Họ không làm. Tại sao? Vì đội ngũ đang trong quá trình rút lui: 3 thành viên cốt cán đã bán token trong tháng 8, theo dữ liệu Nansen. Khi tôi nói "bảo hiểm phi tập trung" là oxymoron, tôi không nói đùa.
Kết luận: Hormuz Spirit sẽ chìm, nhưng không phải ở biển. Nó chìm trong blockchain của chính nó. 4.200 ETH đã biến mất, và cộng đồng lại hỏi: ai sẽ chịu trách nhiệm? Câu trả lời: không ai, vì DAO không có mặt. Đã đến lúc ngừng tin vào "code is law" và bắt đầu đòi hỏi trách nhiệm từ những người viết code đó.
Bài học từ vụ Hormuz: Đừng bao giờ tin tưởng một oracle. Hãy kiểm tra hàm setOwner. Và nhớ rằng, trong thế giới on-chain, mọi vụ nổ đều để lại dấu vết – chỉ cần bạn biết nhìn vào đâu.