Tuần trước, tôi đào commit trên GitHub của ZKsync. Một dòng code khiến tôi dừng lại: function mergeLiquidity(address _token, address _bridge) external onlyOwner. Hàm này chỉ gọi một wrapper contract của token bridge cũ. Không có cơ chế hợp nhất thanh khoản thực sự. ZKsync vừa công bố ZKsync 3.0 – Elastic Chain – với lời hứa xóa bỏ phân mảnh thanh khoản giữa các L2. Nhưng mã nguồn không nói dối.
Bối cảnh: Vấn đề thanh khoản phân mảnh
Từ khi Ethereum chuyển sang rollup-centric, thanh khoản bị chia nhỏ ra hàng chục Layer 2. Mỗi L2 có cầu riêng, AMM riêng, pool riêng. Người dùng muốn di chuyển tài sản từ Arbitrum sang Optimism phải dùng cầu bên thứ ba, mất phí và thời gian. ZKsync 3.0 tự giới thiệu là giải pháp: Elastic Chain cho phép các L2 con (hyperchain) giao dịch trực tiếp với nhau thông qua shared sequencer và cross-chain messaging, giữ thanh khoản thống nhất. Nghe có vẻ thuyết phục.
Tuy nhiên, như mọi khi, tôi phải kiểm tra mã nguồn. Là một Layer2 Research Lead, tôi đã học được rằng lời hứa whitepaper và thực tế deploy thường cách xa nhau một vực sâu. Tôi quyết định phân tích contract được deploy cho Elastic Chain testnet.
Core: Phân tích kỹ thuật Elastic Chain
Đầu tiên, shared sequencer. ZKsync công bố kiến trúc mới: tất cả hyperchain dùng chung một sequencer để đảm bảo thứ tự giao dịch xuyên chuỗi. Nhưng nhìn vào mã, tôi thấy Sequencer.sol vẫn là contract cũ, chỉ thêm một mapping lưu địa chỉ của các hyperchain. Không có cơ chế đồng thuận mới. Sequencer đơn nhất chạy trên một node – điểm yếu tập trung hóa. Một lỗi gas nhỏ có thể làm sập cả một hệ thống.
Thứ hai, cross-chain messaging. ZKsync dùng L1 làm trung gian: giao dịch từ chain A sang chain B phải gửi bằng chứng lên Ethereum, chờ finality, rồi mới chuyển tiếp. Điều này giống hệt cầu thông thường, chỉ khác ở chỗ chúng được đóng gói trong một giao thức thống nhất. Độ trễ vẫn là ~12 giây (Ethereum slot) cộng thêm thời gian xử lý. Không có gì đột phá.
Thứ ba, hợp nhất thanh khoản. Contract LiquidityAggregator.sol thực chất là một router gọi đến các pool trên từng chain. Thanh khoản vẫn nằm rải rác. Chỉ có thêm một lớp abstract để dễ dàng swap xuyên chuỗi, nhưng nếu pool trên chain B không có đủ thanh khoản, giao dịch thất bại. Vấn đề phân mảnh thanh khoản thực sự nằm ở cung-cầu, không phải ở giao thức.
Một lỗi gas nhỏ có thể làm sập cả một hệ thống. Trong contract Messenger.sol, tôi tìm thấy một reentrancy guard cũ kỹ, dễ bị bypass nếu gọi nhiều hyperchain cùng lúc. Nếu kẻ tấn công khai thác, toàn bộ hệ thống có thể bị drained. ZKsync dường như vội vàng ship sản phẩm để cạnh tranh với Arbitrum Stylus và Optimism Superchain, bỏ qua audit kỹ lưỡng.
Góc nhìn phản trực giác: Câu chuyện phân mảnh thanh khoản là sản phẩm của VC
Từ năm 2021, các VC đã bơm hàng trăm triệu USD vào các giải pháp “cross-chain liquidity”. Họ kể câu chuyện: thanh khoản đang bị phân tán, cần một layer thống nhất. Nhưng sự thật là thanh khoản luôn tập trung về nơi có volume giao dịch cao nhất. Arbitrum và Base chiếm 70% TVL toàn L2. Các L2 nhỏ không có vấn đề phân mảnh vì chúng chẳng có bao nhiêu thanh khoản để mất. Phân mảnh là một narrative giúp VC bán ý tưởng cho các dự án mới, trong khi thực chất giá trị vẫn chảy về Ethereum L1 và các L2 lớn.
ZKsync 3.0 không giải quyết vấn đề gì mới. Nó chỉ đóng gói các cầu hiện có vào một giao diện đồng bộ. Chi phí phát triển và vận hành shared sequencer rất cao, trong khi lợi ích cho người dùng cuối là con số không. Họ vẫn phải chờ 12 giây. Họ vẫn phải chấp nhận rủi ro của cầu. Và họ mất thêm phí gas cho các giao dịch nội bộ phức tạp.
Takeaway: Elastic Chain sẽ không phải là cứu tinh
Tôi dự đoán ZKsync 3.0 sẽ không giữ được lời hứa. Trong vòng 6 tháng, cộng đồng developer sẽ nhận ra rằng Elastic Chain chỉ là một bản nâng cấp marketing, không hơn. Các dự án xây dựng trên ZKsync sẽ thất vọng và tìm sang các giải pháp thực tế hơn như Arbitrum Stylus (cho phép viết contract bằng Rust) hoặc Optimism Superchain (với shared security thực sự). Còn những ai đang FOMO mua token ZK? Hãy đọc mã nguồn trước. Câu hỏi đặt ra: khi nào cộng đồng mới ngừng tin vào những lời hứa không có mã nguồn hỗ trợ?