Tôi mất hai tuần để đọc mã nguồn của LayerZero. Không phải vì nó phức tạp. Mà vì tôi không tin vào những gì tôi thấy.
Dòng 47 trong UltraLightNode.sol. Một hàm gọi _verifyProof() với tham số lấy từ oracle. Không có kiểm tra sự thống nhất giữa hai báo cáo. Nếu oracle và relayer thông đồng, cầu nối sẽ sập.
Năm 2021, tôi audit hợp đồng Status. Tìm ra lỗi re-entrancy cổ điển nhưng ẩn trong logic phân phối token. Dự án sửa kịp thời, tránh mất 2 triệu USD. Từ đó tôi biết: lỗi bảo mật không đến từ hacker. Nó đến từ giả định sai lầm của dev.

LayerZero được ca ngợi là giải pháp cross-chain thế hệ mới. Cơ chế của nó: một oracle (như Chainlink) cung cấp block header, một relayer gửi proof giao dịch. Smart contract của đích xác minh chữ ký từ oracle, sau đó kiểm tra proof từ relayer. Nghe có vẻ phi tập trung. Nhưng sự thật ở tầng thấp hơn.
Core Insight: LayerZero không xác minh sự thống nhất giữa oracle và relayer. Nó chỉ kiểm tra từng nguồn riêng lẻ. Nếu oracle báo header đúng, relayer gửi proof giả mạo, contract vẫn chấp nhận. Vì hàm _verifyProof chỉ check chữ ký của relayer, không đối chiếu với oracle.
Hãy nhìn vào dòng 112 trong Endpoint.sol: