Escribe codigo. Genera pruebas.
Un DSL de zero-knowledge con doble ejecucion — ejecuta tu codigo en una VM completa o compilalo a circuitos aritmeticos. Misma sintaxis, dos objetivos.
Por que Achronyme
Otras herramientas ZK te obligan a elegir entre expresividad y eficiencia. Achronyme te da ambas.
Doble Ejecucion
Un lenguaje, dos objetivos. Escribe closures, recursion y colecciones con GC en modo VM. La misma sintaxis compila a circuitos R1CS o Plonkish. Sin lenguaje de circuitos separado.
Pruebas First-Class
Los bloques prove {} retornan objetos de prueba reales. Encadenalos, extrae componentes con proof_json(), verifica con verify_proof(). Las pruebas son valores, no artefactos de CLI.
Provers Nativos
Groth16 y PlonK corren en proceso — un solo binario Rust, cero dependencias externas. Sin Node.js, sin ceremonia snarkjs, sin flujo CLI de 5 pasos.
Seguridad en Compilacion
Los circuitos sub-restringidos son bugs catastróficos en ZK. El analisis de taint de Achronyme detecta variables witness sin probar antes de generar una sola prueba.
Verificacion On-Chain
Exporta archivos .r1cs y .wtns para snarkjs. Genera contratos verificadores en Solidity con --solidity y verifica pruebas directamente en Ethereum.
Circuitos Optimizados
La propagacion booleana rastrea variables probadamente booleanas y omite restricciones redundantes. El constant folding y la eliminacion de codigo muerto reducen circuitos automaticamente.
La diferencia
Probar un compromiso Poseidon: Circom + snarkjs vs Achronyme.
// 1. Write the circuit (Circom DSL)
template Commitment() {
signal input secret;
signal input blinding;
signal output cm;
component h = Poseidon(2);
h.inputs[0] <== secret;
h.inputs[1] <== blinding;
cm <== h.out;
}
// 2. Compile to R1CS
$ circom commitment.circom --r1cs --wasm
// 3. Write witness generator (JavaScript)
const input = { secret: "12345", blinding: "98765" };
const w = await circuit.calculateWitness(input);
// 4. Download Powers of Tau
$ wget ptau.hermez.io/powersOfTau28_12.ptau
// 5. Trusted setup ceremony
$ snarkjs groth16 setup commitment.r1cs pot.ptau key.zkey
$ snarkjs zkey contribute key.zkey final.zkey
// 6. Generate proof
$ snarkjs groth16 prove final.zkey witness.wtns proof.json
// 7. Verify
$ snarkjs groth16 verify vkey.json public.json proof.json let secret = 0p12345
let blinding = 0p98765
prove {
witness secret
witness blinding
public commitment
let cm = poseidon(secret, blinding)
assert_eq(cm, commitment)
}
// ✓ Proof generated + verified (Groth16) Velo en accion
Desde programas simples hasta pruebas zero-knowledge — todo en un solo lenguaje.
// Secret voting — eligibility + privacy + anti-double-vote
public merkle_root
public nullifier
public vote
public election_id
witness secret
witness path[2]
witness indices[2]: Bool
// 1. Voter commitment (hidden)
let commitment = poseidon(secret, 0)
// 2. Prove voter is in the registry
merkle_verify(merkle_root, commitment, path, indices)
// 3. Nullifier prevents double-voting
let expected = poseidon(secret, election_id)
assert_eq(expected, nullifier)
// 4. Vote must be 0 or 1
range_check(vote, 1)
// ~2,179 constraints — ready for on-chain verification