I’ve just released a new version of AirAssembly (v0.2). Notable changes include:
- A single AirAssembly module can now contain AIR for many computations. This will enable “library” modules which will export different types of computations (e.g. hash functions, signature verification etc.).
- It is now possible to define module-level functions to encapsulate common algebraic expressions. This makes code much more compact.
- AirAssembly specs now include initial support for “long-range” constraints - thought, the compiler/runtime doesn’t handle them yet.
Here is how AirAssembly module for MiMC computation looks like now:
(module
(field prime 4194304001)
(const $alpha scalar 3)
(function $mimcRound
(result vector 1)
(param $state vector 1) (param $roundKey scalar)
(add
(exp (load.param $state) (load.const $alpha))
(load.param $roundKey)))
(export mimc
(registers 1) (constraints 1) (steps 1024)
(static
(cycle (prng sha256 0x4d694d43 64)))
(init
(param $seed vector 1)
(load.param $seed))
(transition
(call $mimcRound (load.trace 0) (get (load.static 0) 0)))
(evaluation
(sub
(load.trace 1)
(call $mimcRound (load.trace 0) (get (load.static 0) 0))))))
genSTARK has also been updated to work with AirAssembly back-end, though, the changes haven’t been merged to the master yet (if anyone is curious, they are in this PR).
As always, any thoughts/feedback is welcome.