Zero-knowledge proof (ZKP) je výkonný kryptografický nástroj, který dokáže ověřit správnost výpočtů a zároveň ochránit soukromí vstupních dat. Jako nedílná součást této kritické infrastruktury hrají doménově specifické jazyky (DSL) zásadní roli, zefektivňují proces vývoje a ověřování obvodů ZKP. Hrají důležitou roli při propojování abstraktních pojmů s přesnými reprezentacemi obvodů potřebnými k prokázání systému a působí jako důležitý most mezi těmito dvěma.

Jednou z klíčových výzev při ověřování systémů je převádění abstraktních konceptů na vysoké úrovni do skutečných obvodů. Vznik DSL však řeší tento problém tím, že usnadňuje strukturované vyjádření těchto abstraktních pojmů konkrétnějším a dosažitelnějším způsobem.

Během posledního desetiletí jsme byli svědky výrazného nárůstu počtu a rozmanitosti DSL. Aktivita v této oblasti se odráží ve vývoji několika obvodových jazyků, včetně Noir, Leo, Zinc a dalších. Ať už potřebujete univerzální možnost, jako je Circom, nebo řešení přizpůsobené pro konkrétní platformu, jako je Cairo, můžete si vybrat ze široké škály jazyků a rámců pro psaní obvodů ZKP.

V tomto článku prozkoumáme hlavní programovací jazyky ZK, které vývojáři aktivně využívají, a analyzujeme nejlepší vlastnosti každého jazyka.


TLDR;

Káhira od StarkWare

Cairo, základní jazyk pro všeobecné výpočetní programy, které podporují STARK proofs, hrál klíčovou roli v úspěchu StarkNet a StarkEx a řídil škálovatelnost aplikací na mainnetu Ethereum. Je pozoruhodné, že Káhira byla nápomocná při podpoře různých aplikací, včetně dYdX, Sorare, Immutable X a dalších. Název "Cairo" pochází ze zkratky "CPU Algebraic Intermediate Representation". Ve světě důkazů s nulovými znalostmi hraje roli podobnou assembleru, což vývojářům obeznámeným s nízkoúrovňovými programovacími jazyky, jako je C, C++ nebo Solidity, usnadňuje začátek.

Inspirován Rustem, Cairo umožňuje vývojářům vytvářet Starknet smart kontrakty se zaměřením na bezpečnost a uživatelsky přívětivý vývoj. Cairo má výkonnou syntaxi, která zjednodušuje vytváření obvodů ZK a umožňuje uživatelům provádět různé úkoly v rámci káhirských programů. Významnou výhodou Káhiry je navíc její rozšiřitelnost, která umožňuje flexibilní zavádění nových funkcí a schopností.

V systémech ZK jsou rozhodujícími faktory efektivita a škálovatelnost a Káhira tento požadavek splňuje důrazem na tyto dva aspekty. Jazyk integruje optimalizační strategie, včetně redukce omezení a eliminace smyčky, aby se zmírnila výpočetní zátěž typicky spojená s obvody ZK. Optimalizace návrhu obvodů v Cairo vede k rychlejšímu generování a ověřování důkazů, takže je ideální pro aplikace vyžadující vysokou propustnost a minimální latenci.

Expanze Káhiry byla působivá a za poslední dva roky došlo k mimořádnému nárůstu vývojářů na plný úvazek. Tento nárůst zdůrazňuje adaptabilitu Káhiry, protože použití Káhiry není omezeno na blockchain, ale je relevantní v jakémkoli kontextu, kde je vyžadováno ověření výpočtů. V důsledku toho můžeme očekávat významný další růst v adopci Káhiry developery.

28. září 2023 Starknet spustil důležitý upgrade svého programovacího jazyka Cairo v2.3.0. Tato verze představuje významný krok vpřed ve vytváření modulárnějších smluv, čímž se zvyšuje potenciál chytrých smluv zavedením nových funkcí, možností úložiště a správy událostí. Integrace těchto komponent poskytuje flexibilní způsob rozšíření funkčnosti smlouvy a umožňuje modulům třetích stran vylepšit funkčnost smlouvy.


Zinek od ZkSync

Zinc je programovací jazyk určený pro vytváření chytrých kontraktů a obvodů SNARK na platformě zkSync. Používá syntaxi Rust, obsahuje prvky Solidity a poskytuje jedinečné funkce.

To, co dělá Zinc jedinečným, je jeho uživatelská přívětivost. Abyste mohli napsat bezpečný kód, nemusíte rozumět všem složitým detailům omezovacích systémů prvního řádu (R1CS). Zinek zdůrazňuje neměnnost, díky čemuž je ze své podstaty funkční. To znamená, že upřednostňuje neměnná data a vyhodnocování funkcí, čímž omezuje vedlejší účinky a podporuje psaní čistšího kódu inteligentních smluv, který je méně náchylný k chybám.

Zinc navíc obsahuje bezpečné matematické operace, které zabraňují potenciálnímu přetečení a zajišťují bezpečnost všech operací. Ačkoli má některá omezení, jako jsou žádné nekonečné smyčky a rekurze, Zinc zjednodušuje proces ladění pomocí sledování protokolu konzoly. Tato trasování zlepšují ladění tím, že zjednodušují proces sledování a řešení problémů v testovací síti nebo hlavní síti.


Noir od Aztéků

Noir je open source DSL vyvinutý společností Aztec, založený na Rustu, navržený tak, aby zjednodušil tvorbu ZK obvodů a ZK programů bez nutnosti hlubokých znalostí kryptografie. Je považován za jeden z nejdostupnějších jazyků pro psaní aplikací ZK, které jsou kompatibilní s jakýmkoliv systémem proof. Noir se zaměřuje na bezpečnost, jednoduchost a výkon. Poskytuje syntaxi podobnou Rustu na vysoké úrovni, která abstrahuje kryptografické zabezpečení a zjednodušuje použití kryptografických základních primitiv při zachování vysokého výkonu.

Noir má významné výhody v rozšiřování škály aplikací, které mohou využívat možností ochrany soukromí poskytovaných ZKP, čímž se zvyšuje účinnost soukromí a ověřování. Noir je zkompilován do mezilehlé reprezentace nazvané Abstract Circuit Intermediate Representation (Acer), kterou lze dále zkompilovat do R1CS. Oddělení backend proof systému od samotného jazyka umožňuje Noir podporovat řadu proof systémů, včetně Aztec Brettenberg, Turbo Plonk a potenciálních budoucích integrací, jako je Groth16 a Halo2.

Jazyk poskytuje standardní knihovnu, která obsahuje účinné funkce, jako je SHA-256 (kryptografická hašovací funkce, která generuje výstup s pevnou velikostí) a kontroly Pedersen-Merkle (metoda, která využívá závazky Pedersen a stromy Merkle k zajištění integrity dat a šifrování konzistence). ověřovací technologie). Noir je navržen jako Rust a obsahuje funkce známé vývojářům aplikací, jako jsou funkce, submoduly, uživatelem definované typy (struktury), podmínky, smyčky a globální konstanty. Kromě toho je vyvíjeno neustálé úsilí o vývoj generických a prvotřídních funkcí pro další vylepšení vyjadřovacích schopností Noir.

Je třeba poznamenat, že Noir je stále ve vývoji a mohou existovat určitá omezení a potenciální chyby. Vývojový tým se však zavázal jazyk neustále zlepšovat a optimalizovat.

o1js od 0(1) Labs

o1js, dříve SnarkyJS, je knihovna TypeScript vyvinutá společností 0(1)Labs pro vytváření chytrých kontraktů pomocí programovacího jazyka SNARK. Využívá již zavedené technologie, jako je Node.js a kompatibilitu prohlížeče, aby zajistil vývojářům snadný přístup a snadné použití.

o1js se hladce integruje s knihovnami a nástroji JavaScript a TypeScript a poskytuje vývojářům silný ekosystém a rozsáhlou komunitní podporu. Tato integrace zjednodušuje proces vývoje a snižuje křivku učení spojenou s přijetím nového vývojového prostředí. Kromě toho plně podporuje Visual Studio Code (VS Code), široce používaný editor kódu, který vývojářům umožňuje využívat výhody funkcí, jako je dokončování kódu, zvýrazňování syntaxe a ladění, pro vylepšení zážitku z vývoje.

o1js je v podstatě všestranný rámec ZK, který vám poskytuje klíčové nástroje, které potřebujete k vytváření nátisků ZK. Podporuje vytváření různých programů ZK, které pokrývají různé vestavěné prokazatelné operace, včetně základní aritmetiky, hashování, podpisů, booleovských operací, porovnávání a dalších. S rámcem o1js můžete vytvářet zkApps na protokolu Mina, inteligentní smlouvy, které se provádějí na straně klienta a mají soukromé vstupy.

Za zmínku stojí, že na začátku září 2023 tým 0(1)Labs oznámil, že přejde ze SnarkyJS na o1js, a zdůraznil svůj závazek ke zlepšení výkonu. Za zmínku stojí, že dosáhli 3-4x zkrácení doby načítání knihovny, což se týká času potřebného k importu o1js, což je proces, který může zablokovat hlavní vlákno. U webových aplikací má čas načítání velký význam jak pro načasování provádění JavaScriptu, tak pro vykreslování celé stránky. Kromě toho tým také aktualizoval Mina zkApp CLI, aby se zlepšilo vytváření uživatelského rozhraní, a oznámil další vylepšení API archivního uzlu, aby se zvýšila jeho spolehlivost a přehlednost.


Leo od Alea

Aleo blockchain je unikátní v oblasti chytrých kontraktů a klade důraz na ochranu soukromí. Jeho jádrem je programovací jazyk Leo, staticky typovaný jazyk inspirovaný Rustem. Navrženo speciálně pro vývoj soukromých aplikací, Leo umožňuje tvůrcům, kteří chtějí vybudovat bezpečný a soukromý decentralizovaný ekosystém. Co je na Leo skutečně jedinečné, je jeho průkopnická role při zavádění komplexní sady nástrojů pro všeobecné aplikace s nulovými znalostmi. Tato sada nástrojů obsahuje testovací rámec, registr balíčků, analyzátor importu, vzdálený kompilátor a generátor teorémů.

Leo byl koncipován týmem vývojářů vedeným Howardem Wu, který si představoval technologii, která umožní vývojářům vytvářet decentralizované aplikace, které upřednostňují soukromí a bezpečnost. Leo design čerpá z principů Rust a zároveň zahrnuje některé prvky podobné JavaScriptu, které podporují známost a pohodlí během procesu vývoje. Kromě toho má Leo za cíl urychlit vývoj a zjednodušit vývojový proces tím, že poskytuje integrovanou testovací platformu, registr balíčků a převodník importu. Tato integrace umožňuje vývojářům soustředit se na základní logiku svých aplikací, aniž by je zatěžovaly problémy s infrastrukturou.

Pozoruhodným rysem Leo je jeho kompilátor, který převádí programy do nízkoúrovňového R1CS proof formátu. Kompilátor Leo je jedinečný ve svém přísném procesu formálního ověřování. Toto ověření je zásadní, protože zranitelnosti se mohou objevit v několika fázích, od počátečního programování až po auditování a kompilaci. Prováděním přísných matematických kontrol, aby bylo zajištěno, že kompilátor je v souladu se záměrem programátora, se Leo snaží snížit riziko neodhalených chyb nebo potenciálních zranitelností, zejména v kontextech L2, ZK rollupech nebo soukromých programech na platformě Leo.


Circom od iden3

Circom, DSL vytvořený speciálně pro vývoj obvodů ZK, je výsledkem společného úsilí mezi Jordi Baylinou a týmem iden3. Překladač Circom je napsán v jazyce Rust a jeho hlavním úkolem je kompilovat obvody napsané v jazyce Circom. Je pozoruhodné, že Circom se stal volbou pro vynikající aplikace ZK v reálném světě, jako je Dark Forest a Tornado Cash. Jeho popularita je způsobena jeho vynikajícím výkonem, včetně rychlého ověření prohlížeče prostřednictvím optimalizovaných nátisků WASM, efektivních nátisků na straně serveru prostřednictvím rapidsnark a efektivního ověření v řetězci.

Je však důležité si uvědomit, že funkčnost Circomu je primárně zaměřena na vývoj obvodů ZK, což může způsobit, že bude méně vhodný pro zvládání širšího spektra výpočetních úloh. Vývojáři, kteří hledají více funkcí, které mohou vyhovět širšímu spektru vývojových potřeb, mohou shledat možnosti Circomu poněkud omezené. V tomto případě mohou vývojáři potřebovat zkombinovat další programovací jazyky nebo rámce, aby splnili širší vývojové potřeby.

Obrázek přes Circom

Kompatibilita Circomu se zaměřuje na široce používané systémy ZKP, jako jsou snarkjs a libsnark. I když tato kompatibilita zajišťuje bezproblémovou integraci s těmito široce používanými systémy, znamená to také, že obvody Circom zdědí specifické schopnosti a omezení spojená s těmito závislostmi. Ti vývojáři, kteří preferují nebo potřebují alternativní systém ZKP, mohou čelit problémům s kompatibilitou nebo potřebují investovat další práci do adaptace a integrace obvodů generovaných Circom do jejich preferovaného systému.


Lurk od Lurk Lab

Lurk je staticky vymezený dialekt Lisp ovlivněný Scheme a Common Lisp, s jedinečnou vlastností: umožňuje přímý důkaz správnosti provádění programu pomocí zk-SNARK, což umožňuje kompaktní a efektivní ověření.

Mezi hlavní použití Lurk patří:

  • Ověřitelný výpočet: Lurk vám umožňuje prokázat správnost jeho výrazů za podmínek nulových znalostí, což zvyšuje důvěru ve výsledky výpočtů.

  • Nulové znalosti: Uživatelé mohou prokázat své znalosti, aniž by prozradili konkrétní informace nad rámec veřejného vstupu, čímž si chrání soukromí.

  • Data adresovatelná podle obsahu: Každý program Lurk je vybaven jedinečným identifikátorem obsahu (CID), díky čemuž je kompatibilní s IPFS a IPLD.

  • Turingova úplnost: Lurk podporuje vytváření a dokazování libovolných výpočetních nároků.

  • Funkce vyššího řádu: Funkce Lurk mohou přijímat a vracet funkce, což umožňuje expresivní funkční programování.

  • Výpočet, který zpracovává soukromá data: Lurk umožňuje zpracovávat soukromá data a zároveň zajišťuje prokazatelně správný výstup bez ohrožení soukromí.

Lurk plně využívá Lispův „nevýhodný“ alokátor paměti při sestavování obvodů pro všeobecné použití. Tento alokátor kombinuje výrazy a generuje odkazy pomocí hash. Klíčem je dokázat, že tyto dva výrazy skutečně hashují ke stejnému odkazu. Toto ověření umožňuje Lurkovi provádět výpočty v okruhu snark.

Lurk je velmi bohatý na funkce, včetně podpory pro nekonečnou rekurzi, smyčky, tok podmíněného řízení a vícenásobné backendové systémy, jako jsou Groth16 a SnarkPack+ a Nova. Tato všestrannost otevírá dveře různým aplikacím, včetně ověřovacích výpočtů, zpracování soukromých dat a spouštění Turingových kompletních programů v obvodech snark.


Shrnout

S rostoucí rozmanitostí aplikací ZK má DSL široké vyhlídky na rozvoj v oblasti ZK. Klíčem k úspěšnému DSL je vybudování prosperující komunity a bohatých knihoven, které obohatí vývojářskou zkušenost. DSL, které upřednostňují kompatibilitu se stávajícími knihovnami, mohou využít znalosti a zdroje širší vývojářské komunity. Tento přístup usnadňuje hladší integraci, urychluje vývoj a poskytuje větší flexibilitu při implementaci aplikací ZK. Toto společné úsilí je zásadní pro podporu robustnějšího ekosystému kolem DSL, poskytuje hmatatelné výhody vývojářům a bude dále podporovat přijetí a efektivitu technologie ZK.