diff --git a/.gitignore b/.gitignore index 187c565..10b3668 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ *~ *.swp *.swo +*.csv .bazelrc.local .cache .devcontainer/ diff --git a/Cargo.lock b/Cargo.lock index 2363deb..7206a55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -68,7 +68,7 @@ dependencies = [ "libaes", "num-bigint 0.4.6", "p256", - "sha2", + "sha2 0.10.9", "thiserror 1.0.69", ] @@ -339,6 +339,7 @@ checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", + "ark-r1cs-std", "ark-std 0.5.0", ] @@ -363,7 +364,7 @@ dependencies = [ "hashbrown 0.14.5", "merlin", "rayon", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -543,6 +544,21 @@ dependencies = [ "syn 2.0.104", ] +[[package]] +name = "ark-groth16" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88f1d0f3a534bb54188b8dcc104307db6c56cdae574ddc3212aec0625740fc7e" +dependencies = [ + "ark-crypto-primitives", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-relations", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + [[package]] name = "ark-grumpkin" version = "0.5.0" @@ -584,6 +600,23 @@ dependencies = [ "rayon", ] +[[package]] +name = "ark-r1cs-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-relations", + "ark-std 0.5.0", + "educe", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "tracing", +] + [[package]] name = "ark-relations" version = "0.5.1" @@ -706,6 +739,12 @@ dependencies = [ "arrayvec", ] +[[package]] +name = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + [[package]] name = "arrayref" version = "0.3.9" @@ -1100,7 +1139,7 @@ dependencies = [ "digest 0.10.7", "itertools 0.13.0", "lazy_static", - "sha2", + "sha2 0.10.9", "stackalloc", "thiserror 2.0.12", ] @@ -1292,6 +1331,12 @@ dependencies = [ "constant_time_eq", ] +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.9.0" @@ -1365,15 +1410,42 @@ dependencies = [ "num-bigint 0.4.6", ] +[[package]] +name = "bonsai-sdk" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bce8d6acc5286a16e94c29e9c885d1869358885e08a6feeb6bc54e36fe20055" +dependencies = [ + "duplicate", + "maybe-async", + "reqwest", + "serde", + "thiserror 1.0.69", +] + [[package]] name = "borsh" version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" dependencies = [ + "borsh-derive", "cfg_aliases", ] +[[package]] +name = "borsh-derive" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" +dependencies = [ + "once_cell", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "brillig" version = "1.0.0-beta.6" @@ -1406,6 +1478,16 @@ dependencies = [ "safe-regex", ] +[[package]] +name = "build-utils" +version = "0.0.11" +source = "git+https://github.com/eth-act/ere#1ad15f73793d232f6d7b2a6228f1e1299cae497b" +dependencies = [ + "cargo_metadata 0.19.2", + "thiserror 2.0.12", + "tracing", +] + [[package]] name = "bumpalo" version = "3.19.0" @@ -1435,9 +1517,9 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.10.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "441473f2b4b0459a68628c744bc61d23e730fb00128b841d30fa4bb3972257e4" +checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", @@ -1455,6 +1537,9 @@ name = "bytes" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +dependencies = [ + "serde", +] [[package]] name = "bytesize" @@ -1494,6 +1579,20 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.26", + "serde", + "serde_json", + "thiserror 2.0.12", +] + [[package]] name = "cast" version = "0.3.0" @@ -1807,6 +1906,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation" version = "0.10.1" @@ -1823,6 +1932,17 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "libc", +] + [[package]] name = "cpp_demangle" version = "0.4.4" @@ -2153,6 +2273,37 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn 2.0.104", +] + [[package]] name = "derive_more" version = "0.99.20" @@ -2298,6 +2449,12 @@ dependencies = [ "syn 2.0.104", ] +[[package]] +name = "docker-generate" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf673e0848ef09fa4aeeba78e681cf651c0c7d35f76ee38cec8e55bc32fa111" + [[package]] name = "downcast-rs" version = "1.2.1" @@ -2318,6 +2475,16 @@ dependencies = [ "tokio", ] +[[package]] +name = "duplicate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de78e66ac9061e030587b2a2e75cc88f22304913c907b11307bca737141230cb" +dependencies = [ + "heck 0.4.1", + "proc-macro-error", +] + [[package]] name = "dyn-clone" version = "1.0.20" @@ -2424,6 +2591,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + [[package]] name = "enum-map" version = "2.7.3" @@ -2534,6 +2710,44 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "erased-serde" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" +dependencies = [ + "serde", + "typeid", +] + +[[package]] +name = "ere-risc0" +version = "0.0.11" +source = "git+https://github.com/eth-act/ere#1ad15f73793d232f6d7b2a6228f1e1299cae497b" +dependencies = [ + "anyhow", + "borsh", + "build-utils", + "cargo_metadata 0.19.2", + "risc0-build", + "risc0-zkvm", + "serde", + "thiserror 2.0.12", + "tracing", + "zkvm-interface", +] + +[[package]] +name = "ere-risc0-sha256" +version = "0.1.0" +dependencies = [ + "ere-risc0", + "rand 0.8.5", + "sha2 0.10.9", + "utils", + "zkvm-interface", +] + [[package]] name = "errno" version = "0.3.13" @@ -2715,6 +2929,33 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -2986,7 +3227,7 @@ dependencies = [ "getrandom 0.2.16", "k256", "serde", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -3157,6 +3398,15 @@ dependencies = [ "foldhash", ] +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + [[package]] name = "heapless" version = "0.7.17" @@ -3524,6 +3774,12 @@ dependencies = [ "syn 2.0.104", ] +[[package]] +name = "include_bytes_aligned" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee796ad498c8d9a1d68e477df8f754ed784ef875de1414ebdaf169f70a6a784" + [[package]] name = "indenter" version = "0.3.3" @@ -3869,7 +4125,7 @@ dependencies = [ "elliptic-curve", "once_cell", "serdect", - "sha2", + "sha2 0.10.9", "signature", ] @@ -3933,6 +4189,29 @@ dependencies = [ "regex", ] +[[package]] +name = "lazy-regex" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60c7310b93682b36b98fa7ea4de998d3463ccbebd94d935d6b48ba5b6ffa7126" +dependencies = [ + "lazy-regex-proc_macros", + "once_cell", + "regex", +] + +[[package]] +name = "lazy-regex-proc_macros" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ba01db5ef81e17eb10a5e0f2109d1b3a3e29bac3070fdbd7d156bf7dbd206a1" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.104", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -4066,6 +4345,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "matchers" version = "0.1.0" @@ -4081,6 +4369,17 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +[[package]] +name = "maybe-async" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "memchr" version = "2.7.5" @@ -4114,6 +4413,21 @@ dependencies = [ "zeroize", ] +[[package]] +name = "metal" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +dependencies = [ + "bitflags 2.9.1", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + [[package]] name = "mime" version = "0.3.17" @@ -4238,6 +4552,12 @@ dependencies = [ "libc", ] +[[package]] +name = "no_std_strings" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5b0c77c1b780822bc749a33e39aeb2c07584ab93332303babeabb645298a76e" + [[package]] name = "nohash-hasher" version = "0.2.0" @@ -4733,6 +5053,15 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + [[package]] name = "object" version = "0.36.7" @@ -4799,7 +5128,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "primeorder", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -5650,7 +5979,7 @@ dependencies = [ "plonky2", "plonky2_u32", "rand 0.8.5", - "sha2", + "sha2 0.10.9", "utils", ] @@ -6199,7 +6528,7 @@ dependencies = [ "prost 0.12.6", "prost-build 0.12.6", "prost-derive 0.12.6", - "sha2", + "sha2 0.10.9", "smallvec", "spin 0.10.0", "symbolic-demangle", @@ -6827,7 +7156,9 @@ checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" dependencies = [ "base64 0.22.1", "bytes", + "futures-channel", "futures-core", + "futures-util", "http", "http-body", "http-body-util", @@ -6847,12 +7178,14 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-rustls", + "tokio-util", "tower", "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", "webpki-roots 1.0.2", ] @@ -6888,7 +7221,7 @@ dependencies = [ "once_cell", "revm-primitives", "ripemd", - "sha2", + "sha2 0.10.9", "substrate-bn", ] @@ -6950,6 +7283,224 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "risc0-binfmt" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62eb7025356a233c1bc267c458a2ce56fcfc89b136d813c8a77be14ef1eaf2b1" +dependencies = [ + "anyhow", + "borsh", + "derive_more 2.0.1", + "elf", + "lazy_static", + "postcard", + "risc0-zkp", + "risc0-zkvm-platform", + "semver 1.0.26", + "serde", + "tracing", +] + +[[package]] +name = "risc0-build" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62ffc0f135e6c1e9851e7e19438d03ff41a9d49199ee4f6c17b8bb30b4f83910" +dependencies = [ + "anyhow", + "cargo_metadata 0.19.2", + "derive_builder", + "dirs", + "docker-generate", + "hex", + "risc0-binfmt", + "risc0-zkos-v1compat", + "risc0-zkp", + "risc0-zkvm-platform", + "rzup", + "semver 1.0.26", + "serde", + "serde_json", + "stability", + "tempfile", +] + +[[package]] +name = "risc0-circuit-keccak" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0094af5a57b020388a03bdd3834959c7d62723f1687be81414ade25104d93263" +dependencies = [ + "anyhow", + "bytemuck", + "paste", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-core", + "risc0-zkp", + "tracing", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ebded45c902c2b6939924a1cddd1d06b5d1d4ad1531e8798ebfee78f9c038d" +dependencies = [ + "anyhow", + "bytemuck", + "hex", + "metal", + "risc0-core", + "risc0-zkp", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15030849f8356f01f23c74b37dbfa4283100b594eb634109993e9e005ef45f64" +dependencies = [ + "anyhow", + "bit-vec 0.8.0", + "bytemuck", + "derive_more 2.0.1", + "paste", + "risc0-binfmt", + "risc0-core", + "risc0-zkp", + "serde", + "tracing", +] + +[[package]] +name = "risc0-core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317bbf70a8750b64d4fd7a2bdc9d7d5f30d8bb305cae486962c797ef35c8d08e" +dependencies = [ + "bytemuck", + "bytemuck_derive", + "rand_core 0.6.4", +] + +[[package]] +name = "risc0-groth16" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cf5d0b673d5fc67a89147c2e9c53134707dcc8137a43d1ef06b4ff68e99b74f" +dependencies = [ + "anyhow", + "ark-bn254 0.5.0", + "ark-ec 0.5.0", + "ark-groth16", + "ark-serialize 0.5.0", + "bytemuck", + "hex", + "num-bigint 0.4.6", + "num-traits", + "risc0-binfmt", + "risc0-zkp", + "serde", + "stability", +] + +[[package]] +name = "risc0-sha256-guest" +version = "0.1.0" +dependencies = [ + "risc0-zkvm", + "sha2 0.10.6", +] + +[[package]] +name = "risc0-zkos-v1compat" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f76c479b69d1987cb54ac72dcc017197296fdcd6daf78fafc10cbbd3a167a7de" +dependencies = [ + "include_bytes_aligned", + "no_std_strings", +] + +[[package]] +name = "risc0-zkp" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a287e9cd6d7b3b38eeb49c62090c46a1935922309fbd997a9143ed8c43c8f3cb" +dependencies = [ + "anyhow", + "blake2", + "borsh", + "bytemuck", + "cfg-if", + "digest 0.10.7", + "hex", + "hex-literal", + "metal", + "paste", + "rand_core 0.6.4", + "risc0-core", + "risc0-zkvm-platform", + "serde", + "sha2 0.10.9", + "stability", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9684b333c1c5d83f29ce2a92314ccfafd9d8cdfa6c4e19c07b97015d2f1eb9d0" +dependencies = [ + "anyhow", + "bincode", + "bonsai-sdk", + "borsh", + "bytemuck", + "bytes", + "derive_more 2.0.1", + "getrandom 0.2.16", + "hex", + "lazy-regex", + "prost 0.13.5", + "risc0-binfmt", + "risc0-build", + "risc0-circuit-keccak", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-groth16", + "risc0-zkos-v1compat", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "rzup", + "semver 1.0.26", + "serde", + "sha2 0.10.9", + "stability", + "tempfile", + "tracing", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cae9cb2c2f6cab2dfa395ea6e2576713929040c7fb0c5f4150d13e1119d18686" +dependencies = [ + "bytemuck", + "cfg-if", + "getrandom 0.2.16", + "getrandom 0.3.3", + "libm", + "stability", +] + [[package]] name = "rlp" version = "0.5.2" @@ -6982,6 +7533,16 @@ dependencies = [ "serde", ] +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + [[package]] name = "rrs-succinct" version = "0.1.0" @@ -7056,7 +7617,7 @@ version = "7.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d38ff6bf570dc3bb7100fce9f7b60c33fa71d80e88da3f2580df4ff2bdded74" dependencies = [ - "sha2", + "sha2 0.10.9", "walkdir", ] @@ -7173,7 +7734,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19787cda76408ec5404443dc8b31795c87cd8fec49762dc75fa727740d34acc1" dependencies = [ - "core-foundation", + "core-foundation 0.10.1", "core-foundation-sys", "jni", "log", @@ -7229,6 +7790,21 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +[[package]] +name = "rzup" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "400558bf12d4292a7804093b60a437ba8b0219ea7d53716b2c010a0d31e5f4a8" +dependencies = [ + "semver 1.0.26", + "serde", + "strum 0.26.3", + "tempfile", + "thiserror 2.0.12", + "toml 0.8.23", + "yaml-rust2", +] + [[package]] name = "safe-lock" version = "0.1.4" @@ -7436,7 +8012,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ "bitflags 2.9.1", - "core-foundation", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -7671,7 +8247,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_cbor", - "sha2", + "sha2 0.10.9", "utils", ] @@ -7679,7 +8255,7 @@ dependencies = [ name = "sha-lib" version = "0.1.0" dependencies = [ - "sha2", + "sha2 0.10.9", ] [[package]] @@ -7698,6 +8274,16 @@ dependencies = [ "utils", ] +[[package]] +name = "sha2" +version = "0.10.6" +source = "git+https://github.com/risc0/RustCrypto-hashes?tag=sha2-v0.10.6-risczero.0#7fd6900c4f637bd15ee2642dfa77110f8f1ad065" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + [[package]] name = "sha2" version = "0.10.9" @@ -7718,7 +8304,7 @@ dependencies = [ "async-trait", "bytes", "hex", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -7921,7 +8507,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05372b4e3eecca255ba8e385f8dc294861a3b4ea0b0a9946873e39941011db4c" dependencies = [ "anyhow", - "cargo_metadata", + "cargo_metadata 0.18.1", "chrono", "clap", "dirs", @@ -8098,7 +8684,7 @@ dependencies = [ "p3-poseidon2 0.2.2-succinct", "p3-symmetric 0.2.2-succinct", "serde", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -8131,7 +8717,7 @@ dependencies = [ "serde", "serde_json", "serial_test", - "sha2", + "sha2 0.10.9", "sp1-core-executor", "sp1-core-machine", "sp1-primitives", @@ -8274,7 +8860,7 @@ dependencies = [ "p3-symmetric 0.2.2-succinct", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "sp1-core-machine", "sp1-recursion-compiler", "sp1-stark", @@ -8413,6 +8999,16 @@ dependencies = [ "spongefish", ] +[[package]] +name = "stability" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" +dependencies = [ + "quote", + "syn 2.0.104", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -9169,6 +9765,12 @@ dependencies = [ "url", ] +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + [[package]] name = "typenum" version = "1.18.0" @@ -9469,6 +10071,19 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.77" @@ -9988,6 +10603,17 @@ dependencies = [ "tap", ] +[[package]] +name = "yaml-rust2" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a1a1c0bc9823338a3bdf8c61f994f23ac004c6fa32c08cd152984499b445e8d" +dependencies = [ + "arraydeque", + "encoding_rs", + "hashlink", +] + [[package]] name = "yansi" version = "1.0.1" @@ -10146,11 +10772,24 @@ dependencies = [ "pasta_curves 0.5.1", "rand 0.8.5", "serde", - "sha2", + "sha2 0.10.9", "sha3 0.10.8", "subtle", ] +[[package]] +name = "zkvm-interface" +version = "0.0.11" +source = "git+https://github.com/eth-act/ere#1ad15f73793d232f6d7b2a6228f1e1299cae497b" +dependencies = [ + "auto_impl", + "bincode", + "erased-serde", + "indexmap 2.10.0", + "serde", + "thiserror 2.0.12", +] + [[package]] name = "zstd" version = "0.13.3" diff --git a/Cargo.toml b/Cargo.toml index 6be7c6c..a9b65bd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,8 @@ members = [ "plonky3-sp1/script", "provekit", "utils", + "ere/risc0", + "ere/guests/sha256", ] exclude = [ "plonky3-sp1/program", # Should be excluded, compiled for the Succinct toolchain via sp1_helper in script/build.rs diff --git a/ere/guests/sha256/Cargo.toml b/ere/guests/sha256/Cargo.toml new file mode 100644 index 0000000..4ca3bc6 --- /dev/null +++ b/ere/guests/sha256/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "risc0-sha256-guest" +version = "0.1.0" +edition = "2024" + +[dependencies] +risc0-zkvm = { version = "2.2", default-features = false, features = [ + "std", + "unstable", +] } +sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.6-risczero.0" } diff --git a/ere/guests/sha256/src/main.rs b/ere/guests/sha256/src/main.rs new file mode 100644 index 0000000..d9e537b --- /dev/null +++ b/ere/guests/sha256/src/main.rs @@ -0,0 +1,7 @@ +use risc0_zkvm::{guest::env, sha, sha::Sha256}; + +fn main() { + let data: Vec = env::read(); + let hash = sha::Impl::hash_bytes(&data); + env::commit(&hash) +} diff --git a/ere/risc0/Cargo.toml b/ere/risc0/Cargo.toml new file mode 100644 index 0000000..bfbb349 --- /dev/null +++ b/ere/risc0/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "ere-risc0-sha256" +version = "0.1.0" +edition = "2024" + +[dependencies] +zkvm-interface = { git = "https://github.com/eth-act/ere", package = "zkvm-interface" } +ere-risc0 = { git = "https://github.com/eth-act/ere", package = "ere-risc0" } +utils = { workspace = true } +rand = { workspace = true } +sha2 = { workspace = true } + +[[bench]] +name = "sha256_bench" +harness = false diff --git a/ere/risc0/benches/sha256_bench.rs b/ere/risc0/benches/sha256_bench.rs new file mode 100644 index 0000000..ef3b046 --- /dev/null +++ b/ere/risc0/benches/sha256_bench.rs @@ -0,0 +1,5 @@ +use ere_risc0_sha256::bench_sha256; + +fn main() { + bench_sha256(); +} diff --git a/ere/risc0/src/lib.rs b/ere/risc0/src/lib.rs new file mode 100644 index 0000000..a6b4b69 --- /dev/null +++ b/ere/risc0/src/lib.rs @@ -0,0 +1,79 @@ +use ere_risc0::{EreRisc0, RV32_IM_RISC0_ZKVM_ELF, Risc0Program}; +use rand::RngCore; +use std::collections::HashMap; +use std::path::Path; +use std::time::Instant; +use utils::bench::{Metrics, benchmark}; +use zkvm_interface::{Compiler, Input, ProverResourceType, zkVM}; + +const INPUT_EXP: [u8; 5] = [8, 9, 10, 11, 12]; +const CSV_OUTPUT: &str = "risc0_sha256.csv"; + +/// Risc0 SHA-256 benchmark. +struct Sha256Benchmark { + program: Risc0Program, + inputs: HashMap, +} + +impl Sha256Benchmark { + /// Compiles the guest program and generates all necessary inputs. + fn new(exponents: &[u8]) -> Self { + let guest_relative = Path::new("../guests/sha256"); + let program = RV32_IM_RISC0_ZKVM_ELF + .compile(guest_relative) + .expect("Failed to compile guest program"); + + let inputs = exponents + .iter() + .map(|&exp| { + let size = 1usize << exp; + let mut data = vec![0u8; size]; + rand::thread_rng().fill_bytes(&mut data); + let static_data: &'static [u8] = Box::leak(data.into_boxed_slice()); + (exp, (size, static_data)) + }) + .collect(); + + Self { program, inputs } + } + + /// Runs a single benchmark iteration. + fn run(&self, input_exp: u8) -> Metrics { + let &(size, test_data) = self + .inputs + .get(&input_exp) + .expect("Input not found for exponent"); + + let zkvm = EreRisc0::new(self.program.clone(), ProverResourceType::Cpu); + let mut input = Input::new(); + input.write(test_data); + + let execution_report = zkvm.execute(&input).unwrap(); + + let prove_start = Instant::now(); + let (proof, _) = zkvm.prove(&input).unwrap(); + let proof_duration = prove_start.elapsed(); + + let verify_start = Instant::now(); + zkvm.verify(&proof).unwrap(); + let verify_duration = verify_start.elapsed(); + + let mut metrics = Metrics::new(size); + metrics.proof_duration = proof_duration; + metrics.verify_duration = verify_duration; + metrics.cycles = execution_report.total_num_cycles; + metrics.proof_size = proof.len(); + + metrics + } +} + +/// Runs the Risc0 SHA-256 benchmark. +pub fn bench_sha256() { + let bench_harness = Sha256Benchmark::new(&INPUT_EXP); + benchmark( + |exp| bench_harness.run(exp), + INPUT_EXP.as_slice(), + CSV_OUTPUT, + ); +} diff --git a/risc0/Cargo.toml b/risc0/Cargo.toml index 2e3907a..053422f 100644 --- a/risc0/Cargo.toml +++ b/risc0/Cargo.toml @@ -7,16 +7,12 @@ edition = "2024" members = ["methods"] [workspace.dependencies] -risc0-build = "2.2.0" +risc0-build = { version = "^2.3.0", features = ["unstable"] } [dependencies] risc0-benchmark-methods = { path = "methods" } -risc0-zkvm = { version = "2.2.0", features = ["prove"] } -utils = { workspace = true } - -[features] -default = [] -prove = ["risc0-zkvm/prove"] +risc0-zkvm = { version = "^2.3.0", features = ["unstable", "prove"] } +utils = { path = "../utils" } # Always optimize; building and running the guest takes much longer without optimization. [profile.dev] diff --git a/utils/src/bench.rs b/utils/src/bench.rs index 91702d3..8504aee 100644 --- a/utils/src/bench.rs +++ b/utils/src/bench.rs @@ -14,15 +14,21 @@ use tabled::{Table, Tabled, settings::Style}; fn get_current_memory_usage() -> Result { unsafe { - let mut out: libc::rusage = std::mem::zeroed(); - libc::getrusage(libc::RUSAGE_SELF, &mut out); + let mut self_usage: libc::rusage = std::mem::zeroed(); + libc::getrusage(libc::RUSAGE_SELF, &mut self_usage); + + let mut child_usage: libc::rusage = std::mem::zeroed(); + libc::getrusage(libc::RUSAGE_CHILDREN, &mut child_usage); + + let total_maxrss = self_usage.ru_maxrss + child_usage.ru_maxrss; + #[cfg(target_os = "linux")] { - Ok(out.ru_maxrss as usize * 1024) + Ok(total_maxrss as usize * 1024) } #[cfg(target_os = "macos")] { - Ok(out.ru_maxrss as usize) + Ok(total_maxrss as usize) } #[cfg(not(any(target_os = "linux", target_os = "macos")))] {