Tôi vừa audit xong hợp đồng của một dự án ZK-rollup mới, gọi tắt là 'NovaZK'. Họ vừa gọi vốn 50 triệu USD từ các quỹ đầu tư hàng đầu. Nhưng khi đọc 12.000 dòng Solidity và Rust, tôi phát hiện một điểm bất thường: cơ chế xác thực proof trên layer 1 không kiểm tra tính hợp lệ của số dư đầu vào. Điều này có nghĩa là kẻ tấn công có thể tạo proof giả để rút tiền từ cầu nối. Tại sao lỗi cơ bản như vậy lại xuất hiện trong một dự án được kỳ vọng cao?
Bối cảnh: NovaZK là một ZK-rollup tập trung vào thanh toán nhanh, sử dụng công nghệ Groth16 và Plonky2. Họ tuyên bố đạt 10.000 giao dịch mỗi giây với phí cực thấp. Nhưng đằng sau những con số đó, kiến trúc của họ phụ thuộc vào một bộ chứng minh tập trung (centralized prover) – điều mà whitepaper không đề cập rõ. Khi phân tích mã nguồn, tôi thấy prover này có quyền tạo proof mà không cần kiểm tra chéo từ nhiều nút. Đây là rủi ro nghiêm trọng vì nếu prover bị kiểm soát, toàn bộ hệ thống sụp đổ.
Phân tích kỹ thuật của tôi tập trung vào hàm verifyProof trong hợp đồng cầu nối. Thông thường, một ZK-rollup an toàn phải kiểm tra: (1) proof có đúng với số dư trong Merkle tree không, (2) số dư đầu vào có khớp với trạng thái on-chain không. NovaZK chỉ kiểm tra (1) mà bỏ qua (2). Tại sao? Vì họ muốn giảm gas cost trên Ethereum, nhưng điều này mở ra lỗ hổng 'double-spend' qua cầu nối. Trong 5 năm audit của tôi, lỗi này từng xuất hiện ở nhóm dự án ICO năm 2017, và bây giờ nó quay lại với lớp vỏ bọc ZK. Một điểm mù khác: prover sử dụng một bộ tham số duy nhất cho toàn bộ vòng đời, không có cơ chế xoay vòng (key rotation). Nếu khóa bí mật bị lộ, kẻ tấn công có thể giả mạo mọi giao dịch.
Góc nhìn phản trực giác: Cộng đồng thường cho rằng ZK-rollup là 'bất khả xâm phạm' vì tính toán học. Nhưng thực tế, các lỗi triển khai như bỏ qua kiểm tra trạng thái là chuyện thường. Tại sao các VC không phát hiện ra? Vì họ tập trung vào tokenomics và market fit, không đọc code. Trong bear market, tôi từng audit Scroll và phát hiện lỗi SELFDESTRUCT, và bây giờ lịch sử lặp lại: các dự án mới chạy theo tốc độ thị trường tăng, bỏ qua bảo mật.
Kết luận mang tính tiến bộ: Tôi dự đoán rằng trong sáu tháng tới, ít nhất 3 dự án ZK-rollup mới sẽ có lỗ hổng tương tự do chạy theo trend mà không audit kỹ. Bạn có dám đặt tiền vào một hệ thống mà prover chỉ cần nói 'tôi là đúng' mà không cần bằng chứng? Tôi thì không – cho đến khi họ decentralized prover và thêm kiểm tra trạng thái on-chain. Thị trường tăng che giấu mọi tội lỗi, cho đến khi ai đó khai thác nó.
Dựa trên kinh nghiệm 19 năm viết code và 5 năm audit, tôi khuyên bạn: đọc code trước khi đầu tư. Nếu không hiểu, ít nhất hãy hỏi kỹ sư thân tín. Đừng để FOMO làm mờ lý trí.