Introducción
Achronyme es un lenguaje de programación para circuitos de conocimiento cero.
Escribe código legible. Decide qué se demuestra. El mismo lenguaje para ejecución general y compilación de circuitos ZK.
Vistazo Rápido
Sección titulada «Vistazo Rápido»Ejecución de propósito general
Sección titulada «Ejecución de propósito general»let make_counter = fn(init) { mut n = init return fn() { n = n + 1; return n }}let c = make_counter(0)print(c()) // 1print(c()) // 2Circuito ZK
Sección titulada «Circuito ZK»circuit merkle_proof(root: Public, leaf: Witness, path: Witness[3], indices: Witness[3]) { merkle_verify(root, leaf, path, indices)} ach circuit merkle.ach --inputs "root=...,leaf=42,path_0=...,path_1=...,path_2=...,indices_0=0,indices_1=1,indices_2=0"# → circuit.r1cs + witness.wtns (compatible con snarkjs)Generación de pruebas en línea
Sección titulada «Generación de pruebas en línea»let secret = 0p42let hash = 0p17159... // poseidon(42, 0)
let p = prove(hash: Public) { assert_eq(poseidon(secret, 0), hash)}
print(proof_json(p)) // Prueba Groth16, verificable on-chainCómo Funciona
Sección titulada «Cómo Funciona»Achronyme tiene dos modos de ejecución desde el mismo código fuente:
Modo VM (ach run) — Lenguaje completo: closures, recursión, GC, arrays, maps, strings, E/S. El código se ejecuta como cualquier lenguaje de scripting.
Modo circuito (ach circuit) — Compila a restricciones aritméticas sobre BN254. Sin bucles en tiempo de ejecución, sin E/S — todo se desenrolla y aplana en un sistema de restricciones para pruebas de conocimiento cero.
El bloque prove {} conecta ambos: se ejecuta dentro de la VM, compila su cuerpo como un circuito, genera un testigo a partir de variables capturadas y produce una prueba criptográfica — todo en una sola expresión.
Fuente (.ach) │ ├─► Parser (PEG) → AST │ │ │ ├─► Bytecode → VM (modo ejecución) │ │ │ └─► SSA IR → Optimizar │ │ │ ┌───┴───┐ │ ▼ ▼ │ R1CS Plonkish │ (Groth16) (KZG-PlonK) │ │ │ │ ▼ ▼ │ .r1cs Gates/Lookups │ .wtns Copy constraints │ │ │ │ └───┬───┘ │ ▼ │ Prueba nativa │ └─► prove { } → compilar + testigo + verificar + prueba (en línea)- 2,543 pruebas unitarias + 162 pruebas E2E de integración
- Cross-validado contra snarkjs (verificación independiente de constraints)
- 2 backends ZK: R1CS/Groth16 + Plonkish/KZG-PlonK
- Generación de pruebas nativa en proceso (sin herramientas externas)
- Exportación binaria compatible con snarkjs (interoperabilidad Groth16 verificada)
- 6 auditorías de seguridad resueltas
- Hash Poseidon compatible con circomlibjs (30% menos constraints que Circom)