Achronyme 0.1.2 publicado: la verificacion separada conserva errores operativos y salida JSON global arrow_right_alt

Configuración del Proyecto

Referencia del manifiesto de proyecto achronyme.toml.

Cada proyecto de Achronyme puede tener un archivo achronyme.toml en su raíz. Este archivo configura valores por defecto para los comandos del CLI, eliminando la necesidad de pasar banderas repetidamente.

Inicio rápido

ach init mi-circuito
cd mi-circuito
ach run              # lee entry desde achronyme.toml

Resolución de configuración

El CLI busca achronyme.toml caminando hacia arriba desde el directorio del archivo de entrada (o el directorio de trabajo actual si no se especifica un archivo). Usa la primera coincidencia.

Los valores se resuelven con esta precedencia:

Banderas CLI (explícitas)  >  achronyme.toml  >  valores por defecto

Usa --no-config para deshabilitar la carga de achronyme.toml por completo.

Esquema completo

[project] — Metadatos del proyecto

[project]
name = "mi-circuito"          # Requerido. Debe coincidir con [a-zA-Z_][a-zA-Z0-9_-]*
version = "0.1.0"             # Requerido. Versionado semántico (MAJOR.MINOR.PATCH)
description = "Un circuito ZK"  # Opcional
license = "MIT"               # Opcional. Identificador SPDX
authors = ["Alice <a@b.com>"] # Opcional
entry = "src/main.ach"        # Opcional. Archivo de entrada por defecto para run/compile/circuit/disassemble

Cuando entry está configurado, puedes omitir la ruta del archivo en los comandos del CLI:

# En lugar de:
ach run src/main.ach

# Simplemente:
ach run

[build] — Configuración de compilación

[build]
backend = "r1cs"          # "r1cs" (por defecto) o "plonkish"
optimize = true           # Habilitar pases de optimización del IR (por defecto: true)
error_format = "human"    # "human" (por defecto), "json", o "short"
CampoEquivalente CLIPor defecto
backend--backend, --prove-backend"r1cs"
optimize--no-optimize (invertido)true
error_format--error-format"human"

[build.output] — Rutas de salida

[build.output]
r1cs = "build/circuit.r1cs"      # Ruta por defecto para .r1cs
wtns = "build/witness.wtns"      # Ruta por defecto para .wtns
binary = "build/{name}.achb"     # Ruta por defecto para .achb ({name} = project.name)
solidity = ""                    # Si no vacío, genera el verificador Solidity
plonkish_json = ""               # Si no vacío, exporta JSON Plonkish

La variable {name} se reemplaza con project.name.

[vm] — Configuración de la máquina virtual

[vm]
prove_backend = "r1cs"
max_heap = "256M"
stress_gc = false
gc_stats = false

# Las capacidades del host se deniegan salvo que se concedan explicitamente.
allow_read = ["datos"]
allow_write = ["salida"]
allow_connect = ["127.0.0.1:9000"]
allow_listen = []

# Limites de concurrencia estructurada y E/S acotada.
max_tasks = 64
max_resources = 32
max_task_scopes = 16
max_pending_native_requests = 32
max_retained_task_results = 64
max_channels = 32
max_channel_operations = 128
blocking_workers = 4
blocking_queue_capacity = 64
CampoEquivalente CLIPor defecto
prove_backend--prove-backend"r1cs"
max_heap--max-heapilimitado
stress_gc--stress-gcfalse
gc_stats--gc-statsfalse
allow_read--allow-read repetible[]
allow_write--allow-write repetible[]
allow_connect--allow-connect repetible[]
allow_listen--allow-listen repetible[]
max_tasks--max-tasks65535
max_resources--max-resources65535
max_task_scopes--max-task-scopes1024
max_pending_native_requests--max-pending-native-requests4096
max_retained_task_results--max-retained-task-results4096
max_channels--max-channels4096
max_channel_operations--max-channel-operations65535
blocking_workers--blocking-workers4
blocking_queue_capacity--blocking-queue-capacity64

Las rutas relativas de allow_read y allow_write se resuelven desde la raíz del proyecto. Si pasas al menos una bandera repetible de capacidad en el CLI, esa lista reemplaza la del manifiesto durante la invocación. Los permisos de red aceptan endpoints numéricos IP:PORT; no implican resolución de hostnames.

[proving] — Confianza de las claves de prueba

La generación de pruebas falla de forma cerrada por defecto. Elige exactamente una fuente de claves cuando un programa deba crear una prueba:

[proving]
# Produccion: carga artefactos derivados de una ceremonia desde este directorio.
trusted_key_dir = "ceremony/keys"

# Solo desarrollo; no combinar con trusted_key_dir.
# insecure_dev_setup = true
CampoEquivalente CLIPor defecto
trusted_key_dir--trusted-key-dir <DIR>no configurado
insecure_dev_setup--insecure-dev-setupfalse

trusted_key_dir e insecure_dev_setup = true son mutuamente excluyentes. Las banderas de confianza del CLI tienen precedencia sobre el manifiesto. Sin ninguna fuente configurada, la ejecución puede compilar circuitos y verificar artefactos separados, pero cualquier intento de generar una clave de prueba falla en vez de crear silenciosamente un setup local inseguro.

[circuit] — Configuración del circuito

[circuit]
prime = "bn254"      # Campo primo: "bn254" (por defecto), "bls12-381", o "goldilocks"

El campo prime es el equivalente en el manifiesto de la bandera global --prime. Si --prime se pasa explícitamente en el CLI, sobrescribe este valor.

Las entradas públicas y testigo no se configuran aquí — provienen de las declaraciones public y witness en el código fuente (o de las banderas CLI --public / --witness). Esta sección se valida con deny_unknown_fields, por lo que cualquier otra clave (como public o witness) se rechaza con un error duro.

[circom] — Rutas de búsqueda de bibliotecas Circom

[circom]
libs = ["vendor/circomlib/circuits", "third_party/circuits"]

Las rutas se resuelven relativas a la raíz del proyecto (el directorio que contiene achronyme.toml). Cada subcomando que parsea fuentes .circomach circom, ach run, ach circuit — buscará en cada entrada de libs al resolver directivas include "file.circom";.

Las banderas CLI -l/--lib se suman a la lista TOML en lugar de reemplazarla, por lo que ach circom -l extra/ extiende libs para una invocación puntual sin editar el manifiesto.

# Con libs = ["vendor/circomlib/circuits"] en achronyme.toml:
ach circom circuit.circom                      # solo se busca en vendor/
ach circom circuit.circom -l extra/circuits    # se busca en vendor/ y en extra/

Usa esta sección para versionar dónde viven tus dependencias de circom en lugar de dispersar banderas -l por scripts.

Ejemplo mínimo

[project]
name = "multiplicar"
version = "0.1.0"

[build]
backend = "r1cs"

Ejemplo completo

[project]
name = "merkle-prover"
version = "0.2.0"
description = "Circuito de prueba de membresía en árbol Merkle"
license = "MIT"
entry = "src/main.ach"

[build]
backend = "r1cs"
optimize = true
error_format = "human"

[build.output]
r1cs = "build/circuit.r1cs"
wtns = "build/witness.wtns"
solidity = "build/Verifier.sol"

[vm]
prove_backend = "r1cs"
max_heap = "512M"
allow_read = ["datos"]
allow_write = ["build"]
max_tasks = 64
max_resources = 32
max_channels = 16
max_channel_operations = 64

[proving]
trusted_key_dir = "ceremony/keys"

Validación

El CLI valida el archivo TOML al cargarlo:

  • project.name debe coincidir con [a-zA-Z_][a-zA-Z0-9_-]*
  • project.version debe ser semver válido (MAJOR.MINOR.PATCH)
  • build.backend debe ser "r1cs" o "plonkish"
  • build.error_format debe ser "human", "json", o "short"
  • vm.prove_backend debe ser "r1cs" o "plonkish"
  • vm.max_heap debe ser una cadena de tamaño válida si no está vacía
  • proving.insecure_dev_setup y proving.trusted_key_dir no pueden configurarse a la vez
  • proving.trusted_key_dir no puede estar vacío
  • circuit.prime debe ser "bn254", "bls12-381", o "goldilocks"
  • project.entry debe terminar en .ach o .achb
  • Las entradas circom.libs deben existir (resueltas en tiempo de carga, relativas a la raíz del proyecto)
  • Los campos desconocidos son rechazados (compatibilidad futura vía secciones explícitas)
Navigation