diff --git a/.gitignore b/.gitignore index 20fd7be..fb549bb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ /target Cargo.lock vm_run_output.log -*.bin .DS_Store *.log build/ceno +*.bin +*.json \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index ec0153f..62c1f2d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -15,9 +15,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] @@ -42,9 +42,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -55,6 +55,15 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -66,9 +75,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -81,9 +90,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -116,9 +125,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "ark-ff" @@ -177,7 +186,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -203,7 +212,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -253,7 +262,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -288,17 +297,34 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.109", +] + [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "az" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" + [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -307,7 +333,7 @@ dependencies = [ "object", "rustc-demangle", "serde", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -322,6 +348,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + [[package]] name = "bincode" version = "1.3.3" @@ -352,7 +384,7 @@ checksum = "ffebfc2d28a12b262c303cb3860ee77b91bd83b1f20f0bd2a9693008e2f55a9e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -373,9 +405,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bitvec" @@ -428,7 +460,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array", + "generic-array 0.14.9", ] [[package]] @@ -444,17 +476,48 @@ dependencies = [ "subtle", ] +[[package]] +name = "bon" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebeb9aaf9329dff6ceb65c689ca3db33dbf15f324909c60e4e5eef5701ce31b1" +dependencies = [ + "bon-macros", + "rustversion", +] + +[[package]] +name = "bon-macros" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e9d642a7e3a318e37c2c9427b5a6a48aa1ad55dcd986f3034ab2239045a645" +dependencies = [ + "darling", + "ident_case", + "prettyplease", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.109", +] + [[package]] name = "bumpalo" version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + [[package]] name = "bytecheck" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50690fb3370fb9fe3550372746084c46f2ac8c9685c583d2be10eefd89d3d1a3" +checksum = "0caa33a2c0edca0419d15ac723dff03f1956f7978329b1e3b5fdaaaed9d3ca8b" dependencies = [ "bytecheck_derive", "ptr_meta", @@ -464,20 +527,20 @@ dependencies = [ [[package]] name = "bytecheck_derive" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efb7846e0cb180355c2dec69e721edafa36919850f1a9f52ffba4ebc0393cb71" +checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] name = "bytemuck" -version = "1.23.2" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" [[package]] name = "byteorder" @@ -491,11 +554,43 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +[[package]] +name = "camino" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 1.0.69", +] + [[package]] name = "cc" -version = "1.2.35" +version = "1.2.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" +checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" dependencies = [ "find-msvc-tools", "shlex", @@ -504,7 +599,7 @@ dependencies = [ [[package]] name = "ceno-examples" version = "0.1.0" -source = "git+https://github.com/scroll-tech/ceno.git?branch=master#ec4f614c5b04a83acf70de2e84af5de61ab93fb2" +source = "git+https://github.com/scroll-tech/ceno.git?branch=feat%2Fseptic_global_chip#2d8d643565cb741f8f8565f2d590cbb6b5021abd" dependencies = [ "glob", ] @@ -527,10 +622,13 @@ dependencies = [ "multilinear_extensions", "openvm", "openvm-circuit", + "openvm-continuations", "openvm-native-circuit", "openvm-native-compiler", "openvm-native-compiler-derive", "openvm-native-recursion", + "openvm-rv32im-circuit", + "openvm-sdk", "openvm-stark-backend", "openvm-stark-sdk", "p3-air", @@ -556,18 +654,23 @@ dependencies = [ [[package]] name = "ceno_emul" version = "0.1.0" -source = "git+https://github.com/scroll-tech/ceno.git?branch=master#ec4f614c5b04a83acf70de2e84af5de61ab93fb2" +source = "git+https://github.com/scroll-tech/ceno.git?branch=feat%2Fseptic_global_chip#2d8d643565cb741f8f8565f2d590cbb6b5021abd" dependencies = [ "anyhow", "ceno_rt", + "ceno_syscall", "elf", "ff_ext", "itertools 0.13.0", "multilinear_extensions", "num-derive", "num-traits", + "rayon", "rrs-succinct", + "rustc-hash", "secp", + "serde", + "smallvec", "strum", "strum_macros", "substrate-bn", @@ -578,7 +681,7 @@ dependencies = [ [[package]] name = "ceno_host" version = "0.1.0" -source = "git+https://github.com/scroll-tech/ceno.git?branch=master#ec4f614c5b04a83acf70de2e84af5de61ab93fb2" +source = "git+https://github.com/scroll-tech/ceno.git?branch=feat%2Fseptic_global_chip#2d8d643565cb741f8f8565f2d590cbb6b5021abd" dependencies = [ "anyhow", "ceno_emul", @@ -590,39 +693,54 @@ dependencies = [ [[package]] name = "ceno_rt" version = "0.1.0" -source = "git+https://github.com/scroll-tech/ceno.git?branch=master#ec4f614c5b04a83acf70de2e84af5de61ab93fb2" +source = "git+https://github.com/scroll-tech/ceno.git?branch=feat%2Fseptic_global_chip#2d8d643565cb741f8f8565f2d590cbb6b5021abd" dependencies = [ "getrandom 0.2.16", + "getrandom 0.3.4", "rkyv", ] +[[package]] +name = "ceno_syscall" +version = "0.1.0" +source = "git+https://github.com/scroll-tech/ceno.git?branch=feat%2Fseptic_global_chip#2d8d643565cb741f8f8565f2d590cbb6b5021abd" + [[package]] name = "ceno_zkvm" version = "0.1.0" -source = "git+https://github.com/scroll-tech/ceno.git?branch=master#ec4f614c5b04a83acf70de2e84af5de61ab93fb2" +source = "git+https://github.com/scroll-tech/ceno.git?branch=feat%2Fseptic_global_chip#2d8d643565cb741f8f8565f2d590cbb6b5021abd" dependencies = [ "base64", "bincode", "ceno-examples", "ceno_emul", "ceno_host", + "cfg-if", "clap", + "derive", "either", "ff_ext", + "generic-array 1.3.5", "generic_static", "gkr_iop", "glob", "itertools 0.13.0", + "lazy_static", "mpcs", "multilinear_extensions", "ndarray", + "num", + "num-bigint 0.4.6", + "once_cell", "p3", "parse-size", "prettytable-rs", "rand", "rayon", + "rustc-hash", "serde", "serde_json", + "sp1-curves", "strum", "strum_macros", "sumcheck", @@ -634,19 +752,32 @@ dependencies = [ "transcript", "whir", "witness", + "zkhash", ] [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chrono" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link", +] [[package]] name = "clap" -version = "4.5.46" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57" +checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" dependencies = [ "clap_builder", "clap_derive", @@ -654,9 +785,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.46" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41" +checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" dependencies = [ "anstream", "anstyle", @@ -666,21 +797,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.45" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "colorchoice" @@ -688,6 +819,32 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_format" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "constant_time_eq" version = "0.3.1" @@ -700,6 +857,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + [[package]] name = "cpufeatures" version = "0.2.17" @@ -740,37 +903,183 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.9", + "rand_core", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array", + "generic-array 0.14.9", "typenum", ] [[package]] name = "csv" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" dependencies = [ "csv-core", "itoa", "ryu", - "serde", + "serde_core", ] [[package]] name = "csv-core" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" dependencies = [ "memchr", ] +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "dashu" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b3e5ac1e23ff1995ef05b912e2b012a8784506987a2651552db2c73fb3d7e0" +dependencies = [ + "dashu-base", + "dashu-float", + "dashu-int", + "dashu-macros", + "dashu-ratio", + "rustversion", +] + +[[package]] +name = "dashu-base" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b80bf6b85aa68c58ffea2ddb040109943049ce3fbdf4385d0380aef08ef289" + +[[package]] +name = "dashu-float" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85078445a8dbd2e1bd21f04a816f352db8d333643f0c9b78ca7c3d1df71063e7" +dependencies = [ + "dashu-base", + "dashu-int", + "num-modular 0.6.1", + "num-order", + "rustversion", + "static_assertions", +] + +[[package]] +name = "dashu-int" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee99d08031ca34a4d044efbbb21dff9b8c54bb9d8c82a189187c0651ffdb9fbf" +dependencies = [ + "cfg-if", + "dashu-base", + "num-modular 0.6.1", + "num-order", + "rustversion", + "static_assertions", +] + +[[package]] +name = "dashu-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93381c3ef6366766f6e9ed9cf09e4ef9dec69499baf04f0c60e70d653cf0ab10" +dependencies = [ + "dashu-base", + "dashu-float", + "dashu-int", + "dashu-ratio", + "paste", + "proc-macro2", + "quote", + "rustversion", +] + +[[package]] +name = "dashu-ratio" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e33b04dd7ce1ccf8a02a69d3419e354f2bbfdf4eb911a0b7465487248764c9" +dependencies = [ + "dashu-base", + "dashu-float", + "dashu-int", + "num-modular 0.6.1", + "num-order", + "rustversion", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +dependencies = [ + "powerfmt", + "serde_core", +] + [[package]] name = "derivative" version = "2.2.0" @@ -782,6 +1091,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "derive" +version = "0.1.0" +source = "git+https://github.com/scroll-tech/ceno.git?branch=feat%2Fseptic_global_chip#2d8d643565cb741f8f8565f2d590cbb6b5021abd" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "derive-new" version = "0.6.0" @@ -790,7 +1108,7 @@ checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -801,7 +1119,7 @@ checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -814,7 +1132,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -834,7 +1152,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", "unicode-xid", ] @@ -845,6 +1163,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", "subtle", ] @@ -876,6 +1195,26 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + [[package]] name = "educe" version = "0.6.0" @@ -885,7 +1224,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -903,6 +1242,26 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff 0.13.1", + "generic-array 0.14.9", + "group 0.13.0", + "pem-rfc7468", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "encode_unicode" version = "1.0.0" @@ -917,22 +1276,22 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "enum-ordinalize" -version = "4.3.0" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" dependencies = [ "enum-ordinalize-derive", ] [[package]] name = "enum-ordinalize-derive" -version = "4.3.1" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -944,7 +1303,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -955,12 +1314,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -1021,7 +1380,7 @@ dependencies = [ [[package]] name = "ff_ext" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?rev=v1.0.0-alpha.6#3a9e040bdbdf0059ed432b9d8a93a29171200e83" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=chore%2Fsw_curve_default#c2580ace319e01bc8657dc92a6b5775348ce3133" dependencies = [ "once_cell", "p3", @@ -1031,9 +1390,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.0" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "fnv" @@ -1041,6 +1400,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "funty" version = "2.0.0" @@ -1055,12 +1420,24 @@ checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", + "zeroize", +] + +[[package]] +name = "generic-array" +version = "1.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaf57c49a95fd1fe24b90b3033bee6dc7e8f1288d51494cb44e627c295e38542" +dependencies = [ + "rustversion", + "serde_core", + "typenum", ] [[package]] @@ -1080,19 +1457,19 @@ checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.3+wasi-0.2.4", + "wasip2", ] [[package]] @@ -1104,19 +1481,19 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "gkr_iop" version = "0.1.0" -source = "git+https://github.com/scroll-tech/ceno.git?branch=master#ec4f614c5b04a83acf70de2e84af5de61ab93fb2" +source = "git+https://github.com/scroll-tech/ceno.git?branch=feat%2Fseptic_global_chip#2d8d643565cb741f8f8565f2d590cbb6b5021abd" dependencies = [ "bincode", "either", @@ -1124,6 +1501,7 @@ dependencies = [ "itertools 0.13.0", "mpcs", "multilinear_extensions", + "once_cell", "p3", "rand", "rayon", @@ -1131,18 +1509,20 @@ dependencies = [ "strum", "strum_macros", "sumcheck", - "thiserror", + "thiserror 2.0.17", "thread_local", "tracing", + "tracing-forest", + "tracing-subscriber", "transcript", "witness", ] [[package]] name = "glam" -version = "0.30.5" +version = "0.30.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d1aab06663bdce00d6ca5e5ed586ec8d18033a771906c993a1e3755b368d85" +checksum = "bd47b05dddf0005d850e5644cae7f2b14ac3df487979dbfff3b56f20b1a6ae46" [[package]] name = "glob" @@ -1150,6 +1530,16 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "gmp-mpfr-sys" +version = "1.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60f8970a75c006bb2f8ae79c6768a116dd215fa8346a87aed99bf9d82ca43394" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + [[package]] name = "group" version = "0.12.1" @@ -1226,19 +1616,53 @@ dependencies = [ ] [[package]] -name = "halo2derive" -version = "0.1.0" +name = "halo2curves-axiom" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb99e7492b4f5ff469d238db464131b86c2eaac814a78715acba369f64d2c76" +checksum = "dd8309e4638b4f1bcf6613d72265a84074d26034c35edc5d605b5688e580b8b8" dependencies = [ - "num-bigint 0.4.6", - "num-integer", - "num-traits", - "proc-macro2", + "blake2b_simd", + "digest", + "ff 0.13.1", + "group 0.13.0", + "hex", + "lazy_static", + "num-bigint 0.4.6", + "num-traits", + "pairing 0.23.0", + "pasta_curves 0.5.1", + "paste", + "rand", + "rand_core", + "rayon", + "serde", + "serde_arrays", + "sha2", + "static_assertions", + "subtle", + "unroll", +] + +[[package]] +name = "halo2derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb99e7492b4f5ff469d238db464131b86c2eaac814a78715acba369f64d2c76" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.5" @@ -1255,8 +1679,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", + "equivalent", + "foldhash", ] +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + [[package]] name = "heck" version = "0.5.0" @@ -1287,6 +1719,62 @@ dependencies = [ "arrayvec", ] +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.109", +] + [[package]] name = "indenter" version = "0.3.4" @@ -1295,30 +1783,43 @@ checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" [[package]] name = "indexmap" -version = "2.11.0" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", - "hashbrown 0.15.5", + "hashbrown 0.16.0", + "serde", + "serde_core", ] [[package]] name = "is-terminal" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -1355,9 +1856,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -1377,6 +1878,20 @@ dependencies = [ "subtle", ] +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature", +] + [[package]] name = "keccak" version = "0.1.5" @@ -1397,9 +1912,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.175" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libm" @@ -1409,9 +1924,9 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ "bitflags", "libc", @@ -1419,9 +1934,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "lockfree-object-pool" @@ -1431,9 +1946,18 @@ checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.5", +] [[package]] name = "matchers" @@ -1456,9 +1980,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memuse" @@ -1482,7 +2006,7 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62a6a1f7141f1d9bc7a886b87536bbfc97752e08b369e1e0453a9acfab5f5da4" dependencies = [ - "indexmap", + "indexmap 2.12.0", "itoa", "lockfree-object-pool", "metrics", @@ -1503,7 +2027,7 @@ dependencies = [ "crossbeam-epoch", "crossbeam-utils", "hashbrown 0.14.5", - "indexmap", + "indexmap 2.12.0", "metrics", "num_cpus", "ordered-float", @@ -1524,7 +2048,7 @@ dependencies = [ [[package]] name = "mpcs" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?rev=v1.0.0-alpha.6#3a9e040bdbdf0059ed432b9d8a93a29171200e83" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=chore%2Fsw_curve_default#c2580ace319e01bc8657dc92a6b5775348ce3133" dependencies = [ "bincode", "clap", @@ -1548,7 +2072,7 @@ dependencies = [ [[package]] name = "multilinear_extensions" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?rev=v1.0.0-alpha.6#3a9e040bdbdf0059ed432b9d8a93a29171200e83" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=chore%2Fsw_curve_default#c2580ace319e01bc8657dc92a6b5775348ce3133" dependencies = [ "either", "ff_ext", @@ -1562,29 +2086,29 @@ dependencies = [ [[package]] name = "munge" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7feb0b48aa0a25f9fe0899482c6e1379ee7a11b24a53073eacdecb9adb6dc60" +checksum = "5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c" dependencies = [ "munge_macro", ] [[package]] name = "munge_macro" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2e3795a5d2da581a8b252fec6022eee01aea10161a4d1bf237d4cbe47f7e988" +checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] name = "ndarray" -version = "0.16.1" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" +checksum = "0c7c9125e8f6f10c9da3aad044cc918cf8784fa34de857b1aa68038eb05a50a9" dependencies = [ "matrixmultiply", "num-complex", @@ -1606,11 +2130,25 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint 0.4.6", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", ] [[package]] @@ -1633,6 +2171,7 @@ dependencies = [ "num-integer", "num-traits", "rand", + "serde", ] [[package]] @@ -1644,6 +2183,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-derive" version = "0.4.2" @@ -1652,7 +2197,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -1664,6 +2209,70 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-modular" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a5fe11d4135c3bcdf3a95b18b194afa9608a5f6ff034f5d857bc9a27fb0119" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-modular" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17bb261bf36fa7d83f4c294f834e91256769097b3cb505d44831e0a179ac647f" + +[[package]] +name = "num-order" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "537b596b97c40fcf8056d153049eb22f481c17ebce72a513ec9286e4986d1bb6" +dependencies = [ + "num-modular 0.6.1", +] + +[[package]] +name = "num-prime" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e238432a7881ec7164503ccc516c014bf009be7984cde1ba56837862543bdec3" +dependencies = [ + "bitvec", + "either", + "lru", + "num-bigint 0.4.6", + "num-integer", + "num-modular 0.5.1", + "num-traits", + "rand", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -1698,7 +2307,7 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", @@ -1718,9 +2327,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] @@ -1733,14 +2342,14 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openvm" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "bytemuck", "num-bigint 0.4.6", @@ -1750,10 +2359,149 @@ dependencies = [ "serde", ] +[[package]] +name = "openvm-algebra-circuit" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "derive-new 0.6.0", + "derive_more 1.0.0", + "eyre", + "itertools 0.14.0", + "num-bigint 0.4.6", + "num-traits", + "openvm-algebra-transpiler", + "openvm-circuit", + "openvm-circuit-derive", + "openvm-circuit-primitives", + "openvm-circuit-primitives-derive", + "openvm-instructions", + "openvm-mod-circuit-builder", + "openvm-rv32-adapters", + "openvm-rv32im-circuit", + "openvm-stark-backend", + "openvm-stark-sdk", + "rand", + "serde", + "serde-big-array", + "serde_with", + "strum", +] + +[[package]] +name = "openvm-algebra-complex-macros" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "openvm-macros-common", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "openvm-algebra-guest" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "halo2curves-axiom", + "num-bigint 0.4.6", + "once_cell", + "openvm-algebra-complex-macros", + "openvm-algebra-moduli-macros", + "openvm-custom-insn", + "openvm-rv32im-guest", + "serde-big-array", + "strum_macros", +] + +[[package]] +name = "openvm-algebra-moduli-macros" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "num-bigint 0.4.6", + "num-prime", + "openvm-macros-common", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "openvm-algebra-transpiler" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "openvm-algebra-guest", + "openvm-instructions", + "openvm-instructions-derive", + "openvm-stark-backend", + "openvm-transpiler", + "rrs-lib", + "strum", +] + +[[package]] +name = "openvm-bigint-circuit" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "derive-new 0.6.0", + "derive_more 1.0.0", + "openvm-bigint-transpiler", + "openvm-circuit", + "openvm-circuit-derive", + "openvm-circuit-primitives", + "openvm-circuit-primitives-derive", + "openvm-instructions", + "openvm-rv32-adapters", + "openvm-rv32im-circuit", + "openvm-rv32im-transpiler", + "openvm-stark-backend", + "openvm-stark-sdk", + "rand", + "serde", +] + +[[package]] +name = "openvm-bigint-guest" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "openvm-platform", + "strum_macros", +] + +[[package]] +name = "openvm-bigint-transpiler" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "openvm-bigint-guest", + "openvm-instructions", + "openvm-instructions-derive", + "openvm-rv32im-transpiler", + "openvm-stark-backend", + "openvm-transpiler", + "rrs-lib", + "strum", +] + +[[package]] +name = "openvm-build" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "cargo_metadata", + "eyre", + "openvm-platform", + "serde", + "serde_json", +] + [[package]] name = "openvm-circuit" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "backtrace", "cfg-if", @@ -1777,85 +2525,246 @@ dependencies = [ "serde", "serde-big-array", "static_assertions", - "thiserror", + "thiserror 1.0.69", "tracing", ] [[package]] name = "openvm-circuit-derive" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "itertools 0.14.0", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] name = "openvm-circuit-primitives" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "derive-new 0.6.0", + "itertools 0.14.0", + "num-bigint 0.4.6", + "num-traits", + "openvm-circuit-primitives-derive", + "openvm-stark-backend", + "rand", + "tracing", +] + +[[package]] +name = "openvm-circuit-primitives-derive" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "itertools 0.14.0", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "openvm-continuations" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "derivative", + "openvm-circuit", + "openvm-native-compiler", + "openvm-native-recursion", + "openvm-stark-backend", + "openvm-stark-sdk", + "serde", + "static_assertions", +] + +[[package]] +name = "openvm-custom-insn" +version = "0.1.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "openvm-ecc-circuit" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ + "derive-new 0.6.0", + "derive_more 1.0.0", + "hex-literal", + "lazy_static", + "num-bigint 0.4.6", + "num-traits", + "once_cell", + "openvm-algebra-circuit", + "openvm-circuit", + "openvm-circuit-derive", + "openvm-circuit-primitives", + "openvm-circuit-primitives-derive", + "openvm-ecc-transpiler", + "openvm-instructions", + "openvm-mod-circuit-builder", + "openvm-rv32-adapters", + "openvm-rv32im-circuit", + "openvm-stark-backend", + "serde", + "serde_with", + "strum", +] + +[[package]] +name = "openvm-ecc-guest" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "ecdsa", + "elliptic-curve", + "group 0.13.0", + "halo2curves-axiom", + "once_cell", + "openvm", + "openvm-algebra-guest", + "openvm-custom-insn", + "openvm-ecc-sw-macros", + "openvm-rv32im-guest", + "serde", + "strum_macros", +] + +[[package]] +name = "openvm-ecc-sw-macros" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "openvm-macros-common", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "openvm-ecc-transpiler" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "openvm-ecc-guest", + "openvm-instructions", + "openvm-instructions-derive", + "openvm-stark-backend", + "openvm-transpiler", + "rrs-lib", + "strum", +] + +[[package]] +name = "openvm-instructions" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "backtrace", "derive-new 0.6.0", "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", + "openvm-instructions-derive", + "openvm-stark-backend", + "serde", + "strum", + "strum_macros", +] + +[[package]] +name = "openvm-instructions-derive" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "quote", + "syn 2.0.109", +] + +[[package]] +name = "openvm-keccak256-circuit" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "derive-new 0.6.0", + "derive_more 1.0.0", + "itertools 0.14.0", + "openvm-circuit", + "openvm-circuit-derive", + "openvm-circuit-primitives", "openvm-circuit-primitives-derive", + "openvm-instructions", + "openvm-keccak256-transpiler", + "openvm-rv32im-circuit", "openvm-stark-backend", + "openvm-stark-sdk", + "p3-keccak-air", "rand", + "serde", + "serde-big-array", + "strum", + "tiny-keccak", "tracing", ] [[package]] -name = "openvm-circuit-primitives-derive" +name = "openvm-keccak256-guest" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "openvm-platform", +] + +[[package]] +name = "openvm-keccak256-transpiler" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ - "itertools 0.14.0", - "quote", - "syn 2.0.106", + "openvm-instructions", + "openvm-instructions-derive", + "openvm-keccak256-guest", + "openvm-stark-backend", + "openvm-transpiler", + "rrs-lib", + "strum", ] [[package]] -name = "openvm-custom-insn" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +name = "openvm-macros-common" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] -name = "openvm-instructions" +name = "openvm-mod-circuit-builder" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ - "backtrace", - "derive-new 0.6.0", "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", - "openvm-instructions-derive", + "openvm-circuit", + "openvm-circuit-primitives", + "openvm-instructions", "openvm-stark-backend", + "openvm-stark-sdk", + "rand", "serde", - "strum", - "strum_macros", -] - -[[package]] -name = "openvm-instructions-derive" -version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" -dependencies = [ - "quote", - "syn 2.0.106", + "serde_with", + "tracing", ] [[package]] name = "openvm-native-circuit" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "derive-new 0.6.0", "derive_more 1.0.0", @@ -1882,7 +2791,7 @@ dependencies = [ [[package]] name = "openvm-native-compiler" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "backtrace", "itertools 0.14.0", @@ -1904,16 +2813,16 @@ dependencies = [ [[package]] name = "openvm-native-compiler-derive" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] name = "openvm-native-recursion" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "cfg-if", "itertools 0.14.0", @@ -1934,10 +2843,86 @@ dependencies = [ "tracing", ] +[[package]] +name = "openvm-native-transpiler" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "openvm-instructions", + "openvm-transpiler", + "p3-field", +] + +[[package]] +name = "openvm-pairing-circuit" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "derive-new 0.6.0", + "derive_more 1.0.0", + "eyre", + "halo2curves-axiom", + "itertools 0.14.0", + "num-bigint 0.4.6", + "num-traits", + "openvm-algebra-circuit", + "openvm-circuit", + "openvm-circuit-derive", + "openvm-circuit-primitives", + "openvm-circuit-primitives-derive", + "openvm-ecc-circuit", + "openvm-ecc-guest", + "openvm-instructions", + "openvm-mod-circuit-builder", + "openvm-pairing-guest", + "openvm-pairing-transpiler", + "openvm-rv32-adapters", + "openvm-rv32im-circuit", + "openvm-stark-backend", + "rand", + "serde", + "strum", +] + +[[package]] +name = "openvm-pairing-guest" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "halo2curves-axiom", + "hex-literal", + "itertools 0.14.0", + "lazy_static", + "num-bigint 0.4.6", + "num-traits", + "openvm", + "openvm-algebra-guest", + "openvm-algebra-moduli-macros", + "openvm-custom-insn", + "openvm-ecc-guest", + "rand", + "serde", + "strum_macros", +] + +[[package]] +name = "openvm-pairing-transpiler" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "openvm-instructions", + "openvm-instructions-derive", + "openvm-pairing-guest", + "openvm-stark-backend", + "openvm-transpiler", + "rrs-lib", + "strum", +] + [[package]] name = "openvm-platform" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "libm", "openvm-custom-insn", @@ -1947,7 +2932,7 @@ dependencies = [ [[package]] name = "openvm-poseidon2-air" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "derivative", "lazy_static", @@ -1961,10 +2946,30 @@ dependencies = [ "zkhash", ] +[[package]] +name = "openvm-rv32-adapters" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "derive-new 0.6.0", + "itertools 0.14.0", + "openvm-circuit", + "openvm-circuit-primitives", + "openvm-circuit-primitives-derive", + "openvm-instructions", + "openvm-rv32im-circuit", + "openvm-stark-backend", + "openvm-stark-sdk", + "rand", + "serde", + "serde-big-array", + "serde_with", +] + [[package]] name = "openvm-rv32im-circuit" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "derive-new 0.6.0", "derive_more 1.0.0", @@ -1987,7 +2992,7 @@ dependencies = [ [[package]] name = "openvm-rv32im-guest" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "openvm-custom-insn", "p3-field", @@ -1997,7 +3002,7 @@ dependencies = [ [[package]] name = "openvm-rv32im-transpiler" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -2010,6 +3015,114 @@ dependencies = [ "tracing", ] +[[package]] +name = "openvm-sdk" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "async-trait", + "bitcode", + "bon", + "clap", + "derivative", + "derive_more 1.0.0", + "eyre", + "getset", + "hex", + "itertools 0.14.0", + "metrics", + "num-bigint 0.4.6", + "openvm", + "openvm-algebra-circuit", + "openvm-algebra-transpiler", + "openvm-bigint-circuit", + "openvm-bigint-transpiler", + "openvm-build", + "openvm-circuit", + "openvm-continuations", + "openvm-ecc-circuit", + "openvm-ecc-transpiler", + "openvm-keccak256-circuit", + "openvm-keccak256-transpiler", + "openvm-native-circuit", + "openvm-native-compiler", + "openvm-native-recursion", + "openvm-native-transpiler", + "openvm-pairing-circuit", + "openvm-pairing-transpiler", + "openvm-rv32im-circuit", + "openvm-rv32im-transpiler", + "openvm-sha256-circuit", + "openvm-sha256-transpiler", + "openvm-stark-backend", + "openvm-stark-sdk", + "openvm-transpiler", + "p3-fri", + "rrs-lib", + "serde", + "serde_json", + "serde_with", + "tempfile", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "openvm-sha256-air" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "openvm-circuit-primitives", + "openvm-stark-backend", + "rand", + "sha2", +] + +[[package]] +name = "openvm-sha256-circuit" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "derive-new 0.6.0", + "derive_more 1.0.0", + "openvm-circuit", + "openvm-circuit-derive", + "openvm-circuit-primitives", + "openvm-circuit-primitives-derive", + "openvm-instructions", + "openvm-rv32im-circuit", + "openvm-sha256-air", + "openvm-sha256-transpiler", + "openvm-stark-backend", + "openvm-stark-sdk", + "rand", + "serde", + "sha2", + "strum", +] + +[[package]] +name = "openvm-sha256-guest" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "openvm-platform", +] + +[[package]] +name = "openvm-sha256-transpiler" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" +dependencies = [ + "openvm-instructions", + "openvm-instructions-derive", + "openvm-sha256-guest", + "openvm-stark-backend", + "openvm-transpiler", + "rrs-lib", + "strum", +] + [[package]] name = "openvm-stark-backend" version = "1.1.1" @@ -2032,7 +3145,7 @@ dependencies = [ "rayon", "rustc-hash", "serde", - "thiserror", + "thiserror 1.0.69", "tracing", ] @@ -2075,7 +3188,7 @@ dependencies = [ [[package]] name = "openvm-transpiler" version = "1.3.0" -source = "git+https://github.com/scroll-tech/openvm.git#9b7591dce3c0afc1dbe9502499cd670e864e47a6" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fceno_leaves#caec16ae3bebef4390c6382095d86ae70b2936c0" dependencies = [ "elf", "eyre", @@ -2083,7 +3196,7 @@ dependencies = [ "openvm-platform", "openvm-stark-backend", "rrs-lib", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2095,11 +3208,24 @@ dependencies = [ "num-traits", ] +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + [[package]] name = "p3" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?rev=v1.0.0-alpha.6#3a9e040bdbdf0059ed432b9d8a93a29171200e83" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=chore%2Fsw_curve_default#c2580ace319e01bc8657dc92a6b5775348ce3133" dependencies = [ + "p3-air", "p3-baby-bear", "p3-challenger", "p3-commit", @@ -2111,8 +3237,10 @@ dependencies = [ "p3-maybe-rayon", "p3-mds", "p3-merkle-tree", + "p3-monty-31", "p3-poseidon", "p3-poseidon2", + "p3-poseidon2-air", "p3-symmetric", "p3-util", ] @@ -2280,6 +3408,20 @@ dependencies = [ "tiny-keccak", ] +[[package]] +name = "p3-keccak-air" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" +dependencies = [ + "p3-air", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "rand", + "tracing", +] + [[package]] name = "p3-koala-bear" version = "0.1.0" @@ -2462,6 +3604,32 @@ dependencies = [ "group 0.13.0", ] +[[package]] +name = "parity-scale-codec" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" +dependencies = [ + "arrayvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 2.0.109", +] + [[package]] name = "parse-size" version = "1.1.0" @@ -2504,12 +3672,31 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "pin-project-lite" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "portable-atomic" version = "1.11.1" @@ -2528,13 +3715,19 @@ dependencies = [ [[package]] name = "poseidon" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?rev=v1.0.0-alpha.6#3a9e040bdbdf0059ed432b9d8a93a29171200e83" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=chore%2Fsw_curve_default#c2580ace319e01bc8657dc92a6b5775348ce3133" dependencies = [ "ff_ext", "p3", "serde", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -2544,6 +3737,16 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.109", +] + [[package]] name = "prettytable-rs" version = "0.10.0" @@ -2558,6 +3761,15 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -2568,6 +3780,15 @@ dependencies = [ "toml_edit 0.19.15", ] +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.7", +] + [[package]] name = "proc-macro-error-attr2" version = "2.0.0" @@ -2587,36 +3808,36 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] [[package]] name = "ptr_meta" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9e76f66d3f9606f44e45598d155cb13ecf09f4a28199e48daf8c8fc937ea90" +checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79" dependencies = [ "ptr_meta_derive", ] [[package]] name = "ptr_meta_derive" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca414edb151b4c8d125c12566ab0d74dc9cdba36fb80eb7b848c15f495fd32d1" +checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -2629,16 +3850,16 @@ dependencies = [ "libc", "once_cell", "raw-cpuid", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "web-sys", "winapi", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -2667,9 +3888,9 @@ dependencies = [ [[package]] name = "rancor" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf5f7161924b9d1cea0e4cabc97c372cea92b5f927fc13c6bca67157a0ad947" +checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee" dependencies = [ "ptr_meta", ] @@ -2707,9 +3928,9 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "11.5.0" +version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ "bitflags", ] @@ -2748,14 +3969,34 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror", + "thiserror 1.0.69", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.109", ] [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -2764,29 +4005,39 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "rend" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35e8a6bf28cd121053a66aa2e6a2e3eaffad4a60012179f0e864aa5ffeff215" +checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6" dependencies = [ "bytecheck", ] +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + [[package]] name = "rkyv" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f5c3e5da784cd8c69d32cdc84673f3204536ca56e1fa01be31a74b92c932ac" +checksum = "35a640b26f007713818e9a9b65d34da1cf58538207b052916a83d80e43f3ffa4" dependencies = [ "bytecheck", "bytes", "hashbrown 0.15.5", - "indexmap", + "indexmap 2.12.0", "munge", "ptr_meta", "rancor", @@ -2798,13 +4049,13 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4270433626cffc9c4c1d3707dd681f2a2718d3d7b09ad754bec137acecda8d22" +checksum = "bd83f5f173ff41e00337d97f6572e416d022ef8a19f371817259ae960324c482" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -2828,6 +4079,18 @@ dependencies = [ "paste", ] +[[package]] +name = "rug" +version = "1.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58ad2e973fe3c3214251a840a621812a4f40468da814b1a3d6947d433c2af11f" +dependencies = [ + "az", + "gmp-mpfr-sys", + "libc", + "libm", +] + [[package]] name = "rustc-demangle" version = "0.1.26" @@ -2857,15 +4120,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.8" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -2880,6 +4143,68 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +[[package]] +name = "scale-info" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" +dependencies = [ + "cfg-if", + "derive_more 1.0.0", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.9", + "pkcs8", + "subtle", + "zeroize", +] + [[package]] name = "secp" version = "0.4.1" @@ -2914,16 +4239,21 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +dependencies = [ + "serde", + "serde_core", +] [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -2945,27 +4275,37 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] name = "serde_json" -version = "1.0.143" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] @@ -2977,6 +4317,37 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.12.0", + "schemars 0.9.0", + "schemars 1.1.0", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.109", +] + [[package]] name = "sha2" version = "0.10.9" @@ -3013,6 +4384,16 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + [[package]] name = "simdutf8" version = "0.1.5" @@ -3030,6 +4411,41 @@ name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +dependencies = [ + "serde", +] + +[[package]] +name = "snowbridge-amcl" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460a9ed63cdf03c1b9847e8a12a5f5ba19c4efd5869e4a737e05be25d7c427e5" +dependencies = [ + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "sp1-curves" +version = "0.1.0" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=chore%2Fsw_curve_default#c2580ace319e01bc8657dc92a6b5775348ce3133" +dependencies = [ + "cfg-if", + "dashu", + "elliptic-curve", + "ff_ext", + "generic-array 1.3.5", + "itertools 0.13.0", + "k256", + "multilinear_extensions", + "num", + "p256", + "p3-field", + "rug", + "serde", + "snowbridge-amcl", + "typenum", +] [[package]] name = "spin" @@ -3037,6 +4453,16 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -3074,7 +4500,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -3099,7 +4525,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sumcheck" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?rev=v1.0.0-alpha.6#3a9e040bdbdf0059ed432b9d8a93a29171200e83" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=chore%2Fsw_curve_default#c2580ace319e01bc8657dc92a6b5775348ce3133" dependencies = [ "either", "ff_ext", @@ -3109,7 +4535,7 @@ dependencies = [ "rayon", "serde", "sumcheck_macro", - "thiserror", + "thiserror 1.0.69", "tracing", "transcript", ] @@ -3117,14 +4543,14 @@ dependencies = [ [[package]] name = "sumcheck_macro" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?rev=v1.0.0-alpha.6#3a9e040bdbdf0059ed432b9d8a93a29171200e83" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=chore%2Fsw_curve_default#c2580ace319e01bc8657dc92a6b5775348ce3133" dependencies = [ "itertools 0.13.0", "p3", "proc-macro2", "quote", "rand", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -3140,9 +4566,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f" dependencies = [ "proc-macro2", "quote", @@ -3157,15 +4583,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.21.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -3185,7 +4611,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl 2.0.17", ] [[package]] @@ -3196,7 +4631,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.109", ] [[package]] @@ -3210,9 +4656,9 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.6.0+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" +version = "0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c60906412afa9c2b5b5a48ca6a5abe5736aec9eb48ad05037a677e52e4e2d" +checksum = "cd8aa5b2ab86a2cefa406d889139c162cbb230092f7d1d7cbc1716405d852a3b" dependencies = [ "cc", "libc", @@ -3220,14 +4666,45 @@ dependencies = [ [[package]] name = "tikv-jemallocator" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cec5ff18518d81584f477e9bfdf957f5bb0979b0bac3af4ca30b5b3ae2d2865" +checksum = "0359b4327f954e0567e69fb191cf1436617748813819c94b8cd4a431422d053a" dependencies = [ "libc", "tikv-jemalloc-sys", ] +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "time-macros" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -3260,7 +4737,7 @@ checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", - "toml_datetime", + "toml_datetime 0.6.11", "toml_edit 0.22.27", ] @@ -3273,14 +4750,23 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", - "toml_datetime", + "indexmap 2.12.0", + "toml_datetime 0.6.11", "winnow 0.5.40", ] @@ -3290,14 +4776,35 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap", + "indexmap 2.12.0", "serde", "serde_spanned", - "toml_datetime", + "toml_datetime 0.6.11", "toml_write", "winnow 0.7.13", ] +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap 2.12.0", + "toml_datetime 0.7.3", + "toml_parser", + "winnow 0.7.13", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow 0.7.13", +] + [[package]] name = "toml_write" version = "0.1.2" @@ -3323,7 +4830,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -3344,7 +4851,7 @@ checksum = "ee40835db14ddd1e3ba414292272eddde9dad04d3d4b65509656414d1c42592f" dependencies = [ "ansi_term", "smallvec", - "thiserror", + "thiserror 1.0.69", "tracing", "tracing-subscriber", ] @@ -3381,7 +4888,7 @@ dependencies = [ [[package]] name = "transcript" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?rev=v1.0.0-alpha.6#3a9e040bdbdf0059ed432b9d8a93a29171200e83" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=chore%2Fsw_curve_default#c2580ace319e01bc8657dc92a6b5775348ce3133" dependencies = [ "ff_ext", "itertools 0.13.0", @@ -3401,15 +4908,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-width" @@ -3468,45 +4975,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.3+wasi-0.2.4" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.106", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3514,31 +5008,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.106", - "wasm-bindgen-backend", + "syn 2.0.109", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -3547,7 +5041,7 @@ dependencies = [ [[package]] name = "whir" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?rev=v1.0.0-alpha.6#3a9e040bdbdf0059ed432b9d8a93a29171200e83" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=chore%2Fsw_curve_default#c2580ace319e01bc8657dc92a6b5775348ce3133" dependencies = [ "bincode", "clap", @@ -3590,166 +5084,146 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows-link" -version = "0.1.3" +name = "windows-core" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] [[package]] -name = "windows-sys" -version = "0.52.0" +name = "windows-implement" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ - "windows-targets 0.52.6", + "proc-macro2", + "quote", + "syn 2.0.109", ] [[package]] -name = "windows-sys" -version = "0.59.0" +name = "windows-interface" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ - "windows-targets 0.52.6", + "proc-macro2", + "quote", + "syn 2.0.109", ] [[package]] -name = "windows-sys" -version = "0.60.2" +name = "windows-link" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.3", -] +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] -name = "windows-targets" -version = "0.52.6" +name = "windows-result" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", + "windows-link", ] [[package]] -name = "windows-targets" -version = "0.53.3" +name = "windows-strings" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" +name = "windows-sys" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets", +] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" +name = "windows-sys" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] [[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" +name = "windows-targets" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] [[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" +name = "windows_aarch64_gnullvm" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] -name = "windows_i686_gnu" -version = "0.52.6" +name = "windows_aarch64_msvc" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" @@ -3771,14 +5245,14 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.45.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "witness" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?rev=v1.0.0-alpha.6#3a9e040bdbdf0059ed432b9d8a93a29171200e83" +source = "git+https://github.com/scroll-tech/gkr-backend.git?branch=chore%2Fsw_curve_default#c2580ace319e01bc8657dc92a6b5775348ce3133" dependencies = [ "ff_ext", "multilinear_extensions", @@ -3799,29 +5273,29 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] @@ -3834,7 +5308,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 752e401..6e2dd0e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,12 +4,26 @@ version = "0.1.0" edition = "2021" [dependencies] -openvm = { git = "https://github.com/scroll-tech/openvm.git", default-features = false } -openvm-circuit = { git = "https://github.com/scroll-tech/openvm.git", default-features = false, features = ["bench-metrics"] } -openvm-native-circuit = { git = "https://github.com/scroll-tech/openvm.git", default-features = false } -openvm-native-compiler = { git = "https://github.com/scroll-tech/openvm.git", default-features = false } -openvm-native-compiler-derive = { git = "https://github.com/scroll-tech/openvm.git", default-features = false } -openvm-native-recursion = { git = "https://github.com/scroll-tech/openvm.git", default-features = false } +openvm = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/ceno_leaves", default-features = false } +openvm-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/ceno_leaves", default-features = false, features = ["bench-metrics"] } +openvm-native-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/ceno_leaves", default-features = false } +openvm-sdk = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/ceno_leaves", default-features = false } +openvm-native-compiler = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/ceno_leaves", default-features = false } +openvm-native-compiler-derive = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/ceno_leaves", default-features = false } +openvm-native-recursion = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/ceno_leaves", default-features = false } +openvm-continuations = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/ceno_leaves", default-features = false } +openvm-rv32im-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/ceno_leaves", default-features = false } + +# openvm = { path = "../openvm-scroll-tech/crates/toolchain/openvm", default-features = false } +# openvm-circuit = { path = "../openvm-scroll-tech/crates/vm", default-features = false, features = ["bench-metrics"] } +# openvm-native-circuit = { path = "../openvm-scroll-tech/extensions/native/circuit", default-features = false } +# openvm-sdk = { path = "../openvm-scroll-tech/crates/sdk", default-features = false } +# openvm-native-compiler = { path = "../openvm-scroll-tech/extensions/native/compiler", default-features = false } +# openvm-native-compiler-derive = { path = "../openvm-scroll-tech/extensions/native/compiler/derive", default-features = false } +# openvm-native-recursion = { path = "../openvm-scroll-tech/extensions/native/recursion", default-features = false } +# openvm-continuations = { path = "../openvm-scroll-tech/crates/continuations", default-features = false } +# openvm-rv32im-circuit = { path = "../openvm-scroll-tech/extensions/rv32im/circuit", default-features = false } + openvm-stark-backend = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.1.1", default-features = false } openvm-stark-sdk = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.1.1", default-features = false } @@ -41,15 +55,15 @@ ark-poly = "0.5" ark-serialize = "0.5" # Ceno -ceno_mle = { git = "https://github.com/scroll-tech/gkr-backend.git", rev = "v1.0.0-alpha.6", package = "multilinear_extensions" } -ceno_sumcheck = { git = "https://github.com/scroll-tech/gkr-backend.git", rev = "v1.0.0-alpha.6", package = "sumcheck" } -ceno_transcript = { git = "https://github.com/scroll-tech/gkr-backend.git", rev = "v1.0.0-alpha.6", package = "transcript" } -ceno_witness = { git = "https://github.com/scroll-tech/gkr-backend.git", rev = "v1.0.0-alpha.6", package = "witness" } -ceno_zkvm = { git = "https://github.com/scroll-tech/ceno.git", branch = "master" } -ceno_emul = { git = "https://github.com/scroll-tech/ceno.git", branch = "master" } -gkr_iop = { git = "https://github.com/scroll-tech/ceno.git", branch = "master" } -mpcs = { git = "https://github.com/scroll-tech/gkr-backend.git", rev = "v1.0.0-alpha.6" } -ff_ext = { git = "https://github.com/scroll-tech/gkr-backend.git", rev = "v1.0.0-alpha.6" } +ceno_mle = { git = "https://github.com/scroll-tech/gkr-backend.git", branch = "chore/sw_curve_default", package = "multilinear_extensions" } +ceno_sumcheck = { git = "https://github.com/scroll-tech/gkr-backend.git", branch = "chore/sw_curve_default", package = "sumcheck" } +ceno_transcript = { git = "https://github.com/scroll-tech/gkr-backend.git", branch = "chore/sw_curve_default", package = "transcript" } +ceno_witness = { git = "https://github.com/scroll-tech/gkr-backend.git", branch = "chore/sw_curve_default", package = "witness" } +mpcs = { git = "https://github.com/scroll-tech/gkr-backend.git", branch = "chore/sw_curve_default" } +ff_ext = { git = "https://github.com/scroll-tech/gkr-backend.git", branch = "chore/sw_curve_default" } +ceno_zkvm = { git = "https://github.com/scroll-tech/ceno.git", branch = "feat/septic_global_chip" } +ceno_emul = { git = "https://github.com/scroll-tech/ceno.git", branch = "feat/septic_global_chip" } +gkr_iop = { git = "https://github.com/scroll-tech/ceno.git", branch = "feat/septic_global_chip" } [features] default = ["parallel", "nightly-features"] diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 8c279ac..4b661e9 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "nightly-2025-03-25" +channel = "nightly-2025-08-18" targets = ["riscv32im-unknown-none-elf"] -components = ["clippy", "rustfmt", "rust-src"] +components = ["clippy", "rustfmt", "rust-src"] \ No newline at end of file diff --git a/src/aggregation/mod.rs b/src/aggregation/mod.rs new file mode 100644 index 0000000..1e65400 --- /dev/null +++ b/src/aggregation/mod.rs @@ -0,0 +1,281 @@ +pub mod scheme; + +#[cfg(test)] +mod tests { + use crate::e2e::{build_zkvm_verifier_program, parse_zkvm_proof_import}; + use crate::{ + aggregation::scheme::{CenoLeafVmVerifierConfig, RecursionProvingKeys}, + zkvm_verifier::binding::{E, F}, + }; + use ceno_zkvm::scheme::ZKVMProof; + use ceno_zkvm::structs::ZKVMVerifyingKey; + use mpcs::{Basefold, BasefoldRSParams}; + use openvm_circuit::arch::{instructions::exe::VmExe, SystemConfig}; + use openvm_native_circuit::NativeConfig; + use openvm_native_compiler::conversion::CompilerOptions; + use openvm_native_recursion::hints::Hintable; + use openvm_sdk::Sdk; + use openvm_stark_sdk::config::{baby_bear_poseidon2::BabyBearPoseidon2Engine, FriParameters}; + use std::fs::File; + use std::sync::Arc; + /* _debug: single proof verification + use openvm_stark_sdk::engine::StarkFriEngine; + use openvm_circuit::arch::verify_single; + use openvm_circuit::arch::VirtualMachine; + use openvm_native_circuit::{Native, NativeConfig}; + */ + use openvm_circuit::arch::VirtualMachine; + use openvm_circuit::system::program::trace::VmCommittedExe; + use openvm_circuit::{ + arch::{ + ExecutionBridge, InitFileGenerator, MemoryConfig, SystemPort, VmExtension, VmInventory, + VmInventoryBuilder, VmInventoryError, + }, + system::phantom::PhantomChip, + }; + use openvm_continuations::verifier::common::types::VmVerifierPvs; + use openvm_continuations::verifier::internal::types::InternalVmVerifierInput; + use openvm_continuations::verifier::internal::types::InternalVmVerifierPvs; + use openvm_continuations::verifier::internal::InternalVmVerifierConfig; + use openvm_sdk::prover::vm::types::VmProvingKey; + use openvm_sdk::{ + config::AggregationTreeConfig, + prover::{ + vm::{local::VmLocalProver, SingleSegmentVmProver}, + RootVerifierLocalProver, + }, + NonRootCommittedExe, RootSC, SC, + }; + use openvm_stark_sdk::config::setup_tracing_with_log_level; + use openvm_stark_sdk::{ + config::baby_bear_poseidon2_root::BabyBearPoseidon2RootEngine, + engine::StarkFriEngine, + openvm_stark_backend::{ + config::{Com, StarkGenericConfig}, + keygen::types::MultiStarkVerifyingKey, + proof::Proof, + Chip, + }, + p3_bn254_fr::Bn254Fr, + }; + use std::io::Write; + use std::time::Instant; + + const LEAF_LOG_BLOWUP: usize = 1; + const INTERNAL_LOG_BLOWUP: usize = 2; + const ROOT_LOG_BLOWUP: usize = 3; + const SBOX_SIZE: usize = 7; + + pub fn aggregation_inner_thread() { + setup_tracing_with_log_level(tracing::Level::WARN); + + let proof_path = "./src/e2e/encoded/proof.bin"; + let vk_path = "./src/e2e/encoded/vk.bin"; + + let zkvm_proof: ZKVMProof> = + bincode::deserialize_from(File::open(proof_path).expect("Failed to open proof file")) + .expect("Failed to deserialize proof file"); + + let vk: ZKVMVerifyingKey> = + bincode::deserialize_from(File::open(vk_path).expect("Failed to open vk file")) + .expect("Failed to deserialize vk file"); + + // Construct zkvm proof input + let zkvm_proof_input = parse_zkvm_proof_import(zkvm_proof, &vk); + let mut witness_stream: Vec> = Vec::new(); + witness_stream.extend(zkvm_proof_input.write()); + + let aggregation_start_timestamp = Instant::now(); + let sdk = Sdk::new(); + + let [leaf_fri_params, internal_fri_params, root_fri_params] = + [LEAF_LOG_BLOWUP, INTERNAL_LOG_BLOWUP, ROOT_LOG_BLOWUP] + .map(FriParameters::standard_with_100_bits_conjectured_security); + + let leaf_vm_config = NativeConfig { + system: SystemConfig::new( + SBOX_SIZE.min(leaf_fri_params.max_constraint_degree()), + MemoryConfig { + max_access_adapter_n: 16, + ..Default::default() + }, + VmVerifierPvs::::width(), + ) + .with_max_segment_len((1 << 24) - 100), + native: Default::default(), + }; + + let leaf_committed_exe = { + let leaf_engine = BabyBearPoseidon2Engine::new(leaf_fri_params); + let leaf_program = CenoLeafVmVerifierConfig { + vk, + compiler_options: CompilerOptions::default(), + } + .build_program(); + + Arc::new(VmCommittedExe::commit( + leaf_program.into(), + leaf_engine.config.pcs(), + )) + }; + + let recursion_proving_keys = RecursionProvingKeys::keygen(leaf_fri_params, leaf_vm_config); + let leaf_prover = VmLocalProver::::new( + recursion_proving_keys.ceno_leaf_vm_pk.clone(), + leaf_committed_exe, + ); + + println!( + "Aggregation - Start leaf proof at: {:?}", + aggregation_start_timestamp.elapsed() + ); + let leaf_proof = SingleSegmentVmProver::prove(&leaf_prover, witness_stream); + println!( + "Aggregation - Completed leaf proof at: {:?}", + aggregation_start_timestamp.elapsed() + ); + + // _debug: export leaf proof + let json = serde_json::to_string(&leaf_proof).unwrap(); + let mut file = + File::create(format!("leaf_proof_{:?}.json", 0)).expect("Create export proof file"); + file.write_all(json.as_bytes()).expect("Export proof"); + + // Internal engine and config + let internal_engine = BabyBearPoseidon2Engine::new(internal_fri_params); + let internal_vm_config = NativeConfig { + system: SystemConfig::new( + SBOX_SIZE.min(internal_fri_params.max_constraint_degree()), + MemoryConfig { + max_access_adapter_n: 8, + ..Default::default() + }, + InternalVmVerifierPvs::::width(), + ) + .with_max_segment_len((1 << 24) - 100), + native: Default::default(), + }; + + // Construct internal vm, pk and vk + let internal_vm = VirtualMachine::new(internal_engine, internal_vm_config.clone()); + let internal_vm_pk = Arc::new({ + let vm_pk = internal_vm.keygen(); + assert!(vm_pk.max_constraint_degree <= internal_fri_params.max_constraint_degree()); + VmProvingKey { + fri_params: internal_fri_params, + vm_config: internal_vm_config, + vm_pk, + } + }); + let internal_vm_vk = internal_vm_pk.vm_pk.get_vk(); + + // Commit internal program + let internal_program = InternalVmVerifierConfig { + leaf_fri_params: leaf_fri_params, + internal_fri_params: internal_fri_params, + compiler_options: CompilerOptions::default(), + } + .build_program( + &recursion_proving_keys.ceno_leaf_vm_pk.vm_pk.get_vk(), + &internal_vm_vk, + ); + let internal_committed_exe = Arc::new(VmCommittedExe::::commit( + internal_program.into(), + internal_vm.engine.config.pcs(), + )); + let internal_prover = VmLocalProver::::new( + internal_vm_pk, + internal_committed_exe, + ); + + // Aggregate tree to root proof + let mut internal_node_idx = -1; + let mut internal_node_height = 0; + let mut proofs = vec![leaf_proof]; + + println!( + "Aggregation - Start internal aggregation at: {:?}", + aggregation_start_timestamp.elapsed() + ); + // We will always generate at least one internal proof, even if there is only one leaf + // proof, in order to shrink the proof size + while proofs.len() > 1 || internal_node_height == 0 { + let internal_inputs = InternalVmVerifierInput::chunk_leaf_or_internal_proofs( + internal_prover.committed_exe.get_program_commit().into(), + &proofs, + 1, // _debug + ); + proofs = internal_inputs + .into_iter() + .map(|input| { + internal_node_idx += 1; + let internal_proof = + SingleSegmentVmProver::prove(&internal_prover, input.write()); + // println!("Aggregation - Completed internal node (idx: {:?}) at height {:?}: {:?}", internal_node_idx, internal_node_height, aggregation_start_timestamp.elapsed()); + + // _debug: export + let json = serde_json::to_string(&internal_proof).unwrap(); + let mut file = File::create(format!( + "internal_proof_{:?}_height_{:?}.json", + internal_node_idx, internal_node_height + )) + .expect("Create export proof file"); + file.write_all(json.as_bytes()).expect("Export proof"); + + internal_proof + }) + .collect(); + internal_node_height += 1; + } + println!( + "Aggregation - Completed internal aggregation at: {:?}", + aggregation_start_timestamp.elapsed() + ); + println!("Aggregation - Final height: {:?}", internal_node_height); + + // let root_stark_proof = VmStarkProof { + // proof: proofs.pop().unwrap(), + // user_public_values: public_values, + // }; + + /* _debug: verify single passes + let log_blowup = 1; + let poseidon2_max_constraint_degree: usize = 3; + let fri_params = if matches!(std::env::var("OPENVM_FAST_TEST"), Ok(x) if &x == "1") { + FriParameters { + log_blowup, + log_final_poly_len: 0, + num_queries: 10, + proof_of_work_bits: 0, + } + } else { + standard_fri_params_with_100_bits_conjectured_security(log_blowup) + }; + + let engine = BabyBearPoseidon2Engine::new(fri_params); + let mut config = NativeConfig::aggregation(0, poseidon2_max_constraint_degree); + config.system.memory_config.max_access_adapter_n = 16; + + let vm = VirtualMachine::new(engine, config); + + let pk = vm.keygen(); + let result = vm.execute_and_generate(program, witness_stream).unwrap(); + let proofs = vm.prove(&pk, result); + for proof in proofs { + verify_single(&vm.engine, &pk.get_vk(), &proof).expect("Verification failed"); + } + */ + } + + #[test] + pub fn test_aggregation() { + let stack_size = 256 * 1024 * 1024; // 64 MB + + let handler = std::thread::Builder::new() + .stack_size(stack_size) + .spawn(aggregation_inner_thread) + .expect("Failed to spawn thread"); + + handler.join().expect("Thread panicked"); + } +} diff --git a/src/aggregation/scheme.rs b/src/aggregation/scheme.rs new file mode 100644 index 0000000..de7d343 --- /dev/null +++ b/src/aggregation/scheme.rs @@ -0,0 +1,86 @@ +use std::sync::Arc; + +use crate::zkvm_verifier::binding::{ZKVMProofInput, E, F}; +use crate::zkvm_verifier::verifier::verify_zkvm_proof; +use ceno_zkvm::structs::ZKVMVerifyingKey; +use mpcs::{Basefold, BasefoldRSParams}; +use openvm_circuit::arch::VirtualMachine; +use openvm_circuit::arch::VmConfig; +use openvm_circuit::{ + arch::{instructions::program::Program, SystemConfig}, + system::memory::tree::public_values::PUBLIC_VALUES_ADDRESS_SPACE_OFFSET, +}; +use openvm_continuations::verifier::{ + internal::types::VmStarkProof, root::types::RootVmVerifierInput, +}; +use openvm_continuations::C; +use openvm_native_circuit::NativeConfig; +use openvm_native_compiler::{conversion::CompilerOptions, prelude::*}; +use openvm_native_recursion::hints::Hintable; +use openvm_sdk::prover::vm::types::VmProvingKey; +use openvm_sdk::{ + config::AggregationTreeConfig, + keygen::AggStarkProvingKey, + prover::{ + vm::{local::VmLocalProver, SingleSegmentVmProver}, + RootVerifierLocalProver, + }, + NonRootCommittedExe, RootSC, SC, +}; +use openvm_stark_backend::{proof::Proof, Chip}; +use openvm_stark_sdk::config::baby_bear_poseidon2::BabyBearPoseidon2Engine; +use openvm_stark_sdk::{config::FriParameters, engine::StarkFriEngine}; +use serde::{Deserialize, Serialize}; + +/// Config to generate leaf VM verifier program. +pub struct CenoLeafVmVerifierConfig { + pub vk: ZKVMVerifyingKey>, + pub compiler_options: CompilerOptions, +} + +impl CenoLeafVmVerifierConfig { + pub fn build_program(&self) -> Program { + let mut builder = Builder::::default(); + + { + builder.cycle_tracker_start("VerifyCenoProof"); + + let zkvm_proof_input_variables = ZKVMProofInput::read(&mut builder); + verify_zkvm_proof(&mut builder, zkvm_proof_input_variables, &self.vk); + + builder.cycle_tracker_end("VerifyCenoProof"); + builder.halt(); + } + + builder.compile_isa_with_options(self.compiler_options) + } +} + +#[derive(Clone, Serialize, Deserialize)] +pub struct RecursionProvingKeys { + pub ceno_leaf_vm_pk: Arc>, + // pub internal_vm_pk: Arc>, + // pub internal_committed_exe: Arc, + // pub root_verifier_pk: RootVerifierProvingKey, +} + +impl RecursionProvingKeys { + pub fn keygen(leaf_fri_params: FriParameters, leaf_vm_config: NativeConfig) -> Self { + // let internal_vm_config = config.internal_vm_config(); + // let root_vm_config = config.root_verifier_vm_config(); + + let ceno_leaf_engine = BabyBearPoseidon2Engine::new(leaf_fri_params); + let ceno_leaf_vm_pk = Arc::new({ + let vm = VirtualMachine::new(ceno_leaf_engine, leaf_vm_config.clone()); + let vm_pk = vm.keygen(); + assert!(vm_pk.max_constraint_degree <= leaf_fri_params.max_constraint_degree()); + VmProvingKey { + fri_params: leaf_fri_params, + vm_config: leaf_vm_config, + vm_pk, + } + }); + + Self { ceno_leaf_vm_pk } + } +} diff --git a/src/arithmetics/mod.rs b/src/arithmetics/mod.rs index 77ccfed..392d142 100644 --- a/src/arithmetics/mod.rs +++ b/src/arithmetics/mod.rs @@ -203,6 +203,19 @@ pub fn dot_product( acc } +// In-place masking of a value array with randomness +pub fn mask_arr( + builder: &mut Builder, + a: &Array>, + mask: &Array>, +) { + builder.range(0, a.len()).for_each(|idx_vec, builder| { + let a_i = builder.get(a, idx_vec[0]); + let m_i = builder.get(mask, idx_vec[0]); + builder.set(a, idx_vec[0], a_i * m_i); + }); +} + pub fn reverse>( builder: &mut Builder, arr: &Array, @@ -320,6 +333,19 @@ pub fn nested_product( acc } +// Multiply all elements in an Array +pub fn arr_product( + builder: &mut Builder, + arr: &Array>, +) -> Ext { + let acc = builder.constant(C::EF::ONE); + iter_zip!(builder, arr).for_each(|ptr_vec, builder| { + let el = builder.iter_ptr_get(&arr, ptr_vec[0]); + builder.assign(&acc, acc * el); + }); + acc +} + // Generate alpha power challenges pub fn gen_alpha_pows( builder: &mut Builder, @@ -347,14 +373,13 @@ pub fn gen_alpha_pows( /// = \sum_{\mathbf{b}=0}^{max_idx} \prod_{i=0}^{n-1} (x_i y_i b_i + (1 - x_i)(1 - y_i)(1 - b_i)) pub fn eq_eval_less_or_equal_than( builder: &mut Builder, - opcode_proof: &ZKVMChipProofInputVariable, + // opcode_proof: &ZKVMChipProofInputVariable, + eq_bit_decomp: &Array>, a: &Array>, b: &Array>, ) -> Ext { builder.cycle_tracker_start("Compute eq_eval_less_or_equal_than"); - let eq_bit_decomp: Array> = opcode_proof - .num_instances_minus_one_bit_decomposition - .slice(builder, 0, b.len()); + let eq_bit_decomp: Array> = eq_bit_decomp.slice(builder, 0, b.len()); let one_ext: Ext = builder.constant(C::EF::ONE); let rp_len = builder.eval_expr(b.len() + C::N::ONE); diff --git a/src/lib.rs b/src/lib.rs index 04165c2..7b9edd0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,6 +5,7 @@ mod tower_verifier; mod transcript; pub mod zkvm_verifier; +mod aggregation; #[allow(dead_code)] mod e2e; mod extensions; diff --git a/src/tower_verifier/program.rs b/src/tower_verifier/program.rs index 4b2d101..bb39260 100644 --- a/src/tower_verifier/program.rs +++ b/src/tower_verifier/program.rs @@ -7,6 +7,7 @@ use crate::tower_verifier::binding::IOPProverMessageVecVariable; use crate::transcript::transcript_observe_label; use crate::zkvm_verifier::binding::TowerProofInputVariable; use ceno_zkvm::scheme::constants::NUM_FANIN; +use itertools::izip; use openvm_native_compiler::prelude::*; use openvm_native_compiler_derive::iter_zip; use openvm_native_recursion::challenger::{ @@ -113,8 +114,7 @@ pub fn iop_verifier_state_verify( let challenges: Array> = builder.dyn_array(max_num_variables_usize.clone()); let expected: Ext = builder.eval(out_claim.clone() + zero); - // _debug - // builder.cycle_tracker_start("IOPVerifierState::verify_round_and_update_state"); + builder.cycle_tracker_start("IOPVerifierState::verify_round_and_update_state"); builder .range(0, max_num_variables_usize.clone()) .for_each(|i_vec, builder| { @@ -142,8 +142,7 @@ pub fn iop_verifier_state_verify( builder.assign(&expected, p_r + zero); builder.set_value(&challenges, i, challenge); }); - // _debug - // builder.cycle_tracker_end("IOPVerifierState::verify_round_and_update_state"); + builder.cycle_tracker_end("IOPVerifierState::verify_round_and_update_state"); (challenges, expected) } @@ -318,6 +317,11 @@ pub fn verify_tower_proof( eval: initial_claim, }; + let next_layer_evals_output_len: Usize = builder + .eval(Usize::from(1) + num_prod_spec.clone() + Usize::from(2) * num_logup_spec.clone()); + let next_layer_evals: Array> = + builder.dyn_array(next_layer_evals_output_len); + builder .range(0, op_range.clone()) .for_each(|i_vec, builder| { @@ -331,8 +335,7 @@ pub fn verify_tower_proof( let max_degree = builder.constant(C::F::from_canonical_usize(3)); - // _debug - // builder.cycle_tracker_start("sumcheck verify"); + builder.cycle_tracker_start("sumcheck verify"); let (sub_rt, sub_e) = iop_verifier_state_verify( builder, challenger, @@ -342,150 +345,103 @@ pub fn verify_tower_proof( max_degree, unipoly_extrapolator, ); - // _debug - // builder.cycle_tracker_end("sumcheck verify"); + builder.cycle_tracker_end("sumcheck verify"); builder.cycle_tracker_start("check expected evaluation"); let eq_e = eq_eval(builder, &out_rt, &sub_rt, one, zero); - let expected_evaluation: Ext = builder.eval(zero + zero); - let alpha_acc: Ext = builder.eval(zero + one); - - builder - .range(0, num_prod_spec.clone()) - .for_each(|i_vec, builder| { - // _debug - // builder.cycle_tracker_start("accumulate expected eval for prod specs"); - let spec_index = i_vec[0]; - let skip = builder.get(&should_skip, spec_index.clone()); - let max_round = builder.get(&num_variables, spec_index); - let round_limit: RVar = builder.eval_expr(max_round - RVar::from(1)); - - let prod: Ext = builder.eval(zero + zero); - - // invariant: skip == 0 implies previous round_var is smaller than round_limit. - // - // if skip == 0 and current round_var is also not equal to round_limit, - // then we know round_var is also smaller than round_limit. - builder.if_eq(skip, var_zero.clone()).then(|builder| { - builder.if_ne(round_var, round_limit).then_or_else( - |builder| { - let prod_round_slice = proof.prod_specs_eval.get_inner( - builder, - spec_index.variable(), - round_var.variable(), - ); - builder.assign(&prod, one * one); - for j in 0..NUM_FANIN { - let prod_j = builder.get(&prod_round_slice, j); - builder.assign(&prod, prod * prod_j); - } - }, - |builder| { - builder.set_value(&should_skip, spec_index, var_one.clone()); - }, - ); - }); - - builder.assign(&expected_evaluation, expected_evaluation + alpha_acc * prod); - builder.assign(&alpha_acc, alpha_acc * alpha.clone()); - // _debug - // builder.cycle_tracker_end("accumulate expected eval for prod specs"); - }); - + let input_ctx_len: Usize = Usize::Var(builder.uninit()); let num_variables_len = num_variables.len(); - let logup_num_variables_slice = - num_variables.slice(builder, num_prod_spec.clone(), num_variables_len.clone()); - - builder - .range(0, num_logup_spec.clone()) - .for_each(|i_vec, builder| { - // _debug - // builder.cycle_tracker_start("accumulate expected eval for logup specs"); - let spec_index = i_vec[0]; - - let alpha_numerator: Ext<::F, ::EF> = - builder.eval(alpha_acc * one); - builder.assign(&alpha_acc, alpha_acc * alpha); - let alpha_denominator: Ext = builder.eval(alpha_acc * one); - builder.assign(&alpha_acc, alpha_acc * alpha); - - let idx: Var = - builder.eval(spec_index.variable() + num_prod_spec.get_var()); - let skip = builder.get(&should_skip, idx); - let max_round = builder.get(&logup_num_variables_slice, spec_index); - let round_limit: RVar = builder.eval_expr(max_round - RVar::from(1)); + builder.assign(&input_ctx_len, Usize::from(8) + num_variables_len.clone()); + let input_ctx: Array> = builder.dyn_array(input_ctx_len); + + builder.set(&input_ctx, 0, round_var); + builder.set(&input_ctx, 1, num_prod_spec.clone()); + builder.set(&input_ctx, 2, num_logup_spec.clone()); + builder.set( + &input_ctx, + 3, + Usize::from(proof.prod_specs_eval.inner_length), + ); + builder.set( + &input_ctx, + 4, + Usize::from(proof.prod_specs_eval.inner_inner_length), + ); + builder.set( + &input_ctx, + 5, + Usize::from(proof.logup_specs_eval.inner_length), + ); + builder.set( + &input_ctx, + 6, + Usize::from(proof.logup_specs_eval.inner_inner_length), + ); + builder.set(&input_ctx, 7, Usize::from(1)); - let prod: Ext = builder.eval(zero + zero); + let input_ctx_variables_slice = input_ctx.slice(builder, 8, input_ctx.len()); + iter_zip!(builder, input_ctx_variables_slice, num_variables).for_each( + |ptr_vec, builder| { + let n_v = builder.iter_ptr_get(&num_variables, ptr_vec[1]); + builder.iter_ptr_set(&input_ctx_variables_slice, ptr_vec[0], n_v); + }, + ); - builder.if_eq(skip, var_zero).then(|builder| { - builder.if_ne(round_var, round_limit).then_or_else( - |builder| { - let prod_round_slice = proof.logup_specs_eval.get_inner( - builder, - spec_index.variable(), - round_var.variable(), - ); - - let p1 = builder.get(&prod_round_slice, 0); - let p2 = builder.get(&prod_round_slice, 1); - let q1 = builder.get(&prod_round_slice, 2); - let q2 = builder.get(&prod_round_slice, 3); - builder.assign( - &prod, - alpha_numerator * (p1 * q2 + p2 * q1) - + alpha_denominator * (q1 * q2), - ); - }, - |builder| { - builder.set_value(&should_skip, idx, var_one.clone()); - }, - ); - }); + let challenges: Array> = builder.dyn_array(3); + builder.set(&challenges, 0, alpha.clone()); - builder.assign(&expected_evaluation, expected_evaluation + prod); - // _debug - // builder.cycle_tracker_end("accumulate expected eval for logup specs"); - }); + builder.sumcheck_layer_eval( + &input_ctx, + &challenges, + &proof.prod_specs_eval.data, + &proof.logup_specs_eval.data, + &next_layer_evals, + ); + let expected_evaluation = builder.get(&next_layer_evals, 0); builder.assign(&expected_evaluation, expected_evaluation * eq_e); builder.assert_ext_eq(expected_evaluation, sub_e); builder.cycle_tracker_end("check expected evaluation"); - // _debug - // builder.cycle_tracker_start("derive next layer's expected sum"); + builder.cycle_tracker_start("derive next layer's expected sum"); // derive single eval // rt' = r_merge || rt // r_merge.len() == ceil_log2(num_product_fanin) transcript_observe_label(builder, challenger, b"merge"); - // _debug - // builder.cycle_tracker_start("derive rt_prime"); + builder.cycle_tracker_start("derive rt_prime"); let r_merge = challenger.sample_ext(builder); let c1: Ext<::F, ::EF> = builder.eval(one - r_merge.clone()); let c2: Ext<::F, ::EF> = builder.eval(r_merge.clone()); - let coeffs = vec![c1, c2]; let rt_prime = extend(builder, &sub_rt, &r_merge); - // _debug - // builder.cycle_tracker_end("derive rt_prime"); + builder.cycle_tracker_end("derive rt_prime"); // generate next round challenge transcript_observe_label(builder, challenger, b"combine subset evals"); let new_alpha = challenger.sample_ext(builder); builder.assign(&alpha, new_alpha); - builder.assign(&alpha_acc, zero + one); - let next_round = builder.eval_expr(round_var + RVar::from(1)); + // Use native opcode + builder.set(&input_ctx, 7, Usize::from(0)); // Turn `in_round` off + builder.set(&challenges, 0, new_alpha.clone()); + builder.set(&challenges, 1, c1.clone()); + builder.set(&challenges, 2, c2.clone()); + + builder.sumcheck_layer_eval( + &input_ctx, + &challenges, + &proof.prod_specs_eval.data, + &proof.logup_specs_eval.data, + &next_layer_evals, + ); - let next_prod_spec_evals: Ext<::F, ::EF> = - builder.eval(zero + zero); // simple trick to avoid AddEI + let next_round = builder.eval_expr(round_var + RVar::from(1)); builder .range(0, num_prod_spec.clone()) .for_each(|i_vec, builder| { - // _debug - // builder.cycle_tracker_start("derive next layer for prod specs"); let spec_index = i_vec[0]; let skip = builder.get(&should_skip, spec_index.clone()); let max_round = builder.get(&num_variables, spec_index.clone()); @@ -493,54 +449,28 @@ pub fn verify_tower_proof( // now skip is 0 if and only if current round_var is smaller than round_limit. builder.if_eq(skip, var_zero.clone()).then(|builder| { - let prod_round_slice = proof.prod_specs_eval.get_inner( - builder, - spec_index.variable(), - round_var.variable(), - ); - let evals = fixed_dot_product(builder, &coeffs, &prod_round_slice, zero); - - builder.if_ne(next_round, round_limit).then_or_else( - |builder| { - let new_subsum: Ext = builder.eval(evals * alpha_acc); - builder.assign( - &next_prod_spec_evals, - next_prod_spec_evals + new_subsum, - ); - }, - // update point and eval only for last layer - |builder| { - let point_and_eval: PointAndEvalVariable = - builder.eval(PointAndEvalVariable { - point: PointVariable { - fs: rt_prime.clone(), - }, - eval: evals, - }); - builder.set_value( - &prod_spec_point_n_eval, - spec_index, - point_and_eval, - ); - }, - ); + builder.if_eq(next_round, round_limit).then(|builder| { + let evals_idx: Usize = builder.eval(spec_index + Usize::from(1)); + let evals = builder.get(&next_layer_evals, evals_idx); + + let point_and_eval: PointAndEvalVariable = + builder.eval(PointAndEvalVariable { + point: PointVariable { + fs: rt_prime.clone(), + }, + eval: evals, + }); + builder.set_value(&prod_spec_point_n_eval, spec_index, point_and_eval); + }); }); - - builder.assign(&alpha_acc, alpha_acc * alpha.clone()); - // _debug - // builder.cycle_tracker_end("derive next layer for prod specs"); }); - let next_logup_spec_evals: Ext<::F, ::EF> = - builder.eval(zero + zero); let logup_num_variables_slice = num_variables.slice(builder, num_prod_spec.clone(), num_variables_len.clone()); builder .range(0, num_logup_spec.clone()) .for_each(|i_vec, builder| { - // _debug - // builder.cycle_tracker_start("derive next layer for logup specs"); let spec_index = i_vec[0]; let max_round = builder.get(&logup_num_variables_slice, spec_index); let round_limit: RVar = builder.eval_expr(max_round - RVar::from(1)); @@ -548,70 +478,41 @@ pub fn verify_tower_proof( builder.eval(spec_index.variable() + num_prod_spec.get_var()); let skip = builder.get(&should_skip, idx); - let alpha_numerator: Ext = builder.eval(alpha_acc * one); - builder.assign(&alpha_acc, alpha_acc * alpha.clone()); - let alpha_denominator: Ext = builder.eval(alpha_acc * one); - builder.assign(&alpha_acc, alpha_acc * alpha.clone()); - // now skip is 0 if and only if current round_var is smaller than round_limit. builder.if_eq(skip, var_zero).then(|builder| { - let prod_round_slice = proof.logup_specs_eval.get_inner( - builder, - spec_index.variable(), - round_var.variable(), - ); - let p1 = builder.get(&prod_round_slice, 0); - let p2 = builder.get(&prod_round_slice, 1); - let q1 = builder.get(&prod_round_slice, 2); - let q2 = builder.get(&prod_round_slice, 3); - - let p_eval: Ext<::F, ::EF> = - builder.eval(zero + zero); - let q_eval: Ext<::F, ::EF> = - builder.eval(zero + zero); - builder.assign(&p_eval, p1 * coeffs[0] + p2 * coeffs[1]); - builder.assign(&q_eval, q1 * coeffs[0] + q2 * coeffs[1]); - - builder.if_ne(next_round, round_limit).then_or_else( - |builder| { - builder.assign( - &next_logup_spec_evals, - next_logup_spec_evals - + alpha_numerator * p_eval - + alpha_denominator * q_eval, - ); - }, - // update point and eval only for last layer - |builder| { - let p_eval: PointAndEvalVariable = - builder.eval(PointAndEvalVariable { - point: PointVariable { - fs: rt_prime.clone(), - }, - eval: p_eval, - }); - let q_eval: PointAndEvalVariable = - builder.eval(PointAndEvalVariable { - point: PointVariable { - fs: rt_prime.clone(), - }, - eval: q_eval, - }); - builder.set_value(&logup_spec_p_point_n_eval, spec_index, p_eval); - builder.set_value(&logup_spec_q_point_n_eval, spec_index, q_eval); - }, - ); + builder.if_eq(next_round, round_limit).then(|builder| { + let p_idx: Usize = builder.eval(idx + Usize::from(1)); + let q_idx: Usize = + builder.eval(idx + Usize::from(1) + num_logup_spec.clone()); + let p_eval = builder.get(&next_layer_evals, p_idx); + let q_eval = builder.get(&next_layer_evals, q_idx); + + let p_eval: PointAndEvalVariable = + builder.eval(PointAndEvalVariable { + point: PointVariable { + fs: rt_prime.clone(), + }, + eval: p_eval, + }); + let q_eval: PointAndEvalVariable = + builder.eval(PointAndEvalVariable { + point: PointVariable { + fs: rt_prime.clone(), + }, + eval: q_eval, + }); + builder.set_value(&logup_spec_p_point_n_eval, spec_index, p_eval); + builder.set_value(&logup_spec_q_point_n_eval, spec_index, q_eval); + }); }); - // _debug - // builder.cycle_tracker_end("derive next layer for logup specs"); }); + let output_eval = builder.get(&next_layer_evals, 0); builder.assign(&curr_pt, rt_prime.clone()); - builder.assign(&curr_eval, next_prod_spec_evals + next_logup_spec_evals); + builder.assign(&curr_eval, output_eval); builder.assign(&round, round + C::F::ONE); - // _debug - // builder.cycle_tracker_end("derive next layer's expected sum"); + builder.cycle_tracker_end("derive next layer's expected sum"); builder.assign( &next_rt, diff --git a/src/zkvm_verifier/binding.rs b/src/zkvm_verifier/binding.rs index 7759ea8..58e17d2 100644 --- a/src/zkvm_verifier/binding.rs +++ b/src/zkvm_verifier/binding.rs @@ -4,8 +4,8 @@ use crate::basefold_verifier::basefold::{ }; use crate::tower_verifier::binding::{ - IOPProverMessageVec, IOPProverMessageVecVariable, ThreeDimensionalVecVariable, - ThreeDimensionalVector, + IOPProverMessageVariable, IOPProverMessageVec, IOPProverMessageVecVariable, + ThreeDimensionalVecVariable, ThreeDimensionalVector, }; use crate::{arithmetics::ceil_log2, tower_verifier::binding::PointVariable}; use itertools::Itertools; @@ -498,3 +498,33 @@ pub struct GKRClaimEvaluation { pub point: PointVariable, pub poly: Usize, } + +#[derive(DslVariable, Clone)] +pub struct SepticExtensionVariable { + pub vs: Array>, +} + +impl From>> for SepticExtensionVariable { + fn from(slice: Array>) -> Self { + Self { vs: slice } + } +} + +#[derive(DslVariable, Clone)] +pub struct SepticPointVariable { + x: SepticExtensionVariable, + y: SepticExtensionVariable, + is_infinity: Usize, +} + +#[derive(DslVariable, Clone)] +pub struct EccQuarkProofVariable { + pub zerocheck_proof: IOPProverMessageVecVariable, + pub num_instances: Usize, + pub num_instances_minus_one_bit_decomposition: Array>, + pub num_vars: Usize, // next_pow2_instance_padding(proof.num_instances).ilog2() + pub evals: Array>, + pub rt: PointVariable, + pub sum: SepticPointVariable, + pub prefix_one_seq: Array>, +} diff --git a/src/zkvm_verifier/verifier.rs b/src/zkvm_verifier/verifier.rs index 4eb24b4..5b5308b 100644 --- a/src/zkvm_verifier/verifier.rs +++ b/src/zkvm_verifier/verifier.rs @@ -3,8 +3,9 @@ use super::binding::{ ZKVMProofInputVariable, }; use crate::arithmetics::{ - challenger_multi_observe, eq_eval, eval_ceno_expr_with_instance, eval_stacked_constant, - eval_stacked_wellform_address_vec, PolyEvaluator, UniPolyExtrapolator, + arr_product, challenger_multi_observe, eq_eval, eval_ceno_expr_with_instance, + eval_stacked_constant, eval_stacked_wellform_address_vec, mask_arr, reverse, PolyEvaluator, + UniPolyExtrapolator, }; use crate::basefold_verifier::basefold::{ BasefoldCommitmentVariable, RoundOpeningVariable, RoundVariable, @@ -17,7 +18,8 @@ use crate::basefold_verifier::verifier::batch_verify; use crate::tower_verifier::program::verify_tower_proof; use crate::transcript::transcript_observe_label; use crate::zkvm_verifier::binding::{ - GKRProofVariable, LayerProofVariable, SumcheckLayerProofVariable, + EccQuarkProofVariable, GKRProofVariable, LayerProofVariable, SepticExtensionVariable, + SumcheckLayerProofVariable, }; use crate::{ arithmetics::{ @@ -59,6 +61,8 @@ type E = BabyBearExt4; type Pcs = Basefold; const NUM_FANIN: usize = 2; +const SEPTIC_EXTENSION_DEGREE: usize = 7; +const SEPTIC_JACOBIAN_NUM_MLES: usize = 3 * SEPTIC_EXTENSION_DEGREE; pub fn transcript_group_observe_label( builder: &mut Builder, @@ -218,9 +222,7 @@ pub fn verify_zkvm_proof>( builder.set(&chip_indices, i, chip_proof.idx); }); - // _debug - // for (i, (circuit_name, chip_vk)) in vk.circuit_vks.iter().enumerate() { - for (i, (circuit_name, chip_vk)) in vk.circuit_vks.iter().take(100).enumerate() { + for (i, (circuit_name, chip_vk)) in vk.circuit_vks.iter().enumerate() { // _debug println!("=> circuit_name: {:?}", circuit_name); @@ -940,9 +942,14 @@ pub fn evaluate_selector( let zero = builder.constant(C::EF::ZERO); (expr, eq_eval(builder, out_point, in_point, one, zero)) } - SelectorType::Prefix(_, expr) => ( + SelectorType::Prefix(expr) => ( expr, - eq_eval_less_or_equal_than(builder, opcode_proof, out_point, in_point), + eq_eval_less_or_equal_than( + builder, + &opcode_proof.num_instances_minus_one_bit_decomposition, + out_point, + in_point, + ), ), SelectorType::OrderedSparse32 { indices, @@ -965,7 +972,7 @@ pub fn evaluate_selector( let sel = eq_eval_less_or_equal_than( builder, - opcode_proof, + &opcode_proof.num_instances_minus_one_bit_decomposition, &out_point_slice, &in_point_slice, ); @@ -973,13 +980,95 @@ pub fn evaluate_selector( (expression, eval) } + _ => { + unreachable!() + } + }; + + // TODO: just return eval and check it with respect to evals + let Expression::StructuralWitIn(wit_id, _) = expr else { + panic!("Wrong selector expression format"); + }; + let wit_id = wit_id.clone() as usize + offset_eq_id; + builder.set(evals, wit_id, eval); +} + +pub fn evaluate_ecc_selector( + builder: &mut Builder, + sel_type: &SelectorType, + evals: &Array>, + out_point: &Array>, + in_point: &Array>, + proof: &EccQuarkProofVariable, + offset_eq_id: usize, +) { + let (expr, eval) = match sel_type { + SelectorType::QuarkBinaryTreeLessThan(expr) => { + builder.assert_nonzero(&proof.num_instances); + // assert!(ctx.num_instances <= (1 << out_point.len())); + builder.assert_nonzero(&out_point.len()); + builder.assert_usize_eq(out_point.len(), in_point.len()); + let one: Ext = builder.constant(C::EF::ONE); + + let prefix_one_seq = reverse(builder, &proof.prefix_one_seq); + + let res: Ext = builder.constant(C::EF::ZERO); + let prefix_one_seq_0 = builder.get(&prefix_one_seq, 0); + + builder + .if_ne(prefix_one_seq_0.clone(), Usize::from(0)) + .then(|builder| { + builder.assert_usize_eq(prefix_one_seq_0.clone(), Usize::from(1)); + let out_point_0 = builder.get(out_point, 0); + let in_point_0 = builder.get(in_point, 0); + builder.assign(&res, (one - out_point_0) * (one - in_point_0)); + }); + + builder + .range(1, out_point.len()) + .for_each(|idx_vec, builder| { + let i = idx_vec[0]; + + let num_prefix_one_lhs = builder.get(&prefix_one_seq, i); + let out_point_i = builder.get(&out_point, i); + let in_point_i = builder.get(&in_point, i); + + let lhs_res: Ext = builder.constant(C::EF::ZERO); + builder + .if_ne(num_prefix_one_lhs, Usize::from(0)) + .then(|builder| { + let out_point_slice = out_point.slice(builder, 0, i); + let in_point_slice = in_point.slice(builder, 0, i); + + let eq_eval = eq_eval_less_or_equal_than( + builder, + &proof.num_instances_minus_one_bit_decomposition, + &out_point_slice, + &in_point_slice, + ); + builder.assign( + &lhs_res, + (one - out_point_i) * (one - in_point_i) * eq_eval, + ); + }); + + let rhs_res: Ext = builder.constant(C::EF::ZERO); + builder.assign(&rhs_res, out_point_i * in_point_i * res); + builder.assign(&res, lhs_res + rhs_res); + }); + + (expr, res) + } + _ => { + unreachable!() + } }; // TODO: just return eval and check it with respect to evals let Expression::StructuralWitIn(wit_id, _) = expr else { panic!("Wrong selector expression format"); }; - let wit_id = *wit_id as usize + offset_eq_id; + let wit_id = wit_id.clone() as usize + offset_eq_id; builder.set(evals, wit_id, eval); } @@ -1465,3 +1554,228 @@ pub fn verify_table_proof( rt_tower.fs } + +pub fn verify_ecc_proof( + builder: &mut Builder, + challenger: &mut DuplexChallengerVariable, + proof: EccQuarkProofVariable, + unipoly_extrapolator: &mut UniPolyExtrapolator, +) { + let num_vars = proof.num_vars.clone(); + let one = builder.constant(C::EF::ONE); + let zero = builder.constant(C::EF::ZERO); + + // Derive out_rt + transcript_observe_label(builder, challenger, b"ecc"); + let out_rt: Array> = builder.dyn_array(num_vars.clone()); + builder + .range(0, num_vars.clone()) + .for_each(|idx_vec, builder| { + let e = challenger.sample_ext(builder); + builder.set(&out_rt, idx_vec[0], e); + }); + + // Derive alpha_pows + transcript_observe_label(builder, challenger, b"ecc_alpha"); + let alpha_pows = gen_alpha_pows( + builder, + challenger, + Usize::from(SEPTIC_EXTENSION_DEGREE * 3 + SEPTIC_EXTENSION_DEGREE * 2), + ); + + let zero_ext: Ext = builder.constant(C::EF::ZERO); + let three_f: Felt = builder.constant(C::F::from_canonical_u32(3)); + let num_vars_f = builder.unsafe_cast_var_to_felt(num_vars.get_var()); + let (rt, expected_evaluation) = iop_verifier_state_verify( + builder, + challenger, + &zero_ext, + &proof.zerocheck_proof, + num_vars_f, + three_f, + unipoly_extrapolator, + ); + + // Calculate v1, v2, v3, v4, v5 + let cord_slice = proof.evals.slice(builder, 2, proof.evals.len()); + let s0: SepticExtensionVariable = + cord_slice.slice(builder, 0, SEPTIC_EXTENSION_DEGREE).into(); + let x0: SepticExtensionVariable = cord_slice + .slice( + builder, + SEPTIC_EXTENSION_DEGREE, + 2 * SEPTIC_EXTENSION_DEGREE, + ) + .into(); + let y0: SepticExtensionVariable = cord_slice + .slice( + builder, + 2 * SEPTIC_EXTENSION_DEGREE, + 3 * SEPTIC_EXTENSION_DEGREE, + ) + .into(); + let x1: SepticExtensionVariable = cord_slice + .slice( + builder, + 3 * SEPTIC_EXTENSION_DEGREE, + 4 * SEPTIC_EXTENSION_DEGREE, + ) + .into(); + let y1: SepticExtensionVariable = cord_slice + .slice( + builder, + 4 * SEPTIC_EXTENSION_DEGREE, + 5 * SEPTIC_EXTENSION_DEGREE, + ) + .into(); + let x3: SepticExtensionVariable = cord_slice + .slice( + builder, + 5 * SEPTIC_EXTENSION_DEGREE, + 6 * SEPTIC_EXTENSION_DEGREE, + ) + .into(); + let y3: SepticExtensionVariable = cord_slice + .slice( + builder, + 6 * SEPTIC_EXTENSION_DEGREE, + 7 * SEPTIC_EXTENSION_DEGREE, + ) + .into(); + let s0_squared = septic_ext_squared(builder, &s0); + + let v1: SepticExtensionVariable = builder.dyn_array(SEPTIC_EXTENSION_DEGREE).into(); + let v2: SepticExtensionVariable = builder.dyn_array(SEPTIC_EXTENSION_DEGREE).into(); + let v3: SepticExtensionVariable = builder.dyn_array(SEPTIC_EXTENSION_DEGREE).into(); + let v4: SepticExtensionVariable = builder.dyn_array(SEPTIC_EXTENSION_DEGREE).into(); + let v5: SepticExtensionVariable = builder.dyn_array(SEPTIC_EXTENSION_DEGREE).into(); + + for i in 0..SEPTIC_EXTENSION_DEGREE { + let s0_i = builder.get(&s0.vs, i); + let x0_i = builder.get(&x0.vs, i); + let x1_i = builder.get(&x1.vs, i); + let x3_i = builder.get(&x3.vs, i); + let y0_i = builder.get(&y0.vs, i); + let y1_i = builder.get(&y1.vs, i); + let y3_i = builder.get(&y3.vs, i); + let s0_squared_i = builder.get(&s0_squared.vs, i); + + builder.set(&v1.vs, i, s0_i * (x0_i - x1_i) - (y0_i - y1_i)); + builder.set(&v2.vs, i, s0_squared_i - x0_i - x1_i - x3_i); + builder.set(&v3.vs, i, s0_i * (x0_i - x3_i) - (y0_i + y3_i)); + builder.set(&v4.vs, i, x3_i - x0_i); + builder.set(&v5.vs, i, y3_i - y0_i); + } + + let mask1 = alpha_pows.slice(builder, 0, SEPTIC_EXTENSION_DEGREE); + let mask2 = alpha_pows.slice( + builder, + SEPTIC_EXTENSION_DEGREE, + 2 * SEPTIC_EXTENSION_DEGREE, + ); + let mask3 = alpha_pows.slice( + builder, + 2 * SEPTIC_EXTENSION_DEGREE, + 3 * SEPTIC_EXTENSION_DEGREE, + ); + let mask4 = alpha_pows.slice( + builder, + 3 * SEPTIC_EXTENSION_DEGREE, + 4 * SEPTIC_EXTENSION_DEGREE, + ); + let mask5 = alpha_pows.slice( + builder, + 4 * SEPTIC_EXTENSION_DEGREE, + 5 * SEPTIC_EXTENSION_DEGREE, + ); + + mask_arr(builder, &v1.vs, &mask1); + mask_arr(builder, &v2.vs, &mask2); + mask_arr(builder, &v3.vs, &mask3); + mask_arr(builder, &v4.vs, &mask4); + mask_arr(builder, &v5.vs, &mask5); + + // Evaluate selector expression + let sel_add_expr = SelectorType::::QuarkBinaryTreeLessThan(Expression::StructuralWitIn( + 0, + // this value doesn't matter, as we only need structural id + StackedConstantSequence { max_value: 0 }, + )); + let sel_evals: Array> = builder.dyn_array(1); + evaluate_ecc_selector(builder, &sel_add_expr, &sel_evals, &out_rt, &rt, &proof, 0); + let expected_sel_add = builder.get(&sel_evals, 0); + + // Assertions + let proof_eval_0 = builder.get(&proof.evals, 0); + builder.assert_ext_eq(proof_eval_0, expected_sel_add); + + let e = eq_eval(builder, &out_rt, &rt, one, zero); + let out_rt_prod = arr_product(builder, &out_rt); + let rt_prod = arr_product(builder, &rt); + let expected_sel_bypass: Ext = builder.uninit(); + builder.assign( + &expected_sel_bypass, + e - expected_sel_add - (out_rt_prod * rt_prod), + ); + + let proof_eval_1 = builder.get(&proof.evals, 1); + builder.assert_ext_eq(proof_eval_1, expected_sel_bypass); + + let add_evaluations: Ext = builder.constant(C::EF::ZERO); + let bypass_evaluations: Ext = builder.constant(C::EF::ZERO); + + for i in 0..SEPTIC_EXTENSION_DEGREE { + let v1_i = builder.get(&v1.vs, i); + let v2_i = builder.get(&v2.vs, i); + let v3_i = builder.get(&v3.vs, i); + let v4_i = builder.get(&v4.vs, i); + let v5_i = builder.get(&v5.vs, i); + + builder.assign(&add_evaluations, add_evaluations + v1_i + v2_i + v3_i); + builder.assign(&bypass_evaluations, bypass_evaluations + v4_i + v5_i); + } + + let calculated_evaluation: Ext = builder.uninit(); + builder.assign( + &calculated_evaluation, + add_evaluations * expected_sel_add + bypass_evaluations * expected_sel_bypass, + ); + builder.assert_ext_eq(expected_evaluation, calculated_evaluation); +} + +pub fn septic_ext_squared( + builder: &mut Builder, + a: &SepticExtensionVariable, +) -> SepticExtensionVariable { + let r: Array> = builder.dyn_array(SEPTIC_EXTENSION_DEGREE); + + let two_ext: Ext = builder.constant(C::EF::TWO); + let five_ext: Ext = builder.constant(C::EF::from_canonical_u32(5)); + + for i in 0..SEPTIC_EXTENSION_DEGREE { + for j in (i + 1)..SEPTIC_EXTENSION_DEGREE { + let mut index = i + j; + + let i_term = builder.get(&a.vs, i); + let j_term = builder.get(&a.vs, j); + + let term: Ext = builder.uninit(); + builder.assign(&term, two_ext * i_term * j_term); + + if index < 7 { + let r_v = builder.get(&r, index); + builder.set(&r, index, r_v + term); + } else { + index -= 7; + // x^7 = 2x + 5 + let r_v_i = builder.get(&r, index); + let r_v_i_1 = builder.get(&r, index + 1); + + builder.set(&r, index, r_v_i + five_ext * term); + builder.set(&r, index + 1, r_v_i_1 + two_ext * term); + } + } + } + + r.into() +}