
Làm thế nào để nâng cao hiệu suất tạo chứng minh thông qua mô hình "đường ống"?
Tuyển chọn TechFlowTuyển chọn TechFlow

Làm thế nào để nâng cao hiệu suất tạo chứng minh thông qua mô hình "đường ống"?
Bài viết sẽ đi sâu vào việc ứng dụng phương pháp tạo bằng chứng kiến thức không (zero-knowledge proof) theo kiểu dây chuyền (pipeline) trong zkRollup.
Tác giả: Khang Thủy Việt, CEO Fox Tech; Mạnh Huyền Tế, Nhà khoa học trưởng Fox Tech
Hiệu đính: Lâm Diễm Hi, CTO Fox Tech
Lời mở đầu
Trong thời đại kỹ thuật số ngày nay, cùng với sự phát triển mạnh mẽ của công nghệ blockchain, sự quan tâm của con người đối với quyền riêng tư và tính bảo mật dữ liệu ngày càng gia tăng. Để hiện thực hóa các ứng dụng blockchain hiệu quả và có khả năng mở rộng hơn, nhiều giải pháp đã được đề xuất, trong đó có công nghệ Chứng minh không kiến thức (Zero-Knowledge Proof). Chứng minh không kiến thức là một công cụ mật mã mạnh mẽ, cho phép xác minh tính đúng đắn của một tuyên bố mà không tiết lộ thông tin nhạy cảm.
Trong những năm gần đây, zkRollup – một sáng tạo quan trọng trong công nghệ mở rộng blockchain – đã thu hút được sự chú ý rộng rãi. zkRollup đóng gói một lượng lớn giao dịch, thực hiện chúng bên ngoài chuỗi (off-chain), đồng thời sử dụng đặc điểm của chứng minh không kiến thức để xác minh tính chính xác của các giao dịch này, từ đó nâng cao đáng kể thông lượng và khả năng mở rộng của blockchain. Trong việc triển khai zkRollup, cách thức phân bổ và đóng gói giao dịch cũng như tạo ra bằng chứng trở thành phần thiết yếu của hệ thống zkRollup.
Trong hệ thống Layer1, các giao dịch được đóng gói theo dạng khối và do thợ đào xử lý. Còn trong hệ thống Layer2, việc làm thế nào để đóng gói giao dịch, hay nói cách khác là làm sao tạo ra một khối Layer2, cần được xem xét riêng biệt.
FOX là dự án mở rộng Layer2 zkRollup dựa trên zkEVM, và đang nghiên cứu áp dụng phương pháp xử lý theo dây chuyền (pipeline) để xử lý giao dịch theo từng đợt, kỳ vọng sẽ mang lại sự cải thiện lớn về hiệu suất.
Bài viết này sẽ đi sâu vào việc khám phá ứng dụng của phương pháp tạo chứng minh không kiến thức theo dây chuyền trong zkRollup. Trước tiên, chúng tôi sẽ phân tích cách thức đóng gói giao dịch cơ bản. Sau đó, chúng tôi sẽ tập trung vào kỹ thuật tạo chứng minh không kiến thức theo dây chuyền, phân tích chi tiết nguyên lý và các trường hợp ứng dụng của nó.
Phương thức đóng gói giao dịch thông thường
Trong các hệ thống blockchain truyền thống, việc xác nhận và đóng gói giao dịch là một quá trình tốn thời gian và tiêu tốn tài nguyên. Thông thường, các giao dịch được xác minh từng cái một rồi thêm vào khối, sau đó đạt được sự đồng thuận qua thuật toán đồng thuận, từ đó cập nhật trạng thái của blockchain. Tuy nhiên, cách thức xác minh và đóng gói từng giao dịch này tồn tại những hạn chế rõ ràng, bao gồm thông lượng thấp và độ trễ cao.
Trong quy trình đóng gói giao dịch thông thường, trước tiên một nhóm giao dịch chờ xử lý sẽ được thu thập lại, có thể là các giao dịch do người dùng gửi hoặc đến từ các chuỗi khác. Sau đó, các giao dịch này sẽ được xác minh nhằm đảm bảo tính hợp lệ và hiệu lực. Các bước xác minh bao gồm kiểm tra chữ ký giao dịch, xác thực tính hợp lệ và tính nhất quán của giao dịch, v.v. Một khi giao dịch vượt qua quá trình xác minh, chúng sẽ được đóng gói thành một đợt, hình thành nên một khối chờ gửi lên.
Trong hệ thống zkRollup, các giao dịch do người dùng gửi cũng sẽ được đặt vào pool giao dịch để chờ xử lý. Trong hệ thống FOX, Sequencer sẽ định kỳ lấy các giao dịch từ pool, thực thi và sắp xếp thứ tự cục bộ, tạo thành một gói giao dịch, tức là một khối. Lúc này, kết quả thực thi giao dịch sẽ được gửi lên Layer1, đồng thời kết quả và dữ liệu giao dịch cũng được gửi đến nút Folder chịu trách nhiệm tạo bằng chứng.
Dựa trên hiểu biết cơ bản về thuật toán chứng minh không kiến thức (độc giả có thể tham khảo các bài viết trước đây của FOX), Folder muốn tạo bằng chứng phải nhận được dữ liệu đầu vào và kết quả thực thi hoàn tất. Điều này khiến nếu thực hiện theo cách thông thường, phải đợi Sequencer hoàn thành toàn bộ việc thực thi các giao dịch mới chuyển sang Folder. Để tận dụng hiệu quả hơn tài nguyên tính toán, chúng tôi mong muốn Sequencer ngay sau khi thực thi xong một phần giao dịch có thể lập tức chuyển sang Folder để bắt đầu tạo bằng chứng.
Mô hình xử lý dây chuyền mà FOX đang nghiên cứu
Để đạt được mục tiêu nêu trên, chúng ta cần để Sequencer thực thi giao dịch theo từng đợt, và ngay sau khi thực thi xong mỗi đợt thì lập tức gửi kết quả trung gian đến Folder.
Cụ thể hơn, giả sử tổng số giao dịch trong gói là 100, số lượng giao dịch mỗi đợt là 10, thì mô hình xử lý dây chuyền có thể được biểu diễn bằng sơ đồ dưới đây.

Hình 1: Mô hình dây chuyền tạo bằng chứng giao dịch
Tiếp theo, chúng ta sẽ phân tích đơn giản về chi phí thời gian của hai phương pháp, và thảo luận điều kiện nào thì phương pháp dây chuyền sẽ hiệu quả hơn. Để đơn giản hóa, phần thảo luận dưới đây không tính thời gian Sequencer gửi dữ liệu sang Folder.
Giả sử số lượng giao dịch trong gói là n, số lượng đợt là k, hàm thời gian thực thi của Sequencer là exe(), hàm thời gian tạo bằng chứng của Folder là prove(), hàm thời gian gộp bằng chứng là aggr(), tổng thời gian của phương pháp thông thường là Sum1, tổng thời gian của phương pháp dây chuyền là Sum2.
Theo quá trình nêu trên, phương pháp thông thường phụ thuộc vào việc Sequencer thực thi xong rồi Folder mới tạo bằng chứng, tổng thời gian cần thiết là:
Sum1 = exe(n) + prove(n)
Còn thời gian của phương pháp dây chuyền bao gồm: thời gian thực thi đợt giao dịch đầu tiên của Sequencer, cộng với giá trị lớn hơn giữa thời gian tạo bằng chứng cho các đợt tiếp theo và thời gian thực thi các đợt còn lại, cộng thêm thời gian gộp cuối cùng.
Sum2 = exe(n/k) + max{k × prove(n/k), (k-1) × exe(n/k)} + aggr(k)
Do đó, so sánh tổng thời gian của cả hai, hàm thời gian thực thi exe() có thể xấp xỉ là hàm tuyến tính, còn với prove(), vì thuật toán chứng minh của hệ thống FOX có thời gian tạo bằng chứng tuyến tính, nên prove() cũng là hàm tuyến tính.
Có thể rút ra kết luận:
-
Nếu exe(n) > prove(n), thì khi prove(n) > aggr(k), ta có Sum1 > Sum2.
-
Nếu exe(n) < prove(n), thì khi (k-1) × exe(n/k) > aggr(k), ta có Sum1 > Sum2.
Vì vậy, nếu thời gian gộp aggr(k) đủ nhỏ, và thời gian tạo bằng chứng là hàm tuyến tính, thì việc áp dụng phương pháp dây chuyền rất hữu ích trong việc nâng cao hiệu suất hệ thống, giảm tổng thời gian tạo bằng chứng.
Phân tích trên chỉ đúng với các thuật toán chứng minh có thời gian tuyến tính, từ đó cũng thấy rõ tầm quan trọng của việc FOX lựa chọn thuật toán chứng minh thời gian tuyến tính.

Hình 2: Sơ đồ quy trình tính toán bằng chứng
Lý do nói phương pháp dây chuyền vẫn đang trong giai đoạn nghiên cứu là bởi khi phân tích mô hình này, ta thấy rằng số lần chia nhỏ gói giao dịch càng nhiều, thì Sequencer càng phải ghi nhận và truyền dữ liệu nhiều hơn đến Folder, dẫn đến chi phí tăng lên. Tuy nhiên, đối với Folder, khối lượng tính toán mỗi lần xử lý sẽ giảm nhẹ nhưng quá trình gộp lại trở nên phức tạp hơn. Vì vậy, việc chia nhỏ như thế nào là tối ưu là vấn đề cần cân nhắc kỹ lưỡng, và phụ thuộc cụ thể vào hiệu suất tính toán của Sequencer và Folder.
Việc phân bổ và đóng gói giao dịch hiệu quả để từng đợt tạo bằng chứng là điểm tối ưu then chốt
Trong việc triển khai zkRollup, việc phân bổ và đóng gói giao dịch một cách hiệu quả để tạo bằng chứng là điểm tối ưu then chốt. FOX đang liên tục tối ưu hóa mô hình và tìm kiếm các giải pháp hiệu quả hơn. Dưới đây là quy trình cơ bản mà FOX đang áp dụng:
-
Thu thập giao dịch: Thu thập các giao dịch chờ xử lý và lưu trữ chúng vào một pool giao dịch. Các giao dịch này có thể do người dùng gửi hoặc do các hệ thống hoặc hợp đồng khác tạo ra.
-
Sắp xếp giao dịch: Sắp xếp các giao dịch trong pool để xác định thứ tự đóng gói. Thông thường có thể sử dụng các thuật toán sắp xếp dựa trên mức độ ưu tiên, dấu thời gian hoặc các yếu tố khác. Mục tiêu của việc sắp xếp là tối đa hóa tổng thể thông lượng và hiệu suất giao dịch.
-
Phân bổ giao dịch: Phân bổ các giao dịch đã được sắp xếp vào các khối phù hợp. Trong zkRollup, thường sẽ tạo một khối mới để chứa một số lượng nhất định giao dịch. Quá trình phân bổ có thể sử dụng thuật toán tham lam (greedy) hoặc các chiến lược phân bổ khác nhằm tối đa hóa tỷ lệ sử dụng dung lượng của mỗi khối.
-
Đóng gói khối: Đóng gói các giao dịch đã phân bổ để tạo thành một khối hoàn chỉnh. Trong kiến trúc Layer2 của FOX, khối này thực tế chỉ chứa thông tin tóm tắt của giao dịch, có thể là hàm băm giao dịch hoặc dạng biểu diễn gọn nhẹ khác, chứ không phải nội dung chi tiết. Thông tin chi tiết giao dịch sẽ được lưu trữ trong Ringer của FOX, nhằm đảm bảo tính sẵn có dữ liệu (DA).
-
Tạo bằng chứng: Tạo bằng chứng tương ứng cho khối đã đóng gói. Bằng chứng này cần chứng minh được tính hợp lệ của từng giao dịch trong khối và tính nhất quán của toàn bộ khối. Mô hình "dây chuyền" của FOX chủ yếu được áp dụng ở khâu này, nhằm tận dụng hiệu quả hơn sức mạnh tính toán của Folder, chia nhỏ giao dịch trong một khối và gửi từng đợt đến Folder để tạo bằng chứng. Folder sẽ lần lượt tính toán bằng chứng đúng đắn cho mỗi đợt giao dịch, sau đó gộp lại. Thông thường, bằng chứng này dựa trên thuật toán chứng minh không kiến thức nhanh, chuyên biệt FOAKS của FOX, bằng cách so sánh các giao dịch trong khối với các quy tắc chuyển đổi trạng thái để xác minh liệu chúng có tuân thủ các quy tắc và ràng buộc của hệ thống hay không.
-
Xác minh bằng chứng: Bên nhận có thể sử dụng bằng chứng để xác minh tính hiệu lực của khối mà không cần tính toán lại toàn bộ khối. Quá trình xác minh này có thể rất hiệu quả vì nó chỉ yêu cầu kiểm tra bằng chứng, chứ không cần thực hiện các phép tính phức tạp trên giao dịch.
"Mô hình dây chuyền" của FOX chủ yếu diễn ra ở khâu tạo bằng chứng. Trong việc thu thập và sắp xếp giao dịch, Sequencer thu thập các giao dịch chờ xử lý và sắp xếp chúng theo một quy tắc nhất định để xác định thứ tự thực thi. Trong quá trình thực thi giao dịch theo từng đợt tiếp theo, Sequencer sẽ thực thi từng nhóm giao dịch. Mỗi nhóm giao dịch trong một đợt được gửi đến bộ máy thực thi để xử lý. Bộ máy thực thi mô phỏng việc thực thi các giao dịch này và ghi lại kết quả trung gian của quá trình chuyển đổi trạng thái. Ngay sau khi thực thi xong mỗi đợt giao dịch, Sequencer sẽ gửi kết quả trung gian đến Folder.
Việc này có thể thực hiện bằng cách mã hóa kết quả trung gian dưới dạng cập nhật trạng thái, hàm băm giao dịch,... và gửi từng đợt qua kênh truyền thông đến Folder. Sau khi Folder nhận được các kết quả trung gian, nó sẽ sử dụng các kết quả này để từng đợt tạo ra bằng chứng tương ứng. Việc tạo bằng chứng dựa trên thuật toán chứng minh không kiến thức FOAKS tự phát triển của FOX, sử dụng kết quả trung gian làm đầu vào để chứng minh tính hợp lệ của giao dịch và tính nhất quán của toàn bộ khối.
Bước cuối cùng là xác minh bằng chứng. Bằng chứng đã tạo sẽ được gửi đến bên xác minh, tức là hợp đồng thông minh Verifier được triển khai trên Ethereum, để xác minh tính hiệu lực của khối. Verifier sử dụng thuật toán xác minh để kiểm tra bằng chứng, đảm bảo tính đúng đắn và hợp pháp của nó.
Thông qua cách thức dây chuyền này, Sequencer có thể liên tục gửi kết quả trung gian đến Folder trong khi đang thực thi giao dịch, từ đó từng đợt tạo ra bằng chứng. Điều này giúp nâng cao hiệu suất và thông lượng của toàn bộ hệ thống, đồng thời giảm độ trễ trong việc tạo bằng chứng.
Kết luận
Bài viết này giới thiệu một phương án mới mẻ trong zkRollup – cách xử lý theo từng đợt để tạo bằng chứng, gọi là phương pháp dây chuyền, đồng thời phân tích chi tiết chi phí thời gian của phương pháp này. Đối với các thuật toán chứng minh tuyến tính, việc sử dụng hợp lý phương pháp dây chuyền có thể giúp giảm tổng thời gian tạo bằng chứng. Hệ thống chứng minh mà FOX áp dụng đã đạt được thời gian chứng minh tuyến tính, điều này rất hữu ích trong việc tạo bằng chứng nhanh chóng và cải thiện trải nghiệm người dùng. Đội ngũ FOX sẽ tiếp tục nghiên cứu và tối ưu hóa phương án này.
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News














