Có khi nào bạn tự hỏi tại sao cùng một giao dịch chuyển token trên Optimism lại tốn 0.0004 ETH gas, trong khi trên một chain Layer2 mới nổi ở Việt Nam chỉ mất 0.0001 ETH? Tôi đã dành ba tuần đào sâu vào mã nguồn của một dự án Layer2 có tên mã là 'Mekong' – một giải pháp rollup do một nhóm nghiên cứu tại Đại học Bách Khoa Hà Nội phát triển. Điều tôi tìm thấy không chỉ là một cơ chế nén dữ liệu thông minh, mà còn là một hệ thống watermarking giao dịch mà nhóm phát triển chưa từng công bố chính thức. Mỗi lần bạn gửi một giao dịch qua Mekong, một mã nhận dạng vô hình được nhúng vào calldata của giao dịch đó – có thể đọc được bằng máy, nhưng vô hình với mắt thường. Cộng đồng builder trên GitHub đã bắt đầu tiến hành reverse engineering, và một số người đã thành công trong việc loại bỏ watermark này. Đây là câu chuyện về một dự án Layer2 Việt Nam đang âm thầm thay đổi cuộc chơi – và tại sao điều đó lại quan trọng hơn bạn nghĩ.

Để hiểu được cơ chế watermark của Mekong, trước hết cần nhìn vào bối cảnh giao thức. Mekong là một Optimistic Rollup sử dụng mã nguồn mở dựa trên OP Stack, nhưng nhóm phát triển đã sửa đổi sâu lớp sequencer và batch submitter. Theo whitepaper kỹ thuật được công bố hồi tháng 1 năm 2025, Mekong tuyên bố đạt được throughput 2.000 TPS với chi phí gas thấp hơn 40% so với Optimism nhờ vào một thuật toán nén dữ liệu mới gọi là 'Delta Compression with Entropy Encoding'. Tuy nhiên, điều mà whitepaper không đề cập là việc sequencer của Mekong còn làm một việc khác: nó chèn thêm một trường dữ liệu 32 byte vào mỗi giao dịch trước khi đưa vào batch. Trường này không ảnh hưởng đến state root, nhưng nó chứa một mã định danh duy nhất – một watermark – được tạo ra từ private key của sequencer và hash của nội dung giao dịch. Đội ngũ phát triển gọi đây là 'Transaction Provenance Mark' (TPM), nhưng họ chưa bao giờ công bố nó trong tài liệu chính thức.
Phân tích kỹ thuật cho thấy watermark của Mekong dựa trên một cơ chế thay thế calldata có entropy cao. Tôi đã kiểm tra mã nguồn của sequencer (phiên bản commit 0x4f3a2b) trên GitHub và phát hiện rằng trước khi gửi batch lên Ethereum, mỗi giao dịch được chạy qua một hàm addWatermark(). Hàm này lấy một mẫu ngẫu nhiên từ pool entropy của sequencer, kết hợp với nội dung giao dịch gốc, và tạo ra một chuỗi 32 byte mà không làm thay đổi kết quả thực thi. Điều này tương tự với kỹ thuật watermarking văn bản mà Anthropic đã công bố trong bài báo arXiv 2024, nhưng áp dụng cho dữ liệu giao dịch blockchain. Về mặt lý thuyết, watermark này có thể được phát hiện bởi bất kỳ ai có quyền truy cập vào calldata của batch – tức là toàn bộ mạng lưới. Nhưng vì trường này không nằm trong phần dữ liệu giao dịch gốc (chỉ có sequencer mới thêm vào), nên hầu hết người dùng và thậm chí cả các block explorer thông thường đều không nhận thấy.
Tuy nhiên, có một trade-off quan trọng: việc thêm watermark này làm tăng kích thước calldata lên 32 byte cho mỗi giao dịch. Với throughput 2.000 TPS, điều này tương đương với 64 KB calldata bổ sung mỗi giây, tức là khoảng 5.5 GB mỗi ngày. Chi phí gas cho việc đưa dữ liệu này lên Ethereum L1 tăng lên đáng kể – tôi ước tính khoảng 15% so với khi không có watermark. Đội ngũ Mekong đã bù đắp bằng cách tối ưu hóa nén dữ liệu gốc, nhưng điều này đặt ra câu hỏi: tại sao họ lại chấp nhận chi phí cao hơn để nhúng watermark?
Góc nhìn phản trực giác: Watermark này không chỉ để phục vụ mục đích bảo mật, mà có thể là một công cụ thu thập dữ liệu người dùng. Trong mã nguồn, tôi tìm thấy một hàm extractWatermark() được gọi từ một endpoint API không được ghi chép – một endpoint mà chỉ sequencer mới có quyền truy cập. Hàm này giải mã watermark để lấy ra địa chỉ người gửi, thời gian giao dịch và một nonce ngẫu nhiên. Điều này cho phép đội ngũ Mekong xác định chính xác ai đã thực hiện giao dịch nào, ngay cả khi người dùng sử dụng các ví ẩn danh. Điểm mù bảo mật ở đây là watermark không được thiết kế để chống lại các cuộc tấn công từ chính sequencer: nếu sequencer bị kiểm soát, kẻ tấn công có thể thay đổi watermark hoặc làm lộ dữ liệu người dùng. Hơn nữa, các developer đã phát hiện ra rằng bằng cách gửi giao dịch với gasPrice cực thấp hoặc sử dụng calldata là các byte ngẫu nhiên, họ có thể làm cho watermark bị lỗi – vì cơ chế entropy của sequencer không thể tạo ra watermark duy nhất cho các giao dịch có entropy đầu vào quá cao. Một số nhà phát triển đã đăng tải công cụ 'Mekong Unwatermarker' trên GitHub, cho phép loại bỏ trường 32 byte này trước khi giao dịch được gửi lên sequencer, về cơ bản là bypass watermark hoàn toàn.

Từ góc nhìn của một người đã từng audit ICO và nghiên cứu DeFi, tôi thấy rằng watermark của Mekong là một bước đi thông minh về mặt kỹ thuật nhưng lại tiềm ẩn rủi ro về quyền riêng tư. Đội ngũ phát triển có thể biện minh rằng watermark giúp truy vết gian lận hoặc tuân thủ quy định AML, nhưng việc triển khai âm thầm mà không thông báo cho người dùng là một vấn đề về minh bạch. Trong bối cảnh thị trường đi ngang hiện tại, các dự án Layer2 đang cạnh tranh khốc liệt về chi phí và tốc độ, và việc thêm watermark có thể là một chiến lược để tạo lợi thế cạnh tranh thông qua việc thu thập dữ liệu người dùng. Nhưng nếu cộng đồng phát hiện ra và phản ứng tiêu cực, điều này có thể gây tổn hại đến uy tín của dự án. Tôi dự đoán rằng trong vòng 6 tháng tới, hoặc Mekong sẽ phải công khai cơ chế watermark và cho phép người dùng lựa chọn tắt nó, hoặc họ sẽ đối mặt với một làn sóng tẩy chay từ cộng đồng builder. Câu hỏi đặt ra là: liệu một Layer2 Việt Nam có dám đánh đổi sự minh bạch để lấy lợi thế kỹ thuật, hay họ sẽ chọn con đường an toàn hơn?