diff --git a/Cargo.lock b/Cargo.lock index 5403d65..1ad830f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1099,6 +1099,17 @@ dependencies = [ "term 1.2.0", ] +[[package]] +name = "async-scoped" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4042078ea593edffc452eef14e99fdb2b120caa4ad9618bcdeabc4a023b98740" +dependencies = [ + "futures", + "pin-project", + "tokio", +] + [[package]] name = "async-stream" version = "0.3.6" @@ -1143,6 +1154,15 @@ dependencies = [ "rustc_version 0.4.1", ] +[[package]] +name = "atomic" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" +dependencies = [ + "bytemuck", +] + [[package]] name = "atomic-polyfill" version = "1.0.3" @@ -1851,7 +1871,7 @@ dependencies = [ "bitflags 2.9.0", "cexpr", "clang-sys", - "itertools 0.11.0", + "itertools 0.12.1", "lazy_static", "lazycell", "log", @@ -1874,7 +1894,7 @@ dependencies = [ "bitflags 2.9.0", "cexpr", "clang-sys", - "itertools 0.11.0", + "itertools 0.13.0", "log", "prettyplease 0.2.32", "proc-macro2", @@ -2364,9 +2384,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -3248,6 +3268,27 @@ dependencies = [ "uuid 1.17.0", ] +[[package]] +name = "deepsize2" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b5184084af9beed35eecbf4c36baf6e26b9dc47b61b74e02f930c72a58e71b" +dependencies = [ + "deepsize_derive2", + "hashbrown 0.14.5", +] + +[[package]] +name = "deepsize_derive2" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0f8817865cacf3b93b943ca06b0fc5fd8e99eabfdb7ea5d296efcbc4afc4f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "der" version = "0.7.10" @@ -3302,6 +3343,17 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "derive-where" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "derive_arbitrary" version = "1.4.1" @@ -3593,6 +3645,33 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "dynasm" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7d4c414c94bc830797115b8e5f434d58e7e80cb42ba88508c14bc6ea270625" +dependencies = [ + "bitflags 2.9.0", + "byteorder", + "lazy_static", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "dynasmrt" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "602f7458a3859195fb840e6e0cce5f4330dd9dfbfece0edaf31fe427af346f55" +dependencies = [ + "byteorder", + "dynasm", + "fnv", + "memmap2", +] + [[package]] name = "ecdsa" version = "0.16.9" @@ -4216,10 +4295,15 @@ dependencies = [ "ere-compile-utils", "ere-test-utils", "ere-zkvm-interface", + "p3-field 0.3.1-succinct", "serde", + "sp1-cuda", + "sp1-hypercube", + "sp1-recursion-executor", "sp1-sdk", "tempfile", "thiserror 2.0.12", + "tokio", "tracing", ] @@ -6933,10 +7017,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] -name = "memmap2" -version = "0.9.7" +name = "memfd" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" +checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" +dependencies = [ + "rustix 1.0.7", +] + +[[package]] +name = "memmap2" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" dependencies = [ "libc", ] @@ -7385,6 +7478,16 @@ dependencies = [ "cc", ] +[[package]] +name = "mti" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9563a7d5556636e74bbd8773241fbcbc5c89b9f6bfdc97b29b56e740c2c74b9" +dependencies = [ + "typeid_prefix", + "typeid_suffix", +] + [[package]] name = "multimap" version = "0.8.3" @@ -8121,6 +8224,20 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "opentelemetry" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b69a91d4893e713e06f724597ad630f1fa76057a5e1026c0ca67054a9032a76" +dependencies = [ + "futures-core", + "futures-sink", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror 1.0.69", +] + [[package]] name = "openvm" version = "1.4.3" @@ -9148,12 +9265,13 @@ dependencies = [ [[package]] name = "p3-air" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05a97452c4b1cfa8626e69181d901fc8231d99ff7d87e9701a2e6b934606615" +checksum = "a2ce3af7e16cf529b5bf621afdade0ec9950fc3be21ec552257d9d5c2edb4d83" dependencies = [ - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", + "p3-field 0.3.1-succinct", + "p3-matrix 0.3.1-succinct", + "serde", ] [[package]] @@ -9186,15 +9304,15 @@ dependencies = [ [[package]] name = "p3-baby-bear" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7521838ecab2ddf4f7bc4ceebad06ec02414729598485c1ada516c39900820e8" +checksum = "dccb50acdb58ed96f73fcef401e01b34602abfd03145cf0cb36aa79e35ca1bb8" dependencies = [ "num-bigint 0.4.6", - "p3-field 0.2.3-succinct", - "p3-mds 0.2.3-succinct", - "p3-poseidon2 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", + "p3-field 0.3.1-succinct", + "p3-mds 0.3.1-succinct", + "p3-poseidon2 0.3.1-succinct", + "p3-symmetric 0.3.1-succinct", "rand 0.8.5", "serde", ] @@ -9266,15 +9384,15 @@ dependencies = [ [[package]] name = "p3-bn254-fr" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0dd4d095d254783098bd09fc5fdf33fd781a1be54608ab93cb3ed4bd723da54" +checksum = "ebf15b2e55afdfc5ef84bb0a2508a96a924f3d86b8b616053ee727293a02121d" dependencies = [ "ff 0.13.1", "num-bigint 0.4.6", - "p3-field 0.2.3-succinct", - "p3-poseidon2 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", + "p3-field 0.3.1-succinct", + "p3-poseidon2 0.3.1-succinct", + "p3-symmetric 0.3.1-succinct", "rand 0.8.5", "serde", ] @@ -9318,14 +9436,14 @@ dependencies = [ [[package]] name = "p3-challenger" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d18c223b7e0177f4ac91070fa3f6cc557d5ee3b279869924c3102fb1b20910" +checksum = "16b647fe6cb51bb873d09aab77cecf3afe38bd94284fc14d04d57d52f0d26666" dependencies = [ - "p3-field 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-field 0.3.1-succinct", + "p3-maybe-rayon 0.3.1-succinct", + "p3-symmetric 0.3.1-succinct", + "p3-util 0.3.1-succinct", "serde", "tracing", ] @@ -9410,15 +9528,15 @@ dependencies = [ [[package]] name = "p3-commit" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b38fe979d53d4f1d64158c40b3cd9ea1bd6b7bc8f085e489165c542ef914ae28" +checksum = "10a094ad823789ff19416c64f30eca6afff24d8cac231eb5f729e90ed1fb500b" dependencies = [ "itertools 0.12.1", - "p3-challenger 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-challenger 0.3.1-succinct", + "p3-field 0.3.1-succinct", + "p3-matrix 0.3.1-succinct", + "p3-util 0.3.1-succinct", "serde", ] @@ -9463,14 +9581,14 @@ dependencies = [ [[package]] name = "p3-dft" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46414daedd796f1eefcdc1811c0484e4bced5729486b6eaba9521c572c76761a" +checksum = "8169aac0ed2575c6c44953a7fa162e3dd07f9a22021e36b4db9d8bd15a3373b8" dependencies = [ - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-field 0.3.1-succinct", + "p3-matrix 0.3.1-succinct", + "p3-maybe-rayon 0.3.1-succinct", + "p3-util 0.3.1-succinct", "tracing", ] @@ -9527,14 +9645,14 @@ dependencies = [ [[package]] name = "p3-field" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48948a0516b349e9d1cdb95e7236a6ee010c44e68c5cc78b4b92bf1c4022a0d9" +checksum = "3f82ed2dfd1e7d6e8759a9605c71b8a2a543069017dfdb6dafe71e7a2ccca937" dependencies = [ "itertools 0.12.1", "num-bigint 0.4.6", "num-traits", - "p3-util 0.2.3-succinct", + "p3-util 0.3.1-succinct", "rand 0.8.5", "serde", ] @@ -9598,19 +9716,19 @@ dependencies = [ [[package]] name = "p3-fri" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c274dab2dcd060cdea9ab3f8f7129f5fa5f08917d6092dc2b297a31d883aa0" +checksum = "8ad549ae26b3b7c184e7699e78ce2e9b9330b34a344e1bb49cdafe999ceab053" dependencies = [ "itertools 0.12.1", - "p3-challenger 0.2.3-succinct", - "p3-commit 0.2.3-succinct", - "p3-dft 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-interpolation 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-challenger 0.3.1-succinct", + "p3-commit 0.3.1-succinct", + "p3-dft 0.3.1-succinct", + "p3-field 0.3.1-succinct", + "p3-interpolation 0.3.1-succinct", + "p3-matrix 0.3.1-succinct", + "p3-maybe-rayon 0.3.1-succinct", + "p3-util 0.3.1-succinct", "serde", "tracing", ] @@ -9683,13 +9801,13 @@ dependencies = [ [[package]] name = "p3-interpolation" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed8de7333abb0ad0a17bb78726a43749cc7fcab4763f296894e8b2933841d4d8" +checksum = "0cdd36ddd351714d67bff73d55ee221270bf36b41efd1e74cacf151b2919178c" dependencies = [ - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-field 0.3.1-succinct", + "p3-matrix 0.3.1-succinct", + "p3-util 0.3.1-succinct", ] [[package]] @@ -9770,15 +9888,15 @@ dependencies = [ [[package]] name = "p3-keccak-air" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c7ec21317c455d39588428e4ec85b96d663ff171ddf102a10e2ca54c942dea" +checksum = "387b833972ad75e4318d525f76766b69a25073237377555fba917126b4b2ec9e" dependencies = [ - "p3-air 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-air 0.3.1-succinct", + "p3-field 0.3.1-succinct", + "p3-matrix 0.3.1-succinct", + "p3-maybe-rayon 0.3.1-succinct", + "p3-util 0.3.1-succinct", "tracing", ] @@ -9824,6 +9942,21 @@ dependencies = [ "serde", ] +[[package]] +name = "p3-koala-bear" +version = "0.3.1-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60e2d5bc3601f6115afd9a55a718bdab49e98d44710438008204d2084d5d70d0" +dependencies = [ + "num-bigint 0.4.6", + "p3-field 0.3.1-succinct", + "p3-mds 0.3.1-succinct", + "p3-poseidon2 0.3.1-succinct", + "p3-symmetric 0.3.1-succinct", + "rand 0.8.5", + "serde", +] + [[package]] name = "p3-matrix" version = "0.1.0" @@ -9871,14 +10004,14 @@ dependencies = [ [[package]] name = "p3-matrix" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4de3f373589477cb735ea58e125898ed20935e03664b4614c7fac258b3c42f" +checksum = "2ef05490e47c906f102e08493986b1d3c6b6e2c6be9937eaab2c970ccf5385e8" dependencies = [ "itertools 0.12.1", - "p3-field 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-field 0.3.1-succinct", + "p3-maybe-rayon 0.3.1-succinct", + "p3-util 0.3.1-succinct", "rand 0.8.5", "serde", "tracing", @@ -9910,9 +10043,9 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3968ad1160310296eb04f91a5f4edfa38fe1d6b2b8cd6b5c64e6f9b7370979e" +checksum = "f3d38c20290b92011f12a3fc040a999197e71e1663614998393a24aee4d430da" dependencies = [ "rayon", ] @@ -9961,16 +10094,16 @@ dependencies = [ [[package]] name = "p3-mds" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2356b1ed0add6d5dfbf7a338ce534a6fde827374394a52cec16a0840af6e97c9" +checksum = "b707ec6432a15661ce67e5fc3abb1c2653e0064030d99c8cece4a049b31ebb1a" dependencies = [ "itertools 0.12.1", - "p3-dft 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-dft 0.3.1-succinct", + "p3-field 0.3.1-succinct", + "p3-matrix 0.3.1-succinct", + "p3-symmetric 0.3.1-succinct", + "p3-util 0.3.1-succinct", "rand 0.8.5", ] @@ -10027,17 +10160,17 @@ dependencies = [ [[package]] name = "p3-merkle-tree" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f159e073afbee02c00d22390bf26ebb9ce03bbcd3e6dcd13c6a7a3811ab39608" +checksum = "2d3e1fef003be39b4f37116fd15403d93d1473d0e5955d7110687c5b01e394eb" dependencies = [ "itertools 0.12.1", - "p3-commit 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-commit 0.3.1-succinct", + "p3-field 0.3.1-succinct", + "p3-matrix 0.3.1-succinct", + "p3-maybe-rayon 0.3.1-succinct", + "p3-symmetric 0.3.1-succinct", + "p3-util 0.3.1-succinct", "serde", "tracing", ] @@ -10194,14 +10327,14 @@ dependencies = [ [[package]] name = "p3-poseidon2" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da1eec7e1b6900581bedd95e76e1ef4975608dd55be9872c9d257a8a9651c3a" +checksum = "f9c6dbf170a3fb4d7556023315a525e08c4b94b572bc307eadbf9065bddaf489" dependencies = [ "gcd", - "p3-field 0.2.3-succinct", - "p3-mds 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", + "p3-field 0.3.1-succinct", + "p3-mds 0.3.1-succinct", + "p3-symmetric 0.3.1-succinct", "rand 0.8.5", "serde", ] @@ -10254,12 +10387,12 @@ dependencies = [ [[package]] name = "p3-symmetric" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb439bea1d822623b41ff4b51e3309e80d13cadf8b86d16ffd5e6efb9fdc360" +checksum = "c7ec3a99c3dc3d55d0e78ef7041e0d90bdfbf03451e4f0bae3f9877af99cabb3" dependencies = [ "itertools 0.12.1", - "p3-field 0.2.3-succinct", + "p3-field 0.3.1-succinct", "serde", ] @@ -10319,19 +10452,19 @@ dependencies = [ [[package]] name = "p3-uni-stark" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a86f29c32bf46fa4acb6547d2065a711e146d4faca388b56d75718c60a0097d" +checksum = "cc32ad338f5a342455c416c4bfa52ba7d979d37da91abc4857e6ed5a4349845f" dependencies = [ "itertools 0.12.1", - "p3-air 0.2.3-succinct", - "p3-challenger 0.2.3-succinct", - "p3-commit 0.2.3-succinct", - "p3-dft 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-air 0.3.1-succinct", + "p3-challenger 0.3.1-succinct", + "p3-commit 0.3.1-succinct", + "p3-dft 0.3.1-succinct", + "p3-field 0.3.1-succinct", + "p3-matrix 0.3.1-succinct", + "p3-maybe-rayon 0.3.1-succinct", + "p3-util 0.3.1-succinct", "serde", "tracing", ] @@ -10363,9 +10496,9 @@ dependencies = [ [[package]] name = "p3-util" -version = "0.2.3-succinct" +version = "0.3.1-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c2c2010678b9332b563eaa38364915b585c1a94b5ca61e2c7541c087ddda5c" +checksum = "712473f2a848b672eee90c3b9cd4bfcd3da042112c53a0dc6b088fc3964538ab" dependencies = [ "serde", ] @@ -10761,7 +10894,7 @@ dependencies = [ "rand 0.8.5", "rayon", "rayon-scan", - "rrs-succinct", + "rrs-succinct 0.1.0", "serde", "serde_json", "serde_with", @@ -11263,8 +11396,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", - "heck 0.4.1", - "itertools 0.11.0", + "heck 0.5.0", + "itertools 0.12.1", "log", "multimap 0.10.1", "once_cell", @@ -11283,7 +11416,7 @@ version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "itertools 0.14.0", "log", "multimap 0.10.1", @@ -11338,7 +11471,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.11.0", + "itertools 0.12.1", "proc-macro2", "quote", "syn 2.0.101", @@ -12569,6 +12702,17 @@ dependencies = [ "paste", ] +[[package]] +name = "rrs-succinct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd079cd303257a4cb4e5aadfa79a7fe23f3c8301aa4740ccc3a99673485a352" +dependencies = [ + "downcast-rs", + "num_enum 0.5.11", + "paste", +] + [[package]] name = "rsa" version = "0.9.8" @@ -13357,6 +13501,12 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + [[package]] name = "sha2" version = "0.10.9" @@ -13479,6 +13629,442 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slop-air" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b07a758f87dfef697b2c829b12aacf1a7b125b0cdc20ef002e38615ecbe6fa9" +dependencies = [ + "p3-air 0.3.1-succinct", +] + +[[package]] +name = "slop-algebra" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c99cdaa39f7db4823cf18938544a135f20bf779eb4b3561652a72ba07ac3c41" +dependencies = [ + "itertools 0.14.0", + "p3-field 0.3.1-succinct", + "serde", +] + +[[package]] +name = "slop-alloc" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28f2f132d872d1952afeddcfe071c1c653d3ce3a37df99b5bda3f222102c58ff" +dependencies = [ + "serde", + "slop-algebra", + "thiserror 1.0.69", +] + +[[package]] +name = "slop-baby-bear" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e1e392715941f569030bfcee01a78ea1d999fe7cfe7fa5df34e8515fbf972a" +dependencies = [ + "lazy_static", + "p3-baby-bear 0.3.1-succinct", + "serde", + "slop-algebra", + "slop-challenger", + "slop-poseidon2", + "slop-symmetric", +] + +[[package]] +name = "slop-basefold" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b162350feebe2f87f16b06229dbfa23f023ee0ce272c32265c8104d0bcf64fd0" +dependencies = [ + "derive-where", + "itertools 0.14.0", + "serde", + "slop-algebra", + "slop-alloc", + "slop-baby-bear", + "slop-bn254", + "slop-challenger", + "slop-koala-bear", + "slop-merkle-tree", + "slop-multilinear", + "slop-primitives", + "slop-tensor", + "slop-utils", + "thiserror 1.0.69", +] + +[[package]] +name = "slop-basefold-prover" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2311a325704859887c23f21b5b807899c77b9fbfa9961db533b543e3007a9479" +dependencies = [ + "derive-where", + "itertools 0.14.0", + "rand 0.8.5", + "serde", + "slop-algebra", + "slop-alloc", + "slop-baby-bear", + "slop-basefold", + "slop-bn254", + "slop-challenger", + "slop-commit", + "slop-dft", + "slop-fri", + "slop-futures", + "slop-koala-bear", + "slop-merkle-tree", + "slop-multilinear", + "slop-tensor", + "thiserror 1.0.69", +] + +[[package]] +name = "slop-bn254" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce30d587559808f7a984ea96af231de14f8f793836300347d1ee13d28e194ad" +dependencies = [ + "ff 0.13.1", + "p3-bn254-fr 0.3.1-succinct", + "serde", + "slop-algebra", + "slop-challenger", + "slop-poseidon2", + "slop-symmetric", + "zkhash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slop-challenger" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15fed3b1414bd79c56a21e3ac75c5b549003a0d8f715eb501000d4ac3d7b8a9f" +dependencies = [ + "futures", + "p3-challenger 0.3.1-succinct", + "serde", + "slop-algebra", + "slop-symmetric", +] + +[[package]] +name = "slop-commit" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce65d051b785eee06a17cf278659ade7de8456c801c06b7477680a760e7ba940" +dependencies = [ + "p3-commit 0.3.1-succinct", + "serde", + "slop-alloc", +] + +[[package]] +name = "slop-dft" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5312636e8a562bcc27b610cd69b0e3880c96ff211740de50421006eb46433e" +dependencies = [ + "p3-dft 0.3.1-succinct", + "serde", + "slop-algebra", + "slop-alloc", + "slop-matrix", + "slop-tensor", +] + +[[package]] +name = "slop-fri" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0ab4f7f14091b65a6cc36fa8766c2969b887ebef5368081e06dc24994295d79" +dependencies = [ + "p3-fri 0.3.1-succinct", +] + +[[package]] +name = "slop-futures" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b43f6d23b69914e055b265864e1f0f7b7aa5988fd724b3e3beb0bcbd567237a3" +dependencies = [ + "crossbeam", + "futures", + "pin-project", + "rayon", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "slop-jagged" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82ff9ddff404958978cf2083d689e0d4a659eb4246beb7aecd3ad4e2ac7ce16a" +dependencies = [ + "derive-where", + "futures", + "itertools 0.14.0", + "num_cpus", + "rand 0.8.5", + "rayon", + "serde", + "slop-algebra", + "slop-alloc", + "slop-baby-bear", + "slop-basefold", + "slop-basefold-prover", + "slop-bn254", + "slop-challenger", + "slop-commit", + "slop-futures", + "slop-koala-bear", + "slop-merkle-tree", + "slop-multilinear", + "slop-stacked", + "slop-sumcheck", + "slop-symmetric", + "slop-tensor", + "slop-utils", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "slop-keccak-air" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc07e827596f4dba075bf26550f8f46446ef5b20a87be6d4a90b93b7a577aa3e" +dependencies = [ + "p3-keccak-air 0.3.1-succinct", +] + +[[package]] +name = "slop-koala-bear" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402c403f847e811a788882c7c5ee018ab7076c8bafbf4f46f569fe97f44610d1" +dependencies = [ + "lazy_static", + "p3-koala-bear 0.3.1-succinct", + "serde", + "slop-algebra", + "slop-challenger", + "slop-poseidon2", + "slop-symmetric", +] + +[[package]] +name = "slop-matrix" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f46e80675bb7ca5deeac107bb9203c3610d0878ad35d7f253cc745b627afaae" +dependencies = [ + "p3-matrix 0.3.1-succinct", +] + +[[package]] +name = "slop-maybe-rayon" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b30657a1a2f5ff171601262517c5f39540d89a88d2d2f33ee1a254abd65eaf1" +dependencies = [ + "p3-maybe-rayon 0.3.1-succinct", +] + +[[package]] +name = "slop-merkle-tree" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad003b66e2b51fe931414e8013c4bc57bd71d2d7f3e7bb8675da5c93fc07e7f" +dependencies = [ + "derive-where", + "ff 0.13.1", + "itertools 0.14.0", + "p3-merkle-tree 0.3.1-succinct", + "serde", + "slop-algebra", + "slop-alloc", + "slop-baby-bear", + "slop-bn254", + "slop-challenger", + "slop-commit", + "slop-futures", + "slop-koala-bear", + "slop-matrix", + "slop-poseidon2", + "slop-symmetric", + "slop-tensor", + "thiserror 1.0.69", + "zkhash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slop-multilinear" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aaba3e7382dec7f49dd3a3c9f4c9623959a807823ba5a039ba3f137e1fbdd4d" +dependencies = [ + "derive-where", + "futures", + "num_cpus", + "rand 0.8.5", + "rayon", + "serde", + "slop-algebra", + "slop-alloc", + "slop-challenger", + "slop-commit", + "slop-futures", + "slop-matrix", + "slop-tensor", +] + +[[package]] +name = "slop-poseidon2" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bc5ba869130dd0711cf7bd54f93785cd566b5c71201f38801fa3f500d508cc4" +dependencies = [ + "p3-poseidon2 0.3.1-succinct", +] + +[[package]] +name = "slop-primitives" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786111f9498e8d465b39cfef062297ef4e9b688f250a39abdafaca08e772b56c" +dependencies = [ + "slop-algebra", +] + +[[package]] +name = "slop-stacked" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "009f900d77e420cb852e0a51336084b6793a930ed0a645bf8825ee594281ce85" +dependencies = [ + "derive-where", + "futures", + "itertools 0.14.0", + "serde", + "slop-algebra", + "slop-alloc", + "slop-basefold", + "slop-basefold-prover", + "slop-challenger", + "slop-commit", + "slop-futures", + "slop-merkle-tree", + "slop-multilinear", + "slop-tensor", + "thiserror 1.0.69", +] + +[[package]] +name = "slop-sumcheck" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ebcccfdeca48b28404b5115191b2bde75b211817fa646872bfdac2c5022f2d2" +dependencies = [ + "futures", + "itertools 0.14.0", + "rayon", + "serde", + "slop-algebra", + "slop-alloc", + "slop-baby-bear", + "slop-challenger", + "slop-multilinear", + "thiserror 1.0.69", +] + +[[package]] +name = "slop-symmetric" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41115c944fdb8eec425d4515cbc1649852ab4ddcc6be67a069c8d2aa5205209" +dependencies = [ + "p3-symmetric 0.3.1-succinct", +] + +[[package]] +name = "slop-tensor" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5687c2940d85c141ccfc5440a8009946f64325903cc24c6490a2d26a0fa41f12" +dependencies = [ + "arrayvec", + "derive-where", + "itertools 0.14.0", + "rand 0.8.5", + "rayon", + "serde", + "slop-algebra", + "slop-alloc", + "slop-futures", + "slop-matrix", + "thiserror 1.0.69", + "transpose", +] + +[[package]] +name = "slop-uni-stark" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a049c6c331f6ef71b85c744f63e2bbffbe3748deb1dbbd3373742973d800d176" +dependencies = [ + "p3-uni-stark 0.3.1-succinct", +] + +[[package]] +name = "slop-utils" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e85c0b2008d88bd299beddb64937524dbd7c44f827aa3aadcc1736ac9163b01e" +dependencies = [ + "p3-util 0.3.1-succinct", + "tracing-forest", + "tracing-subscriber 0.3.20", +] + +[[package]] +name = "slop-whir" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d29053d2c34661c457af9ab4d098bc505dbdb1668dfac8646a28cc60d6bd33" +dependencies = [ + "derive-where", + "futures", + "itertools 0.14.0", + "rand 0.8.5", + "rayon", + "serde", + "slop-algebra", + "slop-alloc", + "slop-baby-bear", + "slop-basefold", + "slop-challenger", + "slop-commit", + "slop-dft", + "slop-jagged", + "slop-koala-bear", + "slop-matrix", + "slop-merkle-tree", + "slop-multilinear", + "slop-stacked", + "slop-tensor", + "slop-utils", + "thiserror 1.0.69", +] + [[package]] name = "smallvec" version = "1.15.0" @@ -13551,49 +14137,50 @@ dependencies = [ [[package]] name = "sp1-build" -version = "5.2.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6c620b00f468a4eeb6050d5641d971b35aa623d2142ecb55d02fd64840c5f02" +checksum = "bc332e424a0b3a6f9e74e5d031ec452ff4d4788b8757aa1dfd95faffd7b5261f" dependencies = [ "anyhow", "cargo_metadata 0.18.1", "chrono", "clap", "dirs 5.0.1", - "sp1-prover", + "sp1-primitives", ] [[package]] name = "sp1-core-executor" -version = "5.2.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2363566d0d4213d0ffd93cfcc1a5e413e2af8682213d3e65b90ac0af5623e3" +checksum = "80ff65d75a33e5296d3694c8ea7524e975267082ee8f2a474d96c441e7902a2a" dependencies = [ "bincode 1.3.3", "bytemuck", + "cfg-if", "clap", + "deepsize2", "elf", "enum-map", "eyre", "hashbrown 0.14.5", "hex", - "itertools 0.13.0", - "nohash-hasher", + "itertools 0.14.0", + "memmap2", "num", - "p3-baby-bear 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-util 0.2.3-succinct", - "rand 0.8.5", - "range-set-blaze", - "rrs-succinct", + "rrs-succinct 0.2.0", "serde", + "serde_arrays 0.2.0", "serde_json", + "slop-air", + "slop-algebra", + "slop-maybe-rayon", + "slop-symmetric", "sp1-curves", + "sp1-hypercube", + "sp1-jit", "sp1-primitives", - "sp1-stark", - "strum 0.26.3", - "strum_macros 0.26.4", + "strum 0.27.2", "subenum", "thiserror 1.0.69", "tiny-keccak", @@ -13604,334 +14191,430 @@ dependencies = [ [[package]] name = "sp1-core-machine" -version = "5.2.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd3ff75c100e24b89a7b513e082ec3e040c4c9f1cd779b6ba475c5bdc1aa7ad" +checksum = "93f03cbd86a48872cab083ab5019ee7976c0746f2bc25495b285f636cff6ec73" dependencies = [ "bincode 1.3.3", - "cbindgen", - "cc", "cfg-if", - "elliptic-curve", + "enum-map", + "futures", "generic-array 1.1.0", - "glob", "hashbrown 0.14.5", - "hex", - "itertools 0.13.0", - "k256", + "itertools 0.14.0", "num", "num_cpus", - "p256", - "p3-air 0.2.3-succinct", - "p3-baby-bear 0.2.3-succinct", - "p3-challenger 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-keccak-air 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-poseidon2 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", - "p3-uni-stark 0.2.3-succinct", - "p3-util 0.2.3-succinct", - "pathdiff", - "rand 0.8.5", "rayon", "rayon-scan", + "rrs-succinct 0.2.0", "serde", "serde_json", - "size", + "slop-air", + "slop-algebra", + "slop-challenger", + "slop-futures", + "slop-keccak-air", + "slop-matrix", + "slop-maybe-rayon", + "slop-uni-stark", "snowbridge-amcl", "sp1-core-executor", "sp1-curves", "sp1-derive", + "sp1-hypercube", + "sp1-jit", "sp1-primitives", - "sp1-stark", "static_assertions", - "strum 0.26.3", - "strum_macros 0.26.4", + "strum 0.27.2", + "sysinfo 0.30.13", "tempfile", "thiserror 1.0.69", + "tokio", "tracing", "tracing-forest", "tracing-subscriber 0.3.20", "typenum", - "web-time", ] [[package]] name = "sp1-cuda" -version = "5.2.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d3b98d9dd20856176aa7048e2da05d0c3e497f500ea8590292ffbd25002ec1" +checksum = "72e491eeaf96f0af3ed58b7e4f8a7114a15ef290078a7d2a29773a5cc6a13451" dependencies = [ "bincode 1.3.3", - "ctrlc", - "prost 0.13.5", + "bytes", + "reqwest 0.12.15", "serde", + "serde_json", + "sp1-core-executor", "sp1-core-machine", + "sp1-primitives", "sp1-prover", + "sp1-prover-types", + "thiserror 1.0.69", "tokio", "tracing", - "twirp-rs", ] [[package]] name = "sp1-curves" -version = "5.2.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7a5dc6007e0c1f35afe334e45531e17b8b347fdf73f6e7786ef5c1bc2218e30" +checksum = "e0b755f585263686c15b3d7afbbd66f1d9834b12f13405474eae9f9e369a3f8e" dependencies = [ "cfg-if", "dashu", "elliptic-curve", "generic-array 1.1.0", - "itertools 0.13.0", + "itertools 0.14.0", "k256", "num", "p256", - "p3-field 0.2.3-succinct", "serde", + "slop-algebra", "snowbridge-amcl", "sp1-primitives", - "sp1-stark", "typenum", ] [[package]] name = "sp1-derive" -version = "5.2.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a1ed8d5acbb6cea056401791e79ca3cba7c7d5e17d0d44cd60e117f16b11ca" +checksum = "d690d8fd47ba5767bdd46b0cba4e9dded6dc5c196e7d65cdb6697b0650b910f5" dependencies = [ + "proc-macro2", "quote", "syn 1.0.109", ] [[package]] -name = "sp1-lib" -version = "5.2.4" +name = "sp1-hypercube" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73b8ff343f2405d5935440e56b7aba5cee6d87303f0051974cbd6f5de502f57" +checksum = "3af271e48e110f218c48ad79f2e4d02eb74ec78acc99e68f1230280a4817a029" +dependencies = [ + "arrayref", + "deepsize2", + "derive-where", + "futures", + "hashbrown 0.14.5", + "itertools 0.14.0", + "num-bigint 0.4.6", + "num-traits", + "num_cpus", + "rayon", + "rayon-scan", + "serde", + "slop-air", + "slop-algebra", + "slop-alloc", + "slop-basefold", + "slop-basefold-prover", + "slop-bn254", + "slop-challenger", + "slop-commit", + "slop-futures", + "slop-jagged", + "slop-koala-bear", + "slop-matrix", + "slop-merkle-tree", + "slop-multilinear", + "slop-poseidon2", + "slop-stacked", + "slop-sumcheck", + "slop-symmetric", + "slop-tensor", + "slop-uni-stark", + "slop-whir", + "sp1-derive", + "sp1-primitives", + "strum 0.27.2", + "thiserror 1.0.69", + "thousands", + "tokio", + "tracing", +] + +[[package]] +name = "sp1-jit" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c91501fe81e7ba87f499bcdfde7edb1d14cae234f513855bda515a1c10a3175b" +dependencies = [ + "dynasmrt", + "hashbrown 0.14.5", + "memfd", + "memmap2", + "serde", + "tracing", + "uuid 1.17.0", +] + +[[package]] +name = "sp1-lib" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53f179ca7ad5d0d0ca36356ef2c4851eea02226cd409e4b414e4379d79582f11" dependencies = [ "bincode 1.3.3", - "elliptic-curve", "serde", "sp1-primitives", ] [[package]] name = "sp1-primitives" -version = "5.2.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e69a03098f827102c54c31a5e57280eb45b2c085de433b3f702e4f9e3ec1641" +checksum = "9bda0eaba853f3c162e6b62dc8eb25f25100ee0792f59919ef905811809e81e5" dependencies = [ "bincode 1.3.3", "blake3", - "cfg-if", + "elf", "hex", + "itertools 0.14.0", "lazy_static", "num-bigint 0.4.6", - "p3-baby-bear 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-poseidon2 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", "serde", "sha2", + "slop-algebra", + "slop-bn254", + "slop-challenger", + "slop-koala-bear", + "slop-poseidon2", + "slop-primitives", + "slop-symmetric", ] [[package]] name = "sp1-prover" -version = "5.2.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66f439f716cfc44c38d2aea975f1c4a9ed2cc40074ca7e4df8a37a3ff3795eb" +checksum = "46e5c7fb18987d289bb4675dd3b74e35b523e57d083599fd84a0580ee6514e8f" dependencies = [ "anyhow", "bincode 1.3.3", "clap", "dirs 5.0.1", + "downloader", + "either", "enum-map", "eyre", + "futures", "hashbrown 0.14.5", "hex", - "itertools 0.13.0", + "indicatif", + "itertools 0.14.0", "lru", + "mti", "num-bigint 0.4.6", - "p3-baby-bear 0.2.3-succinct", - "p3-bn254-fr 0.2.3-succinct", - "p3-challenger 0.2.3-succinct", - "p3-commit 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", - "p3-util 0.2.3-succinct", - "rayon", + "opentelemetry", + "pin-project", + "rand 0.8.5", "reqwest 0.12.15", "serde", "serde_json", "serial_test", "sha2", + "slop-air", + "slop-algebra", + "slop-basefold", + "slop-bn254", + "slop-challenger", + "slop-futures", + "slop-jagged", + "slop-multilinear", + "slop-stacked", + "slop-symmetric", "sp1-core-executor", "sp1-core-machine", + "sp1-derive", + "sp1-hypercube", + "sp1-jit", "sp1-primitives", + "sp1-prover-types", "sp1-recursion-circuit", "sp1-recursion-compiler", - "sp1-recursion-core", + "sp1-recursion-executor", "sp1-recursion-gnark-ffi", - "sp1-stark", + "sp1-recursion-machine", "sp1-verifier", + "static_assertions", + "sysinfo 0.30.13", + "tempfile", "thiserror 1.0.69", + "tokio", + "tonic 0.12.3", "tracing", "tracing-appender", "tracing-subscriber 0.3.20", ] [[package]] -name = "sp1-recursion-circuit" -version = "5.2.4" +name = "sp1-prover-types" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c4a3739e84f154becfc7d2a57d23c825ac83313feec64569b86090395c33fab" +checksum = "ecca137a943720333a37ed6d4c54a5b3eb597d156342bc79f205ee57bec515f9" dependencies = [ + "anyhow", + "async-scoped", + "bincode 1.3.3", + "chrono", + "futures-util", "hashbrown 0.14.5", - "itertools 0.13.0", - "num-traits", - "p3-air 0.2.3-succinct", - "p3-baby-bear 0.2.3-succinct", - "p3-bn254-fr 0.2.3-succinct", - "p3-challenger 0.2.3-succinct", - "p3-commit 0.2.3-succinct", - "p3-dft 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-fri 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", - "p3-uni-stark 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "mti", + "prost 0.13.5", + "serde", + "tokio", + "tonic 0.12.3", + "tonic-build 0.12.3", + "tracing", +] + +[[package]] +name = "sp1-recursion-circuit" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8509b6a5fc1e16631a5792f232508a9637ed8b7394f1dc99346ec86f13bc2cce" +dependencies = [ + "bincode 1.3.3", + "itertools 0.14.0", "rand 0.8.5", "rayon", "serde", + "slop-air", + "slop-algebra", + "slop-alloc", + "slop-basefold", + "slop-basefold-prover", + "slop-bn254", + "slop-challenger", + "slop-commit", + "slop-jagged", + "slop-koala-bear", + "slop-matrix", + "slop-merkle-tree", + "slop-multilinear", + "slop-stacked", + "slop-sumcheck", + "slop-symmetric", + "slop-tensor", + "slop-whir", "sp1-core-executor", "sp1-core-machine", "sp1-derive", + "sp1-hypercube", "sp1-primitives", "sp1-recursion-compiler", - "sp1-recursion-core", - "sp1-recursion-gnark-ffi", - "sp1-stark", + "sp1-recursion-executor", + "sp1-recursion-machine", "tracing", ] [[package]] name = "sp1-recursion-compiler" -version = "5.2.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06aa784cfdc5c979da22ad6c36fe393e9005b6b57702fa9bdd041f112ead5ec5" +checksum = "7b4f7940a5cc494a623dedf6baa15d35ee4f70f24a379ad291f8a09c714fcf41" dependencies = [ "backtrace", - "itertools 0.13.0", - "p3-baby-bear 0.2.3-succinct", - "p3-bn254-fr 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", + "cfg-if", + "itertools 0.14.0", "serde", + "slop-algebra", + "slop-bn254", + "slop-symmetric", "sp1-core-machine", + "sp1-hypercube", "sp1-primitives", - "sp1-recursion-core", - "sp1-recursion-derive", - "sp1-stark", + "sp1-recursion-executor", "tracing", "vec_map", ] [[package]] -name = "sp1-recursion-core" -version = "5.2.4" +name = "sp1-recursion-executor" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be0db07b18f95f4e04f63f7f12a6547efd10601e2ce180aaf7868aa1bd98257" +checksum = "56b553f950a424aaa2328dceae6231bed0f08cf738b98adcd05d0bccca2b4e77" dependencies = [ "backtrace", - "cbindgen", - "cc", "cfg-if", - "ff 0.13.1", - "glob", "hashbrown 0.14.5", - "itertools 0.13.0", - "num_cpus", - "p3-air 0.2.3-succinct", - "p3-baby-bear 0.2.3-succinct", - "p3-bn254-fr 0.2.3-succinct", - "p3-challenger 0.2.3-succinct", - "p3-commit 0.2.3-succinct", - "p3-dft 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-fri 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-merkle-tree 0.2.3-succinct", - "p3-poseidon2 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", - "p3-util 0.2.3-succinct", - "pathdiff", - "rand 0.8.5", + "itertools 0.14.0", + "range-set-blaze", "serde", - "sp1-core-machine", + "slop-algebra", + "slop-maybe-rayon", + "slop-poseidon2", + "slop-symmetric", + "smallvec", "sp1-derive", - "sp1-primitives", - "sp1-stark", + "sp1-hypercube", "static_assertions", "thiserror 1.0.69", "tracing", - "vec_map", - "zkhash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "sp1-recursion-derive" -version = "5.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b190465c0c0377f3cacfac2d0ac8a630adf8e1bfac8416be593753bfa4f668e" -dependencies = [ - "quote", - "syn 1.0.109", ] [[package]] name = "sp1-recursion-gnark-ffi" -version = "5.2.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "933ef703fb1c7a25e987a76ad705e60bb53730469766363b771baf3082a50fa0" +checksum = "c8d0782823fa7399066df18486e254733c0c40d8722d3c87c4a28999f8800fdb" dependencies = [ "anyhow", "bincode 1.3.3", "bindgen 0.70.1", - "cc", "cfg-if", "hex", "num-bigint 0.4.6", - "p3-baby-bear 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", "serde", "serde_json", "sha2", - "sp1-core-machine", + "slop-algebra", + "slop-symmetric", + "sp1-hypercube", + "sp1-primitives", "sp1-recursion-compiler", - "sp1-stark", + "sp1-verifier", "tempfile", "tracing", ] [[package]] -name = "sp1-sdk" -version = "5.2.4" +name = "sp1-recursion-machine" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3ae8bc52d12e8fbfdb10c4c8ce7651af04b63d390c152e6ce43d7744bbaf6f" +checksum = "d425a4c12ceed4a0e12c2d4b23b79d4a3668593bcb3602dd5738d8a857344a1e" +dependencies = [ + "itertools 0.14.0", + "rand 0.8.5", + "slop-air", + "slop-algebra", + "slop-basefold", + "slop-matrix", + "slop-maybe-rayon", + "slop-symmetric", + "sp1-derive", + "sp1-hypercube", + "sp1-primitives", + "sp1-recursion-executor", + "strum 0.27.2", + "tracing", + "zkhash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sp1-sdk" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6834292441c04b3680706155a5ade5c480552b13f1471001a635bdbf8197906" dependencies = [ "alloy-primitives", "alloy-signer", "alloy-signer-aws", "alloy-signer-local", - "alloy-sol-types", "anyhow", "async-trait", "aws-config", @@ -13942,92 +14625,80 @@ dependencies = [ "dirs 5.0.1", "eventsource-stream", "futures", - "hashbrown 0.14.5", "hex", "indicatif", - "itertools 0.13.0", + "itertools 0.14.0", "k256", - "p3-baby-bear 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-fri 0.2.3-succinct", + "num-bigint 0.4.6", "prost 0.13.5", "reqwest 0.12.15", "reqwest-middleware", "rustls 0.23.27", "serde", - "serde_json", + "sha2", + "slop-algebra", + "slop-alloc", + "slop-basefold", + "slop-commit", + "slop-jagged", + "slop-merkle-tree", + "slop-multilinear", + "slop-stacked", + "slop-sumcheck", + "slop-tensor", "sp1-build", "sp1-core-executor", "sp1-core-machine", "sp1-cuda", + "sp1-hypercube", "sp1-primitives", "sp1-prover", - "sp1-stark", - "strum 0.26.3", - "strum_macros 0.26.4", - "sysinfo 0.30.13", + "sp1-prover-types", + "sp1-recursion-executor", + "sp1-recursion-gnark-ffi", + "sp1-verifier", + "strum 0.27.2", "tempfile", "thiserror 1.0.69", "tokio", "tonic 0.12.3", "tracing", "twirp-rs", -] - -[[package]] -name = "sp1-stark" -version = "5.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e99d1cc89ba28fc95736afb1e6ad22b9eb689e95a1dbb29cf0e9d1fa4fc2a5c" -dependencies = [ - "arrayref", - "hashbrown 0.14.5", - "itertools 0.13.0", - "num-bigint 0.4.6", - "num-traits", - "p3-air 0.2.3-succinct", - "p3-baby-bear 0.2.3-succinct", - "p3-challenger 0.2.3-succinct", - "p3-commit 0.2.3-succinct", - "p3-dft 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-fri 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-merkle-tree 0.2.3-succinct", - "p3-poseidon2 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", - "p3-uni-stark 0.2.3-succinct", - "p3-util 0.2.3-succinct", - "rayon-scan", - "serde", - "sp1-derive", - "sp1-primitives", - "strum 0.26.3", - "sysinfo 0.30.13", - "tracing", + "zstd 0.13.3", ] [[package]] name = "sp1-verifier" -version = "5.2.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1904bbb3c2d16a7a11db32900f468149bc66253825e222f2db76f64fb8ffd1ab" +checksum = "09466f72acb4d511e5c896ea6dd8a792641e6eb202d77db323bc38ac60a3c53b" dependencies = [ + "bincode 1.3.3", "blake3", "cfg-if", + "dirs 5.0.1", "hex", "lazy_static", + "serde", "sha2", - "substrate-bn-succinct", + "slop-algebra", + "slop-challenger", + "slop-primitives", + "slop-symmetric", + "sp1-hypercube", + "sp1-primitives", + "sp1-recursion-executor", + "sp1-recursion-machine", + "strum 0.27.2", + "substrate-bn-succinct-rs", "thiserror 2.0.12", ] [[package]] name = "sp1-zkvm" -version = "5.2.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6247de4d980d1f3311fa877cc5d2d3b7e111258878c8196a8bb9728aec98c8c" +checksum = "2a2e09d266c1b20f311fdeeafffc1e465629edf0b3c3e70dfa8a4d7e68b27324" dependencies = [ "blake3", "cfg-if", @@ -14037,10 +14708,9 @@ dependencies = [ "getrandom 0.3.3", "lazy_static", "libm", - "p3-baby-bear 0.2.3-succinct", - "p3-field 0.2.3-succinct", "rand 0.8.5", "sha2", + "slop-algebra", "sp1-lib", "sp1-primitives", ] @@ -14288,10 +14958,10 @@ dependencies = [ ] [[package]] -name = "substrate-bn-succinct" -version = "0.6.0-v5.0.0" +name = "substrate-bn-succinct-rs" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ba32f1b74728f92887c3ad17c42bf82998eb52c9091018f35294e9cd388b0c8" +checksum = "a241fd7c1016fb8ad30fcf5a20986c0c4538e8f15a1b41a1761516299e377ec1" dependencies = [ "bytemuck", "byteorder", @@ -14301,7 +14971,6 @@ dependencies = [ "num-bigint 0.4.6", "rand 0.8.5", "rustc-hex", - "sp1-lib", ] [[package]] @@ -14677,6 +15346,12 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "thousands" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" + [[package]] name = "thread_local" version = "1.1.8" @@ -15102,6 +15777,20 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "tonic-build" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11" +dependencies = [ + "prettyplease 0.2.32", + "proc-macro2", + "prost-build 0.13.5", + "prost-types 0.13.5", + "quote", + "syn 2.0.101", +] + [[package]] name = "tonic-build" version = "0.14.3" @@ -15587,6 +16276,21 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" +[[package]] +name = "typeid_prefix" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9da1387307fdee46aa441e4f08a1b491e659fcac1aca9cd71f2c624a0de5d1b" + +[[package]] +name = "typeid_suffix" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77b55e96f110c6db5d1a2f24072552537f0091dc90cebeaa679540bac93e7405" +dependencies = [ + "uuid 1.17.0", +] + [[package]] name = "typenum" version = "1.18.0" @@ -15784,10 +16488,13 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" dependencies = [ + "atomic", "getrandom 0.3.3", "js-sys", + "md-5", "rand 0.9.2", "serde", + "sha1_smol", "uuid-macro-internal", "wasm-bindgen", ] @@ -16870,7 +17577,7 @@ dependencies = [ "pbkdf2 0.11.0", "sha1", "time", - "zstd", + "zstd 0.11.2+zstd.1.5.2", ] [[package]] @@ -17036,7 +17743,7 @@ dependencies = [ "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", "rand 0.8.5", "rayon-scan", - "rrs-succinct", + "rrs-succinct 0.1.0", "serde", "serde_json", "sha2", @@ -17486,7 +18193,16 @@ version = "0.11.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" dependencies = [ - "zstd-safe", + "zstd-safe 5.0.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe 7.2.4", ] [[package]] @@ -17499,6 +18215,15 @@ dependencies = [ "zstd-sys", ] +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + [[package]] name = "zstd-sys" version = "2.0.15+zstd.1.5.7" diff --git a/Cargo.toml b/Cargo.toml index 1f226dd..8bcd48b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -137,8 +137,12 @@ risc0-zkvm = { version = "3.0.4", default-features = false } risc0-zkvm-platform = { version = "2.2.1", default-features = false } # SP1 dependencies -sp1-sdk = "5.2.4" -sp1-zkvm = { version = "5.2.4", default-features = false } +sp1-cuda = "6.0.0" +sp1-hypercube = "6.0.0" +sp1-recursion-executor = "6.0.0" +sp1-sdk = "6.0.0" +sp1-p3-field = { version = "0.3.1-succinct", package = "p3-field" } +sp1-zkvm = { version = "6.0.0", default-features = false } # Ziren dependencies zkm-sdk = { git = "https://github.com/ProjectZKM/Ziren.git", tag = "v1.2.3" } diff --git a/crates/zkvm/sp1/Cargo.toml b/crates/zkvm/sp1/Cargo.toml index a54760e..84bb6bc 100644 --- a/crates/zkvm/sp1/Cargo.toml +++ b/crates/zkvm/sp1/Cargo.toml @@ -11,10 +11,15 @@ bincode = { workspace = true, features = ["alloc", "serde"] } serde.workspace = true tempfile.workspace = true thiserror.workspace = true +tokio = { workspace = true, features = ["rt-multi-thread"], optional = true } tracing.workspace = true # SP1 dependencies -sp1-sdk = { workspace = true, optional = true } +sp1-cuda = { workspace = true, optional = true } +sp1-hypercube = { workspace = true, optional = true } +sp1-p3-field = { workspace = true, optional = true } +sp1-recursion-executor = { workspace = true, optional = true } +sp1-sdk = { workspace = true, features = ["network"], optional = true } # Local dependencies ere-compile-utils = { workspace = true, optional = true } @@ -29,7 +34,7 @@ ere-build-utils.workspace = true [features] default = ["compiler", "zkvm"] compiler = ["dep:ere-compile-utils"] -zkvm = ["dep:sp1-sdk"] +zkvm = ["dep:tokio", "dep:sp1-cuda", "dep:sp1-hypercube", "dep:sp1-p3-field", "dep:sp1-recursion-executor", "dep:sp1-sdk"] [lints] workspace = true diff --git a/crates/zkvm/sp1/platform/Cargo.toml b/crates/zkvm/sp1/platform/Cargo.toml index ebcd5cc..ec39ff1 100644 --- a/crates/zkvm/sp1/platform/Cargo.toml +++ b/crates/zkvm/sp1/platform/Cargo.toml @@ -15,10 +15,10 @@ ere-platform-trait.workspace = true [features] default = ["lib", "libm"] blake3 = ["sp1-zkvm/blake3"] -embedded = ["sp1-zkvm/embedded"] lib = ["sp1-zkvm/lib"] libm = ["sp1-zkvm/libm"] verify = ["sp1-zkvm/verify"] +untrusted_programs = ["sp1-zkvm/untrusted_programs"] [lints] workspace = true diff --git a/crates/zkvm/sp1/src/compiler/rust_rv32ima.rs b/crates/zkvm/sp1/src/compiler/rust_rv32ima.rs index 509c328..3dabc9e 100644 --- a/crates/zkvm/sp1/src/compiler/rust_rv32ima.rs +++ b/crates/zkvm/sp1/src/compiler/rust_rv32ima.rs @@ -4,15 +4,13 @@ use ere_zkvm_interface::compiler::Compiler; use std::{env, path::Path}; const TARGET_TRIPLE: &str = "riscv32ima-unknown-none-elf"; +/// According to https://github.com/succinctlabs/sp1/blob/v6.0.0/crates/build/src/command/utils.rs#L49. const RUSTFLAGS: &[&str] = &[ "-C", "passes=lower-atomic", // Only for rustc > 1.81 - "-C", - // Start of the code section - "link-arg=-Ttext=0x00201000", - "-C", // The lowest memory location that will be used when your program is loaded - "link-arg=--image-base=0x00200800", + "-C", + "link-arg=--image-base=0x78000000", "-C", "panic=abort", "--cfg", diff --git a/crates/zkvm/sp1/src/zkvm.rs b/crates/zkvm/sp1/src/zkvm.rs index 83f7208..230bc6d 100644 --- a/crates/zkvm/sp1/src/zkvm.rs +++ b/crates/zkvm/sp1/src/zkvm.rs @@ -1,16 +1,11 @@ -use crate::{program::SP1Program, zkvm::sdk::Prover}; +use crate::{program::SP1Program, zkvm::sdk::SP1Sdk}; use anyhow::bail; use ere_zkvm_interface::zkvm::{ CommonError, Input, ProgramExecutionReport, ProgramProvingReport, Proof, ProofKind, ProverResource, PublicValues, zkVM, zkVMProgramDigest, }; -use sp1_sdk::{SP1ProofMode, SP1ProofWithPublicValues, SP1ProvingKey, SP1Stdin, SP1VerifyingKey}; -use std::{ - mem::take, - panic, - sync::{RwLock, RwLockReadGuard, RwLockWriteGuard}, - time::Instant, -}; +use sp1_sdk::{SP1ProofMode, SP1ProofWithPublicValues, SP1Stdin, SP1VerifyingKey}; +use std::{future::Future, sync::OnceLock, time::Instant}; use tracing::info; mod error; @@ -21,42 +16,13 @@ pub use error::Error; include!(concat!(env!("OUT_DIR"), "/name_and_sdk_version.rs")); pub struct EreSP1 { - program: SP1Program, - /// Prover resource configuration for creating clients - resource: ProverResource, - /// Proving key - pk: SP1ProvingKey, - /// Verification key - vk: SP1VerifyingKey, - // The current version of SP1 (v5.2.4) has a problem where if GPU proving - // the program crashes in the Moongate container, it leaves an internal - // mutex poisoned, which prevents further proving attempts. - // This is a workaround to avoid the poisoned mutex issue by creating a new - // prover if the proving panics. - // Eventually, this should be fixed in the SP1 SDK. - // For more context see: https://github.com/eth-act/zkevm-benchmark-workload/issues/54 - prover: RwLock, + sdk: SP1Sdk, } impl EreSP1 { pub fn new(program: SP1Program, resource: ProverResource) -> Result { - let prover = Prover::new(&resource)?; - let (pk, vk) = prover.setup(&program.elf)?; - Ok(Self { - program, - resource, - pk, - vk, - prover: RwLock::new(prover), - }) - } - - fn prover(&'_ self) -> Result, Error> { - self.prover.read().map_err(|_| Error::RwLockPosioned) - } - - fn prover_mut(&'_ self) -> Result, Error> { - self.prover.write().map_err(|_| Error::RwLockPosioned) + let sdk = block_on(SP1Sdk::new(program.elf, &resource))?; + Ok(Self { sdk }) } } @@ -64,10 +30,8 @@ impl zkVM for EreSP1 { fn execute(&self, input: &Input) -> anyhow::Result<(PublicValues, ProgramExecutionReport)> { let stdin = input_to_stdin(input)?; - let prover = self.prover()?; - let start = Instant::now(); - let (public_values, exec_report) = prover.execute(self.program.elf(), &stdin)?; + let (public_values, exec_report) = block_on(self.sdk.execute(stdin))?; let execution_duration = start.elapsed(); Ok(( @@ -85,7 +49,7 @@ impl zkVM for EreSP1 { input: &Input, proof_kind: ProofKind, ) -> anyhow::Result<(PublicValues, Proof, ProgramProvingReport)> { - info!("Generating proof…"); + info!("Generating proof..."); let stdin = input_to_stdin(input)?; @@ -94,27 +58,8 @@ impl zkVM for EreSP1 { ProofKind::Groth16 => SP1ProofMode::Groth16, }; - let mut prover = self.prover_mut()?; - - // Restart GPU prover if the prover is dropped before. - if matches!(self.resource, ProverResource::Gpu) && matches!(&*prover, Prover::Cpu(_)) { - *prover = Prover::new(&self.resource).and_then(|prover| { - prover.setup(&self.program.elf)?; - Ok(prover) - })?; - } - let start = Instant::now(); - let proof = - panic::catch_unwind(|| prover.prove(&self.pk, &stdin, mode)).map_err(|err| { - if matches!(self.resource, ProverResource::Gpu) { - // Drop the panicked GPU prover and replace it with CPU one, - // next prove call will try to restart it. - take(&mut *prover); - } - - Error::Panic(panic_msg(err)) - })??; + let proof = block_on(self.sdk.prove(stdin, mode))?; let proving_time = start.elapsed(); let public_values = proof.public_values.to_vec(); @@ -132,7 +77,7 @@ impl zkVM for EreSP1 { } fn verify(&self, proof: &Proof) -> anyhow::Result { - info!("Verifying proof…"); + info!("Verifying proof..."); let proof_kind = proof.kind(); @@ -149,7 +94,7 @@ impl zkVM for EreSP1 { bail!(Error::InvalidProofKind(proof_kind, inner_proof_kind)); } - self.prover()?.verify(&proof, &self.vk)?; + self.sdk.verify(&proof)?; let public_values_bytes = proof.public_values.as_slice().to_vec(); @@ -169,7 +114,7 @@ impl zkVMProgramDigest for EreSP1 { type ProgramDigest = SP1VerifyingKey; fn program_digest(&self) -> anyhow::Result { - Ok(self.vk.clone()) + Ok(self.sdk.verifying_key().clone()) } } @@ -184,10 +129,16 @@ fn input_to_stdin(input: &Input) -> Result { Ok(stdin) } -fn panic_msg(err: Box) -> String { - None.or_else(|| err.downcast_ref::().cloned()) - .or_else(|| err.downcast_ref::<&'static str>().map(ToString::to_string)) - .unwrap_or_else(|| "unknown panic msg".to_string()) +fn block_on(future: impl Future) -> T { + match tokio::runtime::Handle::try_current() { + Ok(handle) => tokio::task::block_in_place(|| handle.block_on(future)), + Err(_) => { + static FALLBACK_RT: OnceLock = OnceLock::new(); + FALLBACK_RT + .get_or_init(|| tokio::runtime::Runtime::new().expect("Failed to create runtime")) + .block_on(future) + } + } } #[cfg(test)] diff --git a/crates/zkvm/sp1/src/zkvm/error.rs b/crates/zkvm/sp1/src/zkvm/error.rs index a326e16..3c36e6c 100644 --- a/crates/zkvm/sp1/src/zkvm/error.rs +++ b/crates/zkvm/sp1/src/zkvm/error.rs @@ -7,14 +7,8 @@ pub enum Error { #[error(transparent)] CommonError(#[from] CommonError), - #[error("Prover RwLock posioned, panic not catched properly")] - RwLockPosioned, - #[error("Failed to setup ELF: {0}")] - SetupElfFailed(String), - - #[error("Failed to initialize cuda prover: {0}")] - InitCudaProverFailed(String), + Setup(#[source] anyhow::Error), #[error("Deserialize proofs in Input failed: {0:?}")] DeserializeInputProofs(bincode::error::DecodeError), @@ -26,12 +20,15 @@ pub enum Error { #[error("SP1 execution failed: {0}")] Execute(#[source] anyhow::Error), + #[error("SP1 execution completed with non-success exit code: {0}")] + ExecutionFailed(u32), + // Prove #[error("SP1 SDK proving failed: {0}")] Prove(#[source] anyhow::Error), - #[error("SP1 proving panicked: {0}")] - Panic(String), + #[error("Failed to extract exit code from proof")] + ExitCodeExtractionFailed, // Verify #[error("Invalid proof kind, expected: {0:?}, got: {1:?}")] @@ -40,3 +37,13 @@ pub enum Error { #[error("SP1 SDK verification failed: {0}")] Verify(#[source] SP1VerificationError), } + +impl Error { + pub fn setup(err: impl Into) -> Self { + Self::Setup(err.into()) + } + + pub fn prove(err: impl Into) -> Self { + Self::Prove(err.into()) + } +} diff --git a/crates/zkvm/sp1/src/zkvm/sdk.rs b/crates/zkvm/sp1/src/zkvm/sdk.rs index 2974d38..35b69a8 100644 --- a/crates/zkvm/sp1/src/zkvm/sdk.rs +++ b/crates/zkvm/sp1/src/zkvm/sdk.rs @@ -1,42 +1,57 @@ -use crate::zkvm::{Error, panic_msg}; +use crate::zkvm::Error; use ere_zkvm_interface::{ CommonError, RemoteProverConfig, zkvm::{ProverResource, ProverResourceKind}, }; +use sp1_cuda::CudaProvingKey; +use sp1_hypercube::air::PublicValues; +use sp1_p3_field::PrimeField32; +use sp1_recursion_executor::RecursionPublicValues; use sp1_sdk::{ - CpuProver, NetworkProver, Prover as _, ProverClient, SP1ProofMode, SP1ProofWithPublicValues, - SP1ProvingKey, SP1Stdin, SP1VerifyingKey, + CpuProver, CudaProver, Elf, ExecutionReport, NetworkProver, ProveRequest, Prover as SP1Prover, + ProverClient, ProvingKey as SP1ProvingKeyTrait, SP1Proof, SP1ProofMode, + SP1ProofWithPublicValues, SP1ProvingKey as CpuProvingKey, SP1PublicValues, SP1Stdin, + SP1VerifyingKey, StatusCode, }; -use std::{ - env, - ops::Deref, - panic::{self, AssertUnwindSafe}, - process::Command, -}; -use tracing::error; +use std::{borrow::Borrow, env, sync::Arc}; -// https://github.com/succinctlabs/sp1/blob/v5.2.4/crates/cuda/src/lib.rs#L207C34-L207C78. -const SP1_CUDA_IMAGE: &str = "public.ecr.aws/succinct-labs/sp1-gpu:8fd1ef7"; - -#[allow(clippy::large_enum_variant)] -pub enum Prover { - Cpu(CpuProver), - Gpu(CudaProver), - Network(NetworkProver), +pub enum SP1Sdk { + Cpu { + prover: CpuProver, + pk: CpuProvingKey, + }, + Gpu { + prover: CudaProver, + pk: CudaProvingKey, + }, + Network { + prover: Box, + pk: CpuProvingKey, + }, } -impl Default for Prover { - fn default() -> Self { - Self::new(&ProverResource::Cpu).unwrap() - } -} - -impl Prover { - pub fn new(resource: &ProverResource) -> Result { +impl SP1Sdk { + pub async fn new(elf: Vec, resource: &ProverResource) -> Result { + let elf = Elf::Dynamic(Arc::from(elf)); Ok(match resource { - ProverResource::Cpu => Self::Cpu(ProverClient::builder().cpu().build()), - ProverResource::Gpu => Self::Gpu(CudaProver::new()?), - ProverResource::Network(config) => Self::Network(build_network_prover(config)?), + ProverResource::Cpu => { + let prover = ProverClient::builder().cpu().build().await; + let pk = prover.setup(elf).await.map_err(Error::setup)?; + Self::Cpu { prover, pk } + } + ProverResource::Gpu => { + let prover = ProverClient::builder().cuda().build().await; + let pk = prover.setup(elf).await.map_err(Error::setup)?; + Self::Gpu { prover, pk } + } + ProverResource::Network(config) => { + let prover = build_network_prover(config).await?; + let pk = prover.setup(elf).await.map_err(Error::setup)?; + Self::Network { + prover: Box::new(prover), + pk, + } + } _ => Err(CommonError::unsupported_prover_resource_kind( resource.kind(), [ @@ -48,135 +63,73 @@ impl Prover { }) } - pub fn setup(&self, elf: &[u8]) -> Result<(SP1ProvingKey, SP1VerifyingKey), Error> { - panic::catch_unwind(AssertUnwindSafe(|| match self { - Self::Cpu(cpu_prover) => cpu_prover.setup(elf), - Self::Gpu(cuda_prover) => cuda_prover.setup(elf), - Self::Network(network_prover) => network_prover.setup(elf), - })) - .map_err(|err| Error::SetupElfFailed(panic_msg(err))) - } - - pub fn execute( - &self, - elf: &[u8], - input: &SP1Stdin, - ) -> Result<(sp1_sdk::SP1PublicValues, sp1_sdk::ExecutionReport), Error> { + pub fn verifying_key(&self) -> &SP1VerifyingKey { match self { - Self::Cpu(cpu_prover) => cpu_prover.execute(elf, input).run(), - Self::Gpu(cuda_prover) => cuda_prover.execute(elf, input).run(), - Self::Network(network_prover) => network_prover.execute(elf, input).run(), + Self::Cpu { pk, .. } => pk.verifying_key(), + Self::Gpu { pk, .. } => pk.verifying_key(), + Self::Network { pk, .. } => pk.verifying_key(), } - .map_err(Error::Execute) } - pub fn prove( + pub async fn execute( &self, - pk: &SP1ProvingKey, - input: &SP1Stdin, + input: SP1Stdin, + ) -> Result<(SP1PublicValues, ExecutionReport), Error> { + let (public_values, exec_report) = match self { + Self::Cpu { prover, pk } => prover.execute(pk.elf().clone(), input).await, + Self::Gpu { prover, pk } => prover.execute(pk.elf().clone(), input).await, + Self::Network { prover, pk } => prover.execute(pk.elf().clone(), input).await, + } + .map_err(|e| Error::Execute(e.into()))?; + + let exit_code = exec_report.exit_code as u32; + if exit_code != StatusCode::SUCCESS.as_u32() { + return Err(Error::ExecutionFailed(exit_code)); + } + + Ok((public_values, exec_report)) + } + + pub async fn prove( + &self, + input: SP1Stdin, mode: SP1ProofMode, ) -> Result { - match self { - Self::Cpu(cpu_prover) => cpu_prover.prove(pk, input).mode(mode).run(), - Self::Gpu(cuda_prover) => cuda_prover.prove(pk, input).mode(mode).run(), - Self::Network(network_prover) => network_prover.prove(pk, input).mode(mode).run(), + let proof = match self { + Self::Cpu { prover, pk } => { + let req = prover.prove(pk, input).mode(mode); + req.await.map_err(Error::prove) + } + Self::Gpu { prover, pk } => { + let req = prover.prove(pk, input).mode(mode); + req.await.map_err(Error::prove) + } + Self::Network { prover, pk } => { + let req = prover.prove(pk, input).mode(mode); + req.await.map_err(Error::prove) + } + }?; + + let exit_code = extract_exit_code(&proof)?; + if exit_code != StatusCode::SUCCESS.as_u32() { + return Err(Error::ExecutionFailed(exit_code)); } - .map_err(Error::Prove) + + Ok(proof) } - pub fn verify( - &self, - proof: &SP1ProofWithPublicValues, - vk: &SP1VerifyingKey, - ) -> Result<(), Error> { + pub fn verify(&self, proof: &SP1ProofWithPublicValues) -> Result<(), Error> { + let vk = self.verifying_key(); match self { - Self::Cpu(cpu_prover) => cpu_prover.verify(proof, vk), - Self::Gpu(cuda_prover) => cuda_prover.verify(proof, vk), - Self::Network(network_prover) => network_prover.verify(proof, vk), + Self::Cpu { prover, .. } => prover.verify(proof, vk, Some(StatusCode::SUCCESS)), + Self::Gpu { prover, .. } => prover.verify(proof, vk, Some(StatusCode::SUCCESS)), + Self::Network { prover, .. } => prover.verify(proof, vk, Some(StatusCode::SUCCESS)), } .map_err(Error::Verify) } } -pub struct CudaProver { - container_name: String, - prover: sp1_sdk::CudaProver, -} - -impl Deref for CudaProver { - type Target = sp1_sdk::CudaProver; - - fn deref(&self) -> &Self::Target { - &self.prover - } -} - -impl Drop for CudaProver { - fn drop(&mut self) { - let mut cmd = Command::new("docker"); - cmd.args(["container", "rm", "--force", self.container_name.as_ref()]); - if let Err(err) = cmd - .output() - .map_err(|err| CommonError::command(&cmd, err)) - .and_then(|output| { - (!output.status.success()).then_some(()).ok_or_else(|| { - CommonError::command_exit_non_zero(&cmd, output.status, Some(&output)) - }) - }) - { - error!( - "Failed to remove docker container {}: {err}", - self.container_name - ); - } - } -} - -impl CudaProver { - fn new() -> Result { - // Ported from https://github.com/succinctlabs/sp1/blob/v5.2.4/crates/cuda/src/lib.rs#L199. - - let container_name = "sp1-gpu".to_string(); - let image_name = env::var("SP1_GPU_IMAGE").unwrap_or_else(|_| SP1_CUDA_IMAGE.to_string()); - let rust_log = env::var("RUST_LOG").unwrap_or_else(|_| "none".to_string()); - let gpus = env::var("ERE_GPU_DEVICES").unwrap_or_else(|_| "all".to_string()); - - let mut cmd = Command::new("docker"); - cmd.args([ - "run", - "--rm", - "--env", - &format!("RUST_LOG={rust_log}"), - "--publish", - "3000:3000", - "--gpus", - &gpus, - "--name", - &container_name, - &image_name, - ]); - - let host = if let Ok(network) = env::var("ERE_DOCKER_NETWORK") { - cmd.args(["--network", network.as_str()]); - container_name.as_str() - } else { - "127.0.0.1" - }; - let endpoint = format!("http://{host}:3000/twirp/"); - cmd.spawn().map_err(|err| CommonError::command(&cmd, err))?; - - let prover = - panic::catch_unwind(|| ProverClient::builder().cuda().server(&endpoint).build()) - .map_err(|err| Error::InitCudaProverFailed(panic_msg(err)))?; - - Ok(Self { - container_name, - prover, - }) - } -} - -fn build_network_prover(config: &RemoteProverConfig) -> Result { +async fn build_network_prover(config: &RemoteProverConfig) -> Result { let mut builder = ProverClient::builder().network(); // Check if we have a private key in the config or environment if let Some(api_key) = &config.api_key { @@ -193,5 +146,32 @@ fn build_network_prover(config: &RemoteProverConfig) -> Result Result { + match &proof.proof { + SP1Proof::Core(shard_proofs) => shard_proofs.last().map(|proof| { + let pv: &PublicValues<[_; 4], [_; 3], [_; 4], _> = + proof.public_values.as_slice().borrow(); + pv.exit_code.as_canonical_u32() + }), + SP1Proof::Compressed(proof) => { + let pv: &RecursionPublicValues<_> = proof.proof.public_values.as_slice().borrow(); + Some(pv.exit_code.as_canonical_u32()) + } + SP1Proof::Plonk(proof) => proof + .public_inputs + .get(2) + .and_then(|value| value.parse::().ok()), + SP1Proof::Groth16(proof) => proof + .public_inputs + .get(2) + .and_then(|value| value.parse::().ok()), + } + .ok_or(Error::ExitCodeExtractionFailed) }