[ZK04] Y.... ¿en qué se programa Zero-Knowledge Proofs (ZKPs)?

Buena duda my fellow padawans!

Cada vez hay más lenguajes espeficios de programacion (DSLs - domain specific languages) para escribir ZKPs, aqui abajo es my opinionated-view de como clasificarlos:

  • Circom: el OG en este mundo de ZK (6 años). Es el que tiene el toolchain mas maduro y probablemente del que existen mas aplicaciones y documentacion, pero es más dificil de aprender en comparacion a los más nuevos. Se parece un poco como a "escribir en ensamblador" ya que tenés que entender a más bajo nivel que estás haciendo con los circuitos. Por lo mismo permite muchas optimizaciones y es genial para temas de PRIVACIDAD. Por debajo son SNARKs (+performance local + documentation / --easyness - scalability)

  • Cairo: surprise!!! cada vez que escribes en Cairo estas haciendo programas verificables en el Cairo virtual machine que esta encima de STARKs. Es una ventaja que es Rust-like, sinembargo tiene sus diferencias. Cairo no esta enfocada para aplicaciones de privacidad (no local generation AFAIK) pero si es para aplicaciones de computacion verificable y escalabilidad. Por debajo todos son STARKs. Creado por Starkware (un L2) (+verificabilidad +performance en servers + escalabilidad / -tooling -easnyness)

  • Noir: es Rust-like, veo que esta creciendo en popularidad porque se puede utilizar en el ecosistema de Ethereum (EVM compatible) PERO sigue estando detras de Circom. Un buen balance entre performance (not-great but improving) y auditabilidad / easyness of use. Es creado por Aztec (un L2). Enfocado mucho mas en privacidad que otra cosa. (+privacidad ++easyness / -performance -adoption)

  • O1JS: esto es puro Typescript! No es un DSL como tal sino un library para programar en ZK. Hasta el momento, solo sirve para hacer ZKPs sin blockchain (offchain) o en el blockchain de Mina (otro L1, de donde viene O1 Labs). Es base PLONK entonces son SNARKs. (++easyness + dev tooling / -performance -interoperabilidad)

  • Halo2: muy enfocado en performance y escalabilidad, aunque se puede personalizar para privadidad. El primer gran ZK-system en production utilizado en ZCash (L1 bitcoin-like). Muy complicado de aprender pero excelente para performance y fine-tunning. Mas usado en servers entonces tampoco para privacidad. (+ performance +flexible / -muy abierto --complejo)

Hay otros como Zokrates, Leo, Lurk, Zinc que no menciono... 𝘆 𝗽𝗼𝗿 𝘀𝘂𝗽𝘂𝗲𝘀𝘁𝗼 𝘇𝗸𝗩𝗠𝘀! (𝗹𝗼 𝗰𝘂𝗮𝗹 𝘃𝗲𝗿𝗲𝗺𝗼𝘀 𝗲𝗻 𝗼𝘁𝗿𝗼𝘀 𝗺𝗼𝗺𝗲𝗻𝘁𝗼𝘀 𝘆𝗮 𝗾𝘂𝗲 𝗰𝗼𝗻 𝗥𝘂𝘀𝘁, 𝗖++ 𝗽𝗼𝗱𝗲𝘀 𝗵𝗮𝗰𝗲𝗿 𝗱𝗲 𝘁𝗼𝗱𝗼!)

Notas nerds, cuando hablo de "front end" es como el look and feel del lenguaje, y el backend es propiamente a lo que se compila y corre como proving system.

  • Circom es el "front end", el "backend" es tipicamente Groth16 y PLONK.

  • Cairo es el "front end", el "backend" es tipicamente Stone+SHARP (pronto STWO)

  • Noir es el "front end", el "backend" es tipicamente Groth16, PLONK, Barretenbug, Honk (ACIR compatible)

  • O1JS es el "front end", el "backend"

  • Halo2 es el "front end" y el "backend" pero hay formas de cambiar el front end con cosas como Chiquito y asi usar Python

Recursos:

Subscribe to andyguzman.eth
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.