From 55561097532143282fadcb871af2bef17d08fc21 Mon Sep 17 00:00:00 2001 From: Han Date: Fri, 22 Aug 2025 12:00:54 +0800 Subject: [PATCH] Upgrade `risc0` to `3.0.1` and use the new actor system prover (#103) Co-authored-by: Ignacio Hagopian --- Cargo.lock | 545 ++++++++++++-------- Cargo.toml | 5 +- crates/ere-dockerized/src/lib.rs | 7 +- crates/ere-risc0/Cargo.toml | 7 +- crates/ere-risc0/compose.yml | 226 -------- crates/ere-risc0/gpu_prover_agent.yml | 39 -- crates/ere-risc0/sample.env | 28 - crates/ere-risc0/src/lib.rs | 128 +++-- crates/ere-risc0/src/prove.rs | 2 - crates/ere-risc0/src/prove/bento.rs | 265 ---------- crates/ere-risc0/src/prove/default.rs | 19 - docker/risc0/Dockerfile | 41 +- scripts/sdk_installers/install_risc0_sdk.sh | 39 +- tests/risc0/basic/Cargo.toml | 2 +- 14 files changed, 494 insertions(+), 859 deletions(-) delete mode 100644 crates/ere-risc0/compose.yml delete mode 100644 crates/ere-risc0/gpu_prover_agent.yml delete mode 100644 crates/ere-risc0/sample.env delete mode 100644 crates/ere-risc0/src/prove.rs delete mode 100644 crates/ere-risc0/src/prove/bento.rs delete mode 100644 crates/ere-risc0/src/prove/default.rs diff --git a/Cargo.lock b/Cargo.lock index 2a471c5..85e4a32 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,28 +13,20 @@ dependencies = [ "num-traits", ] -[[package]] -name = "addr2line" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" -dependencies = [ - "cpp_demangle", - "fallible-iterator", - "gimli 0.29.0", - "memmap2", - "object 0.35.0", - "rustc-demangle", - "smallvec", -] - [[package]] name = "addr2line" version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ - "gimli 0.31.1", + "cpp_demangle", + "fallible-iterator", + "gimli", + "memmap2", + "object", + "rustc-demangle", + "smallvec", + "typed-arena", ] [[package]] @@ -771,12 +763,6 @@ dependencies = [ "syn 2.0.101", ] -[[package]] -name = "auto_ops" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7460f7dd8e100147b82a63afca1a20eb6c231ee36b90ba7272e14951cb58af59" - [[package]] name = "autocfg" version = "1.4.0" @@ -858,11 +844,11 @@ version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ - "addr2line 0.24.2", + "addr2line", "cfg-if", "libc", "miniz_oxide", - "object 0.36.7", + "object", "rustc-demangle", "serde", "windows-targets 0.52.6", @@ -1078,15 +1064,15 @@ dependencies = [ [[package]] name = "bonsai-sdk" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bce8d6acc5286a16e94c29e9c885d1869358885e08a6feeb6bc54e36fe20055" +checksum = "21055e2f49cbbdbfe9f8f96d597c5527b0c6ab7933341fdc2f147180e48a988e" dependencies = [ "duplicate", "maybe-async", "reqwest", "serde", - "thiserror 1.0.69", + "thiserror 2.0.12", ] [[package]] @@ -1349,8 +1335,8 @@ dependencies = [ "ark-serialize 0.5.0", "serde", "serde_json", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "syn 1.0.109", ] @@ -1968,11 +1954,11 @@ dependencies = [ [[package]] name = "directories" -version = "5.0.1" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" dependencies = [ - "dirs-sys", + "dirs-sys 0.5.0", ] [[package]] @@ -1981,7 +1967,16 @@ version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "dirs-sys", + "dirs-sys 0.4.1", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys 0.5.0", ] [[package]] @@ -1992,10 +1987,22 @@ checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", "option-ext", - "redox_users", + "redox_users 0.4.6", "windows-sys 0.48.0", ] +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.2", + "windows-sys 0.59.0", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -2041,12 +2048,13 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "duplicate" -version = "1.0.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de78e66ac9061e030587b2a2e75cc88f22304913c907b11307bca737141230cb" +checksum = "97af9b5f014e228b33e77d75ee0e6e87960124f0f4b16337b586a6bec91867b1" dependencies = [ - "heck 0.4.1", - "proc-macro-error", + "heck 0.5.0", + "proc-macro2", + "proc-macro2-diagnostics", ] [[package]] @@ -2348,17 +2356,12 @@ name = "ere-risc0" version = "0.0.11" dependencies = [ "anyhow", - "bincode", - "bonsai-sdk", "borsh", "build-utils", - "bytemuck", "cargo_metadata 0.19.2", "risc0-build", "risc0-zkvm", "serde", - "serde_yaml", - "tempfile", "test-utils", "thiserror 2.0.12", "tracing", @@ -2718,6 +2721,30 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" +[[package]] +name = "gdbstub" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b686b198dfaa4109ebd0443d2841bc521e4b4b2915f1d84b3bb50332a8cdc1ae" +dependencies = [ + "bitflags 2.9.0", + "cfg-if", + "log", + "managed", + "num-traits", + "paste", +] + +[[package]] +name = "gdbstub_arch" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22dde0e1b68787036ccedd0b1ff6f953527a0e807e571fbe898975203027278f" +dependencies = [ + "gdbstub", + "num-traits", +] + [[package]] name = "gen_ops" version = "0.4.0" @@ -2795,21 +2822,16 @@ dependencies = [ "syn 2.0.101", ] -[[package]] -name = "gimli" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" -dependencies = [ - "fallible-iterator", - "stable_deref_trait", -] - [[package]] name = "gimli" version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +dependencies = [ + "fallible-iterator", + "indexmap 2.10.0", + "stable_deref_trait", +] [[package]] name = "glam" @@ -3029,11 +3051,11 @@ dependencies = [ [[package]] name = "hashlink" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.15.3", ] [[package]] @@ -3590,7 +3612,7 @@ dependencies = [ "bytemuck", "clap", "common", - "dirs", + "dirs 5.0.1", "enum_dispatch", "eyre", "fixedbitset 0.5.7", @@ -3614,8 +3636,8 @@ dependencies = [ "reqwest", "serde", "sha3", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "sys-info", "target-lexicon", "thiserror 1.0.69", @@ -3757,6 +3779,26 @@ dependencies = [ "windows-targets 0.53.0", ] +[[package]] +name = "liblzma" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "272b875472a046e39ff7408374a5a050b112d2142211a0f54a295c0bd1c3c757" +dependencies = [ + "liblzma-sys", +] + +[[package]] +name = "liblzma-sys" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01b9596486f6d60c3bbe644c0e1be1aa6ccc472ad630fe8927b456973d7cb736" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "libm" version = "0.2.15" @@ -3822,17 +3864,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" -[[package]] -name = "lzma-sys" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - [[package]] name = "macro-string" version = "0.1.4" @@ -3911,6 +3942,12 @@ dependencies = [ "libc", ] +[[package]] +name = "managed" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" + [[package]] name = "matchers" version = "0.1.0" @@ -4365,6 +4402,23 @@ dependencies = [ "serde", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + [[package]] name = "num-complex" version = "0.4.6" @@ -4541,17 +4595,6 @@ dependencies = [ "malloc_buf", ] -[[package]] -name = "object" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e" -dependencies = [ - "flate2", - "memchr", - "ruzstd", -] - [[package]] name = "object" version = "0.36.7" @@ -4559,9 +4602,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "crc32fast", + "flate2", "hashbrown 0.15.3", "indexmap 2.10.0", "memchr", + "ruzstd", ] [[package]] @@ -4652,7 +4697,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_with", - "strum", + "strum 0.26.3", ] [[package]] @@ -4678,7 +4723,7 @@ dependencies = [ "openvm-custom-insn", "openvm-rv32im-guest", "serde-big-array", - "strum_macros", + "strum_macros 0.26.4", ] [[package]] @@ -4704,7 +4749,7 @@ dependencies = [ "openvm-stark-backend", "openvm-transpiler", "rrs-lib 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "strum", + "strum 0.26.3", ] [[package]] @@ -4735,7 +4780,7 @@ version = "1.4.0-rc.4" source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0-rc.4#ae8f139f6f094364f2287d8ca2e756bd3b4db48e" dependencies = [ "openvm-platform", - "strum_macros", + "strum_macros 0.26.4", ] [[package]] @@ -4750,7 +4795,7 @@ dependencies = [ "openvm-stark-backend", "openvm-transpiler", "rrs-lib 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "strum", + "strum 0.26.3", ] [[package]] @@ -4884,7 +4929,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_with", - "strum", + "strum 0.26.3", ] [[package]] @@ -4903,7 +4948,7 @@ dependencies = [ "openvm-ecc-sw-macros", "openvm-rv32im-guest", "serde", - "strum_macros", + "strum_macros 0.26.4", ] [[package]] @@ -4927,7 +4972,7 @@ dependencies = [ "openvm-stark-backend", "openvm-transpiler", "rrs-lib 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "strum", + "strum 0.26.3", ] [[package]] @@ -4943,8 +4988,8 @@ dependencies = [ "openvm-instructions-derive", "openvm-stark-backend", "serde", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", ] [[package]] @@ -4976,7 +5021,7 @@ dependencies = [ "p3-keccak-air 0.1.0 (git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb)", "rand 0.8.5", "serde", - "strum", + "strum 0.26.3", "tiny-keccak", ] @@ -4999,7 +5044,7 @@ dependencies = [ "openvm-stark-backend", "openvm-transpiler", "rrs-lib 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "strum", + "strum 0.26.3", ] [[package]] @@ -5050,7 +5095,7 @@ dependencies = [ "rand 0.8.5", "serde", "static_assertions", - "strum", + "strum 0.26.3", ] [[package]] @@ -5070,8 +5115,8 @@ dependencies = [ "openvm-stark-backend", "openvm-stark-sdk", "serde", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "zkhash 0.2.0 (git+https://github.com/HorizenLabs/poseidon2.git?rev=bb476b9)", ] @@ -5143,7 +5188,7 @@ dependencies = [ "openvm-stark-backend", "rand 0.8.5", "serde", - "strum", + "strum 0.26.3", ] [[package]] @@ -5164,7 +5209,7 @@ dependencies = [ "openvm-ecc-guest", "rand 0.8.5", "serde", - "strum_macros", + "strum_macros 0.26.4", ] [[package]] @@ -5177,7 +5222,7 @@ dependencies = [ "openvm-stark-backend", "openvm-transpiler", "rrs-lib 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "strum", + "strum 0.26.3", ] [[package]] @@ -5243,7 +5288,7 @@ dependencies = [ "openvm-stark-backend", "rand 0.8.5", "serde", - "strum", + "strum 0.26.3", ] [[package]] @@ -5253,7 +5298,7 @@ source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0-rc.4#ae8f139f6 dependencies = [ "openvm-custom-insn", "p3-field 0.1.0 (git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb)", - "strum_macros", + "strum_macros 0.26.4", ] [[package]] @@ -5268,7 +5313,7 @@ dependencies = [ "openvm-transpiler", "rrs-lib 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde", - "strum", + "strum 0.26.3", "tracing", ] @@ -5355,7 +5400,7 @@ dependencies = [ "rand 0.8.5", "serde", "sha2", - "strum", + "strum 0.26.3", ] [[package]] @@ -5377,7 +5422,7 @@ dependencies = [ "openvm-stark-backend", "openvm-transpiler", "rrs-lib 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "strum", + "strum 0.26.3", ] [[package]] @@ -6692,8 +6737,8 @@ dependencies = [ "serde_with", "snowbridge-amcl", "static_assertions", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "sysinfo", "thiserror 1.0.69", "tiny-keccak", @@ -6737,6 +6782,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -6933,6 +6989,19 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "version_check", + "yansi", +] + [[package]] name = "proptest" version = "1.6.0" @@ -7356,6 +7425,17 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.12", +] + [[package]] name = "regex" version = "1.11.1" @@ -7499,18 +7579,21 @@ checksum = "3df6368f71f205ff9c33c076d170dd56ebf68e8161c733c0caa07a7a5509ed53" [[package]] name = "risc0-binfmt" -version = "2.0.2" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62eb7025356a233c1bc267c458a2ce56fcfc89b136d813c8a77be14ef1eaf2b1" +checksum = "e2af322c052ae9973054f67434bc953eae44dbac68054d304b46848634d2a45d" dependencies = [ "anyhow", "borsh", + "bytemuck", "derive_more 2.0.1", "elf", "lazy_static", "postcard", + "rand 0.9.1", "risc0-zkp", "risc0-zkvm-platform", + "ruint", "semver 1.0.26", "serde", "tracing", @@ -7518,14 +7601,14 @@ dependencies = [ [[package]] name = "risc0-build" -version = "2.3.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ffc0f135e6c1e9851e7e19438d03ff41a9d49199ee4f6c17b8bb30b4f83910" +checksum = "b042a8a6fdd02793c0acb526fbd3f0d92abe664f1158be38d45a92def57385b2" dependencies = [ "anyhow", "cargo_metadata 0.19.2", "derive_builder", - "dirs", + "dirs 6.0.0", "docker-generate", "hex", "risc0-binfmt", @@ -7542,13 +7625,12 @@ dependencies = [ [[package]] name = "risc0-build-kernel" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc3029ee7a4103aa176346f85431f1aa5193ea4025844417fcf1591f66299d4" +checksum = "eaaa3e04c71e4244354dd9e3f8b89378cfecfbb03f9c72de4e2e7e0482b30c9a" dependencies = [ "cc", "directories", - "glob", "hex", "rayon", "sha2", @@ -7557,14 +7639,15 @@ dependencies = [ [[package]] name = "risc0-circuit-keccak" -version = "3.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0094af5a57b020388a03bdd3834959c7d62723f1687be81414ade25104d93263" +checksum = "966ba960d718123e16c603d6919a0c5d7cd2f872d428639ab5650108520f133a" dependencies = [ "anyhow", "bytemuck", "cfg-if", "keccak", + "liblzma", "paste", "rayon", "risc0-binfmt", @@ -7574,14 +7657,13 @@ dependencies = [ "risc0-sys", "risc0-zkp", "tracing", - "xz2", ] [[package]] name = "risc0-circuit-keccak-sys" -version = "3.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43afb4572af3b812fb0c83bfac5014041af10937288dcb67b7f9cea649483ff8" +checksum = "30a8f21cc053fe9892acebbe0ebe2610a5d79ad638cd17f2e5122cf0b3e7cd1a" dependencies = [ "cc", "derive_more 2.0.1", @@ -7593,9 +7675,9 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "3.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ebded45c902c2b6939924a1cddd1d06b5d1d4ad1531e8798ebfee78f9c038d" +checksum = "30f6afac63cfd291aaa7f40edf976db5452698e66cd79f16ccbf7c0eb5a5d94e" dependencies = [ "anyhow", "bytemuck", @@ -7604,7 +7686,7 @@ dependencies = [ "hex", "lazy-regex", "metal", - "rand 0.8.5", + "rand 0.9.1", "rayon", "risc0-circuit-recursion-sys", "risc0-core", @@ -7618,9 +7700,9 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion-sys" -version = "3.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a0eda7272f9e18b914f33b85b58e221056dbef1477ceb13351e442a06a44de9" +checksum = "f5f137bcd382520efcd982e4ee131da43f448b12ade979fe9d1fa92d4337dec0" dependencies = [ "glob", "risc0-build-kernel", @@ -7630,24 +7712,25 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im" -version = "3.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15030849f8356f01f23c74b37dbfa4283100b594eb634109993e9e005ef45f64" +checksum = "8fdd0865593941a6800c65a7c3b48be8700f73eb597681f6f594c7465839ce8a" dependencies = [ "anyhow", - "auto_ops", "bit-vec", "bytemuck", "byteorder", "cfg-if", "derive_more 2.0.1", "enum-map", + "gdbstub", + "gdbstub_arch", "malachite", "num-derive", "num-traits", "paste", "postcard", - "rand 0.8.5", + "rand 0.9.1", "rayon", "ringbuffer", "risc0-binfmt", @@ -7658,13 +7741,14 @@ dependencies = [ "serde", "smallvec", "tracing", + "wide", ] [[package]] name = "risc0-circuit-rv32im-sys" -version = "3.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5e586b310d20fab3f141a318704ded77c20ace155af4db1b6594bd60579b90" +checksum = "cb25f3935e53e89ca020224ad0c09de96cab89a215054c0cee290405074a5166" dependencies = [ "cc", "derive_more 2.0.1", @@ -7676,47 +7760,48 @@ dependencies = [ [[package]] name = "risc0-core" -version = "2.0.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317bbf70a8750b64d4fd7a2bdc9d7d5f30d8bb305cae486962c797ef35c8d08e" +checksum = "80f2723fedace48c6c5a505bd8f97ac4e1712bc4cb769083e10536d862b66987" dependencies = [ "bytemuck", - "bytemuck_derive", "nvtx", "puffin", - "rand_core 0.6.4", + "rand_core 0.9.3", ] [[package]] name = "risc0-groth16" -version = "2.0.2" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf5d0b673d5fc67a89147c2e9c53134707dcc8137a43d1ef06b4ff68e99b74f" +checksum = "b68a622c69d0b97f511ee43db1d7f7f00b4dacead9c8aceae03fc5383f4764c1" dependencies = [ "anyhow", "ark-bn254", "ark-ec", + "ark-ff 0.5.0", "ark-groth16", "ark-serialize 0.5.0", "bytemuck", + "cfg-if", "hex", "num-bigint 0.4.6", "num-traits", "risc0-binfmt", "risc0-core", "risc0-zkp", + "rzup", "serde", "serde_json", - "stability", "tempfile", "tracing", ] [[package]] name = "risc0-sys" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11abd6064c039f24b58676419cd13c92cbf4858e66948dd55b188b03511db44c" +checksum = "960c8295fbb87e1e73e332f8f7de2fba0252377575042d9d3e9a4eb50a38e078" dependencies = [ "anyhow", "risc0-build-kernel", @@ -7724,9 +7809,9 @@ dependencies = [ [[package]] name = "risc0-zkos-v1compat" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f76c479b69d1987cb54ac72dcc017197296fdcd6daf78fafc10cbbd3a167a7de" +checksum = "328c9f0ec5f6eb8b7624347b5dcf82729f304adbc364399825f3ab6f8588189c" dependencies = [ "include_bytes_aligned", "no_std_strings", @@ -7734,9 +7819,9 @@ dependencies = [ [[package]] name = "risc0-zkp" -version = "2.0.2" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a287e9cd6d7b3b38eeb49c62090c46a1935922309fbd997a9143ed8c43c8f3cb" +checksum = "2c246f34b86a165308e37a064afa86e66ee7b8525f02bcf03f2124aaeedba04f" dependencies = [ "anyhow", "blake2", @@ -7751,8 +7836,8 @@ dependencies = [ "ndarray", "parking_lot", "paste", - "rand 0.8.5", - "rand_core 0.6.4", + "rand 0.9.1", + "rand_core 0.9.3", "rayon", "risc0-core", "risc0-sys", @@ -7765,11 +7850,11 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "2.3.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9684b333c1c5d83f29ce2a92314ccfafd9d8cdfa6c4e19c07b97015d2f1eb9d0" +checksum = "0fdf8d11f9e61cfd3e577fb6e6e11cc34ca247831c2555ee0a6a53deba9702d2" dependencies = [ - "addr2line 0.22.0", + "addr2line", "anyhow", "bincode", "bonsai-sdk", @@ -7779,14 +7864,17 @@ dependencies = [ "derive_more 2.0.1", "elf", "enum-map", - "getrandom 0.2.16", + "gdbstub", + "gdbstub_arch", + "gimli", "hex", "keccak", "lazy-regex", "num-bigint 0.4.6", "num-traits", + "object", "prost 0.13.5", - "rand 0.8.5", + "rand 0.9.1", "rayon", "risc0-binfmt", "risc0-build", @@ -7812,9 +7900,9 @@ dependencies = [ [[package]] name = "risc0-zkvm-platform" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cae9cb2c2f6cab2dfa395ea6e2576713929040c7fb0c5f4150d13e1119d18686" +checksum = "06fc0e464f4ac44c3f1fd17b479e09e3ccbd1c40219837d750580b03030dca60" dependencies = [ "bytemuck", "cfg-if", @@ -7888,14 +7976,35 @@ dependencies = [ ] [[package]] -name = "ruint" -version = "1.14.0" +name = "rsa" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78a46eb779843b2c4f21fac5773e25d6d5b7c8f0922876c91541790d2ca27eef" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "signature", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "ruint" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecb38f82477f20c5c3d62ef52d7c4e536e38ea9b73fb570a20c5cae0e14bcf6" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", "ark-ff 0.4.2", + "borsh", "bytes", "fastrlp 0.3.1", "fastrlp 0.4.0", @@ -8052,12 +8161,10 @@ dependencies = [ [[package]] name = "ruzstd" -version = "0.6.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5174a470eeb535a721ae9fdd6e291c2411a906b96592182d05217591d5c5cf7b" +checksum = "fad02996bfc73da3e301efe90b1837be9ed8f4a462b6ed410aa35d00381de89f" dependencies = [ - "byteorder", - "derive_more 0.99.20", "twox-hash", ] @@ -8069,19 +8176,32 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "rzup" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "400558bf12d4292a7804093b60a437ba8b0219ea7d53716b2c010a0d31e5f4a8" +checksum = "76c6dfdbd72b2b0a537ad1e6256a3ce493ac87b9e89815465e393ee6595968e2" dependencies = [ + "hex", + "rsa", "semver 1.0.26", "serde", - "strum", + "serde_with", + "sha2", + "strum 0.27.2", "tempfile", "thiserror 2.0.12", "toml", "yaml-rust2", ] +[[package]] +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + [[package]] name = "scale-info" version = "2.11.6" @@ -8334,19 +8454,6 @@ dependencies = [ "syn 2.0.101", ] -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap 2.10.0", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "serdect" version = "0.2.0" @@ -8510,7 +8617,7 @@ dependencies = [ "cargo_metadata 0.18.1", "chrono", "clap", - "dirs", + "dirs 5.0.1", "sp1-prover", ] @@ -8543,8 +8650,8 @@ dependencies = [ "sp1-curves", "sp1-primitives", "sp1-stark", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "subenum", "thiserror 1.0.69", "tiny-keccak", @@ -8598,8 +8705,8 @@ dependencies = [ "sp1-primitives", "sp1-stark", "static_assertions", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "sysinfo", "tempfile", "thiserror 1.0.69", @@ -8688,7 +8795,7 @@ dependencies = [ "anyhow", "bincode", "clap", - "dirs", + "dirs 5.0.1", "downloader", "enum-map", "eyre", @@ -8873,7 +8980,7 @@ dependencies = [ "backoff", "bincode", "cfg-if", - "dirs", + "dirs 5.0.1", "eventsource-stream", "futures", "hashbrown 0.14.5", @@ -8896,8 +9003,8 @@ dependencies = [ "sp1-primitives", "sp1-prover", "sp1-stark", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "tempfile", "thiserror 1.0.69", "tokio", @@ -8935,8 +9042,8 @@ dependencies = [ "serde", "sp1-derive", "sp1-primitives", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "sysinfo", "tracing", ] @@ -9054,7 +9161,16 @@ version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "strum_macros", + "strum_macros 0.26.4", +] + +[[package]] +name = "strum" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros 0.27.2", ] [[package]] @@ -9070,6 +9186,18 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "stwo-prover" version = "0.1.1" @@ -9626,7 +9754,7 @@ dependencies = [ "clap", "common", "fnv", - "object 0.36.7", + "object", "tracing", "tracing-subscriber 0.3.19", ] @@ -9807,6 +9935,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + [[package]] name = "typeid" version = "1.0.3" @@ -9901,12 +10035,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - [[package]] name = "untrusted" version = "0.9.0" @@ -10147,6 +10275,16 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "wide" +version = "0.7.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" +dependencies = [ + "bytemuck", + "safe_arch", +] + [[package]] name = "winapi" version = "0.3.9" @@ -10521,26 +10659,23 @@ dependencies = [ "tap", ] -[[package]] -name = "xz2" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" -dependencies = [ - "lzma-sys", -] - [[package]] name = "yaml-rust2" -version = "0.9.0" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1a1c0bc9823338a3bdf8c61f994f23ac004c6fa32c08cd152984499b445e8d" +checksum = "4ce2a4ff45552406d02501cea6c18d8a7e50228e7736a872951fe2fe75c91be7" dependencies = [ "arraydeque", "encoding_rs", "hashlink", ] +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + [[package]] name = "yoke" version = "0.8.0" diff --git a/Cargo.toml b/Cargo.toml index 7c5328b..05bd479 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -70,9 +70,8 @@ pico-vm = { git = "https://github.com/brevis-network/pico.git", tag = "v1.1.4" } pico-sdk = { git = "https://github.com/brevis-network/pico.git", tag = "v1.1.4" } # Risc0 dependencies -risc0-build = "2.3.1" -risc0-zkvm = { version = "2.3.1", default-features = false } -bonsai-sdk = { version = "1.4.0" } +risc0-build = "3.0.1" +risc0-zkvm = { version = "3.0.1", default-features = false } # SP1 dependencies sp1-sdk = "5.1.0" diff --git a/crates/ere-dockerized/src/lib.rs b/crates/ere-dockerized/src/lib.rs index 686677e..3937005 100644 --- a/crates/ere-dockerized/src/lib.rs +++ b/crates/ere-dockerized/src/lib.rs @@ -374,10 +374,9 @@ impl zkVM for EreDockerizedzkVM { // spin up, so we don't need to set here. ErezkVM::SP1 => cmd.mount_docker_socket().network("host"), ErezkVM::Risc0 => cmd - .mount_docker_socket() - .network("host") - .inherit_env("CUDA_VISIBLE_DEVICES") - .inherit_env("SEGMENT_SIZE") + .gpus("all") + .inherit_env("RISC0_DEFAULT_PROVER_NUM_GPUS") + .inherit_env("RISC0_SEGMENT_PO2") .inherit_env("RISC0_KECCAK_PO2"), ErezkVM::Zisk => cmd.gpus("all"), _ => cmd, diff --git a/crates/ere-risc0/Cargo.toml b/crates/ere-risc0/Cargo.toml index 1f5c387..d38338b 100644 --- a/crates/ere-risc0/Cargo.toml +++ b/crates/ere-risc0/Cargo.toml @@ -7,20 +7,15 @@ license.workspace = true [dependencies] anyhow.workspace = true -bincode.workspace = true borsh.workspace = true -bytemuck.workspace = true cargo_metadata.workspace = true serde = { workspace = true, features = ["derive", "rc"] } -serde_yaml.workspace = true -tempfile.workspace = true thiserror.workspace = true tracing.workspace = true # Risc0 dependencies -risc0-build = { workspace = true, default-features = true, features = ["unstable"] } +risc0-build = { workspace = true, features = ["unstable"] } risc0-zkvm = { workspace = true, default-features = true, features = ["unstable"] } -bonsai-sdk.workspace = true # Local dependencies zkvm-interface.workspace = true diff --git a/crates/ere-risc0/compose.yml b/crates/ere-risc0/compose.yml deleted file mode 100644 index f425dd8..0000000 --- a/crates/ere-risc0/compose.yml +++ /dev/null @@ -1,226 +0,0 @@ -# Copied and modified from https://github.com/risc0/risc0/blob/v2.3.1/compose.yml. - -# MODIFIED: Use ere-risc0 as project name -name: ere-risc0 -services: - redis: - hostname: ${REDIS_HOST} - image: ${REDIS_IMG} - restart: always - ports: - - 6379:6379 - volumes: - - redis-data:/data - - postgres: - hostname: ${POSTGRES_HOST} - image: ${POSTGRES_IMG} - restart: always - environment: - POSTGRES_DB: ${POSTGRES_DB} - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - expose: - - '${POSTGRES_PORT}' - ports: - - '${POSTGRES_PORT}:${POSTGRES_PORT}' - volumes: - - postgres-data:/var/lib/postgresql/data - command: -p ${POSTGRES_PORT} - - minio: - hostname: ${MINIO_HOST} - image: ${MINIO_IMG} - ports: - - '9000:9000' - - '9001:9001' - volumes: - - minio-data:/data - command: server /data --console-address ":9001" - environment: - - MINIO_ROOT_USER=${MINIO_ROOT_USER} - - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASS} - - MINIO_DEFAULT_BUCKETS=${MINIO_BUCKET} - healthcheck: - test: ["CMD", "mc", "ready", "local"] - interval: 5s - timeout: 5s - retries: 5 - - # MODIFIED: Commented-out to avoid unnecessary resource waste. - # grafana: - # image: ${GRAFANA_IMG} - # restart: unless-stopped - # ports: - # - '3000:3000' - # environment: - # - GF_SECURITY_ADMIN_USER=admin - # - GF_SECURITY_ADMIN_PASSWORD=admin - # - GF_LOG_LEVEL=WARN - # - POSTGRES_HOST=${POSTGRES_HOST} - # - POSTGRES_DB=${POSTGRES_DB} - # - POSTGRES_PORT={POSTGRES_PORT} - # - POSTGRES_USER=${POSTGRES_USER} - # - POSTGRES_PASS=${POSTGRES_PASSWORD} - # volumes: - # - ./grafana:/etc/grafana/provisioning/ - # - grafana-data:/var/lib/grafana - # depends_on: - # - postgres - # - redis - # - minio - - exec_agent: - # MODIFIED: Specify the pre-built image. - image: ere-risc0/agent:${RISC0_VERSION} - runtime: nvidia - # MODIFIED: Added to avoid image pulling. - pull_policy: never - restart: always - depends_on: - - postgres - - redis - - minio - # MODIFIED: Commented-out because the image should be pre-built. - # build: - # context: . - # dockerfile: bento/dockerfiles/agent.dockerfile - # args: - # NVCC_APPEND_FLAGS: "--gpu-architecture=compute_86 --gpu-code=compute_86,sm_86 --generate-code arch=compute_86,code=sm_86" - # CUDA_OPT_LEVEL: 1 - mem_limit: 4G - cpu_count: 4 - environment: - DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} - REDIS_URL: redis://${REDIS_HOST}:6379 - S3_URL: http://${MINIO_HOST}:9000 - S3_BUCKET: ${MINIO_BUCKET} - # TODO: create a lower perm user on startup of minio to use for agents - S3_ACCESS_KEY: ${MINIO_ROOT_USER} - S3_SECRET_KEY: ${MINIO_ROOT_PASS} - RUST_LOG: ${RUST_LOG} - # MODIFIED: Added to set log color - NO_COLOR: ${NO_COLOR} - RUST_BACKTRACE: 1 - RISC0_KECCAK_PO2: ${RISC0_KECCAK_PO2} - # Enable / disable along with gpu_*_agent* - # JOIN_STREAM: 1 - # COPROC_STREAM: 1 - entrypoint: /app/agent -t exec --segment-po2 ${SEGMENT_SIZE} - - aux_agent: - # MODIFIED: Specify the pre-built image. - image: ere-risc0/agent:${RISC0_VERSION} - runtime: nvidia - pull_policy: never - restart: always - depends_on: - - postgres - - redis - - minio - mem_limit: 256M - cpu_count: 1 - environment: - DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} - REDIS_URL: redis://${REDIS_HOST}:6379 - S3_URL: http://${MINIO_HOST}:9000 - S3_BUCKET: ${MINIO_BUCKET} - S3_ACCESS_KEY: ${MINIO_ROOT_USER} - S3_SECRET_KEY: ${MINIO_ROOT_PASS} - RUST_LOG: ${RUST_LOG} - # MODIFIED: Added to set log color - NO_COLOR: ${NO_COLOR} - RUST_BACKTRACE: 1 - # NOTE: if adding more aux workers, only one needs --monitor-requeue (for task reaping) - entrypoint: /app/agent -t aux --monitor-requeue - - # MODIFIED: Moved to `gpu_prover_agent.yml` as template. - # gpu_prove_agent0: &gpu - # image: agent - # runtime: nvidia - # pull_policy: never - # restart: always - # depends_on: - # - postgres - # - redis - # - minio - # mem_limit: 4G - # cpu_count: 4 - # environment: - # DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} - # REDIS_URL: redis://${REDIS_HOST}:6379 - # S3_URL: http://${MINIO_HOST}:9000 - # S3_BUCKET: ${MINIO_BUCKET} - # S3_ACCESS_KEY: ${MINIO_ROOT_USER} - # S3_SECRET_KEY: ${MINIO_ROOT_PASS} - # RUST_LOG: ${RUST_LOG} - # RUST_BACKTRACE: 1 - # entrypoint: /app/agent -t prove - # # comment-out if running in CPU proving mode - # deploy: - # resources: - # reservations: - # devices: - # - driver: nvidia - # # TODO: how to scale this with N gpus? - # device_ids: ['0'] - # capabilities: [gpu] - - # MODIFIED: Commented-out because we don't need to wrap it for on-chain verification. - # snark_agent: - # image: agent - # runtime: nvidia - # pull_policy: never - # restart: always - # depends_on: - # - postgres - # - redis - # - minio - # environment: - # DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} - # REDIS_URL: redis://${REDIS_HOST}:6379 - # S3_URL: http://${MINIO_HOST}:9000 - # S3_BUCKET: ${MINIO_BUCKET} - # S3_ACCESS_KEY: ${MINIO_ROOT_USER} - # S3_SECRET_KEY: ${MINIO_ROOT_PASS} - # RUST_LOG: ${RUST_LOG} - # RUST_BACKTRACE: 1 - # entrypoint: /app/agent -t snark - # ulimits: - # # Needed for stark_verify bin - # # TODO: this number was just guess and check found - # stack: 90000000 - - rest_api: - # MODIFIED: Specify the pre-built image. - image: ere-risc0/rest_api:${RISC0_VERSION} - restart: always - depends_on: - - postgres - - minio - # MODIFIED: Commented-out because the image should be pre-built. - # build: - # context: . - # dockerfile: bento/dockerfiles/rest_api.dockerfile - mem_limit: 1G - cpu_count: 1 - environment: - DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} - S3_URL: http://${MINIO_HOST}:9000 - S3_BUCKET: ${MINIO_BUCKET} - S3_ACCESS_KEY: ${MINIO_ROOT_USER} - S3_SECRET_KEY: ${MINIO_ROOT_PASS} - RUST_LOG: ${RUST_LOG} - # MODIFIED: Added to set log color - NO_COLOR: ${NO_COLOR} - RUST_BACKTRACE: 1 - ports: - - '8081:8081' - entrypoint: /app/rest_api --bind-addr 0.0.0.0:8081 - -volumes: - redis-data: - postgres-data: - minio-data: - # MODIFIED: Commented-out to avoid unnecessary resource waste. - # grafana-data: diff --git a/crates/ere-risc0/gpu_prover_agent.yml b/crates/ere-risc0/gpu_prover_agent.yml deleted file mode 100644 index 75ead43..0000000 --- a/crates/ere-risc0/gpu_prover_agent.yml +++ /dev/null @@ -1,39 +0,0 @@ -# Copied and modified from https://github.com/risc0/risc0/blob/v2.3.1/compose.yml. -# In runtime, `ere-risc0` will check env `CUDA_VISIBLE_DEVICES`: -# If it's not set, it will spin up a container of the following service with all -# GPUs access -# If it's set to some device ids, it will spin up containers and each will have -# 1 GPU access. - -# MODIFIED: Rename to local image with namespace and version tag. -image: ere-risc0/agent:${RISC0_VERSION} -runtime: nvidia -pull_policy: never -restart: always -depends_on: - - postgres - - redis - - minio -mem_limit: 4G -cpu_count: 4 -environment: - DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} - REDIS_URL: redis://${REDIS_HOST}:6379 - S3_URL: http://${MINIO_HOST}:9000 - S3_BUCKET: ${MINIO_BUCKET} - S3_ACCESS_KEY: ${MINIO_ROOT_USER} - S3_SECRET_KEY: ${MINIO_ROOT_PASS} - RUST_LOG: ${RUST_LOG} - # MODIFIED: Added to set log color - NO_COLOR: ${NO_COLOR} - RUST_BACKTRACE: 1 -entrypoint: /app/agent -t prove -# comment-out if running in CPU proving mode -deploy: - resources: - reservations: - devices: - - driver: nvidia - # TODO: how to scale this with N gpus? - device_ids: ['0'] - capabilities: [gpu] diff --git a/crates/ere-risc0/sample.env b/crates/ere-risc0/sample.env deleted file mode 100644 index 912ef82..0000000 --- a/crates/ere-risc0/sample.env +++ /dev/null @@ -1,28 +0,0 @@ -# Copied and modified from https://github.com/risc0/risc0/blob/v2.3.1/compose.yml. - -# Prover node configs - -RUST_LOG=info -# MODIFIED: Added to inherit from host. -NO_COLOR= - -REDIS_HOST=redis -REDIS_IMG=redis:7.2.5-alpine3.19 - -POSTGRES_HOST=postgres -POSTGRES_IMG=postgres:16.3-bullseye -POSTGRES_DB=taskdb -POSTGRES_PORT=5432 -POSTGRES_USER=worker -POSTGRES_PASSWORD=password - -MINIO_HOST=minio -MINIO_IMG=minio/minio:RELEASE.2024-05-28T17-19-04Z -MINIO_ROOT_USER=admin -MINIO_ROOT_PASS=password -MINIO_BUCKET=workflow - -GRAFANA_IMG=grafana/grafana:11.0.0 - -SEGMENT_SIZE=21 -RISC0_KECCAK_PO2=17 \ No newline at end of file diff --git a/crates/ere-risc0/src/lib.rs b/crates/ere-risc0/src/lib.rs index 0806045..db93808 100644 --- a/crates/ere-risc0/src/lib.rs +++ b/crates/ere-risc0/src/lib.rs @@ -1,13 +1,16 @@ #![cfg_attr(not(test), warn(unused_crate_dependencies))] -use crate::{compile::compile_risc0_program, error::Risc0Error}; +use crate::{ + compile::{Risc0Program, compile_risc0_program}, + error::Risc0Error, +}; use borsh::{BorshDeserialize, BorshSerialize}; use risc0_zkvm::{ - ExecutorEnv, ExecutorEnvBuilder, InnerReceipt, Journal, Receipt, ReceiptClaim, SuccinctReceipt, - default_executor, + DEFAULT_MAX_PO2, DefaultProver, ExecutorEnv, ExecutorEnvBuilder, ExternalProver, InnerReceipt, + Journal, ProverOpts, Receipt, ReceiptClaim, SuccinctReceipt, default_executor, default_prover, }; use serde::{Deserialize, Serialize}; -use std::{path::Path, time::Instant}; +use std::{env, ops::RangeInclusive, path::Path, rc::Rc, time::Instant}; use zkvm_interface::{ Compiler, Input, InputItem, ProgramExecutionReport, ProgramProvingReport, ProverResourceType, zkVM, zkVMError, @@ -17,9 +20,32 @@ include!(concat!(env!("OUT_DIR"), "/name_and_sdk_version.rs")); mod compile; mod error; -mod prove; -pub use compile::Risc0Program; +/// Default logarithmic segment size from [`DEFAULT_SEGMENT_LIMIT_PO2`]. +/// +/// [`DEFAULT_SEGMENT_LIMIT_PO2`]: https://github.com/risc0/risc0/blob/v3.0.1/risc0/circuit/rv32im/src/execute/mod.rs#L39. +const DEFAULT_SEGMENT_PO2: usize = 20; + +/// Supported range of logarithmic segment size. +/// +/// The minimum is by [`MIN_LIFT_PO2`] to be lifted. +/// +/// The maximum is by [`DEFAULT_MAX_PO2`], although the real maximum is `24`, +/// but it requires us to set the `control_ids` manually in the `ProverOpts`. +/// +/// [`MIN_LIFT_PO2`]: https://github.com/risc0/risc0/blob/v3.0.1/risc0/circuit/recursion/src/control_id.rs#L19 +/// [`DEFAULT_MAX_PO2`]: https://github.com/risc0/risc0/blob/v3.0.1/risc0/zkvm/src/receipt.rs#L884 +const SEGMENT_PO2_RANGE: RangeInclusive = 14..=DEFAULT_MAX_PO2; + +/// Default logarithmic keccak size from [`KECCAK_DEFAULT_PO2`]. +/// +/// [`KECCAK_DEFAULT_PO2`]: https://github.com/risc0/risc0/blob/v3.0.1/risc0/circuit/keccak/src/lib.rs#L27. +const DEFAULT_KECCAK_PO2: usize = 17; + +/// Supported range of logarithmic keccak size from [`KECCAK_PO2_RANGE`]. +/// +/// [`KECCAK_PO2_RANGE`]: https://github.com/risc0/risc0/blob/v3.0.1/risc0/circuit/keccak/src/lib.rs#L29. +const KECCAK_PO2_RANGE: RangeInclusive = 14..=18; #[allow(non_camel_case_types)] pub struct RV32_IM_RISC0_ZKVM_ELF; @@ -64,6 +90,8 @@ impl From for Receipt { pub struct EreRisc0 { program: ::Program, resource: ProverResourceType, + segment_po2: usize, + keccak_po2: usize, } impl EreRisc0 { @@ -71,24 +99,33 @@ impl EreRisc0 { program: ::Program, resource: ProverResourceType, ) -> Result { - match resource { - ProverResourceType::Cpu => {} - ProverResourceType::Gpu => { - // If not using Metal, we use the bento stack which requires - // Docker to spin up the proving services that use Cuda. - if !cfg!(feature = "metal") { - prove::bento::build_bento_images().map_err(zkVMError::other)?; - prove::bento::docker_compose_bento_up().map_err(zkVMError::other)?; - } - } - ProverResourceType::Network(_) => { - panic!( - "Network proving not yet implemented for RISC Zero. Use CPU or GPU resource type." - ); - } + if matches!(resource, ProverResourceType::Network(_)) { + panic!( + "Network proving not yet implemented for RISC Zero. Use CPU or GPU resource type." + ); } - Ok(Self { program, resource }) + let [segment_po2, keccak_po2] = [ + ("RISC0_SEGMENT_PO2", DEFAULT_SEGMENT_PO2, SEGMENT_PO2_RANGE), + ("RISC0_KECCAK_PO2", DEFAULT_KECCAK_PO2, KECCAK_PO2_RANGE), + ] + .map(|(key, default, range)| { + let val = env::var(key) + .ok() + .and_then(|po2| po2.parse::().ok()) + .unwrap_or(default); + if !range.contains(&val) { + panic!("Unsupported po2 value {val} of {key}, expected in range {range:?}") + } + val + }); + + Ok(Self { + program, + resource, + segment_po2, + keccak_po2, + }) } } @@ -111,17 +148,20 @@ impl zkVM for EreRisc0 { } fn prove(&self, inputs: &Input) -> Result<(Vec, ProgramProvingReport), zkVMError> { - let (receipt, proving_time) = match self.resource { - ProverResourceType::Cpu => prove::default::prove(&self.program, inputs)?, + let prover = match self.resource { + ProverResourceType::Cpu => Rc::new(ExternalProver::new("ipc", "r0vm")), ProverResourceType::Gpu => { if cfg!(feature = "metal") { - // The default prover selects the prover depending on the - // feature flag, if non enabled, it executes the pre-installed - // binary to generate the proof; if `metal` is enabled, it - // uses the local built binary. - prove::default::prove(&self.program, inputs)? + // When `metal` is enabled, we use the `LocalProver` to do + // proving. but it's not public so we use `default_prover` + // to instantiate it. + default_prover() } else { - prove::bento::prove(&self.program, inputs)? + // The `DefaultProver` uses `r0vm-cuda` to spawn multiple + // workers to do multi-gpu proving. + // It uses env `RISC0_DEFAULT_PROVER_NUM_GPUS` to determine + // how many available GPUs there are. + Rc::new(DefaultProver::new("r0vm-cuda").map_err(zkVMError::other)?) } } ProverResourceType::Network(_) => { @@ -131,9 +171,23 @@ impl zkVM for EreRisc0 { } }; - let proof = - borsh::to_vec(&Risc0ProofWithPublicValues::from(receipt)).map_err(zkVMError::other)?; + let mut env = ExecutorEnv::builder(); + serialize_inputs(&mut env, inputs).map_err(zkVMError::other)?; + let env = env + .segment_limit_po2(self.segment_po2 as _) + .keccak_max_po2(self.keccak_po2 as _) + .map_err(zkVMError::other)? + .build() + .map_err(zkVMError::other)?; + let now = std::time::Instant::now(); + let prove_info = prover + .prove_with_opts(env, &self.program.elf, &ProverOpts::succinct()) + .map_err(zkVMError::other)?; + let proving_time = now.elapsed(); + + let proof = borsh::to_vec(&Risc0ProofWithPublicValues::from(prove_info.receipt)) + .map_err(zkVMError::other)?; Ok((proof, ProgramProvingReport::new(proving_time))) } @@ -156,16 +210,6 @@ impl zkVM for EreRisc0 { } } -impl Drop for EreRisc0 { - fn drop(&mut self) { - if matches!(self.resource, ProverResourceType::Gpu) && !cfg!(feature = "metal") { - prove::bento::docker_compose_bento_down().unwrap_or_else(|err| { - tracing::error!("Failed to shutdown bento docker compose sevices\n{err}") - }) - } - } -} - fn serialize_inputs(env: &mut ExecutorEnvBuilder, inputs: &Input) -> Result<(), anyhow::Error> { for input in inputs.iter() { match input { diff --git a/crates/ere-risc0/src/prove.rs b/crates/ere-risc0/src/prove.rs deleted file mode 100644 index 9c22dd7..0000000 --- a/crates/ere-risc0/src/prove.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod bento; -pub mod default; diff --git a/crates/ere-risc0/src/prove/bento.rs b/crates/ere-risc0/src/prove/bento.rs deleted file mode 100644 index 3054b68..0000000 --- a/crates/ere-risc0/src/prove/bento.rs +++ /dev/null @@ -1,265 +0,0 @@ -use crate::{Risc0Program, SDK_VERSION}; -use bonsai_sdk::blocking::Client; -use risc0_zkvm::{Receipt, VERSION, serde::to_vec}; -use std::{ - env, - ffi::OsStr, - io::{self, Write}, - process::{Command, Output, Stdio}, - time::Duration, -}; -use tempfile::tempdir; -use zkvm_interface::{Input, InputItem, zkVMError}; - -const URL: &str = "http://localhost:8081"; -const KEY: &str = ""; - -// Copied and modified from https://github.com/risc0/risc0/blob/main/bento/crates/bento-client/src/bento_cli.rs. -pub fn prove(program: &Risc0Program, inputs: &Input) -> Result<(Receipt, Duration), zkVMError> { - let client = Client::from_parts(URL.to_string(), KEY.to_string(), VERSION) - .map_err(|err| zkVMError::Other(err.into()))?; - - // Serialize `inputs` in the same way `ExecutorEnv` does. - let mut input_bytes = Vec::new(); - for input in inputs.iter() { - match input { - InputItem::Object(obj) => { - input_bytes.extend(bytemuck::cast_slice(&to_vec(obj).unwrap())); - } - InputItem::SerializedObject(bytes) => { - input_bytes.extend(bytes); - } - InputItem::Bytes(bytes) => { - input_bytes.extend((bytes.len() as u32).to_le_bytes()); - input_bytes.extend(bytes); - } - } - } - - client - .upload_img(&program.image_id.to_string(), program.elf.clone()) - .map_err(|err| zkVMError::Other(err.into()))?; - let input_id = client - .upload_input(input_bytes) - .map_err(|err| zkVMError::Other(err.into()))?; - - let now = std::time::Instant::now(); - - let session = client - .create_session(program.image_id.to_string(), input_id, vec![], false) - .map_err(|err| zkVMError::Other(err.into()))?; - - loop { - // By interval check if the proving is still running or already succeeded. - // FIXME: The response `SessionStatusRes` has a field `elapsed_time` but - // currently always set to `None` because it's not implemented. - // So we setting 200ms to not make the proving time measurement too - // inaccurate, but if `RUST_LOG=debug` is set, we should be able to do - // `docker log {container} --since` and grep the following pattern: - // ``` - // {timestamp} DEBUG workflow::tasks::resolve: Resolve complete for job_id: {session.uuid}. - // ``` - const INTERVAL_MILLIS: u64 = 200; - - let res = session - .status(&client) - .map_err(|err| zkVMError::Other(err.into()))?; - - match res.status.as_ref() { - "RUNNING" => { - std::thread::sleep(Duration::from_millis(INTERVAL_MILLIS)); - continue; - } - "SUCCEEDED" => { - let receipt_bytes = client - .receipt_download(&session) - .map_err(|err| zkVMError::Other(err.into()))?; - break Ok((bincode::deserialize(&receipt_bytes).unwrap(), now.elapsed())); - } - "FAILED" => { - return Err(zkVMError::Other( - format!( - "Job failed with error message: {}", - res.error_msg.unwrap_or_default() - ) - .into(), - )); - } - _ => { - return Err(zkVMError::Other( - format!("Unexpected proving status: {}", res.status).into(), - )); - } - } - } -} - -fn cmd_output_checked(cmd: &mut Command) -> Result { - let output = cmd.output()?; - if !output.status.success() { - return Err(io::Error::other(format!("Failed to run `{cmd:?}`"))); - } - Ok(output) -} - -fn cmd_exec_checked(cmd: &mut Command) -> Result<(), io::Error> { - let status = cmd.status()?; - if !status.success() { - return Err(io::Error::other(format!("Failed to run `{cmd:?}`"))); - } - Ok(()) -} - -fn docker_image_exists(image: impl AsRef) -> Result { - let output = cmd_output_checked( - Command::new("docker") - .args(["images", "--quiet"]) - .arg(image), - )?; - // If image exists, image id will be printed hence stdout will be non-empty. - Ok(!output.stdout.is_empty()) -} - -fn docker_image_tag(src: impl AsRef, dst: impl AsRef) -> Result<(), io::Error> { - cmd_exec_checked( - Command::new("docker") - .args(["image", "tag"]) - .arg(src) - .arg(dst), - ) -} - -pub fn build_bento_images() -> Result<(), io::Error> { - let agent_tag = format!("ere-risc0/agent:{SDK_VERSION}"); - let rest_api_tag = format!("ere-risc0/rest_api:{SDK_VERSION}"); - - if docker_image_exists(&agent_tag)? && docker_image_exists(&rest_api_tag)? { - return Ok(()); - } - - let tempdir = tempdir()?; - - cmd_exec_checked( - Command::new("git") - .args([ - "clone", - "--depth", - "1", - "--branch", - &format!("v{SDK_VERSION}"), - "https://github.com/risc0/risc0.git", - ]) - .arg(tempdir.path()), - )?; - - cmd_exec_checked( - Command::new("docker") - .arg("compose") - .arg("--file") - .arg(tempdir.path().join("compose.yml")) - .arg("--env-file") - .arg(tempdir.path().join("bento/dockerfiles/sample.env")) - .arg("build"), - )?; - - docker_image_tag("agent", agent_tag)?; - docker_image_tag("bento-rest_api", rest_api_tag)?; - - Ok(()) -} - -const BENTO_ENV: &str = include_str!("../../sample.env"); -const BENTO_COMPOSE: &str = include_str!("../../compose.yml"); -const BENTO_GPU_PROVER_AGENT_TEMPLATE: &str = include_str!("../../gpu_prover_agent.yml"); - -fn bento_compose_file() -> String { - let cuda_visible_devices = env::var("CUDA_VISIBLE_DEVICES").unwrap_or_else(|_| "".to_string()); - let cuda_visible_devices = cuda_visible_devices - .split(",") - .flat_map(|device_id| device_id.parse::().ok()) - .collect::>(); - - let mut compose: serde_yaml::Mapping = serde_yaml::from_str(BENTO_COMPOSE).unwrap(); - let gpu_prover_agent: serde_yaml::Mapping = - serde_yaml::from_str(BENTO_GPU_PROVER_AGENT_TEMPLATE).unwrap(); - - if cuda_visible_devices.is_empty() { - // If env `CUDA_VISIBLE_DEVICES` is not specified, only spin up single prover with all GPUs. - let mut gpu_prover_agent = gpu_prover_agent.clone(); - let device = gpu_prover_agent["deploy"]["resources"]["reservations"]["devices"][0] - .as_mapping_mut() - .unwrap(); - device.remove("device_ids").unwrap(); - device.insert("count".into(), "all".into()); - compose["services"] - .as_mapping_mut() - .unwrap() - .insert("gpu_prove_agent0".into(), gpu_prover_agent.into()); - } else { - // Otherwise spin up provers with each having 1 GPU. - for idx in cuda_visible_devices { - let mut gpu_prover_agent = gpu_prover_agent.clone(); - let device = gpu_prover_agent["deploy"]["resources"]["reservations"]["devices"][0] - .as_mapping_mut() - .unwrap(); - device["device_ids"][0] = idx.to_string().into(); - compose["services"].as_mapping_mut().unwrap().insert( - format!("gpu_prove_agent{idx}").into(), - gpu_prover_agent.into(), - ); - } - } - - serde_yaml::to_string(&compose).unwrap() -} - -/// Execute `docker compose ... {command}` with `bento_compose_file()`. -fn docker_compose_bento(command: I) -> Result<(), io::Error> -where - I: Clone + IntoIterator, - S: AsRef, -{ - let envs = BENTO_ENV - .lines() - .flat_map(|line| { - line.split_once("=") - .map(|(key, val)| (key, env::var(key).unwrap_or_else(|_| val.to_string()))) - }) - .collect::>(); - - let mut child = Command::new("docker") - .envs(envs) - .env("RISC0_VERSION", SDK_VERSION) - .args(["compose", "--file", "-"]) // Compose file from stdin. - .args(command.clone()) - .stdin(Stdio::piped()) - .spawn()?; - - let mut stdin = child.stdin.take().unwrap(); - stdin.write_all(bento_compose_file().as_bytes())?; - drop(stdin); - - let output = child.wait_with_output()?; - if !output.status.success() { - return Err(io::Error::other(format!( - "Failed to spawn `docker compose --file - ${}`", - command - .into_iter() - .map(|s| s.as_ref().to_string_lossy().to_string()) - .collect::>() - .join(" ") - ))); - } - - Ok(()) -} - -/// Execute `docker compose ... up --detach` with `bento_compose_file()`. -pub fn docker_compose_bento_up() -> Result<(), io::Error> { - docker_compose_bento(["up", "--detach", "--wait"]) -} - -/// Execute `docker compose ... down --volumes` with `bento_compose_file()`. -pub fn docker_compose_bento_down() -> Result<(), io::Error> { - docker_compose_bento(["down", "--volumes"]) -} diff --git a/crates/ere-risc0/src/prove/default.rs b/crates/ere-risc0/src/prove/default.rs deleted file mode 100644 index b29c7f9..0000000 --- a/crates/ere-risc0/src/prove/default.rs +++ /dev/null @@ -1,19 +0,0 @@ -use crate::{Risc0Program, serialize_inputs}; -use risc0_zkvm::{ExecutorEnv, ProverOpts, Receipt, default_prover}; -use std::time::Duration; -use zkvm_interface::{Input, zkVMError}; - -pub fn prove(program: &Risc0Program, inputs: &Input) -> Result<(Receipt, Duration), zkVMError> { - let prover = default_prover(); - let mut env = ExecutorEnv::builder(); - serialize_inputs(&mut env, inputs).map_err(|err| zkVMError::Other(err.into()))?; - let env = env.build().map_err(|err| zkVMError::Other(err.into()))?; - - let now = std::time::Instant::now(); - let prove_info = prover - .prove_with_opts(env, &program.elf, &ProverOpts::succinct()) - .map_err(|err| zkVMError::Other(err.into()))?; - let proving_time = now.elapsed(); - - Ok((prove_info.receipt, proving_time)) -} diff --git a/docker/risc0/Dockerfile b/docker/risc0/Dockerfile index bcf0a47..30c2bc3 100644 --- a/docker/risc0/Dockerfile +++ b/docker/risc0/Dockerfile @@ -2,22 +2,47 @@ ARG BASE_IMAGE_TAG=ere-base:latest FROM ${BASE_IMAGE_TAG} +# If current environment is in CI or not. +ARG CI + +# Install CUDA Toolkit 12.9 and clang +# If argument `CI` is set, we skip the installation. +RUN [ -n "$CI" ] || \ + (wget https://developer.download.nvidia.com/compute/cuda/repos/$(. /etc/os-release && echo "${ID}${VERSION_ID}" | tr -d '.')/$(uname -i)/cuda-keyring_1.1-1_all.deb && \ + dpkg -i cuda-keyring_1.1-1_all.deb && \ + rm cuda-keyring_1.1-1_all.deb && \ + apt update && \ + apt install -y cuda-toolkit-12-9 clang && \ + apt-get clean && rm -rf /var/lib/apt/lists/*) + +# Install protoc with same version as https://github.com/risc0/risc0/blob/v3.0.1/bento/dockerfiles/agent.dockerfile#L24-L26. +# If argument `CI` is set, we skip the installation. +RUN [ -n "$CI" ] || \ + (curl -o protoc.zip -L https://github.com/protocolbuffers/protobuf/releases/download/v31.1/protoc-31.1-linux-x86_64.zip && \ + unzip protoc.zip -d /usr/local) + +# Build for L40S, RTX 40 series, RTX 50 series +ARG NVCC_APPEND_FLAGS="\ + --generate-code arch=compute_89,code=sm_89 \ + --generate-code arch=compute_120,code=sm_120" +ENV NVCC_APPEND_FLAGS=${NVCC_APPEND_FLAGS} + +# Add nvcc to path +ENV PATH=/usr/local/cuda/bin:$PATH + # Copy and run the Risc0 SDK installer script -COPY scripts/sdk_installers/install_risc0_sdk.sh /tmp/install_risc0_sdk.sh +COPY --chmod=+x scripts/sdk_installers/install_risc0_sdk.sh /tmp/install_risc0_sdk.sh # The install_risc0_sdk.sh script will respect these ENV variables. -ENV RISC0_CLI_VERSION="2.3.1" \ +ENV RISC0_VERSION="3.0.1" \ RISC0_CPP_VERSION="2024.1.5" \ - RISC0_R0VM_VERSION="2.3.1" \ RISC0_RUST_VERSION="1.88.0" -# Run the script without version arguments to install latest -RUN chmod +x /tmp/install_risc0_sdk.sh && /tmp/install_risc0_sdk.sh +# Run the Risc0 SDK installation script +# It will use the RISC0_VERSION, RISC0_CPP_VERSION and RISC0_RUST_VERSION defined above. +RUN /tmp/install_risc0_sdk.sh && rm /tmp/install_risc0_sdk.sh # Verify Risc0 installation (script also does this, but good for Dockerfile sanity) RUN echo "Verifying Risc0 installation in Dockerfile (post-script)..." && cargo risczero --version -# Get docker for `cargo risczero build` -RUN curl -fsSL https://get.docker.com | sh - CMD ["/bin/bash"] diff --git a/scripts/sdk_installers/install_risc0_sdk.sh b/scripts/sdk_installers/install_risc0_sdk.sh index f39c269..5a2ebb7 100755 --- a/scripts/sdk_installers/install_risc0_sdk.sh +++ b/scripts/sdk_installers/install_risc0_sdk.sh @@ -63,16 +63,14 @@ fi # Now that rzup is confirmed to be in PATH for this script, install the Risc0 toolchain echo "Running 'rzup install' to install/update Risc0 toolchain..." -if [[ -n "$RISC0_CLI_VERSION" && -n "$RISC0_CPP_VERSION" && -n "$RISC0_R0VM_VERSION" && -n "$RISC0_RUST_VERSION" ]]; then - # If versions are specified, install each component by their version - rzup install cargo-risczero $RISC0_CLI_VERSION - rzup install cpp $RISC0_CPP_VERSION - rzup install r0vm $RISC0_R0VM_VERSION - rzup install rust $RISC0_RUST_VERSION -else - # Otherwise just install all components with by their latest version - rzup install -fi +RISC0_VERSION="${RISC0_VERSION:-3.0.1}" +RISC0_CPP_VERSION="${RISC0_CPP_VERSION:-2024.1.5}" +RISC0_RUST_VERSION="${RISC0_RUST_VERSION:-1.88.0}" + +rzup install cargo-risczero "$RISC0_VERSION" +rzup install cpp "$RISC0_CPP_VERSION" +rzup install r0vm "$RISC0_VERSION" +rzup install rust "$RISC0_RUST_VERSION" # Verify Risc0 installation echo "Verifying Risc0 installation..." @@ -82,4 +80,23 @@ cargo risczero --version || (echo "Error: cargo risczero command failed!" >&2 && echo "Risc0 Toolchain installation (latest release) successful." echo "The rzup installer might have updated your shell configuration files (e.g., ~/.bashrc, ~/.zshrc)." echo "To ensure rzup and Risc0 tools are available in your current shell session if this was a new installation," -echo "you may need to source your shell profile (e.g., 'source ~/.bashrc') or open a new terminal." \ No newline at end of file +echo "you may need to source your shell profile (e.g., 'source ~/.bashrc') or open a new terminal." + +# Build r0vm from source with CUDA features enabled (skip if in CI) +if [ -z $CI ]; then + CARGO_HOME="${CARGO_HOME:-$HOME/.cargo}" + RISC0_BIN_DIR="$HOME/.risc0/extensions/v$RISC0_VERSION-cargo-risczero-x86_64-unknown-linux-gnu" + + TEMP_DIR=$(mktemp -d) + git clone https://github.com/risc0/risc0.git --depth 1 --branch "v$RISC0_VERSION" "$TEMP_DIR/risc0" + cd "$TEMP_DIR/risc0" + + # Build with feature `cuda` + RUSTFLAGS="-C target-cpu=native" cargo build --release --features cuda --bin r0vm + # Copy the binary to the same directory with `cargo-risczero` and `r0vm` + cp ./target/release/r0vm "$RISC0_BIN_DIR/r0vm-cuda" + # Create symbolic link as `cargo-risczero` and `r0vm` + ln -s "$RISC0_BIN_DIR/r0vm-cuda" "$CARGO_HOME/bin/r0vm-cuda" + + rm -rf "$TEMP_DIR" +fi diff --git a/tests/risc0/basic/Cargo.toml b/tests/risc0/basic/Cargo.toml index b0b5e77..c3d15d0 100644 --- a/tests/risc0/basic/Cargo.toml +++ b/tests/risc0/basic/Cargo.toml @@ -6,5 +6,5 @@ edition = "2021" [workspace] [dependencies] -risc0-zkvm = { version = "2.3.1", default-features = false, features = ['std', 'unstable'] } +risc0-zkvm = { version = "3.0.1", default-features = false, features = ["std", "unstable"] } test-utils = { path = "../../../crates/test-utils" }