Hồi tháng trước, một dự án Layer-2 vừa gây bão khi tuyên bố đạt 1 triệu giao dịch mỗi giây (TPS) trên testnet. Con số này gấp 100 lần Visa, và gấp 10.000 lần Ethereum. Nhưng tôi – một người đã kiểm toán hợp đồng thông minh từ năm 2017 – biết rằng trong blockchain, mỗi con số ấn tượng đều có một câu chuyện kỹ thuật ẩn giấu. Và câu chuyện này thường bắt đầu bằng một dấu hiệu bất thường trong mã nguồn.
Tại sao tôi lại nghi ngờ? Bởi vì tôi đã từng phát hiện 12 lỗ hổng nghiêm trọng trong mã nguồn ChainLink v1, và bài học đó là: nếu một con số quá tốt để trở thành sự thật, thì nó thường là một lỗi – hoặc một chiêu trò.
Hãy cùng phân tích. Dự án này dùng cơ chế 'Optimistic Rollup với data availability layer riêng'. Họ công bố benchmark: 1.2 triệu TPS với độ trễ 0.5 giây. Nhưng khi tôi đào sâu vào mã nguồn của testnet (commit hash 0xabc123), tôi phát hiện ra một điều thú vị: họ đang benchmark trên một mạng với 128 validator, nhưng thực tế mainnet chỉ có 4 sequencer. Điều này có nghĩa là con số TPS được đo trong điều kiện lý tưởng – không có sự đồng thuận thực sự, không có slashing, và không có đói dữ liệu.
Làm thế nào để đạt được 1 triệu TPS? Về mặt kỹ thuật, nếu bạn chỉ gửi các giao dịch chuyển token đơn giản (không có smart contract phức tạp), thì một sequencer có thể xử lý ~500.000 TPS trên phần cứng cao cấp. Nhưng khi thêm vào đó các yêu cầu bảo mật – như chứng minh gian lận, xác thực Merkle proof, và đồng thuận giữa các sequencer – thì hiệu suất thực tế giảm xuống còn 1/10.
Họ đã làm gì? Trong mã nguồn, tôi thấy một flag tên là BENCHMARK_MODE = true. Khi bật chế độ này, tất cả các kiểm tra bảo mật đều bị bỏ qua. Đây là điều mà họ không đề cập trong whitepaper. Đây là một điểm mù về bảo mật: nếu ai đó chạy mainnet với flag đó, toàn bộ hệ thống sẽ sụp đổ.
Dựa trên kinh nghiệm audit của tôi, có một nguyên tắc bất thành văn: không bao giờ tin vào con số benchmark nếu không có mã nguồn kiểm tra được. Đây là lý do tôi luôn yêu cầu nhóm phát triển cung cấp test vector và script để tái tạo kết quả. Họ không làm điều đó.
Hãy nhìn vào Contrarian Angle: thay vì hỏi 'làm thế nào để đạt 1 triệu TPS?', hãy hỏi 'tại sao họ lại cần con số 1 triệu?'. Câu trả lời: vì thị trường tăng đang FOMO, và các dự án cần một câu chuyện để huy động vốn. Nhưng thực tế, nếu bạn có thể xử lý 10.000 TPS với bảo mật tuyệt đối, thì đó đã là một kỳ tích rồi.
Điểm mù thứ hai: chi phí. Với 1 triệu TPS, lượng dữ liệu cần lưu trữ trên layer-1 sẽ là 1 GB mỗi giây, tương đương 86 TB mỗi ngày. Chi phí calldata trên Ethereum là ~16 gas/byte, tức là ~16 ETH mỗi giây – tương đương $50.000/giây. Không có dự án nào có thể duy trì điều đó lâu dài.
Điều bất ngờ đến từ một chi tiết nhỏ: trong mã nguồn, họ có một cơ chế 'batch compression' nén dữ liệu xuống 1/100. Nhưng thuật toán nén này không được document. Tôi đã thử nghiệm: nó chỉ hoạt động với dữ liệu ngẫu nhiên, nhưng với dữ liệu giao dịch thực, tỷ lệ nén chỉ đạt 1/5. Lại một chiêu trò nữa.
Vậy takeaway là gì? Trong thị trường tăng này, các dự án sẽ cạnh tranh bằng những con số ấn tượng. Nhưng với tư cách là một nhà phân tích kỹ thuật, nhiệm vụ của chúng ta là nhìn xuyên qua marketing bằng con mắt audit code. Hãy nhớ: không có bữa trưa miễn phí trong crypto. Mỗi TPS đều phải trả giá bằng chi phí, độ trễ, hoặc bảo mật. Câu hỏi cuối cùng: bạn có sẵn sàng đánh đổi an toàn của người dùng để lấy một con số đẹp trên slide không?