Bằng chứng ngôn ngữ miền cụ thể (DSL) trong không có kiến thức (ZK).[4] đóng một vai trò quan trọng trong lĩnh vực này. Về cốt lõi, bằng chứng ZK giải quyết thách thức chứng minh sự tồn tại của các thuộc tính nhất định trong dữ liệu bí mật mà không tiết lộ bất kỳ thông tin bổ sung nào. Tuy nhiên, việc dịch các ý tưởng cấp cao thành bằng chứng cụ thể có thể phức tạp. Đây là lúc DSL phát huy tác dụng, bắc cầu các khái niệm trừu tượng với sự biểu diễn của các mạch cần thiết để chứng minh hệ thống.
Hệ thống chứng minh[5] là một phương pháp hoặc thỏa thuận cho phép một bên chứng minh tính hợp lệ của tuyên bố hoặc khiếu nại cho một bên khác mà không tiết lộ bất kỳ thông tin nhạy cảm nào. Nó liên quan đến một tập hợp các quy tắc và thủ tục cho phép người chứng minh thuyết phục người xác minh về sự thật của một tuyên bố nhất định, chẳng hạn như tính đúng đắn của tính toán hoặc sở hữu kiến thức nhất định, mà không tiết lộ bất kỳ bí mật hoặc dữ liệu cơ bản nào.
Tuy nhiên, các hệ thống chứng minh không thể trực tiếp đối phó với các khái niệm cấp cao. Thay vào đó, chúng cần được chuyển đổi thành các mạch đại diện cho các thuộc tính mong muốn. Sự thay đổi này từ các khái niệm cấp cao sang mạch đặt ra những thách thức. Đây là lúc ngôn ngữ của các mạch phát huy tác dụng. Ngôn ngữ mạch giải quyết vấn đề này bằng cách cung cấp một cách có cấu trúc và chính thức để thể hiện các ý tưởng cấp cao.
Trong thập kỷ qua, đã có sự gia tăng đáng kể về số lượng và sự đa dạng của các ngôn ngữ mạch. Sự phát triển của nhiều ngôn ngữ mạch, chẳng hạn như Noir, Cairo[6] và Leo, cho biết trường hoạt động như thế nào. Sự gia tăng của các ngôn ngữ này cho phép chúng ta so sánh và đối chiếu các đặc điểm, điểm tương đồng và khác biệt của chúng. Một cuộc kiểm tra toàn diện về các ngôn ngữ này cung cấp một sự hiểu biết sâu sắc hơn về bối cảnh ngôn ngữ mạch tổng thể.
TLDR;
Noir – Được phát triển bởi Aztec, nó trừu tượng hóa sự phức tạp của mật mã và giúp các nhà phát triển của bất kỳ nền tảng nào có thể viết các mạch ZK.
– o1js – Một thư viện Type được phát triển bởi O(1) Labs. Cho phép các nhà phát triển viết các hợp đồng thông minh. Tích hợp tốt với các thư viện và công cụ Java và Type hiện có.
**– **Circom**[7] ** - Được thiết kế để phát triển mạch ZKP. Cung cấp độ chính xác và rõ ràng, các tính năng của nó chủ yếu tập trung vào lĩnh vực cụ thể này.
**– Leo ** – Cung cấp một môi trường thân thiện với người dùng cho các nhà phát triển. Kiến trúc trình biên dịch được xác nhận chính thức được sử dụng tập trung vào phát hiện và ngăn ngừa lỗi sớm.
**–**Cairo**[8] ** - Nhấn mạnh vào hiệu quả và khả năng mở rộng. Khả năng tương tác được hỗ trợ thông qua các giao diện tiêu chuẩn có thể được tích hợp với các nền tảng blockchain, hợp đồng thông minh và các hệ thống ngoài chuỗi.
Lurk - Giải quyết những hạn chế của SNARK truyền thống bằng cách tận dụng Lisp để thực hiện một mạch chung.
Thuật ngữ
Vì chúng ta sẽ đề cập đến các khái niệm kỹ thuật, đây là bảng chú giải một số thuật ngữ phức tạp mà bạn có thể gặp trong các văn bản tiếp theo:
Abstract Circuit Intermediate Representation (Acer) :* Biểu diễn trung gian của mạch ZK được Noir sử dụng có thể được biên dịch thành hệ thống ràng buộc bậc nhất (R1CS).
**• Cổng tùy chỉnh: ** Cổng logic chuyên dụng được thiết kế cho các hoạt động mật mã hiệu quả và an toàn trong các mạch ZK.
• SHA-256: Một hàm băm mật mã nhận đầu vào và tạo ra đầu ra có kích thước cố định.
Kiểm tra Pedersen-Merkle: Sử dụng các kỹ thuật xác minh mật mã của Pedersen Promise và Merkle Tree, tính toàn vẹn và nhất quán của dữ liệu có thể được xác minh.
• Tính đầy đủ của Turing: Một thuộc tính của một hệ thống máy tính có thể mô phỏng máy Turing và có thể giải quyết bất kỳ vấn đề tính toán nào với đủ thời gian và nguồn lực.
Continuation Passing Style (CPS) :* một kỹ thuật lập trình chia nhỏ quá trình đánh giá thành các bước có thể quản lý để thực hiện thống nhất và hiệu quả.
Các phần tử trường :* các phần tử trong một lĩnh vực toán học hữu hạn, thường được sử dụng trong các sơ đồ và tính toán mật mã.
Đen
Đen[9] là Ngôn ngữ dành riêng cho miền (DSL) được thiết kế bởi Aztec để đơn giản hóa việc tạo các mạch ZK và chương trình ZK mà không cần kiến thức sâu rộng về mật mã học hoặc trở thành nhà mật mã học. Mục tiêu chính của nó là cho phép các nhà phát triển từ bất kỳ nền tảng nào viết các mạch ZK (không có kiến thức). Noir ưu tiên bảo mật, đơn giản và hiệu suất. Nó cung cấp một cú pháp cấp cao, giống như Rust, trừu tượng hóa bảo mật mật mã và đơn giản hóa việc sử dụng các nguyên thủy mật mã trong khi vẫn duy trì hiệu suất cao.
** Khả năng mở rộng quy mô với ZK Proof **
Một lợi thế của Noir là nó có tiềm năng mở rộng phạm vi ứng dụng có thể tận dụng các tính năng bảo vệ quyền riêng tư được cung cấp bởi các bằng chứng ZK. Những bằng chứng này tăng cường quyền riêng tư và cung cấp xác minh hiệu quả. Noir được biên dịch thành một biểu diễn trung gian gọi là Đại diện trung gian mạch trừu tượng (Acer), có thể được biên dịch thêm thành một hệ thống ràng buộc gọi là R1CS (ràng buộc xếp hạng một). Việc tách hệ thống chứng minh back-end khỏi ngôn ngữ này cho phép Noir hỗ trợ nhiều hệ thống chứng minh khác nhau, bao gồm Aztec Brettenberg, Turbo Plonk và các tích hợp tiềm năng trong tương lai như Groth16 và Halo 2.
** Tối ưu hóa &; Thư viện tiêu chuẩn **
Các nhà phát triển có thể tối ưu hóa mạch ở cấp hệ thống chứng thực để cải thiện tốc độ, bảo mật và nhiều tính năng ứng dụng khác nhau bằng cách tận dụng các cổng tùy chỉnh, một loại cổng logic được thiết kế đặc biệt để thực hiện các hoạt động mật mã một cách hiệu quả và an toàn. Ngôn ngữ này cung cấp một thư viện tiêu chuẩn với các chức năng được tối ưu hóa như kiểm tra SHA-256 và Pedersen-Merkle, sử dụng các cam kết Pedersen và cây Merkle để xác minh tính toàn vẹn và nhất quán của dữ liệu.
!
Đồ họa hiển thị cú pháp của ngôn ngữ Noir ### ** Kỹ năng tổ chức và trình bày mã **
Noir hỗ trợ tổ chức mã thông qua các mô-đun và thùng bên ngoài, giúp dễ dàng tạo thư viện cho các chương trình Noir. Nó cung cấp các kiểu dữ liệu tổng hợp như mảng, bộ dữ liệu và cấu trúc, cho phép các nhà phát triển nhóm dữ liệu và thực hiện các chức năng phổ biến. Ngôn ngữ này cũng hỗ trợ các cấu trúc luồng điều khiển như cho các vòng lặp, câu lệnh if và các toán tử logic và bitwise. Generics và các chức năng bậc nhất đang được tích cực phát triển để tăng cường hơn nữa khả năng biểu đạt của Noir.
Điều quan trọng cần lưu ý là Noir vẫn đang phát triển. Nó có thể có một số hạn chế và lỗi tiềm ẩn. Nhóm phát triển liên tục lặp lại ngôn ngữ và cam kết cải tiến liên tục.
o1js
O1JS[10] là một thư viện Type được thiết kế bởi (0) 1Labs để viết các hợp đồng thông minh bằng ngôn ngữ lập trình Snark. Nó tận dụng các công nghệ mở hiện có như Node .js và trình duyệt để làm cho nó dễ tiếp cận và thuận tiện hơn cho các nhà phát triển. Bằng cách xây dựng trên Type, o1js cho phép các nhà phát triển tận dụng kiến thức hiện có của họ về các thư viện và công cụ Java và Type.
Tích hợp
o1js tích hợp hoàn hảo với các thư viện và công cụ Java và Type, cung cấp cho các nhà phát triển các tính năng mạnh mẽ và hỗ trợ cộng đồng rộng rãi. Sự tích hợp này làm tăng năng suất và giảm đường cong học tập để áp dụng môi trường phát triển mới.
** Hỗ trợ mã VS **
Nó cung cấp hỗ trợ cho Visual Studio Code (VS Code), một trình soạn thảo mã phổ biến. Các nhà phát triển có thể tận dụng các tính năng như hoàn thành mã, tô sáng cú pháp và gỡ lỗi để nâng cao trải nghiệm phát triển tổng thể.
Thư viện tiêu chuẩn
O1JS cung cấp một thư viện tiêu chuẩn toàn diện bao gồm các loại cơ bản như phần tử miền, un-64, un-32, khóa công khai, khóa riêng và chữ ký. Các loại này đi kèm với các phương pháp tích hợp giúp đơn giản hóa việc xử lý các sơ đồ mã hóa, dữ liệu tùy chọn, Booleans và đường cong elip.
Circom
Circom, viết tắt của Circuit Compiler, là một ngôn ngữ miền cụ thể (DSL) mạnh mẽ được thiết kế để phát triển mạch zero-knowledge proof (ZKP), được tạo ra bởi Jordi Balyna và nhóm iden3.
Định nghĩa mạch biểu cảm
Với cú pháp biểu cảm, Circom cho phép các nhà phát triển xác định mạch cho các ứng dụng ZKP một cách chính xác và rõ ràng. Tuy nhiên, cú pháp và ngữ nghĩa của Circom có thể khó hiểu đối với những người mới sử dụng Circom và những người không quen thuộc với các khái niệm DSL hoặc ZKP. Đối với các nhà phát triển mạch mới làm quen hoặc nhà phát triển có nền tảng về các ngôn ngữ lập trình có mục đích chung, nó có thể đòi hỏi thêm nỗ lực và thời gian.
Giới hạn phạm vi
Mặc dù Circom vượt trội trong phát triển mạch ZKP, nhưng điều quan trọng cần lưu ý là các tính năng của nó chủ yếu tập trung vào lĩnh vực cụ thể này. Do đó, các nhà phát triển tìm kiếm một ngôn ngữ có mục đích chung hơn để xử lý một loạt các tác vụ tính toán có thể thấy Circom hơi hạn chế. Để đáp ứng nhu cầu phát triển rộng hơn, có thể cần phải sử dụng Circom kết hợp với các ngôn ngữ lập trình hoặc khung công tác khác.
Giải thích về cách Circom hoạt động. ### ** Công cụ &Giới hạn hệ sinh thái**
Circom được hỗ trợ bởi nhiều công cụ phát triển và có một hệ sinh thái đang phát triển, mặc dù sự sẵn có của các công cụ và tài nguyên của nó vẫn có thể tương đối hạn chế so với các ngôn ngữ và khung lập trình được thiết lập nhiều hơn. Các nhà phát triển có thể gặp khó khăn trong việc tìm kiếm tài liệu toàn diện, thư viện và hỗ trợ cộng đồng cho các trường hợp sử dụng cụ thể hoặc các tính năng nâng cao. Hạn chế này có thể có tác động đến tốc độ phát triển và sự chấp nhận của cộng đồng Circom.
Cân nhắc về khả năng tương thích
Khả năng tương thích của Circom chủ yếu tập trung vào các hệ thống bằng chứng không có kiến thức phổ biến như snarkjs và libsnark. Mặc dù điều này cho phép nó tích hợp liền mạch với các hệ thống này, nhưng nó cũng giới thiệu sự phụ thuộc vào các tính năng và hạn chế cụ thể của chúng. Các nhà phát triển thích hoặc cần các hệ thống ZKP khác có thể gặp sự cố tương thích hoặc yêu cầu nỗ lực bổ sung để điều chỉnh và tích hợp các mạch do Circom tạo vào các hệ thống ưa thích của họ.
**Sư Tử **
Sư Tử[11] là một ngôn ngữ lập trình được thiết kế đặc biệt để phát triển các ứng dụng chứng minh không có kiến thức. Nó nhằm mục đích cung cấp một môi trường thân thiện với người dùng cho các nhà phát triển, đặc biệt là những người có kinh nghiệm trước đây trong hệ sinh thái blockchain. LEO tương tự như Rust và có một số yếu tố giống Java được thiết kế để tạo sự quen thuộc và thuận tiện trong phát triển ứng dụng.
Một tính năng đáng chú ý của Leo là trình biên dịch của nó, chuyển đổi các chương trình thành một định dạng chứng minh cấp thấp được gọi là R1CS. Điều phân biệt trình biên dịch Leo là quá trình xác minh chính thức nghiêm ngặt mà nó trải qua. Việc xác minh này là cần thiết vì lỗi có thể xảy ra ở nhiều giai đoạn khác nhau, bao gồm lập trình, kiểm toán và biên dịch. Bằng cách đảm bảo về mặt toán học rằng trình biên dịch tuân theo ý định của lập trình viên, Leo nhằm mục đích giảm thiểu rủi ro lỗi bị bỏ qua hoặc khai thác, đặc biệt là trong bối cảnh L2, ZK-rollup hoặc các chương trình độc quyền trong nền tảng LEO.
Ngữ pháp của ngôn ngữ Leo nhận ra rằng mặc dù đã có những nỗ lực tốt nhất, những sai lầm là không thể tránh khỏi, và nhóm Leo nhấn mạnh tầm quan trọng của việc ngăn ngừa và phát hiện lỗi sớm, đặc biệt là trong các hệ thống xử lý việc chuyển giao giá trị quan trọng. Để giải quyết vấn đề này, kiến trúc trình biên dịch được xác nhận chính thức của Leo tạo thêm sự tự tin và giảm khả năng sai lệch ngoài ý muốn so với hành vi chương trình dự kiến.
Ngoài ngôn ngữ và trình biên dịch, Leo còn cung cấp nhiều công cụ và tính năng trải nghiệm dành cho nhà phát triển. Các thành phần này được thiết kế để tăng cường quá trình phát triển, đơn giản hóa các nhiệm vụ và tăng hiệu quả. Dựa trên bảy năm kinh nghiệm và quan sát sự phát triển của hệ sinh thái Ethereum, nhóm Leo nhằm mục đích cung cấp một môi trường thân thiện với người dùng tương tự như sự phát triển của các công cụ như trình thám hiểm, khung triển khai như Truffle và Ganache và các tài nguyên khác giúp đơn giản hóa việc phát triển và thử nghiệm ứng dụng.
Cairo
Cairo[12] Cung cấp cú pháp giúp đơn giản hóa quá trình xây dựng các mạch ZKP. Lấy cảm hứng từ các ngôn ngữ lập trình truyền thống, Cairo cho phép các nhà phát triển tận dụng các kỹ năng lập trình hiện có của họ khi thiết kế các hệ thống ZK. Thông qua cách tiếp cận khai báo của mình, Cairo cho phép bình thường hóa các tuyên bố và tính toán logic, giúp dễ dàng thể hiện các kịch bản trong thế giới thực trong bối cảnh bằng chứng không có kiến thức.
** Hiệu quả &; Khả năng mở rộng**
Hiệu suất là một yếu tố quan trọng trong hệ thống ZK. Cairo giải quyết vấn đề này bằng cách tập trung vào hiệu quả và khả năng mở rộng. Ngôn ngữ này sử dụng các kỹ thuật tối ưu hóa như giảm ràng buộc và loại bỏ vòng lặp để giảm thiểu chi phí tính toán liên quan đến các mạch ZKP. Bằng cách tối ưu hóa thiết kế mạch, Cairo đạt được việc tạo và xác minh bằng chứng nhanh hơn cho các ứng dụng yêu cầu thông lượng cao và độ trễ thấp.
Khả năng tương tác &; Tích hợp
Cairo được thiết kế để tích hợp với cơ sở hạ tầng phần mềm hiện có, cho phép các nhà phát triển kết hợp khả năng của ZKP với các công nghệ khác. Ngôn ngữ này hỗ trợ khả năng tương tác thông qua các giao diện tiêu chuẩn, cho phép tích hợp với các nền tảng blockchain, hợp đồng thông minh và các hệ thống ngoài chuỗi. Tính linh hoạt này mở ra khả năng triển khai các tính năng bảo mật nâng cao trong các ứng dụng phi tập trung, hệ thống tài chính và giao thức xác thực dữ liệu.
Kiến trúc CPU Cairo SNARK trong một ví dụ ### **Cộng đồng &; Hệ sinh thái **
Dự án Cairo thúc đẩy một cộng đồng các nhà phát triển, nhà nghiên cứu và những người đam mê đóng góp cho sự phát triển của nó. Sự sẵn có của tài liệu, hướng dẫn và mã mẫu giúp ích trong quá trình giới thiệu, cho phép các nhà phát triển nắm bắt các khái niệm và bắt đầu xây dựng các hệ thống ZK. Ngoài ra, Cairo được hưởng lợi từ hệ sinh thái rộng lớn hơn của StarkWare, nơi cung cấp hỗ trợ, công cụ và tiến bộ nghiên cứu để nâng cao ngôn ngữ và khả năng của nó.
Ẩn nấp
Ẩn náu[13] Nó nhằm mục đích giải quyết những hạn chế của SNARK và mạch truyền thống bằng cách tận dụng Lisp, một ngôn ngữ lập trình chức năng, để thực hiện các mạch có mục đích chung. Sử dụng Lisp, Lurk giới thiệu một hàm chung gọi là "" có thể đánh giá bất kỳ biểu thức dữ liệu nào trong một mạch snark.
Mã là dữ liệu, dữ liệu là mã
Một trong những nguyên tắc cơ bản của Lurk là biểu diễn một chương trình dưới dạng dữ liệu với nội dung địa chỉ. Cách tiếp cận này cho phép đánh giá và xác nhận hiệu quả các chương trình Lurk. Khả năng địa chỉ nội dung đơn giản hóa quá trình phân tích cú pháp và dữ liệu kết quả có thể được sử dụng trực tiếp trong SNARK provers mà không cần bước biên dịch riêng.
Triển khai Lisp trong SNARKs
Để tạo ra một mạch đa năng, Lurk đã tận dụng "nhược điểm" của bộ phân bổ bộ nhớ Lisp. Bộ phân bổ kết hợp hai biểu thức và tạo ra một tham chiếu đến biểu thức kết quả bằng cách băm. Bằng cách chứng minh rằng hai biểu thức được băm vào cùng một tham chiếu, Lurk có thể thực hiện các tính toán trong một mạch snark.
Tiếp tục phong cách chuyền bóng
Lurk sử dụng Phong cách vượt qua liên tục (CPS), chia nhỏ quá trình đánh giá thành các bước có thể quản lý được. Mỗi bước đánh giá trở thành một tính toán có thể xử lý, cho phép thực hiện thống nhất và hiệu quả. Bao gồm các tiếp tục rõ ràng trong các mạch SNARK giúp trải qua quá trình đánh giá từng bước.
** Cung cấp cho Turing tính đầy đủ và khả năng đệ quy**
Bằng cách sử dụng Lisp, Lurk đạt được tính đầy đủ của Turing và hỗ trợ đệ quy vô hạn trong các mạch SNARK. Khả năng quan trọng này cho phép chứng minh các tính toán phức tạp và thực hiện các mạch đa năng có khả năng thực hiện các phép tính tùy ý.
Hiệu ứng &; Ứng dụng
Khả năng của Hidden có ý nghĩa rộng lớn. Bằng cách hỗ trợ đệ quy vô hạn, chu kỳ và các luồng được điều khiển có điều kiện, Lurk cho phép tính toán phức tạp trong các mạch SNARK. Điều này mở ra một loạt các ứng dụng để tính toán xác minh, xử lý dữ liệu riêng tư và thực hiện các chương trình hoàn chỉnh Turing.
Kết luận
Sự lựa chọn ngôn ngữ dành riêng cho miền (DSL) rất đa dạng và dự kiến sẽ tiếp tục phát triển khi các trường hợp sử dụng cho bằng chứng không có kiến thức (ZK) tiếp tục mở rộng trên các hệ sinh thái blockchain. Hiện tại, cuộc đua để thiết lập một ngôn ngữ thống trị để xây dựng các ứng dụng ZK vẫn đang ở giai đoạn đầu, cho thấy rằng chúng ta có thể mong đợi những cải tiến hơn nữa trong lĩnh vực này.
Tuy nhiên, một hạn chế chung của hầu hết các DSL là thiếu hiệu ứng mạng từ các cộng đồng lớn và các thư viện mạnh mẽ. Có một cộng đồng sôi động và thư viện toàn diện có thể cải thiện đáng kể trải nghiệm của nhà phát triển. Mặc dù thiếu sót này có thể được giải quyết theo thời gian, nhưng điều quan trọng đối với các nhóm liên quan đến phát triển DSL là ưu tiên khả năng tương thích với các thư viện khác, vay mượn từ cách tiếp cận của o1js.
Bằng cách đảm bảo khả năng tương thích với các thư viện hiện có, DSL có thể tận dụng kiến thức và tài nguyên tập thể của cộng đồng nhà phát triển rộng lớn hơn, cho phép tích hợp dễ dàng hơn, phát triển nhanh hơn và linh hoạt hơn trong việc triển khai các ứng dụng ZK. Cách tiếp cận hợp tác này sẽ thúc đẩy sự phát triển của một hệ sinh thái mạnh mẽ hơn xung quanh DSL vì lợi ích của các nhà phát triển và cuối cùng thúc đẩy việc áp dụng và hiệu quả của công nghệ ZK.
Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
Khảo sát ngôn ngữ ZK: Noir, o1js, Circom, Leo, Cairo, Lurk
Giới thiệu
Bằng chứng ngôn ngữ miền cụ thể (DSL) trong không có kiến thức (ZK).[4] đóng một vai trò quan trọng trong lĩnh vực này. Về cốt lõi, bằng chứng ZK giải quyết thách thức chứng minh sự tồn tại của các thuộc tính nhất định trong dữ liệu bí mật mà không tiết lộ bất kỳ thông tin bổ sung nào. Tuy nhiên, việc dịch các ý tưởng cấp cao thành bằng chứng cụ thể có thể phức tạp. Đây là lúc DSL phát huy tác dụng, bắc cầu các khái niệm trừu tượng với sự biểu diễn của các mạch cần thiết để chứng minh hệ thống.
Hệ thống chứng minh[5] là một phương pháp hoặc thỏa thuận cho phép một bên chứng minh tính hợp lệ của tuyên bố hoặc khiếu nại cho một bên khác mà không tiết lộ bất kỳ thông tin nhạy cảm nào. Nó liên quan đến một tập hợp các quy tắc và thủ tục cho phép người chứng minh thuyết phục người xác minh về sự thật của một tuyên bố nhất định, chẳng hạn như tính đúng đắn của tính toán hoặc sở hữu kiến thức nhất định, mà không tiết lộ bất kỳ bí mật hoặc dữ liệu cơ bản nào.
Tuy nhiên, các hệ thống chứng minh không thể trực tiếp đối phó với các khái niệm cấp cao. Thay vào đó, chúng cần được chuyển đổi thành các mạch đại diện cho các thuộc tính mong muốn. Sự thay đổi này từ các khái niệm cấp cao sang mạch đặt ra những thách thức. Đây là lúc ngôn ngữ của các mạch phát huy tác dụng. Ngôn ngữ mạch giải quyết vấn đề này bằng cách cung cấp một cách có cấu trúc và chính thức để thể hiện các ý tưởng cấp cao.
Trong thập kỷ qua, đã có sự gia tăng đáng kể về số lượng và sự đa dạng của các ngôn ngữ mạch. Sự phát triển của nhiều ngôn ngữ mạch, chẳng hạn như Noir, Cairo[6] và Leo, cho biết trường hoạt động như thế nào. Sự gia tăng của các ngôn ngữ này cho phép chúng ta so sánh và đối chiếu các đặc điểm, điểm tương đồng và khác biệt của chúng. Một cuộc kiểm tra toàn diện về các ngôn ngữ này cung cấp một sự hiểu biết sâu sắc hơn về bối cảnh ngôn ngữ mạch tổng thể.
TLDR;
Noir – Được phát triển bởi Aztec, nó trừu tượng hóa sự phức tạp của mật mã và giúp các nhà phát triển của bất kỳ nền tảng nào có thể viết các mạch ZK.
– o1js – Một thư viện Type được phát triển bởi O(1) Labs. Cho phép các nhà phát triển viết các hợp đồng thông minh. Tích hợp tốt với các thư viện và công cụ Java và Type hiện có.
**– **Circom**[7] ** - Được thiết kế để phát triển mạch ZKP. Cung cấp độ chính xác và rõ ràng, các tính năng của nó chủ yếu tập trung vào lĩnh vực cụ thể này.
**– Leo ** – Cung cấp một môi trường thân thiện với người dùng cho các nhà phát triển. Kiến trúc trình biên dịch được xác nhận chính thức được sử dụng tập trung vào phát hiện và ngăn ngừa lỗi sớm.
**–**Cairo**[8] ** - Nhấn mạnh vào hiệu quả và khả năng mở rộng. Khả năng tương tác được hỗ trợ thông qua các giao diện tiêu chuẩn có thể được tích hợp với các nền tảng blockchain, hợp đồng thông minh và các hệ thống ngoài chuỗi.
Lurk - Giải quyết những hạn chế của SNARK truyền thống bằng cách tận dụng Lisp để thực hiện một mạch chung.
Thuật ngữ
Vì chúng ta sẽ đề cập đến các khái niệm kỹ thuật, đây là bảng chú giải một số thuật ngữ phức tạp mà bạn có thể gặp trong các văn bản tiếp theo:
Abstract Circuit Intermediate Representation (Acer) :* Biểu diễn trung gian của mạch ZK được Noir sử dụng có thể được biên dịch thành hệ thống ràng buộc bậc nhất (R1CS).
**• Cổng tùy chỉnh: ** Cổng logic chuyên dụng được thiết kế cho các hoạt động mật mã hiệu quả và an toàn trong các mạch ZK.
• SHA-256: Một hàm băm mật mã nhận đầu vào và tạo ra đầu ra có kích thước cố định.
Kiểm tra Pedersen-Merkle: Sử dụng các kỹ thuật xác minh mật mã của Pedersen Promise và Merkle Tree, tính toàn vẹn và nhất quán của dữ liệu có thể được xác minh.
• Tính đầy đủ của Turing: Một thuộc tính của một hệ thống máy tính có thể mô phỏng máy Turing và có thể giải quyết bất kỳ vấn đề tính toán nào với đủ thời gian và nguồn lực.
Continuation Passing Style (CPS) :* một kỹ thuật lập trình chia nhỏ quá trình đánh giá thành các bước có thể quản lý để thực hiện thống nhất và hiệu quả.
Các phần tử trường :* các phần tử trong một lĩnh vực toán học hữu hạn, thường được sử dụng trong các sơ đồ và tính toán mật mã.
Đen
Đen[9] là Ngôn ngữ dành riêng cho miền (DSL) được thiết kế bởi Aztec để đơn giản hóa việc tạo các mạch ZK và chương trình ZK mà không cần kiến thức sâu rộng về mật mã học hoặc trở thành nhà mật mã học. Mục tiêu chính của nó là cho phép các nhà phát triển từ bất kỳ nền tảng nào viết các mạch ZK (không có kiến thức). Noir ưu tiên bảo mật, đơn giản và hiệu suất. Nó cung cấp một cú pháp cấp cao, giống như Rust, trừu tượng hóa bảo mật mật mã và đơn giản hóa việc sử dụng các nguyên thủy mật mã trong khi vẫn duy trì hiệu suất cao.
** Khả năng mở rộng quy mô với ZK Proof **
Một lợi thế của Noir là nó có tiềm năng mở rộng phạm vi ứng dụng có thể tận dụng các tính năng bảo vệ quyền riêng tư được cung cấp bởi các bằng chứng ZK. Những bằng chứng này tăng cường quyền riêng tư và cung cấp xác minh hiệu quả. Noir được biên dịch thành một biểu diễn trung gian gọi là Đại diện trung gian mạch trừu tượng (Acer), có thể được biên dịch thêm thành một hệ thống ràng buộc gọi là R1CS (ràng buộc xếp hạng một). Việc tách hệ thống chứng minh back-end khỏi ngôn ngữ này cho phép Noir hỗ trợ nhiều hệ thống chứng minh khác nhau, bao gồm Aztec Brettenberg, Turbo Plonk và các tích hợp tiềm năng trong tương lai như Groth16 và Halo 2.
** Tối ưu hóa &; Thư viện tiêu chuẩn **
Các nhà phát triển có thể tối ưu hóa mạch ở cấp hệ thống chứng thực để cải thiện tốc độ, bảo mật và nhiều tính năng ứng dụng khác nhau bằng cách tận dụng các cổng tùy chỉnh, một loại cổng logic được thiết kế đặc biệt để thực hiện các hoạt động mật mã một cách hiệu quả và an toàn. Ngôn ngữ này cung cấp một thư viện tiêu chuẩn với các chức năng được tối ưu hóa như kiểm tra SHA-256 và Pedersen-Merkle, sử dụng các cam kết Pedersen và cây Merkle để xác minh tính toàn vẹn và nhất quán của dữ liệu.
!
Đồ họa hiển thị cú pháp của ngôn ngữ Noir ### ** Kỹ năng tổ chức và trình bày mã **
Noir hỗ trợ tổ chức mã thông qua các mô-đun và thùng bên ngoài, giúp dễ dàng tạo thư viện cho các chương trình Noir. Nó cung cấp các kiểu dữ liệu tổng hợp như mảng, bộ dữ liệu và cấu trúc, cho phép các nhà phát triển nhóm dữ liệu và thực hiện các chức năng phổ biến. Ngôn ngữ này cũng hỗ trợ các cấu trúc luồng điều khiển như cho các vòng lặp, câu lệnh if và các toán tử logic và bitwise. Generics và các chức năng bậc nhất đang được tích cực phát triển để tăng cường hơn nữa khả năng biểu đạt của Noir.
Điều quan trọng cần lưu ý là Noir vẫn đang phát triển. Nó có thể có một số hạn chế và lỗi tiềm ẩn. Nhóm phát triển liên tục lặp lại ngôn ngữ và cam kết cải tiến liên tục.
o1js
O1JS[10] là một thư viện Type được thiết kế bởi (0) 1Labs để viết các hợp đồng thông minh bằng ngôn ngữ lập trình Snark. Nó tận dụng các công nghệ mở hiện có như Node .js và trình duyệt để làm cho nó dễ tiếp cận và thuận tiện hơn cho các nhà phát triển. Bằng cách xây dựng trên Type, o1js cho phép các nhà phát triển tận dụng kiến thức hiện có của họ về các thư viện và công cụ Java và Type.
Tích hợp
o1js tích hợp hoàn hảo với các thư viện và công cụ Java và Type, cung cấp cho các nhà phát triển các tính năng mạnh mẽ và hỗ trợ cộng đồng rộng rãi. Sự tích hợp này làm tăng năng suất và giảm đường cong học tập để áp dụng môi trường phát triển mới.
** Hỗ trợ mã VS **
Nó cung cấp hỗ trợ cho Visual Studio Code (VS Code), một trình soạn thảo mã phổ biến. Các nhà phát triển có thể tận dụng các tính năng như hoàn thành mã, tô sáng cú pháp và gỡ lỗi để nâng cao trải nghiệm phát triển tổng thể.
Thư viện tiêu chuẩn
O1JS cung cấp một thư viện tiêu chuẩn toàn diện bao gồm các loại cơ bản như phần tử miền, un-64, un-32, khóa công khai, khóa riêng và chữ ký. Các loại này đi kèm với các phương pháp tích hợp giúp đơn giản hóa việc xử lý các sơ đồ mã hóa, dữ liệu tùy chọn, Booleans và đường cong elip.
Circom
Circom, viết tắt của Circuit Compiler, là một ngôn ngữ miền cụ thể (DSL) mạnh mẽ được thiết kế để phát triển mạch zero-knowledge proof (ZKP), được tạo ra bởi Jordi Balyna và nhóm iden3.
Định nghĩa mạch biểu cảm
Với cú pháp biểu cảm, Circom cho phép các nhà phát triển xác định mạch cho các ứng dụng ZKP một cách chính xác và rõ ràng. Tuy nhiên, cú pháp và ngữ nghĩa của Circom có thể khó hiểu đối với những người mới sử dụng Circom và những người không quen thuộc với các khái niệm DSL hoặc ZKP. Đối với các nhà phát triển mạch mới làm quen hoặc nhà phát triển có nền tảng về các ngôn ngữ lập trình có mục đích chung, nó có thể đòi hỏi thêm nỗ lực và thời gian.
Giới hạn phạm vi
Mặc dù Circom vượt trội trong phát triển mạch ZKP, nhưng điều quan trọng cần lưu ý là các tính năng của nó chủ yếu tập trung vào lĩnh vực cụ thể này. Do đó, các nhà phát triển tìm kiếm một ngôn ngữ có mục đích chung hơn để xử lý một loạt các tác vụ tính toán có thể thấy Circom hơi hạn chế. Để đáp ứng nhu cầu phát triển rộng hơn, có thể cần phải sử dụng Circom kết hợp với các ngôn ngữ lập trình hoặc khung công tác khác.
Giải thích về cách Circom hoạt động. ### ** Công cụ &Giới hạn hệ sinh thái**
Circom được hỗ trợ bởi nhiều công cụ phát triển và có một hệ sinh thái đang phát triển, mặc dù sự sẵn có của các công cụ và tài nguyên của nó vẫn có thể tương đối hạn chế so với các ngôn ngữ và khung lập trình được thiết lập nhiều hơn. Các nhà phát triển có thể gặp khó khăn trong việc tìm kiếm tài liệu toàn diện, thư viện và hỗ trợ cộng đồng cho các trường hợp sử dụng cụ thể hoặc các tính năng nâng cao. Hạn chế này có thể có tác động đến tốc độ phát triển và sự chấp nhận của cộng đồng Circom.
Cân nhắc về khả năng tương thích
Khả năng tương thích của Circom chủ yếu tập trung vào các hệ thống bằng chứng không có kiến thức phổ biến như snarkjs và libsnark. Mặc dù điều này cho phép nó tích hợp liền mạch với các hệ thống này, nhưng nó cũng giới thiệu sự phụ thuộc vào các tính năng và hạn chế cụ thể của chúng. Các nhà phát triển thích hoặc cần các hệ thống ZKP khác có thể gặp sự cố tương thích hoặc yêu cầu nỗ lực bổ sung để điều chỉnh và tích hợp các mạch do Circom tạo vào các hệ thống ưa thích của họ.
**Sư Tử **
Sư Tử[11] là một ngôn ngữ lập trình được thiết kế đặc biệt để phát triển các ứng dụng chứng minh không có kiến thức. Nó nhằm mục đích cung cấp một môi trường thân thiện với người dùng cho các nhà phát triển, đặc biệt là những người có kinh nghiệm trước đây trong hệ sinh thái blockchain. LEO tương tự như Rust và có một số yếu tố giống Java được thiết kế để tạo sự quen thuộc và thuận tiện trong phát triển ứng dụng.
Một tính năng đáng chú ý của Leo là trình biên dịch của nó, chuyển đổi các chương trình thành một định dạng chứng minh cấp thấp được gọi là R1CS. Điều phân biệt trình biên dịch Leo là quá trình xác minh chính thức nghiêm ngặt mà nó trải qua. Việc xác minh này là cần thiết vì lỗi có thể xảy ra ở nhiều giai đoạn khác nhau, bao gồm lập trình, kiểm toán và biên dịch. Bằng cách đảm bảo về mặt toán học rằng trình biên dịch tuân theo ý định của lập trình viên, Leo nhằm mục đích giảm thiểu rủi ro lỗi bị bỏ qua hoặc khai thác, đặc biệt là trong bối cảnh L2, ZK-rollup hoặc các chương trình độc quyền trong nền tảng LEO.
Ngữ pháp của ngôn ngữ Leo nhận ra rằng mặc dù đã có những nỗ lực tốt nhất, những sai lầm là không thể tránh khỏi, và nhóm Leo nhấn mạnh tầm quan trọng của việc ngăn ngừa và phát hiện lỗi sớm, đặc biệt là trong các hệ thống xử lý việc chuyển giao giá trị quan trọng. Để giải quyết vấn đề này, kiến trúc trình biên dịch được xác nhận chính thức của Leo tạo thêm sự tự tin và giảm khả năng sai lệch ngoài ý muốn so với hành vi chương trình dự kiến.
Ngoài ngôn ngữ và trình biên dịch, Leo còn cung cấp nhiều công cụ và tính năng trải nghiệm dành cho nhà phát triển. Các thành phần này được thiết kế để tăng cường quá trình phát triển, đơn giản hóa các nhiệm vụ và tăng hiệu quả. Dựa trên bảy năm kinh nghiệm và quan sát sự phát triển của hệ sinh thái Ethereum, nhóm Leo nhằm mục đích cung cấp một môi trường thân thiện với người dùng tương tự như sự phát triển của các công cụ như trình thám hiểm, khung triển khai như Truffle và Ganache và các tài nguyên khác giúp đơn giản hóa việc phát triển và thử nghiệm ứng dụng.
Cairo
Cairo[12] Cung cấp cú pháp giúp đơn giản hóa quá trình xây dựng các mạch ZKP. Lấy cảm hứng từ các ngôn ngữ lập trình truyền thống, Cairo cho phép các nhà phát triển tận dụng các kỹ năng lập trình hiện có của họ khi thiết kế các hệ thống ZK. Thông qua cách tiếp cận khai báo của mình, Cairo cho phép bình thường hóa các tuyên bố và tính toán logic, giúp dễ dàng thể hiện các kịch bản trong thế giới thực trong bối cảnh bằng chứng không có kiến thức.
** Hiệu quả &; Khả năng mở rộng**
Hiệu suất là một yếu tố quan trọng trong hệ thống ZK. Cairo giải quyết vấn đề này bằng cách tập trung vào hiệu quả và khả năng mở rộng. Ngôn ngữ này sử dụng các kỹ thuật tối ưu hóa như giảm ràng buộc và loại bỏ vòng lặp để giảm thiểu chi phí tính toán liên quan đến các mạch ZKP. Bằng cách tối ưu hóa thiết kế mạch, Cairo đạt được việc tạo và xác minh bằng chứng nhanh hơn cho các ứng dụng yêu cầu thông lượng cao và độ trễ thấp.
Khả năng tương tác &; Tích hợp
Cairo được thiết kế để tích hợp với cơ sở hạ tầng phần mềm hiện có, cho phép các nhà phát triển kết hợp khả năng của ZKP với các công nghệ khác. Ngôn ngữ này hỗ trợ khả năng tương tác thông qua các giao diện tiêu chuẩn, cho phép tích hợp với các nền tảng blockchain, hợp đồng thông minh và các hệ thống ngoài chuỗi. Tính linh hoạt này mở ra khả năng triển khai các tính năng bảo mật nâng cao trong các ứng dụng phi tập trung, hệ thống tài chính và giao thức xác thực dữ liệu.
Kiến trúc CPU Cairo SNARK trong một ví dụ ### **Cộng đồng &; Hệ sinh thái **
Dự án Cairo thúc đẩy một cộng đồng các nhà phát triển, nhà nghiên cứu và những người đam mê đóng góp cho sự phát triển của nó. Sự sẵn có của tài liệu, hướng dẫn và mã mẫu giúp ích trong quá trình giới thiệu, cho phép các nhà phát triển nắm bắt các khái niệm và bắt đầu xây dựng các hệ thống ZK. Ngoài ra, Cairo được hưởng lợi từ hệ sinh thái rộng lớn hơn của StarkWare, nơi cung cấp hỗ trợ, công cụ và tiến bộ nghiên cứu để nâng cao ngôn ngữ và khả năng của nó.
Ẩn nấp
Ẩn náu[13] Nó nhằm mục đích giải quyết những hạn chế của SNARK và mạch truyền thống bằng cách tận dụng Lisp, một ngôn ngữ lập trình chức năng, để thực hiện các mạch có mục đích chung. Sử dụng Lisp, Lurk giới thiệu một hàm chung gọi là "" có thể đánh giá bất kỳ biểu thức dữ liệu nào trong một mạch snark.
Mã là dữ liệu, dữ liệu là mã
Một trong những nguyên tắc cơ bản của Lurk là biểu diễn một chương trình dưới dạng dữ liệu với nội dung địa chỉ. Cách tiếp cận này cho phép đánh giá và xác nhận hiệu quả các chương trình Lurk. Khả năng địa chỉ nội dung đơn giản hóa quá trình phân tích cú pháp và dữ liệu kết quả có thể được sử dụng trực tiếp trong SNARK provers mà không cần bước biên dịch riêng.
Triển khai Lisp trong SNARKs
Để tạo ra một mạch đa năng, Lurk đã tận dụng "nhược điểm" của bộ phân bổ bộ nhớ Lisp. Bộ phân bổ kết hợp hai biểu thức và tạo ra một tham chiếu đến biểu thức kết quả bằng cách băm. Bằng cách chứng minh rằng hai biểu thức được băm vào cùng một tham chiếu, Lurk có thể thực hiện các tính toán trong một mạch snark.
Tiếp tục phong cách chuyền bóng
Lurk sử dụng Phong cách vượt qua liên tục (CPS), chia nhỏ quá trình đánh giá thành các bước có thể quản lý được. Mỗi bước đánh giá trở thành một tính toán có thể xử lý, cho phép thực hiện thống nhất và hiệu quả. Bao gồm các tiếp tục rõ ràng trong các mạch SNARK giúp trải qua quá trình đánh giá từng bước.
** Cung cấp cho Turing tính đầy đủ và khả năng đệ quy**
Bằng cách sử dụng Lisp, Lurk đạt được tính đầy đủ của Turing và hỗ trợ đệ quy vô hạn trong các mạch SNARK. Khả năng quan trọng này cho phép chứng minh các tính toán phức tạp và thực hiện các mạch đa năng có khả năng thực hiện các phép tính tùy ý.
Hiệu ứng &; Ứng dụng
Khả năng của Hidden có ý nghĩa rộng lớn. Bằng cách hỗ trợ đệ quy vô hạn, chu kỳ và các luồng được điều khiển có điều kiện, Lurk cho phép tính toán phức tạp trong các mạch SNARK. Điều này mở ra một loạt các ứng dụng để tính toán xác minh, xử lý dữ liệu riêng tư và thực hiện các chương trình hoàn chỉnh Turing.
Kết luận
Sự lựa chọn ngôn ngữ dành riêng cho miền (DSL) rất đa dạng và dự kiến sẽ tiếp tục phát triển khi các trường hợp sử dụng cho bằng chứng không có kiến thức (ZK) tiếp tục mở rộng trên các hệ sinh thái blockchain. Hiện tại, cuộc đua để thiết lập một ngôn ngữ thống trị để xây dựng các ứng dụng ZK vẫn đang ở giai đoạn đầu, cho thấy rằng chúng ta có thể mong đợi những cải tiến hơn nữa trong lĩnh vực này.
Tuy nhiên, một hạn chế chung của hầu hết các DSL là thiếu hiệu ứng mạng từ các cộng đồng lớn và các thư viện mạnh mẽ. Có một cộng đồng sôi động và thư viện toàn diện có thể cải thiện đáng kể trải nghiệm của nhà phát triển. Mặc dù thiếu sót này có thể được giải quyết theo thời gian, nhưng điều quan trọng đối với các nhóm liên quan đến phát triển DSL là ưu tiên khả năng tương thích với các thư viện khác, vay mượn từ cách tiếp cận của o1js.
Bằng cách đảm bảo khả năng tương thích với các thư viện hiện có, DSL có thể tận dụng kiến thức và tài nguyên tập thể của cộng đồng nhà phát triển rộng lớn hơn, cho phép tích hợp dễ dàng hơn, phát triển nhanh hơn và linh hoạt hơn trong việc triển khai các ứng dụng ZK. Cách tiếp cận hợp tác này sẽ thúc đẩy sự phát triển của một hệ sinh thái mạnh mẽ hơn xung quanh DSL vì lợi ích của các nhà phát triển và cuối cùng thúc đẩy việc áp dụng và hiệu quả của công nghệ ZK.