Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for ZoKrates with curly brackets (wip) #211

Merged
merged 28 commits into from
Feb 12, 2025
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
26f3e65
Add boilerplate code for a new Zokrates frontend (curcly brackets)
StefanosChaliasos Oct 30, 2024
bb5f2c5
Update the Zokrates standard library and pest to the newer version (c…
StefanosChaliasos Oct 30, 2024
a13a18e
Update tests and examples for ZoKratesCurly
StefanosChaliasos Oct 30, 2024
ce9ddbf
Implement the ZSharpCurlyFE
StefanosChaliasos Oct 30, 2024
95e58e3
Apply fmt
StefanosChaliasos Oct 30, 2024
cdbc804
Add zcxi in Cargo.toml
StefanosChaliasos Oct 30, 2024
1121700
Fix linting errors
StefanosChaliasos Oct 30, 2024
33f0075
Correctly implement tuple for zsharpcurly
StefanosChaliasos Nov 7, 2024
11aba74
Update error message for MPC support
StefanosChaliasos Nov 7, 2024
3309a0d
Apply fmt
StefanosChaliasos Nov 7, 2024
b2c08da
Remove commented out code
StefanosChaliasos Nov 7, 2024
9981366
Fix linting error
StefanosChaliasos Nov 7, 2024
36497e1
Fix script for processing zcx tests
StefanosChaliasos Dec 13, 2024
79e1d94
Handle assembly assignments and constraints
StefanosChaliasos Dec 13, 2024
788fb51
Remove deprecated comment
StefanosChaliasos Dec 13, 2024
7f284b6
Add support for AssignConstrain (<==)
StefanosChaliasos Dec 13, 2024
2629341
Remove print stmts
StefanosChaliasos Dec 13, 2024
3a32dcb
Add support for field_to_bool_unsafe
StefanosChaliasos Jan 21, 2025
f442e2b
Uncomment tests and fmt changes
StefanosChaliasos Jan 21, 2025
8ece447
Fix field_to_bool_unsafe and some linting errors
StefanosChaliasos Jan 23, 2025
94db4be
Fix type alias issue in type checking
StefanosChaliasos Jan 23, 2025
2704df6
Apply fmt
StefanosChaliasos Jan 23, 2025
51b8bf2
Fix linting errors
StefanosChaliasos Jan 23, 2025
d4a1644
Fix linting errors
StefanosChaliasos Jan 23, 2025
354d0fe
fmt changes
StefanosChaliasos Jan 23, 2025
78499d9
README: rm circom, add pointer to old implementation
alex-ozdemir Feb 6, 2025
7836f55
Fix the build (#221)
alex-ozdemir Feb 10, 2025
0ffdcb5
Extend input declarations in Z# to support structs (#219)
lorenzorota Feb 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
212 changes: 152 additions & 60 deletions Cargo.lock

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@ required-features = ["bellman", "poly"]
name = "zxi"
required-features = ["smt", "zok"]

[[example]]
name = "zcxi"
required-features = ["smt", "zokc"]

[[example]]
name = "zxc"
required-features = ["smt", "zok"]
Expand Down
1 change: 1 addition & 0 deletions driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"r1cs",
"smt",
"zok",
"zokc",
"datalog",
"bellman",
"spartan",
Expand Down
5 changes: 3 additions & 2 deletions examples/ZoKratesCurly/mpc/unit_tests/2pc_millionaires.zok
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> bool:
return a < b
def main(private u32 a, private u32 b) -> bool {
return a < b;
}
16 changes: 8 additions & 8 deletions examples/ZoKratesCurly/mpc/unit_tests/2pc_structs.zok
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
struct Pt {
u32 x
u32 y
u32 x;
u32 y;
}

def main(private<1> u32 a, private<2> u32 b) -> u32:
Pt c = Pt {x: 0, y: 1}
c.x = a
c.y = b
return c.y + c.x

def main(private u32 a, private u32 b) -> u32 {
Pt c = Pt {x: 0, y: 1};
c.x = a;
c.y = b;
return c.y + c.x;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> u32:
return a + b
def main(private u32 a, private u32 b) -> u32 {
return a + b;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> bool:
return a == b
def main(private u32 a, private u32 b) -> bool {
return a == b;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> bool:
return a >= b
def main(private u32 a, private u32 b) -> bool {
return a >= b;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> bool:
return a > b
def main(private u32 a, private u32 b) -> bool {
return a > b;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> bool:
return a <= b
def main(private u32 a, private u32 b) -> bool {
return a <= b;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> bool:
return a < b
def main(private u32 a, private u32 b) -> bool {
return a < b;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> u32:
return a * b
def main(private u32 a, private u32 b) -> u32 {
return a * b;
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@

def main(private<1> u32 a, private<2> u32 b, public u32 v) -> u32:
return a * b + v
def main(private u32 a, private u32 b, u32 v) -> u32 {
return a * b + v;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> u32:
return a - b
def main(private u32 a, private u32 b) -> u32 {
return a - b;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> u32[2]:
return [a, b]
def main(private u32 a, private u32 b) -> u32[2] {
return [a, b];
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
def main(private<1> u32 a, private<2> u32 b) -> u32:
u32[2] c = [a, b]
return c[0] + c[1]
def main(private u32 a, private u32 b) -> u32 {
u32[2] c = [a, b];
return c[0] + c[1];
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> u32:
return a & b
def main(private u32 a, private u32 b) -> u32 {
return a & b;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> u32:
return a | b
def main(private u32 a, private u32 b) -> u32 {
return a | b;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b) -> u32:
return a ^ b
def main(private u32 a, private u32 b) -> u32 {
return a ^ b;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> bool a, private<2> bool b) -> bool:
return a && b
def main(private bool a, private bool b) -> bool {
return a && b;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> bool a, private<2> bool b) -> bool:
return a == b
def main(private bool a, private bool b) -> bool {
return a == b;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> bool a, private<2> bool b) -> bool:
return a || b
def main(private bool a, private bool b) -> bool {
return a || b;
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
def main(private<1> u32 a, private<2> u32 b) -> u32:
u32 c = 0x00000001
return a + b + c
def main(private u32 a, private u32 b) -> u32 {
u32 c = 1;
return a + b + c;
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
def main(private<1> bool a, private<2> bool b) -> bool:
bool c = true
return a == c
def main(private bool a, private bool b) -> bool {
bool c = true;
return a == c;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
def add(u32 a, u32 b) -> u32:
return a + b
def add(u32 a, u32 b) -> u32 {
return a + b;
}

def main(private<1> u32 a, private<2> u32 b) -> u32:
return add(a, b) + add(a, b)
def main(private u32 a, private u32 b) -> u32 {
return add(a, b) + add(a, b);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
def sub(u32 b, u32 a) -> u32:
return a - b
def sub(u32 b, u32 a) -> u32 {
return a - b;
}

def main(private<1> u32 a, private<2> u32 b) -> u32:
return sub(b, a)
def main(private u32 a, private u32 b) -> u32 {
return sub(b, a);
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b, public bool sel) -> u32:
return if sel then a else b fi
def main(private u32 a, private u32 b, public bool sel) -> u32 {
return if sel { a } else { b };
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> bool a, private<2> bool b, public bool sel) -> bool:
return if sel then a else b fi
def main(private bool a, private bool b, public bool sel) -> bool {
return if sel { a } else { b };
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b, public bool sel) -> u32:
return if sel then a else b fi
def main(private u32 a, private u32 b, public bool sel) -> u32 {
return if sel { a } else { b };
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
def main(private<1> u32 a, private<2> u32 b) -> u32:
for u32 i in 0..4 do
a = a + b
endfor
return a

def main(private u32 a, private u32 b) -> u32 {
for u32 i in 0..4 {
a = a + b;
}
return a;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
def main(private<1> u32 a, private<2> u32 b) -> u32:
u32 res = 0x00000000
for u32 i in 0..5 do
res = res + i
endfor
return res
def main(private u32 a, private u32 b) -> u32 {
u32 mut res = 0x00000000;
for u32 i in 0..5 {
res = res + i;
}
return res;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> u32 a, private<2> u32 b, private<2> u32 c) -> u32:
return a + b + c
def main(private u32 a, private u32 b, private u32 c) -> u32 {
return a + b + c;
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private<1> bool a, private<2> bool b, private<2> bool c) -> bool:
return a && b && c
def main(private bool a, private bool b, private bool c) -> bool {
return a && b && c;
}
7 changes: 4 additions & 3 deletions examples/ZoKratesCurly/mpc/unit_tests/shift_tests/2pc_lhs.zok
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
def main(private<1> u32 a, private<2> u32 b) -> u32:
u32 c = 0x00000001
return a << c
def main(private u32 a, private u32 b) -> u32 {
u32 c = 0x00000001;
return a << c;
}
7 changes: 4 additions & 3 deletions examples/ZoKratesCurly/mpc/unit_tests/shift_tests/2pc_rhs.zok
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
def main(private<1> u32 a, private<2> u32 b) -> u32:
u32 c = 0x00000001
return a >> c
def main(private u32 a, private u32 b) -> u32 {
u32 c = 0x00000001;
return a >> c;
}
5 changes: 3 additions & 2 deletions examples/ZoKratesCurly/opt/3_plus_opt.zok
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private u8 x) -> u8:
return x + x + x
def main(private u8 x) -> u8 {
return x + x + x;
}
5 changes: 3 additions & 2 deletions examples/ZoKratesCurly/opt/id_opt.zok
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private u8 x) -> u8:
return x
def main(private u8 x) -> u8 {
return x;
}
20 changes: 11 additions & 9 deletions examples/ZoKratesCurly/opt/log.zok
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
def u8log2(u8 x) -> u8:
u8 acc = 0x00
for field i in 0..8 do
acc = acc + if x != 0x00 then 0x01 else 0x00 fi
x = x >> 1
endfor
return acc
def u8log2(u8 x) -> u8 {
u8 mut acc = 0x00;
for field i in 0..8 {
acc = acc + if x != 0x00 { 0x01 } else { 0x00 };
x = x >> 1;
}
return acc;
}

def main(private u8 x) -> u8:
return x + u8log2(x)
def main(private u8 x) -> u8 {
return x + u8log2(x);
}
20 changes: 11 additions & 9 deletions examples/ZoKratesCurly/opt/log16.zok
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
def u16log2(u16 x) -> u16:
u16 acc = 0x0000
for field i in 0..16 do
acc = acc + if x != 0x0000 then 0x0001 else 0x0000 fi
x = x >> 1
endfor
return acc
def u16log2(x: u16) -> u16 {
u16 mut acc = 0x0000;
for field i in 0..16 {
acc = acc + if x != 0x0000 { 0x0001 } else { 0x0000 };
x = x >> 1;
}
return acc;
}

def main(private u16 x) -> u16:
return x + u16log2(x)
def main(private x: u16) -> u16 {
return x + u16log2(x);
}
5 changes: 3 additions & 2 deletions examples/ZoKratesCurly/opt/mult_opt.zok
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private u8 x, private u8 y) -> u8:
return x * y
def main(private u8 x, private u8 y) -> u8 {
return x * y;
}
5 changes: 3 additions & 2 deletions examples/ZoKratesCurly/opt/plus_3_opt.zok
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private u8 x) -> u8:
return 0x03 + x
def main(private u8 x) -> u8 {
return 0x03 + x;
}
5 changes: 3 additions & 2 deletions examples/ZoKratesCurly/opt/times_2_opt.zok
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
def main(private u8 x) -> u8:
return 0x02 * x
def main(private u8 x) -> u8 {
return 0x02 * x;
}
Loading
Loading