Посібник розробника для zkGalaxy

Посібник розробника для zkGalaxy

Вихідний вузол: 1946879

Вступ

Компроміси Віталіка для zkEVM між продуктивністю та сумісністю

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

За останні рік-два в інструментах zk було досягнуто величезного прогресу. Вони наближаються до точки, коли звичайні розробники програмного забезпечення можуть використовувати потужні властивості zk без глибокого розуміння лякаючої математики та інженерії. З іншого боку, відбулося поширення інструментів для досвідчених користувачів, які дають експертам zk надзвичайно точний контроль над стеком zk.

Сила абстрагування складності

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

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

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

Технічний стек zk
Стек zk із прикладами інструментів/технологій на кожному рівні

Низькорівневий zk Development

Arkworks-rs

Arkworks-rs це екосистема бібліотек Rust, яка забезпечує ефективну та безпечну реалізацію підкомпонентів програми zkSNARK. Arkworks надає інтерфейси, необхідні для розробників, щоб налаштувати стек програмного забезпечення для програми zk без необхідності повторного впровадження спільного з іншими існуючими бібліотеками.

До Arkworks єдиним способом створити нову програму zk було створити все з нуля. Ключовими перевагами Arkworks-rs перед спеціально створеними вертикально інтегрованими інструментами є рівень гнучкості, зменшення дублюваного проектування та зменшення витрат на аудит. Розумні лінії інтерфейсу Arkworks між компонентами забезпечують швидкість оновлення, яка може підтримувати стек актуальним серед стрімкого темпу інновацій у технологіях zk, не змушуючи команди перебудовувати все з нуля.

Для кого це?

Arkworks призначений для проектів, які потребують точного контролю над усім стеком програмного забезпечення zk, але не хочуть створювати всі зайві частини з нуля. Якщо ви розглядаєте спеціальну версію схеми DSL, оскільки, наприклад, створюєте прототип нової системи перевірки, але не впевнені щодо схеми зобов’язань або відповідної еліптичної кривої, arkworks дозволить вам швидко перемикатися між кількома варіантами зі спільними інтерфейсами, а не ніж почати з нуля.

профі

  • Гнучкість завдяки модульності
  • Менше дублювання коду
    • Нижча вартість проектування
    • Зменшена площа перевірки/помилки
  • Оновіть будь-який компонент без серйозного рефакторингу
  • Легко експериментувати з новими примітивами в середовищі zk, що швидко розвивається

мінуси

  • Вимагає глибокого розуміння повного стеку програмного забезпечення
    • Забагато контролю може призвести до пістолетів, якщо його неправильно зрозуміти
  • Детальний контроль вимагає досвіду на всіх рівнях стека
    • Arkworks надає деякі розумні параметри за замовчуванням.

zk Доменоспецифічні мови (DSL)

Щоб створити доказ певного обчислення, спочатку це обчислення має бути виражене у формі, яку може зрозуміти система zkSNARK. Кілька предметних мов створили мови програмування, які дозволяють розробникам додатків виражати свої обчислення таким чином. До них відносяться Ацтек Нуар, Старкнет КаїрCircomZoKrates, і Алео Лев серед інших. Основна система доказів і математичні деталі, як правило, не надаються розробнику програми.

Досвід розробника

Розробники zkApp повинні навчитися писати свої програми мовами, орієнтованими на домен. Деякі з цих мов дуже схожі на звичні мови програмування, тоді як інші можуть бути досить складними для вивчення. Давайте розберемо деякі з них:

Каїр – Starkware DSL, необхідний для створення програм у Starknet. Компілюється на специфічну для Cairo мову асемблера, яку може інтерпретувати Cairo zkVM.

ZoKrates — ZoKrates — це набір інструментів для звичайних потреб SNARK, включаючи мову високого рівня для написання схем. ZoKrates також має певну гнучкість щодо кривих, схеми перевірки та серверної частини, що дозволяє розробникам здійснювати гарячу заміну за допомогою простого аргументу CLI.

Circom — Circom — це спеціально створена мова для побудови схем. Наразі це фактична мова для схем у виробництві. Мова не особливо ергономічна. Сама мова дає вам чітке усвідомлення того факту, що ви пишете схеми.

Лев — Leo був розроблений як мова для блокчейну Aleo. Leo має певний синтаксис, схожий на Rust, і створений спеціально для переходів між станами всередині блокчейну.

Noir – Синтаксис, натхненний Rust. Створено навколо IR, а не самої мови, що означає, що він може мати довільний інтерфейс. 

Стек компіляції Aztec Noir, зокрема, має модульну архітектуру

Для кого це?

Будь-який розробник програми, який хоче скористатися перевагами унікальних властивостей zk у своїй програмі. Деякі з цих мов пройшли бойові випробування з переміщенням мільярдів доларів через такі мережі, як ZCash і Starknet. Хоча деякі з проектів, які ми обговорюватимемо, ще не зовсім готові до використання у виробництві, написання ваших схем однією з цих мов наразі є найкращою стратегією, якщо вам не потрібні більш точні засоби керування, які надає такий набір інструментів, як Arkworks.

профі

  • Користувачам не потрібно розуміти основні деталі zk
  • Доступно сьогодні з певним досвідом виробництва
  • Перевіряється на ланцюжку
  • Екосистемний агностик

мінуси

  • Користувачам потрібно вивчити новий DSL
  • Окремі інструменти та підтримка для кожної з цих мов
  • Невеликий або відсутній контроль над базовим стеком доказів (на даний момент)

Основна мета zkEVM полягає в тому, щоб прийняти перехід стану Ethereum і підтвердити його дійсність за допомогою короткого підтвердження правильності з нульовим знанням. Як згадувалося в дописі Віталіка, існує кілька способів зробити це з тонкими відмінностями та відповідними компромісами. 

Основна технічна відмінність між усіма цими полягає саме в тому, де в мовному стеку обчислення перетворюються у форму (арифметизацію), яку можна використовувати в системі доведення. У деяких zkEVM це відбувається на мовах високого рівня (Solidity, Vyper, Yul), тоді як інші підходи намагаються довести EVM аж до рівня коду операції. Компроміси між цими підходами були детально розглянуті в дописі Віталіка, але я підсумую це одним реченням: чим нижча конверсія/арифметизація відбувається в стеку, тим більша втрата продуктивності.

Чому перевірка кодів операцій EVM у zk є дорогою?

Основна проблема зі створенням доказів для віртуальної машини полягає в тому, що розмір схеми зростає пропорційно розміру ВСІХ можливих інструкцій для кожної виконаної інструкції. Це відбувається тому, що схема не знає, які інструкції будуть виконуватися в кожній програмі, тому їй потрібно підтримувати їх усі.

В універсальних схемах кожна виконана інструкція має вартість, пропорційну сумі всіх підтримуваних інструкцій.

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

Це фундаментальна проблема з універсальними схемами, але з нові розробки в технологіях Подібно до IVC (incremental verifiable compute), це обмеження можна зменшити, розбивши обчислення на менші частини, кожна з яких має спеціалізовані менші підсхеми.

Сучасні реалізації zkEVM використовують різні стратегії для пом’якшення впливу цієї проблеми… Наприклад, zkSync вириває більш дорогі операції (переважно криптографічні попередні компіляції, такі як хеші та ECDSA) з основної схеми перевірки виконання в окремі схеми, які агрегуються разом на завершити через рекурсію snark. zkSync застосував цей підхід після того, як зрозумів, що більшість їхніх витрат припадає на кілька складних інструкцій.

У трансакційних витратах переважають кілька дорогих операцій.

По суті, причина того, що підтвердження більш еквівалентного набору інструкцій EVM є дорожчим, полягає в тому, що EVM не був розроблений для обчислень zk. Відмова від EVM раніше в стеку дозволяє zkEVM працювати з наборами інструкцій, які більш оптимізовані для zk і, отже, дешевші в перевірці.

Для кого це?

Ідеальними клієнтами для zkEVM є додатки для смарт-контрактів, яким потрібні на порядки дешевші транзакції, ніж ті, що доступні на L1 Ethereum. Ці розробники не обов’язково мають досвід або пропускну здатність, щоб писати програми zk з нуля. Тому вони вважають за краще писати свої програми мовами вищого рівня, з якими вони знайомі, наприклад Solidity. 

Чому так багато команд будують це?

Масштабування Ethereum на даний момент є найбільш затребуваним застосуванням технології zk.

ZkEVM — це рішення для масштабування Ethereum, яке легко усуває проблему перевантаження, яка обмежує розробників L1 dApp.

Досвід розробника

Метою zkEVM є підтримка досвіду розробників, який максимально наближений до поточної розробки Ethereum. Повна підтримка Solidity означає, що командам не потрібно створювати та підтримувати кілька кодових баз. Це дещо непрактично зробити ідеально, тому що zkEVM потребують певної сумісності, щоб мати можливість генерувати докази розумного розміру за прийнятний проміжок часу.

Короткий практичний приклад: zkSync проти Scroll

Основна відмінність між zkSync і Scroll полягає в тому, де/коли в стеку вони виконують арифметизацію, тобто де вони перетворюють звичайні конструкції EVM у представлення, зручне для SNARK. Для zkSync це відбувається, коли вони перетворюють байт-код YUL у свій власний набір інструкцій zk. Для Scroll це відбувається в кінці, коли фактичне трасування виконання генерується з фактичними кодами операцій EVM.

Отже, для zkSync все те саме, що взаємодія з EVM, доки не буде згенеровано байт-код zk. Для Scroll все те саме, доки не буде виконано фактичний байт-код. Це тонка різниця, яка замінює продуктивність на підтримку. Наприклад, zkSync не підтримуватиме інструменти байт-коду EVM, такі як налагоджувач із коробки, оскільки це зовсім інший байт-код. Хоча Scroll матиме більше труднощів отримати хорошу продуктивність із набору інструкцій, який не був розроблений для zk. В обох стратегій є плюси та мінуси, і, зрештою, є багато зовнішніх факторів, які впливатимуть на їхній відносний успіх.

Компілятор схеми zkLLVM

💡 Незважаючи на свою назву, LLVM не є віртуальною машиною (VM). LLVM — це назва набору інструментів компілятора, які закріплені проміжним представленням (IR), яке не залежить від мови.

=ніль; Фонд (про назву, це а Жарт про впровадження SQL якщо вам цікаво) створює компілятор, який може перетворити будь-яку мову інтерфейсу LLVM у проміжне представлення, яке можна перевірити в SNARK. ZkLLVM створено як розширення існуючої інфраструктури LLVM, галузевого стандартного інструментарію, який підтримує багато мов високого рівня, як-от Rust, C, C++ тощо.

Як це працює?

Приблизний ескіз архітектури zkLLVM

Користувач, який хоче підтвердити певні обчислення, просто реалізує ці обчислення в C++. ZkLLVM бере цей високорівневий вихідний код, який підтримується їх модифікованим компілятором clang (наразі C++), і генерує деяке проміжне представлення схеми. На цьому етапі схема готова до перевірки, але користувач може захотіти перевірити схему на основі деяких динамічних вхідних даних. Для обробки динамічних вхідних даних zkLLVM має додатковий компонент, який називається присувачем, який генерує таблицю призначення з усіма вхідними та свідками, повністю попередньо обробленими та готовими до перевірки разом зі схемою.

Ці 2 компоненти — це все, що потрібно для створення доказу. Теоретично користувач може створити доказ сам, але оскільки це дещо спеціалізоване обчислювальне завдання, він може захотіти заплатити комусь іншому, у кого є обладнання, щоб зробити це за нього. Для цього механізму виявлення контрагента = нуль; Фонд також створив «ринок доказів», де перевіряльники змагаються, щоб підтвердити обчислення за користувачів, які платять їм за це. Ця динаміка вільного ринку призведе до оптимізації найцінніших перевірочних завдань.

Компроміси

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

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

профі

  • Користувачі можуть писати код знайомими мовами високого рівня
  • Усі внутрішні елементи zk абстраговані від користувачів
  • Не покладається на певну схему «VM», яка додає додаткові витрати

мінуси

  • Кожна програма має різну схему. Важко оптимізувати. (доказовий ринок частково вирішує це)
  • Нетривіальна заміна/оновлення внутрішніх бібліотек zk (потрібне розгалуження)

ZkVM описує надмножину всіх віртуальних машин zk, а zkEVM — це окремий тип zkVM, який варто обговорити як окрему тему через його поширеність сьогодні. Є кілька інших проектів, які працюють над створенням більш узагальнених віртуальних машин zkVM, які базуються на ISA, окрім створених на замовлення криптографічних віртуальних машин.

Замість перевірки EVM система може перевірити іншу архітектуру набору інструкцій (ISA), таку як RISC-V або WASM у новій віртуальній машині. Над цими узагальненими zkVM працюють два проекти: RISC Zero та zkWASM. Давайте трохи зануримося в RISC Zero, щоб продемонструвати, як працює ця стратегія та деякі її переваги/недоліки. 

Високорівнева архітектура покоління Risc Zero proof

RISC Zero може підтвердити будь-які обчислення, які виконуються на архітектурі RISC-V. RISC-V — це стандарт архітектури набору команд (ISA) з відкритим кодом, який набирає популярності. Філософія RISC (комп’ютер зі скороченим набором інструкцій) полягає у створенні надзвичайно простого набору інструкцій із мінімальною складністю. Це означає, що розробники на вищих рівнях у стеку в кінцевому підсумку беруть на себе більше навантаження при реалізації інструкцій за допомогою цієї архітектури, одночасно спрощуючи апаратну реалізацію.

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

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

Як це працює?

З точки зору розробника, використання RISC Zero для обробки zk-доказів багато в чому схоже на використання функцій AWS Lambda для обробки серверної архітектури. Розробники взаємодіють із RISC Zero або AWS Lambda, просто пишучи код, а служба впорається з усією складністю серверної частини.

Для RISC Zero розробники пишуть Rust або C++ (можливо, все, що націлено на RISC-V). Потім система бере файл ELF, створений під час компіляції, і використовує його як вхідний код для схеми VM. Розробники просто викликають prove, який повертає квитанцію (яка містить zk-доказ трасування виконання), об’єкт, який будь-хто може викликати `verify` з будь-якого місця. З точки зору розробника, немає необхідності розуміти, як працює zk, базова система впорається з усією цією складністю.

Risc Zero intern?

профі

  • Простий у використанні. Відкриває двері будь-якому програмісту для створення додатків zk
  • Єдиний контур, на якому можуть спеціалізуватися перевірювачі
    • Також менше площі для атаки та менше для аудиту
  • Сумісний із будь-яким блокчейном, ви просто опублікуєте докази

мінуси

  • Для підтримки такого загального інтерфейсу потрібно багато накладних витрат (у розмірі перевірки та швидкості генерації).
  • Вимагає значного вдосконалення методів генерації доказів, щоб отримати широку підтримку існуючих бібліотек

Попередньо зібрані багаторазові схеми

Для деяких основних і багаторазових схем, які особливо корисні для блокчейн-додатків або в інших місцях, команди, можливо, вже створили та оптимізували ці схеми для вас. Ви можете просто надати вхідні дані для свого конкретного випадку використання. Наприклад, підтвердження включення Merkle є те, що зазвичай потрібно в криптододатках (списки розсилки, Tornado Cash тощо). Як розробник додатків, ви завжди можете повторно використати ці перевірені в боях контракти та просто змінити верхні шари, щоб створити унікальний додаток.

Наприклад, схеми Tornado Cash можна повторно використовувати для a приватна програма airdrop або додаток для приватного голосування. Manta та Semaphore створюють цілий набір інструментів із загальних схемних гаджетів, подібних до цього, які можна використовувати в контрактах Solidity з незначним розумінням базової математики zk moon або зовсім без нього.

Посібник — Вибір стека

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

Посібник розробника програми для zkGalaxy

zk App Dev Cheatsheet

1. Бібліотеки Snark низького рівня

Коли користуватися: 

  • Вам потрібен точний контроль над усім стеком пруверів
  • Бажаєте уникнути перебудови загальних компонентів
  • Ви хочете експериментувати з різними комбінаціями схем доведення, кривих та ін примітиви

Коли не можна використовувати:

  • Ви новачок і шукаєте високорівневі інтерфейси перевірки

варіанти: 


3. zk Упорядники

Коли користуватися: 

  • Не хоче брати на себе накладні витрати на універсальну схему
  • Хочете писати схеми знайомими мовами 
  • Потрібна дуже індивідуальна схема

Коли не можна використовувати: 

  • Хочете контролювати базові криптографічні примітиви
  • Потрібна схема, яка вже була сильно оптимізована

варіанти:


5. зкВМ

Коли користуватися: 

  • Хочете написати код мовою високого рівня 
  • Необхідно довести правильність цього виконання 
  • Необхідно приховати деякі вхідні дані для цього виконання від верифікатора
  • Має незначний досвід у zk

Коли не можна використовувати:

  • У середовищах із надзвичайно низькою затримкою (все ще повільно)
  • У вас величезна програма (поки що)

варіанти:

2. zk DSL

Коли користуватися: 

  • Вам комфортно вивчати нову мову
  • Хочете використовувати деякі перевірені в боях мови
  • Потрібен мінімальний розмір схеми, готовий відмовитися від абстракцій

Коли не можна використовувати: 

  • Потрібен точний контроль над серверною частиною перевірки (наразі можна замінити серверні частини для деяких DSL)

варіанти:


4. зкЕВМ

Коли користуватися: 

  • У вас є dApp, який уже працює на EVM
  • Вам потрібні дешевші транзакції для ваших користувачів 
  • Ви хочете звести до мінімуму зусилля з розгортання в новому ланцюжку
  • Подбайте лише про властивість стислості zk (стиснення)

Коли не можна використовувати: 

  • Вам потрібна ідеальна еквівалентність EVM
  • Вам потрібна конфіденційність власності zk 
  • Ви використовуєте не блокчейн 

варіанти: 


6. Попередньо зібрані багаторазові схеми

Коли користуватися: 

  • У вас є програма смарт-контракту, яка базується на звичайних будівельних блоках zk, як-от включення Merkle
  • У вас майже немає досвіду в базових речах zk

Коли не використовувати:

  • У вас є вузькоспеціалізовані потреби
  • Ваш варіант використання не підтримується попередньо зібраними схемами 

варіанти: 

Висновок

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

Сподіваюся, я переконав вас, допитливого розробника програмного забезпечення, що ви можете почати використовувати zk у своїх програмах вже сьогодні. Щасливого хакінгу 🙂

чого ти чекаєш, створюй кілька додатків zk

Розкриття інформації: Blockchain Capital є інвестором у декілька згаданих вище протоколів.

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

Часова мітка:

Більше від Blockchain Capital