Ngày 19 tháng 9, Rayls đăng một bài (Privacy has a price),trong tiêu đề có chữ honest math, nhưng cả bài chỉ đưa ra một khoảng số: một chứng minh cần từ vài trăm mili giây đến vài giây. Mấy tuần liền mình viết về kiến trúc quyền riêng tư của Rayls, lần này mình chia sẻ thêm nội dung mới: mình tải mã nguồn chứng minh mà họ công khai, chạy thực tế vài chục lần và chia sẻ kết luận thú vị này với mọi người!

Trước hết nói xem blog đã nói gì. Lập luận cốt lõi của họ có thể nén thành hai câu. Câu 1 là chi phí nằm ở đâu: giao dịch bí mật đắt hơn giao dịch minh bạch, cái đắt nằm ở việc tạo chứng minh zero-knowledge; còn xác minh lại rẻ, một chứng minh cho một bản chuyển tiền bí mật cơ bản trên phần cứng thương mại phổ thông cần vài trăm mili giây đến vài giây. Câu 2 là phải hỏi gì: tổ chức không nên chỉ hỏi TPS, mà phải hỏi throughput của mình dưới mức riêng tư và kiểm toán mà mình cần khi đối diện với tải công việc nghiệp vụ thực—blog cho rằng khối lượng thanh toán giữa các ngân hàng không lớn, hoàn toàn nằm trong phạm vi năng lực của hệ thống thanh toán bảo mật.

这篇文章做的事很简单,就是把博客自己提出的这个问题,拿去问 Enygma 公开的代码。下文凡是写「博客说」的,是原文的主张;写「我测到」「我算的」,是我自己的结果和推算,请分开看。


我怎么 đo的

Zero-knowledge proof có thể hiểu như một “biên nhận toán học”: bên thanh toán không công khai số dư và số tiền, nhưng vẫn có thể chứng minh với mạng lưới rằng khoản đó là đúng. Hệ thống chứng minh Enygma dùng gọi là Groth16; mã dịch vụ tạo chứng minh được mã nguồn mở trên GitHub tại kho rayls-sovereign-gnark-api. README mô tả nó như giao diện chứng minh đứng sau Privacy Ledger và Private Network Hub.

Mình đo trên nhánh main với commit mới nhất 67c4c26 vào ngày 22/09/2026. Mạch điện và mã chứng minh không đổi dù chỉ một dòng. Mình chỉ viết thêm vài file kiểm thử để gọi hàm chứng minh của chính kho, dữ liệu giao dịch đưa vào cũng lấy từ bộ test có sẵn trong kho, gồm một nhóm k=2 và một nhóm k=6.

Ở đây k là kích thước tập ẩn danh (anonymous set). Theo code mạch, mỗi lần chuyển tiền sẽ yêu cầu k bên tham gia, mỗi bên tạo một cam kết giá trị (amount commitment). Bên gửi giấu mình trong đó, người ngoài không biết ai trả cho ai. k càng lớn thì mức “che giấu” càng sâu và mạch cũng càng lớn. Kịch bản stress test có sẵn trong kho sử dụng k=6.

密钥是我在本机用同样的 groth16.Setup 生成的。这不影响耗时,因为证明时间取决于电路结构,与密钥的具体数值无关。仓库 README 也写明,仓库里那套密钥本身就是单方 Setup 生成的开发测试产物,并非多方可信设置仪式的结果,生产部署需要另做仪式,这和博客说 Groth16 需要可信设置是一致的。

Môi trường thử nghiệm là một máy ảo Linux single-core, Intel Xeon 2.1GHz, 3GB RAM. Mỗi mức liên tục tạo 20 chứng minh; sau vài phút thì toàn bộ bài test được chạy lại vòng hai từ đầu.

đo được con số

Kết quả vòng hai: với chứng minh k=6, 20 lần lấy trung vị 1.96 giây, nhanh nhất 1.94 giây, chậm nhất 2.12 giây; trung vị k=2 là 0.96 giây. Vòng một lần lượt là 1.97 giây và 0.96 giây, hai vòng chênh chưa đến 1%. Việc xác thực một chứng minh chỉ cần 1.9 mili giây.


这组数字落在博客给的区间里。更值得看的是生成和验证的比例,1.96 秒对 1.9 毫秒,大约 1,000 比 1。博客说时间主要花在生成上、验证很便宜,这个比例把「主要」两个字变成了一个具体的倍数。

Mình cũng làm một kiểm tra ngược. Trong bộ test có sẵn hai nhóm dữ liệu cố tình sửa sai: nhóm k=2 sửa một giá trị chuyển tiền từ 0 thành 10, còn nhóm k=6 làm sai một giá trị băm. Cả hai nhóm đều bị từ chối ở giai đoạn chứng minh, lần lượt báo lỗi điều kiện không thỏa mãn ở dòng 517 và 1085, nên không thể tạo được chứng minh. Điều này tất nhiên không chứng minh rằng mạch không có lỗ hổng; chỉ cho thấy hai kiểu sửa sai rõ ràng như vậy sẽ bị ngăn lại.

两个博客里没有的细节

Chi tiết thứ nhất nằm ở quy mô mạch. Cứ thêm một bên tham gia, số lượng ràng buộc tăng cố định thêm 8,112: từ 37,140 (k=2) tăng thẳng lên 69,588 (k=6). Đây là một đường thẳng. Nhưng hệ thống chứng minh phân bổ không gian tính toán cho mạch theo việc làm tròn lên theo lũy thừa của 2: k=2 đến k=5 đều vừa trong 65,536; đến k=6 thì vượt thêm 4,052, nên quy mô tính toán trực tiếp tăng gấp đôi lên 131,072.

Bằng chứng nằm ở kích thước tệp của khóa chứng minh. Từ k=2 đến k=5, mỗi mức khóa tăng ổn định 918,382 byte; đến k=6 thì tăng đột ngột 3,015,534 byte—hơn gấp hơn ba lần so với mỗi mức trước đó. Hướng về thời gian cũng khớp: từ k=2 đến k=6 ràng buộc tăng 87%, thời gian chứng minh tăng 104%. Phần thêm bao nhiêu thời gian riêng cho bước vượt ngưỡng này chỉ có thể xác định khi có dữ liệu giao dịch của k=3 đến k=5; hiện tại kho lưu trữ chỉ cung cấp hai mức k=2 và k=6, nên bây giờ mình chỉ có thể xác nhận là hướng đi là nhất quán. Nếu môi trường sản xuất dùng k=6, thì nó nằm ở phía bên kia của “ranh giới” này; chi phí đổi từ k=5 sang k=6 sẽ lớn hơn giữa các mức trước—đó là suy đoán của mình, không phải lời của blog.

Chi tiết thứ hai là tính nhất quán. Mình tạo ra năm mức khóa chứng minh từ mã nguồn công khai: kích thước tệp và sản phẩm xây dựng (build) chính thức của kho khớp chính xác đến từng byte; khóa xác minh k=6 cũng giống hệt. Nội dung khóa chắc chắn khác nhau vì mỗi lần Setup đều tạo lại ngẫu nhiên; nhưng kích thước hoàn toàn trùng, cho thấy cấu trúc mạch được biên dịch từ mã nguồn công khai và bản build chính thức là cùng một bộ. Ở bài trước, khi mình viết về kiểm toán của Axyl, mình đã đề cập rằng giữa kho công khai và phiên bản private dùng khi audit có một đoạn lịch sử không truy vết được. Lần này, ở phía dịch vụ chứng minh, ít nhất phần “mã nguồn khớp với bản build chính thức” là trùng khớp; còn việc bản build có khớp với triển khai sản xuất hay không thì các tài liệu công khai vẫn chưa trả lời được。


将博客里提出的问题代入真实负载

Nối tiếp bài trước. Ở bài đó mình đã mổ xẻ nguồn gốc của vài con số về 15,000+ TPS; các con số đó mô tả lớp đồng thuận của Axyl. Lần này mình đo một lớp khác, tức là thời gian chứng minh mà mỗi giao dịch bí mật trước tiên cần “chi trả” ở bên gửi. Hai lớp số liệu không thể cộng lại và cũng không thể thay thế nhau.

Quy mô mà blog nêu là: một ngân hàng đại lý quan hệ quy mô lớn mỗi ngày vài nghìn giao dịch; một dịch vụ thanh toán toàn ngạch theo thời gian thực được token hóa ở cấp ngân hàng trung ương mỗi ngày vài chục nghìn giao dịch chuyển tiền giá trị lớn. Mình thay bằng dữ liệu công khai của hai hệ thống sẵn có: Fedwire Funds Service của Cục Dự trữ Liên bang Mỹ năm 2025 có 869,187 giao dịch/ngày (trung bình), còn CHAPS của Anh cả năm 2025 có 210,483 giao dịch/ngày (trung bình); các con số này lần lượt lớn hơn hàng chục lần và vài lần so với ví dụ của blog.

下面是我算的,不是博客的说法。按单核实测的 1.96 秒一个 k=6 证明,一个核一天最多生成约 44,000 个。把 Fedwire 2025 年的日均笔数全部换成 k=6 证明,需要约 473 个核小时,相当于 20 个核全天不停;CHAPS 需要约 115 个核小时,不到 5 个核。英格兰银行 2021 年的介绍材料记载,CHAPS 单日笔数纪录是 2018 年 3 月 29 日的 320,034 笔,约为当年日均的 1.7 倍,按这个峰值算也只要约 174 个核小时。

Cần nói rõ phạm vi suy đoán này. Nó quy đổi theo cách: mỗi chứng minh chiếm một nhân. Các chứng minh độc lập với nhau nên có thể phân cho các nhân khác nhau để tạo đồng thời. Nó tính chính bản thân chứng minh chuyển tiền; việc nạp (deposit), rút (withdraw) và DvP là các loại mạch khác. Đồng thời, truyền dữ liệu mạng và phần đối soát/ghi lên chuỗi cũng không nằm trong đó. Ngoài ra, blog nói rằng chứng minh do bên gửi tạo, nghĩa là tải vốn đã được phân tán tự nhiên trên các nút riêng của từng tổ chức, chứ không tập trung vào một máy.

Vì vậy kết luận của mình là: blog nói rằng khối lượng thanh toán giữa các ngân hàng nằm trong khả năng của hệ thống thanh toán bảo mật, và đánh giá đó vẫn đúng ở quy mô thực tế. Họ dùng dữ liệu quy mô nhỏ hơn so với hệ thống thực; nhưng khi thế con số thật vào thì kết luận vẫn đứng vững—thậm chí điều này lại thuyết phục hơn ví dụ trong nguyên văn. Đoạn về thanh toán bán lẻ, chính blog cũng thừa nhận đó là “nút thắt” thực sự; các số liệu lần này không làm thay đổi đánh giá đó.


Những con số này dùng như thế nào

Tất cả các con số lần này đều đo trên một nhân (single-core), có thể coi là tham chiếu hơi thận trọng. Lý do nằm trong code: khi gnark tạo chứng minh, phép nhân đa mũ (multi-scalar multiplication) nặng nhất được chia thành nhiều tác vụ để tính song song theo số CPU của máy (đọc trực tiếp runtime.NumCPU() trong backend/groth16/bn254/prove.go). Máy chủ của tổ chức thường là multi-core; cùng một chứng minh sẽ được chia cho nhiều nhân hơn để tính cùng lúc, nên thời gian sẽ thấp hơn kết quả single-core ở đây. Cụ thể có thể nhanh hơn bao nhiêu phụ thuộc vào số lượng nhân và hiệu năng từng nhân.

本文的测量范围是转账电路的证明生成本身。完整的 HTTP 服务链路里还有 JSON 解析和网络开销,存入、提取和 DvP 则是另外几类电路。密钥大小一致说明电路结构相同,但不代表密钥内容相同,这一点前面已经解释过。


Nhận định của mình

Tiêu đề blog là honest math, nhưng các con số trong phần nội dung lại chỉ đưa ra một khoảng. Chạy lần này xong thì khoảng đó là đúng, và phần kết luận về khối lượng thanh toán giữa ngân hàng cũng vẫn vững.

Mình muốn xem nhiều hơn ở bước tiếp theo. Trang benchmark của Axyl nêu rõ điều kiện như Ủy ban 4 nút và giao dịch 512 byte; hiệu năng chứng minh của Enygma cũng xứng đáng được đối xử tương tự: lần công bố số liệu tiếp theo nên nêu rõ giá trị k và cấu hình phần cứng, thì các tổ chức có thể tự tái tạo như mình. Đây chính là dạng tuyên bố về hiệu năng có thể vượt qua kiểm chứng sản xuất mà cuối bài blog cũng nói tới. Việc tái tạo không khó—các lệnh trong ảnh chụp màn hình chính là toàn bộ bước thực hiện.

Nguồn tham khảo: Blog chính thức của Rayls (Privacy has a price: the honest math behind confidential settlement at scale) (ngày 19/09/2026); GitHub raylsnetwork/rayls-sovereign-gnark-api, commit 67c4c26 (ngày 22/09/2026 đọc và đo thực nghiệm); Thống kê hằng năm của Fedwire Funds Service (cập nhật ngày 26/01/2026); Ngân hàng Trung ương Anh Payment and settlement statistics và (A brief introduction to RTGS and CHAPS) (ấn bản năm 2021).

#Rayls $RLS