Marlin
Переклад на українську. Оригінал.
Marlin — це бібліотека Rust, яка реалізує zkSNARK для R1CS з універсальною та оновлюваною SRS.
Цю бібліотеку спочатку було розроблено як частину статті Marlin, і її випущено під ліцензією MIT та ліцензією Apache v2 (див. Ліцензія).
ПОПЕРЕДЖЕННЯ: Це академічний прототип, який, зокрема, не пройшов ретельну перевірку коду. Ця реалізація НЕ готова для промислового використання.
Огляд
ZkSNARK з попередньою обробкою забезпечує лаконічну перевірку для довільних обчислень, на противагу лише для структурованих обчислень. Неформально, в автономному режимі, можна попередньо обробити потрібне обчислення, щоб отримати його короткий підсумок; згодом, в онлайн режимі, цей підсумок можна використати для перевірки будь-якої кількості аргументів відносно цього обчислення.
Попередня обробка zkSNARK у цій бібліотеці спирається на структурований довідковий рядок (SRS), який містить системні параметри, необхідні системі аргументів для створення/перевірки аргументів. SRS у цій бібліотеці є універсальним, що означає, що вона підтримує (детерміновано) попередню обробку будь-яких обчислень до заданої межі розміру. SRS також оновлюється, що означає, що будь-хто може додати до неї нову частку випадковості, що полегшує розгортання у реальному світі.
Конструкція в цій бібліотеці слідує методології, представленої в статті Marlin, яка отримує попередню обробку zkSNARKs з універсальною та оновлюваною SRS шляхом комбінування двох інгредієнтів:
- алгебраїчного голографічного доведення
- поліноміальної схеми зобов’язань
Перший компонент надається як частина цієї бібліотеки і є ефективним алгебраїчним голографічним доведенням для R1CS (узагальнення задовільності арифметичної схеми, що підтримується багатьма системами аргументів). Другий компонент імпортується з poly-commit. Деталі оцінювання дивіться нижче.
Посібник зі збирання
Бібліотека збирається на основі stable інструментарію компілятора Rust. Щоб встановити останню версію Rust, спочатку встановіть rustup, дотримуючись інструкцій тут, або за допомогою менеджера пакунків вашої платформи. Після встановлення rustupвстановіть набір інструментів Rust за допомогою виклику:
rustup install stableПісля цього скористайтесяcargo (стандартним інструментом збірки Rust), щоб зібрати бібліотеку:
git clone https://github.com/arkworks-rs/marlin.git
cd marlin
cargo build --releaseЦя бібліотека постачається з деякими модульними та інтеграційними тестами. Запустіть ці тести:
cargo testНарешті, ця бібліотека оснащена інфраструктурою профілювання, яка друкує детальні траси часу виконання. Щоб увімкнути її, скомпілюйте з cargo build --features print-trace.
Бенчмарки
Усі наведені нижче бенчмарки виконано на кривій BLS12–381, реалізованій у бібліотеці ark-bls12-381, з активованою функцією asm. Бенчмарки виконувалися на машині з процесором Intel Xeon 6136 з тактовою частотою 3,0 ГГц.
Час виконання порівняно з Groth16
Get Karlo’s stories in your inbox
Join Medium for free to get updates from this writer.
На наведених нижче графіках порівнюється час роботи в однопотоковому виконанні алгоритмів індексатора, перевірника та верифікатора Marlin з відповідними алгоритмами Groth16 (сучасний метод попередньої обробки zkSNARK для R1CS зі специфічними для схеми SRS), реалізованими уgroth16. Ми оцінюємо алгоритми Марліна, коли вони реалізовані на схемі ПК з CHMMVW20] (позначимо “M-AHP w/ PC з [CHMMVW20]”), і на схемі ПК з [MBKM19] (позначимо “M-AHP w/ PC з [MBKM19]”).
Багатопотокова продуктивність
На наступних графіках порівнюється час роботи вивідника Марліна при виконанні за схемою з [CHMMVW20] (ліворуч) та за схемою з [MBKM19] (праворуч) при виконанні з різною кількістю потоків.
Розмір доказу
Ми порівнюємо розмір доказу Marlin з розміром доказу Groth16. Ми інстанціюємо SNARK Marlin зі схемою ПК з [CHMMVW20], та схемою ПК з [MBKM19].
Схема — Розмір доказу в байтах
Marlin AHP [CHMMVW20] — 880
Marlin AHP [MBKM19] — 784
[Groth16] — 192
Ліцензія
Цю бібліотеку ліцензовано відповідно до однієї з наступних ліцензій, на ваш розсуд.
- Ліцензія Apache, версія 2.0
- Ліцензія MIT
Якщо ви явно не вкажете інше, будь-який внесок, який ви надсилаєте до цієї бібліотеки, має подвійну ліцензію, як зазначено вище (як визначено у Ліцензії Apache v2), без жодних додаткових умов чи положень.
Довідкова стаття
Marlin: Попередня обробка zkSNARKs з універсальною та оновлюваною SRS
Alessandro Chiesa, Yuncong Hu, Mary Maller, Pratyush Mishra, Noah Vesely, Nicholas Ward
Подяки
Ця робота була підтримана: грантом Дослідницької ради з інженерних і фізичних наук; премією Google Faculty Award; лабораторією RISELab в Каліфорнійському університеті в Берклі; а також пожертвами від Ethereum Foundation і Interchain Foundation.








