the noname language, a toy DSL for zkapps posted September 2022
I've been spending a few weekends working on a DSL for writing zero-knowledge programs. It's been a fun project that's taught me a LOT about programming languages and their designs. I've always thought that it'd be boring to write a programming language, but my years of frustrations with languages X and Y, and my love for features Z and T of L, have made me really appreciate tweaking my own little language to my preferences. I can do whatever I want!
It's called "noname" because I really didn't know what name to give it, and I still haven't found a good one. You can play with it here: https://github.com/mimoo/noname, it is still quite bare bone but I'm amazed at what it can already do :D
It is very close to Rust, with some ideas from Golang that I liked. For example, I do not implement too much inference because it decreases readability, I force the user to qualify each library calls, I forbid shadowing within a function, etc.
Programs look like this:
use std::crypto;
fn main(pub public_input: Field, private_input: [Field; 2]) {
let x = private_input[0] + private_input[1];
assert_eq(x, 2);
let digest = crypto::poseidon(private_input);
assert_eq(digest[0], public_input);
}
and you can use the CLI to write your own programs, and generate proofs (and verify them). Underneath the kimchi proof system is used.
But the really cool feature is how transparent it is for developers! If you run the following command with the --debug
option for example:
$ cargo run -- --path data/for_loop.no --private-inputs '{"private_input": ["2", "3", "4"]}' --public-inputs '{"public_input": ["9"]}' --debug
you will get a nice output teaching you about the layout of the compiled circuits:
as well as how the wiring is done:
I spent some time explaining on my twitter how to read this output: https://twitter.com/cryptodavidw/status/1566014420907462656
I think there's a lot of educational benefit from this approach. Perhaps I should make a video going over a few circuits :)
Comments
leave a comment...