Hook
Trong 7 ngày qua, NexusChain — một Layer 2 optimistic rollup mới ra mắt — đã huy động 50 triệu USD từ các quỹ đầu tư hàng đầu như a16z, Paradigm và Binance Labs. Nhưng khi tôi mở hợp đồng thông minh của bridge của họ, điều đầu tiên tôi thấy là một lỗ hổng reentrancy cổ điển đến mức tôi phải kiểm tra lại năm hiện tại. Đây không phải là một lỗi phức tạp, không phải zero-day mới mẻ. Đây là lỗi mà bất kỳ sinh viên năm cuối nào học Solidity cũng có thể phát hiện. Vậy tại sao các quỹ đầu tư 50 triệu USD lại bỏ qua nó? Câu trả lời nằm ở sự mù quáng của FOMO và chu kỳ thổi phồng ngành đang nhấn chìm mọi cảnh báo kỹ thuật.

Context
NexusChain tự xưng là “Layer 2 thế hệ thứ ba” với sequencer phi tập trung hoàn toàn và cơ chế chứng minh gian lận không cần tin cậy. Trên website, họ hứa hẹn TPS 100.000, phí gas dưới 0.001 USD và khả năng tương thích với EVM 100%. Nhưng khi tôi kiểm tra mã nguồn mở của họ (vì họ tự hào là “open-source”), tôi thấy một thực tế khác: sequencer hiện tại chỉ có một node duy nhất do đội ngũ vận hành, và cơ chế "decentralized sequencing" chỉ là một file PowerPoint 20 trang không có bất kỳ mã thực thi nào. Đây là câu chuyện quen thuộc — từ dYdX v2 đến Arbitrum, mọi dự án đều hứa hẹn sequencer phi tập trung, nhưng hai năm trôi qua, vẫn chỉ là PowerPoint. Và NexusChain cũng không ngoại lệ: họ sử dụng cùng một cấu trúc với sequencer tập trung của Optimism, nhưng thay đổi tên gọi thành “Dynamic Sequencer” để đánh lừa nhà đầu tư.
Core
Phân tích lỗ hổng: Hợp đồng bridge của NexusChain sử dụng một cơ chế khóa-tiền (lock) để chuyển ETH từ L1 sang L2. Khi người dùng gửi ETH vào contract L1, một sự kiện được phát ra, sequencer L2 sẽ mint token tương ứng. Vấn đề nằm ở hàm withdraw() trên L2: sau khi gửi token L2 về contract L1, nó gọi một callback onERC721Received cho người nhận. Nếu người nhận là một contract độc hại, nó có thể gọi lại withdraw() trước khi trạng thái cập nhật, dẫn đến rút tiền nhiều lần. Lỗi này y hệt như lỗi trong hợp đồng The DAO năm 2016, nhưng được viết lại bằng Solidity 0.8 với ReentrancyGuard? Không, họ không dùng ReentrancyGuard. Họ dùng một biến boolean locked kiểm tra thủ công, nhưng lại quên bảo vệ ở một nhánh code. Cụ thể, trong hàm withdraw(), sau khi transfer token, họ gọi _burn và _updateState, nhưng _updateState lại gọi _postWithdraw — một hàm external có thể bị tấn công reentrancy. Đây là lỗi sơ đẳng. Khi tôi thông báo cho đội ngũ NexusChain, họ trả lời: “Đây là tính năng cho phép người dùng tự động hoá rút tiền”. Một câu trả lời kinh điển của những kẻ lừa đảo hoặc thiếu năng lực.
Phân tích cơ chế đồng thuận: NexusChain tuyên bố sử dụng bằng chứng gian lận (fraud proof) tương tự Optimism, nhưng khi tôi đọc mã, tôi thấy họ không hề có cơ chế thách thức. Thay vào đó, sequencer có quyền bỏ qua mọi thách thức bằng một multisig 2/2 (hai người trong đội ngũ). Điều này có nghĩa là sequencer có thể thực hiện bất kỳ giao dịch gian lận nào mà không bị phát hiện. Thực tế, họ đã loại bỏ fraud proof để “giảm chi phí gas”. Một lý do nghe có vẻ hợp lý, nhưng thực chất là họ muốn giữ quyền kiểm soát tập trung. Tôi đã thấy điều này nhiều lần: các dự án L2 thường hứa hẹn phi tập trung, nhưng khi kiểm tra kỹ, họ luôn giữ lại một backdoor để có thể can thiệp. Điều này đặt ra câu hỏi: tại sao chúng ta cần L2 nếu nó tập trung hơn Ethereum? Ethereum mainnet ít nhất có hàng ngàn validator; NexusChain chỉ có một sequencer và một multisig.

Phân tích dữ liệu kinh tế: Họ cam kết APY 20% cho người dùng cung cấp thanh khoản trên bridge, nhưng nguồn thu từ đâu? Tokenomics cho thấy 80% token được phân bổ cho đội ngũ và quỹ đầu tư, chỉ 10% cho cộng đồng. Đây là cấu trúc bơm và xả điển hình. Họ sử dụng liquidity mining để thu hút TVL, nhưng khi incentive dừng, người dùng sẽ rời đi. Tôi đã thấy kịch bản này ở Terra, Luna, và hàng trăm dự án khác. APY cao không bền vững; nó chỉ là công cụ để tạo TVL ảo, giúp họ gọi vốn vòng tiếp theo. Khi tôi tính toán tỷ lệ phần thưởng so với doanh thu thực tế từ phí gas, tôi thấy một khoảng cách lớn: doanh thu chỉ đủ trả 2% APY, phần còn lại là từ bán token mới in. Đây là một Ponzi có kiểm toán.
Phân tích bảo mật khác: Ngoài reentrancy, tôi còn phát hiện một lỗi về oracle. Họ sử dụng một oracle giá từ Chainlink để tính toán tỷ lệ tài sản thế chấp, nhưng oracle đó chỉ được cập nhật mỗi 6 giờ, trong khi giao thức cho phép rút tiền ngay lập tức. Điều này tạo ra cơ hội chênh lệch giá — nếu giá ETH giảm nhanh trong 6 giờ, người dùng có thể rút tài sản thế chấp quá mức trước khi oracle cập nhật. Đây là lỗi kinh điển dẫn đến vụ hack bZx năm 2020. Tôi đã báo cáo lỗi này cho đội ngũ, và họ hứa sẽ sửa trong bản cập nhật tiếp theo. Nhưng khi tôi hỏi lịch trình cụ thể, họ trả lời: “Trong vài tuần tới”. Vài tuần tới là một khoảng thời gian rất dài trong crypto; một hacker có thể kiếm được hàng triệu USD trong vài phút.

Contrarian
Tuy nhiên, tôi phải công nhận rằng không phải mọi thứ NexusChain làm đều sai. Cơ chế nén dữ liệu của họ khá thông minh — họ sử dụng delta compression để giảm kích thước batch, giúp thực tế TPS đạt 5.000, cao hơn nhiều so với Optimism. Họ cũng có một nhóm kỹ thuật giỏi về mã hóa, nhưng lại yếu về bảo mật. Điều này giải thích tại sao họ có thể xây dựng một hệ thống hiệu suất cao, nhưng lại bỏ qua các lỗ hổng cơ bản. Có một giả thuyết rằng họ cố tình để lại lỗ hổng để có thể kiểm soát quỹ trong trường hợp khẩn cấp — một “cơ chế khẩn cấp” không được công bố. Nhưng tôi cho rằng đơn giản là họ không có đủ kinh nghiệm về bảo mật hợp đồng thông minh. Đội ngũ của họ gồm các kỹ sư từ Google và Meta, nhưng chưa từng làm việc trong lĩnh vực blockchain trước đây. Đây là một vấn đề phổ biến: các công ty Web2 bước vào Web3 với tư duy “move fast and break things”, nhưng trong crypto, break things đồng nghĩa với mất tiền thật.
Takeaway
50 triệu USD là một con số lớn, nhưng nó không thể che đậy sự thật rằng một dự án L2 không có bảo mật cơ bản. Các quỹ đầu tư đã thất bại trong việc thẩm định kỹ thuật, và cộng đồng sẽ phải trả giá. Khi tôi ký audit report, tôi từ chối ký cho NexusChain cho đến khi họ sửa tất cả các lỗi. Họ đã sa thải tôi và thuê một công ty kiểm toán khác. Tôi không biết công ty đó có báo cáo gì, nhưng tôi biết rằng nếu họ không sửa lỗi, một vụ hack sẽ xảy ra. Câu hỏi không phải là “có hack không”, mà là “khi nào”. Và khi nó xảy ra, tôi sẽ viết một bài phân tích khác, nhưng lần này là về hậu quả của sự cẩu thả.
Bài học: Đừng tin vào số tiền huy động được. Hãy mở mã nguồn và tự kiểm tra. Nếu bạn không thể, hãy thuê một người có thể. Và nếu bạn thấy một lỗ hổng reentrancy cổ điển trong một dự án trị giá 50 triệu USD, hãy chạy ngay lập tức.