.witness
.circuit
v0.1.0-beta.1 | Beta publica

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.

commitment.ach
> Prueba verificada ✓ (Groth16, 192 bytes, 0.84s)
.metrics
1,000+
Tests pasando
2
Auditorias
2
Backends de prueba
0
Deps externas
.modules
Capacidades

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.

.diff
Comparar

La diferencia

Probar un compromiso Poseidon: Circom + snarkjs vs Achronyme.

Circom + snarkjs
7 pasos, 3 herramientas, 2 lenguajes
// 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
Achronyme
6 lineas, 1 archivo, 1 comando
1
2
3
4
5
6
7
8
9
10
11
12
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)
.repl
Ejemplos

Velo en accion

Desde programas simples hasta pruebas zero-knowledge — todo en un solo lenguaje.

secret_vote.ach
ZK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 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