Стаття про мову програмування ZK

Zero-knowledge proof (ZKP) — це потужний криптографічний інструмент, який може перевірити правильність обчислень, захищаючи при цьому конфіденційність вхідних даних. Будучи невід’ємною частиною цієї критичної інфраструктури, доменно-орієнтовані мови (DSL) відіграють життєво важливу роль у спрощенні процесу розробки та перевірки схем ZKP. Вони відіграють важливу роль у зв’язуванні абстрактних концепцій із точними представленнями схем, необхідних для підтвердження системи, діючи як важливий міст між ними.

Однією з ключових проблем у перевірці систем є перетворення абстрактних концепцій високого рівня в реальні схеми. Однак поява DSL вирішує цю проблему, полегшуючи структуроване вираження цих абстрактних концепцій більш конкретним і досяжним способом.

За останнє десятиліття ми стали свідками значного зростання кількості та різноманітності DSL. Діяльність у цій галузі відображена в розробці різних схемних мов, включаючи Noir, Leo, Zinc тощо. Незалежно від того, чи потрібен вам варіант загального призначення, як-от Circom, чи рішення, налаштоване для конкретної платформи, як-от Cairo, ви можете вибрати з широкого діапазону мов і фреймворків для написання схем ZKP.

У цій статті ми розглянемо основні мови програмування ZK, які активно використовують розробники, і проаналізуємо найкращі функції кожної мови.

TLDR;

Стаття про мову програмування ZK

Каїр від StarkWare

Cairo, основна мова для обчислювальних програм загального призначення, що підтримують докази STARK, відіграла ключову роль в успіху StarkNet і StarkEx, сприяючи масштабованості додатків у головній мережі Ethereum. Варто зазначити, що Cairo зіграв важливу роль у підтримці різних програм, включаючи dYdX, Sorare, Immutable X тощо. Назва «Cairo» походить від абревіатури «CPU Algebraic Intermediate Representation». У сфері доказів із нульовим знанням він відіграє роль, подібну до мови асемблера, полегшуючи початок роботи розробникам, знайомим із мовами програмування низького рівня, такими як C, C++ або Solidity.

Натхненний Rust, Cairo дає розробникам можливість створювати розумні контракти Starknet, зосереджуючись на безпеці та зручній розробці. Cairo має потужний синтаксис, який спрощує створення схем ZK і дозволяє користувачам виконувати різноманітні завдання в програмах Cairo. Крім того, значною перевагою Cairo є його розширюваність, що дозволяє гнучко вводити нові функції та можливості.

У системах ZK ефективність і масштабованість є вирішальними факторами, і Cairo відповідає цій вимозі, підкреслюючи ці два аспекти. Мова інтегрує стратегії оптимізації, включаючи зменшення обмежень і усунення циклів, щоб полегшити обчислювальний тягар, який зазвичай пов’язаний із схемами ZK. Оптимізація дизайну схем Cairo забезпечує швидшу генерацію та перевірку перевірки, що робить її ідеальною для додатків, які вимагають високої пропускної здатності та мінімальної затримки.

Розширення Cairo було вражаючим, з надзвичайним сплеском штатних розробників за останні два роки. Цей сплеск підкреслює адаптивність Cairo, оскільки використання Cairo не обмежується блокчейном, але має значення в будь-якому контексті, де потрібна обчислювальна перевірка. Як наслідок, ми можемо очікувати значного подальшого зростання запровадження Cairo розробниками.

28 вересня 2023 року Starknet запустила важливе оновлення своєї мови програмування Cairo v2.3.0. Цей випуск знаменує собою значний крок вперед у тому, щоб зробити контракти більш модульними, збільшуючи потенціал смарт-контрактів за рахунок впровадження нових функцій, параметрів зберігання та керування подіями. Інтеграція цих компонентів забезпечує гнучкий спосіб розширення функціональності контракту, дозволяючи стороннім модулям покращувати функціональність контракту.

Zinc від ZkSync

Zinc — це мова програмування, призначена для створення смарт-контрактів і схем SNARK на платформі zkSync. Він використовує синтаксис Rust, містить елементи Solidity та надає унікальні функції.

Що робить Zinc унікальним, так це його зручність. Вам не потрібно розуміти всі складні деталі систем обмежень першого порядку (R1CS), щоб написати безпечний код. Цинк підкреслює незмінність, роблячи його за своєю суттю функціональним. Це означає, що він надає пріоритет незмінним даним і оцінці функцій, тим самим зменшуючи побічні ефекти та сприяючи написанню більш чистого, менш схильного до помилок коду смарт-контракту.

Крім того, Zinc містить безпечні математичні операції для запобігання потенційним переповненням, забезпечуючи безпеку всіх операцій. Незважаючи на деякі обмеження, такі як відсутність нескінченних циклів і рекурсії, Zinc спрощує процес налагодження за допомогою трасування журналу консолі. Ці трасування покращують налагодження, спрощуючи процес відстеження та вирішення проблем у тестовій або основній мережі.

Noir від Aztec

Noir — це DSL з відкритим вихідним кодом, розроблений Aztec на основі Rust, призначений для спрощення створення ZK-схем і ZK-програм без глибоких знань криптографії. Вона вважається однією з найпростіших мов для початку роботи та підходить для написання додатків ZK, сумісних з будь-якою системою перевірки. Noir зосереджується на безпеці, простоті та продуктивності. Він забезпечує високорівневий синтаксис, схожий на Rust, який абстрагує криптографічний захист і спрощує використання базових криптографічних примітивів, зберігаючи високу продуктивність.

Noir має значні переваги в розширенні діапазону програм, які можуть використовувати можливості захисту конфіденційності, надані ZKP, тим самим підвищуючи конфіденційність і ефективність перевірки. Noir компілюється в проміжне представлення під назвою Abstract Circuit Intermediate Representation (Acer), яке потім можна скомпільувати в R1CS. Відокремлення серверної системи перевірки від самої мови дозволяє Noir підтримувати різноманітні системи перевірки, включаючи Aztec Brettenberg, Turbo Plonk і потенційні майбутні інтеграції, такі як Groth16 і Halo2.

Мова надає стандартну бібліотеку, яка включає такі ефективні функції, як SHA-256 (криптографічна хеш-функція, яка генерує вихідні дані фіксованого розміру) і перевірки Педерсена-Меркла (метод, який використовує зобов’язання Педерсена та дерева Меркла для забезпечення цілісності даних і узгодженості шифрування технологія перевірки). Дизайн Noir схожий на Rust і включає функції, знайомі розробникам програм, такі як функції, підмодулі, визначені користувачем типи (структури), умови, цикли та глобальні константи. Крім того, докладаються постійні зусилля для розробки генериків і першокласних функцій для подальшого покращення виразних можливостей Noir.

Слід зазначити, що робота над Noir все ще триває, тому можуть бути деякі обмеження та потенційні помилки. Але команда розробників прагне постійно вдосконалювати та оптимізувати мову.

o1js від 0(1) Labs

o1js, раніше відомий як SnarkyJS, — це бібліотека типів, розроблена 0(1)Labs для створення смарт-контрактів за допомогою мови програмування SNARK. Він використовує відомі технології, як-от Node.js, і сумісність із веб-переглядачами, щоб забезпечити легкий доступ і легкість використання для розробників.

o1js може легко інтегруватися з бібліотеками та інструментами Java і TypeScript, надаючи розробникам потужну екосистему та широку підтримку спільноти. Ця інтеграція спрощує процес розробки та скорочує криву навчання, пов’язану з прийняттям нового середовища розробки. Крім того, він повністю підтримує Visual Studio Code (VS Code), широко використовуваний редактор коду, який дозволяє розробникам використовувати всі переваги таких функцій, як доповнення коду, підсвічування синтаксису та налагодження для покращення досвіду розробки.

o1js — це, по суті, універсальна платформа ZK, яка надає вам ключові інструменти, необхідні для створення доказів ZK. Він підтримує створення різноманітних програм ZK, що охоплюють різноманітні вбудовані доказові операції, включаючи базову арифметику, хешування, підписи, логічні операції, порівняння тощо. За допомогою фреймворку o1js ви можете створювати zkApps на протоколі Mina, розумні контракти, які виконуються на стороні клієнта та мають приватні дані.

Варто зазначити, що на початку вересня 2023 року команда 0(1)Labs оголосила про перехід від SnarkyJS до o1js і підкреслила свою відданість покращенню продуктивності. Особливо слід відзначити те, що вони досягли 3-4-кратного скорочення часу завантаження бібліотеки, що відноситься до часу, необхідного для імпорту o1js, процесу, який може блокувати основний потік. Для веб-додатків час завантаження має велике значення як для часу виконання Java, так і для відтворення всієї сторінки. Крім того, команда також оновила Mina zkApp CLI, щоб покращити процес створення інтерфейсу користувача, і оголосила про подальші вдосконалення Archive Node API для підвищення його надійності та чіткості.

Лео від Алео

Блокчейн Aleo є унікальним у сфері смарт-контрактів і підкреслює захист конфіденційності. Його основою є мова програмування Leo, статично типізована мова, натхненна Rust. Розроблений спеціально для розробки приватних програм, Leo дає змогу творцям, які хочуть побудувати безпечну та приватну децентралізовану екосистему. Справді унікальним у Leo є його піонерська роль у впровадженні комплексного інструментарію для програм загального призначення з нульовим знанням. Цей набір інструментів включає структуру тестування, реєстр пакетів, аналізатор імпорту, віддалений компілятор і генератор теорем.

Leo був задуманий командою розробників на чолі з Говардом Ву, який передбачив технологію, яка дозволить розробникам створювати децентралізовані програми, які надають пріоритет конфіденційності та безпеці. Розробка Leo базується на принципах Rust, але включає деякі Java-подібні елементи для сприяння знайомству та зручності під час процесу розробки. Крім того, Leo прагне прискорити розробку та спростити процес розробки, надаючи інтегровану платформу тестування, реєстр пакетів та конвертер імпорту. Ця інтеграція дозволяє розробникам зосередитися на основній логіці своїх програм, не обтяжуючись проблемами інфраструктури.

Яскравою особливістю Leo є його компілятор, який перетворює програми в низькорівневий формат перевірки R1CS. Компілятор Leo унікальний своїм суворим формальним процесом перевірки. Ця перевірка є критично важливою, оскільки вразливі місця можуть виникати на кількох етапах, від початкового програмування до аудиту та компіляції. Проводячи суворі математичні перевірки, щоб гарантувати, що компілятор відповідає намірам програміста, Leo прагне зменшити ризик непомічених помилок або потенційних вразливостей, особливо в контекстах L2, ZK-зведеннях або приватних програмах на платформі Leo.

Circom від iden3

Circom, DSL, спеціально розроблений для розробки схем ZK, є результатом спільних зусиль Jordi Baylina та команди iden3. Компілятор Circom написаний мовою Rust, і його основне завдання полягає в компіляції схем, написаних мовою Circom. Зокрема, Circom став найкращим вибором для видатних реальних додатків ZK, таких як Dark Forest і Tornado Cash. Його популярність пояснюється чудовою продуктивністю, включаючи швидкий час перевірки в браузері за допомогою оптимізованих перевірок WASM, ефективних перевірок на стороні сервера за допомогою rapidsnark і ефективної перевірки в мережі.

Однак важливо розуміти, що функціональні можливості Circom в основному зосереджені на розробці схем ZK, що може зробити його менш придатним для вирішення більш широкого спектру обчислювальних завдань. Розробники, які шукають більше функцій, які можуть задовольнити ширший спектр потреб розробки, можуть виявити можливості Circom дещо обмеженими. У цьому випадку розробникам може знадобитися поєднати інші мови програмування або фреймворки, щоб задовольнити ширші потреби розробки.

Стаття про мову програмування ZK Зображення від Circom

Сумісність Circom в основному зосереджена на широко використовуваних системах ZKP, таких як snarkjs і libsnark. Хоча ця сумісність забезпечує бездоганну інтеграцію з цими широко використовуваними системами, це також означає, що схеми Circom успадковують певні можливості та обмеження, пов’язані з цими залежностями. Розробники, які віддають перевагу або потребують альтернативну систему ZKP, можуть зіткнутися з проблемами сумісності або вимагати додаткової роботи для адаптації та інтеграції схеми, створеної Circom, у свою бажану систему.

Lurk від Lurk Lab

Lurk — це діалект Lisp зі статичною областю видимості, створений під впливом Scheme і Common Lisp, з унікальною особливістю: він дозволяє прямо доказувати правильність виконання програми за допомогою zk-SNARK, забезпечуючи компактну та ефективну перевірку.

Основне використання Lurk:

  • Обчислення, яке можна перевірити: Lurk дозволяє вам доводити правильність його виразів за умов нульового знання, підвищуючи довіру до результатів обчислень.
  • Нульове знання: користувачі можуть підтверджувати свої знання, не розкриваючи конкретну інформацію за межами публічного введення, тим самим захищаючи конфіденційність.
  • Дані з адресацією вмісту: кожна програма Lurk оснащена унікальним ідентифікатором вмісту (CID), що робить її сумісною з IPFS і IPLD.
  • Повнота Turing: Lurk підтримує створення та підтвердження довільних обчислювальних тверджень.
  • Функції вищого порядку: функції Lurk можуть приймати та повертати функції, забезпечуючи експресивне функціональне програмування.
  • Обчислення, що обробляє приватні дані: Lurk дає змогу обробляти приватні дані, забезпечуючи доведено правильний вихід без шкоди для конфіденційності.

Lurk використовує всі переваги розподілювача пам’яті «проти» Lisp при створенні схем загального призначення. Цей розподільник поєднує вирази та генерує посилання через хеші. Ключ полягає в тому, щоб довести, що два вирази справді хешують одне й те саме посилання. Ця перевірка дозволяє Lurk виконувати обчислення в схемі snark.

Lurk має дуже багато функцій, включаючи підтримку нескінченної рекурсії, циклів, потоку умовного керування та кількох систем перевірки серверної частини, таких як Groth16, SnarkPack+ і Nova. Ця універсальність відкриває двері для різноманітних застосувань, включаючи верифікаційні обчислення, приватну обробку даних і виконання повних програм Тьюрінга в схемах snark.

Підведіть підсумки

Зі збільшенням різноманітності додатків ZK DSL має широкі перспективи розвитку в галузі ZK. Ключем до успішного DSL є створення процвітаючої спільноти та багатих бібліотек для збагачення досвіду розробників. DSL, які віддають перевагу сумісності з існуючими бібліотеками, можуть використовувати знання та ресурси ширшої спільноти розробників. Такий підхід сприяє плавній інтеграції, прискорює розробку та забезпечує більшу гнучкість під час впровадження додатків ZK. Ці спільні зусилля мають вирішальне значення для сприяння більш надійній екосистемі навколо DSL, надаючи відчутні переваги розробникам і сприятимуть подальшому прийняттю та ефективності технології ZK.

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • Прокоментувати
  • Поділіться
Прокоментувати
0/400
Немає коментарів
  • Закріпити