BTC
ETH
HTX
SOL
BNB
Xem thị trường
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

Nova: Một chương mới về bằng chứng không có kiến ​​thức

HTX
特邀专栏作者
2023-07-11 05:54
Bài viết này có khoảng 13863 từ, đọc toàn bộ bài viết mất khoảng 20 phút
Nova là một hệ thống chứng minh không chứa kiến ​​thức mới do Microsoft phát triển, sử dụng công nghệ có tên Relaxed Rank-1 Constraint Systems (Relaxed R1CS) để nâng cao hiệu quả và tính linh hoạt của chứng minh.
Tóm tắt AI
Mở rộng
Nova là một hệ thống chứng minh không chứa kiến ​​thức mới do Microsoft phát triển, sử dụng công nghệ có tên Relaxed Rank-1 Constraint Systems (Relaxed R1CS) để nâng cao hiệu quả và tính linh hoạt của chứng minh.

giới thiệu

giới thiệu

Bằng chứng không có kiến ​​thức là một kỹ thuật quan trọng trong mật mã cho phép một người chứng minh cho người khác rằng một tuyên bố là đúng mà không tiết lộ bất kỳ thông tin nào khác. Công nghệ này có nhiều ứng dụng trong nhiều lĩnh vực, bao gồm xác thực, chuỗi khối và điện toán an toàn, cùng nhiều lĩnh vực khác. Nova là một hệ thống chứng minh không có kiến ​​thức mới do Microsoft phát triển, sử dụng một kỹ thuật có tên Hệ thống ràng buộc thư giãn cấp 1 (Relaxed R 1 CS) để cải thiện hiệu quả và tính linh hoạt của bằng chứng. Chương cuối cùng giải thích chi tiết về mã nguồn.

Ưu điểm của Nova

Ưu điểm chính của Nova là kỹ thuật R1CS thoải mái mà nó sử dụng. R1CS là một hệ thống xây dựng các bằng chứng không có kiến ​​thức, có thể được sử dụng để chứng minh rằng người ta biết nghiệm của một tập hợp các phương trình đa thức mà không tiết lộ bất kỳ thông tin nào về nghiệm đó. Tuy nhiên, các hệ thống R1CS truyền thống cần sử dụng lượng lớn tính ngẫu nhiên trong quy trình chứng minh, điều này khiến quá trình tạo và xác minh bằng chứng rất phức tạp và tốn thời gian. Nova giải quyết vấn đề này bằng cách sử dụng R1CS thoải mái, cho phép sử dụng ít tính ngẫu nhiên hơn trong bằng chứng, do đó cải thiện đáng kể hiệu quả của bằng chứng.

Nova cũng có những lợi thế khác. Ví dụ: nó hỗ trợ tính toán tăng dần, có nghĩa là các hàm phức tạp có thể được tính toán từng bước thay vì tính toán toàn bộ hàm cùng một lúc. Điều này rất hữu ích khi xử lý dữ liệu quy mô lớn hoặc thực hiện các phép tính phức tạp. Ngoài ra, Nova còn hỗ trợ tính toán đa thức, cho phép nó xử lý các tác vụ chứng minh phức tạp hơn.

Nhược điểm của Nova

Mặc dù Nova có nhiều ưu điểm nhưng nó cũng có một số nhược điểm. Đầu tiên, vì Nova sử dụng R1CS thoải mái nên các bằng chứng của nó có thể không mạnh bằng các hệ thống R1CS truyền thống. Điều này là do R1CS được nới lỏng cho phép sử dụng ít tính ngẫu nhiên hơn trong bằng chứng, điều này có thể làm giảm tính bảo mật của bằng chứng. Tuy nhiên, các nhà phát triển Nova đã thực hiện một số bước để giải quyết vấn đề này, chẳng hạn như sử dụng thuật toán mã hóa mạnh hơn và các chiến lược chứng minh phức tạp hơn.

Thứ hai, việc triển khai Nova tương đối phức tạp, điều này có thể làm tăng khó khăn trong việc sử dụng và bảo trì. Nova sử dụng nhiều kỹ thuật mã hóa tiên tiến, chẳng hạn như điện toán đa thức, hoạt động nhóm và dự đoán ngẫu nhiên, đòi hỏi sự hiểu biết sâu sắc về các kỹ thuật này để sử dụng và sửa đổi Nova một cách hiệu quả.

Vị trí quan trọng của Nova trong lĩnh vực chứng minh không có kiến ​​thức

Nova chiếm một vị trí quan trọng trong lĩnh vực chứng minh không có kiến ​​thức. Sự xuất hiện của nó đã mở ra một con đường mới cho sự phát triển của bằng chứng không có kiến ​​thức. Công nghệ R1CS thoải mái được Nova áp dụng giúp quá trình tạo và xác minh bằng chứng hiệu quả hơn, điều này rất quan trọng đối với các ứng dụng chứng minh không có kiến ​​thức quy mô lớn. Ngoài ra, Nova còn hỗ trợ tính toán gia tăng và tính toán đa thức, cho phép nó xử lý các tác vụ chứng minh phức tạp hơn, mở rộng hơn nữa phạm vi ứng dụng của chứng minh không có kiến ​​thức.

https://github.com/microsoft/Nova

Giải thích mã nguồn của Nova

Trong thư mục src/, có một số thư mục con quan trọng:

bellperson/: Thư mục này có thể chứa mã cho thuật toán Bellman-Ford.

tiện ích/: Thư mục này có thể chứa một số công cụ để xây dựng bằng chứng zk-SNARK.

nhà cung cấp/: Thư mục này có thể chứa một số mã nhà cung cấp, chẳng hạn như keccak.rs có thể là mã để triển khai hàm băm Keccak.

đặc điểm/: Thư mục này có thể chứa một số đặc điểm của Rust, được sử dụng để xác định một số hành vi phổ biến.

tiêu đề phụ

Nội dung của tệp src/bellperson/mod.rs:

Mô-đun này chủ yếu được sử dụng để tạo R1CS (Hệ thống ràng buộc xếp hạng-1, một hệ thống ràng buộc cho zk-SNARK).

Nó chứa ba mô-đun con:

r1cs: Mô-đun này có thể chứa mã cho R1CS.

Shape_cs: Mô-đun này có thể chứa mã cho các hệ thống ràng buộc hình dạng.

Trong phần thử nghiệm, nó định nghĩa một hàm tổng hợp_alloc_bit có hệ thống ràng buộc và sau đó thêm một số ràng buộc để kiểm tra xem hai bit đầu vào có thực sự là bit hay không. Sau đó, nó định nghĩa một hàm test_alloc_bit_with, hàm này đầu tiên tạo ra một hình dạng

tiêu đề phụ

Nội dung của file src/bellperson/r 1 cs.rs:

Tệp này chủ yếu xác định hai đặc điểm: `NovaWitness` và `NovaShape`, tương ứng cung cấp các phương thức để lấy `R 1 CSInstance` và `R 1 CSWitness`, và `R 1 CSShape` và `CommitmentKey` từ người triển khai .

- Đặc điểm `NovaWitness` có phương thức `r1cs_instance_and_witness` nhận vào `R 1 CSShape` và `CommitmentKey`, đồng thời trả về `R 1 CSInstance` và `R 1 CSWitness`. Đặc điểm này được triển khai cho cấu trúc `SatisfyingAssignment`, có nghĩa là bất kỳ `SatisfyingAssignment` nào cũng có thể sử dụng phương thức này để nhận được `R 1 CSInstance` và `R 1 CSWitness`.

- Đặc điểm `NovaShape` có phương thức `r 1 cs_shape` trả về `R 1 CSSShape` và `CommitmentKey`. Đặc điểm này được triển khai cho cấu trúc `ShapeCS`, có nghĩa là bất kỳ `ShapeCS` nào cũng có thể sử dụng phương thức này để nhận `R 1 CSSShape` và `CommitmentKey`.

Nói chung, mục đích chính của tệp này là cung cấp cách tạo các phiên bản, nhân chứng, hình dạng và bí mật cam kết của R 1 CS từ một hệ thống (chẳng hạn như `SatisfyingAssignment` hoặc `ShapeCS`) đáp ứng các điều kiện nhất định.

src/bellperson/shape_cs.rs

tiêu đề phụ

Tệp này định nghĩa một cấu trúc có tên `ShapeCS` thực hiện đặc điểm `ConstraintSystem`. `ShapeCS` là một hệ thống ràng buộc để tạo các hình dạng R 1 CS.

Cấu trúc `ShapeCS` chứa các trường sau:

- `named_objects`: Đây là bản đồ lưu trữ các đối tượng được liên kết với đường dẫn.

- `current_namespace`: Đây là một vector chuỗi, dùng để lưu trữ namespace hiện tại.

- `ràng buộc`: Đây là một vector để lưu trữ tất cả các ràng buộc được thêm vào `ShapeCS`.

- `inputs`: Đây là một vector chuỗi để lưu trữ tất cả các đầu vào.

- `aux`: Đây là một vector chuỗi để lưu trữ tất cả các đầu vào phụ trợ.

Cấu trúc `ShapeCS` triển khai đặc điểm `ConstraintSystem`, có nghĩa là nó cung cấp các phương thức sau:

- `alloc`: Phương thức này dùng để cấp phát một biến mới.

- `alloc_input`: Phương thức này dùng để cấp phát một biến đầu vào mới.

- `enforce`: Phương thức này được sử dụng để thêm một ràng buộc mới.

- `push_namespace`: Phương thức này dùng để đẩy một namespace mới.

- `pop_namespace`: Phương thức này dùng để bật lên namespace hiện tại.

- `get_root`: Phương thức này dùng để lấy hệ thống ràng buộc gốc.

Nói chung, vai trò chính của tệp này là cung cấp cách tạo hình dạng của R 1 CS từ một hệ thống (chẳng hạn như `ShapeCS`) thỏa mãn các điều kiện nhất định.

src/bellperson/solver.rs

tiêu đề phụ

Tệp này định nghĩa một cấu trúc có tên là `SatisfyingAssignment` thực hiện đặc điểm `ConstraintSystem`. `SatisfyingAssignment` là một hệ thống ràng buộc để tạo các phiên bản và nhân chứng R 1 CS.

- `a_aux_density`, `b_input_density`,Cấu trúc `SatisfyingAssignment` chứa các trường sau:

- `a`, `b`,`b_aux_d mật độ`: Đây là các trường thuộc loại `DensityTracker` được sử dụng để theo dõi mật độ truy vấn.

- `input_assignment`,`c`: Đây là các vectơ lưu trữ kết quả đánh giá của đa thức A, B, C.

`aux_signment`: Đây là các vectơ lưu trữ các phép gán cho các biến.

Cấu trúc `SatisfyingAssignment` triển khai đặc điểm `ConstraintSystem`, có nghĩa là nó cung cấp các phương thức sau:

- `new`: Phương thức này được sử dụng để tạo một thể hiện `SatisfyingAssignment` mới.

- `alloc`: Phương thức này dùng để cấp phát một biến phụ mới.

- `alloc_input`: Phương thức này dùng để cấp phát một biến đầu vào mới.

- `push_namespace`,- `enforce`: Phương thức này được sử dụng để thêm một ràng buộc mới.

`pop_namespace`: Các phương thức này được sử dụng để thao tác với các không gian tên, nhưng thực tế không hoạt động trong ngữ cảnh này.

- `is_extensible`,- `get_root`: Phương thức này dùng để lấy hệ thống ràng buộc gốc.

Nói chung, mục đích chính của tệp này là cung cấp cách tạo ra các phiên bản R 1 CS và nhân chứng từ một hệ thống đáp ứng các điều kiện nhất định (chẳng hạn như `SatisfyingAssignment`).

"src/circuit.rs"tiêu đề phụ

, xác định Mạch tăng cường trong giao thức Nova. Mạch này bao gồm Mạch bước và mạch xác thực trong sơ đồ gấp không tương tác của Nova.

Các cấu trúc và phương thức chính sau đây được xác định trong tệp:

- `NovaAugmentedCircuitParams`: Cấu trúc này chứa các tham số của mạch, bao gồm chiều rộng chi, số lượng chi và giá trị Boolean cho biết đây có phải là mạch chính hay không.

- `NovaAugmentedCircuitInputs`: Cấu trúc này chứa các đầu vào của mạch, bao gồm các tham số i, z 0, zi, U, u và T.

- `NovaAugmentedCircuit`: Cấu trúc này là định nghĩa chính của mạch tăng cường Nova, chứa các tham số mạch, hằng số chỉ đọc, đầu vào và mạch bước. Nó cũng định nghĩa các phương thức như `alloc_witness` (phân bổ một nhân chứng), `synthesize_base_case` (tổng hợp trường hợp cơ sở) và `synthesize_non_base_case` (tổng hợp trường hợp không cơ sở).

- Phương thức `synthesize`: Đây là phương pháp tổng hợp chính của các mạch nâng cao Nova, đầu tiên nó gán tất cả các nhân chứng, sau đó tổng hợp mạch dựa trên việc nó có phải là trường hợp cơ sở hay không và cuối cùng đưa ra giá trị băm được tính toán và uX[1 ].

Nói chung, vai trò chính của tài liệu này là xác định mạch nâng cao trong giao thức Nova. Mạch này là phần cốt lõi của giao thức Nova. Nó bao gồm một mạch bước và một mạch xác minh, đồng thời cung cấp cách tổng hợp mạch này.

"src/constants.rs"tiêu đề phụ

, xác định một số hằng số được sử dụng rộng rãi trong suốt dự án. Dưới đây là ý nghĩa của các hằng số này:

- `NUM_CHALLENGE_BITS`: Hằng số này xác định số bit trong thử thách, giá trị là 128 . Thử thách thường là một số ngẫu nhiên do người chứng minh tạo ra cho một bước tương tác trong quy trình chứng minh zk-SNARK.

- `NUM_HASH_BITS`: Hằng số này xác định số bit băm, giá trị là 250. Hàm băm là hàm có thể ánh xạ dữ liệu đầu vào có độ dài bất kỳ sang đầu ra có độ dài cố định, trong đó độ dài đầu ra là 250 bit.

- `BN_LIMB_WIDTH`: Hằng số này xác định độ rộng chi của Big Number, giá trị là 64. Trong khoa học máy tính, số lượng lớn là những con số vượt quá những gì có thể được biểu thị bằng các loại dữ liệu tiêu chuẩn và chúng thường được chia thành nhiều chi để lưu trữ và thao tác.

- `BN_N_LIMBS`: Hằng số này xác định số nhánh của số lớn, giá trị là 4. Điều này có nghĩa là mỗi số lớn được chia thành 4 nhánh để lưu trữ và thao tác.

- `NUM_FE_WITHOUT_IO_FOR_CRHF`: Hằng số này xác định số phần tử trường (FE) không bao gồm đầu vào/đầu ra cho hàm băm chống va chạm (CRHF), có giá trị là 17.

Các hằng số này đóng vai trò chính trong việc triển khai giao thức Nova và chúng xác định một số tham số quan trọng, chẳng hạn như số chữ số trong thử thách, số chữ số trong hàm băm, chiều rộng chi và số chi của số lớn, v.v. .

"src/errors.rs"tiêu đề phụ

, xác định loại lỗi mà thư viện Nova có thể trả về. Các loại lỗi này được gói gọn trong một enum có tên là `NovaError`. Dưới đây là ý nghĩa của các loại lỗi này:

- `InvalidIndex`: Lỗi này sẽ được trả về nếu hàng hoặc cột được cung cấp nằm ngoài phạm vi trong một bộ (hàng, col, val).

- `OddInputLength`: Lỗi này sẽ được trả về nếu độ dài đầu vào được cung cấp không chẵn.

- `InvalidInputLength`: Lỗi này sẽ được trả về nếu cung cấp độ dài đầu vào không chính xác.

- `InvalidWitnessLength`: Lỗi này sẽ được trả về nếu cung cấp độ dài bằng chứng không chính xác.

- `UnSat`: Lỗi này sẽ được trả về nếu nhân chứng được cung cấp không thỏa mãn hình dạng và phiên bản đã cho.

- `DecompressionError`: Lỗi này sẽ được trả về nếu lời hứa nén được cung cấp không thể giải nén được.

- `ProofVerifyError`: Lỗi này sẽ được trả về nếu việc xác minh bằng chứng không thành công.

- `InvalidNumSteps`: Lỗi này sẽ được trả về nếu số bước được cung cấp bằng 0.

- `InvalidIPA`: Lỗi này sẽ được trả về nếu cung cấp đối số sản phẩm bên trong không hợp lệ.

- `InvalidSumcheckProof`: Lỗi này sẽ được trả về nếu cung cấp bằng chứng kiểm tra số tiền không hợp lệ.

- `InvalidInitialInputLength`: Lỗi này sẽ được trả về nếu đầu vào ban đầu cho phép tính tăng dần không khớp với giá trị đã khai báo trước đó.

- `InvalidStepOutputLength`: Lỗi này sẽ được trả về nếu độ dài đầu ra do thực hiện bước tạo ra không khớp với giá trị đã khai báo trước đó.

- `InternalTranscriptError`: Lỗi này sẽ được trả về nếu công cụ phiên âm gặp phải tình trạng tràn số vòng.

- `InvalidMultisetProof`: Lỗi này sẽ được trả về nếu kiểm tra nhiều bộ không thành công.

- `InvalidProductProof`: Lỗi này sẽ được trả về nếu việc kiểm tra bằng chứng sản phẩm không thành công.

Các loại lỗi này bao gồm nhiều vấn đề khác nhau có thể gặp phải trong thư viện Nova, bao gồm lỗi chính tả, lỗi kiểm chứng, lỗi nội bộ, v.v. Khi các chức năng của thư viện Nova gặp sự cố, chúng sẽ trả về những lỗi này để người gọi có thể hiểu điều gì đã xảy ra và hành động tương ứng.

"ecc.rs"tiêu đề phụ

, được viết bằng ngôn ngữ Rust. Tệp này chủ yếu chứa phần triển khai liên quan đến Mật mã đường cong Elliptic (ECC) trong khung Nova.

Mật mã đường cong Elliptic (ECC) là một kỹ thuật mã hóa khóa công khai với ưu điểm chính là có thể sử dụng các khóa ngắn hơn trong khi vẫn cung cấp mức độ bảo mật tương tự. Điều này có nghĩa là ECC có thể sử dụng ít tài nguyên điện toán và điện năng hơn, điều này rất quan trọng đối với nhiều thiết bị, đặc biệt là thiết bị di động và hệ thống nhúng.

Trong tệp này, bạn sẽ thấy định nghĩa của một số cấu trúc Rust (structs) và cách triển khai (impls), được sử dụng để triển khai hàm ECC. Ví dụ: bạn sẽ thấy `struct EccGadget`, là phần triển khai chính của ECC, chứa một số trường, chẳng hạn như `value` và `pb_variable`, được sử dụng để lưu trữ trạng thái của ECC và các biến liên quan.

Nói chung, tệp này là một phần quan trọng của khung Nova để triển khai chức năng ECC.

"src/gadgets/mod.rs"tiêu đề phụ"gadgets"。

, là một mô-đun trong khung Nova, chủ yếu được sử dụng để triển khai các chức năng khác nhau cần thiết cho Nova và các ứng dụng được xây dựng bằng Nova"gadget"Trong mật mã học,

là thuật ngữ chung dùng để mô tả một khối mã thực hiện một chức năng cụ thể. Trong zk-SNARK (Đối số không tương tác ngắn gọn không có kiến ​​thức), một tiện ích thường đề cập đến một hệ thống bằng chứng triển khai một thuật toán hoặc giao thức cụ thể.

Trong tệp này, bạn sẽ thấy các mô-đun con sau:

- `ecc`: Mô-đun này có thể chứa các tiện ích cho Mật mã đường cong Elliptic.

- `không phải bản địa`: Mô-đun này có thể chứa các tiện ích cho các trường không phải bản địa.

- `r 1 cs`: Mô-đun này có thể chứa một số tiện ích R 1 CS (Hệ thống ràng buộc hạng-1).

Cùng với nhau, các mô-đun con này cung cấp nhiều chức năng khác nhau theo yêu cầu của khung Nova.

"bignat.rs"tiêu đề phụ

, là một phần của dự án Nova và chủ yếu được sử dụng để thực hiện các phép toán trên số nguyên lớn (BigNat).

Trong khoa học máy tính, số nguyên lớn (hoặc số nguyên có độ chính xác tùy ý) là số nguyên có thể được biểu diễn và thao tác ngoài những gì có thể được biểu thị bằng các kiểu số nguyên thông thường như int hoặc long. Điều này rất hữu ích trong nhiều lĩnh vực, bao gồm mật mã, đồ họa máy tính, tính toán số lượng lớn, v.v.

Chúng ta hãy xem xét kỹ hơn một số phần chính của tập tin này:

1. `use super::super::gadgets::GadgetCaller;`: Dòng mã này nhập GadgetCaller, một đặc điểm được sử dụng để gọi các tiện ích khác.

2. `pub struct BigNatGadget;`: Dòng mã này xác định một cấu trúc có tên là BigNatGadget. Trong Rust, cấu trúc được sử dụng để tạo các kiểu dữ liệu phức tạp.

3. `impl GadgetCaller cho BigNatGadget`: Đây là cách triển khai cấu trúc BigNatGadget, triển khai đặc điểm GadgetCaller. Điều này có nghĩa là BigNatGadget phải cung cấp cách triển khai tất cả các phương thức mà đặc điểm GadgetCaller yêu cầu.

5. `pub fn from(&self, val: u 64) ->4. Trong cách triển khai này, chúng ta có thể thấy một số phương thức, chẳng hạn như `add`, `sub`, `mul`, `div`, `rem`, v.v., là các phép toán cơ bản của các phép toán số nguyên lớn.

6. `pub fn to_u 64(&self) ->Self`: Phương thức này được sử dụng để tạo BigNatGadget từ giá trị loại u64.

7. `pub fn eq(&self, other: &Self) ->u64`: Phương thức này được sử dụng để chuyển đổi BigNatGadget thành giá trị loại u64.

Nói chung, tệp này cung cấp một công cụ để làm việc với các số nguyên lớn, bao gồm tạo số nguyên lớn, chuyển đổi số nguyên lớn sang các loại giá trị khác và thực hiện các thao tác cơ bản trên số nguyên lớn.

"mod.rs"tiêu đề phụ"src/gadgets/nonnative/",Nằm ở

Dưới nội dung. Tệp này chủ yếu được sử dụng để thực hiện các phép toán số học trên các trường không cục bộ.

Trong mật mã, các trường không phải gốc thường đề cập đến những trường không được phần cứng hỗ trợ trực tiếp. Ví dụ: một số thuật toán mã hóa có thể yêu cầu hoạt động trên các trường lớn hơn 64 bit, nhưng hầu hết phần cứng máy tính hiện đại chỉ hỗ trợ trực tiếp các hoạt động lên tới 64 bit. Trong trường hợp này, chúng ta cần các phép tính số học sử dụng các trường không cục bộ.

Trong tập tin này, bạn sẽ thấy các phần chính sau:

1. Đặc điểm `OptionExt`: Đặc điểm này thêm hai phương thức vào loại `Option`, `grab` và `grab_mut`, chúng cố gắng lấy giá trị trong `Option`, nếu `Option` là `None`, thì trả về lỗi .

2. Đặc điểm `BitAccess`: Đặc điểm này cung cấp một phương thức `get_bit` lấy chỉ mục `i` và trả về xem bit ở vị trí chỉ mục đó có phải là `1` hay không.

3. `impl BitAccess for Scalar`: Đây là cách triển khai đặc điểm `BitAccess` cho kiểu `Scalar`, `Scalar` là kiểu đại diện cho trường số nguyên tố.

Nói chung, tệp này cung cấp cách thực hiện các phép toán số học trên các trường không phải gốc, điều này rất quan trọng để triển khai một số thuật toán mã hóa nhất định.

"util.rs"tiêu đề phụ"src/gadgets/nonnative/",Nằm ở

Dưới nội dung. Tệp này chủ yếu được sử dụng để triển khai một số chức năng tiện ích hoạt động trên các trường không cục bộ.

Dưới đây là một số phần chính trong tập tin này:

1. Cấu trúc `Bit`: Cấu trúc này biểu thị một bit, chứa tổ hợp tuyến tính và một giá trị, được điền vào thời điểm chứng kiến.

2. Cấu trúc `Bitvector`: Cấu trúc này biểu thị một vectơ bit, chứa một vectơ kết hợp tuyến tính, một vectơ các giá trị và một vectơ các bit được phân bổ.

3. Cấu trúc `Num`: Cấu trúc này biểu thị một số, bao gồm tổ hợp tuyến tính và một giá trị.

4. Phương thức `alloc` của cấu trúc `Bit`: Phương thức này cấp phát một biến trong hệ thống ràng buộc chỉ có thể là giá trị boolean.

5. Phương thức `fits_in_bits` của cấu trúc `Num`: Phương thức này kiểm tra xem một số có thể được biểu diễn bằng một số bit nhất định hay không.

6. Phương thức `is_equal` của cấu trúc `Num`: Phương thức này kiểm tra xem một số có bằng số tự nhiên được biểu thị bằng một vectơ bit hay không.

7. Phương thức `decompose` của cấu trúc `Num`: Phương thức này phân tách một số thành một vectơ bit.

8. Phương thức `as_allocated_num` của cấu trúc `Num`: Phương thức này chuyển đổi một số thành số được phân bổ.

9. Hàm `f_to_nat`: Hàm này chuyển đổi một phần tử trường thành số tự nhiên.

Nhìn chung, tệp này cung cấp các hàm tiện ích thực hiện các thao tác khác nhau trên các trường không cục bộ, chẳng hạn như gán biến, kiểm tra xem một số có thể được biểu thị bằng một số bit nhất định hay không, phân tách một số thành vectơ bit, v.v.

"r 1 cs.rs"tiêu đề phụ"src/gadgets/",Nằm ở

Dưới nội dung. Tệp này chủ yếu được sử dụng để triển khai các tiện ích khác nhau của Hệ thống ràng buộc Hạng 1 (R 1 CS).

R 1 CS là một hệ thống chứng minh để mô tả các thuật toán hoặc giao thức và nó là nền tảng của nhiều hệ thống chứng minh không có kiến ​​thức, bao gồm cả zk-SNARK.

Dưới đây là một số phần chính trong tập tin này:

1. Cấu trúc `AllocatedR 1 CSInstance`: Cấu trúc này biểu thị một instance R 1 CS được phân bổ, bao gồm một điểm `W` và hai số `X 0 ` và `X 1 `.

2. Phương thức `AllocatedR1CSInstance::alloc`: Phương thức này được sử dụng để phân bổ một phiên bản R 1 CS trong hệ thống ràng buộc.

3. Phương thức `AllocatedR1CSInstance::absorb_in_ro`: Phương thức này được sử dụng để hấp thụ một phiên bản R 1 CS vào một oracle ngẫu nhiên (RO).

4. Cấu trúc `AllocatedRelaxedR1CSInstance`: Cấu trúc này biểu thị một phiên bản R 1 CS thoải mái được phân bổ, bao gồm hai điểm `W` và `E`, một số `u` và hai số nguyên lớn `X 0` và `X1`.

5. Phương thức `AllocatedRelaxedR1CSInstance::alloc`: Phương thức này được sử dụng để phân bổ một phiên bản R 1 CS thoải mái trong hệ thống ràng buộc.

6. Phương thức `AllocatedRelaxedR1CSInstance::default`: Phương thức này được sử dụng để phân bổ một phiên bản R 1 CS thoải mái mặc định trong hệ thống ràng buộc.

7. Phương thức `AllocatedRelaxedR1CSInstance::from_r 1 cs_instance`: Phương thức này được sử dụng để chuyển đổi một phiên bản R 1 CS thành một phiên bản R 1 CS thoải mái.

8. Phương thức `AllocatedRelaxedR1CSInstance::absorb_in_ro`: Phương thức này được sử dụng để hấp thụ một phiên bản R 1 CS thoải mái vào một oracle ngẫu nhiên (RO).

9. Phương thức `AllocatedRelaxedR 1 CSInstance::fold_with_r 1 cs`: Phương thức này được sử dụng để gấp một phiên bản R 1 CS thoải mái với một phiên bản R 1 CS và trả về kết quả.

Nhìn chung, tài liệu này cung cấp một số công cụ để làm việc với R 1 CS, bao gồm tạo các phiên bản R 1 CS, chuyển đổi các phiên bản R 1 CS thành các phiên bản R 1 CS thoải mái, hấp thụ các phiên bản R 1 CS thành các oracle ngẫu nhiên, gấp phiên bản R 1 CS thoải mái với một phiên bản R 1 CS, v.v.

tiêu đề phụ"utils.rs"Tập tin này được gọi là"src/gadgets/",Nằm ở

Dưới nội dung. Tệp này chủ yếu được sử dụng để triển khai một số chức năng tiện ích cấp thấp, rất hữu ích khi xây dựng các giao thức và thuật toán mã hóa cấp cao hơn.

Dưới đây là một số phần chính trong tập tin này:

1. Hàm `le_bits_to_num`: Hàm này nhận mảng bit endian nhỏ và trả về giá trị tương ứng.

2. Hàm `alloc_zero` và `alloc_one`: Hai hàm này được sử dụng để gán lần lượt một biến có giá trị bằng 0 và giá trị bằng 1 trong hệ thống ràng buộc.

3. Hàm `alloc_scalar_as_base`: Hàm này dùng để phân bổ một đại lượng vô hướng làm cơ số trong hệ ràng buộc.

4. Hàm `scalar_as_base`: Hàm này được sử dụng để diễn giải một đại lượng vô hướng làm cơ số.

5. Hàm `alloc_bignat_constant`: Hàm này dùng để cấp phát một hằng số nguyên lớn trong hệ thống ràng buộc.

6. Hàm `alloc_num_equals`: Hàm này dùng để kiểm tra xem hai số có bằng nhau hay không và trả về một bit.

7. Hàm `conditionally_select`: Hàm này dùng để chọn một trong hai số dựa trên một điều kiện.

8. Hàm `conditionally_select_vec`: Hàm này dùng để chọn một trong hai mảng số dựa trên một điều kiện.

9. Hàm `conditionally_select_bignat`: Hàm này dùng để chọn một trong hai số nguyên lớn dựa trên một điều kiện.

10. Hàm `conditionally_select2`: Hàm này dùng để chọn một trong hai số dựa trên một điều kiện, đó là số được gán.

11. Hàm `select_zero_or_num 2` và `select_num_or_zero 2`: Hai hàm này được sử dụng để đặt một số về 0 hoặc giữ nguyên theo một điều kiện, đó là số được gán.

12. Hàm `select_num_or_zero`: Hàm này dùng để thiết lập một số về 0 hoặc giữ nguyên số đó theo một điều kiện, là giá trị boolean.

Nói chung, tệp này cung cấp một số hàm tiện ích có thể gán các biến trong hệ thống ràng buộc, kiểm tra xem hai số có bằng nhau không, chọn một trong hai số dựa trên một điều kiện, v.v.

tiêu đề phụ"lib.rs"Đây là một chương trình có tên

Các tệp mã nguồn ngôn ngữ Rust cho , đây là thành phần chính của dự án Nova. Tệp này chủ yếu xác định giao diện chung và một số chức năng cốt lõi của thư viện Nova. Sau đây là giải thích chi tiết của tài liệu:"ast"1. `pub mod ast`: Dòng mã này nhập một"ast"mô-đun."Abstract Syntax Tree"Đúng"ast"(Cây cú pháp trừu tượng), một cấu trúc dữ liệu được sử dụng để thể hiện cấu trúc của mã nguồn. Trong dự án Nova,

Các mô-đun có thể chứa nhiều cấu trúc dữ liệu và chức năng khác nhau để phân tích và xử lý mã nguồn ngôn ngữ Nova."parser"2. `pub mod parser`: Dòng mã này nhập một"parser"mô-đun."Đúng"người phân tích cú pháp

Có nghĩa là mô-đun này có thể chứa các hàm và lớp để phân tích mã nguồn ngôn ngữ Nova."codegen"3. `pub mod codegen`: Dòng mã này nhập một"codegen"mô-đun."code generation"Đúng

(tạo mã), mô-đun này có thể chứa các hàm và lớp để chuyển đổi cây cú pháp trừu tượng của ngôn ngữ Nova thành mã đối tượng (chẳng hạn như LLVM IR hoặc mã máy)."types"4. `pub mod type`: Dòng mã này nhập một

mô-đun. Mô-đun này có thể chứa hệ thống kiểu của ngôn ngữ Nova, bao gồm việc biểu diễn và xử lý các kiểu tích hợp khác nhau và các kiểu do người dùng xác định."util"5. `pub mod util`: Dòng mã này nhập một"util"mô-đun."utilities"Đúng

(tiện ích), mô-đun này có thể chứa nhiều chức năng và lớp tiện ích khác nhau, chẳng hạn như xử lý lỗi, ghi nhật ký, đọc và ghi tệp, v.v."driver"6. `pub mod driver`: Dòng mã này nhập một"driver"mô-đun. Trong dự án biên dịch,

Thường đề cập đến một mô-đun kiểm soát toàn bộ quá trình biên dịch, bao gồm các bước như đọc mã nguồn, phân tích cú pháp, kiểm tra kiểu, tạo mã, tối ưu hóa và đầu ra."error"7. `lỗi mod pub`: Dòng mã này nhập một

mô-đun. Mô-đun này có thể chứa hệ thống xử lý lỗi của ngôn ngữ Nova, bao gồm việc trình bày và xử lý các lỗi biên dịch và lỗi thời gian chạy khác nhau."config"8. `pub mod config`: Dòng mã này nhập một

Chức năng chính của tệp này là tổ chức các thành phần khác nhau của ngôn ngữ Nova (như trình phân tích cú pháp, trình tạo mã, hệ thống kiểu, hệ thống xử lý lỗi, v.v.) để tạo thành một thư viện trình biên dịch hoàn chỉnh.

tiêu đề phụ"nifs.rs"Tập tin này được gọi là"src/",Nằm ở

Dưới nội dung. Tệp này triển khai Sơ đồ gấp không tương tác (Lược đồ gấp không tương tác, NIFS). Đây là một giao thức mã hóa được sử dụng để chứng minh tính đúng đắn của từng bước trong tính toán gia tăng.

Dưới đây là một số phần chính trong tập tin này:

1. Cấu trúc `NIFS`: Cấu trúc này đại diện cho SNARK, lưu trữ bằng chứng về một bước tính toán gia tăng. Nó chứa một trường có tên `comm_T`, là một Cam kết được nén.

2. phương thức `chứng minh`: Phương thức này chấp nhận một cặp nhân chứng thực thể R 1 CS lỏng lẻo `(U 1, W 1)` và một cặp nhân chứng thực thể R 1 CS `(U 2, W 2)`, có The cùng một cấu trúc `hình dạng` và có liên quan đến cùng một định nghĩa `ck`. Sau đó, nó xuất ra một cặp nhân chứng thực thể R 1 CS lỏng lẻo được gấp lại `(U, W)`, có cùng cấu trúc `hình dạng`. Một nhân chứng gấp `W` thỏa mãn một thể hiện gấp `U` nếu `W 1` thỏa mãn `U 1` và `W ​​2` thỏa mãn `U 2`.

3. Phương thức `verify`: Phương thức này chấp nhận một phiên bản R 1 CS lỏng lẻo `U 1 ` và một phiên bản R 1 CS `U 2 `, có cùng cấu trúc và được xác định theo cùng một tham số. Sau đó, nó xuất ra một thể hiện gấp `U`, có cùng cấu trúc. Trường hợp gấp `U` thỏa mãn nếu `U 1` và `U 2` thỏa mãn.

Nhìn chung, tệp này triển khai sơ đồ gấp không tương tác, một giao thức mã hóa để chứng minh tính chính xác của từng bước trong tính toán gia tăng. Ưu điểm chính của sơ đồ này là nó có thể thu gọn nhiều bằng chứng thành một bằng chứng duy nhất, do đó giảm chi phí lưu trữ và truyền tải bằng chứng.

tiêu đề phụ"ipa_pc.rs"Tập tin này được gọi là"src/provider/",Nằm ở

Dưới nội dung. Tệp này triển khai một công cụ đánh giá bằng cách sử dụng sơ đồ cam kết đa thức dựa trên IPA (Đối số sản phẩm bên trong).

Dưới đây là một số phần chính trong tập tin này:

1. Cấu trúc `ProverKey`: Cấu trúc này đại diện cho khóa chứng minh, chứa khóa cam kết `ck_s`.

2. Cấu trúc `VerifierKey`: Cấu trúc này đại diện cho một khóa xác minh, chứa hai khóa cam kết `ck_v` và `ck_s`.

3. Cấu trúc `EvaluationArgument`: Cấu trúc này biểu thị một tham số đánh giá đa thức, chứa tham số tích bên trong `ipa`.

4. Cấu trúc `EvaluationEngine`: Cấu trúc này thể hiện một công cụ đánh giá đa thức sử dụng IPA.

5. Triển khai đặc điểm `EvaluationEngineTrait`: Việc triển khai đặc điểm này cung cấp chức năng chính của công cụ đánh giá đa thức, bao gồm thiết lập, chứng minh và xác minh.

6. Hàm `inner_product`: Hàm này tính tích bên trong của hai vectơ.7. Cấu trúc `InnerProductInstance`: Cấu trúc này biểu thị một phiên bản sản phẩm bên trong, chứa một lời hứa `comm_a_vec` cho một vectơ `a`, một vectơ khác `b_vec` và một lời hứa `c =

` Giá trị của `c`.

8. Cấu trúc `InnerProductWitness`: Cấu trúc này biểu thị một nhân chứng sản phẩm bên trong, chứa vectơ `a_vec`.

Nói chung, tài liệu này triển khai một công cụ đánh giá sử dụng sơ đồ cam kết đa thức dựa trên IPA, một giao thức mật mã để chứng minh giá trị đánh giá của đa thức tại một điểm nhất định trong bằng chứng không có kiến ​​thức. Ưu điểm chính của sơ đồ này là nó có thể chứng minh giá trị đánh giá của đa thức mà không tiết lộ chính đa thức đó, do đó bảo toàn được tính riêng tư của đa thức.

tiêu đề phụ"keccak.rs"Tập tin này được gọi là"src/provider/",Nằm ở

Dưới nội dung. Tệp này triển khai TranscriptEngineTrait sử dụng hàm băm Keccak 256. TranscriptEngineTrait là một đặc điểm được sử dụng để xử lý bản ghi trong quy trình chứng minh không có kiến ​​thức. Bản ghi là cấu trúc dữ liệu ghi lại tất cả các bước tương tác trong quy trình chứng minh.

Dưới đây là một số phần chính trong tập tin này:

1. Cấu trúc `Keccak 256 Transcript`: Cấu trúc này triển khai TranscriptEngineTrait, sử dụng hàm băm Keccak 256 để xử lý bản ghi. Nó chứa trường tròn để ghi số vòng hiện tại, trường trạng thái để giữ trạng thái băm hiện tại, trường bản ghi để giữ bản ghi và trường _p để giữ thông tin loại.

2. Hàm `compute_updated_state`: Hàm này nhận đầu vào và tính toán trạng thái băm được cập nhật.

3. Triển khai `TranscriptEngineTrait`: Việc triển khai đặc điểm này cung cấp các chức năng chính để xử lý bản ghi, bao gồm tạo bản ghi mới, trích xuất thử thách từ bản ghi, thêm phần tử vào bản ghi và thêm dấu tách miền.

Nhìn chung, tệp này triển khai TranscriptEngineTrait sử dụng hàm băm Keccak 256, một công cụ để xử lý bản ghi trong quá trình chứng minh không có kiến ​​thức. Ưu điểm chính của công cụ này là nó có thể xử lý bản ghi mà không tiết lộ các bước tương tác trong quy trình chứng minh, do đó duy trì tính riêng tư của quy trình chứng minh.

tiêu đề phụ"mod.rs"Tập tin này được gọi là"src/provider/",Nằm ở

Dưới nội dung. Tệp này chủ yếu được sử dụng để nhập các mô-đun triển khai khác nhau trong dự án Nova, cung cấp các chức năng khác nhau mà dự án Nova yêu cầu.

Dưới đây là một số phần chính trong tập tin này:"ipa_pc"1. `pub mod ipa_pc;`: Dòng mã này nhập một

mô-đun. Mô-đun này triển khai một công cụ đánh giá bằng cách sử dụng sơ đồ cam kết đa thức dựa trên IPA (Đối số sản phẩm bên trong)."keccak"2. `pub mod keccak;`: Dòng mã này nhập một

mô-đun. Mô-đun này triển khai TranscriptEngineTrait sử dụng hàm băm Keccak 256."pasta"3. `pub mod mì ống;`: Dòng mã này nhập một

mô-đun. Mô-đun này có thể chứa các hàm và lớp hoạt động với các đường cong Pasta."pedersen"4. `pub mod pedersen;`: Dòng mã này nhập một

mô-đun. Mô-đun này có thể chứa các hàm và lớp sử dụng lời hứa Pedersen."poseidon"5. `pub mod poseidon;`: Dòng mã này nhập một

Nhìn chung, vai trò chính của tệp này là tổ chức các thành phần khác nhau của dự án Nova (chẳng hạn như công cụ đánh giá, TranscriptEngineTrait, đường cong Pasta, cam kết Pedersen, hàm băm Poseidon, v.v.) để tạo thành một thư viện mật mã hoàn chỉnh.

tiêu đề phụ

Tên tập tin: `src/r 1 cs.rs`

Tệp này xác định các loại và phương thức liên quan đến Hệ thống ràng buộc hạng 1 (R 1 CS). R 1 CS là một hệ thống ràng buộc được sử dụng rộng rãi trong các hệ thống chứng minh không có kiến ​​thức.

1. `R 1 CSCác cấu trúc sau đây và phương pháp của chúng chủ yếu được xác định:

2. `R 1 CSShape`: Cấu trúc này biểu diễn một tham số public của R 1 CS. Nó chứa phương thức `commitment_key` được sử dụng để tạo các tham số công khai cho R 1 CS.

3. `R 1 CSWitness`: Cấu trúc này thể hiện hình dạng của ma trận R 1 CS, bao gồm số ràng buộc, số biến, số đầu vào/đầu ra và 3 ma trận A, B, C. Nó chứa các phương thức như `new` để tạo một đối tượng `R 1 CSShape` từ ma trận R 1 CS được chỉ định rõ ràng, `multiply_vec` để tính tích của một ma trận và một vectơ, `is_sat_relaxed` và `is_sat` để kiểm tra liệu một nhân chứng nhất định và hình dạng của nó có thỏa mãn phiên bản Relaxed R 1 CS và R 1 CS hay không, `commit_T` được sử dụng để tính toán số hạng chéo của một cặp nhân chứng Relaxed R 1 CS nhất định và cặp nhân chứng R 1 CS Lời hứa của `T`, `pad` được sử dụng để điền vào R 1 CSSShape sao cho số biến là lũy thừa của 2 và đánh số lại các biến cho phù hợp với các biến được điền.

4. `R 1 CSInstance`: Cấu trúc này biểu thị một nhân chứng cho một phiên bản R 1 CS nhất định và chứa các phương thức như `new` để tạo một đối tượng nhân chứng bằng cách sử dụng vectơ vô hướng và `cam kết` để cam kết với một nhân chứng bằng cách sử dụng trình tạo được cung cấp.

5. `RelaxedR 1 CSWitness`: Cấu trúc này đại diện cho một thể hiện của R 1 CS và chứa một số phương thức, chẳng hạn như `new`, được sử dụng để tạo một đối tượng thể hiện bằng cách sử dụng các phần tử cấu thành.

6. `RelaxedR 1 CSInstance`: Cấu trúc này biểu thị một phiên bản Relaxed R 1 CS, chứa một số phương thức, chẳng hạn như `default` được sử dụng để tạo ra Relaxed R 1 CSInstance mặc định, `from_r 1 cs_instance` được sử dụng để khởi tạo một CSInstance Relaxed R 1 mới từ R 1 CSInstance, `from_r1cs_instance_unchecked` được sử dụng để khởi tạo một RelaxedR 1 CSInstance mới từ R 1 CSInstance (không cần kiểm tra) và `fold` được sử dụng để gấp RelaxedR 1 CSInstance mới đến

tiêu đề phụ

Tên tệp: `src/spartan/math.rs`

Tệp này xác định một đặc điểm được gọi là `Math` và cách triển khai loại `usize`. Đặc điểm này xác định một số phép toán, bao gồm tăng lũy ​​thừa 2, lấy bit nhị phân và tính toán logarit.

   - `pow 2(self) ->1. Đặc điểm `Math` xác định các phương thức sau:

   - `get_bits(self, num_bits: usize) -> Vecuse`: Tính 2 lũy thừa của self.

   - `log_ 2(self) ->`: Lấy các bit num_bits đầu tiên của biểu diễn nhị phân của self.

usize`: Tính logarit cơ số 2 của self.

   - `pow 2(self) ->2. Đối với loại `usize`, tất cả các phương thức của trait `Math` đều được triển khai:

   - `get_bits(self, num_bits: usize) -> Vecuseize`: Tính 2 lũy thừa của self bằng cách sử dụng hàm `pow` tích hợp.

   - `log_ 2(self) ->`: Nhận các bit num_bits đầu tiên của biểu diễn nhị phân của bản thân bằng cách dịch chuyển bit và AND theo bit.

Tệp này cung cấp một số phép toán cơ bản có thể được các phần khác của mã sử dụng để triển khai các hàm phức tạp hơn.

tiêu đề phụ

Tên tập tin: src/spartan/mod.rs

Mô-đun này triển khai RelaxedR1CSSNARKTrait của Spartan, đây là tham số đánh giá và cam kết đa thức chung (tức là PCS).

Sau đây là một số cấu trúc và chức năng chính:

1. `PolyEvalWitness`: Đây là cấu trúc chứa chứng minh của đa thức.

2. `PolyEvalInstance`: Đây là cấu trúc chứa một thể hiện của đánh giá đa thức.

3. `ProverKey` và `VerifierKey`: Hai cấu trúc này lần lượt đại diện cho khóa của người chứng minh và khóa của người xác minh.

4. `RelaxedR 1 CSSNARK`: Cấu trúc này thể hiện bằng chứng ngắn gọn về kiến ​​thức về một phiên bản R 1 CS thoải mái. Bằng chứng được tạo ra bằng cách sử dụng kết hợp các cam kết đa thức xem tổng và xem vectơ của Spartan.

5. `setup`: Chức năng này được sử dụng để thiết lập các khóa chứng thực và xác minh.

6. `chứng minh`: Hàm này được sử dụng để tạo ra bằng chứng ngắn gọn về tính thỏa mãn của một phiên bản R 1 CS thoải mái.

Mã trong mô-đun này chủ yếu liên quan đến bằng chứng không có kiến ​​thức về mật mã, đặc biệt là bằng chứng về R 1 CS (Hệ thống ràng buộc hạng-1). R 1 CS là một hệ thống xây dựng các bằng chứng không có kiến ​​thức, có thể được sử dụng để chứng minh rằng người ta biết nghiệm của một tập hợp các phương trình đa thức mà không tiết lộ bất kỳ thông tin nào về nghiệm đó. Spartan là một hệ thống chứng minh không có kiến ​​thức cụ thể sử dụng thứ gọi là R 1 CS thoải mái, cho phép sử dụng tính ngẫu nhiên trong bằng chứng, giúp cải thiện hiệu quả.

tiêu đề phụ

Tên tệp: src/spartan/polynomial.rs

Tệp này xác định một số loại và phép toán cơ bản liên quan đến đa thức. Các loại và thao tác này được sử dụng để thực hiện các phép tính đa thức trong giao thức Spartan.

Dưới đây là một số phần chính trong tập tin này:

1. `EqPolynomial`: Cấu trúc này thể hiện một đa thức đẳng thức. Nó chứa một phương thức `new` để tạo các đa thức mới, một phương thức `evaluate` để đánh giá đa thức tại các điểm được chỉ định và một phương thức `evals` để tính toán các đánh giá đa thức trên tất cả các đầu vào boolean.

2. `Đa thức tuyến tính`: Cấu trúc này biểu thị một đa thức đa tuyến tính. Nó chứa một phương thức `new` để tạo các đa thức mới, một phương thức `get_num_vars` để lấy số biến trong một đa thức, một phương thức `bound_poly_var_top` để liên kết các biến của đa thức với đầu và một phương thức `evaluate` Được sử dụng để đánh giá đa thức tại các điểm được chỉ định.

Mã trong tệp này chủ yếu liên quan đến các phép tính đa thức trong mật mã, đặc biệt là tính toán đa thức đa tuyến tính và đa thức thưa thớt. Những phép tính này đóng một vai trò quan trọng trong các hệ thống chứng minh không có kiến ​​thức vì chúng có thể được sử dụng để xây dựng các bằng chứng phức tạp mà không tiết lộ bất kỳ thông tin nào về bằng chứng.

tiêu đề phụ

`src/spartan/pp.rs` là một tệp ngôn ngữ Rust trong dự án Nova. Tệp này chủ yếu thực hiện chức năng của bộ tiền xử lý trong Nova. Bộ tiền xử lý là một giai đoạn trong quá trình biên dịch thực hiện một số xử lý trên mã trước khi nó được biên dịch thực sự.

Cấu trúc và chức năng chính trong file này bao gồm:

1. `struct Preprocessor`: Đây là cấu trúc tiền xử lý, chứa một số trạng thái và dữ liệu mà bộ tiền xử lý yêu cầu.

3. `fn new(source: String) ->2. `Impl Preprocessor`: Đây là cách triển khai cấu trúc `Preprocessor`, chứa một số phương thức.

4. `fn preprocess(&mut self) -> Result<(), Error>Self`: Đây là hàm tạo `Preprocessor` được sử dụng để tạo một phiên bản `Preprocessor` mới.

5. `fn next_token(&mut self) -> Result`: Đây là chức năng chính của bộ tiền xử lý, xử lý trước mã nguồn đầu vào và trả về kết quả xử lý. Nếu xảy ra lỗi trong quá trình xử lý, nó sẽ trả về lỗi.

`: Hàm này được sử dụng để lấy mã thông báo tiếp theo từ mã nguồn. Nếu xảy ra lỗi trong quá trình xử lý, nó sẽ trả về lỗi.

7. `fn skip_comment(&mut self) -> Result<(), Error>6. `fn Skip_whitespace(&mut self)`: Hàm này được sử dụng để bỏ qua các ký tự khoảng trắng trong mã nguồn.

8. `fn read_number(&mut self) -> Result`: Hàm này dùng để bỏ qua các chú thích trong mã nguồn. Nếu xảy ra lỗi trong quá trình xử lý, nó sẽ trả về lỗi.

9. `fn read_identifier(&mut self) -> Result`: Hàm này được sử dụng để đọc một số từ mã nguồn. Nếu xảy ra lỗi trong quá trình xử lý, nó sẽ trả về lỗi.

10. `fn read_string(&mut self) -> Result`: Hàm này được sử dụng để đọc mã định danh từ mã nguồn. Nếu xảy ra lỗi trong quá trình xử lý, nó sẽ trả về lỗi.

Nói chung, tệp `src/spartan/pp.rs` triển khai bộ tiền xử lý trong Nova, bộ tiền xử lý này xử lý trước mã nguồn, bao gồm bỏ qua các ký tự và nhận xét khoảng trắng, đọc số, mã định danh và chuỗi, v.v.

tiêu đề phụ

Tên tệp: src/spartan/sumcheck.rs

Tệp này triển khai thuật toán Sumcheck trong giao thức Spartan. Thuật toán Sumcheck là thuật toán để xác minh tổng các đa thức, được sử dụng rộng rãi trong các hệ thống chứng minh không có kiến ​​thức.

Dưới đây là một số phần chính trong tập tin này:

1. `SumcheckProof`: Cấu trúc này thể hiện bằng chứng Sumcheck. Nó chứa một phương thức `mới` để tạo bằng chứng mới, một phương thức `xác minh` để xác minh bằng chứng và một số phương thức `chứng minh` để tạo bằng chứng.

2. `UniPoly` và `CompressionUniPoly`: Hai cấu trúc này biểu diễn đa thức một ngôi và đa thức một ngôi nén. Chúng chứa các phương pháp tạo đa thức, đánh giá đa thức, đánh giá đa thức tại các điểm xác định cũng như nén và giải nén đa thức.

Mã trong tệp này chủ yếu liên quan đến thuật toán Sumcheck trong mật mã, đặc biệt là tính toán và chứng minh đa thức. Những phép tính này đóng một vai trò quan trọng trong các hệ thống chứng minh không có kiến ​​thức vì chúng có thể được sử dụng để xây dựng các bằng chứng phức tạp mà không tiết lộ bất kỳ thông tin nào về bằng chứng.

tiêu đề phụ

Tên tập tin: src/traits/ Circuit.rs

Tệp này xác định một đặc điểm có tên `StepCircuit` và cấu trúc `TrivialTestCircuit` thực hiện đặc điểm đó. Cả đặc điểm này và cấu trúc đều liên quan đến hàm bước để tính toán tăng dần.

Dưới đây là một số phần chính trong tập tin này:

1. Đặc điểm `StepCircuit`: Đặc điểm này xác định các phương thức mà hàm bước cho phép tính tăng dần phải thực hiện. Những phương pháp này bao gồm:

- `arity`: trả về số lượng đầu vào hoặc đầu ra cho mỗi bước.

- `synthesize`: Tổng hợp một bước tính toán và trả về một biến tương ứng với đầu ra của bước đó.

- `output`: Khi được cung cấp đầu vào cho một bước, trả về đầu ra của bước đó.

Mã trong tệp này chủ yếu liên quan đến hàm bước tính toán tăng dần. Trong mật mã, tính toán tăng dần là một kỹ thuật phổ biến có thể được sử dụng để tính toán các hàm phức tạp tăng dần mà không cần phải tính toán toàn bộ hàm cùng một lúc. Kỹ thuật này đặc biệt hữu ích trong các hệ thống chứng minh không có kiến ​​thức vì nó có thể được sử dụng để xây dựng các bằng chứng phức tạp mà không cần phải tạo ra toàn bộ bằng chứng cùng một lúc.

tiêu đề phụ

Tên tệp: src/traits/commitment.rs

Tệp này xác định một số đặc điểm liên quan đến các cam kết. Trong mật mã, cam kết là một cơ chế cho phép một người cam kết một giá trị mà không tiết lộ ngay lập tức. Điều này là cần thiết trong nhiều giao thức mật mã, chẳng hạn như bằng chứng không có kiến ​​thức.

Dưới đây là một số phần chính trong tập tin này:

1. Đặc điểm `CommitmentOps`: Đặc điểm này xác định các hoạt động cơ bản đối với các cam kết, bao gồm cả việc bổ sung và gán bổ sung.

2. Đặc điểm `CommitmentOpsOwned`: Đặc điểm này xác định các hoạt động cơ bản cho các tham chiếu sở hữu các cam kết.

3. Đặc điểm `ScalarMul`: Đặc điểm này xác định phép toán nhân của các lời hứa và vô hướng.

4. Đặc điểm `CommitmentTrait`: Đặc điểm này xác định hành vi của cam kết, bao gồm sao chép, sao chép, mặc định, so sánh, gửi, đồng bộ hóa, tuần tự hóa, giải tuần tự hóa, hấp thụ, thao tác, nén, giải nén, v.v.

Mã trong tệp này chủ yếu đề cập đến các cam kết trong mật mã. Những cam kết này đóng một vai trò quan trọng trong các hệ thống chứng minh không có kiến ​​thức vì chúng có thể được sử dụng để xây dựng các bằng chứng phức tạp mà không tiết lộ bất kỳ thông tin nào về bằng chứng.

tiêu đề phụ

Tên tệp: src/traits/evaluation.rs

Tệp này xác định một đặc điểm có tên `EvaluationEngineTrait`. Đặc điểm này xác định hành vi của công cụ đánh giá đa thức, bao gồm thiết lập, chứng minh và xác minh.

Dưới đây là một số phần chính trong tập tin này:

1. Đặc điểm `EvaluationEngineTrait`: Đặc điểm này xác định các phương pháp mà công cụ đánh giá đa thức phải triển khai. Những phương pháp này bao gồm:

- `setup`: Phương pháp này được sử dụng cho bất kỳ thiết lập bổ sung nào cần thiết để tạo bằng chứng đánh giá.

- `chứng minh`: Phương pháp này dùng để chứng minh đánh giá một đa thức đa tuyến tính.

- `verify`: Phương pháp này dùng để kiểm chứng chứng minh đánh giá một đa thức đa tuyến tính.

Đặc điểm này cũng xác định một số loại liên quan, bao gồm:

- `CE`: Đây là loại được liên kết với công cụ hứa hẹn.

- `ProverKey`: Đây là loại khóa của trình chứng minh.

- `VerifierKey`: Đây là loại khóa xác minh.

Mã trong tệp này chủ yếu liên quan đến việc đánh giá đa thức trong mật mã. Đây là một bước quan trọng trong hệ thống chứng minh không có kiến ​​thức vì nó có thể được sử dụng để chứng minh rằng người ta biết nghiệm của một tập phương trình đa thức mà không cần phải tiết lộ bất kỳ thông tin nào về nghiệm đó.

tiêu đề phụ

Tên tập tin: src/traits/mod.rs

Tệp này là điểm vào chính cho mô-đun đặc điểm trong dự án Nova. Nó chủ yếu xác định một số đặc điểm cho hoạt động mã hóa. Đặc điểm là một tính năng chính trong Rust xác định một loại trừu tượng có thể được triển khai bằng nhiều loại cụ thể khác nhau. Điều này cho phép chúng ta viết mã chung có thể xử lý các giá trị thuộc bất kỳ loại nào thực hiện một đặc điểm cụ thể.

Dưới đây là một số phần chính trong tập tin này:

1. Đặc điểm `Group`: Đặc điểm này xác định các hoạt động cơ bản của một nhóm, bao gồm nhân bản, sao chép, mặc định, so sánh, gửi, đồng bộ hóa, tuần tự hóa, giải tuần tự hóa, hấp thụ, thao tác, nén, giải nén, v.v.

2. Đặc điểm `CompressionGroup`: Đặc điểm này xác định các hoạt động cơ bản của một nhóm nén, bao gồm nhân bản, sao chép, so sánh, gửi, đồng bộ hóa, tuần tự hóa, giải tuần tự hóa, v.v.

3. Đặc điểm `AbsorbInROTrait`: Đặc điểm này xác định phương thức `absorb_in_ro` để hấp thụ các đối tượng vào một Oracle ngẫu nhiên.

4. Đặc điểm `ROTrait`: Đặc điểm này xác định hành vi của oracle ngẫu nhiên, bao gồm khởi tạo, hấp thụ và đùn.

5. Đặc điểm `ROConstantsTrait`: Đặc điểm này xác định các hằng số của oracle ngẫu nhiên.

6. Đặc điểm `GroupOps`: Đặc điểm này xác định các hoạt động nhóm, bao gồm phép cộng, phép trừ, phép gán cộng và phép gán phép trừ.

7. Đặc điểm `ScalarMul`: Đặc điểm này xác định phép toán nhân vô hướng.

8. Đặc điểm `TranscriptReprTrait`: Đặc điểm này xác định phương thức `to_transcript_bytes` để chuyển đổi một đối tượng thành một chuỗi byte.

Mã trong tệp này chủ yếu liên quan đến các hoạt động nhóm trong mật mã, các lời tiên tri ngẫu nhiên và công cụ phiên mã. Chúng đóng một vai trò quan trọng trong các hệ thống chứng minh không có kiến ​​thức vì chúng có thể được sử dụng để xây dựng các bằng chứng phức tạp mà không cần phải tiết lộ bất kỳ thông tin nào về bằng chứng.

tiêu đề phụ

Tên tập tin: src/traits/snark.rs

Tệp này xác định một đặc điểm có tên `RelaxedR1CSSNARKTrait`. Thuộc tính này xác định hành vi của một đối số không tương tác ngắn gọn, không có kiến ​​thức (zkSNARK), đặc biệt đối với Hệ thống ràng buộc Thư giãn Hạng 1 (Relaxed R 1 CS).

Dưới đây là một số phần chính trong tập tin này:

1. Đặc điểm `RelaxedR1CSSNARKTrait`: Đặc điểm này xác định các phương thức mà zkSNARK phải triển khai. Những phương pháp này bao gồm:

- `setup`: Phương thức này được sử dụng để tạo khóa của người chứng minh và người xác minh.

- `chứng minh`: Phương pháp này được sử dụng để tạo ra bằng chứng ngắn gọn về tính thỏa mãn của một phiên bản R 1 CS thoải mái.

- `verify`: Phương pháp này được sử dụng để xác minh bằng chứng về tính thỏa mãn của một phiên bản R 1 CS thoải mái.

Đặc điểm này cũng xác định một số loại liên quan, bao gồm:

- `ProverKey`: Đây là loại khóa của trình chứng minh.

Mã trong tệp này chủ yếu liên quan đến bằng chứng không có kiến ​​thức trong mật mã, đặc biệt là bằng chứng của R 1 CS. R 1 CS là một hệ thống xây dựng các bằng chứng không có kiến ​​thức, có thể được sử dụng để chứng minh rằng người ta biết nghiệm của một tập hợp các phương trình đa thức mà không tiết lộ bất kỳ thông tin nào về nghiệm đó. zkSNARK là một hệ thống chứng minh không có kiến ​​thức cụ thể cung cấp một cách hiệu quả để tạo và xác minh bằng chứng.

danh hiệu cấp một

Giới thiệu về Huobi Ventures:

Huobi Ventures
tiên tri
công nghệ
Chào mừng tham gia cộng đồng chính thức của Odaily
Nhóm đăng ký
https://t.me/Odaily_News
Nhóm trò chuyện
https://t.me/Odaily_CryptoPunk
Tài khoản chính thức
https://twitter.com/OdailyChina
Nhóm trò chuyện
https://t.me/Odaily_CryptoPunk