Ir al contenido

Funciones Nativas

Achronyme proporciona 16 funciones globales: 14 integradas en el núcleo de la VM, más 2 de la biblioteca estándar (achronyme-std). Todas están disponibles como globales — no necesitan importarse. Algunas también están disponibles en modo circuito.

Imprime todos los argumentos separados por espacios, seguidos de un salto de línea. Devuelve nil.

print("hello", 42, true) // hello 42 true

Modo: Solo VM

Devuelve una cadena que describe el tipo del valor: "Number", "String", "Bool", "Nil", "List", "Map", "Field", "BigInt256", "BigInt512", "Proof", "Function", "Native".

typeof(42) // "Number"
typeof("hi") // "String"
typeof(true) // "Bool"

Modo: Solo VM

Afirma que la condición es verdadera. Devuelve nil en caso de éxito, genera AssertionFailed en caso de fallo.

assert(1 + 1 == 2) // ok
assert(false) // error: AssertionFailed

Modo: Ambos (en circuitos, emite 2 restricciones: verificación booleana + forzar = 1)

Devuelve la hora actual en milisegundos desde la época Unix.

let t = time()
print(t) // 1740700800000

Modo: Solo VM

Devuelve un mapa con estadísticas del recolector de basura. Ver Estadísticas del GC para más detalles.

let stats = gc_stats()
print(stats["collections"]) // número de ciclos de GC
print(stats["bytes_freed"]) // bytes recuperados acumulados
print(stats["peak_bytes"]) // tamaño máximo del heap alcanzado
print(stats["gc_time_ms"]) // ms acumulados en GC
print(stats["bytes_allocated"]) // tamaño actual del heap

Modo: Solo VM

Estas funciones extraen componentes de un ProofObject devuelto por prove {}.

Devuelve la prueba Groth16 como una cadena JSON.

let p = prove { ... }
print(proof_json(p)) // {"pi_a": [...], "pi_b": [...], ...}

Modo: Solo VM

Devuelve las entradas públicas como una cadena JSON.

print(proof_public(p)) // ["21888...", "17159..."]

Modo: Solo VM

Devuelve la clave de verificación como una cadena JSON.

print(proof_vkey(p)) // {"protocol": "groth16", "curve": "bn128", ...}

Modo: Solo VM

Calcula el hash Poseidon 2-a-1 sobre BN254. Ambos argumentos pueden ser enteros o elementos de campo.

let h = poseidon(1, 2)
print(h) // elemento de campo

Modo: Ambos (en circuitos, emite 361 restricciones)

Hash Poseidon con plegado izquierdo: poseidon(poseidon(a, b), c) y así sucesivamente. Requiere al menos 2 argumentos.

let h = poseidon_many(1, 2, 3, 4)
// equivalente a: poseidon(poseidon(poseidon(1, 2), 3), 4)

Modo: Ambos (en circuitos, emite 361 restricciones por par)

Verifica una prueba Groth16. Devuelve true si es válida, false en caso contrario. Requiere que un manejador de verificación esté configurado en la VM.

let p = prove { ... }
let ok = verify_proof(p)
print(ok) // true

Modo: Solo VM

Construye un entero sin signo de 256 bits desde un entero (>= 0) o cadena. Las cadenas pueden usar formato 0x (hex), 0b (binario) o decimal.

let a = bigint256(42)
let b = bigint256("0xFF")
let c = bigint256("12345")

Modo: Solo VM

Construye un entero sin signo de 512 bits. Mismos formatos de argumento que bigint256.

let a = bigint512(42)
let b = bigint512("0xFF")

Modo: Solo VM

Construye un BigInt desde una lista de enteros 0/1 (LSB primero). El ancho debe ser 256 o 512.

let val = from_bits(bigint256(42).to_bits(), 256)
assert(val == bigint256(42))

Modo: Solo VM

Parsea un string como entero. Error si el string no es un número válido.

parse_int("42") // 42
parse_int("-7") // -7

Une una lista de strings con el separador dado.

join(["a", "b", "c"], "-") // "a-b-c"
join(["hola"], " ") // "hola"
#FunciónAridadModoDevuelve
0print(...)variádicaVMnil
1typeof(x)1VMstring
2assert(x)1Ambosnil
3time()0VMint
4gc_stats()0VMmapa
5proof_json(p)1VMstring
6proof_public(p)1VMstring
7proof_vkey(p)1VMstring
8poseidon(a, b)2Ambosfield
9poseidon_many(...)variádicaAmbosfield
10verify_proof(p)1VMbool
11bigint256(x)1VMBigInt256
12bigint512(x)1VMBigInt512
13from_bits(bits, ancho)2VMBigInt
Biblioteca Estándar
14parse_int(str)1VMint
15join(lista, sep)2VMstring