Hello World
Let's write a minimal VM and generate proofs!
machine HelloWorld with degree: 8 {
reg pc[@pc];
reg X[<=];
reg Y[<=];
reg A;
instr incr X -> Y {
Y = X + 1
}
instr decr X -> Y {
Y = X - 1
}
instr assert_zero X {
X = 0
}
function main {
// assign the first prover input to A
A <=X= ${ std::prelude::Query::Input(0, 1) };
// increment A
A <== incr(A);
// decrement A
A <== decr(A);
// assert that A is zero
assert_zero A;
return;
}
}
Let's go through different possible usages of powdr, starting with using the powdr CLI.