From 70f28ecd3a97f003017e9b1817f25033e5202c90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 13 Jun 2025 18:07:41 -0300 Subject: [PATCH 001/236] update version and build.rs --- Cargo.lock | 808 +++++++++++++++--- crates/l2/prover/Cargo.toml | 2 +- crates/l2/prover/zkvm/interface/Cargo.toml | 3 +- crates/l2/prover/zkvm/interface/build.rs | 19 +- .../l2/prover/zkvm/interface/risc0/Cargo.toml | 2 +- .../l2/prover/zkvm/interface/sp1/Cargo.lock | 58 +- 6 files changed, 776 insertions(+), 116 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2c3df45e167..1742a3ed707 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -846,6 +846,9 @@ name = "anyhow" version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +dependencies = [ + "backtrace", +] [[package]] name = "approx" @@ -871,22 +874,34 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" dependencies = [ - "ark-ec", + "ark-ec 0.4.2", "ark-ff 0.4.2", "ark-std 0.4.0", ] +[[package]] +name = "ark-bn254" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-r1cs-std", + "ark-std 0.5.0", +] + [[package]] name = "ark-crypto-primitives" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" dependencies = [ - "ark-ec", + "ark-ec 0.4.2", "ark-ff 0.4.2", - "ark-relations", + "ark-relations 0.4.0", "ark-serialize 0.4.2", - "ark-snark", + "ark-snark 0.4.0", "ark-std 0.4.0", "blake2", "derivative", @@ -894,6 +909,39 @@ dependencies = [ "sha2", ] +[[package]] +name = "ark-crypto-primitives" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0c292754729c8a190e50414fd1a37093c786c709899f29c9f7daccecfa855e" +dependencies = [ + "ahash", + "ark-crypto-primitives-macros", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-relations 0.5.1", + "ark-serialize 0.5.0", + "ark-snark 0.5.1", + "ark-std 0.5.0", + "blake2", + "derivative", + "digest 0.10.7", + "fnv", + "merlin", + "sha2", +] + +[[package]] +name = "ark-crypto-primitives-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e89fe77d1f0f4fe5b96dfc940923d88d17b6a773808124f21e764dfb063c6a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + [[package]] name = "ark-ec" version = "0.4.2" @@ -901,7 +949,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ "ark-ff 0.4.2", - "ark-poly", + "ark-poly 0.4.2", "ark-serialize 0.4.2", "ark-std 0.4.0", "derivative", @@ -911,6 +959,27 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.4", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "zeroize", +] + [[package]] name = "ark-ff" version = "0.3.0" @@ -949,6 +1018,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-traits", + "paste", + "zeroize", +] + [[package]] name = "ark-ff-asm" version = "0.3.0" @@ -969,6 +1058,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.103", +] + [[package]] name = "ark-ff-macros" version = "0.3.0" @@ -994,21 +1093,49 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.103", +] + [[package]] name = "ark-groth16" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" dependencies = [ - "ark-crypto-primitives", - "ark-ec", + "ark-crypto-primitives 0.4.0", + "ark-ec 0.4.2", "ark-ff 0.4.2", - "ark-poly", - "ark-relations", + "ark-poly 0.4.2", + "ark-relations 0.4.0", "ark-serialize 0.4.2", "ark-std 0.4.0", ] +[[package]] +name = "ark-groth16" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88f1d0f3a534bb54188b8dcc104307db6c56cdae574ddc3212aec0625740fc7e" +dependencies = [ + "ark-crypto-primitives 0.5.0", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-relations 0.5.1", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + [[package]] name = "ark-poly" version = "0.4.2" @@ -1022,6 +1149,38 @@ dependencies = [ "hashbrown 0.13.2", ] +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.4", +] + +[[package]] +name = "ark-r1cs-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-relations 0.5.1", + "ark-std 0.5.0", + "educe", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "tracing", +] + [[package]] name = "ark-relations" version = "0.4.0" @@ -1031,6 +1190,17 @@ dependencies = [ "ark-ff 0.4.2", "ark-std 0.4.0", "tracing", +] + +[[package]] +name = "ark-relations" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" +dependencies = [ + "ark-ff 0.5.0", + "ark-std 0.5.0", + "tracing", "tracing-subscriber 0.2.25", ] @@ -1050,12 +1220,25 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ - "ark-serialize-derive", + "ark-serialize-derive 0.4.2", "ark-std 0.4.0", "digest 0.10.7", "num-bigint 0.4.6", ] +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-serialize-derive 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "num-bigint 0.4.6", +] + [[package]] name = "ark-serialize-derive" version = "0.4.2" @@ -1067,6 +1250,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + [[package]] name = "ark-snark" version = "0.4.0" @@ -1074,11 +1268,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" dependencies = [ "ark-ff 0.4.2", - "ark-relations", + "ark-relations 0.4.0", "ark-serialize 0.4.2", "ark-std 0.4.0", ] +[[package]] +name = "ark-snark" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d368e2848c2d4c129ce7679a7d0d2d612b6a274d3ea6a13bad4445d61b381b88" +dependencies = [ + "ark-ff 0.5.0", + "ark-relations 0.5.1", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + [[package]] name = "ark-std" version = "0.3.0" @@ -1099,6 +1305,22 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "ark-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + [[package]] name = "arrayref" version = "0.3.9" @@ -1187,6 +1409,15 @@ dependencies = [ "rustc_version 0.4.1", ] +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -1834,6 +2065,20 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.26", + "serde", + "serde_json", + "thiserror 2.0.12", +] + [[package]] name = "cast" version = "0.3.0" @@ -2064,6 +2309,12 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +[[package]] +name = "cobs" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" + [[package]] name = "coins-bip32" version = "0.8.7" @@ -2348,17 +2599,10 @@ dependencies = [ ] [[package]] -name = "crossbeam" -version = "0.8.4" +name = "critical-section" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", -] +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" [[package]] name = "crossbeam-channel" @@ -3094,6 +3338,18 @@ dependencies = [ "spki", ] +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.103", +] + [[package]] name = "ef_tests-blockchain" version = "0.1.0" @@ -3174,6 +3430,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + [[package]] name = "ena" version = "0.14.3" @@ -3246,6 +3514,26 @@ dependencies = [ "syn 2.0.103", ] +[[package]] +name = "enum-ordinalize" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + [[package]] name = "enumn" version = "0.1.14" @@ -3503,7 +3791,7 @@ checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" dependencies = [ "arrayvec", "bytes", - "cargo_metadata", + "cargo_metadata 0.18.1", "chrono", "const-hex", "elliptic-curve", @@ -3923,7 +4211,7 @@ dependencies = [ "hex", "kzg-rs", "risc0-ethereum-contracts", - "risc0-zkvm", + "risc0-zkvm 2.1.0", "serde", "serde_json", "sp1-recursion-gnark-ffi", @@ -4884,6 +5172,15 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -4940,6 +5237,15 @@ dependencies = [ "fxhash", ] +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + [[package]] name = "headers" version = "0.4.1" @@ -4964,6 +5270,20 @@ dependencies = [ "http 1.3.1", ] +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32", + "rustc_version 0.4.1", + "serde", + "spin 0.9.8", + "stable_deref_trait", +] + [[package]] name = "heck" version = "0.4.1" @@ -5509,6 +5829,12 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a46645bbd70538861a90d0f26c31537cdf1e44aae99a794fb75a664b70951bc" +[[package]] +name = "include_bytes_aligned" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee796ad498c8d9a1d68e477df8f754ed784ef875de1414ebdaf169f70a6a784" + [[package]] name = "indenter" version = "0.3.3" @@ -6113,6 +6439,64 @@ dependencies = [ "syn 2.0.103", ] +[[package]] +name = "malachite" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fbdf9cb251732db30a7200ebb6ae5d22fe8e11397364416617d2c2cf0c51cb5" +dependencies = [ + "malachite-base", + "malachite-float", + "malachite-nz", + "malachite-q", +] + +[[package]] +name = "malachite-base" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ea0ed76adf7defc1a92240b5c36d5368cfe9251640dcce5bd2d0b7c1fd87aeb" +dependencies = [ + "hashbrown 0.14.5", + "itertools 0.11.0", + "libm", + "ryu", +] + +[[package]] +name = "malachite-float" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af9d20db1c73759c1377db7b27575df6f2eab7368809dd62c0a715dc1bcc39f7" +dependencies = [ + "itertools 0.11.0", + "malachite-base", + "malachite-nz", + "malachite-q", +] + +[[package]] +name = "malachite-nz" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34a79feebb2bc9aa7762047c8e5495269a367da6b5a90a99882a0aeeac1841f7" +dependencies = [ + "itertools 0.11.0", + "libm", + "malachite-base", +] + +[[package]] +name = "malachite-q" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f235d5747b1256b47620f5640c2a17a88c7569eebdf27cd9cb130e1a619191" +dependencies = [ + "itertools 0.11.0", + "malachite-base", + "malachite-nz", +] + [[package]] name = "malloc_buf" version = "0.0.6" @@ -6224,6 +6608,18 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d97bbf43eb4f088f8ca469930cde17fa036207c9a5e02ccc5107c4e8b17c964" +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + [[package]] name = "metal" version = "0.29.0" @@ -6363,6 +6759,12 @@ dependencies = [ "libc", ] +[[package]] +name = "no_std_strings" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5b0c77c1b780822bc749a33e39aeb2c07584ab93332303babeabb645298a76e" + [[package]] name = "nohash-hasher" version = "0.2.0" @@ -7445,6 +7847,19 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "postcard" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "heapless", + "serde", +] + [[package]] name = "potential_utf" version = "0.1.2" @@ -8433,6 +8848,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "ringbuffer" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df6368f71f205ff9c33c076d170dd56ebf68e8161c733c0caa07a7a5509ed53" + [[package]] name = "ripemd" version = "0.1.3" @@ -8451,45 +8872,52 @@ dependencies = [ "anyhow", "borsh", "elf", - "risc0-zkp", - "risc0-zkvm-platform", + "risc0-zkp 1.2.6", + "risc0-zkvm-platform 1.2.6", "serde", "tracing", ] [[package]] -name = "risc0-build" -version = "1.2.6" +name = "risc0-binfmt" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0811a16d45e5b4f102c7095fe43ec63afe8c76d85ae799522d0b9f247975aa61" +checksum = "f4fe7599ac55ad77515608ec42a9727001559fe4f579c533cb7c973b54800c05" dependencies = [ "anyhow", - "cargo_metadata", - "dirs 5.0.1", - "docker-generate", - "hex", - "regex", - "risc0-binfmt", - "risc0-zkp", - "risc0-zkvm-platform", + "borsh", + "derive_more 2.0.1", + "elf", + "lazy_static", + "postcard", + "risc0-zkp 2.0.1", + "risc0-zkvm-platform 2.0.2", "semver 1.0.26", "serde", - "serde_json", - "tempfile", + "tracing", ] [[package]] -name = "risc0-build-kernel" -version = "1.2.6" +name = "risc0-build" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb4620f32d49a9c2683e6031d196f7e5475af4aa84db104f48edd805afed7d17" +checksum = "d17d6657b1fb615c0482bd4b57aae7850911ed7dbdc8e783df20e93f33209a8f" dependencies = [ - "cc", - "directories", - "glob", + "anyhow", + "cargo_metadata 0.19.2", + "derive_builder", + "dirs 5.0.1", + "docker-generate", "hex", - "rayon", - "sha2", + "risc0-binfmt 2.0.1", + "risc0-zkos-v1compat", + "risc0-zkp 2.0.1", + "risc0-zkvm-platform 2.0.2", + "rzup", + "semver 1.0.26", + "serde", + "serde_json", + "stability", "tempfile", ] @@ -8513,6 +8941,22 @@ name = "risc0-circuit-keccak" version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92c9d734d29c56ca0f00f492a544a6a1a2917c866c0108802dca8cd258a4de5a" +dependencies = [ + "anyhow", + "bytemuck", + "paste", + "risc0-binfmt 1.2.6", + "risc0-circuit-recursion 1.2.6", + "risc0-core 1.2.6", + "risc0-zkp 1.2.6", + "tracing", +] + +[[package]] +name = "risc0-circuit-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d339c65b0e011677404bd6bdfe1b0f29748187a568fb2f74df7fb650590181a" dependencies = [ "anyhow", "bytemuck", @@ -8520,28 +8964,28 @@ dependencies = [ "keccak", "paste", "rayon", - "risc0-binfmt", + "risc0-binfmt 2.0.1", "risc0-circuit-keccak-sys", - "risc0-circuit-recursion", - "risc0-core", + "risc0-circuit-recursion 2.0.2", + "risc0-core 2.0.0", "risc0-sys", - "risc0-zkp", + "risc0-zkp 2.0.1", "tracing", "xz2", ] [[package]] name = "risc0-circuit-keccak-sys" -version = "1.2.6" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fae2dc5bfb16d6e652af816f44e684c85524650597d80c5eb9728e245cf63ae" +checksum = "a25d00769a0f855d4973e8a85dbffe6e13889ca6a4703cf98d0a2976bdc2be17" dependencies = [ "cc", "cust", - "derive_more 1.0.0", + "derive_more 2.0.1", "glob", - "risc0-build-kernel 1.2.6", - "risc0-core", + "risc0-build-kernel", + "risc0-core 2.0.0", "risc0-sys", "sppark", ] @@ -8551,6 +8995,21 @@ name = "risc0-circuit-recursion" version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb53805a927d0e0848b6d9cb0371ad5b582e61019190be86d41cca24cf8555b3" +dependencies = [ + "anyhow", + "bytemuck", + "hex", + "metal", + "risc0-core 1.2.6", + "risc0-zkp 1.2.6", + "tracing", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6501fd3936aea2dd3e55915f34328fe96e6ca25ef00320242f837ae668785b" dependencies = [ "anyhow", "bytemuck", @@ -8563,9 +9022,9 @@ dependencies = [ "rand 0.8.5", "rayon", "risc0-circuit-recursion-sys", - "risc0-core", + "risc0-core 2.0.0", "risc0-sys", - "risc0-zkp", + "risc0-zkp 2.0.1", "serde", "sha2", "tracing", @@ -8574,13 +9033,13 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion-sys" -version = "1.2.6" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61948f72ccd7d4ccae081d82010e602d1e5841b958390650b01402742f196aa" +checksum = "0a7f8aee9b6b299fc5c3259a1a6e00a49a17dfd55811e90070840a887b113645" dependencies = [ "glob", - "risc0-build-kernel 1.2.6", - "risc0-core", + "risc0-build-kernel", + "risc0-core 2.0.0", "risc0-sys", "sppark", ] @@ -8590,44 +9049,61 @@ name = "risc0-circuit-rv32im" version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d0cce302486976a3a6c59a8f7dbcb7b635ac364fc1f97e9656695a01d809119" +dependencies = [ + "anyhow", + "metal", + "risc0-binfmt 1.2.6", + "risc0-core 1.2.6", + "risc0-zkp 1.2.6", + "risc0-zkvm-platform 1.2.6", + "serde", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c80e0a8f0f56106295bb682dbc27093438e163a5f6384a79e877ab895a11d9ae" dependencies = [ "anyhow", "auto_ops", + "bit-vec 0.8.0", "bytemuck", "byteorder", "cfg-if", - "crossbeam", - "crypto-bigint", - "cust", - "derive_more 1.0.0", + "derive_more 2.0.1", "enum-map", - "lazy-regex", - "metal", - "num-bigint 0.4.6", + "malachite", "num-derive", "num-traits", + "paste", + "postcard", "rand 0.8.5", "rayon", - "risc0-binfmt", + "ringbuffer", + "risc0-binfmt 2.0.1", "risc0-circuit-rv32im-sys", - "risc0-core", + "risc0-core 2.0.0", "risc0-sys", - "risc0-zkp", - "risc0-zkvm-platform", + "risc0-zkp 2.0.1", "serde", - "sha2", + "smallvec", "tracing", ] [[package]] name = "risc0-circuit-rv32im-sys" -version = "1.2.6" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b665b429716202437b4e26c11a8245f45e247c1f516f629d4f0320ba96ba36d4" +checksum = "ddac6b8acb1db761872fafa063155d99fe2cc845dc60037cde9ac05466044898" dependencies = [ + "cc", + "cust", + "derive_more 2.0.1", "glob", - "risc0-build-kernel 1.2.6", - "risc0-core", + "risc0-build-kernel", + "risc0-core 2.0.0", "risc0-sys", "sppark", ] @@ -8639,6 +9115,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2be3e5c922ccf8a61adc3ebfbf9aadc168dec765c8bc5bf7cb28d9c46bfa5b9b" dependencies = [ "bytemuck", + "rand_core 0.6.4", +] + +[[package]] +name = "risc0-core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317bbf70a8750b64d4fd7a2bdc9d7d5f30d8bb305cae486962c797ef35c8d08e" +dependencies = [ + "bytemuck", + "bytemuck_derive", "nvtx", "puffin", "rand_core 0.6.4", @@ -8655,7 +9142,7 @@ dependencies = [ "anyhow", "bytemuck_derive", "cfg-if", - "risc0-zkvm", + "risc0-zkvm 1.2.6", "thiserror 2.0.12", "tracing", ] @@ -8667,17 +9154,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73a946f8e6db205107668379e3058f0091d7f9aef63d8e4956dff5dc7dfac486" dependencies = [ "anyhow", - "ark-bn254", - "ark-ec", - "ark-groth16", + "ark-bn254 0.4.0", + "ark-ec 0.4.2", + "ark-groth16 0.4.0", "ark-serialize 0.4.2", "bytemuck", "hex", "num-bigint 0.4.6", + "risc0-binfmt 1.2.6", + "risc0-zkp 1.2.6", + "serde", + "stability", +] + +[[package]] +name = "risc0-groth16" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b31cb7b2a46f0cdaf71803ea7e0389af9f5bc1aea2531106f2972b241f26e98" +dependencies = [ + "anyhow", + "ark-bn254 0.5.0", + "ark-ec 0.5.0", + "ark-groth16 0.5.0", + "ark-serialize 0.5.0", + "bytemuck", + "hex", + "num-bigint 0.4.6", "num-traits", - "risc0-binfmt", - "risc0-core", - "risc0-zkp", + "risc0-binfmt 2.0.1", + "risc0-core 2.0.0", + "risc0-zkp 2.0.1", "serde", "serde_json", "stability", @@ -8693,15 +9200,49 @@ checksum = "11abd6064c039f24b58676419cd13c92cbf4858e66948dd55b188b03511db44c" dependencies = [ "anyhow", "cust", - "risc0-build-kernel 2.0.0", + "risc0-build-kernel", "sppark", ] +[[package]] +name = "risc0-zkos-v1compat" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f76c479b69d1987cb54ac72dcc017197296fdcd6daf78fafc10cbbd3a167a7de" +dependencies = [ + "include_bytes_aligned", + "no_std_strings", +] + [[package]] name = "risc0-zkp" version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373d06becf7bd3a8e46af6f8cb81509aa363cdddb1ec67a588ac69ad9f968127" +dependencies = [ + "anyhow", + "blake2", + "borsh", + "bytemuck", + "cfg-if", + "digest 0.10.7", + "hex", + "hex-literal", + "metal", + "paste", + "rand_core 0.6.4", + "risc0-core 1.2.6", + "risc0-zkvm-platform 1.2.6", + "serde", + "sha2", + "tracing", +] + +[[package]] +name = "risc0-zkp" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa210a232361fd671b30918469856b64d715f2564956d0a5df97ab6cb116d28b" dependencies = [ "anyhow", "blake2", @@ -8720,11 +9261,12 @@ dependencies = [ "rand 0.8.5", "rand_core 0.6.4", "rayon", - "risc0-core", + "risc0-core 2.0.0", "risc0-sys", - "risc0-zkvm-platform", + "risc0-zkvm-platform 2.0.2", "serde", "sha2", + "stability", "tracing", ] @@ -8733,6 +9275,33 @@ name = "risc0-zkvm" version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95c66a128207326c0034b500a6f456265f26d26f40cf497b7d15f28c08db553c" +dependencies = [ + "anyhow", + "borsh", + "bytemuck", + "getrandom 0.2.16", + "hex", + "risc0-binfmt 1.2.6", + "risc0-circuit-keccak 1.2.6", + "risc0-circuit-recursion 1.2.6", + "risc0-circuit-rv32im 1.2.6", + "risc0-core 1.2.6", + "risc0-groth16 1.2.6", + "risc0-zkp 1.2.6", + "risc0-zkvm-platform 1.2.6", + "rrs-lib", + "semver 1.0.26", + "serde", + "sha2", + "stability", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f1014d2efcb3b359aff878c9aeb6aa949a6d91f091a2ffb5ffd8d928a1ab7f3" dependencies = [ "addr2line 0.22.0", "anyhow", @@ -8741,6 +9310,7 @@ dependencies = [ "borsh", "bytemuck", "bytes", + "derive_more 2.0.1", "elf", "enum-map", "getrandom 0.2.16", @@ -8752,17 +9322,19 @@ dependencies = [ "prost", "rand 0.8.5", "rayon", - "risc0-binfmt", + "risc0-binfmt 2.0.1", "risc0-build", - "risc0-circuit-keccak", - "risc0-circuit-recursion", - "risc0-circuit-rv32im", - "risc0-core", - "risc0-groth16", - "risc0-zkp", - "risc0-zkvm-platform", + "risc0-circuit-keccak 2.0.2", + "risc0-circuit-recursion 2.0.2", + "risc0-circuit-rv32im 2.0.4", + "risc0-core 2.0.0", + "risc0-groth16 2.0.1", + "risc0-zkos-v1compat", + "risc0-zkp 2.0.1", + "risc0-zkvm-platform 2.0.2", "rrs-lib", "rustc-demangle", + "rzup", "semver 1.0.26", "serde", "sha2", @@ -8785,6 +9357,20 @@ dependencies = [ "stability", ] +[[package]] +name = "risc0-zkvm-platform" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e4de2938eaf24892ef927d9cef6e4acb6a19ce01c017cd498533896f633f332" +dependencies = [ + "bytemuck", + "cfg-if", + "getrandom 0.2.16", + "getrandom 0.3.3", + "libm", + "stability", +] + [[package]] name = "rlp" version = "0.5.2" @@ -9102,6 +9688,21 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +[[package]] +name = "rzup" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "400558bf12d4292a7804093b60a437ba8b0219ea7d53716b2c010a0d31e5f4a8" +dependencies = [ + "semver 1.0.26", + "serde", + "strum 0.26.3", + "tempfile", + "thiserror 2.0.12", + "toml 0.8.23", + "yaml-rust2", +] + [[package]] name = "salsa20" version = "0.10.2" @@ -9741,7 +10342,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62ef25d7c5d6f3a8fb695c57a248abfc7627eaab3a663b89edc3ceafee593cd0" dependencies = [ "anyhow", - "cargo_metadata", + "cargo_metadata 0.18.1", "chrono", "clap 4.5.40", "dirs 5.0.1", @@ -10230,6 +10831,9 @@ name = "spin" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] [[package]] name = "spinoff" @@ -12389,6 +12993,17 @@ dependencies = [ "lzma-sys", ] +[[package]] +name = "yaml-rust2" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a1a1c0bc9823338a3bdf8c61f994f23ac004c6fa32c08cd152984499b445e8d" +dependencies = [ + "arraydeque", + "encoding_rs", + "hashlink", +] + [[package]] name = "yansi" version = "0.5.1" @@ -12588,7 +13203,6 @@ dependencies = [ "ethrex-storage", "ethrex-trie", "ethrex-vm", - "keccak-hash", "kzg-rs", "risc0-build", "serde", diff --git a/crates/l2/prover/Cargo.toml b/crates/l2/prover/Cargo.toml index 733cef02ecc..80bfb784a63 100644 --- a/crates/l2/prover/Cargo.toml +++ b/crates/l2/prover/Cargo.toml @@ -33,7 +33,7 @@ ethrex-sdk.workspace = true zkvm_interface = { path = "./zkvm/interface", default-features = false } -risc0-zkvm = { version = "1.2.2", optional = true } +risc0-zkvm = { version = "2.1.0", optional = true } risc0-ethereum-contracts = { version = "1.3.1", optional = true } sp1-sdk = { version = "5.0.0", optional = true } diff --git a/crates/l2/prover/zkvm/interface/Cargo.toml b/crates/l2/prover/zkvm/interface/Cargo.toml index 74190501827..f318b6aaee6 100644 --- a/crates/l2/prover/zkvm/interface/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/Cargo.toml @@ -8,7 +8,6 @@ serde = { version = "1.0.203", features = ["derive"] } serde_with = "3.11.0" serde_json = "1.0.117" thiserror = "2.0.9" -keccak-hash.workspace = true kzg-rs = "0.2.6" ethrex-common = { path = "../../../../common/", default-features = false } @@ -23,7 +22,7 @@ ethrex-l2-common = { path = "../../../common", default-features = false } # alloy-rpc-types-engine = "=0.11.0" [build-dependencies] -risc0-build = { version = "1.2.2", optional = true } +risc0-build = { version = "2.1.2", optional = true } sp1-build = { version = "5.0.0", optional = true } sp1-sdk = { version = "5.0.0", optional = true } diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index 1eeeea32323..9117b65a6f9 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -10,18 +10,27 @@ fn main() { #[cfg(feature = "risc0")] fn build_risc0_program() { + use risc0_build::{DockerOptionsBuilder, GuestOptionsBuilder, embed_methods_with_options}; + let features = if cfg!(feature = "l2") { vec!["l2".to_string()] } else { vec![] }; - risc0_build::embed_methods_with_options(std::collections::HashMap::from([( + let docker_options = DockerOptionsBuilder::default() + .root_dir(format!("{}/../../../../../", env!("CARGO_MANIFEST_DIR"))) + .build() + .unwrap(); + let guest_options = GuestOptionsBuilder::default() + .features(features) + //.use_docker(docker_options) + .build() + .unwrap(); + + embed_methods_with_options(std::collections::HashMap::from([( "zkvm-risc0-program", - risc0_build::GuestOptions { - features, - ..Default::default() - }, + guest_options, )])); } diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml index 925a4f90e59..70ae8f0af48 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml @@ -6,7 +6,7 @@ edition = "2024" [workspace] [dependencies] -risc0-zkvm = { version = "1.2.2", default-features = false, features = ["std"] } +risc0-zkvm = { version = "2.1.0", default-features = false, features = ["std"] } zkvm_interface = { path = "../" } ethrex-common = { path = "../../../../../common", default-features = false } diff --git a/crates/l2/prover/zkvm/interface/sp1/Cargo.lock b/crates/l2/prover/zkvm/interface/sp1/Cargo.lock index 02653a65207..757b5af452a 100644 --- a/crates/l2/prover/zkvm/interface/sp1/Cargo.lock +++ b/crates/l2/prover/zkvm/interface/sp1/Cargo.lock @@ -99,7 +99,7 @@ checksum = "9b15b13d38b366d01e818fe8e710d4d702ef7499eacd44926a06171dd9585d0c" dependencies = [ "alloy-primitives", "alloy-rlp", - "k256", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde", "thiserror", ] @@ -164,7 +164,7 @@ dependencies = [ "hashbrown 0.15.2", "indexmap 2.9.0", "itoa", - "k256", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "keccak-asm", "paste", "proptest", @@ -1146,6 +1146,20 @@ version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "signature", + "spki", +] + [[package]] name = "ecdsa" version = "0.16.9" @@ -1154,7 +1168,7 @@ dependencies = [ "der", "digest 0.10.7", "elliptic-curve", - "rfc6979", + "rfc6979 0.4.0 (git+https://github.com/sp1-patches/signatures?tag=patch-16.9-sp1-4.1.0)", "signature", "spki", ] @@ -1257,7 +1271,7 @@ dependencies = [ "ethrex-rlp", "ethrex-storage", "ethrex-vm", - "k256", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "sha3", "thiserror", "tokio", @@ -1274,7 +1288,7 @@ dependencies = [ "ethrex-rlp", "ethrex-trie", "hex", - "k256", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "keccak-hash", "lazy_static", "once_cell", @@ -1315,7 +1329,7 @@ dependencies = [ "derive_more 1.0.0", "ethrex-common", "ethrex-rlp", - "k256", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "keccak-hash", "kzg-rs", "lambdaworks-math", @@ -1781,13 +1795,27 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", + "elliptic-curve", + "once_cell", + "sha2", + "signature", +] + [[package]] name = "k256" version = "0.13.4" source = "git+https://github.com/sp1-patches/elliptic-curves?tag=patch-k256-13.4-sp1-5.0.0#f7d8998e05d8cbcbd8e543eba1030a7385011fa8" dependencies = [ "cfg-if", - "ecdsa", + "ecdsa 0.16.9 (git+https://github.com/sp1-patches/signatures?tag=patch-16.9-sp1-4.1.0)", "elliptic-curve", "hex", "once_cell", @@ -2053,7 +2081,7 @@ name = "p256" version = "0.13.2" source = "git+https://github.com/sp1-patches/elliptic-curves?tag=patch-p256-13.2-sp1-5.0.0#10cca2ef98bebbad35e2475849433fc3e75e27d9" dependencies = [ - "ecdsa", + "ecdsa 0.16.9 (git+https://github.com/sp1-patches/signatures?tag=patch-16.9-sp1-4.1.0)", "elliptic-curve", "hex", "primeorder", @@ -2545,7 +2573,7 @@ dependencies = [ "aurora-engine-modexp", "c-kzg", "cfg-if", - "k256", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "once_cell", "revm-primitives", "ripemd", @@ -2574,6 +2602,16 @@ dependencies = [ "serde", ] +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + [[package]] name = "rfc6979" version = "0.4.0" @@ -2747,7 +2785,7 @@ version = "0.29.1" source = "git+https://github.com/sp1-patches/rust-secp256k1?tag=patch-0.29.1-sp1-5.0.0#14136bdd2fafe651e3d0ce680f930473e848cf56" dependencies = [ "cfg-if", - "k256", + "k256 0.13.4 (git+https://github.com/sp1-patches/elliptic-curves?tag=patch-k256-13.4-sp1-5.0.0)", "rand 0.8.5", "secp256k1-sys", ] From cd82d924db100efb88fbb166edba7d739649715f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 16 Jun 2025 15:27:21 -0300 Subject: [PATCH 002/236] fix patches errors --- crates/l2/prover/zkvm/interface/risc0/Cargo.toml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml index 70ae8f0af48..4a56bf2d455 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml @@ -16,15 +16,14 @@ ethrex-vm = { path = "../../../../../vm", default-features = false } ethrex-blockchain = { path = "../../../../../blockchain", default-features = false } ethrex-l2-common = { path = "../../../../common", default-features = false } -# Temporarily pin version because 0.11.1 breaks compilation -alloy-rpc-types-engine = "=0.11.0" - [patch.crates-io] -crypto-bigint = { git = "https://github.com/risc0/RustCrypto-crypto-bigint", tag = "v0.5.5-risczero.0" } -k256 = { git = "https://github.com/risc0/RustCrypto-elliptic-curves", tag = "k256/v0.13.3-risczero.0" } -sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.6-risczero.0" } -secp256k1 = { git = "https://github.com/sp1-patches/rust-secp256k1", branch = "patch-secp256k1-v0.29.1" } -ecdsa-core = { git = "https://github.com/sp1-patches/signatures", package = "ecdsa", branch = "patch-ecdsa-v0.16.9" } +sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.8-risczero.0" } + +# This git repo seems to be private +# ed25519-dalek = { git = "https://github.com/risc0/ed25519-dalek", tag = "curve25519-4.1.2-risczero.0" } + +# Other precompiles/patches can be added, but they require the "unstable" risc0 feature which is not suited +# for production environments. [features] l2 = ["ethrex-vm/l2", "zkvm_interface/l2", "ethrex-blockchain/l2"] From 9906aef284e06bc7ad772cf9d24f0d6b0d7e0fa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 17 Jun 2025 11:13:37 -0300 Subject: [PATCH 003/236] add support for both c-kzg and kzg-rs to kzg related libs --- Cargo.lock | 2 + Cargo.toml | 2 +- crates/l2/prover/zkvm/interface/Cargo.toml | 10 ++-- .../l2/prover/zkvm/interface/risc0/Cargo.toml | 6 ++- .../l2/prover/zkvm/interface/src/execution.rs | 41 +++++++++----- crates/vm/Cargo.toml | 5 +- crates/vm/levm/Cargo.toml | 8 +-- crates/vm/levm/src/precompiles.rs | 54 ++++++++++++------- 8 files changed, 84 insertions(+), 44 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1742a3ed707..f3db750caad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4121,6 +4121,7 @@ version = "0.1.0" dependencies = [ "bls12_381 0.8.0", "bytes", + "c-kzg", "colored", "datatest-stable", "derive_more 1.0.0", @@ -13196,6 +13197,7 @@ dependencies = [ name = "zkvm_interface" version = "0.1.0" dependencies = [ + "c-kzg", "ethrex-blockchain", "ethrex-common", "ethrex-l2-common", diff --git a/Cargo.toml b/Cargo.toml index 29a5c61ea75..09a8d01ce62 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,7 +45,7 @@ ethrex-common = { path = "./crates/common" } ethrex-p2p = { path = "./crates/networking/p2p" } ethrex-rpc = { path = "./crates/networking/rpc" } ethrex-storage = { path = "./crates/storage" } -ethrex-vm = { path = "./crates/vm" } +ethrex-vm = { path = "./crates/vm", default-features = false } ethrex-levm = { path = "./crates/vm/levm" } ethrex-trie = { path = "./crates/common/trie" } ethrex-rlp = { path = "./crates/common/rlp" } diff --git a/crates/l2/prover/zkvm/interface/Cargo.toml b/crates/l2/prover/zkvm/interface/Cargo.toml index f318b6aaee6..913c076617b 100644 --- a/crates/l2/prover/zkvm/interface/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/Cargo.toml @@ -8,7 +8,8 @@ serde = { version = "1.0.203", features = ["derive"] } serde_with = "3.11.0" serde_json = "1.0.117" thiserror = "2.0.9" -kzg-rs = "0.2.6" +kzg-rs = { version = "0.2.6", optional = true } +c-kzg = { version = "1.0.3", optional = true } ethrex-common = { path = "../../../../common/", default-features = false } ethrex-blockchain = { path = "../../../../blockchain/", default-features = false } @@ -18,9 +19,6 @@ ethrex-storage = { path = "../../../../storage", default-features = false } ethrex-trie = { path = "../../../../common/trie", default-features = false } ethrex-l2-common = { path = "../../../common", default-features = false } -# Temporarily pin version because 0.11.1 breaks compilation -# alloy-rpc-types-engine = "=0.11.0" - [build-dependencies] risc0-build = { version = "2.1.2", optional = true } sp1-build = { version = "5.0.0", optional = true } @@ -30,10 +28,12 @@ sp1-sdk = { version = "5.0.0", optional = true } methods = ["risc0"] [features] -default = [] +default = ["kzg-rs"] risc0 = ["dep:risc0-build"] sp1 = ["dep:sp1-build", "dep:sp1-sdk"] l2 = ["ethrex-vm/l2"] +kzg-rs = ["dep:kzg-rs", "ethrex-vm/kzg-rs"] +c-kzg = ["dep:c-kzg", "ethrex-vm/c-kzg", "ethrex-common/c-kzg"] [lib] path = "./src/lib.rs" diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml index 4a56bf2d455..939988667d8 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml @@ -7,17 +7,19 @@ edition = "2024" [dependencies] risc0-zkvm = { version = "2.1.0", default-features = false, features = ["std"] } -zkvm_interface = { path = "../" } +zkvm_interface = { path = "../", default-features = false, features = ["c-kzg"]} ethrex-common = { path = "../../../../../common", default-features = false } ethrex-storage = { path = "../../../../../storage", default-features = false } ethrex-rlp = { path = "../../../../../common/rlp" } -ethrex-vm = { path = "../../../../../vm", default-features = false } +ethrex-vm = { path = "../../../../../vm", default-features = false, features = ["c-kzg"]} ethrex-blockchain = { path = "../../../../../blockchain", default-features = false } ethrex-l2-common = { path = "../../../../common", default-features = false } [patch.crates-io] sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.8-risczero.0" } +c-kzg = { git = "https://github.com/risc0/c-kzg-4844", tag = "c-kzg/v1.0.3-risczero.1" } +sp1_bls12_381 = { git = "https://github.com/risc0/zkcrypto-bls12_381", package = "bls12_381", tag = "bls12_381/v0.8.0-risczero.0" } # This git repo seems to be private # ed25519-dalek = { git = "https://github.com/risc0/ed25519-dalek", tag = "curve25519-4.1.2-risczero.0" } diff --git a/crates/l2/prover/zkvm/interface/src/execution.rs b/crates/l2/prover/zkvm/interface/src/execution.rs index 61dab96c2e2..ec8c0acbc5a 100644 --- a/crates/l2/prover/zkvm/interface/src/execution.rs +++ b/crates/l2/prover/zkvm/interface/src/execution.rs @@ -29,8 +29,6 @@ use ethrex_l2_common::{ get_withdrawal_hash, }, }; -#[cfg(feature = "l2")] -use kzg_rs::{Blob, Bytes48, KzgProof, get_kzg_settings}; #[derive(Debug, thiserror::Error)] pub enum StatelessExecutionError { @@ -58,9 +56,12 @@ pub enum StatelessExecutionError { #[cfg(feature = "l2")] #[error("Blobs bundle error: {0}")] BlobsBundleError(#[from] BlobsBundleError), - #[cfg(feature = "l2")] + #[cfg(all(feature = "l2", feature = "kzg-rs"))] + #[error("KZG error (proof couldn't be verified): {0}")] + KzgRsError(kzg_rs::KzgError), + #[cfg(all(feature = "l2", feature = "c-kzg"))] #[error("KZG error (proof couldn't be verified): {0}")] - KzgError(kzg_rs::KzgError), + CKzgError(c_kzg::Error), #[cfg(feature = "l2")] #[error("Invalid KZG blob proof")] InvalidBlobProof, @@ -93,10 +94,17 @@ pub enum StatelessExecutionError { Internal(String), } -#[cfg(feature = "l2")] +#[cfg(all(feature = "l2", feature = "kzg-rs"))] impl From for StatelessExecutionError { fn from(value: kzg_rs::KzgError) -> Self { - StatelessExecutionError::KzgError(value) + StatelessExecutionError::KzgRsError(value) + } +} + +#[cfg(all(feature = "l2", feature = "c-kzg"))] +impl From for StatelessExecutionError { + fn from(value: c_kzg::Error) -> Self { + StatelessExecutionError::CKzgError(value) } } @@ -364,6 +372,7 @@ fn compute_withdrawals_and_deposits_digests( Ok((withdrawals_merkle_root, deposit_logs_hash)) } +// TODO: refactor into ethrex-common::blobs_bundle #[cfg(feature = "l2")] fn verify_blob( state_diff: StateDiff, @@ -372,13 +381,21 @@ fn verify_blob( ) -> Result { let encoded_state_diff = state_diff.encode()?; let blob_data = blob_from_bytes(encoded_state_diff)?; - let blob = Blob::from_slice(&blob_data)?; - let is_blob_proof_valid = KzgProof::verify_blob_kzg_proof( - blob, - &Bytes48::from_slice(&blob_commitment)?, - &Bytes48::from_slice(&blob_proof)?, - &get_kzg_settings(), + #[cfg(feature = "kzg-rs")] + let is_blob_proof_valid = kzg_rs::KzgProof::verify_blob_kzg_proof( + kzg_rs::Blob::from_slice(&blob_data)?, + &kzg_rs::Bytes48::from_slice(&blob_commitment)?, + &kzg_rs::Bytes48::from_slice(&blob_proof)?, + &kzg_rs::get_kzg_settings(), + )?; + + #[cfg(feature = "c-kzg")] + let is_blob_proof_valid = c_kzg::KzgProof::verify_blob_kzg_proof( + &c_kzg::Blob::new(blob_data), + &blob_commitment.into(), + &blob_proof.into(), + &c_kzg::ethereum_kzg_settings(), )?; if !is_blob_proof_valid { diff --git a/crates/vm/Cargo.toml b/crates/vm/Cargo.toml index 99739c845d8..06832c3078d 100644 --- a/crates/vm/Cargo.toml +++ b/crates/vm/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" [dependencies] ethrex-common.workspace = true -ethrex-levm.workspace = true +ethrex-levm ={ path = "./levm", default-features = false} ethrex-trie.workspace = true ethrex-rlp.workspace = true @@ -41,9 +41,10 @@ ethereum-types.workspace = true path = "./lib.rs" [features] -default = [] +default = ["kzg-rs"] l2 = ["ethrex-levm/l2"] c-kzg = ["revm/c-kzg", "ethrex-levm/c-kzg", "ethrex-common/c-kzg"] +kzg-rs = ["ethrex-levm/kzg-rs"] blst = ["revm/blst"] debug = ["ethrex-levm/debug"] diff --git a/crates/vm/levm/Cargo.toml b/crates/vm/levm/Cargo.toml index 835b69db3d8..2b71f51ad39 100644 --- a/crates/vm/levm/Cargo.toml +++ b/crates/vm/levm/Cargo.toml @@ -25,7 +25,8 @@ ripemd = "0.1.3" num-bigint = "0.4.5" lambdaworks-math = "0.11.0" k256 = { version = "0.13.3", features = ["ecdh"] } -kzg-rs = "0.2.3" +kzg-rs = {version = "0.2.6", optional = true } +c-kzg = { version = "^1.0.3", optional = true } bls12_381 = { git = "https://github.com/lambdaclass/bls12_381", branch = "expose-fp-struct", features = [ "groups", "bits", @@ -40,11 +41,12 @@ colored = "2.1.0" spinoff = "0.8.0" [features] -default = [] -c-kzg = ["ethrex-common/c-kzg"] +default = ["kzg-rs"] +c-kzg = ["dep:c-kzg", "ethrex-common/c-kzg"] ethereum_foundation_tests = [] l2 = [] debug = [] +kzg-rs = ["dep:kzg-rs"] [lints.rust] unsafe_code = "forbid" diff --git a/crates/vm/levm/src/precompiles.rs b/crates/vm/levm/src/precompiles.rs index 31c388da7ee..555441535fd 100644 --- a/crates/vm/levm/src/precompiles.rs +++ b/crates/vm/levm/src/precompiles.rs @@ -6,7 +6,6 @@ use bls12_381::{ use bytes::Bytes; use ethrex_common::{Address, H160, H256, U256, serde_utils::bool, types::Fork}; use keccak_hash::keccak256; -use kzg_rs::{Bytes32, Bytes48, KzgSettings}; use lambdaworks_math::{ cyclic_group::IsGroup, elliptic_curve::{ @@ -1064,24 +1063,41 @@ fn verify_kzg_proof( y: &[u8; 32], proof_bytes: &[u8; 48], ) -> Result { - let commitment_bytes = - Bytes48::from_slice(commitment_bytes).map_err(|_| PrecompileError::EvaluationError)?; // Could be ParsingInputError - let z_bytes = Bytes32::from_slice(z).map_err(|_| PrecompileError::EvaluationError)?; - let y_bytes = Bytes32::from_slice(y).map_err(|_| PrecompileError::EvaluationError)?; - let proof_bytes = - Bytes48::from_slice(proof_bytes).map_err(|_| PrecompileError::EvaluationError)?; - - let settings = - KzgSettings::load_trusted_setup_file().map_err(|_| PrecompileError::EvaluationError)?; - - kzg_rs::kzg_proof::KzgProof::verify_kzg_proof( - &commitment_bytes, - &z_bytes, - &y_bytes, - &proof_bytes, - &settings, - ) - .map_err(|_| PrecompileError::EvaluationError.into()) + #[cfg(feature = "kzg-rs")] + { + let commitment_bytes = + kzg_rs::Bytes48::from_slice(commitment_bytes).map_err(|_| PrecompileError::EvaluationError)?; // Could be ParsingInputError + let z_bytes = kzg_rs::Bytes32::from_slice(z).map_err(|_| PrecompileError::EvaluationError)?; + let y_bytes = kzg_rs::Bytes32::from_slice(y).map_err(|_| PrecompileError::EvaluationError)?; + let proof_bytes = + kzg_rs::Bytes48::from_slice(proof_bytes).map_err(|_| PrecompileError::EvaluationError)?; + + let settings = + kzg_rs::KzgSettings::load_trusted_setup_file().map_err(|_| PrecompileError::EvaluationError)?; + + return kzg_rs::kzg_proof::KzgProof::verify_kzg_proof( + &commitment_bytes, + &z_bytes, + &y_bytes, + &proof_bytes, + &settings, + ) + .map_err(|_| PrecompileError::EvaluationError.into()); + } + #[cfg(feature = "c-kzg")] + { + return c_kzg::KzgProof::verify_kzg_proof( + &c_kzg::Bytes48::new(commitment_bytes.clone()), + &c_kzg::Bytes32::new(z.clone()), + &c_kzg::Bytes32::new(y.clone()), + &c_kzg::Bytes48::new(proof_bytes.clone()), + &c_kzg::ethereum_kzg_settings(), + ) + .map_err(|_| PrecompileError::EvaluationError.into()); + } + + // if no feature is enabled + unimplemented!(); } const POINT_EVALUATION_OUTPUT_BYTES: [u8; 64] = [ From d03a7a77bc8fe166623fb2e198a930d3663cf4b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 17 Jun 2025 12:46:48 -0300 Subject: [PATCH 004/236] WIP update c-kzg to 2.1.1, temporarily remove revm_comparison --- cmd/ethrex_replay/Cargo.toml | 2 +- crates/common/Cargo.toml | 2 +- crates/l2/prover/Cargo.toml | 2 +- crates/l2/prover/src/backends/risc0.rs | 6 +- crates/l2/prover/zkvm/interface/Cargo.toml | 2 +- .../l2/prover/zkvm/interface/risc0/Cargo.toml | 2 +- crates/vm/levm/Cargo.toml | 2 +- .../vm/levm/bench/revm_comparison/Cargo.toml | 2 +- .../bench/revm_comparison/src/benchmark.rs | 82 ++-- .../levm/bench/revm_comparison/src/compile.rs | 158 +++---- .../vm/levm/bench/revm_comparison/src/lib.rs | 397 +++++++++--------- 11 files changed, 334 insertions(+), 323 deletions(-) diff --git a/cmd/ethrex_replay/Cargo.toml b/cmd/ethrex_replay/Cargo.toml index c994ec500c8..1ec22a47ac3 100644 --- a/cmd/ethrex_replay/Cargo.toml +++ b/cmd/ethrex_replay/Cargo.toml @@ -40,7 +40,7 @@ revm = { version = "19.0.0", features = [ ], default-features = false } # These dependencies must be kept up to date with the corresponding revm version, otherwise errors may pop up because of trait implementation mismatches -revm-inspectors = { version = "0.15.0" } +#revm-inspectors = { version = "0.15.0" } derive_more = { version = "1.0.0", features = ["full"] } revm-primitives = { version = "15.2.0", features = [ "std", diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index b9e3715fbbe..efdbc4bfa50 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -17,7 +17,7 @@ serde_json.workspace = true thiserror.workspace = true k256.workspace = true # TODO(#1102): Move to Lambdaworks in the future -c-kzg = { version = "^1.0.3", optional = true } +c-kzg = { version = "2.1.1", optional = true } keccak-hash.workspace = true sha3.workspace = true secp256k1.workspace = true diff --git a/crates/l2/prover/Cargo.toml b/crates/l2/prover/Cargo.toml index 80bfb784a63..e27acfc8ee1 100644 --- a/crates/l2/prover/Cargo.toml +++ b/crates/l2/prover/Cargo.toml @@ -34,7 +34,7 @@ ethrex-sdk.workspace = true zkvm_interface = { path = "./zkvm/interface", default-features = false } risc0-zkvm = { version = "2.1.0", optional = true } -risc0-ethereum-contracts = { version = "1.3.1", optional = true } +risc0-ethereum-contracts = { version = "2.1.0", optional = true } sp1-sdk = { version = "5.0.0", optional = true } sp1-recursion-gnark-ffi = { version = "5.0.0", optional = true } diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index e405fa0d281..fa0f23ffaf2 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -1,4 +1,6 @@ use ethrex_l2::utils::prover::proving_systems::{ProofCalldata, ProverType}; +use ethrex_l2::sequencer::proof_coordinator::ProofData; +use ethrex_l2::utils::prover::proving_systems::BatchProof; use ethrex_l2_sdk::calldata::Value; use risc0_ethereum_contracts::encode_seal; use risc0_zkvm::{ @@ -47,9 +49,9 @@ pub fn verify(receipt: &Receipt) -> Result<(), Box> { } pub fn to_batch_proof( - proof: ProveOutput, + proof: Receipt, _aligned_mode: bool, -) -> Result> { +) -> Result> { Ok(BatchProof::ProofCalldata(to_calldata(proof))) } diff --git a/crates/l2/prover/zkvm/interface/Cargo.toml b/crates/l2/prover/zkvm/interface/Cargo.toml index 913c076617b..ed2c0067ce3 100644 --- a/crates/l2/prover/zkvm/interface/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/Cargo.toml @@ -9,7 +9,7 @@ serde_with = "3.11.0" serde_json = "1.0.117" thiserror = "2.0.9" kzg-rs = { version = "0.2.6", optional = true } -c-kzg = { version = "1.0.3", optional = true } +c-kzg = { version = "2.1.1", optional = true } ethrex-common = { path = "../../../../common/", default-features = false } ethrex-blockchain = { path = "../../../../blockchain/", default-features = false } diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml index 939988667d8..22eae37fbfc 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml @@ -18,7 +18,7 @@ ethrex-l2-common = { path = "../../../../common", default-features = false } [patch.crates-io] sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.8-risczero.0" } -c-kzg = { git = "https://github.com/risc0/c-kzg-4844", tag = "c-kzg/v1.0.3-risczero.1" } +c-kzg = { git = "https://github.com/risc0/c-kzg-4844", tag = "c-kzg/v2.1.1-risczero.1" } sp1_bls12_381 = { git = "https://github.com/risc0/zkcrypto-bls12_381", package = "bls12_381", tag = "bls12_381/v0.8.0-risczero.0" } # This git repo seems to be private diff --git a/crates/vm/levm/Cargo.toml b/crates/vm/levm/Cargo.toml index 2b71f51ad39..ecca813ac30 100644 --- a/crates/vm/levm/Cargo.toml +++ b/crates/vm/levm/Cargo.toml @@ -26,7 +26,7 @@ num-bigint = "0.4.5" lambdaworks-math = "0.11.0" k256 = { version = "0.13.3", features = ["ecdh"] } kzg-rs = {version = "0.2.6", optional = true } -c-kzg = { version = "^1.0.3", optional = true } +c-kzg = { version = "2.1.1", optional = true } bls12_381 = { git = "https://github.com/lambdaclass/bls12_381", branch = "expose-fp-struct", features = [ "groups", "bits", diff --git a/crates/vm/levm/bench/revm_comparison/Cargo.toml b/crates/vm/levm/bench/revm_comparison/Cargo.toml index 15a9fdabc11..82e96173f87 100644 --- a/crates/vm/levm/bench/revm_comparison/Cargo.toml +++ b/crates/vm/levm/bench/revm_comparison/Cargo.toml @@ -16,7 +16,7 @@ ethrex-blockchain.workspace = true hex.workspace = true bytes.workspace = true -revm = "9.0.0" +#revm = "9.0.0" sha3 = "0.10.8" [[bin]] diff --git a/crates/vm/levm/bench/revm_comparison/src/benchmark.rs b/crates/vm/levm/bench/revm_comparison/src/benchmark.rs index 7db492ae27f..1762bf924d0 100644 --- a/crates/vm/levm/bench/revm_comparison/src/benchmark.rs +++ b/crates/vm/levm/bench/revm_comparison/src/benchmark.rs @@ -1,42 +1,46 @@ -use revm_comparison::{generate_calldata, load_contract_bytecode, run_with_levm, run_with_revm}; - -enum VM { - Revm, - Levm, -} - fn main() { - let usage = "usage: benchmark [revm/levm] [bench_name] (#repetitions) (#iterations)"; - let vm = std::env::args().nth(1).expect(usage); - - let vm = match vm.as_str() { - "levm" => VM::Levm, - "revm" => VM::Revm, - _ => { - eprintln!("{}", usage); - std::process::exit(1); - } - }; - - let benchmark = std::env::args().nth(2).expect(usage); - - let runs: u64 = std::env::args() - .nth(3) - .unwrap_or_else(|| "10".to_string()) // Default to 10 runs - .parse() - .expect(usage); - - let number_of_iterations: u64 = std::env::args() - .nth(4) - .unwrap_or_else(|| "100".to_string()) // Default to 10 iterations - .parse() - .expect(usage); - - let bytecode = load_contract_bytecode(&benchmark); - let calldata = generate_calldata("Benchmark", number_of_iterations); - match vm { - VM::Levm => run_with_levm(&bytecode, runs, &calldata), - VM::Revm => run_with_revm(&bytecode, runs, &calldata), - } } +// use revm_comparison::{generate_calldata, load_contract_bytecode, run_with_levm, run_with_revm}; +// +// enum VM { +// Revm, +// Levm, +// } +// +// fn main() { +// let usage = "usage: benchmark [revm/levm] [bench_name] (#repetitions) (#iterations)"; +// let vm = std::env::args().nth(1).expect(usage); +// +// let vm = match vm.as_str() { +// "levm" => VM::Levm, +// "revm" => VM::Revm, +// _ => { +// eprintln!("{}", usage); +// std::process::exit(1); +// } +// }; +// +// let benchmark = std::env::args().nth(2).expect(usage); +// +// let runs: u64 = std::env::args() +// .nth(3) +// .unwrap_or_else(|| "10".to_string()) // Default to 10 runs +// .parse() +// .expect(usage); +// +// let number_of_iterations: u64 = std::env::args() +// .nth(4) +// .unwrap_or_else(|| "100".to_string()) // Default to 10 iterations +// .parse() +// .expect(usage); +// +// let bytecode = load_contract_bytecode(&benchmark); +// let calldata = generate_calldata("Benchmark", number_of_iterations); +// +// match vm { +// VM::Levm => run_with_levm(&bytecode, runs, &calldata), +// VM::Revm => run_with_revm(&bytecode, runs, &calldata), +// } +// } +// diff --git a/crates/vm/levm/bench/revm_comparison/src/compile.rs b/crates/vm/levm/bench/revm_comparison/src/compile.rs index 9d6a8aa7e19..31555497192 100644 --- a/crates/vm/levm/bench/revm_comparison/src/compile.rs +++ b/crates/vm/levm/bench/revm_comparison/src/compile.rs @@ -1,80 +1,84 @@ -use std::fs; -use std::process::Command; - fn main() { - let contracts = [ - "Factorial", - "FactorialRecursive", - "Fibonacci", - "ManyHashes", - "BubbleSort", - ]; - println!("Current directory: {:?}", std::env::current_dir().unwrap()); - contracts.iter().for_each(|name| { - compile_contract(name); - }); - - compile_erc20_contracts(); -} - -fn compile_contract(bench_name: &str) { - let basepath = "crates/vm/levm/bench/revm_comparison/contracts"; - let outpath = format!("{}/bin", basepath); - let path = format!("{}/{}.sol", basepath, bench_name); - let args = [ - "--bin-runtime", - "--optimize", - "--overwrite", - &path, - "--output-dir", - &outpath, - ]; - println!("compiling {}", path); - run_solc(&args); -} - -fn compile_erc20_contracts() { - let basepath = "crates/vm/levm/bench/revm_comparison/contracts/erc20"; - let libpath = format!("{}/lib", basepath); - let outpath = "crates/vm/levm/bench/revm_comparison/contracts/bin"; - - // Collect all `.sol` files from the `erc20` directory - let paths = fs::read_dir(basepath) - .expect("Failed to read erc20 directory") - .filter_map(|entry| { - let path = entry.ok()?.path(); - if path.extension()?.to_str()? == "sol" { - Some(path.to_string_lossy().to_string()) - } else { - None - } - }) - .collect::>(); - - let mut args = vec![ - "--bin-runtime", - "--optimize", - "--overwrite", - "--allow-paths", - &libpath, - "--output-dir", - &outpath, - ]; - // Add the `.sol` files to the arguments - args.extend(paths.iter().map(|s| s.as_str())); - - println!("compiling erc20 contracts: {:?}", args); - run_solc(&args); -} - -fn run_solc(args: &[&str]) { - let output = Command::new("solc") - .args(args) - .output() - .expect("Failed to compile contract"); - let stdout = String::from_utf8(output.stdout).unwrap(); - let stderr = String::from_utf8(output.stderr).unwrap(); - println!("{}", stdout); - println!("{}", stderr); } +// use std::fs; +// use std::process::Command; +// +// fn main() { +// let contracts = [ +// "Factorial", +// "FactorialRecursive", +// "Fibonacci", +// "ManyHashes", +// "BubbleSort", +// ]; +// println!("Current directory: {:?}", std::env::current_dir().unwrap()); +// contracts.iter().for_each(|name| { +// compile_contract(name); +// }); +// +// compile_erc20_contracts(); +// } +// +// fn compile_contract(bench_name: &str) { +// let basepath = "crates/vm/levm/bench/revm_comparison/contracts"; +// let outpath = format!("{}/bin", basepath); +// let path = format!("{}/{}.sol", basepath, bench_name); +// let args = [ +// "--bin-runtime", +// "--optimize", +// "--overwrite", +// &path, +// "--output-dir", +// &outpath, +// ]; +// println!("compiling {}", path); +// run_solc(&args); +// } +// +// fn compile_erc20_contracts() { +// let basepath = "crates/vm/levm/bench/revm_comparison/contracts/erc20"; +// let libpath = format!("{}/lib", basepath); +// let outpath = "crates/vm/levm/bench/revm_comparison/contracts/bin"; +// +// // Collect all `.sol` files from the `erc20` directory +// let paths = fs::read_dir(basepath) +// .expect("Failed to read erc20 directory") +// .filter_map(|entry| { +// let path = entry.ok()?.path(); +// if path.extension()?.to_str()? == "sol" { +// Some(path.to_string_lossy().to_string()) +// } else { +// None +// } +// }) +// .collect::>(); +// +// let mut args = vec![ +// "--bin-runtime", +// "--optimize", +// "--overwrite", +// "--allow-paths", +// &libpath, +// "--output-dir", +// &outpath, +// ]; +// // Add the `.sol` files to the arguments +// args.extend(paths.iter().map(|s| s.as_str())); +// +// println!("compiling erc20 contracts: {:?}", args); +// run_solc(&args); +// } +// +// fn run_solc(args: &[&str]) { +// let output = Command::new("solc") +// .args(args) +// .output() +// .expect("Failed to compile contract"); +// +// let stdout = String::from_utf8(output.stdout).unwrap(); +// let stderr = String::from_utf8(output.stderr).unwrap(); +// println!("{}", stdout); +// println!("{}", stderr); +// } +// diff --git a/crates/vm/levm/bench/revm_comparison/src/lib.rs b/crates/vm/levm/bench/revm_comparison/src/lib.rs index fb603b7c57d..4bb895ff940 100644 --- a/crates/vm/levm/bench/revm_comparison/src/lib.rs +++ b/crates/vm/levm/bench/revm_comparison/src/lib.rs @@ -1,198 +1,199 @@ -use bytes::Bytes; -use ethrex_blockchain::vm::StoreVmDatabase; -use ethrex_common::H256; -use ethrex_common::{ - Address as EthrexAddress, U256, - types::{Account, AccountInfo, EIP1559Transaction, Transaction, TxKind, code_hash}, -}; -use ethrex_levm::{ - Environment, - db::{CacheDB, cache, gen_db::GeneralizedDatabase}, - errors::TxResult, - tracing::LevmCallTracer, - vm::VM, -}; -use ethrex_storage::Store; -use ethrex_vm::DynVmDatabase; -use revm::{ - Evm, - db::BenchmarkDB, - primitives::{Address, Bytecode, TransactTo, address}, -}; -use sha3::{Digest, Keccak256}; -use std::hint::black_box; -use std::io::Read; -use std::{collections::HashMap, fs::File, sync::Arc}; - -pub fn run_with_levm(program: &str, runs: u64, calldata: &str) { - let bytecode = Bytes::from(hex::decode(program).unwrap()); - let calldata = Bytes::from(hex::decode(calldata).unwrap()); - - let code_hash = code_hash(&bytecode); - let sender_address = EthrexAddress::from_low_u64_be(100); - let accounts = [ - // This is the contract account that is going to be executed - ( - EthrexAddress::from_low_u64_be(42), - Account { - info: AccountInfo { - nonce: 0, - balance: U256::MAX, - code_hash, - }, - storage: HashMap::new(), - code: bytecode.clone(), - }, - ), - ( - // This is the sender account - sender_address, - Account { - info: AccountInfo { - nonce: 0, - balance: U256::MAX, - code_hash, - }, - storage: HashMap::new(), - code: Bytes::new(), - }, - ), - ]; - - // The store type for this bench shouldn't matter as all operations use the LEVM cache - let in_memory_db = Store::new("", ethrex_storage::EngineType::InMemory).unwrap(); - let store: DynVmDatabase = Box::new(StoreVmDatabase::new(in_memory_db, H256::zero())); - let mut db = GeneralizedDatabase::new(Arc::new(store), CacheDB::new()); - - cache::insert_account( - &mut db.cache, - accounts[0].0, - Account::new( - accounts[0].1.info.balance, - accounts[0].1.code.clone(), - accounts[0].1.info.nonce, - HashMap::new(), - ), - ); - cache::insert_account( - &mut db.cache, - accounts[1].0, - Account::new( - accounts[1].1.info.balance, - accounts[1].1.code.clone(), - accounts[1].1.info.nonce, - HashMap::new(), - ), - ); - db.immutable_cache = db.cache.clone(); - - // when using stateful execute() we have to use nonce when instantiating the vm. Otherwise use 0. - for _nonce in 0..runs - 1 { - let mut vm = new_vm_with_bytecode(&mut db, 0, calldata.clone()); - vm.env.gas_limit = u64::MAX - 1; - vm.env.block_gas_limit = u64::MAX; - let tx_report = black_box(vm.stateless_execute().unwrap()); - assert!(tx_report.result == TxResult::Success); - } - let mut vm = new_vm_with_bytecode(&mut db, 0, calldata.clone()); - vm.env.gas_limit = u64::MAX - 1; - vm.env.block_gas_limit = u64::MAX; - let tx_report = black_box(vm.stateless_execute().unwrap()); - assert!(tx_report.result == TxResult::Success); - - match tx_report.result { - TxResult::Success => { - println!("output: \t\t0x{}", hex::encode(tx_report.output)); - } - TxResult::Revert(error) => panic!("Execution failed: {:?}", error), - } -} - -pub fn run_with_revm(program: &str, runs: u64, calldata: &str) { - let rich_acc_address = address!("1000000000000000000000000000000000000000"); - let bytes = hex::decode(program).unwrap(); - let raw = Bytecode::new_raw(bytes.clone().into()); - - let mut evm = Evm::builder() - .modify_tx_env(|tx| { - tx.caller = rich_acc_address; - tx.transact_to = TransactTo::Call(Address::ZERO); - tx.data = hex::decode(calldata).unwrap().into(); - }) - .with_db(BenchmarkDB::new_bytecode(raw)) - .build(); - - let result = evm.transact().unwrap(); - assert!(result.result.is_success()); - - for _ in 0..runs - 1 { - let result = black_box(evm.transact()).unwrap(); - assert!(result.result.is_success()); - } - let result = black_box(evm.transact()).unwrap(); - assert!(result.result.is_success()); - - println!("output: \t\t{}", result.result.into_output().unwrap()); -} - -pub fn generate_calldata(function: &str, n: u64) -> String { - let function_signature = format!("{}(uint256)", function); - let hash = Keccak256::digest(function_signature.as_bytes()); - let function_selector = &hash[..4]; - - // Encode argument n (uint256, padded to 32 bytes) - let mut encoded_n = [0u8; 32]; - encoded_n[24..].copy_from_slice(&n.to_be_bytes()); - - // Combine the function selector and the encoded argument - let calldata: Vec = function_selector - .iter() - .chain(encoded_n.iter()) - .copied() - .collect(); - - hex::encode(calldata) -} - -pub fn load_contract_bytecode(bench_name: &str) -> String { - let path = format!( - "bench/revm_comparison/contracts/bin/{}.bin-runtime", - bench_name - ); - load_file_bytecode(&path) -} - -fn load_file_bytecode(path: &str) -> String { - println!("Current directory: {:?}", std::env::current_dir().unwrap()); - println!("Loading bytecode from file {}", path); - let mut file = File::open(path).unwrap(); - let mut contents = String::new(); - file.read_to_string(&mut contents).unwrap(); - contents -} - -pub fn new_vm_with_bytecode(db: &mut GeneralizedDatabase, nonce: u64, calldata: Bytes) -> VM { - new_vm_with_ops_addr_bal_db(EthrexAddress::from_low_u64_be(100), nonce, db, calldata) -} - -/// This function is for testing purposes only. -fn new_vm_with_ops_addr_bal_db( - sender_address: EthrexAddress, - nonce: u64, - db: &mut GeneralizedDatabase, - calldata: Bytes, -) -> VM { - let env = Environment { - origin: sender_address, - tx_nonce: nonce, - gas_limit: 100000000000, - ..Default::default() - }; - - let tx = Transaction::EIP1559Transaction(EIP1559Transaction { - to: TxKind::Call(EthrexAddress::from_low_u64_be(42)), - data: calldata, - ..Default::default() - }); - VM::new(env, db, &tx, LevmCallTracer::disabled()) -} +// use bytes::Bytes; +// use ethrex_blockchain::vm::StoreVmDatabase; +// use ethrex_common::H256; +// use ethrex_common::{ +// Address as EthrexAddress, U256, +// types::{Account, AccountInfo, EIP1559Transaction, Transaction, TxKind, code_hash}, +// }; +// use ethrex_levm::{ +// Environment, +// db::{CacheDB, cache, gen_db::GeneralizedDatabase}, +// errors::TxResult, +// tracing::LevmCallTracer, +// vm::VM, +// }; +// use ethrex_storage::Store; +// use ethrex_vm::DynVmDatabase; +// use revm::{ +// Evm, +// db::BenchmarkDB, +// primitives::{Address, Bytecode, TransactTo, address}, +// }; +// use sha3::{Digest, Keccak256}; +// use std::hint::black_box; +// use std::io::Read; +// use std::{collections::HashMap, fs::File, sync::Arc}; +// +// pub fn run_with_levm(program: &str, runs: u64, calldata: &str) { +// let bytecode = Bytes::from(hex::decode(program).unwrap()); +// let calldata = Bytes::from(hex::decode(calldata).unwrap()); +// +// let code_hash = code_hash(&bytecode); +// let sender_address = EthrexAddress::from_low_u64_be(100); +// let accounts = [ +// // This is the contract account that is going to be executed +// ( +// EthrexAddress::from_low_u64_be(42), +// Account { +// info: AccountInfo { +// nonce: 0, +// balance: U256::MAX, +// code_hash, +// }, +// storage: HashMap::new(), +// code: bytecode.clone(), +// }, +// ), +// ( +// // This is the sender account +// sender_address, +// Account { +// info: AccountInfo { +// nonce: 0, +// balance: U256::MAX, +// code_hash, +// }, +// storage: HashMap::new(), +// code: Bytes::new(), +// }, +// ), +// ]; +// +// // The store type for this bench shouldn't matter as all operations use the LEVM cache +// let in_memory_db = Store::new("", ethrex_storage::EngineType::InMemory).unwrap(); +// let store: DynVmDatabase = Box::new(StoreVmDatabase::new(in_memory_db, H256::zero())); +// let mut db = GeneralizedDatabase::new(Arc::new(store), CacheDB::new()); +// +// cache::insert_account( +// &mut db.cache, +// accounts[0].0, +// Account::new( +// accounts[0].1.info.balance, +// accounts[0].1.code.clone(), +// accounts[0].1.info.nonce, +// HashMap::new(), +// ), +// ); +// cache::insert_account( +// &mut db.cache, +// accounts[1].0, +// Account::new( +// accounts[1].1.info.balance, +// accounts[1].1.code.clone(), +// accounts[1].1.info.nonce, +// HashMap::new(), +// ), +// ); +// db.immutable_cache = db.cache.clone(); +// +// // when using stateful execute() we have to use nonce when instantiating the vm. Otherwise use 0. +// for _nonce in 0..runs - 1 { +// let mut vm = new_vm_with_bytecode(&mut db, 0, calldata.clone()); +// vm.env.gas_limit = u64::MAX - 1; +// vm.env.block_gas_limit = u64::MAX; +// let tx_report = black_box(vm.stateless_execute().unwrap()); +// assert!(tx_report.result == TxResult::Success); +// } +// let mut vm = new_vm_with_bytecode(&mut db, 0, calldata.clone()); +// vm.env.gas_limit = u64::MAX - 1; +// vm.env.block_gas_limit = u64::MAX; +// let tx_report = black_box(vm.stateless_execute().unwrap()); +// assert!(tx_report.result == TxResult::Success); +// +// match tx_report.result { +// TxResult::Success => { +// println!("output: \t\t0x{}", hex::encode(tx_report.output)); +// } +// TxResult::Revert(error) => panic!("Execution failed: {:?}", error), +// } +// } +// +// pub fn run_with_revm(program: &str, runs: u64, calldata: &str) { +// let rich_acc_address = address!("1000000000000000000000000000000000000000"); +// let bytes = hex::decode(program).unwrap(); +// let raw = Bytecode::new_raw(bytes.clone().into()); +// +// let mut evm = Evm::builder() +// .modify_tx_env(|tx| { +// tx.caller = rich_acc_address; +// tx.transact_to = TransactTo::Call(Address::ZERO); +// tx.data = hex::decode(calldata).unwrap().into(); +// }) +// .with_db(BenchmarkDB::new_bytecode(raw)) +// .build(); +// +// let result = evm.transact().unwrap(); +// assert!(result.result.is_success()); +// +// for _ in 0..runs - 1 { +// let result = black_box(evm.transact()).unwrap(); +// assert!(result.result.is_success()); +// } +// let result = black_box(evm.transact()).unwrap(); +// assert!(result.result.is_success()); +// +// println!("output: \t\t{}", result.result.into_output().unwrap()); +// } +// +// pub fn generate_calldata(function: &str, n: u64) -> String { +// let function_signature = format!("{}(uint256)", function); +// let hash = Keccak256::digest(function_signature.as_bytes()); +// let function_selector = &hash[..4]; +// +// // Encode argument n (uint256, padded to 32 bytes) +// let mut encoded_n = [0u8; 32]; +// encoded_n[24..].copy_from_slice(&n.to_be_bytes()); +// +// // Combine the function selector and the encoded argument +// let calldata: Vec = function_selector +// .iter() +// .chain(encoded_n.iter()) +// .copied() +// .collect(); +// +// hex::encode(calldata) +// } +// +// pub fn load_contract_bytecode(bench_name: &str) -> String { +// let path = format!( +// "bench/revm_comparison/contracts/bin/{}.bin-runtime", +// bench_name +// ); +// load_file_bytecode(&path) +// } +// +// fn load_file_bytecode(path: &str) -> String { +// println!("Current directory: {:?}", std::env::current_dir().unwrap()); +// println!("Loading bytecode from file {}", path); +// let mut file = File::open(path).unwrap(); +// let mut contents = String::new(); +// file.read_to_string(&mut contents).unwrap(); +// contents +// } +// +// pub fn new_vm_with_bytecode(db: &mut GeneralizedDatabase, nonce: u64, calldata: Bytes) -> VM { +// new_vm_with_ops_addr_bal_db(EthrexAddress::from_low_u64_be(100), nonce, db, calldata) +// } +// +// /// This function is for testing purposes only. +// fn new_vm_with_ops_addr_bal_db( +// sender_address: EthrexAddress, +// nonce: u64, +// db: &mut GeneralizedDatabase, +// calldata: Bytes, +// ) -> VM { +// let env = Environment { +// origin: sender_address, +// tx_nonce: nonce, +// gas_limit: 100000000000, +// ..Default::default() +// }; +// +// let tx = Transaction::EIP1559Transaction(EIP1559Transaction { +// to: TxKind::Call(EthrexAddress::from_low_u64_be(42)), +// data: calldata, +// ..Default::default() +// }); +// VM::new(env, db, &tx, LevmCallTracer::disabled()) +// } +// From 4160fe077695f53ed44771d5f03f0b51dca4e89f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 17 Jun 2025 17:30:43 -0300 Subject: [PATCH 005/236] introduce revm feature --- cmd/ef_tests/blockchain/Cargo.toml | 2 +- cmd/ethrex/Cargo.toml | 2 +- .../block_producer/payload_builder.rs | 161 +++++++++--------- crates/vm/Cargo.toml | 11 +- crates/vm/backends/mod.rs | 15 +- .../vm/levm/bench/revm_comparison/Cargo.toml | 2 +- crates/vm/tracing.rs | 2 + 7 files changed, 105 insertions(+), 90 deletions(-) diff --git a/cmd/ef_tests/blockchain/Cargo.toml b/cmd/ef_tests/blockchain/Cargo.toml index d28af016659..fdc3465a2e8 100644 --- a/cmd/ef_tests/blockchain/Cargo.toml +++ b/cmd/ef_tests/blockchain/Cargo.toml @@ -8,7 +8,7 @@ ethrex-blockchain.workspace = true ethrex-common.workspace = true ethrex-storage.workspace = true ethrex-rlp.workspace = true -ethrex-vm.workspace = true +ethrex-vm = { workspace = true, features = ["revm"] } ethrex-prover = { path = "../../../crates/l2/prover", default-features = false } zkvm_interface = { path = "../../../crates/l2/prover/zkvm/interface", default-features = false } diff --git a/cmd/ethrex/Cargo.toml b/cmd/ethrex/Cargo.toml index a1547564b10..7f02df335ef 100644 --- a/cmd/ethrex/Cargo.toml +++ b/cmd/ethrex/Cargo.toml @@ -12,7 +12,7 @@ ethrex-rpc.workspace = true ethrex-common.workspace = true ethrex-p2p.workspace = true ethrex-storage.workspace = true -ethrex-vm.workspace = true +ethrex-vm = { workspace = true, features = ["revm"] } ethrex-rlp.workspace = true ethrex-storage-rollup = { workspace = true, optional = true } ethrex-l2 = { workspace = true, optional = true } diff --git a/crates/l2/sequencer/block_producer/payload_builder.rs b/crates/l2/sequencer/block_producer/payload_builder.rs index cdfbacba2df..277a0309489 100644 --- a/crates/l2/sequencer/block_producer/payload_builder.rs +++ b/crates/l2/sequencer/block_producer/payload_builder.rs @@ -264,88 +264,87 @@ fn get_account_diffs_in_tx( context: &PayloadBuildContext, ) -> Result, BlockProducerError> { let mut modified_accounts = HashMap::new(); - match &context.vm { - Evm::REVM { .. } => { - return Err(BlockProducerError::EvmError(EvmError::InvalidEVM( - "REVM not supported for L2".to_string(), - ))); - } - Evm::LEVM { db } => { - let transaction_backup = db.get_tx_backup().map_err(|e| { - BlockProducerError::FailedToGetDataFrom(format!("TransactionBackup: {e}")) - })?; - // First we add the account info - for (address, original_account) in transaction_backup.original_accounts_info.iter() { - let new_account = - db.cache - .get(address) - .ok_or(BlockProducerError::FailedToGetDataFrom( - "DB Cache".to_owned(), - ))?; - - let nonce_diff: u16 = (new_account.info.nonce - original_account.info.nonce) - .try_into() - .map_err(BlockProducerError::TryIntoError)?; - - let new_balance = if new_account.info.balance != original_account.info.balance { - Some(new_account.info.balance) - } else { - None - }; - - let bytecode = if new_account.code != original_account.code { - Some(new_account.code.clone()) - } else { - None - }; - - let account_state_diff = AccountStateDiff { - new_balance, - nonce_diff, - storage: BTreeMap::new(), // We add the storage later - bytecode, - bytecode_hash: None, - }; - - modified_accounts.insert(*address, account_state_diff); - } - // Then if there is any storage change, we add it to the account state diff - for (address, original_storage_slots) in - transaction_backup.original_account_storage_slots.iter() - { - let account_info = - db.cache - .get(address) - .ok_or(BlockProducerError::FailedToGetDataFrom( - "DB Cache".to_owned(), - ))?; - - let mut added_storage = BTreeMap::new(); - for key in original_storage_slots.keys() { - added_storage.insert( - *key, - *account_info.storage.get(key).ok_or( - BlockProducerError::FailedToGetDataFrom( - "Account info Storage".to_owned(), - ), - )?, - ); - } - if let Some(account_state_diff) = modified_accounts.get_mut(address) { - account_state_diff.storage = added_storage; - } else { - // If the account is not in the modified accounts, we create a new one - let account_state_diff = AccountStateDiff { - new_balance: None, - nonce_diff: 0, - storage: added_storage, - bytecode: None, - bytecode_hash: None, - }; - modified_accounts.insert(*address, account_state_diff); - } - } + let Evm::LEVM { db } = &context.vm else { + return Err(BlockProducerError::EvmError(EvmError::InvalidEVM( + "L2 only supports LEVM backend".to_string(), + ))); + }; + + let transaction_backup = db + .get_tx_backup() + .map_err(|e| BlockProducerError::FailedToGetDataFrom(format!("TransactionBackup: {e}")))?; + // First we add the account info + for (address, original_account) in transaction_backup.original_accounts_info.iter() { + let new_account = db + .cache + .get(address) + .ok_or(BlockProducerError::FailedToGetDataFrom( + "DB Cache".to_owned(), + ))?; + + let nonce_diff: u16 = (new_account.info.nonce - original_account.info.nonce) + .try_into() + .map_err(BlockProducerError::TryIntoError)?; + + let new_balance = if new_account.info.balance != original_account.info.balance { + Some(new_account.info.balance) + } else { + None + }; + + let bytecode = if new_account.code != original_account.code { + Some(new_account.code.clone()) + } else { + None + }; + + let account_state_diff = AccountStateDiff { + new_balance, + nonce_diff, + storage: BTreeMap::new(), // We add the storage later + bytecode, + bytecode_hash: None, + }; + + modified_accounts.insert(*address, account_state_diff); + } + + // Then if there is any storage change, we add it to the account state diff + for (address, original_storage_slots) in + transaction_backup.original_account_storage_slots.iter() + { + let account_info = db + .cache + .get(address) + .ok_or(BlockProducerError::FailedToGetDataFrom( + "DB Cache".to_owned(), + ))?; + + let mut added_storage = BTreeMap::new(); + for key in original_storage_slots.keys() { + added_storage.insert( + *key, + *account_info + .storage + .get(key) + .ok_or(BlockProducerError::FailedToGetDataFrom( + "Account info Storage".to_owned(), + ))?, + ); + } + if let Some(account_state_diff) = modified_accounts.get_mut(address) { + account_state_diff.storage = added_storage; + } else { + // If the account is not in the modified accounts, we create a new one + let account_state_diff = AccountStateDiff { + new_balance: None, + nonce_diff: 0, + storage: added_storage, + bytecode: None, + bytecode_hash: None, + }; + modified_accounts.insert(*address, account_state_diff); } } Ok(modified_accounts) diff --git a/crates/vm/Cargo.toml b/crates/vm/Cargo.toml index 99739c845d8..65b40872745 100644 --- a/crates/vm/Cargo.toml +++ b/crates/vm/Cargo.toml @@ -15,14 +15,14 @@ revm = { version = "19.0.0", features = [ "serde-json", "optional_no_base_fee", "optional_block_gas_limit", -], default-features = false } +], default-features = false, optional = true } # These dependencies must be kept up to date with the corresponding revm version, otherwise errors may pop up because of trait implementation mismatches -revm-inspectors = { version = "0.15.0" } +revm-inspectors = { version = "0.15.0", optional = true} derive_more = { version = "1.0.0", features = ["full"] } revm-primitives = { version = "15.2.0", features = [ "std", -], default-features = false } +], default-features = false, optional = true} bytes.workspace = true thiserror.workspace = true hex.workspace = true @@ -43,9 +43,10 @@ path = "./lib.rs" [features] default = [] l2 = ["ethrex-levm/l2"] -c-kzg = ["revm/c-kzg", "ethrex-levm/c-kzg", "ethrex-common/c-kzg"] -blst = ["revm/blst"] +c-kzg = ["revm?/c-kzg", "ethrex-levm/c-kzg", "ethrex-common/c-kzg"] +blst = ["revm?/blst"] debug = ["ethrex-levm/debug"] +revm = ["dep:revm", "dep:revm-inspectors", "dep:revm-primitives"] [lints.clippy] unwrap_used = "deny" diff --git a/crates/vm/backends/mod.rs b/crates/vm/backends/mod.rs index bbcabe85eea..ba95cf19fd8 100644 --- a/crates/vm/backends/mod.rs +++ b/crates/vm/backends/mod.rs @@ -16,6 +16,7 @@ pub use ethrex_levm::call_frame::CallFrameBackup; use ethrex_levm::db::gen_db::GeneralizedDatabase; use ethrex_levm::db::{CacheDB, Database as LevmDatabase}; use levm::LEVM; +#[cfg(feature = "revm")] use revm::REVM; use revm::db::EvmState; use std::fmt; @@ -53,6 +54,7 @@ impl TryFrom for EvmEngine { #[allow(clippy::large_enum_variant)] #[derive(Clone)] pub enum Evm { + #[cfg(feature = "revm")] REVM { state: EvmState }, LEVM { db: GeneralizedDatabase }, } @@ -60,6 +62,7 @@ pub enum Evm { impl std::fmt::Debug for Evm { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { + #[cfg(feature = "revm")] Evm::REVM { .. } => write!(f, "REVM"), Evm::LEVM { .. } => { write!(f, "LEVM") @@ -74,6 +77,7 @@ impl Evm { let wrapped_db: DynVmDatabase = Box::new(db); match engine { + #[cfg(feature = "revm")] EvmEngine::REVM => Evm::REVM { state: evm_state(wrapped_db), }, @@ -91,6 +95,7 @@ impl Evm { pub fn execute_block(&mut self, block: &Block) -> Result { match self { + #[cfg(feature = "revm")] Evm::REVM { state } => REVM::execute_block(block, state), Evm::LEVM { db } => LEVM::execute_block(block, db), } @@ -107,6 +112,7 @@ impl Evm { sender: Address, ) -> Result<(Receipt, u64), EvmError> { match self { + #[cfg(feature = "revm")] Evm::REVM { state } => { let chain_config = state.chain_config()?; let execution_result = REVM::execute_tx( @@ -147,6 +153,7 @@ impl Evm { pub fn undo_last_tx(&mut self) -> Result<(), EvmError> { match self { + #[cfg(feature = "revm")] Evm::REVM { .. } => Err(EvmError::InvalidEVM( "Undoing transaction not supported in REVM".to_string(), )), @@ -159,6 +166,7 @@ impl Evm { /// This function is used to run/apply all the system contracts to the state. pub fn apply_system_calls(&mut self, block_header: &BlockHeader) -> Result<(), EvmError> { match self { + #[cfg(feature = "revm")] Evm::REVM { state } => { let chain_config = state.chain_config()?; let spec_id = spec_id(&chain_config, block_header.timestamp); @@ -199,6 +207,7 @@ impl Evm { /// They may have the same name, but they serve for different purposes. pub fn get_state_transitions(&mut self) -> Result, EvmError> { match self { + #[cfg(feature = "revm")] Evm::REVM { state } => Ok(REVM::get_state_transitions(state)), Evm::LEVM { db } => LEVM::get_state_transitions(db), } @@ -208,6 +217,7 @@ impl Evm { /// Applies the withdrawals to the state or the block_chache if using [LEVM]. pub fn process_withdrawals(&mut self, withdrawals: &[Withdrawal]) -> Result<(), EvmError> { match self { + #[cfg(feature = "revm")] Evm::REVM { state } => REVM::process_withdrawals(state, withdrawals), Evm::LEVM { db } => LEVM::process_withdrawals(db, withdrawals), } @@ -219,8 +229,9 @@ impl Evm { header: &BlockHeader, ) -> Result, EvmError> { match self { - Evm::LEVM { db } => levm::extract_all_requests_levm(receipts, db, header), + #[cfg(feature = "revm")] Evm::REVM { state } => revm::extract_all_requests(receipts, state, header), + Evm::LEVM { db } => levm::extract_all_requests_levm(receipts, db, header), } } @@ -231,6 +242,7 @@ impl Evm { fork: Fork, ) -> Result { match self { + #[cfg(feature = "revm")] Evm::REVM { state } => { let spec_id = fork_to_spec_id(fork); self::revm::helpers::simulate_tx_from_generic(tx, header, state, spec_id) @@ -246,6 +258,7 @@ impl Evm { fork: Fork, ) -> Result<(u64, AccessList, Option), EvmError> { let result = match self { + #[cfg(feature = "revm")] Evm::REVM { state } => { let spec_id = fork_to_spec_id(fork); self::revm::helpers::create_access_list(tx, header, state, spec_id)? diff --git a/crates/vm/levm/bench/revm_comparison/Cargo.toml b/crates/vm/levm/bench/revm_comparison/Cargo.toml index 15a9fdabc11..ce353e22c86 100644 --- a/crates/vm/levm/bench/revm_comparison/Cargo.toml +++ b/crates/vm/levm/bench/revm_comparison/Cargo.toml @@ -9,7 +9,7 @@ path = "src/lib.rs" [dependencies] ethrex-levm = { path = "../../" } -ethrex-vm.workspace = true +ethrex-vm = { workspace = true, features = ["revm"] } ethrex-common.workspace = true ethrex-storage.workspace = true ethrex-blockchain.workspace = true diff --git a/crates/vm/tracing.rs b/crates/vm/tracing.rs index 645998dc1bd..7c6ec077612 100644 --- a/crates/vm/tracing.rs +++ b/crates/vm/tracing.rs @@ -25,6 +25,7 @@ impl Evm { ))?; match self { + #[cfg(feature = "revm")] Evm::REVM { state } => { REVM::trace_tx_calls(&block.header, tx, state, only_top_call, with_log) } @@ -44,6 +45,7 @@ impl Evm { stop_index: Option, ) -> Result<(), EvmError> { match self { + #[cfg(feature = "revm")] Evm::REVM { state } => REVM::rerun_block(block, state, stop_index), Evm::LEVM { db } => LEVM::rerun_block(db, block, stop_index), } From 67372a443575a760988254f5a20c182125358517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 17 Jun 2025 17:50:16 -0300 Subject: [PATCH 006/236] fmt --- crates/vm/backends/mod.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/vm/backends/mod.rs b/crates/vm/backends/mod.rs index ba95cf19fd8..337c5739884 100644 --- a/crates/vm/backends/mod.rs +++ b/crates/vm/backends/mod.rs @@ -55,8 +55,12 @@ impl TryFrom for EvmEngine { #[derive(Clone)] pub enum Evm { #[cfg(feature = "revm")] - REVM { state: EvmState }, - LEVM { db: GeneralizedDatabase }, + REVM { + state: EvmState, + }, + LEVM { + db: GeneralizedDatabase, + }, } impl std::fmt::Debug for Evm { From 419e81b0a7b265973d6551de414c07cd069482e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 18 Jun 2025 17:40:03 -0300 Subject: [PATCH 007/236] Revert "fmt" This reverts commit 67372a443575a760988254f5a20c182125358517. --- crates/vm/backends/mod.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/crates/vm/backends/mod.rs b/crates/vm/backends/mod.rs index 337c5739884..ba95cf19fd8 100644 --- a/crates/vm/backends/mod.rs +++ b/crates/vm/backends/mod.rs @@ -55,12 +55,8 @@ impl TryFrom for EvmEngine { #[derive(Clone)] pub enum Evm { #[cfg(feature = "revm")] - REVM { - state: EvmState, - }, - LEVM { - db: GeneralizedDatabase, - }, + REVM { state: EvmState }, + LEVM { db: GeneralizedDatabase }, } impl std::fmt::Debug for Evm { From aa21a94b2f4fac092c7c0408ce9d9e63af5a810f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 18 Jun 2025 17:41:09 -0300 Subject: [PATCH 008/236] Revert "introduce revm feature" This reverts commit 4160fe077695f53ed44771d5f03f0b51dca4e89f. --- cmd/ef_tests/blockchain/Cargo.toml | 2 +- cmd/ethrex/Cargo.toml | 2 +- .../block_producer/payload_builder.rs | 161 +++++++++--------- crates/vm/Cargo.toml | 7 +- crates/vm/backends/mod.rs | 15 +- .../vm/levm/bench/revm_comparison/Cargo.toml | 2 +- crates/vm/tracing.rs | 2 - 7 files changed, 88 insertions(+), 103 deletions(-) diff --git a/cmd/ef_tests/blockchain/Cargo.toml b/cmd/ef_tests/blockchain/Cargo.toml index fdc3465a2e8..d28af016659 100644 --- a/cmd/ef_tests/blockchain/Cargo.toml +++ b/cmd/ef_tests/blockchain/Cargo.toml @@ -8,7 +8,7 @@ ethrex-blockchain.workspace = true ethrex-common.workspace = true ethrex-storage.workspace = true ethrex-rlp.workspace = true -ethrex-vm = { workspace = true, features = ["revm"] } +ethrex-vm.workspace = true ethrex-prover = { path = "../../../crates/l2/prover", default-features = false } zkvm_interface = { path = "../../../crates/l2/prover/zkvm/interface", default-features = false } diff --git a/cmd/ethrex/Cargo.toml b/cmd/ethrex/Cargo.toml index 7f02df335ef..a1547564b10 100644 --- a/cmd/ethrex/Cargo.toml +++ b/cmd/ethrex/Cargo.toml @@ -12,7 +12,7 @@ ethrex-rpc.workspace = true ethrex-common.workspace = true ethrex-p2p.workspace = true ethrex-storage.workspace = true -ethrex-vm = { workspace = true, features = ["revm"] } +ethrex-vm.workspace = true ethrex-rlp.workspace = true ethrex-storage-rollup = { workspace = true, optional = true } ethrex-l2 = { workspace = true, optional = true } diff --git a/crates/l2/sequencer/block_producer/payload_builder.rs b/crates/l2/sequencer/block_producer/payload_builder.rs index 277a0309489..cdfbacba2df 100644 --- a/crates/l2/sequencer/block_producer/payload_builder.rs +++ b/crates/l2/sequencer/block_producer/payload_builder.rs @@ -264,87 +264,88 @@ fn get_account_diffs_in_tx( context: &PayloadBuildContext, ) -> Result, BlockProducerError> { let mut modified_accounts = HashMap::new(); - - let Evm::LEVM { db } = &context.vm else { - return Err(BlockProducerError::EvmError(EvmError::InvalidEVM( - "L2 only supports LEVM backend".to_string(), - ))); - }; - - let transaction_backup = db - .get_tx_backup() - .map_err(|e| BlockProducerError::FailedToGetDataFrom(format!("TransactionBackup: {e}")))?; - // First we add the account info - for (address, original_account) in transaction_backup.original_accounts_info.iter() { - let new_account = db - .cache - .get(address) - .ok_or(BlockProducerError::FailedToGetDataFrom( - "DB Cache".to_owned(), - ))?; - - let nonce_diff: u16 = (new_account.info.nonce - original_account.info.nonce) - .try_into() - .map_err(BlockProducerError::TryIntoError)?; - - let new_balance = if new_account.info.balance != original_account.info.balance { - Some(new_account.info.balance) - } else { - None - }; - - let bytecode = if new_account.code != original_account.code { - Some(new_account.code.clone()) - } else { - None - }; - - let account_state_diff = AccountStateDiff { - new_balance, - nonce_diff, - storage: BTreeMap::new(), // We add the storage later - bytecode, - bytecode_hash: None, - }; - - modified_accounts.insert(*address, account_state_diff); - } - - // Then if there is any storage change, we add it to the account state diff - for (address, original_storage_slots) in - transaction_backup.original_account_storage_slots.iter() - { - let account_info = db - .cache - .get(address) - .ok_or(BlockProducerError::FailedToGetDataFrom( - "DB Cache".to_owned(), - ))?; - - let mut added_storage = BTreeMap::new(); - for key in original_storage_slots.keys() { - added_storage.insert( - *key, - *account_info - .storage - .get(key) - .ok_or(BlockProducerError::FailedToGetDataFrom( - "Account info Storage".to_owned(), - ))?, - ); + match &context.vm { + Evm::REVM { .. } => { + return Err(BlockProducerError::EvmError(EvmError::InvalidEVM( + "REVM not supported for L2".to_string(), + ))); } - if let Some(account_state_diff) = modified_accounts.get_mut(address) { - account_state_diff.storage = added_storage; - } else { - // If the account is not in the modified accounts, we create a new one - let account_state_diff = AccountStateDiff { - new_balance: None, - nonce_diff: 0, - storage: added_storage, - bytecode: None, - bytecode_hash: None, - }; - modified_accounts.insert(*address, account_state_diff); + Evm::LEVM { db } => { + let transaction_backup = db.get_tx_backup().map_err(|e| { + BlockProducerError::FailedToGetDataFrom(format!("TransactionBackup: {e}")) + })?; + // First we add the account info + for (address, original_account) in transaction_backup.original_accounts_info.iter() { + let new_account = + db.cache + .get(address) + .ok_or(BlockProducerError::FailedToGetDataFrom( + "DB Cache".to_owned(), + ))?; + + let nonce_diff: u16 = (new_account.info.nonce - original_account.info.nonce) + .try_into() + .map_err(BlockProducerError::TryIntoError)?; + + let new_balance = if new_account.info.balance != original_account.info.balance { + Some(new_account.info.balance) + } else { + None + }; + + let bytecode = if new_account.code != original_account.code { + Some(new_account.code.clone()) + } else { + None + }; + + let account_state_diff = AccountStateDiff { + new_balance, + nonce_diff, + storage: BTreeMap::new(), // We add the storage later + bytecode, + bytecode_hash: None, + }; + + modified_accounts.insert(*address, account_state_diff); + } + + // Then if there is any storage change, we add it to the account state diff + for (address, original_storage_slots) in + transaction_backup.original_account_storage_slots.iter() + { + let account_info = + db.cache + .get(address) + .ok_or(BlockProducerError::FailedToGetDataFrom( + "DB Cache".to_owned(), + ))?; + + let mut added_storage = BTreeMap::new(); + for key in original_storage_slots.keys() { + added_storage.insert( + *key, + *account_info.storage.get(key).ok_or( + BlockProducerError::FailedToGetDataFrom( + "Account info Storage".to_owned(), + ), + )?, + ); + } + if let Some(account_state_diff) = modified_accounts.get_mut(address) { + account_state_diff.storage = added_storage; + } else { + // If the account is not in the modified accounts, we create a new one + let account_state_diff = AccountStateDiff { + new_balance: None, + nonce_diff: 0, + storage: added_storage, + bytecode: None, + bytecode_hash: None, + }; + modified_accounts.insert(*address, account_state_diff); + } + } } } Ok(modified_accounts) diff --git a/crates/vm/Cargo.toml b/crates/vm/Cargo.toml index 4cf3ab49a6a..1b37a4d9197 100644 --- a/crates/vm/Cargo.toml +++ b/crates/vm/Cargo.toml @@ -15,14 +15,14 @@ revm = { version = "19.0.0", features = [ "serde-json", "optional_no_base_fee", "optional_block_gas_limit", -], default-features = false, optional = true } +], default-features = false } # These dependencies must be kept up to date with the corresponding revm version, otherwise errors may pop up because of trait implementation mismatches -revm-inspectors = { version = "0.15.0", optional = true} +revm-inspectors = { version = "0.15.0" } derive_more = { version = "1.0.0", features = ["full"] } revm-primitives = { version = "15.2.0", features = [ "std", -], default-features = false, optional = true} +], default-features = false } bytes.workspace = true thiserror.workspace = true hex.workspace = true @@ -47,7 +47,6 @@ c-kzg = ["revm?/c-kzg", "ethrex-levm/c-kzg", "ethrex-common/c-kzg"] kzg-rs = ["ethrex-levm/kzg-rs"] blst = ["revm?/blst"] debug = ["ethrex-levm/debug"] -revm = ["dep:revm", "dep:revm-inspectors", "dep:revm-primitives"] [lints.clippy] unwrap_used = "deny" diff --git a/crates/vm/backends/mod.rs b/crates/vm/backends/mod.rs index ba95cf19fd8..bbcabe85eea 100644 --- a/crates/vm/backends/mod.rs +++ b/crates/vm/backends/mod.rs @@ -16,7 +16,6 @@ pub use ethrex_levm::call_frame::CallFrameBackup; use ethrex_levm::db::gen_db::GeneralizedDatabase; use ethrex_levm::db::{CacheDB, Database as LevmDatabase}; use levm::LEVM; -#[cfg(feature = "revm")] use revm::REVM; use revm::db::EvmState; use std::fmt; @@ -54,7 +53,6 @@ impl TryFrom for EvmEngine { #[allow(clippy::large_enum_variant)] #[derive(Clone)] pub enum Evm { - #[cfg(feature = "revm")] REVM { state: EvmState }, LEVM { db: GeneralizedDatabase }, } @@ -62,7 +60,6 @@ pub enum Evm { impl std::fmt::Debug for Evm { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - #[cfg(feature = "revm")] Evm::REVM { .. } => write!(f, "REVM"), Evm::LEVM { .. } => { write!(f, "LEVM") @@ -77,7 +74,6 @@ impl Evm { let wrapped_db: DynVmDatabase = Box::new(db); match engine { - #[cfg(feature = "revm")] EvmEngine::REVM => Evm::REVM { state: evm_state(wrapped_db), }, @@ -95,7 +91,6 @@ impl Evm { pub fn execute_block(&mut self, block: &Block) -> Result { match self { - #[cfg(feature = "revm")] Evm::REVM { state } => REVM::execute_block(block, state), Evm::LEVM { db } => LEVM::execute_block(block, db), } @@ -112,7 +107,6 @@ impl Evm { sender: Address, ) -> Result<(Receipt, u64), EvmError> { match self { - #[cfg(feature = "revm")] Evm::REVM { state } => { let chain_config = state.chain_config()?; let execution_result = REVM::execute_tx( @@ -153,7 +147,6 @@ impl Evm { pub fn undo_last_tx(&mut self) -> Result<(), EvmError> { match self { - #[cfg(feature = "revm")] Evm::REVM { .. } => Err(EvmError::InvalidEVM( "Undoing transaction not supported in REVM".to_string(), )), @@ -166,7 +159,6 @@ impl Evm { /// This function is used to run/apply all the system contracts to the state. pub fn apply_system_calls(&mut self, block_header: &BlockHeader) -> Result<(), EvmError> { match self { - #[cfg(feature = "revm")] Evm::REVM { state } => { let chain_config = state.chain_config()?; let spec_id = spec_id(&chain_config, block_header.timestamp); @@ -207,7 +199,6 @@ impl Evm { /// They may have the same name, but they serve for different purposes. pub fn get_state_transitions(&mut self) -> Result, EvmError> { match self { - #[cfg(feature = "revm")] Evm::REVM { state } => Ok(REVM::get_state_transitions(state)), Evm::LEVM { db } => LEVM::get_state_transitions(db), } @@ -217,7 +208,6 @@ impl Evm { /// Applies the withdrawals to the state or the block_chache if using [LEVM]. pub fn process_withdrawals(&mut self, withdrawals: &[Withdrawal]) -> Result<(), EvmError> { match self { - #[cfg(feature = "revm")] Evm::REVM { state } => REVM::process_withdrawals(state, withdrawals), Evm::LEVM { db } => LEVM::process_withdrawals(db, withdrawals), } @@ -229,9 +219,8 @@ impl Evm { header: &BlockHeader, ) -> Result, EvmError> { match self { - #[cfg(feature = "revm")] - Evm::REVM { state } => revm::extract_all_requests(receipts, state, header), Evm::LEVM { db } => levm::extract_all_requests_levm(receipts, db, header), + Evm::REVM { state } => revm::extract_all_requests(receipts, state, header), } } @@ -242,7 +231,6 @@ impl Evm { fork: Fork, ) -> Result { match self { - #[cfg(feature = "revm")] Evm::REVM { state } => { let spec_id = fork_to_spec_id(fork); self::revm::helpers::simulate_tx_from_generic(tx, header, state, spec_id) @@ -258,7 +246,6 @@ impl Evm { fork: Fork, ) -> Result<(u64, AccessList, Option), EvmError> { let result = match self { - #[cfg(feature = "revm")] Evm::REVM { state } => { let spec_id = fork_to_spec_id(fork); self::revm::helpers::create_access_list(tx, header, state, spec_id)? diff --git a/crates/vm/levm/bench/revm_comparison/Cargo.toml b/crates/vm/levm/bench/revm_comparison/Cargo.toml index c402a216d5a..82e96173f87 100644 --- a/crates/vm/levm/bench/revm_comparison/Cargo.toml +++ b/crates/vm/levm/bench/revm_comparison/Cargo.toml @@ -9,7 +9,7 @@ path = "src/lib.rs" [dependencies] ethrex-levm = { path = "../../" } -ethrex-vm = { workspace = true, features = ["revm"] } +ethrex-vm.workspace = true ethrex-common.workspace = true ethrex-storage.workspace = true ethrex-blockchain.workspace = true diff --git a/crates/vm/tracing.rs b/crates/vm/tracing.rs index 7c6ec077612..645998dc1bd 100644 --- a/crates/vm/tracing.rs +++ b/crates/vm/tracing.rs @@ -25,7 +25,6 @@ impl Evm { ))?; match self { - #[cfg(feature = "revm")] Evm::REVM { state } => { REVM::trace_tx_calls(&block.header, tx, state, only_top_call, with_log) } @@ -45,7 +44,6 @@ impl Evm { stop_index: Option, ) -> Result<(), EvmError> { match self { - #[cfg(feature = "revm")] Evm::REVM { state } => REVM::rerun_block(block, state, stop_index), Evm::LEVM { db } => LEVM::rerun_block(db, block, stop_index), } From 605f37dc63a4c6e3ca0da70393efcd7a82cf7789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 18 Jun 2025 17:41:12 -0300 Subject: [PATCH 009/236] Revert "WIP update c-kzg to 2.1.1, temporarily remove revm_comparison" This reverts commit d03a7a77bc8fe166623fb2e198a930d3663cf4b3. --- cmd/ethrex_replay/Cargo.toml | 2 +- crates/common/Cargo.toml | 2 +- crates/l2/prover/Cargo.toml | 2 +- crates/l2/prover/src/backends/risc0.rs | 6 +- crates/l2/prover/zkvm/interface/Cargo.toml | 2 +- .../l2/prover/zkvm/interface/risc0/Cargo.toml | 2 +- crates/vm/levm/Cargo.toml | 2 +- .../vm/levm/bench/revm_comparison/Cargo.toml | 2 +- .../bench/revm_comparison/src/benchmark.rs | 82 ++-- .../levm/bench/revm_comparison/src/compile.rs | 158 ++++--- .../vm/levm/bench/revm_comparison/src/lib.rs | 397 +++++++++--------- 11 files changed, 323 insertions(+), 334 deletions(-) diff --git a/cmd/ethrex_replay/Cargo.toml b/cmd/ethrex_replay/Cargo.toml index 1ec22a47ac3..c994ec500c8 100644 --- a/cmd/ethrex_replay/Cargo.toml +++ b/cmd/ethrex_replay/Cargo.toml @@ -40,7 +40,7 @@ revm = { version = "19.0.0", features = [ ], default-features = false } # These dependencies must be kept up to date with the corresponding revm version, otherwise errors may pop up because of trait implementation mismatches -#revm-inspectors = { version = "0.15.0" } +revm-inspectors = { version = "0.15.0" } derive_more = { version = "1.0.0", features = ["full"] } revm-primitives = { version = "15.2.0", features = [ "std", diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index efdbc4bfa50..b9e3715fbbe 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -17,7 +17,7 @@ serde_json.workspace = true thiserror.workspace = true k256.workspace = true # TODO(#1102): Move to Lambdaworks in the future -c-kzg = { version = "2.1.1", optional = true } +c-kzg = { version = "^1.0.3", optional = true } keccak-hash.workspace = true sha3.workspace = true secp256k1.workspace = true diff --git a/crates/l2/prover/Cargo.toml b/crates/l2/prover/Cargo.toml index e27acfc8ee1..80bfb784a63 100644 --- a/crates/l2/prover/Cargo.toml +++ b/crates/l2/prover/Cargo.toml @@ -34,7 +34,7 @@ ethrex-sdk.workspace = true zkvm_interface = { path = "./zkvm/interface", default-features = false } risc0-zkvm = { version = "2.1.0", optional = true } -risc0-ethereum-contracts = { version = "2.1.0", optional = true } +risc0-ethereum-contracts = { version = "1.3.1", optional = true } sp1-sdk = { version = "5.0.0", optional = true } sp1-recursion-gnark-ffi = { version = "5.0.0", optional = true } diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index fa0f23ffaf2..e405fa0d281 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -1,6 +1,4 @@ use ethrex_l2::utils::prover::proving_systems::{ProofCalldata, ProverType}; -use ethrex_l2::sequencer::proof_coordinator::ProofData; -use ethrex_l2::utils::prover::proving_systems::BatchProof; use ethrex_l2_sdk::calldata::Value; use risc0_ethereum_contracts::encode_seal; use risc0_zkvm::{ @@ -49,9 +47,9 @@ pub fn verify(receipt: &Receipt) -> Result<(), Box> { } pub fn to_batch_proof( - proof: Receipt, + proof: ProveOutput, _aligned_mode: bool, -) -> Result> { +) -> Result> { Ok(BatchProof::ProofCalldata(to_calldata(proof))) } diff --git a/crates/l2/prover/zkvm/interface/Cargo.toml b/crates/l2/prover/zkvm/interface/Cargo.toml index ed2c0067ce3..913c076617b 100644 --- a/crates/l2/prover/zkvm/interface/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/Cargo.toml @@ -9,7 +9,7 @@ serde_with = "3.11.0" serde_json = "1.0.117" thiserror = "2.0.9" kzg-rs = { version = "0.2.6", optional = true } -c-kzg = { version = "2.1.1", optional = true } +c-kzg = { version = "1.0.3", optional = true } ethrex-common = { path = "../../../../common/", default-features = false } ethrex-blockchain = { path = "../../../../blockchain/", default-features = false } diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml index 22eae37fbfc..939988667d8 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml @@ -18,7 +18,7 @@ ethrex-l2-common = { path = "../../../../common", default-features = false } [patch.crates-io] sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.8-risczero.0" } -c-kzg = { git = "https://github.com/risc0/c-kzg-4844", tag = "c-kzg/v2.1.1-risczero.1" } +c-kzg = { git = "https://github.com/risc0/c-kzg-4844", tag = "c-kzg/v1.0.3-risczero.1" } sp1_bls12_381 = { git = "https://github.com/risc0/zkcrypto-bls12_381", package = "bls12_381", tag = "bls12_381/v0.8.0-risczero.0" } # This git repo seems to be private diff --git a/crates/vm/levm/Cargo.toml b/crates/vm/levm/Cargo.toml index ecca813ac30..2b71f51ad39 100644 --- a/crates/vm/levm/Cargo.toml +++ b/crates/vm/levm/Cargo.toml @@ -26,7 +26,7 @@ num-bigint = "0.4.5" lambdaworks-math = "0.11.0" k256 = { version = "0.13.3", features = ["ecdh"] } kzg-rs = {version = "0.2.6", optional = true } -c-kzg = { version = "2.1.1", optional = true } +c-kzg = { version = "^1.0.3", optional = true } bls12_381 = { git = "https://github.com/lambdaclass/bls12_381", branch = "expose-fp-struct", features = [ "groups", "bits", diff --git a/crates/vm/levm/bench/revm_comparison/Cargo.toml b/crates/vm/levm/bench/revm_comparison/Cargo.toml index 82e96173f87..15a9fdabc11 100644 --- a/crates/vm/levm/bench/revm_comparison/Cargo.toml +++ b/crates/vm/levm/bench/revm_comparison/Cargo.toml @@ -16,7 +16,7 @@ ethrex-blockchain.workspace = true hex.workspace = true bytes.workspace = true -#revm = "9.0.0" +revm = "9.0.0" sha3 = "0.10.8" [[bin]] diff --git a/crates/vm/levm/bench/revm_comparison/src/benchmark.rs b/crates/vm/levm/bench/revm_comparison/src/benchmark.rs index 1762bf924d0..7db492ae27f 100644 --- a/crates/vm/levm/bench/revm_comparison/src/benchmark.rs +++ b/crates/vm/levm/bench/revm_comparison/src/benchmark.rs @@ -1,46 +1,42 @@ +use revm_comparison::{generate_calldata, load_contract_bytecode, run_with_levm, run_with_revm}; + +enum VM { + Revm, + Levm, +} + fn main() { + let usage = "usage: benchmark [revm/levm] [bench_name] (#repetitions) (#iterations)"; + let vm = std::env::args().nth(1).expect(usage); + + let vm = match vm.as_str() { + "levm" => VM::Levm, + "revm" => VM::Revm, + _ => { + eprintln!("{}", usage); + std::process::exit(1); + } + }; + + let benchmark = std::env::args().nth(2).expect(usage); + + let runs: u64 = std::env::args() + .nth(3) + .unwrap_or_else(|| "10".to_string()) // Default to 10 runs + .parse() + .expect(usage); + + let number_of_iterations: u64 = std::env::args() + .nth(4) + .unwrap_or_else(|| "100".to_string()) // Default to 10 iterations + .parse() + .expect(usage); + + let bytecode = load_contract_bytecode(&benchmark); + let calldata = generate_calldata("Benchmark", number_of_iterations); + match vm { + VM::Levm => run_with_levm(&bytecode, runs, &calldata), + VM::Revm => run_with_revm(&bytecode, runs, &calldata), + } } -// use revm_comparison::{generate_calldata, load_contract_bytecode, run_with_levm, run_with_revm}; -// -// enum VM { -// Revm, -// Levm, -// } -// -// fn main() { -// let usage = "usage: benchmark [revm/levm] [bench_name] (#repetitions) (#iterations)"; -// let vm = std::env::args().nth(1).expect(usage); -// -// let vm = match vm.as_str() { -// "levm" => VM::Levm, -// "revm" => VM::Revm, -// _ => { -// eprintln!("{}", usage); -// std::process::exit(1); -// } -// }; -// -// let benchmark = std::env::args().nth(2).expect(usage); -// -// let runs: u64 = std::env::args() -// .nth(3) -// .unwrap_or_else(|| "10".to_string()) // Default to 10 runs -// .parse() -// .expect(usage); -// -// let number_of_iterations: u64 = std::env::args() -// .nth(4) -// .unwrap_or_else(|| "100".to_string()) // Default to 10 iterations -// .parse() -// .expect(usage); -// -// let bytecode = load_contract_bytecode(&benchmark); -// let calldata = generate_calldata("Benchmark", number_of_iterations); -// -// match vm { -// VM::Levm => run_with_levm(&bytecode, runs, &calldata), -// VM::Revm => run_with_revm(&bytecode, runs, &calldata), -// } -// } -// diff --git a/crates/vm/levm/bench/revm_comparison/src/compile.rs b/crates/vm/levm/bench/revm_comparison/src/compile.rs index 31555497192..9d6a8aa7e19 100644 --- a/crates/vm/levm/bench/revm_comparison/src/compile.rs +++ b/crates/vm/levm/bench/revm_comparison/src/compile.rs @@ -1,84 +1,80 @@ +use std::fs; +use std::process::Command; + fn main() { + let contracts = [ + "Factorial", + "FactorialRecursive", + "Fibonacci", + "ManyHashes", + "BubbleSort", + ]; + println!("Current directory: {:?}", std::env::current_dir().unwrap()); + contracts.iter().for_each(|name| { + compile_contract(name); + }); + + compile_erc20_contracts(); +} + +fn compile_contract(bench_name: &str) { + let basepath = "crates/vm/levm/bench/revm_comparison/contracts"; + let outpath = format!("{}/bin", basepath); + let path = format!("{}/{}.sol", basepath, bench_name); + let args = [ + "--bin-runtime", + "--optimize", + "--overwrite", + &path, + "--output-dir", + &outpath, + ]; + println!("compiling {}", path); + run_solc(&args); +} + +fn compile_erc20_contracts() { + let basepath = "crates/vm/levm/bench/revm_comparison/contracts/erc20"; + let libpath = format!("{}/lib", basepath); + let outpath = "crates/vm/levm/bench/revm_comparison/contracts/bin"; + + // Collect all `.sol` files from the `erc20` directory + let paths = fs::read_dir(basepath) + .expect("Failed to read erc20 directory") + .filter_map(|entry| { + let path = entry.ok()?.path(); + if path.extension()?.to_str()? == "sol" { + Some(path.to_string_lossy().to_string()) + } else { + None + } + }) + .collect::>(); + + let mut args = vec![ + "--bin-runtime", + "--optimize", + "--overwrite", + "--allow-paths", + &libpath, + "--output-dir", + &outpath, + ]; + // Add the `.sol` files to the arguments + args.extend(paths.iter().map(|s| s.as_str())); + + println!("compiling erc20 contracts: {:?}", args); + run_solc(&args); +} + +fn run_solc(args: &[&str]) { + let output = Command::new("solc") + .args(args) + .output() + .expect("Failed to compile contract"); + let stdout = String::from_utf8(output.stdout).unwrap(); + let stderr = String::from_utf8(output.stderr).unwrap(); + println!("{}", stdout); + println!("{}", stderr); } -// use std::fs; -// use std::process::Command; -// -// fn main() { -// let contracts = [ -// "Factorial", -// "FactorialRecursive", -// "Fibonacci", -// "ManyHashes", -// "BubbleSort", -// ]; -// println!("Current directory: {:?}", std::env::current_dir().unwrap()); -// contracts.iter().for_each(|name| { -// compile_contract(name); -// }); -// -// compile_erc20_contracts(); -// } -// -// fn compile_contract(bench_name: &str) { -// let basepath = "crates/vm/levm/bench/revm_comparison/contracts"; -// let outpath = format!("{}/bin", basepath); -// let path = format!("{}/{}.sol", basepath, bench_name); -// let args = [ -// "--bin-runtime", -// "--optimize", -// "--overwrite", -// &path, -// "--output-dir", -// &outpath, -// ]; -// println!("compiling {}", path); -// run_solc(&args); -// } -// -// fn compile_erc20_contracts() { -// let basepath = "crates/vm/levm/bench/revm_comparison/contracts/erc20"; -// let libpath = format!("{}/lib", basepath); -// let outpath = "crates/vm/levm/bench/revm_comparison/contracts/bin"; -// -// // Collect all `.sol` files from the `erc20` directory -// let paths = fs::read_dir(basepath) -// .expect("Failed to read erc20 directory") -// .filter_map(|entry| { -// let path = entry.ok()?.path(); -// if path.extension()?.to_str()? == "sol" { -// Some(path.to_string_lossy().to_string()) -// } else { -// None -// } -// }) -// .collect::>(); -// -// let mut args = vec![ -// "--bin-runtime", -// "--optimize", -// "--overwrite", -// "--allow-paths", -// &libpath, -// "--output-dir", -// &outpath, -// ]; -// // Add the `.sol` files to the arguments -// args.extend(paths.iter().map(|s| s.as_str())); -// -// println!("compiling erc20 contracts: {:?}", args); -// run_solc(&args); -// } -// -// fn run_solc(args: &[&str]) { -// let output = Command::new("solc") -// .args(args) -// .output() -// .expect("Failed to compile contract"); -// -// let stdout = String::from_utf8(output.stdout).unwrap(); -// let stderr = String::from_utf8(output.stderr).unwrap(); -// println!("{}", stdout); -// println!("{}", stderr); -// } -// diff --git a/crates/vm/levm/bench/revm_comparison/src/lib.rs b/crates/vm/levm/bench/revm_comparison/src/lib.rs index 4bb895ff940..fb603b7c57d 100644 --- a/crates/vm/levm/bench/revm_comparison/src/lib.rs +++ b/crates/vm/levm/bench/revm_comparison/src/lib.rs @@ -1,199 +1,198 @@ -// use bytes::Bytes; -// use ethrex_blockchain::vm::StoreVmDatabase; -// use ethrex_common::H256; -// use ethrex_common::{ -// Address as EthrexAddress, U256, -// types::{Account, AccountInfo, EIP1559Transaction, Transaction, TxKind, code_hash}, -// }; -// use ethrex_levm::{ -// Environment, -// db::{CacheDB, cache, gen_db::GeneralizedDatabase}, -// errors::TxResult, -// tracing::LevmCallTracer, -// vm::VM, -// }; -// use ethrex_storage::Store; -// use ethrex_vm::DynVmDatabase; -// use revm::{ -// Evm, -// db::BenchmarkDB, -// primitives::{Address, Bytecode, TransactTo, address}, -// }; -// use sha3::{Digest, Keccak256}; -// use std::hint::black_box; -// use std::io::Read; -// use std::{collections::HashMap, fs::File, sync::Arc}; -// -// pub fn run_with_levm(program: &str, runs: u64, calldata: &str) { -// let bytecode = Bytes::from(hex::decode(program).unwrap()); -// let calldata = Bytes::from(hex::decode(calldata).unwrap()); -// -// let code_hash = code_hash(&bytecode); -// let sender_address = EthrexAddress::from_low_u64_be(100); -// let accounts = [ -// // This is the contract account that is going to be executed -// ( -// EthrexAddress::from_low_u64_be(42), -// Account { -// info: AccountInfo { -// nonce: 0, -// balance: U256::MAX, -// code_hash, -// }, -// storage: HashMap::new(), -// code: bytecode.clone(), -// }, -// ), -// ( -// // This is the sender account -// sender_address, -// Account { -// info: AccountInfo { -// nonce: 0, -// balance: U256::MAX, -// code_hash, -// }, -// storage: HashMap::new(), -// code: Bytes::new(), -// }, -// ), -// ]; -// -// // The store type for this bench shouldn't matter as all operations use the LEVM cache -// let in_memory_db = Store::new("", ethrex_storage::EngineType::InMemory).unwrap(); -// let store: DynVmDatabase = Box::new(StoreVmDatabase::new(in_memory_db, H256::zero())); -// let mut db = GeneralizedDatabase::new(Arc::new(store), CacheDB::new()); -// -// cache::insert_account( -// &mut db.cache, -// accounts[0].0, -// Account::new( -// accounts[0].1.info.balance, -// accounts[0].1.code.clone(), -// accounts[0].1.info.nonce, -// HashMap::new(), -// ), -// ); -// cache::insert_account( -// &mut db.cache, -// accounts[1].0, -// Account::new( -// accounts[1].1.info.balance, -// accounts[1].1.code.clone(), -// accounts[1].1.info.nonce, -// HashMap::new(), -// ), -// ); -// db.immutable_cache = db.cache.clone(); -// -// // when using stateful execute() we have to use nonce when instantiating the vm. Otherwise use 0. -// for _nonce in 0..runs - 1 { -// let mut vm = new_vm_with_bytecode(&mut db, 0, calldata.clone()); -// vm.env.gas_limit = u64::MAX - 1; -// vm.env.block_gas_limit = u64::MAX; -// let tx_report = black_box(vm.stateless_execute().unwrap()); -// assert!(tx_report.result == TxResult::Success); -// } -// let mut vm = new_vm_with_bytecode(&mut db, 0, calldata.clone()); -// vm.env.gas_limit = u64::MAX - 1; -// vm.env.block_gas_limit = u64::MAX; -// let tx_report = black_box(vm.stateless_execute().unwrap()); -// assert!(tx_report.result == TxResult::Success); -// -// match tx_report.result { -// TxResult::Success => { -// println!("output: \t\t0x{}", hex::encode(tx_report.output)); -// } -// TxResult::Revert(error) => panic!("Execution failed: {:?}", error), -// } -// } -// -// pub fn run_with_revm(program: &str, runs: u64, calldata: &str) { -// let rich_acc_address = address!("1000000000000000000000000000000000000000"); -// let bytes = hex::decode(program).unwrap(); -// let raw = Bytecode::new_raw(bytes.clone().into()); -// -// let mut evm = Evm::builder() -// .modify_tx_env(|tx| { -// tx.caller = rich_acc_address; -// tx.transact_to = TransactTo::Call(Address::ZERO); -// tx.data = hex::decode(calldata).unwrap().into(); -// }) -// .with_db(BenchmarkDB::new_bytecode(raw)) -// .build(); -// -// let result = evm.transact().unwrap(); -// assert!(result.result.is_success()); -// -// for _ in 0..runs - 1 { -// let result = black_box(evm.transact()).unwrap(); -// assert!(result.result.is_success()); -// } -// let result = black_box(evm.transact()).unwrap(); -// assert!(result.result.is_success()); -// -// println!("output: \t\t{}", result.result.into_output().unwrap()); -// } -// -// pub fn generate_calldata(function: &str, n: u64) -> String { -// let function_signature = format!("{}(uint256)", function); -// let hash = Keccak256::digest(function_signature.as_bytes()); -// let function_selector = &hash[..4]; -// -// // Encode argument n (uint256, padded to 32 bytes) -// let mut encoded_n = [0u8; 32]; -// encoded_n[24..].copy_from_slice(&n.to_be_bytes()); -// -// // Combine the function selector and the encoded argument -// let calldata: Vec = function_selector -// .iter() -// .chain(encoded_n.iter()) -// .copied() -// .collect(); -// -// hex::encode(calldata) -// } -// -// pub fn load_contract_bytecode(bench_name: &str) -> String { -// let path = format!( -// "bench/revm_comparison/contracts/bin/{}.bin-runtime", -// bench_name -// ); -// load_file_bytecode(&path) -// } -// -// fn load_file_bytecode(path: &str) -> String { -// println!("Current directory: {:?}", std::env::current_dir().unwrap()); -// println!("Loading bytecode from file {}", path); -// let mut file = File::open(path).unwrap(); -// let mut contents = String::new(); -// file.read_to_string(&mut contents).unwrap(); -// contents -// } -// -// pub fn new_vm_with_bytecode(db: &mut GeneralizedDatabase, nonce: u64, calldata: Bytes) -> VM { -// new_vm_with_ops_addr_bal_db(EthrexAddress::from_low_u64_be(100), nonce, db, calldata) -// } -// -// /// This function is for testing purposes only. -// fn new_vm_with_ops_addr_bal_db( -// sender_address: EthrexAddress, -// nonce: u64, -// db: &mut GeneralizedDatabase, -// calldata: Bytes, -// ) -> VM { -// let env = Environment { -// origin: sender_address, -// tx_nonce: nonce, -// gas_limit: 100000000000, -// ..Default::default() -// }; -// -// let tx = Transaction::EIP1559Transaction(EIP1559Transaction { -// to: TxKind::Call(EthrexAddress::from_low_u64_be(42)), -// data: calldata, -// ..Default::default() -// }); -// VM::new(env, db, &tx, LevmCallTracer::disabled()) -// } -// +use bytes::Bytes; +use ethrex_blockchain::vm::StoreVmDatabase; +use ethrex_common::H256; +use ethrex_common::{ + Address as EthrexAddress, U256, + types::{Account, AccountInfo, EIP1559Transaction, Transaction, TxKind, code_hash}, +}; +use ethrex_levm::{ + Environment, + db::{CacheDB, cache, gen_db::GeneralizedDatabase}, + errors::TxResult, + tracing::LevmCallTracer, + vm::VM, +}; +use ethrex_storage::Store; +use ethrex_vm::DynVmDatabase; +use revm::{ + Evm, + db::BenchmarkDB, + primitives::{Address, Bytecode, TransactTo, address}, +}; +use sha3::{Digest, Keccak256}; +use std::hint::black_box; +use std::io::Read; +use std::{collections::HashMap, fs::File, sync::Arc}; + +pub fn run_with_levm(program: &str, runs: u64, calldata: &str) { + let bytecode = Bytes::from(hex::decode(program).unwrap()); + let calldata = Bytes::from(hex::decode(calldata).unwrap()); + + let code_hash = code_hash(&bytecode); + let sender_address = EthrexAddress::from_low_u64_be(100); + let accounts = [ + // This is the contract account that is going to be executed + ( + EthrexAddress::from_low_u64_be(42), + Account { + info: AccountInfo { + nonce: 0, + balance: U256::MAX, + code_hash, + }, + storage: HashMap::new(), + code: bytecode.clone(), + }, + ), + ( + // This is the sender account + sender_address, + Account { + info: AccountInfo { + nonce: 0, + balance: U256::MAX, + code_hash, + }, + storage: HashMap::new(), + code: Bytes::new(), + }, + ), + ]; + + // The store type for this bench shouldn't matter as all operations use the LEVM cache + let in_memory_db = Store::new("", ethrex_storage::EngineType::InMemory).unwrap(); + let store: DynVmDatabase = Box::new(StoreVmDatabase::new(in_memory_db, H256::zero())); + let mut db = GeneralizedDatabase::new(Arc::new(store), CacheDB::new()); + + cache::insert_account( + &mut db.cache, + accounts[0].0, + Account::new( + accounts[0].1.info.balance, + accounts[0].1.code.clone(), + accounts[0].1.info.nonce, + HashMap::new(), + ), + ); + cache::insert_account( + &mut db.cache, + accounts[1].0, + Account::new( + accounts[1].1.info.balance, + accounts[1].1.code.clone(), + accounts[1].1.info.nonce, + HashMap::new(), + ), + ); + db.immutable_cache = db.cache.clone(); + + // when using stateful execute() we have to use nonce when instantiating the vm. Otherwise use 0. + for _nonce in 0..runs - 1 { + let mut vm = new_vm_with_bytecode(&mut db, 0, calldata.clone()); + vm.env.gas_limit = u64::MAX - 1; + vm.env.block_gas_limit = u64::MAX; + let tx_report = black_box(vm.stateless_execute().unwrap()); + assert!(tx_report.result == TxResult::Success); + } + let mut vm = new_vm_with_bytecode(&mut db, 0, calldata.clone()); + vm.env.gas_limit = u64::MAX - 1; + vm.env.block_gas_limit = u64::MAX; + let tx_report = black_box(vm.stateless_execute().unwrap()); + assert!(tx_report.result == TxResult::Success); + + match tx_report.result { + TxResult::Success => { + println!("output: \t\t0x{}", hex::encode(tx_report.output)); + } + TxResult::Revert(error) => panic!("Execution failed: {:?}", error), + } +} + +pub fn run_with_revm(program: &str, runs: u64, calldata: &str) { + let rich_acc_address = address!("1000000000000000000000000000000000000000"); + let bytes = hex::decode(program).unwrap(); + let raw = Bytecode::new_raw(bytes.clone().into()); + + let mut evm = Evm::builder() + .modify_tx_env(|tx| { + tx.caller = rich_acc_address; + tx.transact_to = TransactTo::Call(Address::ZERO); + tx.data = hex::decode(calldata).unwrap().into(); + }) + .with_db(BenchmarkDB::new_bytecode(raw)) + .build(); + + let result = evm.transact().unwrap(); + assert!(result.result.is_success()); + + for _ in 0..runs - 1 { + let result = black_box(evm.transact()).unwrap(); + assert!(result.result.is_success()); + } + let result = black_box(evm.transact()).unwrap(); + assert!(result.result.is_success()); + + println!("output: \t\t{}", result.result.into_output().unwrap()); +} + +pub fn generate_calldata(function: &str, n: u64) -> String { + let function_signature = format!("{}(uint256)", function); + let hash = Keccak256::digest(function_signature.as_bytes()); + let function_selector = &hash[..4]; + + // Encode argument n (uint256, padded to 32 bytes) + let mut encoded_n = [0u8; 32]; + encoded_n[24..].copy_from_slice(&n.to_be_bytes()); + + // Combine the function selector and the encoded argument + let calldata: Vec = function_selector + .iter() + .chain(encoded_n.iter()) + .copied() + .collect(); + + hex::encode(calldata) +} + +pub fn load_contract_bytecode(bench_name: &str) -> String { + let path = format!( + "bench/revm_comparison/contracts/bin/{}.bin-runtime", + bench_name + ); + load_file_bytecode(&path) +} + +fn load_file_bytecode(path: &str) -> String { + println!("Current directory: {:?}", std::env::current_dir().unwrap()); + println!("Loading bytecode from file {}", path); + let mut file = File::open(path).unwrap(); + let mut contents = String::new(); + file.read_to_string(&mut contents).unwrap(); + contents +} + +pub fn new_vm_with_bytecode(db: &mut GeneralizedDatabase, nonce: u64, calldata: Bytes) -> VM { + new_vm_with_ops_addr_bal_db(EthrexAddress::from_low_u64_be(100), nonce, db, calldata) +} + +/// This function is for testing purposes only. +fn new_vm_with_ops_addr_bal_db( + sender_address: EthrexAddress, + nonce: u64, + db: &mut GeneralizedDatabase, + calldata: Bytes, +) -> VM { + let env = Environment { + origin: sender_address, + tx_nonce: nonce, + gas_limit: 100000000000, + ..Default::default() + }; + + let tx = Transaction::EIP1559Transaction(EIP1559Transaction { + to: TxKind::Call(EthrexAddress::from_low_u64_be(42)), + data: calldata, + ..Default::default() + }); + VM::new(env, db, &tx, LevmCallTracer::disabled()) +} From 44471e82b4fb942813a152ff2fdb03bb99c42765 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 18 Jun 2025 18:15:20 -0300 Subject: [PATCH 010/236] fix c-zkg version incompat --- Cargo.lock | 743 ++----------------------- cmd/ethrex_replay/src/run.rs | 4 +- crates/l2/prover/Cargo.toml | 5 +- crates/l2/prover/src/backends/risc0.rs | 51 +- crates/l2/prover/src/prover.rs | 2 +- crates/vm/Cargo.toml | 4 +- 6 files changed, 96 insertions(+), 713 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f3db750caad..23965656072 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -139,39 +139,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "alloy" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2cc5aeb8dfa1e451a49fac87bc4b86c5de40ebea153ed88e83eb92b8151e74" -dependencies = [ - "alloy-consensus", - "alloy-contract", - "alloy-core", - "alloy-eips", - "alloy-genesis", - "alloy-network", - "alloy-provider", - "alloy-rpc-client", - "alloy-rpc-types", - "alloy-serde", - "alloy-signer", - "alloy-signer-local", - "alloy-transport", - "alloy-transport-http", -] - -[[package]] -name = "alloy-chains" -version = "0.1.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e2652684758b0d9b389d248b209ed9fd9989ef489a550265fe4bb8454fe7eb" -dependencies = [ - "alloy-primitives 0.8.25", - "num_enum 0.7.3", - "strum 0.27.1", -] - [[package]] name = "alloy-consensus" version = "0.11.1" @@ -203,56 +170,6 @@ dependencies = [ "serde", ] -[[package]] -name = "alloy-contract" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6180fb232becdea70fad57c63b6967f01f74ab9595671b870f504116dd29de" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-network", - "alloy-network-primitives", - "alloy-primitives 0.8.25", - "alloy-provider", - "alloy-rpc-types-eth", - "alloy-sol-types", - "alloy-transport", - "futures", - "futures-util", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-core" -version = "0.8.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d8bcce99ad10fe02640cfaec1c6bc809b837c783c1d52906aa5af66e2a196f6" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-primitives 0.8.25", - "alloy-rlp", - "alloy-sol-types", -] - -[[package]] -name = "alloy-dyn-abi" -version = "0.8.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb8e762aefd39a397ff485bc86df673465c4ad3ec8819cc60833a8a3ba5cdc87" -dependencies = [ - "alloy-json-abi", - "alloy-primitives 0.8.25", - "alloy-sol-type-parser", - "alloy-sol-types", - "const-hex", - "itoa", - "serde", - "serde_json", - "winnow 0.7.11", -] - [[package]] name = "alloy-eip2124" version = "0.1.0" @@ -309,19 +226,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "alloy-genesis" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cded3a2d4bd7173f696458c5d4c98c18a628dfcc9f194385e80a486e412e2e0" -dependencies = [ - "alloy-eips", - "alloy-primitives 0.8.25", - "alloy-serde", - "alloy-trie", - "serde", -] - [[package]] name = "alloy-json-abi" version = "0.8.25" @@ -334,45 +238,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "alloy-json-rpc" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "762414662d793d7aaa36ee3af6928b6be23227df1681ce9c039f6f11daadef64" -dependencies = [ - "alloy-primitives 0.8.25", - "alloy-sol-types", - "serde", - "serde_json", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "alloy-network" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be03f2ebc00cf88bd06d3c6caf387dceaa9c7e6b268216779fa68a9bf8ab4e6" -dependencies = [ - "alloy-consensus", - "alloy-consensus-any", - "alloy-eips", - "alloy-json-rpc", - "alloy-network-primitives", - "alloy-primitives 0.8.25", - "alloy-rpc-types-any", - "alloy-rpc-types-eth", - "alloy-serde", - "alloy-signer", - "alloy-sol-types", - "async-trait", - "auto_impl", - "futures-utils-wasm", - "serde", - "serde_json", - "thiserror 2.0.12", -] - [[package]] name = "alloy-network-primitives" version = "0.11.1" @@ -456,43 +321,6 @@ dependencies = [ "tiny-keccak", ] -[[package]] -name = "alloy-provider" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbe0a2acff0c4bd1669c71251ce10fc455cbffa1b4d0a817d5ea4ba7e5bb3db7" -dependencies = [ - "alloy-chains", - "alloy-consensus", - "alloy-eips", - "alloy-json-rpc", - "alloy-network", - "alloy-network-primitives", - "alloy-primitives 0.8.25", - "alloy-rpc-client", - "alloy-rpc-types-eth", - "alloy-sol-types", - "alloy-transport", - "alloy-transport-http", - "async-stream", - "async-trait", - "auto_impl", - "dashmap 6.1.0", - "futures", - "futures-utils-wasm", - "lru 0.13.0", - "parking_lot 0.12.4", - "pin-project", - "reqwest 0.12.20", - "serde", - "serde_json", - "thiserror 2.0.12", - "tokio", - "tracing", - "url", - "wasmtimer", -] - [[package]] name = "alloy-rlp" version = "0.3.12" @@ -515,52 +343,6 @@ dependencies = [ "syn 2.0.103", ] -[[package]] -name = "alloy-rpc-client" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b37cc3c7883dc41be1b01460127ad7930466d0a4bb6ba15a02ee34d2745e2d7c" -dependencies = [ - "alloy-json-rpc", - "alloy-primitives 0.8.25", - "alloy-transport", - "alloy-transport-http", - "futures", - "pin-project", - "reqwest 0.12.20", - "serde", - "serde_json", - "tokio", - "tokio-stream", - "tower 0.5.2", - "tracing", - "url", - "wasmtimer", -] - -[[package]] -name = "alloy-rpc-types" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f18e68a3882f372e045ddc89eb455469347767d17878ca492cfbac81e71a111" -dependencies = [ - "alloy-primitives 0.8.25", - "alloy-rpc-types-eth", - "alloy-serde", - "serde", -] - -[[package]] -name = "alloy-rpc-types-any" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "318ae46dd12456df42527c3b94c1ae9001e1ceb707f7afe2c7807ac4e49ebad9" -dependencies = [ - "alloy-consensus-any", - "alloy-rpc-types-eth", - "alloy-serde", -] - [[package]] name = "alloy-rpc-types-eth" version = "0.11.1" @@ -606,37 +388,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "alloy-signer" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f96b3526fdd779a4bd0f37319cfb4172db52a7ac24cdbb8804b72091c18e1701" -dependencies = [ - "alloy-primitives 0.8.25", - "async-trait", - "auto_impl", - "either", - "elliptic-curve", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-signer-local" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe8f78cd6b7501c7e813a1eb4a087b72d23af51f5bb66d4e948dc840bdd207d8" -dependencies = [ - "alloy-consensus", - "alloy-network", - "alloy-primitives 0.8.25", - "alloy-signer", - "async-trait", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.8.5", - "thiserror 2.0.12", -] - [[package]] name = "alloy-sol-macro" version = "0.8.25" @@ -657,7 +408,6 @@ version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83ad5da86c127751bc607c174d6c9fe9b85ef0889a9ca0c641735d77d4f98f26" dependencies = [ - "alloy-json-abi", "alloy-sol-macro-input", "const-hex", "heck 0.5.0", @@ -676,14 +426,12 @@ version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3d30f0d3f9ba3b7686f3ff1de9ee312647aac705604417a2f40c604f409a9e" dependencies = [ - "alloy-json-abi", "const-hex", "dunce", "heck 0.5.0", "macro-string", "proc-macro2", "quote", - "serde_json", "syn 2.0.103", "syn-solidity", ] @@ -711,40 +459,6 @@ dependencies = [ "serde", ] -[[package]] -name = "alloy-transport" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a8d762eadce3e9b65eac09879430c6f4fce3736cac3cac123f9b1bf435ddd13" -dependencies = [ - "alloy-json-rpc", - "base64 0.22.1", - "futures-utils-wasm", - "serde", - "serde_json", - "thiserror 2.0.12", - "tokio", - "tower 0.5.2", - "tracing", - "url", - "wasmtimer", -] - -[[package]] -name = "alloy-transport-http" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20819c4cb978fb39ce6ac31991ba90f386d595f922f42ef888b4a18be190713e" -dependencies = [ - "alloy-json-rpc", - "alloy-transport", - "reqwest 0.12.20", - "serde_json", - "tower 0.5.2", - "tracing", - "url", -] - [[package]] name = "alloy-trie" version = "0.7.9" @@ -868,47 +582,18 @@ dependencies = [ "derive_arbitrary", ] -[[package]] -name = "ark-bn254" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" -dependencies = [ - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-std 0.4.0", -] - [[package]] name = "ark-bn254" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" dependencies = [ - "ark-ec 0.5.0", + "ark-ec", "ark-ff 0.5.0", "ark-r1cs-std", "ark-std 0.5.0", ] -[[package]] -name = "ark-crypto-primitives" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" -dependencies = [ - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-relations 0.4.0", - "ark-serialize 0.4.2", - "ark-snark 0.4.0", - "ark-std 0.4.0", - "blake2", - "derivative", - "digest 0.10.7", - "sha2", -] - [[package]] name = "ark-crypto-primitives" version = "0.5.0" @@ -917,11 +602,11 @@ checksum = "1e0c292754729c8a190e50414fd1a37093c786c709899f29c9f7daccecfa855e" dependencies = [ "ahash", "ark-crypto-primitives-macros", - "ark-ec 0.5.0", + "ark-ec", "ark-ff 0.5.0", - "ark-relations 0.5.1", + "ark-relations", "ark-serialize 0.5.0", - "ark-snark 0.5.1", + "ark-snark", "ark-std 0.5.0", "blake2", "derivative", @@ -942,23 +627,6 @@ dependencies = [ "syn 2.0.103", ] -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff 0.4.2", - "ark-poly 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "zeroize", -] - [[package]] name = "ark-ec" version = "0.5.0" @@ -967,7 +635,7 @@ checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" dependencies = [ "ahash", "ark-ff 0.5.0", - "ark-poly 0.5.0", + "ark-poly", "ark-serialize 0.5.0", "ark-std 0.5.0", "educe", @@ -1106,49 +774,21 @@ dependencies = [ "syn 2.0.103", ] -[[package]] -name = "ark-groth16" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" -dependencies = [ - "ark-crypto-primitives 0.4.0", - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-poly 0.4.2", - "ark-relations 0.4.0", - "ark-serialize 0.4.2", - "ark-std 0.4.0", -] - [[package]] name = "ark-groth16" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88f1d0f3a534bb54188b8dcc104307db6c56cdae574ddc3212aec0625740fc7e" dependencies = [ - "ark-crypto-primitives 0.5.0", - "ark-ec 0.5.0", + "ark-crypto-primitives", + "ark-ec", "ark-ff 0.5.0", - "ark-poly 0.5.0", - "ark-relations 0.5.1", + "ark-poly", + "ark-relations", "ark-serialize 0.5.0", "ark-std 0.5.0", ] -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", - "derivative", - "hashbrown 0.13.2", -] - [[package]] name = "ark-poly" version = "0.5.0" @@ -1170,9 +810,9 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" dependencies = [ - "ark-ec 0.5.0", + "ark-ec", "ark-ff 0.5.0", - "ark-relations 0.5.1", + "ark-relations", "ark-std 0.5.0", "educe", "num-bigint 0.4.6", @@ -1181,17 +821,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "ark-relations" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" -dependencies = [ - "ark-ff 0.4.2", - "ark-std 0.4.0", - "tracing", -] - [[package]] name = "ark-relations" version = "0.5.1" @@ -1220,7 +849,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ - "ark-serialize-derive 0.4.2", "ark-std 0.4.0", "digest 0.10.7", "num-bigint 0.4.6", @@ -1232,24 +860,13 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" dependencies = [ - "ark-serialize-derive 0.5.0", + "ark-serialize-derive", "ark-std 0.5.0", "arrayvec", "digest 0.10.7", "num-bigint 0.4.6", ] -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "ark-serialize-derive" version = "0.5.0" @@ -1261,18 +878,6 @@ dependencies = [ "syn 2.0.103", ] -[[package]] -name = "ark-snark" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" -dependencies = [ - "ark-ff 0.4.2", - "ark-relations 0.4.0", - "ark-serialize 0.4.2", - "ark-std 0.4.0", -] - [[package]] name = "ark-snark" version = "0.5.1" @@ -1280,7 +885,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d368e2848c2d4c129ce7679a7d0d2d612b6a274d3ea6a13bad4445d61b381b88" dependencies = [ "ark-ff 0.5.0", - "ark-relations 0.5.1", + "ark-relations", "ark-serialize 0.5.0", "ark-std 0.5.0", ] @@ -2820,20 +2425,6 @@ dependencies = [ "parking_lot_core 0.9.11", ] -[[package]] -name = "dashmap" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core 0.9.11", -] - [[package]] name = "dashu" version = "0.4.2" @@ -4196,6 +3787,7 @@ dependencies = [ name = "ethrex-prover" version = "0.1.0" dependencies = [ + "anyhow", "bincode", "bytes", "cfg-if", @@ -4211,8 +3803,8 @@ dependencies = [ "ethrex-vm", "hex", "kzg-rs", - "risc0-ethereum-contracts", - "risc0-zkvm 2.1.0", + "risc0-zkp", + "risc0-zkvm", "serde", "serde_json", "sp1-recursion-gnark-ffi", @@ -4851,12 +4443,6 @@ dependencies = [ "slab", ] -[[package]] -name = "futures-utils-wasm" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" - [[package]] name = "fxhash" version = "0.2.1" @@ -5188,15 +4774,6 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - [[package]] name = "hashbrown" version = "0.14.5" @@ -6403,15 +5980,6 @@ dependencies = [ "hashbrown 0.15.4", ] -[[package]] -name = "lru" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" -dependencies = [ - "hashbrown 0.15.4", -] - [[package]] name = "lru-slab" version = "0.1.2" @@ -7002,9 +6570,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8983bb634df7248924ee0c4c3a749609b5abcb082c28fffe3254b3eb3602b307" dependencies = [ - "alloy-rlp", "const-hex", - "proptest", "serde", "smallvec", ] @@ -8864,21 +8430,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "risc0-binfmt" -version = "1.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05c37f3babf129daf199c4368030f3592365654b827eaf758d525b2e08f07765" -dependencies = [ - "anyhow", - "borsh", - "elf", - "risc0-zkp 1.2.6", - "risc0-zkvm-platform 1.2.6", - "serde", - "tracing", -] - [[package]] name = "risc0-binfmt" version = "2.0.1" @@ -8891,8 +8442,8 @@ dependencies = [ "elf", "lazy_static", "postcard", - "risc0-zkp 2.0.1", - "risc0-zkvm-platform 2.0.2", + "risc0-zkp", + "risc0-zkvm-platform", "semver 1.0.26", "serde", "tracing", @@ -8910,10 +8461,10 @@ dependencies = [ "dirs 5.0.1", "docker-generate", "hex", - "risc0-binfmt 2.0.1", + "risc0-binfmt", "risc0-zkos-v1compat", - "risc0-zkp 2.0.1", - "risc0-zkvm-platform 2.0.2", + "risc0-zkp", + "risc0-zkvm-platform", "rzup", "semver 1.0.26", "serde", @@ -8937,22 +8488,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "risc0-circuit-keccak" -version = "1.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c9d734d29c56ca0f00f492a544a6a1a2917c866c0108802dca8cd258a4de5a" -dependencies = [ - "anyhow", - "bytemuck", - "paste", - "risc0-binfmt 1.2.6", - "risc0-circuit-recursion 1.2.6", - "risc0-core 1.2.6", - "risc0-zkp 1.2.6", - "tracing", -] - [[package]] name = "risc0-circuit-keccak" version = "2.0.2" @@ -8965,12 +8500,12 @@ dependencies = [ "keccak", "paste", "rayon", - "risc0-binfmt 2.0.1", + "risc0-binfmt", "risc0-circuit-keccak-sys", - "risc0-circuit-recursion 2.0.2", - "risc0-core 2.0.0", + "risc0-circuit-recursion", + "risc0-core", "risc0-sys", - "risc0-zkp 2.0.1", + "risc0-zkp", "tracing", "xz2", ] @@ -8986,26 +8521,11 @@ dependencies = [ "derive_more 2.0.1", "glob", "risc0-build-kernel", - "risc0-core 2.0.0", + "risc0-core", "risc0-sys", "sppark", ] -[[package]] -name = "risc0-circuit-recursion" -version = "1.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb53805a927d0e0848b6d9cb0371ad5b582e61019190be86d41cca24cf8555b3" -dependencies = [ - "anyhow", - "bytemuck", - "hex", - "metal", - "risc0-core 1.2.6", - "risc0-zkp 1.2.6", - "tracing", -] - [[package]] name = "risc0-circuit-recursion" version = "2.0.2" @@ -9023,9 +8543,9 @@ dependencies = [ "rand 0.8.5", "rayon", "risc0-circuit-recursion-sys", - "risc0-core 2.0.0", + "risc0-core", "risc0-sys", - "risc0-zkp 2.0.1", + "risc0-zkp", "serde", "sha2", "tracing", @@ -9040,27 +8560,11 @@ checksum = "0a7f8aee9b6b299fc5c3259a1a6e00a49a17dfd55811e90070840a887b113645" dependencies = [ "glob", "risc0-build-kernel", - "risc0-core 2.0.0", + "risc0-core", "risc0-sys", "sppark", ] -[[package]] -name = "risc0-circuit-rv32im" -version = "1.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d0cce302486976a3a6c59a8f7dbcb7b635ac364fc1f97e9656695a01d809119" -dependencies = [ - "anyhow", - "metal", - "risc0-binfmt 1.2.6", - "risc0-core 1.2.6", - "risc0-zkp 1.2.6", - "risc0-zkvm-platform 1.2.6", - "serde", - "tracing", -] - [[package]] name = "risc0-circuit-rv32im" version = "2.0.4" @@ -9083,11 +8587,11 @@ dependencies = [ "rand 0.8.5", "rayon", "ringbuffer", - "risc0-binfmt 2.0.1", + "risc0-binfmt", "risc0-circuit-rv32im-sys", - "risc0-core 2.0.0", + "risc0-core", "risc0-sys", - "risc0-zkp 2.0.1", + "risc0-zkp", "serde", "smallvec", "tracing", @@ -9104,21 +8608,11 @@ dependencies = [ "derive_more 2.0.1", "glob", "risc0-build-kernel", - "risc0-core 2.0.0", + "risc0-core", "risc0-sys", "sppark", ] -[[package]] -name = "risc0-core" -version = "1.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2be3e5c922ccf8a61adc3ebfbf9aadc168dec765c8bc5bf7cb28d9c46bfa5b9b" -dependencies = [ - "bytemuck", - "rand_core 0.6.4", -] - [[package]] name = "risc0-core" version = "2.0.0" @@ -9132,42 +8626,6 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "risc0-ethereum-contracts" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bc9406a64e5945b3122a4bd2615222ad740efc3b6e86be04a89f98460acdcb6" -dependencies = [ - "alloy", - "alloy-sol-types", - "anyhow", - "bytemuck_derive", - "cfg-if", - "risc0-zkvm 1.2.6", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "risc0-groth16" -version = "1.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73a946f8e6db205107668379e3058f0091d7f9aef63d8e4956dff5dc7dfac486" -dependencies = [ - "anyhow", - "ark-bn254 0.4.0", - "ark-ec 0.4.2", - "ark-groth16 0.4.0", - "ark-serialize 0.4.2", - "bytemuck", - "hex", - "num-bigint 0.4.6", - "risc0-binfmt 1.2.6", - "risc0-zkp 1.2.6", - "serde", - "stability", -] - [[package]] name = "risc0-groth16" version = "2.0.1" @@ -9175,17 +8633,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b31cb7b2a46f0cdaf71803ea7e0389af9f5bc1aea2531106f2972b241f26e98" dependencies = [ "anyhow", - "ark-bn254 0.5.0", - "ark-ec 0.5.0", - "ark-groth16 0.5.0", + "ark-bn254", + "ark-ec", + "ark-groth16", "ark-serialize 0.5.0", "bytemuck", "hex", "num-bigint 0.4.6", "num-traits", - "risc0-binfmt 2.0.1", - "risc0-core 2.0.0", - "risc0-zkp 2.0.1", + "risc0-binfmt", + "risc0-core", + "risc0-zkp", "serde", "serde_json", "stability", @@ -9215,30 +8673,6 @@ dependencies = [ "no_std_strings", ] -[[package]] -name = "risc0-zkp" -version = "1.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373d06becf7bd3a8e46af6f8cb81509aa363cdddb1ec67a588ac69ad9f968127" -dependencies = [ - "anyhow", - "blake2", - "borsh", - "bytemuck", - "cfg-if", - "digest 0.10.7", - "hex", - "hex-literal", - "metal", - "paste", - "rand_core 0.6.4", - "risc0-core 1.2.6", - "risc0-zkvm-platform 1.2.6", - "serde", - "sha2", - "tracing", -] - [[package]] name = "risc0-zkp" version = "2.0.1" @@ -9262,36 +8696,9 @@ dependencies = [ "rand 0.8.5", "rand_core 0.6.4", "rayon", - "risc0-core 2.0.0", + "risc0-core", "risc0-sys", - "risc0-zkvm-platform 2.0.2", - "serde", - "sha2", - "stability", - "tracing", -] - -[[package]] -name = "risc0-zkvm" -version = "1.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95c66a128207326c0034b500a6f456265f26d26f40cf497b7d15f28c08db553c" -dependencies = [ - "anyhow", - "borsh", - "bytemuck", - "getrandom 0.2.16", - "hex", - "risc0-binfmt 1.2.6", - "risc0-circuit-keccak 1.2.6", - "risc0-circuit-recursion 1.2.6", - "risc0-circuit-rv32im 1.2.6", - "risc0-core 1.2.6", - "risc0-groth16 1.2.6", - "risc0-zkp 1.2.6", - "risc0-zkvm-platform 1.2.6", - "rrs-lib", - "semver 1.0.26", + "risc0-zkvm-platform", "serde", "sha2", "stability", @@ -9323,16 +8730,16 @@ dependencies = [ "prost", "rand 0.8.5", "rayon", - "risc0-binfmt 2.0.1", + "risc0-binfmt", "risc0-build", - "risc0-circuit-keccak 2.0.2", - "risc0-circuit-recursion 2.0.2", - "risc0-circuit-rv32im 2.0.4", - "risc0-core 2.0.0", - "risc0-groth16 2.0.1", + "risc0-circuit-keccak", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-groth16", "risc0-zkos-v1compat", - "risc0-zkp 2.0.1", - "risc0-zkvm-platform 2.0.2", + "risc0-zkp", + "risc0-zkvm-platform", "rrs-lib", "rustc-demangle", "rzup", @@ -9345,19 +8752,6 @@ dependencies = [ "typetag", ] -[[package]] -name = "risc0-zkvm-platform" -version = "1.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8187245809fe15d389dcdc1ca09ed5f5a1227b15e2fd48860c808aaf02e6996f" -dependencies = [ - "bytemuck", - "cfg-if", - "getrandom 0.2.16", - "libm", - "stability", -] - [[package]] name = "risc0-zkvm-platform" version = "2.0.2" @@ -10541,7 +9935,7 @@ dependencies = [ "hashbrown 0.14.5", "hex", "itertools 0.13.0", - "lru 0.12.5", + "lru", "num-bigint 0.4.6", "p3-baby-bear", "p3-bn254-fr", @@ -10940,15 +10334,6 @@ dependencies = [ "strum_macros 0.26.4", ] -[[package]] -name = "strum" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" -dependencies = [ - "strum_macros 0.27.1", -] - [[package]] name = "strum_macros" version = "0.25.3" @@ -10975,19 +10360,6 @@ dependencies = [ "syn 2.0.103", ] -[[package]] -name = "strum_macros" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.103", -] - [[package]] name = "subenum" version = "1.1.2" @@ -11522,7 +10894,6 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", - "tokio-util", ] [[package]] @@ -12485,20 +11856,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmtimer" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0048ad49a55b9deb3953841fa1fc5858f0efbcb7a18868c899a360269fac1b23" -dependencies = [ - "futures", - "js-sys", - "parking_lot 0.12.4", - "pin-utils", - "slab", - "wasm-bindgen", -] - [[package]] name = "web-sys" version = "0.3.77" diff --git a/cmd/ethrex_replay/src/run.rs b/cmd/ethrex_replay/src/run.rs index 96722a0d15b..85ea6a7b8e2 100644 --- a/cmd/ethrex_replay/src/run.rs +++ b/cmd/ethrex_replay/src/run.rs @@ -52,9 +52,9 @@ pub async fn prove(cache: Cache) -> eyre::Result { false, ) .map_err(|e| eyre::Error::msg(e.to_string()))?; - #[cfg(feature = "sp1")] + #[cfg(any(feature = "sp1", feature = "risc0"))] return Ok(format!("{out:#?}")); - #[cfg(not(feature = "sp1"))] + #[cfg(not(all(feature = "sp1", feature = "risc0")))] Ok(serde_json::to_string(&out.0)?) } diff --git a/crates/l2/prover/Cargo.toml b/crates/l2/prover/Cargo.toml index 80bfb784a63..8fa80d78867 100644 --- a/crates/l2/prover/Cargo.toml +++ b/crates/l2/prover/Cargo.toml @@ -18,6 +18,7 @@ clap.workspace = true kzg-rs = "0.2.6" cfg-if.workspace = true bincode = "1.3.3" +anyhow = "1.0.86" # ethrex ethrex-common.workspace = true @@ -34,7 +35,7 @@ ethrex-sdk.workspace = true zkvm_interface = { path = "./zkvm/interface", default-features = false } risc0-zkvm = { version = "2.1.0", optional = true } -risc0-ethereum-contracts = { version = "1.3.1", optional = true } +risc0-zkp = {version = "2.0.1", optional = true } sp1-sdk = { version = "5.0.0", optional = true } sp1-recursion-gnark-ffi = { version = "5.0.0", optional = true } @@ -57,7 +58,7 @@ default = ["l2"] risc0 = [ "zkvm_interface/risc0", "dep:risc0-zkvm", - "dep:risc0-ethereum-contracts", + "dep:risc0-zkp", ] sp1 = ["zkvm_interface/sp1", "dep:sp1-sdk"] diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index e405fa0d281..3e9ce442315 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -1,8 +1,8 @@ -use ethrex_l2::utils::prover::proving_systems::{ProofCalldata, ProverType}; +use ethrex_l2::utils::prover::proving_systems::{ProofCalldata, ProverType, BatchProof}; use ethrex_l2_sdk::calldata::Value; -use risc0_ethereum_contracts::encode_seal; +use risc0_zkp::verify::VerificationError; use risc0_zkvm::{ - ExecutorEnv, ProverOpts, Receipt, default_executor, default_prover, sha::Digestible, + default_executor, default_prover, ExecutorEnv, InnerReceipt, ProverOpts, Receipt }; use tracing::info; use zkvm_interface::{ @@ -10,12 +10,22 @@ use zkvm_interface::{ methods::{ZKVM_RISC0_PROGRAM_ELF, ZKVM_RISC0_PROGRAM_ID}, }; -pub fn execute(input: ProgramInput) -> Result<(), Box> { +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("can only encode groth16 seals")] + EncodeNonGroth16Seal, + #[error("verification failed: {0}")] + VerificationFailed(#[from] VerificationError), + #[error("zkvm dynamic error: {0}")] + ZkvmDyn(#[from] anyhow::Error) +} + +pub fn execute(input: ProgramInput) -> Result<(), Error> { let env = ExecutorEnv::builder().write(&input)?.build()?; let executor = default_executor(); - let session_info = executor.execute(env, ZKVM_RISC0_PROGRAM_ELF)?; + let _session_info = executor.execute(env, ZKVM_RISC0_PROGRAM_ELF)?; info!("Successfully generated session info."); Ok(()) @@ -24,7 +34,7 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { pub fn prove( input: ProgramInput, _aligned_mode: bool, -) -> Result> { +) -> Result { let mut stdout = Vec::new(); let env = ExecutorEnv::builder() @@ -41,19 +51,19 @@ pub fn prove( Ok(prove_info.receipt) } -pub fn verify(receipt: &Receipt) -> Result<(), Box> { +pub fn verify(receipt: &Receipt) -> Result<(), Error> { receipt.verify(ZKVM_RISC0_PROGRAM_ID)?; Ok(()) } pub fn to_batch_proof( - proof: ProveOutput, + proof: Receipt, _aligned_mode: bool, -) -> Result> { - Ok(BatchProof::ProofCalldata(to_calldata(proof))) +) -> Result { + to_calldata(proof).map(BatchProof::ProofCalldata) } -fn to_calldata(receipt: Receipt) -> ProofCalldata { +fn to_calldata(receipt: Receipt) -> Result { let seal = encode_seal(&receipt)?; let image_id = ZKVM_RISC0_PROGRAM_ID; let journal = receipt.journal.bytes; @@ -76,8 +86,23 @@ fn to_calldata(receipt: Receipt) -> ProofCalldata { Value::Bytes(journal.into()), ]; - ProofCalldata { + Ok(ProofCalldata { prover_type: ProverType::RISC0, calldata, - } + }) +} + +// ref: https://github.com/risc0/risc0-ethereum/blob/046bb34ea4605f9d8420c7db89baf8e1064fa6f5/contracts/src/lib.rs#L88 +// this was reimplemented because risc0-ethereum-contracts brings a different version of c-kzg into the workspace (2.1.0), +// which is incompatible with our current version (1.0.3). +fn encode_seal(receipt: &Receipt) -> Result, Error> { + let InnerReceipt::Groth16(receipt) = receipt.inner.clone() else { + return Err(Error::EncodeNonGroth16Seal); + }; + let selector = &receipt.verifier_parameters.as_bytes()[..4]; + // Create a new vector with the capacity to hold both selector and seal + let mut selector_seal = Vec::with_capacity(selector.len() + receipt.seal.len()); + selector_seal.extend_from_slice(selector); + selector_seal.extend_from_slice(receipt.seal.as_ref()); + Ok(selector_seal) } diff --git a/crates/l2/prover/src/prover.rs b/crates/l2/prover/src/prover.rs index 6849cee55a5..8720731fcf1 100644 --- a/crates/l2/prover/src/prover.rs +++ b/crates/l2/prover/src/prover.rs @@ -52,7 +52,7 @@ impl Prover { // Generate the Proof let Ok(batch_proof) = prove(prover_data.input, self.aligned_mode) .and_then(|output| to_batch_proof(output, self.aligned_mode)) - .inspect_err(|e| error!(e)) + .inspect_err(|e| error!("{}", e.to_string())) else { continue; }; diff --git a/crates/vm/Cargo.toml b/crates/vm/Cargo.toml index 1b37a4d9197..06832c3078d 100644 --- a/crates/vm/Cargo.toml +++ b/crates/vm/Cargo.toml @@ -43,9 +43,9 @@ path = "./lib.rs" [features] default = ["kzg-rs"] l2 = ["ethrex-levm/l2"] -c-kzg = ["revm?/c-kzg", "ethrex-levm/c-kzg", "ethrex-common/c-kzg"] +c-kzg = ["revm/c-kzg", "ethrex-levm/c-kzg", "ethrex-common/c-kzg"] kzg-rs = ["ethrex-levm/kzg-rs"] -blst = ["revm?/blst"] +blst = ["revm/blst"] debug = ["ethrex-levm/debug"] [lints.clippy] From 8783bdfc1bcd7c52d55407cc4563dc34752540a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 19 Jun 2025 18:20:26 -0300 Subject: [PATCH 011/236] fix sys-getenv and public inputs --- crates/l2/prover/src/backends/risc0.rs | 7 +++++-- crates/l2/prover/zkvm/interface/risc0/Cargo.toml | 1 + crates/l2/prover/zkvm/interface/risc0/src/main.rs | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index 3e9ce442315..0851eb9affc 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -2,6 +2,7 @@ use ethrex_l2::utils::prover::proving_systems::{ProofCalldata, ProverType, Batch use ethrex_l2_sdk::calldata::Value; use risc0_zkp::verify::VerificationError; use risc0_zkvm::{ + serde::Error as Risc0SerdeError, default_executor, default_prover, ExecutorEnv, InnerReceipt, ProverOpts, Receipt }; use tracing::info; @@ -16,6 +17,8 @@ pub enum Error { EncodeNonGroth16Seal, #[error("verification failed: {0}")] VerificationFailed(#[from] VerificationError), + #[error("decode failed: {0}")] + Risc0SerdeError(#[from] Risc0SerdeError), #[error("zkvm dynamic error: {0}")] ZkvmDyn(#[from] anyhow::Error) } @@ -66,7 +69,7 @@ pub fn to_batch_proof( fn to_calldata(receipt: Receipt) -> Result { let seal = encode_seal(&receipt)?; let image_id = ZKVM_RISC0_PROGRAM_ID; - let journal = receipt.journal.bytes; + let journal: Vec = receipt.journal.decode()?; // convert image_id into bytes let image_id = { @@ -79,7 +82,7 @@ fn to_calldata(receipt: Receipt) -> Result { // bytes calldata seal, // bytes32 imageId, - // bytes32 journal + // bytes journal let calldata = vec![ Value::Bytes(seal.into()), Value::FixedBytes(image_id.into()), diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml index 939988667d8..1aa6df7dfec 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml @@ -7,6 +7,7 @@ edition = "2024" [dependencies] risc0-zkvm = { version = "2.1.0", default-features = false, features = ["std"] } +risc0-zkvm-platform = { version = "2.0.2", default-features = false, features = ["sys-getenv"] } zkvm_interface = { path = "../", default-features = false, features = ["c-kzg"]} ethrex-common = { path = "../../../../../common", default-features = false } diff --git a/crates/l2/prover/zkvm/interface/risc0/src/main.rs b/crates/l2/prover/zkvm/interface/risc0/src/main.rs index c9a9deb559c..9967e4b67c9 100644 --- a/crates/l2/prover/zkvm/interface/risc0/src/main.rs +++ b/crates/l2/prover/zkvm/interface/risc0/src/main.rs @@ -5,5 +5,5 @@ fn main() { let input: ProgramInput = env::read(); let output = execution_program(input).unwrap(); - env::commit(&output); + env::commit(&output.encode()); } From 7abc0eabd496cbd58682393712eb6de09acf2890 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 20 Jun 2025 17:48:36 -0300 Subject: [PATCH 012/236] fix journal encoding --- crates/l2/prover/src/backends/risc0.rs | 2 +- crates/l2/prover/zkvm/interface/risc0/src/main.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index 0851eb9affc..304baf8c1d7 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -69,7 +69,7 @@ pub fn to_batch_proof( fn to_calldata(receipt: Receipt) -> Result { let seal = encode_seal(&receipt)?; let image_id = ZKVM_RISC0_PROGRAM_ID; - let journal: Vec = receipt.journal.decode()?; + let journal = receipt.journal.bytes; // convert image_id into bytes let image_id = { diff --git a/crates/l2/prover/zkvm/interface/risc0/src/main.rs b/crates/l2/prover/zkvm/interface/risc0/src/main.rs index 9967e4b67c9..ff09471826d 100644 --- a/crates/l2/prover/zkvm/interface/risc0/src/main.rs +++ b/crates/l2/prover/zkvm/interface/risc0/src/main.rs @@ -5,5 +5,5 @@ fn main() { let input: ProgramInput = env::read(); let output = execution_program(input).unwrap(); - env::commit(&output.encode()); + env::commit_slice(&output.encode()); } From 6e8ea62529d0f688775c27b077566699d17d4b28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 23 Jun 2025 15:01:06 -0300 Subject: [PATCH 013/236] fmt --- crates/l2/prover/src/backends/risc0.rs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index 304baf8c1d7..bfc2e9bfa34 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -1,9 +1,9 @@ -use ethrex_l2::utils::prover::proving_systems::{ProofCalldata, ProverType, BatchProof}; +use ethrex_l2::utils::prover::proving_systems::{BatchProof, ProofCalldata, ProverType}; use ethrex_l2_sdk::calldata::Value; use risc0_zkp::verify::VerificationError; use risc0_zkvm::{ + ExecutorEnv, InnerReceipt, ProverOpts, Receipt, default_executor, default_prover, serde::Error as Risc0SerdeError, - default_executor, default_prover, ExecutorEnv, InnerReceipt, ProverOpts, Receipt }; use tracing::info; use zkvm_interface::{ @@ -20,7 +20,7 @@ pub enum Error { #[error("decode failed: {0}")] Risc0SerdeError(#[from] Risc0SerdeError), #[error("zkvm dynamic error: {0}")] - ZkvmDyn(#[from] anyhow::Error) + ZkvmDyn(#[from] anyhow::Error), } pub fn execute(input: ProgramInput) -> Result<(), Error> { @@ -34,10 +34,7 @@ pub fn execute(input: ProgramInput) -> Result<(), Error> { Ok(()) } -pub fn prove( - input: ProgramInput, - _aligned_mode: bool, -) -> Result { +pub fn prove(input: ProgramInput, _aligned_mode: bool) -> Result { let mut stdout = Vec::new(); let env = ExecutorEnv::builder() @@ -59,10 +56,7 @@ pub fn verify(receipt: &Receipt) -> Result<(), Error> { Ok(()) } -pub fn to_batch_proof( - proof: Receipt, - _aligned_mode: bool, -) -> Result { +pub fn to_batch_proof(proof: Receipt, _aligned_mode: bool) -> Result { to_calldata(proof).map(BatchProof::ProofCalldata) } From 56823e763f13dd853896a3f4f159e1aac13cb84d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 23 Jun 2025 15:02:15 -0300 Subject: [PATCH 014/236] fix verification key --- crates/l2/prover/src/backends/risc0.rs | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index bfc2e9bfa34..143ef65f34e 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -2,7 +2,7 @@ use ethrex_l2::utils::prover::proving_systems::{BatchProof, ProofCalldata, Prove use ethrex_l2_sdk::calldata::Value; use risc0_zkp::verify::VerificationError; use risc0_zkvm::{ - ExecutorEnv, InnerReceipt, ProverOpts, Receipt, default_executor, default_prover, + Digest, ExecutorEnv, InnerReceipt, ProverOpts, Receipt, default_executor, default_prover, serde::Error as Risc0SerdeError, }; use tracing::info; @@ -62,16 +62,11 @@ pub fn to_batch_proof(proof: Receipt, _aligned_mode: bool) -> Result Result { let seal = encode_seal(&receipt)?; - let image_id = ZKVM_RISC0_PROGRAM_ID; let journal = receipt.journal.bytes; - - // convert image_id into bytes let image_id = { - let mut res = [0; 32]; - for i in 0..8 { - res[4 * i..][..4].copy_from_slice(&image_id[i].to_be_bytes()); - } - res.to_vec() + let digest: Digest = ZKVM_RISC0_PROGRAM_ID.into(); + let bytes: [u8; 32] = digest.into(); + bytes.to_vec() }; // bytes calldata seal, From 02333be3e278dbdc7b033f807ccb3db197f8284b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 23 Jun 2025 15:02:19 -0300 Subject: [PATCH 015/236] fmt --- crates/vm/levm/src/precompiles.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/crates/vm/levm/src/precompiles.rs b/crates/vm/levm/src/precompiles.rs index 555441535fd..927be3ee5e1 100644 --- a/crates/vm/levm/src/precompiles.rs +++ b/crates/vm/levm/src/precompiles.rs @@ -1065,15 +1065,17 @@ fn verify_kzg_proof( ) -> Result { #[cfg(feature = "kzg-rs")] { - let commitment_bytes = - kzg_rs::Bytes48::from_slice(commitment_bytes).map_err(|_| PrecompileError::EvaluationError)?; // Could be ParsingInputError - let z_bytes = kzg_rs::Bytes32::from_slice(z).map_err(|_| PrecompileError::EvaluationError)?; - let y_bytes = kzg_rs::Bytes32::from_slice(y).map_err(|_| PrecompileError::EvaluationError)?; - let proof_bytes = - kzg_rs::Bytes48::from_slice(proof_bytes).map_err(|_| PrecompileError::EvaluationError)?; - - let settings = - kzg_rs::KzgSettings::load_trusted_setup_file().map_err(|_| PrecompileError::EvaluationError)?; + let commitment_bytes = kzg_rs::Bytes48::from_slice(commitment_bytes) + .map_err(|_| PrecompileError::EvaluationError)?; // Could be ParsingInputError + let z_bytes = + kzg_rs::Bytes32::from_slice(z).map_err(|_| PrecompileError::EvaluationError)?; + let y_bytes = + kzg_rs::Bytes32::from_slice(y).map_err(|_| PrecompileError::EvaluationError)?; + let proof_bytes = kzg_rs::Bytes48::from_slice(proof_bytes) + .map_err(|_| PrecompileError::EvaluationError)?; + + let settings = kzg_rs::KzgSettings::load_trusted_setup_file() + .map_err(|_| PrecompileError::EvaluationError)?; return kzg_rs::kzg_proof::KzgProof::verify_kzg_proof( &commitment_bytes, From 43cbbb21c12ce03aa180f52ca5494208b1bfe17c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 23 Jun 2025 17:56:26 -0300 Subject: [PATCH 016/236] refactor kzg functions into ethrex-common --- Cargo.lock | 5 +- crates/common/Cargo.toml | 2 +- crates/common/common.rs | 1 + crates/common/kzg.rs | 94 +++++++++++++++++++ crates/common/types/blobs_bundle.rs | 51 ++-------- crates/l2/prover/zkvm/interface/Cargo.toml | 7 +- .../l2/prover/zkvm/interface/src/execution.rs | 57 +++-------- crates/vm/Cargo.toml | 3 +- crates/vm/levm/Cargo.toml | 7 +- crates/vm/levm/src/precompiles.rs | 52 +--------- 10 files changed, 128 insertions(+), 151 deletions(-) create mode 100644 crates/common/kzg.rs diff --git a/Cargo.lock b/Cargo.lock index 23965656072..3159077d89b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3613,6 +3613,7 @@ dependencies = [ "hex-literal", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "keccak-hash", + "kzg-rs", "lazy_static", "once_cell", "rayon", @@ -3712,7 +3713,6 @@ version = "0.1.0" dependencies = [ "bls12_381 0.8.0", "bytes", - "c-kzg", "colored", "datatest-stable", "derive_more 1.0.0", @@ -3721,7 +3721,6 @@ dependencies = [ "hex", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "keccak-hash", - "kzg-rs", "lambdaworks-math 0.11.0", "lazy_static", "num-bigint 0.4.6", @@ -12554,7 +12553,6 @@ dependencies = [ name = "zkvm_interface" version = "0.1.0" dependencies = [ - "c-kzg", "ethrex-blockchain", "ethrex-common", "ethrex-l2-common", @@ -12562,7 +12560,6 @@ dependencies = [ "ethrex-storage", "ethrex-trie", "ethrex-vm", - "kzg-rs", "risc0-build", "serde", "serde_json", diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index b9e3715fbbe..0a4994829fb 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -18,6 +18,7 @@ thiserror.workspace = true k256.workspace = true # TODO(#1102): Move to Lambdaworks in the future c-kzg = { version = "^1.0.3", optional = true } +kzg-rs = "0.2.6" keccak-hash.workspace = true sha3.workspace = true secp256k1.workspace = true @@ -31,7 +32,6 @@ rayon = "1.5" [dev-dependencies] hex-literal.workspace = true - [features] default = [] c-kzg = ["dep:c-kzg"] diff --git a/crates/common/common.rs b/crates/common/common.rs index 14f69634e49..8e4dad705c6 100644 --- a/crates/common/common.rs +++ b/crates/common/common.rs @@ -5,4 +5,5 @@ pub mod types; pub use bytes::Bytes; pub mod base64; pub use ethrex_trie::{TrieLogger, TrieWitness}; +pub mod kzg; pub mod tracing; diff --git a/crates/common/kzg.rs b/crates/common/kzg.rs new file mode 100644 index 00000000000..277a97c24c1 --- /dev/null +++ b/crates/common/kzg.rs @@ -0,0 +1,94 @@ +use crate::types::{Blob, Commitment, Proof}; + +#[derive(thiserror::Error, Debug)] +pub enum KzgError { + #[error("c-kzg error: {0}")] + CKzg(#[from] c_kzg::Error), + #[error("kzg-rs error: {0}")] + KzgRs(kzg_rs::KzgError), +} + +impl From for KzgError { + fn from(value: kzg_rs::KzgError) -> Self { + KzgError::KzgRs(value) + } +} + +/// Verifies a KZG proof for blob committed data, using a Fiat-Shamir protocol +/// as defined by c-kzg-4844. +pub fn verify_blob_kzg_proof( + blob: Blob, + commitment: Commitment, + proof: Proof, +) -> Result { + #[cfg(not(feature = "c-kzg"))] + { + kzg_rs::KzgProof::verify_blob_kzg_proof( + kzg_rs::Blob(blob), + &kzg_rs::Bytes48(commitment), + &kzg_rs::Bytes48(proof), + &kzg_rs::get_kzg_settings(), + ) + .map_err(KzgError::from) + } + #[cfg(feature = "c-kzg")] + { + c_kzg::KzgProof::verify_blob_kzg_proof( + &blob.into(), + &commitment.into(), + &proof.into(), + c_kzg::ethereum_kzg_settings(), + ) + .map_err(KzgError::from) + } +} + +/// Verifies that p(z) = y given a commitment that corresponds to the polynomial p(x) and a KZG proof +pub fn verify_kzg_proof( + commitment_bytes: [u8; 48], + z: [u8; 32], + y: [u8; 32], + proof_bytes: [u8; 48], +) -> Result { + #[cfg(not(feature = "c-kzg"))] + { + kzg_rs::KzgProof::verify_kzg_proof( + &kzg_rs::Bytes48(commitment_bytes), + &kzg_rs::Bytes32(z), + &kzg_rs::Bytes32(y), + &kzg_rs::Bytes48(proof), + &kzg_rs::get_kzg_settings(), + ) + .map_err(KzgError::from) + } + #[cfg(feature = "c-kzg")] + { + c_kzg::KzgProof::verify_kzg_proof( + &commitment_bytes.into(), + &z.into(), + &y.into(), + &proof_bytes.into(), + c_kzg::ethereum_kzg_settings(), + ) + .map_err(KzgError::from) + } +} + +#[cfg(feature = "c-kzg")] +pub fn blob_to_kzg_commitment_and_proof(blob: &Blob) -> Result<(Commitment, Proof), KzgError> { + let blob: c_kzg::Blob = (*blob).into(); + + let commitment = + c_kzg::KzgCommitment::blob_to_kzg_commitment(&blob, c_kzg::ethereum_kzg_settings())?; + let commitment_bytes = commitment.to_bytes(); + + let proof = c_kzg::KzgProof::compute_blob_kzg_proof( + &blob, + &commitment_bytes, + c_kzg::ethereum_kzg_settings(), + )?; + + let proof_bytes = proof.to_bytes(); + + Ok((commitment_bytes.into_inner(), proof_bytes.into_inner())) +} diff --git a/crates/common/types/blobs_bundle.rs b/crates/common/types/blobs_bundle.rs index 5e11ed42db5..fa5b7e6c56e 100644 --- a/crates/common/types/blobs_bundle.rs +++ b/crates/common/types/blobs_bundle.rs @@ -1,14 +1,11 @@ use std::ops::AddAssign; +use crate::kzg::KzgError; use crate::serde_utils; use crate::{Bytes, H256, types::constants::VERSIONED_HASH_VERSION_KZG}; #[cfg(feature = "c-kzg")] -use { - crate::types::transaction::EIP4844Transaction, - c_kzg::{KzgCommitment, KzgProof, KzgSettings, ethereum_kzg_settings}, - lazy_static::lazy_static, -}; +use crate::types::EIP4844Transaction; use ethrex_rlp::{ decode::RLPDecode, @@ -25,11 +22,6 @@ pub type Blob = [u8; BYTES_PER_BLOB]; pub type Commitment = Bytes48; pub type Proof = Bytes48; -#[cfg(feature = "c-kzg")] -lazy_static! { - static ref KZG_SETTINGS: &'static KzgSettings = ethereum_kzg_settings(); -} - #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Default)] #[serde(rename_all = "camelCase")] /// Struct containing all the blobs for a blob transaction, along with the corresponding commitments and proofs @@ -82,39 +74,6 @@ pub fn kzg_commitment_to_versioned_hash(data: &Commitment) -> H256 { versioned_hash.into() } -#[cfg(feature = "c-kzg")] -pub fn blob_to_kzg_commitment_and_proof( - blob: &Blob, -) -> Result<(Commitment, Proof), BlobsBundleError> { - let blob: c_kzg::Blob = (*blob).into(); - - let commitment = KzgCommitment::blob_to_kzg_commitment(&blob, &KZG_SETTINGS) - .or(Err(BlobsBundleError::BlobToCommitmentAndProofError))?; - - let commitment_bytes = commitment.to_bytes(); - - let proof = KzgProof::compute_blob_kzg_proof(&blob, &commitment_bytes, &KZG_SETTINGS) - .or(Err(BlobsBundleError::BlobToCommitmentAndProofError))?; - - let proof_bytes = proof.to_bytes(); - - Ok((commitment_bytes.into_inner(), proof_bytes.into_inner())) -} - -#[cfg(feature = "c-kzg")] -fn verify_blob_kzg_proof( - blob: Blob, - commitment: Commitment, - proof: Proof, -) -> Result { - let blob: c_kzg::Blob = blob.into(); - let commitment: c_kzg::Bytes48 = commitment.into(); - let proof: c_kzg::Bytes48 = proof.into(); - - KzgProof::verify_blob_kzg_proof(&blob, &commitment, &proof, &KZG_SETTINGS) - .or(Err(BlobsBundleError::BlobToCommitmentAndProofError)) -} - impl BlobsBundle { pub fn empty() -> Self { Self::default() @@ -128,6 +87,8 @@ impl BlobsBundle { // Populate the commitments and proofs for blob in blobs { + use crate::kzg::blob_to_kzg_commitment_and_proof; + let (commitment, proof) = blob_to_kzg_commitment_and_proof(blob)?; commitments.push(commitment); proofs.push(proof); @@ -180,6 +141,8 @@ impl BlobsBundle { .zip(self.commitments.iter()) .zip(self.proofs.iter()) { + use crate::kzg::verify_blob_kzg_proof; + if !verify_blob_kzg_proof(*blob, *commitment, *proof)? { return Err(BlobsBundleError::BlobToCommitmentAndProofError); } @@ -237,6 +200,8 @@ pub enum BlobsBundleError { BlobVersionedHashesError, #[error("Blob to commitment and proof generation error")] BlobToCommitmentAndProofError, + #[error("KZG related error: {0}")] + Kzg(#[from] KzgError), } #[cfg(test)] diff --git a/crates/l2/prover/zkvm/interface/Cargo.toml b/crates/l2/prover/zkvm/interface/Cargo.toml index 913c076617b..b7d506f323c 100644 --- a/crates/l2/prover/zkvm/interface/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/Cargo.toml @@ -8,8 +8,6 @@ serde = { version = "1.0.203", features = ["derive"] } serde_with = "3.11.0" serde_json = "1.0.117" thiserror = "2.0.9" -kzg-rs = { version = "0.2.6", optional = true } -c-kzg = { version = "1.0.3", optional = true } ethrex-common = { path = "../../../../common/", default-features = false } ethrex-blockchain = { path = "../../../../blockchain/", default-features = false } @@ -28,12 +26,11 @@ sp1-sdk = { version = "5.0.0", optional = true } methods = ["risc0"] [features] -default = ["kzg-rs"] +default = [] risc0 = ["dep:risc0-build"] sp1 = ["dep:sp1-build", "dep:sp1-sdk"] l2 = ["ethrex-vm/l2"] -kzg-rs = ["dep:kzg-rs", "ethrex-vm/kzg-rs"] -c-kzg = ["dep:c-kzg", "ethrex-vm/c-kzg", "ethrex-common/c-kzg"] +c-kzg = ["ethrex-vm/c-kzg", "ethrex-common/c-kzg"] [lib] path = "./src/lib.rs" diff --git a/crates/l2/prover/zkvm/interface/src/execution.rs b/crates/l2/prover/zkvm/interface/src/execution.rs index ec8c0acbc5a..6ce9221496a 100644 --- a/crates/l2/prover/zkvm/interface/src/execution.rs +++ b/crates/l2/prover/zkvm/interface/src/execution.rs @@ -16,9 +16,12 @@ use ethrex_vm::{Evm, EvmEngine, EvmError, ProverDBError}; use std::collections::HashMap; #[cfg(feature = "l2")] -use ethrex_common::types::{ - BlobsBundleError, Commitment, PrivilegedL2Transaction, Proof, Receipt, Transaction, - blob_from_bytes, kzg_commitment_to_versioned_hash, +use ethrex_common::{ + kzg::KzgError, + types::{ + BlobsBundleError, Commitment, PrivilegedL2Transaction, Proof, Receipt, Transaction, + blob_from_bytes, kzg_commitment_to_versioned_hash, + }, }; #[cfg(feature = "l2")] use ethrex_l2_common::{ @@ -56,12 +59,9 @@ pub enum StatelessExecutionError { #[cfg(feature = "l2")] #[error("Blobs bundle error: {0}")] BlobsBundleError(#[from] BlobsBundleError), - #[cfg(all(feature = "l2", feature = "kzg-rs"))] - #[error("KZG error (proof couldn't be verified): {0}")] - KzgRsError(kzg_rs::KzgError), - #[cfg(all(feature = "l2", feature = "c-kzg"))] + #[cfg(feature = "l2")] #[error("KZG error (proof couldn't be verified): {0}")] - CKzgError(c_kzg::Error), + KzgError(#[from] KzgError), #[cfg(feature = "l2")] #[error("Invalid KZG blob proof")] InvalidBlobProof, @@ -94,20 +94,6 @@ pub enum StatelessExecutionError { Internal(String), } -#[cfg(all(feature = "l2", feature = "kzg-rs"))] -impl From for StatelessExecutionError { - fn from(value: kzg_rs::KzgError) -> Self { - StatelessExecutionError::KzgRsError(value) - } -} - -#[cfg(all(feature = "l2", feature = "c-kzg"))] -impl From for StatelessExecutionError { - fn from(value: c_kzg::Error) -> Self { - StatelessExecutionError::CKzgError(value) - } -} - pub fn execution_program(input: ProgramInput) -> Result { let ProgramInput { blocks, @@ -372,35 +358,20 @@ fn compute_withdrawals_and_deposits_digests( Ok((withdrawals_merkle_root, deposit_logs_hash)) } -// TODO: refactor into ethrex-common::blobs_bundle #[cfg(feature = "l2")] fn verify_blob( state_diff: StateDiff, - blob_commitment: Commitment, - blob_proof: Proof, + commitment: Commitment, + proof: Proof, ) -> Result { + use ethrex_common::kzg::verify_blob_kzg_proof; + let encoded_state_diff = state_diff.encode()?; let blob_data = blob_from_bytes(encoded_state_diff)?; - #[cfg(feature = "kzg-rs")] - let is_blob_proof_valid = kzg_rs::KzgProof::verify_blob_kzg_proof( - kzg_rs::Blob::from_slice(&blob_data)?, - &kzg_rs::Bytes48::from_slice(&blob_commitment)?, - &kzg_rs::Bytes48::from_slice(&blob_proof)?, - &kzg_rs::get_kzg_settings(), - )?; - - #[cfg(feature = "c-kzg")] - let is_blob_proof_valid = c_kzg::KzgProof::verify_blob_kzg_proof( - &c_kzg::Blob::new(blob_data), - &blob_commitment.into(), - &blob_proof.into(), - &c_kzg::ethereum_kzg_settings(), - )?; - - if !is_blob_proof_valid { + if !verify_blob_kzg_proof(blob_data, commitment, proof)? { return Err(StatelessExecutionError::InvalidBlobProof); } - Ok(kzg_commitment_to_versioned_hash(&blob_commitment)) + Ok(kzg_commitment_to_versioned_hash(&commitment)) } diff --git a/crates/vm/Cargo.toml b/crates/vm/Cargo.toml index 06832c3078d..8f39ff60013 100644 --- a/crates/vm/Cargo.toml +++ b/crates/vm/Cargo.toml @@ -41,10 +41,9 @@ ethereum-types.workspace = true path = "./lib.rs" [features] -default = ["kzg-rs"] +default = [] l2 = ["ethrex-levm/l2"] c-kzg = ["revm/c-kzg", "ethrex-levm/c-kzg", "ethrex-common/c-kzg"] -kzg-rs = ["ethrex-levm/kzg-rs"] blst = ["revm/blst"] debug = ["ethrex-levm/debug"] diff --git a/crates/vm/levm/Cargo.toml b/crates/vm/levm/Cargo.toml index 2b71f51ad39..2aa75f31402 100644 --- a/crates/vm/levm/Cargo.toml +++ b/crates/vm/levm/Cargo.toml @@ -25,8 +25,6 @@ ripemd = "0.1.3" num-bigint = "0.4.5" lambdaworks-math = "0.11.0" k256 = { version = "0.13.3", features = ["ecdh"] } -kzg-rs = {version = "0.2.6", optional = true } -c-kzg = { version = "^1.0.3", optional = true } bls12_381 = { git = "https://github.com/lambdaclass/bls12_381", branch = "expose-fp-struct", features = [ "groups", "bits", @@ -41,12 +39,11 @@ colored = "2.1.0" spinoff = "0.8.0" [features] -default = ["kzg-rs"] -c-kzg = ["dep:c-kzg", "ethrex-common/c-kzg"] +default = [] +c-kzg = ["ethrex-common/c-kzg"] ethereum_foundation_tests = [] l2 = [] debug = [] -kzg-rs = ["dep:kzg-rs"] [lints.rust] unsafe_code = "forbid" diff --git a/crates/vm/levm/src/precompiles.rs b/crates/vm/levm/src/precompiles.rs index 927be3ee5e1..b1ca63ec2bf 100644 --- a/crates/vm/levm/src/precompiles.rs +++ b/crates/vm/levm/src/precompiles.rs @@ -4,7 +4,9 @@ use bls12_381::{ }; use bytes::Bytes; -use ethrex_common::{Address, H160, H256, U256, serde_utils::bool, types::Fork}; +use ethrex_common::{ + Address, H160, H256, U256, kzg::verify_kzg_proof, serde_utils::bool, types::Fork, +}; use keccak_hash::keccak256; use lambdaworks_math::{ cyclic_group::IsGroup, @@ -1056,52 +1058,6 @@ fn kzg_commitment_to_versioned_hash(commitment_bytes: &[u8; 48]) -> H256 { versioned_hash.into() } -/// Verifies that p(z) = y given a commitment that corresponds to the polynomial p(x) and a KZG proof -fn verify_kzg_proof( - commitment_bytes: &[u8; 48], - z: &[u8; 32], - y: &[u8; 32], - proof_bytes: &[u8; 48], -) -> Result { - #[cfg(feature = "kzg-rs")] - { - let commitment_bytes = kzg_rs::Bytes48::from_slice(commitment_bytes) - .map_err(|_| PrecompileError::EvaluationError)?; // Could be ParsingInputError - let z_bytes = - kzg_rs::Bytes32::from_slice(z).map_err(|_| PrecompileError::EvaluationError)?; - let y_bytes = - kzg_rs::Bytes32::from_slice(y).map_err(|_| PrecompileError::EvaluationError)?; - let proof_bytes = kzg_rs::Bytes48::from_slice(proof_bytes) - .map_err(|_| PrecompileError::EvaluationError)?; - - let settings = kzg_rs::KzgSettings::load_trusted_setup_file() - .map_err(|_| PrecompileError::EvaluationError)?; - - return kzg_rs::kzg_proof::KzgProof::verify_kzg_proof( - &commitment_bytes, - &z_bytes, - &y_bytes, - &proof_bytes, - &settings, - ) - .map_err(|_| PrecompileError::EvaluationError.into()); - } - #[cfg(feature = "c-kzg")] - { - return c_kzg::KzgProof::verify_kzg_proof( - &c_kzg::Bytes48::new(commitment_bytes.clone()), - &c_kzg::Bytes32::new(z.clone()), - &c_kzg::Bytes32::new(y.clone()), - &c_kzg::Bytes48::new(proof_bytes.clone()), - &c_kzg::ethereum_kzg_settings(), - ) - .map_err(|_| PrecompileError::EvaluationError.into()); - } - - // if no feature is enabled - unimplemented!(); -} - const POINT_EVALUATION_OUTPUT_BYTES: [u8; 64] = [ // Big endian FIELD_ELEMENTS_PER_BLOB bytes 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1164,7 +1120,7 @@ fn point_evaluation( } // This verifies the proof from a point (x, y) and a commitment - if !verify_kzg_proof(&commitment, &x, &y, &proof).unwrap_or(false) { + if !verify_kzg_proof(commitment, x, y, proof).unwrap_or(false) { return Err(PrecompileError::ParsingInputError.into()); } From 8f5746d9e3dd7715951a1544638b2975edec8e35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 23 Jun 2025 18:01:02 -0300 Subject: [PATCH 017/236] make kzg-rs a workspace dep --- Cargo.toml | 1 + crates/common/Cargo.toml | 2 +- crates/l2/prover/Cargo.toml | 2 +- crates/l2/prover/zkvm/interface/sp1/Cargo.toml | 2 +- crates/l2/tee/quote-gen/Cargo.toml | 4 ++-- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 09a8d01ce62..4fb461364e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -90,6 +90,7 @@ axum = "0.8.1" clap = { version = "4.3", features = ["derive", "env"] } clap_complete = "4.5.17" eyre = "0.6.12" +kzg-rs = "0.2.6" [patch.crates-io] secp256k1 = { git = "https://github.com/sp1-patches/rust-secp256k1", tag = "patch-0.29.1-sp1-5.0.0" } diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index 0a4994829fb..4f82dc982cc 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -18,7 +18,7 @@ thiserror.workspace = true k256.workspace = true # TODO(#1102): Move to Lambdaworks in the future c-kzg = { version = "^1.0.3", optional = true } -kzg-rs = "0.2.6" +kzg-rs.workspace = true keccak-hash.workspace = true sha3.workspace = true secp256k1.workspace = true diff --git a/crates/l2/prover/Cargo.toml b/crates/l2/prover/Cargo.toml index 8fa80d78867..274d84433a9 100644 --- a/crates/l2/prover/Cargo.toml +++ b/crates/l2/prover/Cargo.toml @@ -15,7 +15,7 @@ tracing.workspace = true hex.workspace = true thiserror.workspace = true clap.workspace = true -kzg-rs = "0.2.6" +kzg-rs.workspace = true cfg-if.workspace = true bincode = "1.3.3" anyhow = "1.0.86" diff --git a/crates/l2/prover/zkvm/interface/sp1/Cargo.toml b/crates/l2/prover/zkvm/interface/sp1/Cargo.toml index 65d9a44ea6b..644bb21e845 100644 --- a/crates/l2/prover/zkvm/interface/sp1/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/sp1/Cargo.toml @@ -8,7 +8,7 @@ edition = "2024" [dependencies] sp1-zkvm = "5.0.0" zkvm_interface = { path = "../" } -kzg-rs = "0.2.6" +kzg-rs.workspace = true ethrex-common = { path = "../../../../../common", default-features = false } ethrex-storage = { path = "../../../../../storage", default-features = false } diff --git a/crates/l2/tee/quote-gen/Cargo.toml b/crates/l2/tee/quote-gen/Cargo.toml index 2dbd558f2dd..9347f329944 100644 --- a/crates/l2/tee/quote-gen/Cargo.toml +++ b/crates/l2/tee/quote-gen/Cargo.toml @@ -11,7 +11,7 @@ hex = "0.4" zerocopy = "0.8" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -kzg-rs = "0.2.6" +kzg-rs.workspace = true ethrex-common = { path = "../../../common", default-features = false } ethrex-storage = { path = "../../../storage", default-features = false } @@ -40,4 +40,4 @@ l2 = [ "zkvm_interface/l2", "ethrex-blockchain/l2", "ethrex-l2/l2", -] +] From e30bf64a00a71d52507e3fff6f18ef9f3278f11e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 23 Jun 2025 18:10:32 -0300 Subject: [PATCH 018/236] use docker for building risc0 image --- crates/l2/prover/zkvm/interface/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index 9117b65a6f9..5a07265d69c 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -24,7 +24,7 @@ fn build_risc0_program() { .unwrap(); let guest_options = GuestOptionsBuilder::default() .features(features) - //.use_docker(docker_options) + .use_docker(docker_options) .build() .unwrap(); From 26e84dc658a79fe734650d48a5cc07903ed8f12f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 13:21:14 -0300 Subject: [PATCH 019/236] store vk in contract --- Cargo.lock | 1 + crates/l2/contracts/bin/deployer/cli.rs | 13 +++++++ crates/l2/contracts/bin/deployer/main.rs | 39 +++++++++++-------- .../l2/contracts/src/l1/OnChainProposer.sol | 12 +++++- .../src/l1/interfaces/IOnChainProposer.sol | 2 - crates/l2/docker-compose-l2.yaml | 2 + crates/l2/prover/zkvm/interface/Cargo.toml | 3 +- crates/l2/prover/zkvm/interface/build.rs | 9 ++++- .../l2/prover/zkvm/interface/sp1/Cargo.toml | 1 - 9 files changed, 59 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3159077d89b..29f1786aece 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12561,6 +12561,7 @@ dependencies = [ "ethrex-trie", "ethrex-vm", "risc0-build", + "risc0-zkvm", "serde", "serde_json", "serde_with", diff --git a/crates/l2/contracts/bin/deployer/cli.rs b/crates/l2/contracts/bin/deployer/cli.rs index dd63a33d969..3c3db1aab65 100644 --- a/crates/l2/contracts/bin/deployer/cli.rs +++ b/crates/l2/contracts/bin/deployer/cli.rs @@ -254,6 +254,15 @@ pub struct DeployerOptions { help = "Path to the SP1 verification key. This is used for proof verification." )] pub sp1_vk_path: String, + #[arg( + long, + default_value_t = format!("{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-vk", env!("CARGO_MANIFEST_DIR")), + value_name = "PATH", + env = "ETHREX_RISC0_VERIFICATION_KEY_PATH", + help_heading = "Deployer options", + help = "Path to the Risc0 image id / verification key. This is used for proof verification." + )] + pub risc0_vk_path: String, #[arg( long, default_value = "false", @@ -346,6 +355,10 @@ impl Default for DeployerOptions { "{}/../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk", env!("CARGO_MANIFEST_DIR") ), + risc0_vk_path: format!( + "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-vk", + env!("CARGO_MANIFEST_DIR") + ), deploy_based_contracts: false, sequencer_registry_owner: None, } diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index dbec19e45f6..abd4adfbf11 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -28,9 +28,9 @@ mod cli; mod error; const INITIALIZE_ON_CHAIN_PROPOSER_SIGNATURE_BASED: &str = - "initialize(bool,address,address,address,address,address,bytes32,bytes32,address)"; + "initialize(bool,address,address,address,address,address,bytes32,bytes32,bytes32,address)"; const INITIALIZE_ON_CHAIN_PROPOSER_SIGNATURE: &str = - "initialize(bool,address,address,address,address,address,bytes32,bytes32,address[])"; + "initialize(bool,address,address,address,address,address,bytes32,bytes32,bytes32,address[])"; const INITIALIZE_BRIDGE_ADDRESS_SIGNATURE: &str = "initializeBridgeAddress(address)"; const TRANSFER_OWNERSHIP_SIGNATURE: &str = "transferOwnership(address)"; @@ -349,6 +349,23 @@ fn read_tdx_deployment_address(name: &str) -> Address { Address::from_str(&contents).unwrap_or(Address::zero()) } +fn read_vk(path: &str) -> Result, DeployerError> { + let vk_string = read_to_string(path).unwrap_or_else(|_| { + warn!( + ?path, + "Failed to read verification key file, will use 0x00..00, this is expected in dev mode" + ); + "0x00".to_string() + }); + hex::decode(vk_string.trim_start_matches("0x")) + .map_err(|err| { + DeployerError::DecodingError(format!( + "failed to parse vk ({vk_string}) from hex: {err}" + )) + })? + .into() +} + async fn initialize_contracts( contract_addresses: ContractAddresses, eth_client: &EthClient, @@ -363,20 +380,9 @@ async fn initialize_contracts( .to_str() .ok_or(DeployerError::FailedToGetStringFromPath)?, ); - let sp1_vk_string = read_to_string(&opts.sp1_vk_path).unwrap_or_else(|_| { - warn!( - path = opts.sp1_vk_path, - "Failed to read SP1 verification key file, will use 0x00..00, this is expected in dev mode" - ); - "0x00".to_string() - }); - let sp1_vk = hex::decode(sp1_vk_string.trim_start_matches("0x")) - .map_err(|err| { - DeployerError::DecodingError(format!( - "failed to parse sp1_vk ({sp1_vk_string}) from hex: {err}" - )) - })? - .into(); + + let sp1_vk = read_vk(&opts.sp1_vk_path)?; + let risc0_vk = read_vk(&opts.risc0_vk_path)?; let deployer_address = get_address_from_secret_key(&opts.private_key)?; @@ -392,6 +398,7 @@ async fn initialize_contracts( Value::Address(contract_addresses.tdx_verifier_address), Value::Address(contract_addresses.aligned_aggregator_address), Value::FixedBytes(sp1_vk), + Value::FixedBytes(risc0_vk), Value::FixedBytes(genesis.compute_state_root().0.to_vec().into()), Value::Address(contract_addresses.sequencer_registry_address), ]; diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 2d404a583ea..889004671bd 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -84,6 +84,8 @@ contract OnChainProposer is /// @dev This address is set during contract initialization and is used to verify aligned proofs. address public ALIGNEDPROOFAGGREGATOR; + bytes32 public RISC0_VERIFICATION_KEY; + modifier onlySequencer() { require( authorizedSequencerAddresses[msg.sender], @@ -107,6 +109,7 @@ contract OnChainProposer is address tdxverifier, address alignedProofAggregator, bytes32 sp1Vk, + bytes32 risc0Vk, bytes32 genesisStateRoot, address[] calldata sequencerAddresses ) public initializer { @@ -179,6 +182,12 @@ contract OnChainProposer is "OnChainProposer: contract already initialized" ); SP1_VERIFICATION_KEY = sp1Vk; + // Set the Risc0 program verification key + require( + RISC0_VERIFICATION_KEY == bytes32(0), + "OnChainProposer: contract already initialized" + ); + RISC0_VERIFICATION_KEY = risc0Vk; batchCommitments[0] = BatchCommitmentInfo( genesisStateRoot, @@ -281,7 +290,6 @@ contract OnChainProposer is uint256 batchNumber, //risc0 bytes memory risc0BlockProof, - bytes32 risc0ImageId, bytes calldata risc0Journal, //sp1 bytes calldata sp1PublicValues, @@ -311,7 +319,7 @@ contract OnChainProposer is _verifyPublicData(batchNumber, risc0Journal); IRiscZeroVerifier(R0VERIFIER).verify( risc0BlockProof, - risc0ImageId, + RISC0_VERIFICATION_KEY, sha256(risc0Journal) ); } diff --git a/crates/l2/contracts/src/l1/interfaces/IOnChainProposer.sol b/crates/l2/contracts/src/l1/interfaces/IOnChainProposer.sol index 41091c9b831..23db7a72f7b 100644 --- a/crates/l2/contracts/src/l1/interfaces/IOnChainProposer.sol +++ b/crates/l2/contracts/src/l1/interfaces/IOnChainProposer.sol @@ -54,7 +54,6 @@ interface IOnChainProposer { /// @param batchNumber is the number of the batch to be verified. /// ---------------------------------------------------------------------- /// @param risc0BlockProof is the proof of the batch to be verified. - /// @param risc0ImageId Digest of the zkVM imageid. /// @param risc0Journal public_inputs aka journal /// ---------------------------------------------------------------------- /// @param sp1PublicValues Values used to perform the execution @@ -66,7 +65,6 @@ interface IOnChainProposer { uint256 batchNumber, //risc0 bytes memory risc0BlockProof, - bytes32 risc0ImageId, bytes calldata risc0Journal, //sp1 bytes calldata sp1PublicValues, diff --git a/crates/l2/docker-compose-l2.yaml b/crates/l2/docker-compose-l2.yaml index b404e7ddf58..214a69d244b 100644 --- a/crates/l2/docker-compose-l2.yaml +++ b/crates/l2/docker-compose-l2.yaml @@ -19,6 +19,7 @@ services: - ../../test_data/genesis-l2.json:${CI_ETHREX_WORKDIR}/test_data/genesis-l2.json - ../../test_data/private_keys_l1.txt:${CI_ETHREX_WORKDIR}/test_data/private_keys_l1.txt - ./prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk:${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk + - ./prover/zkvm/interface/risc0/out/riscv32im-risc0-vk:${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk environment: - ETHREX_ETH_RPC_URL=http://ethrex_l1:8545 # NOTE: The paths in the env variables must match those @@ -37,6 +38,7 @@ services: - ETHREX_DEPLOYER_SP1_DEPLOY_VERIFIER=${ETHREX_DEPLOYER_SP1_DEPLOY_VERIFIER:-false} - ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=${ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS:-0x00000000000000000000000000000000000000aa} - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk + - ETHREX_RISC0_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk - ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER:-0x00000000000000000000000000000000000000aa} - ETHREX_DEPLOYER_TDX_DEPLOY_VERIFIER=${ETHREX_DEPLOYER_TDX_DEPLOY_VERIFIER:-false} - ETHREX_TDX_DEV_MODE=${ETHREX_TDX_DEV_MODE:-false} diff --git a/crates/l2/prover/zkvm/interface/Cargo.toml b/crates/l2/prover/zkvm/interface/Cargo.toml index b7d506f323c..a9677723a68 100644 --- a/crates/l2/prover/zkvm/interface/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/Cargo.toml @@ -19,6 +19,7 @@ ethrex-l2-common = { path = "../../../common", default-features = false } [build-dependencies] risc0-build = { version = "2.1.2", optional = true } +risc0-zkvm = { version = "2.1.0", optional = true } sp1-build = { version = "5.0.0", optional = true } sp1-sdk = { version = "5.0.0", optional = true } @@ -27,7 +28,7 @@ methods = ["risc0"] [features] default = [] -risc0 = ["dep:risc0-build"] +risc0 = ["dep:risc0-build", "dep:risc0-zkvm"] sp1 = ["dep:sp1-build", "dep:sp1-sdk"] l2 = ["ethrex-vm/l2"] c-kzg = ["ethrex-vm/c-kzg", "ethrex-common/c-kzg"] diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index 5a07265d69c..f371c88c1d2 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -28,10 +28,17 @@ fn build_risc0_program() { .build() .unwrap(); - embed_methods_with_options(std::collections::HashMap::from([( + let built_guests = embed_methods_with_options(std::collections::HashMap::from([( "zkvm-risc0-program", guest_options, )])); + let image_id = built_guests[0].image_id; + + // this errs if the dir already exists, so we don't handle an error. + let _ = std::fs::create_dir("./risc0/out"); + + std::fs::write("./risc0/out/riscv32im-risc0-vk", &image_id.to_string()) + .expect("could not write Risc0 vk to file"); } #[cfg(feature = "sp1")] diff --git a/crates/l2/prover/zkvm/interface/sp1/Cargo.toml b/crates/l2/prover/zkvm/interface/sp1/Cargo.toml index 644bb21e845..38d13a72093 100644 --- a/crates/l2/prover/zkvm/interface/sp1/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/sp1/Cargo.toml @@ -8,7 +8,6 @@ edition = "2024" [dependencies] sp1-zkvm = "5.0.0" zkvm_interface = { path = "../" } -kzg-rs.workspace = true ethrex-common = { path = "../../../../../common", default-features = false } ethrex-storage = { path = "../../../../../storage", default-features = false } From 6fb119c2d0b8b64550e6e7e5c6f2bdcec09b0009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 13:46:33 -0300 Subject: [PATCH 020/236] vk to bytes --- crates/l2/contracts/bin/deployer/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index abd4adfbf11..67eea7c2325 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -349,7 +349,7 @@ fn read_tdx_deployment_address(name: &str) -> Address { Address::from_str(&contents).unwrap_or(Address::zero()) } -fn read_vk(path: &str) -> Result, DeployerError> { +fn read_vk(path: &str) -> Result { let vk_string = read_to_string(path).unwrap_or_else(|_| { warn!( ?path, From 44ce52c6fec6518718f7dde63ad3cb80fe79d06a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 13:48:15 -0300 Subject: [PATCH 021/236] fix --- crates/l2/contracts/bin/deployer/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index 67eea7c2325..020e818df52 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -362,8 +362,8 @@ fn read_vk(path: &str) -> Result { DeployerError::DecodingError(format!( "failed to parse vk ({vk_string}) from hex: {err}" )) - })? - .into() + }) + .map(Bytes::from) } async fn initialize_contracts( From c872f6c348b75a72d372f520a99c24f80dfa2140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 13:53:26 -0300 Subject: [PATCH 022/236] fix initialize calldata --- crates/l2/contracts/bin/deployer/main.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index 020e818df52..ddb0f7dc5e0 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -449,6 +449,7 @@ async fn initialize_contracts( Value::Address(contract_addresses.tdx_verifier_address), Value::Address(contract_addresses.aligned_aggregator_address), Value::FixedBytes(sp1_vk), + Value::FixedBytes(risc0_vk), Value::FixedBytes(genesis.compute_state_root().0.to_vec().into()), Value::Array(vec![ Value::Address(opts.committer_l1_address), From 21b063b27a29fd50ea6fa3597c05228fbde23f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 13:54:31 -0300 Subject: [PATCH 023/236] update verify calldata --- crates/l2/prover/src/backends/risc0.rs | 6 ------ crates/l2/sequencer/l1_proof_sender.rs | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index 143ef65f34e..8d45cf13644 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -63,18 +63,12 @@ pub fn to_batch_proof(proof: Receipt, _aligned_mode: bool) -> Result Result { let seal = encode_seal(&receipt)?; let journal = receipt.journal.bytes; - let image_id = { - let digest: Digest = ZKVM_RISC0_PROGRAM_ID.into(); - let bytes: [u8; 32] = digest.into(); - bytes.to_vec() - }; // bytes calldata seal, // bytes32 imageId, // bytes journal let calldata = vec![ Value::Bytes(seal.into()), - Value::FixedBytes(image_id.into()), Value::Bytes(journal.into()), ]; diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index b1bf85c1092..ff8a9e1d246 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -32,7 +32,7 @@ use aligned_sdk::{ use ethers::signers::{Signer, Wallet}; const VERIFY_FUNCTION_SIGNATURE: &str = - "verifyBatch(uint256,bytes,bytes32,bytes,bytes,bytes,bytes,bytes)"; + "verifyBatch(uint256,bytes,bytes,bytes,bytes,bytes,bytes)"; #[derive(Clone)] pub struct L1ProofSenderState { From 104e94ff740248ffec84500af13046cc80d1e392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 15:37:06 -0300 Subject: [PATCH 024/236] fix patch name --- crates/l2/prover/zkvm/interface/build.rs | 2 +- crates/l2/prover/zkvm/interface/risc0/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index f371c88c1d2..1b366d79130 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -24,7 +24,7 @@ fn build_risc0_program() { .unwrap(); let guest_options = GuestOptionsBuilder::default() .features(features) - .use_docker(docker_options) + //.use_docker(docker_options) .build() .unwrap(); diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml index 1aa6df7dfec..8c673f7aede 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml @@ -20,7 +20,7 @@ ethrex-l2-common = { path = "../../../../common", default-features = false } [patch.crates-io] sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.8-risczero.0" } c-kzg = { git = "https://github.com/risc0/c-kzg-4844", tag = "c-kzg/v1.0.3-risczero.1" } -sp1_bls12_381 = { git = "https://github.com/risc0/zkcrypto-bls12_381", package = "bls12_381", tag = "bls12_381/v0.8.0-risczero.0" } +bls12_381 = { git = "https://github.com/risc0/zkcrypto-bls12_381", tag = "bls12_381/v0.8.0-risczero.0" } # This git repo seems to be private # ed25519-dalek = { git = "https://github.com/risc0/ed25519-dalek", tag = "curve25519-4.1.2-risczero.0" } From 2582303a9a28a7301c3435ab9a6ffbd8232be4f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 15:40:13 -0300 Subject: [PATCH 025/236] remove unstable patch --- crates/l2/prover/zkvm/interface/risc0/Cargo.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml index 8c673f7aede..54e31aa57df 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml @@ -20,8 +20,6 @@ ethrex-l2-common = { path = "../../../../common", default-features = false } [patch.crates-io] sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.8-risczero.0" } c-kzg = { git = "https://github.com/risc0/c-kzg-4844", tag = "c-kzg/v1.0.3-risczero.1" } -bls12_381 = { git = "https://github.com/risc0/zkcrypto-bls12_381", tag = "bls12_381/v0.8.0-risczero.0" } - # This git repo seems to be private # ed25519-dalek = { git = "https://github.com/risc0/ed25519-dalek", tag = "curve25519-4.1.2-risczero.0" } From 0976973ba40520ece26c010a7880971d0f3d15f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 16:09:41 -0300 Subject: [PATCH 026/236] add risc0 job and refactor other backends --- .github/workflows/pr-main_l2_prover.yaml | 45 +++++++++++++++++++----- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/.github/workflows/pr-main_l2_prover.yaml b/.github/workflows/pr-main_l2_prover.yaml index 59aab088b4d..1acca0f48e9 100644 --- a/.github/workflows/pr-main_l2_prover.yaml +++ b/.github/workflows/pr-main_l2_prover.yaml @@ -10,35 +10,62 @@ concurrency: cancel-in-progress: true jobs: - lint: - # "Lint" is a required check, don't change the name - name: Lint + lint_zk: + name: Lint {{ matrix.backend }} backend runs-on: ubuntu-latest strategy: fail-fast: true - # backend: ["sp1", "risc0", "exec"] # TODO: fix Risc0 (https://github.com/lambdaclass/ethrex/issues/2145) + matrix: + backend: ["sp1", "risc0"] steps: - name: Checkout sources uses: actions/checkout@v4 - name: Add Rust Cache uses: Swatinem/rust-cache@v2 + - name: RISC-V Risc0 toolchain install + if: matrix.backend == 'risc0' + # should be able to specify a version for `rzup install rust` (toolchain version) + # but it throws a "error decoding response body" in that case + run: | + curl -L https://risczero.com/install | bash + rzup install cargo-risczero 2.1.0 + rzup install rust - name: RISC-V SP1 toolchain install + if: matrix.backend == 'sp1' run: | curl -L https://sp1.succinct.xyz | bash ~/.sp1/bin/sp1up --version 5.0.0 - - name: Check sp1 + - name: Check ${{ matrix.backend }} backend run: | - cargo check -r -p ethrex-prover -F sp1 - cargo check -r -p ethrex-replay -F sp1 - - name: Clippy sp1 + cargo check -r -p ethrex-prover -F ${{ matrix.backend }} + cargo check -r -p ethrex-replay -F ${{ matrix.backend }} + - name: Clippy ${{ matrix.backend }} backend run: | - cargo clippy -r -p ethrex-prover --all-targets -F sp1 + cargo clippy -r -p ethrex-prover --all-targets -F ${{ matrix.backend }} + + lint_exec: + name: Lint exec backend + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Add Rust Cache + uses: Swatinem/rust-cache@v2 - name: Check exec run: | cargo check -p ethrex-prover - name: Clippy exec run: | cargo clippy -p ethrex-prover --all-targets + + lint_tdx: + name: Lint tdx backend + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Add Rust Cache + uses: Swatinem/rust-cache@v2 - name: Check tdx run: | cd crates/l2/tee/quote-gen From 9282cde034bb9f14c17dfe775144bd0408545e85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 16:37:18 -0300 Subject: [PATCH 027/236] add docs for local risc0 deployment --- docs/l2/prover.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/l2/prover.md b/docs/l2/prover.md index 281e9d1c1d7..7312476b001 100644 --- a/docs/l2/prover.md +++ b/docs/l2/prover.md @@ -142,6 +142,28 @@ Two servers are required: one for the `Prover` and another for the `sequencer`. - `make rm-db-l2 && make down` - `make deploy-l1 && make init-l2` +- If running with a local L1 (for development), you will need to manually deploy the risc0 contracts by following the instructions [here](https://github.com/risc0/risc0-ethereum/tree/main/contracts/script). +- For a local L1 running with ethrex, we do the following: + 1. clone the risc0-ethereum repo + 1. edit the `risc0-ethereum/contracts/script/deployment.toml` file by adding + ```toml + [chains.ethrex] + name = "Ethrex local devnet" + id = 9 + ``` + 1. export env. variables (we are using an ethrex's rich L1 account) + ```bash + export VERIFIER_ESTOP_OWNER="0x4417092b70a3e5f10dc504d0947dd256b965fc62" + export DEPLOYER_PRIVATE_KEY="0x941e103320615d394a55708be13e45994c7d93b932b064dbcb2b511fe3254e2e" + export DEPLOYER_ADDRESS="0x4417092b70a3e5f10dc504d0947dd256b965fc62" + export CHAIN_KEY="ethrex" + export RPC_URL="http://localhost:8545" + ``` + 1. run the deployment script + ```bash + bash contracts/script/manage DeployEstopGroth16Verifier --broadcast + ``` + ## Configuration Configuration is done through environment variables or CLI flags. From 01ad55e4545e07200724178275d9f63118bbe103 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 16:46:47 -0300 Subject: [PATCH 028/236] update replay job to run with risc0 too --- .github/workflows/main_prover_l1.yaml | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main_prover_l1.yaml b/.github/workflows/main_prover_l1.yaml index a49b16df921..d796c0c2768 100644 --- a/.github/workflows/main_prover_l1.yaml +++ b/.github/workflows/main_prover_l1.yaml @@ -1,4 +1,4 @@ -name: RPC Prover (SP1 Backend) +name: Replay proving on: push: branches: ["main"] @@ -9,7 +9,6 @@ concurrency: env: CI_ETHREX_WORKDIR: /usr/local/bin - PROVER: sp1 permissions: # deployments permission to deploy GitHub pages website @@ -19,8 +18,12 @@ permissions: jobs: test: - name: L1 block proving test + name: Prove an L1 block with {{ matrix.backend }} backend runs-on: gpu + strategy: + fail-fast: true + matrix: + backend: ["sp1", "risc0"] steps: - name: Checkout sources uses: actions/checkout@v4 @@ -33,16 +36,24 @@ jobs: with: cache-on-failure: "true" + - name: RISC-V Risc0 toolchain install + if: matrix.backend == 'risc0' + # should be able to specify a version for `rzup install rust` (toolchain version) + # but it throws a "error decoding response body" in that case + run: | + curl -L https://risczero.com/install | bash + rzup install cargo-risczero 2.1.0 + rzup install rust - name: RISC-V SP1 toolchain install + if: matrix.backend == 'sp1' run: | - . "$HOME/.cargo/env" curl -L https://sp1.succinct.xyz | bash ~/.sp1/bin/sp1up --version 5.0.0 - name: Build run: | cd cmd/ethrex_replay - cargo b -r --features "sp1,gpu" + cargo b -r --features "{{ matrix.backend }},gpu" - name: Run env: @@ -52,7 +63,7 @@ jobs: run: | cp test_data/rpc_prover/cache_3990967.json cmd/ethrex_replay cd cmd/ethrex_replay - make prove-sp1-gpu-ci BLOCK_NUMBER=3990967 NETWORK=holesky + make prove-{{ matrix.backend }}-gpu-ci BLOCK_NUMBER=3990967 NETWORK=holesky - name: Store benchmark result uses: benchmark-action/github-action-benchmark@v1 From a580ccc25c4e33d516710649803a2a60b034c345 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 17:01:03 -0300 Subject: [PATCH 029/236] uncomment docker build --- crates/l2/prover/zkvm/interface/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index 1b366d79130..f371c88c1d2 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -24,7 +24,7 @@ fn build_risc0_program() { .unwrap(); let guest_options = GuestOptionsBuilder::default() .features(features) - //.use_docker(docker_options) + .use_docker(docker_options) .build() .unwrap(); From 89ad3d6831e1457549be273b6bea00f4ec02d164 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 17:50:19 -0300 Subject: [PATCH 030/236] risc0 vk as bytes --- crates/l2/prover/zkvm/interface/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index d4df0d9752c..463bbc341b6 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -38,7 +38,7 @@ fn build_risc0_program() { // this errs if the dir already exists, so we don't handle an error. let _ = std::fs::create_dir("./risc0/out"); - std::fs::write("./risc0/out/riscv32im-risc0-vk", &image_id.to_string()) + std::fs::write("./risc0/out/riscv32im-risc0-vk", &image_id) .expect("could not write Risc0 vk to file"); } From 734326885d5a27475daffc9a2569f254a7cd42a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 17:51:25 -0300 Subject: [PATCH 031/236] fix ci --- .github/workflows/main_prover_l1.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main_prover_l1.yaml b/.github/workflows/main_prover_l1.yaml index 10bcc6c208e..7886da898e3 100644 --- a/.github/workflows/main_prover_l1.yaml +++ b/.github/workflows/main_prover_l1.yaml @@ -18,7 +18,7 @@ permissions: jobs: test: - name: Prove an L1 block with {{ matrix.backend }} backend + name: Prove an L1 block with ${{ matrix.backend }} backend runs-on: gpu strategy: fail-fast: true @@ -55,7 +55,7 @@ jobs: - name: Build run: | cd cmd/ethrex_replay - cargo b -r --features "{{ matrix.backend }},gpu" + cargo b -r --features "${{ matrix.backend }},gpu" - name: Run env: @@ -65,7 +65,7 @@ jobs: run: | cp test_data/rpc_prover/cache_3990967.json cmd/ethrex_replay cd cmd/ethrex_replay - make prove-{{ matrix.backend }}-gpu-ci BLOCK_NUMBER=3990967 NETWORK=holesky + make prove-${{ matrix.backend }}-gpu-ci BLOCK_NUMBER=3990967 NETWORK=holesky - name: Store benchmark result uses: benchmark-action/github-action-benchmark@v1 From a6e69eaa9d59f20c6a05beb5eb17ec5a5dc98ba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 17:57:57 -0300 Subject: [PATCH 032/236] remove kzg-rs dep from quote-gen --- crates/l2/tee/quote-gen/Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/l2/tee/quote-gen/Cargo.toml b/crates/l2/tee/quote-gen/Cargo.toml index 9347f329944..c129172204d 100644 --- a/crates/l2/tee/quote-gen/Cargo.toml +++ b/crates/l2/tee/quote-gen/Cargo.toml @@ -11,7 +11,6 @@ hex = "0.4" zerocopy = "0.8" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -kzg-rs.workspace = true ethrex-common = { path = "../../../common", default-features = false } ethrex-storage = { path = "../../../storage", default-features = false } From ca4c6555ec1d88c74e4ab2e8dd6a37d58a1420f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 18:03:55 -0300 Subject: [PATCH 033/236] kzg feature fixes --- crates/common/kzg.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/common/kzg.rs b/crates/common/kzg.rs index 277a97c24c1..b4a3f8cfad2 100644 --- a/crates/common/kzg.rs +++ b/crates/common/kzg.rs @@ -2,6 +2,7 @@ use crate::types::{Blob, Commitment, Proof}; #[derive(thiserror::Error, Debug)] pub enum KzgError { + #[cfg(feature = "c-kzg")] #[error("c-kzg error: {0}")] CKzg(#[from] c_kzg::Error), #[error("kzg-rs error: {0}")] @@ -56,7 +57,7 @@ pub fn verify_kzg_proof( &kzg_rs::Bytes48(commitment_bytes), &kzg_rs::Bytes32(z), &kzg_rs::Bytes32(y), - &kzg_rs::Bytes48(proof), + &kzg_rs::Bytes48(proof_bytes), &kzg_rs::get_kzg_settings(), ) .map_err(KzgError::from) From b9804b4ce816bac73f836d9126858cc74188adbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 18:07:28 -0300 Subject: [PATCH 034/236] ci fixes --- .github/workflows/main_prover_l1.yaml | 1 + .github/workflows/pr-main_l2_prover.yaml | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main_prover_l1.yaml b/.github/workflows/main_prover_l1.yaml index 7886da898e3..a41b26645a9 100644 --- a/.github/workflows/main_prover_l1.yaml +++ b/.github/workflows/main_prover_l1.yaml @@ -44,6 +44,7 @@ jobs: # but it throws a "error decoding response body" in that case run: | curl -L https://risczero.com/install | bash + source "/home/runner/.bashrc" rzup install cargo-risczero 2.1.0 rzup install rust - name: RISC-V SP1 toolchain install diff --git a/.github/workflows/pr-main_l2_prover.yaml b/.github/workflows/pr-main_l2_prover.yaml index 1acca0f48e9..3e7f492deb7 100644 --- a/.github/workflows/pr-main_l2_prover.yaml +++ b/.github/workflows/pr-main_l2_prover.yaml @@ -11,7 +11,7 @@ concurrency: jobs: lint_zk: - name: Lint {{ matrix.backend }} backend + name: Lint ${{ matrix.backend }} backend runs-on: ubuntu-latest strategy: fail-fast: true @@ -28,6 +28,7 @@ jobs: # but it throws a "error decoding response body" in that case run: | curl -L https://risczero.com/install | bash + source "/home/runner/.bashrc" rzup install cargo-risczero 2.1.0 rzup install rust - name: RISC-V SP1 toolchain install From bcd2bb53768fd8ef4ea19ab1bac7f61f5ed71f14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 24 Jun 2025 18:11:13 -0300 Subject: [PATCH 035/236] ci fixes --- .github/workflows/pr-main_l2_prover.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr-main_l2_prover.yaml b/.github/workflows/pr-main_l2_prover.yaml index 3e7f492deb7..cf5e56520e5 100644 --- a/.github/workflows/pr-main_l2_prover.yaml +++ b/.github/workflows/pr-main_l2_prover.yaml @@ -28,9 +28,8 @@ jobs: # but it throws a "error decoding response body" in that case run: | curl -L https://risczero.com/install | bash - source "/home/runner/.bashrc" - rzup install cargo-risczero 2.1.0 - rzup install rust + ~/.risc0/bin/rzup install cargo-risczero 2.1.0 + ~/.risc0/bin/rzup install rust - name: RISC-V SP1 toolchain install if: matrix.backend == 'sp1' run: | From c310ce173364a6dd48a29bd71546b05becf3ca3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 25 Jun 2025 13:39:10 -0300 Subject: [PATCH 036/236] track risc0 cargo lock --- crates/l2/prover/zkvm/.gitignore | 2 +- .../l2/prover/zkvm/interface/risc0/Cargo.lock | 4412 +++++++++++++++++ 2 files changed, 4413 insertions(+), 1 deletion(-) create mode 100644 crates/l2/prover/zkvm/interface/risc0/Cargo.lock diff --git a/crates/l2/prover/zkvm/.gitignore b/crates/l2/prover/zkvm/.gitignore index e23773bdd71..ba09e7866e0 100644 --- a/crates/l2/prover/zkvm/.gitignore +++ b/crates/l2/prover/zkvm/.gitignore @@ -1,4 +1,4 @@ .DS_Store -Cargo.lock target/ interface/sp1/out +interface/risc0/out diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock new file mode 100644 index 00000000000..92c25204e43 --- /dev/null +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock @@ -0,0 +1,4412 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "addchain" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570" +dependencies = [ + "num-bigint 0.3.3", + "num-integer", + "num-traits", +] + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "alloy-consensus" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e32ef5c74bbeb1733c37f4ac7f866f8c8af208b7b4265e21af609dcac5bd5e" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-trie", + "auto_impl", + "c-kzg", + "derive_more 1.0.0", + "serde", +] + +[[package]] +name = "alloy-consensus-any" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa13b7b1e1e3fedc42f0728103bfa3b4d566d3d42b606db449504d88dbdbdcf" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-eip2124" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "675264c957689f0fd75f5993a73123c2cc3b5c235a38f5b9037fe6c826bfb2c0" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "crc", + "thiserror", +] + +[[package]] +name = "alloy-eip2930" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "serde", +] + +[[package]] +name = "alloy-eip7702" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b15b13d38b366d01e818fe8e710d4d702ef7499eacd44926a06171dd9585d0c" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "k256", + "serde", + "thiserror", +] + +[[package]] +name = "alloy-eips" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5591581ca2ab0b3e7226a4047f9a1bfcf431da1d0cce3752fda609fea3c27e37" +dependencies = [ + "alloy-eip2124", + "alloy-eip2930", + "alloy-eip7702", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "auto_impl", + "c-kzg", + "derive_more 1.0.0", + "once_cell", + "serde", + "sha2", +] + +[[package]] +name = "alloy-json-abi" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6beff64ad0aa6ad1019a3db26fef565aefeb011736150ab73ed3366c3cfd1b" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-network-primitives" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a00ce618ae2f78369918be0c20f620336381502c83b6ed62c2f7b2db27698b0" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-primitives" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c77490fe91a0ce933a1f219029521f20fc28c2c0ca95d53fa4da9c00b8d9d4e" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more 2.0.1", + "foldhash", + "hashbrown 0.15.4", + "indexmap 2.9.0", + "itoa", + "k256", + "keccak-asm", + "paste", + "proptest", + "rand 0.8.5", + "ruint", + "rustc-hash", + "serde", + "sha3", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" +dependencies = [ + "alloy-rlp-derive", + "arrayvec", + "bytes", +] + +[[package]] +name = "alloy-rlp-derive" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "alloy-rpc-types-eth" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b4dbee4d82f8a22dde18c28257bed759afeae7ba73da4a1479a039fd1445d04" +dependencies = [ + "alloy-consensus", + "alloy-consensus-any", + "alloy-eips", + "alloy-network-primitives", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-sol-types", + "itertools 0.14.0", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-rpc-types-trace" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd951155515fa452a2ca4b5434d4b3ab742bcd3d1d1b9a91704bcef5b8d2604" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types-eth", + "alloy-serde", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-serde" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8732058f5ca28c1d53d241e8504620b997ef670315d7c8afab856b3e3b80d945" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10ae8e9a91d328ae954c22542415303919aabe976fe7a92eb06db1b68fd59f2" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83ad5da86c127751bc607c174d6c9fe9b85ef0889a9ca0c641735d77d4f98f26" +dependencies = [ + "alloy-sol-macro-input", + "const-hex", + "heck", + "indexmap 2.9.0", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.104", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3d30f0d3f9ba3b7686f3ff1de9ee312647aac705604417a2f40c604f409a9e" +dependencies = [ + "const-hex", + "dunce", + "heck", + "macro-string", + "proc-macro2", + "quote", + "syn 2.0.104", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d162f8524adfdfb0e4bd0505c734c985f3e2474eb022af32eef0d52a4f3935c" +dependencies = [ + "serde", + "winnow", +] + +[[package]] +name = "alloy-sol-types" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d43d5e60466a440230c07761aa67671d4719d46f43be8ea6e7ed334d8db4a9ab" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "const-hex", + "serde", +] + +[[package]] +name = "alloy-trie" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95a94854e420f07e962f7807485856cde359ab99ab6413883e15235ad996e8b" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "arrayvec", + "derive_more 1.0.0", + "nybbles", + "serde", + "smallvec", + "tracing", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.59.0", +] + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "ark-bn254" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" +dependencies = [ + "ark-ec", + "ark-ff 0.5.0", + "ark-r1cs-std", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0c292754729c8a190e50414fd1a37093c786c709899f29c9f7daccecfa855e" +dependencies = [ + "ahash", + "ark-crypto-primitives-macros", + "ark-ec", + "ark-ff 0.5.0", + "ark-relations", + "ark-serialize 0.5.0", + "ark-snark", + "ark-std 0.5.0", + "blake2", + "derivative", + "digest 0.10.7", + "fnv", + "merlin", + "sha2", +] + +[[package]] +name = "ark-crypto-primitives-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e89fe77d1f0f4fe5b96dfc940923d88d17b6a773808124f21e764dfb063c6a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-poly", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.4", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.4.1", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-traits", + "paste", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.104", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "ark-groth16" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88f1d0f3a534bb54188b8dcc104307db6c56cdae574ddc3212aec0625740fc7e" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff 0.5.0", + "ark-poly", + "ark-relations", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.4", +] + +[[package]] +name = "ark-r1cs-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" +dependencies = [ + "ark-ec", + "ark-ff 0.5.0", + "ark-relations", + "ark-std 0.5.0", + "educe", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "tracing", +] + +[[package]] +name = "ark-relations" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" +dependencies = [ + "ark-ff 0.5.0", + "ark-std 0.5.0", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.6", +] + +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-serialize-derive", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "num-bigint 0.4.6", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "ark-snark" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d368e2848c2d4c129ce7679a7d0d2d612b6a274d3ea6a13bad4445d61b381b88" +dependencies = [ + "ark-ff 0.5.0", + "ark-relations", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +dependencies = [ + "serde", +] + +[[package]] +name = "async-trait" +version = "0.1.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "aurora-engine-modexp" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "518bc5745a6264b5fd7b09dffb9667e400ee9e2bbe18555fac75e1fe9afa0df9" +dependencies = [ + "hex", + "num", +] + +[[package]] +name = "auto_impl" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "backtrace" +version = "0.3.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "serde", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "git+https://github.com/lambdaclass/bls12_381?branch=expose-fp-struct#219174187bd78154cec35b0809799fc2c991a579" +dependencies = [ + "digest 0.10.7", + "ff", + "group", + "pairing", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "blst" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fd49896f12ac9b6dcd7a5998466b9b58263a695a3dd1ecc1aaca2e12a90b080" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "borsh" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + +[[package]] +name = "bytemuck" +version = "1.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +dependencies = [ + "serde", +] + +[[package]] +name = "c-kzg" +version = "1.0.3" +source = "git+https://github.com/risc0/c-kzg-4844?tag=c-kzg%2Fv1.0.3-risczero.1#69ecb82af521baba5b57f9ba77348f8200a64dc7" +dependencies = [ + "blst", + "bytemuck", + "cc", + "glob", + "hex", + "libc", + "once_cell", + "serde", +] + +[[package]] +name = "camino" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" + +[[package]] +name = "cc" +version = "1.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-link", +] + +[[package]] +name = "clap" +version = "4.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "clap_lex" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" + +[[package]] +name = "cobs" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "const-hex" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.104", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "datatest-stable" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "833306ca7eec4d95844e65f0d7502db43888c5c1006c6c517e8cf51a27d15431" +dependencies = [ + "camino", + "fancy-regex", + "libtest-mimic", + "walkdir", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl 2.0.1", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "syn 2.0.104", + "unicode-xid", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "enum-ordinalize" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "enumn" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "escape8259" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5692dd7b5a1978a5aeb0ce83b7655c58ca8efdcb79d21036ea249da95afec2c6" + +[[package]] +name = "ethbloom" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c321610643004cf908ec0f5f2aa0d8f1f8e14b540562a2887a1111ff1ecbf7b" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-rlp", + "impl-serde", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ab15ed80916029f878e0267c3a9f92b67df55e79af370bf66199059ae2b4ee3" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-rlp", + "impl-serde", + "primitive-types 0.13.1", + "uint 0.10.0", +] + +[[package]] +name = "ethrex-blockchain" +version = "0.1.0" +dependencies = [ + "bytes", + "cfg-if", + "ethrex-common", + "ethrex-metrics", + "ethrex-rlp", + "ethrex-storage", + "ethrex-vm", + "k256", + "secp256k1", + "sha3", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "ethrex-common" +version = "0.1.0" +dependencies = [ + "bytes", + "c-kzg", + "crc32fast", + "ethereum-types", + "ethrex-rlp", + "ethrex-trie", + "hex", + "k256", + "keccak-hash", + "kzg-rs", + "lazy_static", + "once_cell", + "rayon", + "secp256k1", + "serde", + "serde_json", + "sha3", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "ethrex-l2-common" +version = "0.1.0" +dependencies = [ + "bytes", + "ethereum-types", + "ethrex-common", + "ethrex-rlp", + "ethrex-storage", + "ethrex-trie", + "ethrex-vm", + "keccak-hash", + "lazy_static", + "serde", + "thiserror", +] + +[[package]] +name = "ethrex-levm" +version = "0.1.0" +dependencies = [ + "bls12_381", + "bytes", + "datatest-stable", + "derive_more 1.0.0", + "ethrex-common", + "ethrex-rlp", + "k256", + "keccak-hash", + "lambdaworks-math", + "lazy_static", + "num-bigint 0.4.6", + "p256", + "ripemd", + "secp256k1", + "serde", + "serde_json", + "sha2", + "sha3", + "thiserror", + "walkdir", +] + +[[package]] +name = "ethrex-metrics" +version = "0.1.0" +dependencies = [ + "ethrex-common", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "ethrex-rlp" +version = "0.1.0" +dependencies = [ + "bytes", + "ethereum-types", + "hex", + "lazy_static", + "snap", + "thiserror", + "tinyvec", +] + +[[package]] +name = "ethrex-storage" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bytes", + "ethereum-types", + "ethrex-common", + "ethrex-rlp", + "ethrex-trie", + "hex", + "serde", + "serde_json", + "sha3", + "thiserror", + "tracing", +] + +[[package]] +name = "ethrex-trie" +version = "0.1.0" +dependencies = [ + "anyhow", + "bytes", + "digest 0.10.7", + "ethereum-types", + "ethrex-rlp", + "hex", + "lazy_static", + "serde", + "serde_json", + "sha3", + "smallvec", + "thiserror", + "tracing", +] + +[[package]] +name = "ethrex-vm" +version = "0.1.0" +dependencies = [ + "bincode", + "bytes", + "cfg-if", + "derive_more 1.0.0", + "dyn-clone", + "ethereum-types", + "ethrex-common", + "ethrex-levm", + "ethrex-rlp", + "ethrex-trie", + "hex", + "lazy_static", + "revm", + "revm-inspectors", + "revm-primitives", + "serde", + "sha3", + "thiserror", + "tracing", +] + +[[package]] +name = "fancy-regex" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298" +dependencies = [ + "bit-set", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "bitvec", + "byteorder", + "ff_derive", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff_derive" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f10d12652036b0e99197587c6ba87a8fc3031986499973c030d8b44fcc151b60" +dependencies = [ + "addchain", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +dependencies = [ + "allocator-api2", + "foldhash", + "serde", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-codec" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d40b9d5e17727407e55028eafc22b2dc68781786e6d7eb8a21103f5058e3a14" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-rlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54ed8ad1f3877f7e775b8cbf30ed1bd3209a95401817f19a0eb4402d13f8cf90" +dependencies = [ + "rlp 0.6.1", +] + +[[package]] +name = "impl-serde" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a143eada6a1ec4aefa5049037a26a6d597bfd64f8c026d07b77133e02b7dd0b" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "include_bytes_aligned" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee796ad498c8d9a1d68e477df8f754ed784ef875de1414ebdaf169f70a6a784" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +dependencies = [ + "equivalent", + "hashbrown 0.15.4", + "serde", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "keccak-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + +[[package]] +name = "keccak-hash" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e1b8590eb6148af2ea2d75f38e7d29f5ca970d5a4df456b3ef19b8b415d0264" +dependencies = [ + "primitive-types 0.13.1", + "tiny-keccak", +] + +[[package]] +name = "kzg-rs" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9201effeea3fcc93b587904ae2df9ce97e433184b9d6d299e9ebc9830a546636" +dependencies = [ + "ff", + "hex", + "serde_arrays", + "sha2", + "sp1_bls12_381", + "spin", +] + +[[package]] +name = "lambdaworks-math" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "708d148956bcdc21ae5c432b4e20bbaa26fd68d5376a3a6c461f41095abea0ba" +dependencies = [ + "rayon", + "serde", + "serde_json", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "libc" +version = "0.2.174" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libtest-mimic" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5297962ef19edda4ce33aaa484386e0a5b3d7f2f4e037cbeee00503ef6b29d33" +dependencies = [ + "anstream", + "anstyle", + "clap", + "escape8259", +] + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "macro-string" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "metal" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +dependencies = [ + "bitflags 2.9.1", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", +] + +[[package]] +name = "no_std_strings" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5b0c77c1b780822bc749a33e39aeb2c07584ab93332303babeabb645298a76e" + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint 0.4.6", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "nybbles" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8983bb634df7248924ee0c4c3a749609b5abcb082c28fffe3254b3eb3602b307" +dependencies = [ + "const-hex", + "serde", + "smallvec", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "p3-baby-bear" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7521838ecab2ddf4f7bc4ceebad06ec02414729598485c1ada516c39900820e8" +dependencies = [ + "num-bigint 0.4.6", + "p3-field", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46414daedd796f1eefcdc1811c0484e4bced5729486b6eaba9521c572c76761a" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-field" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48948a0516b349e9d1cdb95e7236a6ee010c44e68c5cc78b4b92bf1c4022a0d9" +dependencies = [ + "itertools 0.12.1", + "num-bigint 0.4.6", + "num-traits", + "p3-util", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-matrix" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4de3f373589477cb735ea58e125898ed20935e03664b4614c7fac258b3c42f" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand 0.8.5", + "serde", + "tracing", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3968ad1160310296eb04f91a5f4edfa38fe1d6b2b8cd6b5c64e6f9b7370979e" + +[[package]] +name = "p3-mds" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2356b1ed0add6d5dfbf7a338ce534a6fde827374394a52cec16a0840af6e97c9" +dependencies = [ + "itertools 0.12.1", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rand 0.8.5", +] + +[[package]] +name = "p3-poseidon2" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da1eec7e1b6900581bedd95e76e1ef4975608dd55be9872c9d257a8a9651c3a" +dependencies = [ + "gcd", + "p3-field", + "p3-mds", + "p3-symmetric", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-symmetric" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb439bea1d822623b41ff4b51e3309e80d13cadf8b86d16ffd5e6efb9fdc360" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "serde", +] + +[[package]] +name = "p3-util" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c2c2010678b9332b563eaa38364915b585c1a94b5ca61e2c7541c087ddda5c" +dependencies = [ + "serde", +] + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group", +] + +[[package]] +name = "parity-scale-codec" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "pest" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "postcard" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "serde", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec 0.6.0", + "uint 0.9.5", +] + +[[package]] +name = "primitive-types" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" +dependencies = [ + "fixed-hash", + "impl-codec 0.7.1", + "impl-rlp", + "impl-serde", + "uint 0.10.0", +] + +[[package]] +name = "proc-macro-crate" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.9.1", + "lazy_static", + "num-traits", + "rand 0.9.1", + "rand_chacha 0.9.0", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "serde", +] + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", +] + +[[package]] +name = "rand_xorshift" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" +dependencies = [ + "rand_core 0.9.3", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "ref-cast" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "revm" +version = "19.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c175ecec83bba464aa8406502fe5bf670491c2ace81a153264891d43bc7fa332" +dependencies = [ + "auto_impl", + "cfg-if", + "dyn-clone", + "revm-interpreter", + "revm-precompile", + "serde", + "serde_json", +] + +[[package]] +name = "revm-inspectors" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d87cdf1c0d878b48423f8a86232950657abaf72a2d0d14af609467542313b1a" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types-eth", + "alloy-rpc-types-trace", + "alloy-sol-types", + "anstyle", + "colorchoice", + "revm", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "revm-interpreter" +version = "15.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcab7ef2064057acfc84731205f4bc77f4ec1b35630800b26ff6a185731c5ab" +dependencies = [ + "revm-primitives", + "serde", +] + +[[package]] +name = "revm-precompile" +version = "16.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99743c3a2cac341084cc15ac74286c4bf34a0941ebf60aa420cfdb9f81f72f9f" +dependencies = [ + "aurora-engine-modexp", + "c-kzg", + "cfg-if", + "k256", + "once_cell", + "revm-primitives", + "ripemd", + "secp256k1", + "sha2", + "substrate-bn", +] + +[[package]] +name = "revm-primitives" +version = "15.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f987564210317706def498421dfba2ae1af64a8edce82c6102758b48133fcb" +dependencies = [ + "alloy-eip2930", + "alloy-eip7702", + "alloy-primitives", + "auto_impl", + "bitflags 2.9.1", + "bitvec", + "c-kzg", + "cfg-if", + "dyn-clone", + "enumn", + "hex", + "serde", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "risc0-binfmt" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4fe7599ac55ad77515608ec42a9727001559fe4f579c533cb7c973b54800c05" +dependencies = [ + "anyhow", + "borsh", + "derive_more 2.0.1", + "elf", + "lazy_static", + "postcard", + "risc0-zkp", + "risc0-zkvm-platform", + "semver 1.0.26", + "serde", + "tracing", +] + +[[package]] +name = "risc0-circuit-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d339c65b0e011677404bd6bdfe1b0f29748187a568fb2f74df7fb650590181a" +dependencies = [ + "anyhow", + "bytemuck", + "paste", + "risc0-binfmt", + "risc0-circuit-recursion", + "risc0-core", + "risc0-zkp", + "tracing", +] + +[[package]] +name = "risc0-circuit-recursion" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6501fd3936aea2dd3e55915f34328fe96e6ca25ef00320242f837ae668785b" +dependencies = [ + "anyhow", + "bytemuck", + "hex", + "metal", + "risc0-core", + "risc0-zkp", + "tracing", +] + +[[package]] +name = "risc0-circuit-rv32im" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c80e0a8f0f56106295bb682dbc27093438e163a5f6384a79e877ab895a11d9ae" +dependencies = [ + "anyhow", + "bit-vec", + "bytemuck", + "derive_more 2.0.1", + "paste", + "risc0-binfmt", + "risc0-core", + "risc0-zkp", + "serde", + "tracing", +] + +[[package]] +name = "risc0-core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317bbf70a8750b64d4fd7a2bdc9d7d5f30d8bb305cae486962c797ef35c8d08e" +dependencies = [ + "bytemuck", + "bytemuck_derive", + "rand_core 0.6.4", +] + +[[package]] +name = "risc0-groth16" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b31cb7b2a46f0cdaf71803ea7e0389af9f5bc1aea2531106f2972b241f26e98" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-ec", + "ark-groth16", + "ark-serialize 0.5.0", + "bytemuck", + "hex", + "num-bigint 0.4.6", + "num-traits", + "risc0-binfmt", + "risc0-zkp", + "serde", + "stability", +] + +[[package]] +name = "risc0-zkos-v1compat" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f76c479b69d1987cb54ac72dcc017197296fdcd6daf78fafc10cbbd3a167a7de" +dependencies = [ + "include_bytes_aligned", + "no_std_strings", +] + +[[package]] +name = "risc0-zkp" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa210a232361fd671b30918469856b64d715f2564956d0a5df97ab6cb116d28b" +dependencies = [ + "anyhow", + "blake2", + "borsh", + "bytemuck", + "cfg-if", + "digest 0.10.7", + "hex", + "hex-literal", + "metal", + "paste", + "rand_core 0.6.4", + "risc0-core", + "risc0-zkvm-platform", + "serde", + "sha2", + "stability", + "tracing", +] + +[[package]] +name = "risc0-zkvm" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f1014d2efcb3b359aff878c9aeb6aa949a6d91f091a2ffb5ffd8d928a1ab7f3" +dependencies = [ + "anyhow", + "borsh", + "bytemuck", + "derive_more 2.0.1", + "getrandom 0.2.16", + "hex", + "risc0-binfmt", + "risc0-circuit-keccak", + "risc0-circuit-recursion", + "risc0-circuit-rv32im", + "risc0-core", + "risc0-groth16", + "risc0-zkos-v1compat", + "risc0-zkp", + "risc0-zkvm-platform", + "rrs-lib", + "semver 1.0.26", + "serde", + "sha2", + "stability", + "tracing", +] + +[[package]] +name = "risc0-zkvm-platform" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e4de2938eaf24892ef927d9cef6e4acb6a19ce01c017cd498533896f633f332" +dependencies = [ + "bytemuck", + "cfg-if", + "getrandom 0.2.16", + "getrandom 0.3.3", + "libm", + "stability", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + +[[package]] +name = "rlp" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa24e92bb2a83198bb76d661a71df9f7076b8c420b8696e4d3d97d50d94479e3" +dependencies = [ + "bytes", + "rustc-hex", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4382d3af3a4ebdae7f64ba6edd9114fff92c89808004c4943b393377a25d001" +dependencies = [ + "downcast-rs", + "paste", +] + +[[package]] +name = "ruint" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11256b5fe8c68f56ac6f39ef0720e592f33d2367a4782740d9c9142e889c7fb4" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types 0.12.2", + "proptest", + "rand 0.8.5", + "rand 0.9.1", + "rlp 0.5.2", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + +[[package]] +name = "rustc-demangle" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.26", +] + +[[package]] +name = "rustix" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +dependencies = [ + "bitflags 2.9.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" +dependencies = [ + "rand 0.8.5", + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_arrays" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94a16b99c5ea4fe3daccd14853ad260ec00ea043b2708d1fd1da3106dcd8d9df" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "indexmap 2.9.0", + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf65a400f8f66fb7b0552869ad70157166676db75ed8181f8104ea91cf9d0b42" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.9.0", + "schemars", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81679d9ed988d5e9a5e6531dc3f2c28efbd639cbd1dfb628df08edea6004da77" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "git+https://github.com/risc0/RustCrypto-hashes?tag=sha2-v0.10.8-risczero.0#244dc3b08788f7a4ccce14c66896ae3b4f24c166" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sha3-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +dependencies = [ + "cc", + "cfg-if", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +dependencies = [ + "serde", +] + +[[package]] +name = "snap" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" + +[[package]] +name = "sp1-lib" +version = "5.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0fd8bc101e5603ccf2dc1836ea06410f25ce2298755b2dac626add9be2424b4" +dependencies = [ + "bincode", + "serde", + "sp1-primitives", +] + +[[package]] +name = "sp1-primitives" +version = "5.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "699935774a5131c1a8b371108d0666c0c80c43611045fb77fae43f2f242676d5" +dependencies = [ + "bincode", + "blake3", + "cfg-if", + "hex", + "lazy_static", + "num-bigint 0.4.6", + "p3-baby-bear", + "p3-field", + "p3-poseidon2", + "p3-symmetric", + "serde", + "sha2", +] + +[[package]] +name = "sp1_bls12_381" +version = "0.8.0-sp1-5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac255e1704ebcdeec5e02f6a0ebc4d2e9e6b802161938330b6810c13a610c583" +dependencies = [ + "cfg-if", + "ff", + "group", + "pairing", + "rand_core 0.6.4", + "sp1-lib", + "subtle", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stability" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" +dependencies = [ + "quote", + "syn 2.0.104", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "substrate-bn" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b5bbfa79abbae15dd642ea8176a21a635ff3c00059961d1ea27ad04e5b441c" +dependencies = [ + "byteorder", + "crunchy", + "lazy_static", + "rand 0.8.5", + "rustc-hex", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn-solidity" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4560533fbd6914b94a8fb5cc803ed6801c3455668db3b810702c57612bac9412" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +dependencies = [ + "fastrand", + "getrandom 0.3.3", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "time" +version = "0.3.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" + +[[package]] +name = "time-macros" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinyvec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" + +[[package]] +name = "tokio" +version = "1.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +dependencies = [ + "backtrace", + "pin-project-lite", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap 2.9.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "tracing-core", +] + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "uint" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.104", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + +[[package]] +name = "winnow" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "zkvm-risc0-program" +version = "0.1.0" +dependencies = [ + "ethrex-blockchain", + "ethrex-common", + "ethrex-l2-common", + "ethrex-rlp", + "ethrex-storage", + "ethrex-vm", + "risc0-zkvm", + "risc0-zkvm-platform", + "zkvm_interface", +] + +[[package]] +name = "zkvm_interface" +version = "0.1.0" +dependencies = [ + "ethrex-blockchain", + "ethrex-common", + "ethrex-l2-common", + "ethrex-rlp", + "ethrex-storage", + "ethrex-trie", + "ethrex-vm", + "serde", + "serde_json", + "serde_with", + "thiserror", +] From fde81e8710d8725fd4c26367fff617e9db990a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 25 Jun 2025 17:35:26 -0300 Subject: [PATCH 037/236] fix risc0 lint --- cmd/ethrex_replay/src/cli.rs | 6 ++---- cmd/ethrex_replay/src/run.rs | 9 +++------ 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/cmd/ethrex_replay/src/cli.rs b/cmd/ethrex_replay/src/cli.rs index 4cc8e490e27..b62028d4dfb 100644 --- a/cmd/ethrex_replay/src/cli.rs +++ b/cmd/ethrex_replay/src/cli.rs @@ -189,8 +189,7 @@ impl SubcommandProve { let res = prove(cache).await?; Ok((gas_used, res)) }; - let res = run_and_measure(bench, body).await?; - println!("{res}"); + run_and_measure(bench, body).await?; } SubcommandProve::BlockRange { start, @@ -211,8 +210,7 @@ impl SubcommandProve { let res = prove(cache).await?; Ok((gas_used, res)) }; - let res = run_and_measure(bench, body).await?; - println!("{res}"); + run_and_measure(bench, body).await?; } } Ok(()) diff --git a/cmd/ethrex_replay/src/run.rs b/cmd/ethrex_replay/src/run.rs index 9469bc9f7fc..94a74dccac9 100644 --- a/cmd/ethrex_replay/src/run.rs +++ b/cmd/ethrex_replay/src/run.rs @@ -29,12 +29,12 @@ pub async fn exec(cache: Cache) -> eyre::Result<()> { Ok(()) } -pub async fn prove(cache: Cache) -> eyre::Result { +pub async fn prove(cache: Cache) -> eyre::Result<()> { let Cache { blocks, witness: db, } = cache; - let out = ethrex_prover_lib::prove( + ethrex_prover_lib::prove( ProgramInput { blocks, db, @@ -52,10 +52,7 @@ pub async fn prove(cache: Cache) -> eyre::Result { false, ) .map_err(|e| eyre::Error::msg(e.to_string()))?; - #[cfg(any(feature = "sp1", feature = "risc0"))] - return Ok(format!("{out:#?}")); - #[cfg(not(all(feature = "sp1", feature = "risc0")))] - Ok(serde_json::to_string(&out.0)?) + Ok(()) } pub async fn run_tx(cache: Cache, tx_id: &str) -> eyre::Result<(Receipt, Vec)> { From e472fa1eb1a1b8e330827b8bb342789c11bcce75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 26 Jun 2025 11:23:31 -0300 Subject: [PATCH 038/236] clippy --- cmd/ethrex_replay/src/bench.rs | 12 ++++++------ cmd/ethrex_replay/src/cli.rs | 32 ++++++++++++++++---------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/cmd/ethrex_replay/src/bench.rs b/cmd/ethrex_replay/src/bench.rs index 0dfe8ab9e0e..69352638339 100644 --- a/cmd/ethrex_replay/src/bench.rs +++ b/cmd/ethrex_replay/src/bench.rs @@ -29,15 +29,15 @@ pub fn write_benchmark_file(gas_used: f64, elapsed: f64) { serde_json::to_writer(file, benchmark_json).expect("failed to write to bench_latest.json"); } -pub async fn run_and_measure(write_to_file: bool, future: Ft) -> eyre::Result -where - Ft: std::future::Future>, -{ +pub async fn run_and_measure( + run: impl Future>, + write_to_file: bool, +) -> eyre::Result<()> { let now = std::time::Instant::now(); - let (gas_used, ret) = future.await?; + let gas_used = run.await?; let elapsed = now.elapsed().as_secs(); if write_to_file { write_benchmark_file(gas_used, elapsed as f64); } - Ok(ret) + Ok(()) } diff --git a/cmd/ethrex_replay/src/cli.rs b/cmd/ethrex_replay/src/cli.rs index b62028d4dfb..1306f014ed3 100644 --- a/cmd/ethrex_replay/src/cli.rs +++ b/cmd/ethrex_replay/src/cli.rs @@ -85,12 +85,12 @@ impl SubcommandExecute { let chain_config = get_chain_config(&network)?; let block = or_latest(block, &rpc_url).await?; let cache = get_blockdata(&rpc_url, chain_config, block).await?; - let body = async { + let future = async { let gas_used = cache.blocks[0].header.gas_used as f64; exec(cache).await?; - Ok((gas_used, ())) + Ok(gas_used) }; - run_and_measure(bench, body).await?; + run_and_measure(future, bench).await?; } SubcommandExecute::BlockRange { start, @@ -106,12 +106,12 @@ impl SubcommandExecute { } let chain_config = get_chain_config(&network)?; let cache = get_rangedata(&rpc_url, chain_config, start, end).await?; - let body = async { - let gas_used = cache.blocks.iter().map(|b| b.header.gas_used as f64).sum(); + let future = async { + let gas_used = cache.blocks[0].header.gas_used as f64; exec(cache).await?; - Ok((gas_used, ())) + Ok(gas_used) }; - run_and_measure(bench, body).await?; + run_and_measure(future, bench).await?; } SubcommandExecute::Transaction { tx, @@ -184,12 +184,12 @@ impl SubcommandProve { let chain_config = get_chain_config(&network)?; let block = or_latest(block, &rpc_url).await?; let cache = get_blockdata(&rpc_url, chain_config, block).await?; - let body = async { + let future = async { let gas_used = cache.blocks[0].header.gas_used as f64; - let res = prove(cache).await?; - Ok((gas_used, res)) + prove(cache).await?; + Ok(gas_used) }; - run_and_measure(bench, body).await?; + run_and_measure(future, bench).await?; } SubcommandProve::BlockRange { start, @@ -205,12 +205,12 @@ impl SubcommandProve { } let chain_config = get_chain_config(&network)?; let cache = get_rangedata(&rpc_url, chain_config, start, end).await?; - let body = async { - let gas_used = cache.blocks.iter().map(|b| b.header.gas_used as f64).sum(); - let res = prove(cache).await?; - Ok((gas_used, res)) + let future = async { + let gas_used = cache.blocks[0].header.gas_used as f64; + prove(cache).await?; + Ok(gas_used) }; - run_and_measure(bench, body).await?; + run_and_measure(future, bench).await?; } } Ok(()) From a719a41d61893a4e7c58f029403e86034aad004f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 26 Jun 2025 18:35:02 -0300 Subject: [PATCH 039/236] update cargo.lock --- .../l2/prover/zkvm/interface/risc0/Cargo.lock | 96 ++++++++++++++++--- 1 file changed, 85 insertions(+), 11 deletions(-) diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock index 92c25204e43..4cd62d3d553 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock @@ -180,7 +180,7 @@ dependencies = [ "derive_more 2.0.1", "foldhash", "hashbrown 0.15.4", - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa", "k256", "keccak-asm", @@ -284,7 +284,7 @@ dependencies = [ "alloy-sol-macro-input", "const-hex", "heck", - "indexmap 2.9.0", + "indexmap 2.10.0", "proc-macro-error2", "proc-macro2", "quote", @@ -1124,9 +1124,12 @@ checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "cobs" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror", +] [[package]] name = "colorchoice" @@ -1629,6 +1632,7 @@ dependencies = [ "sha3", "thiserror", "tokio", + "tokio-util", "tracing", ] @@ -1912,6 +1916,49 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + [[package]] name = "gcd" version = "2.3.0" @@ -2133,9 +2180,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", "hashbrown 0.15.4", @@ -2716,6 +2763,12 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pkcs8" version = "0.10.2" @@ -2728,9 +2781,9 @@ dependencies = [ [[package]] name = "postcard" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" +checksum = "6c1de96e20f51df24ca73cafcc4690e044854d803259db27a00a461cb3b9d17a" dependencies = [ "cobs", "embedded-io 0.4.0", @@ -3529,7 +3582,7 @@ version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa", "memchr", "ryu", @@ -3546,7 +3599,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.9.0", + "indexmap 2.10.0", "schemars", "serde", "serde_derive", @@ -3613,6 +3666,12 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "slab" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" + [[package]] name = "smallvec" version = "1.15.1" @@ -3869,6 +3928,21 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "tokio-util" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "futures-util", + "hashbrown 0.15.4", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml_datetime" version = "0.6.11" @@ -3881,7 +3955,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "toml_datetime", "winnow", ] From ce96b94f93766dabb9bd2bd9e8fc72eef00ae43b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 30 Jun 2025 12:17:13 -0300 Subject: [PATCH 040/236] add jsonprograminput --- docs/l2/prover.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/l2/prover.md b/docs/l2/prover.md index 7312476b001..80c7efc57b9 100644 --- a/docs/l2/prover.md +++ b/docs/l2/prover.md @@ -159,10 +159,13 @@ Two servers are required: one for the `Prover` and another for the `sequencer`. export CHAIN_KEY="ethrex" export RPC_URL="http://localhost:8545" ``` + 1. cd into `risc0-ethereum/` 1. run the deployment script ```bash bash contracts/script/manage DeployEstopGroth16Verifier --broadcast ``` + 1. if the deployment was successful you should see the contract address in the output of the command, you will need to pass this as an argument to the L2 contract deployer, or via the `ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER=
` env. variable. + if you get an error like `risc0-ethereum/contracts/../lib/forge-std/src/Script.sol": No such file or directory (os error 2)`, try to update the git submodules (foundry dependencies) with `git submodule update --init --recursive`. ## Configuration From 55a7f9e8a6f708a0d29c6d5dcb1dfc626a8b226d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 30 Jun 2025 13:54:52 -0300 Subject: [PATCH 041/236] fix empty risc0 calldata --- crates/l2/common/src/prover.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index 6dfd8a54d73..d448850b33c 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -46,7 +46,6 @@ impl ProverType { ProverType::RISC0 => { vec![ Value::Bytes(vec![].into()), - Value::FixedBytes(H256::zero().to_fixed_bytes().to_vec().into()), Value::Bytes(vec![].into()), ] } From a5b6b134e0314113b6c7fde75337a75b63218550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 30 Jun 2025 14:37:51 -0300 Subject: [PATCH 042/236] clippy --- crates/l2/common/src/prover.rs | 6 +----- crates/l2/prover/src/backends/risc0.rs | 8 +++++--- crates/l2/prover/zkvm/interface/build.rs | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index d448850b33c..3c92e7c3e88 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -1,4 +1,3 @@ -use ethrex_common::H256; use serde::{Deserialize, Serialize}; use std::fmt::{Debug, Display}; @@ -44,10 +43,7 @@ impl ProverType { pub fn empty_calldata(&self) -> Vec { match self { ProverType::RISC0 => { - vec![ - Value::Bytes(vec![].into()), - Value::Bytes(vec![].into()), - ] + vec![Value::Bytes(vec![].into()), Value::Bytes(vec![].into())] } ProverType::SP1 => { vec![Value::Bytes(vec![].into()), Value::Bytes(vec![].into())] diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index a4577f1f3cc..d1409f47a24 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -1,8 +1,10 @@ -use ethrex_l2::utils::prover::proving_systems::{BatchProof, ProofCalldata, ProverType}; -use ethrex_l2_sdk::calldata::Value; +use ethrex_l2_common::{ + calldata::Value, + prover::{BatchProof, ProofBytes, ProofCalldata, ProverType}, +}; use risc0_zkp::verify::VerificationError; use risc0_zkvm::{ - Digest, ExecutorEnv, InnerReceipt, ProverOpts, Receipt, default_executor, default_prover, + ExecutorEnv, InnerReceipt, ProverOpts, Receipt, default_executor, default_prover, serde::Error as Risc0SerdeError, }; use tracing::info; diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index 463bbc341b6..b873a16eb16 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -38,7 +38,7 @@ fn build_risc0_program() { // this errs if the dir already exists, so we don't handle an error. let _ = std::fs::create_dir("./risc0/out"); - std::fs::write("./risc0/out/riscv32im-risc0-vk", &image_id) + std::fs::write("./risc0/out/riscv32im-risc0-vk", image_id) .expect("could not write Risc0 vk to file"); } From 970568fb13ed42b17c2a462a40535fb778f21bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 30 Jun 2025 15:09:40 -0300 Subject: [PATCH 043/236] clippy risc0 --- crates/l2/prover/src/backends/risc0.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index d1409f47a24..e1cf4b03745 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -1,6 +1,6 @@ use ethrex_l2_common::{ calldata::Value, - prover::{BatchProof, ProofBytes, ProofCalldata, ProverType}, + prover::{BatchProof, ProofCalldata, ProverType}, }; use risc0_zkp::verify::VerificationError; use risc0_zkvm::{ @@ -17,6 +17,8 @@ use zkvm_interface::{ pub enum Error { #[error("can only encode groth16 seals")] EncodeNonGroth16Seal, + #[error("failed to get seal selector")] + NoSealSelector, #[error("verification failed: {0}")] VerificationFailed(#[from] VerificationError), #[error("decode failed: {0}")] @@ -84,7 +86,11 @@ fn encode_seal(receipt: &Receipt) -> Result, Error> { let InnerReceipt::Groth16(receipt) = receipt.inner.clone() else { return Err(Error::EncodeNonGroth16Seal); }; - let selector = &receipt.verifier_parameters.as_bytes()[..4]; + let selector = &receipt + .verifier_parameters + .as_bytes() + .get(..4) + .ok_or(Error::NoSealSelector)?; // Create a new vector with the capacity to hold both selector and seal let mut selector_seal = Vec::with_capacity(selector.len() + receipt.seal.len()); selector_seal.extend_from_slice(selector); From 1fc09e18ba14c9706104dc2bb36e250c2451fccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 30 Jun 2025 16:05:33 -0300 Subject: [PATCH 044/236] check cargo lock for all backends --- .github/workflows/pr-main_l2_prover.yaml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pr-main_l2_prover.yaml b/.github/workflows/pr-main_l2_prover.yaml index 2d88a8065be..0db2a0df30a 100644 --- a/.github/workflows/pr-main_l2_prover.yaml +++ b/.github/workflows/pr-main_l2_prover.yaml @@ -22,7 +22,7 @@ jobs: uses: actions/checkout@v4 - name: Add Rust Cache uses: Swatinem/rust-cache@v2 - + - name: RISC-V Risc0 toolchain install if: matrix.backend == 'risc0' # should be able to specify a version for `rzup install rust` (toolchain version) @@ -31,13 +31,13 @@ jobs: curl -L https://risczero.com/install | bash ~/.risc0/bin/rzup install cargo-risczero 2.1.0 ~/.risc0/bin/rzup install rust - + - name: RISC-V SP1 toolchain install if: matrix.backend == 'sp1' run: | curl -L https://sp1.succinct.xyz | bash ~/.sp1/bin/sp1up --version 5.0.0 - + - name: Check ${{ matrix.backend }} backend run: | cargo check -r -p ethrex-prover -F ${{ matrix.backend }} @@ -45,11 +45,10 @@ jobs: - name: Clippy ${{ matrix.backend }} backend run: | cargo clippy -r -p ethrex-prover --all-targets -F ${{ matrix.backend }} - - - name: Check sp1 cargo.lock modified but not committed - if: matrix.backend == 'sp1' + + - name: Check ${{ matrix.backend }} Cargo.lock modified but not committed run: | - git diff --exit-code -- crates/l2/prover/zkvm/interface/sp1/Cargo.lock + git diff --exit-code -- crates/l2/prover/zkvm/interface/${{ matrix.backend }}/Cargo.lock lint_exec: name: Lint exec backend @@ -75,7 +74,7 @@ jobs: uses: actions/checkout@v4 - name: Add Rust Cache uses: Swatinem/rust-cache@v2 - + - name: Check tdx run: | cd crates/l2/tee/quote-gen From d1ff54fd526adecc808160abfd5631a2ad8f5070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 30 Jun 2025 16:08:30 -0300 Subject: [PATCH 045/236] doc dummy vars --- docs/l2/prover.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/l2/prover.md b/docs/l2/prover.md index 80c7efc57b9..b17f74801fa 100644 --- a/docs/l2/prover.md +++ b/docs/l2/prover.md @@ -140,7 +140,7 @@ Two servers are required: one for the `Prover` and another for the `sequencer`. - `Finally`, to start the `proposer`/`l2 node`, run: - `make rm-db-l2 && make down` - - `make deploy-l1 && make init-l2` + - `make deploy-l1 && make init-l2` (if running a risc0 prover, see the next step before invoking the L1 contract deployer) - If running with a local L1 (for development), you will need to manually deploy the risc0 contracts by following the instructions [here](https://github.com/risc0/risc0-ethereum/tree/main/contracts/script). - For a local L1 running with ethrex, we do the following: @@ -158,7 +158,11 @@ Two servers are required: one for the `Prover` and another for the `sequencer`. export DEPLOYER_ADDRESS="0x4417092b70a3e5f10dc504d0947dd256b965fc62" export CHAIN_KEY="ethrex" export RPC_URL="http://localhost:8545" + + export ETHERSCAN_URL="dummy" + export ETHERSCAN_API_KEY="dummy" ``` + the last two variables need to be defined with some value even if not used, else the deployment script fails. 1. cd into `risc0-ethereum/` 1. run the deployment script ```bash From 2ac3522d633cb068ead598791b93d5b3420b6a07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 30 Jun 2025 16:09:05 -0300 Subject: [PATCH 046/236] deployment.toml fix --- docs/l2/prover.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/l2/prover.md b/docs/l2/prover.md index b17f74801fa..fe6787ad0b2 100644 --- a/docs/l2/prover.md +++ b/docs/l2/prover.md @@ -145,7 +145,7 @@ Two servers are required: one for the `Prover` and another for the `sequencer`. - If running with a local L1 (for development), you will need to manually deploy the risc0 contracts by following the instructions [here](https://github.com/risc0/risc0-ethereum/tree/main/contracts/script). - For a local L1 running with ethrex, we do the following: 1. clone the risc0-ethereum repo - 1. edit the `risc0-ethereum/contracts/script/deployment.toml` file by adding + 1. edit the `risc0-ethereum/contracts/deployment.toml` file by adding ```toml [chains.ethrex] name = "Ethrex local devnet" From d7a8066cba17b57c9efdc5cc600cbd58e65e0fa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 30 Jun 2025 16:10:56 -0300 Subject: [PATCH 047/236] remove risc0 vk check --- crates/l2/contracts/src/l1/OnChainProposer.sol | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 3991e64cc33..655e0540bb8 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -145,13 +145,8 @@ contract OnChainProposer is ); TDXVERIFIER = tdxverifier; - // Set the SP1 program verification key + // Set verification keys (or image id in risc0's case) SP1_VERIFICATION_KEY = sp1Vk; - // Set the Risc0 program verification key - require( - RISC0_VERIFICATION_KEY == bytes32(0), - "OnChainProposer: contract already initialized" - ); RISC0_VERIFICATION_KEY = risc0Vk; batchCommitments[0] = BatchCommitmentInfo( From 02351134c7edc35fa2e551fbdefb5e0ef4c4a070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 30 Jun 2025 16:13:50 -0300 Subject: [PATCH 048/236] do not fail fast lint job --- .github/workflows/pr-main_l2_prover.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pr-main_l2_prover.yaml b/.github/workflows/pr-main_l2_prover.yaml index 0db2a0df30a..76740fb0a46 100644 --- a/.github/workflows/pr-main_l2_prover.yaml +++ b/.github/workflows/pr-main_l2_prover.yaml @@ -14,7 +14,6 @@ jobs: name: Lint ${{ matrix.backend }} backend runs-on: ubuntu-latest strategy: - fail-fast: true matrix: backend: ["sp1", "risc0"] steps: From 0ff5a593113cb75b1c9a030cc70beb414897433b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 30 Jun 2025 16:39:13 -0300 Subject: [PATCH 049/236] update sp1 cargo.lcok --- .../l2/prover/zkvm/interface/sp1/Cargo.lock | 114 ++++++++++-------- 1 file changed, 62 insertions(+), 52 deletions(-) diff --git a/crates/l2/prover/zkvm/interface/sp1/Cargo.lock b/crates/l2/prover/zkvm/interface/sp1/Cargo.lock index 021ee9c5c09..d0d2aeb9ba9 100644 --- a/crates/l2/prover/zkvm/interface/sp1/Cargo.lock +++ b/crates/l2/prover/zkvm/interface/sp1/Cargo.lock @@ -162,7 +162,7 @@ dependencies = [ "derive_more 2.0.1", "foldhash", "hashbrown 0.15.4", - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "keccak-asm", @@ -195,7 +195,7 @@ checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -254,7 +254,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -266,11 +266,11 @@ dependencies = [ "alloy-sol-macro-input", "const-hex", "heck", - "indexmap 2.9.0", + "indexmap 2.10.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", "syn-solidity", "tiny-keccak", ] @@ -287,7 +287,7 @@ dependencies = [ "macro-string", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", "syn-solidity", ] @@ -548,7 +548,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -569,7 +569,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -706,9 +706,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.18.1" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "byte-slice-cast" @@ -733,7 +733,7 @@ checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -831,7 +831,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -966,9 +966,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" @@ -1012,7 +1012,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -1023,7 +1023,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -1097,7 +1097,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", "unicode-xid", ] @@ -1109,7 +1109,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", "unicode-xid", ] @@ -1208,7 +1208,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -1292,6 +1292,7 @@ dependencies = [ "hex", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "keccak-hash", + "kzg-rs", "lazy_static", "once_cell", "rayon", @@ -1333,7 +1334,6 @@ dependencies = [ "ethrex-rlp", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "keccak-hash", - "kzg-rs", "lambdaworks-math", "lazy_static", "num-bigint 0.4.6", @@ -1546,7 +1546,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -1767,7 +1767,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -1783,9 +1783,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", "hashbrown 0.15.4", @@ -1977,7 +1977,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -2287,7 +2287,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -2413,7 +2413,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -2578,7 +2578,7 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -2854,6 +2854,18 @@ dependencies = [ "serde_json", ] +[[package]] +name = "schemars" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1375ba8ef45a6f15d83fa8748f1079428295d403d6ea991d09ab100155fbc06d" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "sec1" version = "0.7.3" @@ -2937,7 +2949,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -2946,7 +2958,7 @@ version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa", "memchr", "ryu", @@ -2955,16 +2967,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf65a400f8f66fb7b0552869ad70157166676db75ed8181f8104ea91cf9d0b42" +checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.9.0", - "schemars", + "indexmap 2.10.0", + "schemars 0.9.0", + "schemars 1.0.3", "serde", "serde_derive", "serde_json", @@ -2974,14 +2987,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81679d9ed988d5e9a5e6531dc3f2c28efbd639cbd1dfb628df08edea6004da77" +checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -3176,9 +3189,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.103" +version = "2.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ "proc-macro2", "quote", @@ -3194,7 +3207,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -3233,7 +3246,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -3328,7 +3341,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "toml_datetime", "winnow", ] @@ -3353,7 +3366,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -3499,7 +3512,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", "wasm-bindgen-shared", ] @@ -3521,7 +3534,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3565,7 +3578,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -3576,7 +3589,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -3793,7 +3806,7 @@ checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -3813,7 +3826,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.104", ] [[package]] @@ -3826,7 +3839,6 @@ dependencies = [ "ethrex-rlp", "ethrex-storage", "ethrex-vm", - "kzg-rs", "sp1-zkvm", "zkvm_interface", ] @@ -3842,8 +3854,6 @@ dependencies = [ "ethrex-storage", "ethrex-trie", "ethrex-vm", - "keccak-hash", - "kzg-rs", "serde", "serde_json", "serde_with", From c6e739baa32c5e8488b7143fff4e8575bd814bf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 1 Jul 2025 18:25:16 -0300 Subject: [PATCH 050/236] WIP --- Cargo.lock | 1 + Cargo.toml | 1 + cmd/ethrex/l2/options.rs | 19 +++++- crates/l2/Cargo.toml | 2 +- crates/l2/common/Cargo.toml | 1 + crates/l2/common/src/prover.rs | 44 ++++++++---- crates/l2/prover/src/backends/risc0.rs | 21 ++++-- crates/l2/sequencer/configs.rs | 2 +- crates/l2/sequencer/errors.rs | 9 ++- crates/l2/sequencer/l1_proof_sender.rs | 95 +++++++++++++++++--------- crates/l2/sequencer/mod.rs | 7 -- 11 files changed, 137 insertions(+), 65 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 605cafa376a..b60e32377d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3814,6 +3814,7 @@ dependencies = [ name = "ethrex-l2-common" version = "0.1.0" dependencies = [ + "aligned-sdk", "bytes", "ethereum-types 0.15.1", "ethrex-common", diff --git a/Cargo.toml b/Cargo.toml index 4469d8cb48c..2a9342965c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -95,6 +95,7 @@ eyre = "0.6.12" kzg-rs = "0.2.6" libsql = "0.9.10" futures = "0.3.31" +aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag = "v0.16.1" } [patch.crates-io] secp256k1 = { git = "https://github.com/sp1-patches/rust-secp256k1", tag = "patch-0.29.1-sp1-5.0.0" } diff --git a/cmd/ethrex/l2/options.rs b/cmd/ethrex/l2/options.rs index 49bf7001901..3cde6460c82 100644 --- a/cmd/ethrex/l2/options.rs +++ b/cmd/ethrex/l2/options.rs @@ -152,7 +152,7 @@ impl From for SequencerConfig { &opts.aligned_opts.aligned_network.unwrap_or_default(), ), fee_estimate: opts.aligned_opts.fee_estimate, - aligned_sp1_elf_path: opts.aligned_opts.aligned_sp1_elf_path.unwrap_or_default(), + sp1_elf_path: opts.aligned_opts.sp1_elf_path.unwrap_or_default(), }, } } @@ -483,7 +483,16 @@ pub struct AlignedOptions { help_heading = "Aligned options", help = "Path to the SP1 elf. This is used for proof verification." )] - pub aligned_sp1_elf_path: Option, + pub sp1_elf_path: Option, + #[arg( + long, + value_name = "ETHREX_ALIGNED_RISC0_ELF_PATH", + required_if_eq("aligned", "true"), + env = "ETHREX_ALIGNED_RISC0_ELF_PATH", + help_heading = "Aligned options", + help = "Path to the RISC0 elf. This is used for proof verification." + )] + pub risc0_elf_path: Option, } impl Default for AlignedOptions { @@ -494,10 +503,14 @@ impl Default for AlignedOptions { beacon_url: Some(vec![Url::parse("http://127.0.0.1:58801").unwrap()]), aligned_network: Some("devnet".to_string()), fee_estimate: "instant".to_string(), - aligned_sp1_elf_path: Some(format!( + sp1_elf_path: Some(format!( "{}/../../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf", env!("CARGO_MANIFEST_DIR") )), + risc0_elf_path: Some(format!( + "{}/../../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-elf", + env!("CARGO_MANIFEST_DIR") + )), } } } diff --git a/crates/l2/Cargo.toml b/crates/l2/Cargo.toml index 01887a328f6..9e03c9fd418 100644 --- a/crates/l2/Cargo.toml +++ b/crates/l2/Cargo.toml @@ -42,7 +42,7 @@ serde_with = "3.11.0" spawned-concurrency = { git = "https://github.com/lambdaclass/spawned.git", tag = "v0.1.0-alpha" } spawned-rt = { git = "https://github.com/lambdaclass/spawned.git", tag = "v0.1.0-alpha" } lazy_static.workspace = true -aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag="v0.16.1" } +aligned-sdk.workspace = true ethers = "2.0" cfg-if.workspace = true diff --git a/crates/l2/common/Cargo.toml b/crates/l2/common/Cargo.toml index 6d3c4075b33..94f574d4f93 100644 --- a/crates/l2/common/Cargo.toml +++ b/crates/l2/common/Cargo.toml @@ -15,6 +15,7 @@ thiserror.workspace = true keccak-hash.workspace = true serde.workspace = true lazy_static.workspace = true +aligned-sdk.workspace = true [lints.clippy] unwrap_used = "deny" diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index 3c92e7c3e88..fb7cd69329f 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -1,5 +1,6 @@ +use aligned_sdk::common::types::ProvingSystemId; use serde::{Deserialize, Serialize}; -use std::fmt::{Debug, Display}; +use std::{fmt::{Debug, Display}, path::PathBuf}; use crate::calldata::Value; @@ -9,7 +10,6 @@ pub enum ProverType { Exec, RISC0, SP1, - Aligned, TDX, } @@ -19,8 +19,7 @@ impl From for u32 { ProverType::Exec => 0, ProverType::RISC0 => 1, ProverType::SP1 => 2, - ProverType::Aligned => 4, - ProverType::TDX => 5, + ProverType::TDX => 3, } } } @@ -32,7 +31,6 @@ impl ProverType { ProverType::Exec, ProverType::RISC0, ProverType::SP1, - ProverType::Aligned, ProverType::TDX, ] .into_iter() @@ -52,20 +50,33 @@ impl ProverType { vec![Value::Bytes(vec![].into()), Value::Bytes(vec![].into())] } ProverType::Exec => unimplemented!("Doesn't need to generate an empty calldata."), - ProverType::Aligned => unimplemented!("Doesn't need to generate an empty calldata."), } } pub fn verifier_getter(&self) -> Option { // These values have to match with the OnChainProposer.sol contract match self { - Self::Aligned => Some("ALIGNEDPROOFAGGREGATOR()".to_string()), Self::RISC0 => Some("R0VERIFIER()".to_string()), Self::SP1 => Some("SP1VERIFIER()".to_string()), Self::TDX => Some("TDXVERIFIER()".to_string()), Self::Exec => None, } } + + pub fn elf_path(&self) -> Option { + let path = match self { + Self::RISC0 => format!( + "{}/../../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-elf", + env!("CARGO_MANIFEST_DIR") + ), + Self::SP1 => format!( + "{}/../../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf", + env!("CARGO_MANIFEST_DIR") + ), + _ => return None + }; + std::fs::canonicalize(path).ok() + } } impl Display for ProverType { @@ -75,7 +86,16 @@ impl Display for ProverType { Self::RISC0 => write!(f, "RISC0"), Self::SP1 => write!(f, "SP1"), Self::TDX => write!(f, "TDX"), - Self::Aligned => write!(f, "Aligned"), + } + } +} + +impl Into> for ProverType { + fn into(self) -> Option { + match self { + ProverType::RISC0 => Some(ProvingSystemId::Risc0), + ProverType::SP1 => Some(ProvingSystemId::SP1), + _ => None } } } @@ -93,7 +113,7 @@ impl BatchProof { pub fn prover_type(&self) -> ProverType { match self { BatchProof::ProofCalldata(proof) => proof.prover_type, - BatchProof::ProofBytes(_) => ProverType::Aligned, + BatchProof::ProofBytes(_) => todo!(), } } @@ -104,10 +124,10 @@ impl BatchProof { } } - pub fn proof(&self) -> Vec { + pub fn compressed(&self) -> Option> { match self { - BatchProof::ProofCalldata(_) => vec![], - BatchProof::ProofBytes(proof) => proof.proof.clone(), + BatchProof::ProofCalldata(_) => None, + BatchProof::ProofBytes(proof) => Some(proof.proof.clone()), } } diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index e1cf4b03745..5e3e68db299 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -4,7 +4,7 @@ use ethrex_l2_common::{ }; use risc0_zkp::verify::VerificationError; use risc0_zkvm::{ - ExecutorEnv, InnerReceipt, ProverOpts, Receipt, default_executor, default_prover, + ExecutorEnv, InnerReceipt, ProverOpts, default_executor, default_prover, serde::Error as Risc0SerdeError, }; use tracing::info; @@ -38,7 +38,7 @@ pub fn execute(input: ProgramInput) -> Result<(), Error> { Ok(()) } -pub fn prove(input: ProgramInput, _aligned_mode: bool) -> Result { +pub fn prove(input: ProgramInput, aligned_mode: bool) -> Result { let mut stdout = Vec::new(); let env = ExecutorEnv::builder() @@ -55,16 +55,25 @@ pub fn prove(input: ProgramInput, _aligned_mode: bool) -> Result Ok(prove_info.receipt) } -pub fn verify(receipt: &Receipt) -> Result<(), Error> { +pub fn verify(receipt: &risc0_zkvm::Receipt) -> Result<(), Error> { receipt.verify(ZKVM_RISC0_PROGRAM_ID)?; Ok(()) } -pub fn to_batch_proof(proof: Receipt, _aligned_mode: bool) -> Result { +pub fn to_batch_proof(proof: risc0_zkvm::Receipt, aligned_mode: bool) -> Result { + let batch_proof = if aligned_mode { + BatchProof::ProofBytes(ProofBytes { + proof: bincode::serialize(&proof.proof)?, + public_values: proof.proof.public_values.to_vec(), + }) + } else { + BatchProof::ProofCalldata(to_calldata(proof)) + }; + to_calldata(proof).map(BatchProof::ProofCalldata) } -fn to_calldata(receipt: Receipt) -> Result { +fn to_calldata(receipt: risc0_zkvm::Receipt) -> Result { let seal = encode_seal(&receipt)?; let journal = receipt.journal.bytes; @@ -82,7 +91,7 @@ fn to_calldata(receipt: Receipt) -> Result { // ref: https://github.com/risc0/risc0-ethereum/blob/046bb34ea4605f9d8420c7db89baf8e1064fa6f5/contracts/src/lib.rs#L88 // this was reimplemented because risc0-ethereum-contracts brings a different version of c-kzg into the workspace (2.1.0), // which is incompatible with our current version (1.0.3). -fn encode_seal(receipt: &Receipt) -> Result, Error> { +fn encode_seal(receipt: &risc0_zkvm::Receipt) -> Result, Error> { let InnerReceipt::Groth16(receipt) = receipt.inner.clone() else { return Err(Error::EncodeNonGroth16Seal); }; diff --git a/crates/l2/sequencer/configs.rs b/crates/l2/sequencer/configs.rs index afad604ddfa..1b3dbc28c22 100644 --- a/crates/l2/sequencer/configs.rs +++ b/crates/l2/sequencer/configs.rs @@ -89,5 +89,5 @@ pub struct AlignedConfig { pub beacon_urls: Vec, pub network: Network, pub fee_estimate: String, - pub aligned_sp1_elf_path: String, + pub sp1_elf_path: String, } diff --git a/crates/l2/sequencer/errors.rs b/crates/l2/sequencer/errors.rs index d0ad0f4bf22..99b46833a21 100644 --- a/crates/l2/sequencer/errors.rs +++ b/crates/l2/sequencer/errors.rs @@ -1,6 +1,7 @@ use crate::based::block_fetcher::BlockFetcherError; use crate::based::state_updater::StateUpdaterError; use crate::utils::error::UtilsError; +use aligned_sdk::common::errors::SubmitError; use ethereum_types::FromStrRadixErr; use ethrex_blockchain::error::{ChainError, InvalidForkChoice}; use ethrex_common::types::{BlobsBundleError, FakeExponentialError}; @@ -129,12 +130,16 @@ pub enum ProofSenderError { GenServerError(GenServerError), #[error("Proof Sender failed because of a rollup store error: {0}")] RollUpStoreError(#[from] RollupStoreError), + #[error("Failed to read ELF file: {0}")] + FailedToReadELF(std::io::Error), #[error("Proof Sender failed to estimate Aligned fee: {0}")] AlignedFeeEstimateError(String), #[error("Proof Sender failed to get nonce from batcher: {0}")] AlignedGetNonceError(String), - #[error("Proof Sender failed to submit proof: {0}")] - AlignedSubmitProofError(String), + #[error("Proof Sender failed to submit proof(s): {0}")] + AlignedSubmitProofError(#[from] SubmitError), + #[error("Wrong batch proof format; should be compressed but found groth16 instead")] + AlignedWrongProofFormat, } #[derive(Debug, thiserror::Error)] diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 5331fd84e82..12c4ab7d86c 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -24,7 +24,7 @@ use crate::{ sequencer::errors::ProofSenderError, }; use aligned_sdk::{ - common::types::{FeeEstimationType, Network, ProvingSystemId, VerificationData}, + common::types::{FeeEstimationType, Network, VerificationData}, verification_layer::{estimate_fee as aligned_estimate_fee, get_nonce_from_batcher, submit}, }; @@ -46,7 +46,8 @@ pub struct L1ProofSenderState { l1_chain_id: u64, network: Network, fee_estimate: FeeEstimationType, - aligned_sp1_elf_path: String, + sp1_elf_path: String, + aligned_mode: bool, } impl L1ProofSenderState { @@ -58,13 +59,14 @@ impl L1ProofSenderState { aligned_cfg: &AlignedConfig, rollup_store: StoreRollup, needed_proof_types: Vec, + aligned_mode: bool, ) -> Result { let eth_client = EthClient::new_with_multiple_urls(eth_cfg.rpc_url.clone())?; let l1_chain_id = eth_client.get_chain_id().await?.try_into().map_err(|_| { ProofSenderError::InternalError("Failed to convert chain ID to U256".to_owned()) })?; let fee_estimate = resolve_fee_estimate(&aligned_cfg.fee_estimate)?; - let aligned_sp1_elf_path = aligned_cfg.aligned_sp1_elf_path.clone(); + let sp1_elf_path = aligned_cfg.sp1_elf_path.clone(); if cfg.dev_mode { return Ok(Self { @@ -79,7 +81,8 @@ impl L1ProofSenderState { l1_chain_id, network: aligned_cfg.network.clone(), fee_estimate, - aligned_sp1_elf_path, + sp1_elf_path, + aligned_mode, }); } @@ -95,7 +98,8 @@ impl L1ProofSenderState { l1_chain_id, network: aligned_cfg.network.clone(), fee_estimate, - aligned_sp1_elf_path, + sp1_elf_path, + aligned_mode, }) } } @@ -127,6 +131,7 @@ impl L1ProofSender { &cfg.aligned, rollup_store, needed_proof_types, + cfg.aligned.aligned_mode, ) .await?; let mut l1_proof_sender = L1ProofSender::start(state); @@ -215,8 +220,8 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe if missing_proof_types.is_empty() { // TODO: we should put in code that if the prover is running with Aligned, then there // shouldn't be any other required types. - if let Some(aligned_proof) = proofs.remove(&ProverType::Aligned) { - send_proof_to_aligned(state, batch_to_send, aligned_proof).await?; + if state.aligned_mode { + send_proof_to_aligned(state, batch_to_send, proofs.values()).await?; } else { send_proof_to_contract(state, batch_to_send, proofs).await?; } @@ -241,20 +246,8 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe async fn send_proof_to_aligned( state: &L1ProofSenderState, batch_number: u64, - aligned_proof: BatchProof, + batch_proofs: impl IntoIterator, ) -> Result<(), ProofSenderError> { - let elf = std::fs::read(state.aligned_sp1_elf_path.clone()) - .map_err(|e| ProofSenderError::InternalError(format!("Failed to read ELF file: {e}")))?; - - let verification_data = VerificationData { - proving_system: ProvingSystemId::SP1, - proof: aligned_proof.proof(), - proof_generator_addr: state.l1_address.0.into(), - vm_program_code: Some(elf), - verification_key: None, - pub_input: None, - }; - let fee_estimation = estimate_fee(state).await?; let nonce = get_nonce_from_batcher(state.network.clone(), state.l1_address.0.into()) @@ -268,21 +261,57 @@ async fn send_proof_to_aligned( let wallet = wallet.with_chain_id(state.l1_chain_id); - debug!("Sending proof to Aligned"); + for batch_proof in batch_proofs { + let Some(proving_system) = batch_proof.prover_type().into() else { + continue; + }; - submit( - state.network.clone(), - &verification_data, - fee_estimation, - wallet, - nonce, - ) - .await - .map_err(|err| { - ProofSenderError::AlignedSubmitProofError(format!("Failed to submit proof: {err}")) - })?; + debug!( + prover_type = ?batch_proof.prover_type(), + ?batch_number, + "Submitting compressed proof to Aligned" + ); - info!("Proof for batch {batch_number} sent to Aligned"); + let Some(proof) = batch_proof.compressed() else { + return Err(ProofSenderError::AlignedWrongProofFormat); + }; + + let elf = batch_proof + .prover_type() + .elf_path() + .ok_or(ProofSenderError::InternalError( + "no ELF for this prover type".to_string(), + )) + .and_then(|path| { + std::fs::read(path).map_err(|e| { + ProofSenderError::InternalError(format!("failed to read ELF file: {e}")) + }) + })?; + + let verification_data = VerificationData { + proving_system, + proof, + proof_generator_addr: state.l1_address.0.into(), + vm_program_code: Some(elf), + verification_key: None, + pub_input: None, + }; + + submit( + state.network.clone(), + &verification_data, + fee_estimation, + wallet.clone(), + nonce, + ) + .await?; + + info!( + prover_type = ?batch_proof.prover_type(), + ?batch_number, + "Submitted compressed proof to Aligned" + ); + } Ok(()) } diff --git a/crates/l2/sequencer/mod.rs b/crates/l2/sequencer/mod.rs index 5baf1226867..8bfff276073 100644 --- a/crates/l2/sequencer/mod.rs +++ b/crates/l2/sequencer/mod.rs @@ -59,13 +59,6 @@ pub async fn start_l2( return; }; - if needed_proof_types.contains(&ProverType::Aligned) && !cfg.aligned.aligned_mode { - error!( - "Aligned mode is required. Please set the `--aligned` flag or use the `ALIGNED_MODE` environment variable to true." - ); - return; - } - let _ = L1Watcher::spawn( store.clone(), blockchain.clone(), From a1e14061ff927119fff6d045c336e32c9e051e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 2 Jul 2025 13:16:44 -0300 Subject: [PATCH 051/236] finish Aligned prover type removal --- crates/l2/common/src/prover.rs | 6 +- crates/l2/sequencer/errors.rs | 12 +++- crates/l2/sequencer/l1_proof_sender.rs | 26 ++------ crates/l2/sequencer/l1_proof_verifier.rs | 69 ++++++++++++++------- crates/l2/sequencer/mod.rs | 5 +- crates/l2/sequencer/proof_coordinator.rs | 26 ++------ crates/l2/sequencer/utils.rs | 17 ----- crates/l2/storage/src/api.rs | 4 +- crates/l2/storage/src/store.rs | 10 +-- crates/l2/storage/src/store_db/in_memory.rs | 4 +- crates/l2/storage/src/store_db/libmdbx.rs | 4 +- crates/networking/rpc/clients/eth/mod.rs | 8 +++ 12 files changed, 92 insertions(+), 99 deletions(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index fb7cd69329f..a5bb9b03e0c 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -90,9 +90,9 @@ impl Display for ProverType { } } -impl Into> for ProverType { - fn into(self) -> Option { - match self { +impl From for Option { + fn from(value: ProverType) -> Self { + match value { ProverType::RISC0 => Some(ProvingSystemId::Risc0), ProverType::SP1 => Some(ProvingSystemId::SP1), _ => None diff --git a/crates/l2/sequencer/errors.rs b/crates/l2/sequencer/errors.rs index 99b46833a21..ce0720ea676 100644 --- a/crates/l2/sequencer/errors.rs +++ b/crates/l2/sequencer/errors.rs @@ -130,18 +130,22 @@ pub enum ProofSenderError { GenServerError(GenServerError), #[error("Proof Sender failed because of a rollup store error: {0}")] RollUpStoreError(#[from] RollupStoreError), - #[error("Failed to read ELF file: {0}")] - FailedToReadELF(std::io::Error), #[error("Proof Sender failed to estimate Aligned fee: {0}")] AlignedFeeEstimateError(String), #[error("Proof Sender failed to get nonce from batcher: {0}")] AlignedGetNonceError(String), #[error("Proof Sender failed to submit proof(s): {0}")] - AlignedSubmitProofError(#[from] SubmitError), + AlignedSubmitProofError(Box), #[error("Wrong batch proof format; should be compressed but found groth16 instead")] AlignedWrongProofFormat, } +impl From for ProofSenderError { + fn from(value: SubmitError) -> Self { + ProofSenderError::AlignedSubmitProofError(value.into()) + } +} + #[derive(Debug, thiserror::Error)] pub enum ProofVerifierError { #[error("Failed because of an EthClient error: {0}")] @@ -156,6 +160,8 @@ pub enum ProofVerifierError { StoreError(#[from] StoreError), #[error("Block Producer failed because of a rollup store error: {0}")] RollupStoreError(#[from] RollupStoreError), + #[error("Aligned does not support prover type {0}")] + UnsupportedProverType(String) } #[derive(Debug, thiserror::Error)] diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 12c4ab7d86c..8c3889f0343 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -15,7 +15,7 @@ use tracing::{debug, error, info}; use super::{ configs::AlignedConfig, - utils::{get_latest_sent_batch, random_duration, send_verify_tx}, + utils::{random_duration, send_verify_tx}, }; use crate::{ @@ -46,7 +46,6 @@ pub struct L1ProofSenderState { l1_chain_id: u64, network: Network, fee_estimate: FeeEstimationType, - sp1_elf_path: String, aligned_mode: bool, } @@ -59,14 +58,12 @@ impl L1ProofSenderState { aligned_cfg: &AlignedConfig, rollup_store: StoreRollup, needed_proof_types: Vec, - aligned_mode: bool, ) -> Result { let eth_client = EthClient::new_with_multiple_urls(eth_cfg.rpc_url.clone())?; let l1_chain_id = eth_client.get_chain_id().await?.try_into().map_err(|_| { ProofSenderError::InternalError("Failed to convert chain ID to U256".to_owned()) })?; let fee_estimate = resolve_fee_estimate(&aligned_cfg.fee_estimate)?; - let sp1_elf_path = aligned_cfg.sp1_elf_path.clone(); if cfg.dev_mode { return Ok(Self { @@ -81,8 +78,7 @@ impl L1ProofSenderState { l1_chain_id, network: aligned_cfg.network.clone(), fee_estimate, - sp1_elf_path, - aligned_mode, + aligned_mode: aligned_cfg.aligned_mode, }); } @@ -98,8 +94,7 @@ impl L1ProofSenderState { l1_chain_id, network: aligned_cfg.network.clone(), fee_estimate, - sp1_elf_path, - aligned_mode, + aligned_mode: aligned_cfg.aligned_mode, }) } } @@ -131,7 +126,6 @@ impl L1ProofSender { &cfg.aligned, rollup_store, needed_proof_types, - cfg.aligned.aligned_mode, ) .await?; let mut l1_proof_sender = L1ProofSender::start(state); @@ -181,17 +175,7 @@ impl GenServer for L1ProofSender { } async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSenderError> { - let batch_to_send = 1 + get_latest_sent_batch( - state.needed_proof_types.clone(), - &state.rollup_store, - &state.eth_client, - state.on_chain_proposer_address, - ) - .await - .map_err(|err| { - error!("Failed to get next batch to send: {err}"); - ProofSenderError::InternalError(err.to_string()) - })?; + let batch_to_send = 1 + state.rollup_store.get_latest_sent_batch_proof().await?; let last_committed_batch = state .eth_client @@ -227,7 +211,7 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe } state .rollup_store - .set_lastest_sent_batch_proof(batch_to_send) + .set_latest_sent_batch_proof(batch_to_send) .await?; } else { let missing_proof_types: Vec = missing_proof_types diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index 8bf4fbacf32..bf710ac7b69 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -33,6 +33,7 @@ const ALIGNED_VERIFY_FUNCTION_SIGNATURE: &str = "verifyBatchesAligned(uint256,by pub async fn start_l1_proof_verifier( cfg: SequencerConfig, rollup_store: StoreRollup, + needed_proof_types: Vec, ) -> Result<(), SequencerError> { let l1_proof_verifier = L1ProofVerifier::new( &cfg.proof_coordinator, @@ -40,6 +41,7 @@ pub async fn start_l1_proof_verifier( &cfg.eth, &cfg.aligned, rollup_store, + needed_proof_types, ) .await?; l1_proof_verifier.run().await; @@ -56,6 +58,8 @@ struct L1ProofVerifier { network: Network, rollup_store: StoreRollup, sp1_vk: [u8; 32], + risc0_vk: [u8; 32], + needed_proof_types: Vec, } impl L1ProofVerifier { @@ -65,6 +69,7 @@ impl L1ProofVerifier { eth_cfg: &EthConfig, aligned_cfg: &AlignedConfig, rollup_store: StoreRollup, + needed_proof_types: Vec, ) -> Result { let eth_client = EthClient::new_with_multiple_urls(eth_cfg.rpc_url.clone())?; let beacon_urls = parse_beacon_urls(&aligned_cfg.beacon_urls); @@ -72,6 +77,9 @@ impl L1ProofVerifier { let sp1_vk = eth_client .get_sp1_vk(committer_cfg.on_chain_proposer_address) .await?; + let risc0_vk = eth_client + .get_risc0_vk(committer_cfg.on_chain_proposer_address) + .await?; Ok(Self { eth_client, @@ -83,6 +91,8 @@ impl L1ProofVerifier { proof_verify_interval_ms: aligned_cfg.aligned_verifier_interval_ms, rollup_store, sp1_vk, + risc0_vk, + needed_proof_types, }) } @@ -103,18 +113,21 @@ impl L1ProofVerifier { .get_last_verified_batch(self.on_chain_proposer_address) .await?; - if self - .rollup_store - .get_proof_by_batch_and_type(first_batch_to_verify, ProverType::Aligned) - .await? - .is_none() - { - info!( - ?first_batch_to_verify, - "Missing Aligned proof, skipping verification" - ); - return Ok(()); - }; + for prover_type in &self.needed_proof_types { + if self + .rollup_store + .get_proof_by_batch_and_type(first_batch_to_verify, *prover_type) + .await? + .is_none() + { + info!( + ?first_batch_to_verify, + ?prover_type, + "Missing proof, skipping verification" + ); + return Ok(()); + }; + } match self .verify_proofs_aggregation(first_batch_to_verify) @@ -194,13 +207,15 @@ impl L1ProofVerifier { mut batch_number: u64, ) -> Result, ProofVerifierError> { let mut proofs = Vec::new(); - while let Some(proof) = self - .rollup_store - .get_proof_by_batch_and_type(batch_number, ProverType::Aligned) - .await? - { - proofs.push((batch_number, proof)); - batch_number += 1; + for prover_type in &self.needed_proof_types { + while let Some(proof) = self + .rollup_store + .get_proof_by_batch_and_type(batch_number, *prover_type) + .await? + { + proofs.push((batch_number, proof)); + batch_number += 1; + } } Ok(proofs) } @@ -214,9 +229,18 @@ impl L1ProofVerifier { let mut aggregated_proofs = Vec::new(); for (batch_number, proof) in proofs { let public_inputs = proof.public_values(); + let vk = match proof.prover_type() { + ProverType::RISC0 => self.risc0_vk, + ProverType::SP1 => self.sp1_vk, + unsupported_type => { + return Err(ProofVerifierError::UnsupportedProverType( + unsupported_type.to_string(), + )); + } + }; let verification_data = AggregationModeVerificationData::SP1 { - vk: self.sp1_vk, + vk, public_inputs: public_inputs.clone(), }; let commitment = H256(verification_data.commitment()); @@ -225,7 +249,10 @@ impl L1ProofVerifier { self.check_proof_aggregation(verification_data).await? { info!( - "Proof for batch {batch_number} aggregated by Aligned with commitment {commitment:#x} and Merkle root {merkle_root:#x}" + ?batch_number, + commitment = %format_args!("{commitment:#x}"), + merkle_root = %format_args!("{merkle_root:#x}"), + "Proof aggregated by Aligned" ); aggregated_proofs.push((public_inputs, merkle_path)); } diff --git a/crates/l2/sequencer/mod.rs b/crates/l2/sequencer/mod.rs index 8bfff276073..3f8147a7164 100644 --- a/crates/l2/sequencer/mod.rs +++ b/crates/l2/sequencer/mod.rs @@ -5,7 +5,6 @@ use crate::based::sequencer_state::SequencerStatus; use crate::{BlockFetcher, SequencerConfig, StateUpdater}; use block_producer::BlockProducer; use ethrex_blockchain::Blockchain; -use ethrex_l2_common::prover::ProverType; use ethrex_storage::Store; use ethrex_storage_rollup::StoreRollup; use l1_committer::L1Committer; @@ -84,7 +83,6 @@ pub async fn start_l2( rollup_store.clone(), cfg.clone(), blockchain.clone(), - needed_proof_types.clone(), ) .await .inspect_err(|err| { @@ -121,10 +119,11 @@ pub async fn start_l2( }); let mut task_set: JoinSet> = JoinSet::new(); - if needed_proof_types.contains(&ProverType::Aligned) { + if cfg.aligned.aligned_mode { task_set.spawn(l1_proof_verifier::start_l1_proof_verifier( cfg.clone(), rollup_store.clone(), + needed_proof_types.clone() )); } if cfg.based.based { diff --git a/crates/l2/sequencer/proof_coordinator.rs b/crates/l2/sequencer/proof_coordinator.rs index 2fd09872266..18ac2189685 100644 --- a/crates/l2/sequencer/proof_coordinator.rs +++ b/crates/l2/sequencer/proof_coordinator.rs @@ -1,6 +1,5 @@ use crate::sequencer::errors::{ConnectionHandlerError, ProofCoordinatorError}; use crate::sequencer::setup::{prepare_quote_prerequisites, register_tdx_key}; -use crate::sequencer::utils::get_latest_sent_batch; use crate::{ BlockProducerConfig, CommitterConfig, EthConfig, ProofCoordinatorConfig, SequencerConfig, }; @@ -145,7 +144,6 @@ pub struct ProofCoordinatorState { l1_private_key: SecretKey, blockchain: Arc, validium: bool, - needed_proof_types: Vec, } impl ProofCoordinatorState { @@ -158,7 +156,6 @@ impl ProofCoordinatorState { store: Store, rollup_store: StoreRollup, blockchain: Arc, - needed_proof_types: Vec, ) -> Result { let eth_client = EthClient::new_with_config( eth_config.rpc_url.iter().map(AsRef::as_ref).collect(), @@ -191,7 +188,6 @@ impl ProofCoordinatorState { l1_private_key: config.l1_private_key, blockchain, validium: config.validium, - needed_proof_types, }) } } @@ -213,7 +209,6 @@ impl ProofCoordinator { rollup_store: StoreRollup, cfg: SequencerConfig, blockchain: Arc, - needed_proof_types: Vec, ) -> Result<(), ProofCoordinatorError> { let state = ProofCoordinatorState::new( &cfg.proof_coordinator, @@ -223,7 +218,6 @@ impl ProofCoordinator { store, rollup_store, blockchain, - needed_proof_types, ) .await?; let listener = TcpListener::bind(format!("{}:{}", state.listen_ip, state.port)).await?; @@ -407,24 +401,16 @@ async fn handle_request( stream: &mut TcpStream, ) -> Result<(), ProofCoordinatorError> { info!("BatchRequest received"); + let batch_to_prove = 1 + state.rollup_store.get_latest_sent_batch_proof().await?; - let batch_to_verify = 1 + get_latest_sent_batch( - state.needed_proof_types.clone(), - &state.rollup_store, - &state.eth_client, - state.on_chain_proposer_address, - ) - .await - .map_err(|err| ProofCoordinatorError::InternalError(err.to_string()))?; - - let response = if !state.rollup_store.contains_batch(&batch_to_verify).await? { + let response = if !state.rollup_store.contains_batch(&batch_to_prove).await? { let response = ProofData::empty_batch_response(); debug!("Sending empty BatchResponse"); response } else { - let input = create_prover_input(state, batch_to_verify).await?; - let response = ProofData::batch_response(batch_to_verify, input); - debug!("Sending BatchResponse for block_number: {batch_to_verify}"); + let input = create_prover_input(state, batch_to_prove).await?; + let response = ProofData::batch_response(batch_to_prove, input); + debug!("Sending BatchResponse for block_number: {batch_to_prove}"); response }; @@ -433,7 +419,7 @@ async fn handle_request( .write_all(&buffer) .await .map_err(ProofCoordinatorError::ConnectionError) - .map(|_| info!("BatchResponse sent for batch number: {batch_to_verify}")) + .map(|_| info!("BatchResponse sent for batch number: {batch_to_prove}")) } async fn handle_submit( diff --git a/crates/l2/sequencer/utils.rs b/crates/l2/sequencer/utils.rs index 62f61438b79..9bbc3706a7e 100644 --- a/crates/l2/sequencer/utils.rs +++ b/crates/l2/sequencer/utils.rs @@ -19,8 +19,6 @@ const DEV_MODE_ADDRESS: H160 = H160([ 0x00, 0x00, 0x00, 0xAA, ]); -use super::errors::SequencerError; - pub async fn sleep_random(sleep_amount: u64) { sleep(random_duration(sleep_amount)).await; } @@ -112,21 +110,6 @@ pub async fn get_needed_proof_types( Ok(needed_proof_types) } -pub async fn get_latest_sent_batch( - needed_proof_types: Vec, - rollup_store: &StoreRollup, - eth_client: &EthClient, - on_chain_proposer_address: Address, -) -> Result { - if needed_proof_types.contains(&ProverType::Aligned) { - Ok(rollup_store.get_lastest_sent_batch_proof().await?) - } else { - Ok(eth_client - .get_last_verified_batch(on_chain_proposer_address) - .await?) - } -} - pub fn resolve_aligned_network(network: &str) -> Network { match network { "devnet" => Network::Devnet, diff --git a/crates/l2/storage/src/api.rs b/crates/l2/storage/src/api.rs index d315f86f259..742b4a4f949 100644 --- a/crates/l2/storage/src/api.rs +++ b/crates/l2/storage/src/api.rs @@ -98,9 +98,9 @@ pub trait StoreEngineRollup: Debug + Send + Sync { /// Returns whether the batch with the given number is present. async fn contains_batch(&self, batch_number: &u64) -> Result; - async fn get_lastest_sent_batch_proof(&self) -> Result; + async fn get_latest_sent_batch_proof(&self) -> Result; - async fn set_lastest_sent_batch_proof(&self, batch_number: u64) + async fn set_latest_sent_batch_proof(&self, batch_number: u64) -> Result<(), RollupStoreError>; async fn get_account_updates_by_block_number( diff --git a/crates/l2/storage/src/store.rs b/crates/l2/storage/src/store.rs index 498b8921343..e0866e7588c 100644 --- a/crates/l2/storage/src/store.rs +++ b/crates/l2/storage/src/store.rs @@ -78,7 +78,7 @@ impl Store { }) .await?; // Sets the lastest sent batch proof to 0 - self.set_lastest_sent_batch_proof(0).await + self.set_latest_sent_batch_proof(0).await } /// Stores the block numbers by a given batch_number @@ -288,16 +288,16 @@ impl Store { } /// Returns the lastest sent batch proof - pub async fn get_lastest_sent_batch_proof(&self) -> Result { - self.engine.get_lastest_sent_batch_proof().await + pub async fn get_latest_sent_batch_proof(&self) -> Result { + self.engine.get_latest_sent_batch_proof().await } /// Sets the lastest sent batch proof - pub async fn set_lastest_sent_batch_proof( + pub async fn set_latest_sent_batch_proof( &self, batch_number: u64, ) -> Result<(), RollupStoreError> { - self.engine.set_lastest_sent_batch_proof(batch_number).await + self.engine.set_latest_sent_batch_proof(batch_number).await } /// Returns the account updates yielded from executing a block diff --git a/crates/l2/storage/src/store_db/in_memory.rs b/crates/l2/storage/src/store_db/in_memory.rs index ea18464f45e..a171bdf7d45 100644 --- a/crates/l2/storage/src/store_db/in_memory.rs +++ b/crates/l2/storage/src/store_db/in_memory.rs @@ -196,11 +196,11 @@ impl StoreEngineRollup for Store { Ok(self.inner()?.operations_counts) } - async fn get_lastest_sent_batch_proof(&self) -> Result { + async fn get_latest_sent_batch_proof(&self) -> Result { Ok(self.inner()?.lastest_sent_batch_proof) } - async fn set_lastest_sent_batch_proof( + async fn set_latest_sent_batch_proof( &self, batch_number: u64, ) -> Result<(), RollupStoreError> { diff --git a/crates/l2/storage/src/store_db/libmdbx.rs b/crates/l2/storage/src/store_db/libmdbx.rs index 7930d73b444..f48c6ff6106 100644 --- a/crates/l2/storage/src/store_db/libmdbx.rs +++ b/crates/l2/storage/src/store_db/libmdbx.rs @@ -267,13 +267,13 @@ impl StoreEngineRollup for Store { } } - async fn get_lastest_sent_batch_proof(&self) -> Result { + async fn get_latest_sent_batch_proof(&self) -> Result { self.read::(0) .await .map(|v| v.unwrap_or(0)) } - async fn set_lastest_sent_batch_proof( + async fn set_latest_sent_batch_proof( &self, batch_number: u64, ) -> Result<(), RollupStoreError> { diff --git a/crates/networking/rpc/clients/eth/mod.rs b/crates/networking/rpc/clients/eth/mod.rs index ac8c38d39a0..8705531fdc4 100644 --- a/crates/networking/rpc/clients/eth/mod.rs +++ b/crates/networking/rpc/clients/eth/mod.rs @@ -1063,6 +1063,14 @@ impl EthClient { .await } + pub async fn get_risc0_vk( + &self, + on_chain_proposer_address: Address, + ) -> Result<[u8; 32], EthClientError> { + self._call_bytes32_variable(b"RISC0_VERIFICATION_KEY()", on_chain_proposer_address) + .await + } + pub async fn get_last_fetched_l1_block( &self, common_bridge_address: Address, From f73c5f23c71abcc6abd18a04b990dc0e372a5d0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 2 Jul 2025 18:14:11 -0300 Subject: [PATCH 052/236] update contracts --- .../l2/contracts/src/l1/OnChainProposer.sol | 95 ++++++------ .../src/l1/based/OnChainProposer.sol | 138 ++++++------------ 2 files changed, 87 insertions(+), 146 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 655e0540bb8..5371ac7c3cb 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -65,22 +65,16 @@ contract OnChainProposer is address public BRIDGE; /// @dev Deprecated variable. address public PICOVERIFIER; - address public R0VERIFIER; - address public SP1VERIFIER; + address public RISC0_VERIFIER_ADDRESS; + address public SP1_VERIFIER_ADDRESS; bytes32 public SP1_VERIFICATION_KEY; - /// @notice Address used to avoid the verification process. - /// @dev If the `R0VERIFIER` or the `SP1VERIFIER` contract address is set to this address, - /// the verification process will not happen. - /// @dev Used only in dev mode. - address public constant DEV_MODE = address(0xAA); - /// @notice Indicates whether the contract operates in validium mode.Add commentMore actions /// @dev This value is immutable and can only be set during contract deployment. bool public VALIDIUM; - address public TDXVERIFIER; + address public TDX_VERIFIER_ADDRESS; /// @notice The address of the AlignedProofAggregatorService contract. /// @dev This address is set during contract initialization and is used to verify aligned proofs. @@ -88,6 +82,16 @@ contract OnChainProposer is bytes32 public RISC0_VERIFICATION_KEY; + /// @notice True if a Risc0 proof is required for batch verification. + bool REQUIRE_RISC0_PROOF; + /// @notice True if a SP1 proof is required for batch verification. + bool REQUIRE_SP1_PROOF; + /// @notice True if a TDX proof is required for batch verification. + bool REQUIRE_TDX_PROOF; + + /// @notice True if verification is done through Aligned Layer instead of smart contract verifiers. + bool ALIGNED; + modifier onlySequencer() { require( authorizedSequencerAddresses[msg.sender], @@ -106,6 +110,10 @@ contract OnChainProposer is function initialize( bool _validium, address owner, + bool requireRisc0Proof, + bool requireSp1Proof, + bool requireTdxProof, + bool aligned, address r0verifier, address sp1verifier, address tdxverifier, @@ -117,37 +125,23 @@ contract OnChainProposer is ) public initializer { VALIDIUM = _validium; - // Set the AlignedProofAggregator address - require( - alignedProofAggregator != address(0), - "OnChainProposer: alignedProofAggregator is the zero address" - ); - ALIGNEDPROOFAGGREGATOR = alignedProofAggregator; + // Risc0 constants + REQUIRE_RISC0_PROOF = requireRisc0Proof; + RISC0_VERIFIER_ADDRESS = r0verifier; + RISC0_VERIFICATION_KEY = risc0Vk; - // Set the Risc0Groth16Verifier address - require( - r0verifier != address(0), - "OnChainProposer: r0verifier is the zero address" - ); - R0VERIFIER = r0verifier; + // SP1 constants + REQUIRE_SP1_PROOF = requireSp1Proof; + SP1_VERIFIER_ADDRESS = sp1verifier; + SP1_VERIFICATION_KEY = sp1Vk; - // Set the SP1Groth16Verifier address - require( - sp1verifier != address(0), - "OnChainProposer: sp1verifier is the zero address" - ); - SP1VERIFIER = sp1verifier; + // TDX constants + REQUIRE_TDX_PROOF = requireTdxProof; + TDX_VERIFIER_ADDRESS = tdxverifier; - // Set the TDXVerifier address - require( - tdxverifier != address(0), - "OnChainProposer: tdxverifier is the zero address" - ); - TDXVERIFIER = tdxverifier; - - // Set verification keys (or image id in risc0's case) - SP1_VERIFICATION_KEY = sp1Vk; - RISC0_VERIFICATION_KEY = risc0Vk; + // Aligned Layer constants + ALIGNED = aligned; + ALIGNEDPROOFAGGREGATOR = alignedProofAggregator; batchCommitments[0] = BatchCommitmentInfo( genesisStateRoot, @@ -256,13 +250,8 @@ contract OnChainProposer is bytes calldata tdxPublicValues, bytes memory tdxSignature ) external override onlySequencer whenNotPaused { - // TODO: Refactor validation - // TODO: imageid, programvkey and riscvvkey should be constants - // TODO: organize each zkvm proof arguments in their own structs - require( - ALIGNEDPROOFAGGREGATOR == DEV_MODE, - "OnChainProposer: ALIGNEDPROOFAGGREGATOR is set. Use verifyBatchesAligned instead" - ); + require(!ALIGNED, "Batch verification should be done via Aligned Layer. Call verifyBatchesAligned() instead."); + require( batchNumber == lastVerifiedBatch + 1, "OnChainProposer: batch already verified" @@ -272,30 +261,30 @@ contract OnChainProposer is "OnChainProposer: cannot verify an uncommitted batch" ); - if (R0VERIFIER != DEV_MODE) { + if (REQUIRE_RISC0_PROOF) { // If the verification fails, it will revert. _verifyPublicData(batchNumber, risc0Journal); - IRiscZeroVerifier(R0VERIFIER).verify( + IRiscZeroVerifier(RISC0_VERIFIER_ADDRESS).verify( risc0BlockProof, RISC0_VERIFICATION_KEY, sha256(risc0Journal) ); } - if (SP1VERIFIER != DEV_MODE) { + if (REQUIRE_SP1_PROOF) { // If the verification fails, it will revert. _verifyPublicData(batchNumber, sp1PublicValues[8:]); - ISP1Verifier(SP1VERIFIER).verifyProof( + ISP1Verifier(SP1_VERIFIER_ADDRESS).verifyProof( SP1_VERIFICATION_KEY, sp1PublicValues, sp1ProofBytes ); } - if (TDXVERIFIER != DEV_MODE) { + if (REQUIRE_TDX_PROOF) { // If the verification fails, it will revert. _verifyPublicData(batchNumber, tdxPublicValues); - ITDXVerifier(TDXVERIFIER).verify(tdxPublicValues, tdxSignature); + ITDXVerifier(TDX_VERIFIER_ADDRESS).verify(tdxPublicValues, tdxSignature); } lastVerifiedBatch = batchNumber; @@ -321,10 +310,8 @@ contract OnChainProposer is bytes[] calldata alignedPublicInputsList, bytes32[][] calldata alignedMerkleProofsList ) external override onlySequencer whenNotPaused { - require( - ALIGNEDPROOFAGGREGATOR != DEV_MODE, - "OnChainProposer: ALIGNEDPROOFAGGREGATOR is not set" - ); + require(ALIGNED, "Batch verification should be done via smart contract verifiers. Call verifyBatch() instead."); + require( alignedPublicInputsList.length == alignedMerkleProofsList.length, "OnChainProposer: input/proof array length mismatch" diff --git a/crates/l2/contracts/src/l1/based/OnChainProposer.sol b/crates/l2/contracts/src/l1/based/OnChainProposer.sol index be2f6552dc2..f312c524475 100644 --- a/crates/l2/contracts/src/l1/based/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/based/OnChainProposer.sol @@ -58,20 +58,15 @@ contract OnChainProposer is uint256 public lastCommittedBatch; address public BRIDGE; + /// @dev Deprecated variable. address public PICOVERIFIER; - address public R0VERIFIER; - address public SP1VERIFIER; - address public TDXVERIFIER; + address public RISC0_VERIFIER_ADDRESS; + address public SP1_VERIFIER_ADDRESS; + address public TDX_VERIFIER_ADDRESS; address public SEQUENCER_REGISTRY; bytes32 public SP1_VERIFICATION_KEY; - /// @notice Address used to avoid the verification process. - /// @dev If the `R0VERIFIER` or the `SP1VERIFIER` contract address is set to this address, - /// the verification process will not happen. - /// @dev Used only in dev mode. - address public constant DEV_MODE = address(0xAA); - /// @notice Indicates whether the contract operates in validium mode. /// @dev This value is immutable and can only be set during contract deployment. bool public VALIDIUM; @@ -80,6 +75,18 @@ contract OnChainProposer is /// @dev This address is set during contract initialization and is used to verify aligned proofs. address public ALIGNEDPROOFAGGREGATOR; + bytes32 public RISC0_VERIFICATION_KEY; + + /// @notice True if a Risc0 proof is required for batch verification. + bool REQUIRE_RISC0_PROOF; + /// @notice True if a SP1 proof is required for batch verification. + bool REQUIRE_SP1_PROOF; + /// @notice True if a TDX proof is required for batch verification. + bool REQUIRE_TDX_PROOF; + + /// @notice True if verification is done through Aligned Layer instead of smart contract verifiers. + bool ALIGNED; + modifier onlyLeaderSequencer() { require( msg.sender == @@ -100,83 +107,38 @@ contract OnChainProposer is function initialize( bool _validium, address owner, + bool requireRisc0Proof, + bool requireSp1Proof, + bool requireTdxProof, + bool aligned, address r0verifier, address sp1verifier, address tdxverifier, address alignedProofAggregator, bytes32 sp1Vk, + bytes32 risc0Vk, bytes32 genesisStateRoot, address sequencer_registry ) public initializer { VALIDIUM = _validium; - // Set the AlignedProofAggregator address - require( - ALIGNEDPROOFAGGREGATOR == address(0), - "OnChainProposer: contract already initialized" - ); - require( - alignedProofAggregator != address(0), - "OnChainProposer: alignedProofAggregator is the zero address" - ); - require( - alignedProofAggregator != address(this), - "OnChainProposer: alignedProofAggregator is the contract address" - ); - - ALIGNEDPROOFAGGREGATOR = alignedProofAggregator; - - // Set the Risc0Groth16Verifier address - require( - R0VERIFIER == address(0), - "OnChainProposer: contract already initialized" - ); - require( - r0verifier != address(0), - "OnChainProposer: r0verifier is the zero address" - ); - require( - r0verifier != address(this), - "OnChainProposer: r0verifier is the contract address" - ); - R0VERIFIER = r0verifier; + // Risc0 constants + REQUIRE_RISC0_PROOF = requireRisc0Proof; + RISC0_VERIFIER_ADDRESS = r0verifier; + RISC0_VERIFICATION_KEY = risc0Vk; - // Set the SP1Groth16Verifier address - require( - SP1VERIFIER == address(0), - "OnChainProposer: contract already initialized" - ); - require( - sp1verifier != address(0), - "OnChainProposer: sp1verifier is the zero address" - ); - require( - sp1verifier != address(this), - "OnChainProposer: sp1verifier is the contract address" - ); - SP1VERIFIER = sp1verifier; + // SP1 constants + REQUIRE_SP1_PROOF = requireSp1Proof; + SP1_VERIFIER_ADDRESS = sp1verifier; + SP1_VERIFICATION_KEY = sp1Vk; - // Set the TDXVerifier address - require( - TDXVERIFIER == address(0), - "OnChainProposer: contract already initialized" - ); - require( - tdxverifier != address(0), - "OnChainProposer: tdxverifier is the zero address" - ); - require( - tdxverifier != address(this), - "OnChainProposer: tdxverifier is the contract address" - ); - TDXVERIFIER = tdxverifier; + // TDX constants + REQUIRE_TDX_PROOF = requireTdxProof; + TDX_VERIFIER_ADDRESS = tdxverifier; - // Set the SP1 program verification key - require( - SP1_VERIFICATION_KEY == bytes32(0), - "OnChainProposer: contract already initialized" - ); - SP1_VERIFICATION_KEY = sp1Vk; + // Aligned Layer constants + ALIGNED = aligned; + ALIGNEDPROOFAGGREGATOR = alignedProofAggregator; batchCommitments[0] = BatchCommitmentInfo( genesisStateRoot, @@ -299,7 +261,6 @@ contract OnChainProposer is uint256 batchNumber, //risc0 bytes memory risc0BlockProof, - bytes32 risc0ImageId, bytes calldata risc0Journal, //sp1 bytes calldata sp1PublicValues, @@ -308,42 +269,37 @@ contract OnChainProposer is bytes calldata tdxPublicValues, bytes memory tdxSignature ) external { - // TODO: Refactor validation - // TODO: imageid, programvkey and riscvvkey should be constants - // TODO: organize each zkvm proof arguments in their own structs - require( - ALIGNEDPROOFAGGREGATOR == DEV_MODE, - "OnChainProposer: ALIGNEDPROOFAGGREGATOR is set. Use verifyBatchesAligned instead" - ); + require(!ALIGNED, "Batch verification should be done via Aligned Layer. Call verifyBatchesAligned() instead."); + require( batchCommitments[batchNumber].newStateRoot != bytes32(0), "OnChainProposer: cannot verify an uncommitted batch" ); - if (R0VERIFIER != DEV_MODE) { + if (REQUIRE_RISC0_PROOF) { // If the verification fails, it will revert. _verifyPublicData(batchNumber, risc0Journal); - IRiscZeroVerifier(R0VERIFIER).verify( + IRiscZeroVerifier(RISC0_VERIFIER_ADDRESS).verify( risc0BlockProof, - risc0ImageId, + RISC0_VERIFICATION_KEY, sha256(risc0Journal) ); } - if (SP1VERIFIER != DEV_MODE) { + if (REQUIRE_SP1_PROOF) { // If the verification fails, it will revert. _verifyPublicData(batchNumber, sp1PublicValues[16:]); - ISP1Verifier(SP1VERIFIER).verifyProof( + ISP1Verifier(SP1_VERIFIER_ADDRESS).verifyProof( SP1_VERIFICATION_KEY, sp1PublicValues, sp1ProofBytes ); } - if (TDXVERIFIER != DEV_MODE) { + if (REQUIRE_TDX_PROOF) { // If the verification fails, it will revert. _verifyPublicData(batchNumber, tdxPublicValues); - ITDXVerifier(TDXVERIFIER).verify(tdxPublicValues, tdxSignature); + ITDXVerifier(TDX_VERIFIER_ADDRESS).verify(tdxPublicValues, tdxSignature); } lastVerifiedBatch = batchNumber; @@ -369,10 +325,8 @@ contract OnChainProposer is bytes[] calldata alignedPublicInputsList, bytes32[][] calldata alignedMerkleProofsList ) external override { - require( - ALIGNEDPROOFAGGREGATOR != DEV_MODE, - "OnChainProposer: ALIGNEDPROOFAGGREGATOR is not set" - ); + require(ALIGNED, "Batch verification should be done via smart contract verifiers. Call verifyBatch() instead."); + require( alignedPublicInputsList.length == alignedMerkleProofsList.length, "OnChainProposer: input/proof array length mismatch" From e6f619a81b704a56421fba5b0f04f14286d9b461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 2 Jul 2025 18:14:13 -0300 Subject: [PATCH 053/236] update deployer WIP --- crates/l2/contracts/bin/deployer/cli.rs | 79 ++++++++++++------------ crates/l2/contracts/bin/deployer/main.rs | 4 +- 2 files changed, 41 insertions(+), 42 deletions(-) diff --git a/crates/l2/contracts/bin/deployer/cli.rs b/crates/l2/contracts/bin/deployer/cli.rs index 58635ca48cc..14649d9ba0d 100644 --- a/crates/l2/contracts/bin/deployer/cli.rs +++ b/crates/l2/contracts/bin/deployer/cli.rs @@ -142,65 +142,74 @@ pub struct DeployerOptions { help = "Path to the contracts directory. The default is the current directory." )] pub contracts_path: PathBuf, - // TODO: This should work side by side with a risc0_deploy_verifier flag. + #[arg( + long, + default_value = "false", + value_name = "BOOLEAN", + env = "ETHREX_L2_RISC0", + help_heading = "Deployer options", + requires = "risc0_vk_path", + help = "If true, L2 will require Risc0 proofs to validate batch proofs and settle state." + )] + pub risc0: bool, #[arg( long = "risc0.verifier-address", value_name = "ADDRESS", env = "ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER", - required = true, // TODO: This should be required_unless_present = "risc0_deploy_verifier", help_heading = "Deployer options", - help = "If set to 0xAA skip proof verification -> Only use in dev mode." )] pub risc0_verifier_address: Option
, + #[arg( + long, + default_value = "false", + value_name = "BOOLEAN", + env = "ETHREX_L2_SP1", + help_heading = "Deployer options", + requires = "sp1_vk_path", + help = "If true, L2 will require SP1 proofs to validate batch proofs and settle state." + )] + pub sp1: bool, #[arg( long = "sp1.verifier-address", value_name = "ADDRESS", env = "ETHREX_DEPLOYER_SP1_CONTRACT_VERIFIER", - required_if_eq("sp1_deploy_verifier", "false"), help_heading = "Deployer options", - help = "If set to 0xAA skip proof verification -> Only use in dev mode." )] pub sp1_verifier_address: Option
, #[arg( - long = "sp1.deploy-verifier", + long, default_value = "false", value_name = "BOOLEAN", - action = ArgAction::SetTrue, - env = "ETHREX_DEPLOYER_SP1_DEPLOY_VERIFIER", - required_unless_present = "sp1_verifier_address", + env = "ETHREX_L2_TDX", help_heading = "Deployer options", - help = "If set to true, it will deploy the contract and override the address above with the deployed one.", + requires = "tdx_verifier_address", + help = "If true, L2 will require TDX proofs to validate batch proofs and settle state." )] - pub sp1_deploy_verifier: bool, + pub tdx: bool, #[arg( long = "tdx.verifier-address", value_name = "ADDRESS", env = "ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER", - required_if_eq("tdx_deploy_verifier", "false"), help_heading = "Deployer options", - help = "If set to 0xAA skip proof verification -> Only use in dev mode." )] pub tdx_verifier_address: Option
, #[arg( - long = "tdx.deploy-verifier", + long, default_value = "false", value_name = "BOOLEAN", - action = ArgAction::SetTrue, - env = "ETHREX_DEPLOYER_TDX_DEPLOY_VERIFIER", - required_unless_present = "tdx_verifier_address", + env = "ETHREX_L2_ALIGNED", help_heading = "Deployer options", - help = "If set to true, it will deploy the contract and override the address above with the deployed one.", + requires = "aligned_aggregator_address", + help = "If true, L2 will verify proofs using Aligned Layer instead of smart contract verifiers." )] - pub tdx_deploy_verifier: bool, + pub aligned: bool, #[arg( long = "aligned.aggregator-address", value_name = "ADDRESS", env = "ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS", - required = true, help_heading = "Deployer options", - help = "If set to 0xAA skip proof verification -> Only use in dev mode." )] - pub aligned_aggregator_address: Address, + pub aligned_aggregator_address: Option
, #[arg( long, default_value = "false", @@ -320,24 +329,14 @@ impl Default for DeployerOptions { 0xd9, 0x0e, 0x50, 0x03, 0x64, 0x25, ]), contracts_path: PathBuf::from("."), - risc0_verifier_address: Some(H160([ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, - ])), - sp1_verifier_address: Some(H160([ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, - ])), - sp1_deploy_verifier: false, - tdx_verifier_address: Some(H160([ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, - ])), - tdx_deploy_verifier: false, - aligned_aggregator_address: H160([ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, - ]), + risc0: false, + risc0_verifier_address: None, + sp1: false, + sp1_verifier_address: None, + tdx: false, + tdx_verifier_address: None, + aligned: false, + aligned_aggregator_address: None, randomize_contract_deployment: false, validium: false, // 0x03d0a0aee676cc45bf7032649e0871927c947c8e diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index 6bfc74c28ce..6903f2ce28f 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -28,9 +28,9 @@ mod cli; mod error; const INITIALIZE_ON_CHAIN_PROPOSER_SIGNATURE_BASED: &str = - "initialize(bool,address,address,address,address,address,bytes32,bytes32,bytes32,address)"; + "initialize(bool,address,bool,bool,bool,bool,address,address,address,address,bytes32,bytes32,bytes32,address)"; const INITIALIZE_ON_CHAIN_PROPOSER_SIGNATURE: &str = - "initialize(bool,address,address,address,address,address,bytes32,bytes32,bytes32,address[])"; + "initialize(bool,address,bool,bool,bool,bool,address,address,address,address,bytes32,bytes32,bytes32,address[])"; const INITIALIZE_BRIDGE_ADDRESS_SIGNATURE: &str = "initializeBridgeAddress(address)"; const TRANSFER_OWNERSHIP_SIGNATURE: &str = "transferOwnership(address)"; From 3dd15ce5de889c7c5ebe7947e5fb02e00b755234 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 3 Jul 2025 12:30:06 -0300 Subject: [PATCH 054/236] update config --- .github/workflows/main_prover.yaml | 2 +- .github/workflows/pr-main_l2_tdx.yaml | 3 +- crates/l2/Makefile | 4 -- crates/l2/based/README.md | 4 -- crates/l2/contracts/bin/deployer/main.rs | 90 ++++++++++++++---------- crates/l2/docker-compose-l2.yaml | 16 ++--- docs/l2/aligned_mode.md | 20 +++--- docs/l2/prover.md | 12 ++-- docs/l2/tdx.md | 4 +- 9 files changed, 78 insertions(+), 77 deletions(-) diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index 66996ed5924..ec96ab3e547 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -66,7 +66,7 @@ jobs: touch .env CI_ETHREX_WORKDIR=/usr/local/bin \ ETHREX_DEPLOYER_DEPLOY_RICH=true \ - ETHREX_DEPLOYER_SP1_DEPLOY_VERIFIER=true \ + ETHREX_DEPLOYER_SP1=true \ docker compose -f docker-compose-l2.yaml up contract_deployer - name: Start Sequencer diff --git a/.github/workflows/pr-main_l2_tdx.yaml b/.github/workflows/pr-main_l2_tdx.yaml index 46a69bdcc06..0c86f7fd421 100644 --- a/.github/workflows/pr-main_l2_tdx.yaml +++ b/.github/workflows/pr-main_l2_tdx.yaml @@ -65,7 +65,7 @@ jobs: touch .env make init-local-l1; ETHREX_DEPLOYER_DEPLOY_RICH=true \ - ETHREX_DEPLOYER_TDX_DEPLOY_VERIFIER=true \ + ETHREX_DEPLOYER_TDX=true \ ETHREX_TDX_DEV_MODE=true \ make deploy-l1 @@ -78,4 +78,3 @@ jobs: sleep 30 ETHREX_TDX_DEV_MODE=true tee/quote-gen/target/release/quote-gen & PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 - diff --git a/crates/l2/Makefile b/crates/l2/Makefile index bc314ff5014..1c171c7d58a 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -103,10 +103,6 @@ deploy-l1: ## 📜 Deploys the L1 contracts --eth-rpc-url ${L1_RPC_URL} \ --private-key ${L1_PRIVATE_KEY} \ --contracts-path contracts \ - --risc0.verifier-address 0x00000000000000000000000000000000000000aa \ - --sp1.verifier-address 0x00000000000000000000000000000000000000aa \ - --tdx.verifier-address 0x00000000000000000000000000000000000000aa \ - --aligned.aggregator-address 0x00000000000000000000000000000000000000aa \ --on-chain-proposer-owner 0x03d0a0aee676cc45bf7032649e0871927c947c8e \ --bridge-owner 0x03d0a0aee676cc45bf7032649e0871927c947c8e \ --deposit-rich \ diff --git a/crates/l2/based/README.md b/crates/l2/based/README.md index b29941a944f..fd0445a41c6 100644 --- a/crates/l2/based/README.md +++ b/crates/l2/based/README.md @@ -137,10 +137,6 @@ cargo run --release --bin ethrex_l2_l1_deployer --manifest-path contracts/Cargo. --genesis-l1-path ../../fixtures/genesis/l1-dev.json \ --genesis-l2-path ../../fixtures/genesis/l2.json \ --contracts-path contracts \ - --sp1.verifier-address 0x00000000000000000000000000000000000000aa \ - --risc0.verifier-address 0x00000000000000000000000000000000000000aa \ - --tdx.verifier-address 0x00000000000000000000000000000000000000aa \ - --aligned.aggregator-address 0x00000000000000000000000000000000000000aa \ --bridge-owner 0xacb3bb54d7c5295c158184044bdeedd9aa426607 \ --on-chain-proposer-owner 0xacb3bb54d7c5295c158184044bdeedd9aa426607 \ --deposit-rich \ diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index 6903f2ce28f..10c30eb24a8 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -27,10 +27,8 @@ use tracing::{Level, debug, error, info, trace, warn}; mod cli; mod error; -const INITIALIZE_ON_CHAIN_PROPOSER_SIGNATURE_BASED: &str = - "initialize(bool,address,bool,bool,bool,bool,address,address,address,address,bytes32,bytes32,bytes32,address)"; -const INITIALIZE_ON_CHAIN_PROPOSER_SIGNATURE: &str = - "initialize(bool,address,bool,bool,bool,bool,address,address,address,address,bytes32,bytes32,bytes32,address[])"; +const INITIALIZE_ON_CHAIN_PROPOSER_SIGNATURE_BASED: &str = "initialize(bool,address,bool,bool,bool,bool,address,address,address,address,bytes32,bytes32,bytes32,address)"; +const INITIALIZE_ON_CHAIN_PROPOSER_SIGNATURE: &str = "initialize(bool,address,bool,bool,bool,bool,address,address,address,address,bytes32,bytes32,bytes32,address[])"; const INITIALIZE_BRIDGE_ADDRESS_SIGNATURE: &str = "initializeBridgeAddress(address)"; const TRANSFER_OWNERSHIP_SIGNATURE: &str = "transferOwnership(address)"; @@ -388,45 +386,55 @@ async fn deploy_contracts( Default::default() }; - let sp1_verifier_address = if opts.sp1_deploy_verifier { - info!("Deploying SP1Verifier (if sp1_deploy_verifier is true)"); - let (verifier_deployment_tx_hash, sp1_verifier_address) = deploy_contract( - &[], - &opts.contracts_path.join("solc_out/SP1Verifier.bin"), - &opts.private_key, - &salt, - eth_client, - ) - .await?; + // if it's a required proof type, but no address has been specify, deploy it. + let sp1_verifier_address = match opts.sp1_verifier_address { + Some(addr) if opts.sp1 => addr, + None if opts.sp1 => { + info!("Deploying SP1Verifier (if sp1_deploy_verifier is true)"); + let (verifier_deployment_tx_hash, sp1_verifier_address) = deploy_contract( + &[], + &opts.contracts_path.join("solc_out/SP1Verifier.bin"), + &opts.private_key, + &salt, + eth_client, + ) + .await?; - info!(address = %format!("{sp1_verifier_address:#x}"), tx_hash = %format!("{verifier_deployment_tx_hash:#x}"), "SP1Verifier deployed"); - sp1_verifier_address - } else { - opts.sp1_verifier_address - .ok_or(DeployerError::InternalError( - "SP1Verifier address is not set and sp1_deploy_verifier is false".to_string(), - ))? + info!(address = %format!("{sp1_verifier_address:#x}"), tx_hash = %format!("{verifier_deployment_tx_hash:#x}"), "SP1Verifier deployed"); + sp1_verifier_address + } + _ => Address::zero(), }; - // TODO: Add Risc0Verifier deployment - let risc0_verifier_address = - opts.risc0_verifier_address - .ok_or(DeployerError::InternalError( - "Risc0Verifier address is not set and risc0_deploy_verifier is false".to_string(), - ))?; + // we can't deploy the risc0 contract because of uncompatible licenses + let Some(risc0_verifier_address) = opts.risc0_verifier_address else { + return Err(DeployerError::InternalError( + "Risc0Verifier address is not set and risc0 is a required prover".to_string(), + )); + }; - let tdx_verifier_address = if opts.tdx_deploy_verifier { - info!("Deploying TDXVerifier (if tdx_deploy_verifier is true)"); - let tdx_verifier_address = - deploy_tdx_contracts(opts, on_chain_proposer_deployment.proxy_address)?; + // if it's a required proof type, but no address has been specify, deploy it. + let tdx_verifier_address = match opts.tdx_verifier_address { + Some(addr) if opts.tdx => addr, + None if opts.tdx => { + info!("Deploying TDXVerifier (if tdx_deploy_verifier is true)"); + let tdx_verifier_address = + deploy_tdx_contracts(opts, on_chain_proposer_deployment.proxy_address)?; - info!(address = %format!("{tdx_verifier_address:#x}"), "TDXVerifier deployed"); - tdx_verifier_address - } else { - opts.tdx_verifier_address - .ok_or(DeployerError::InternalError( - "TDXVerifier address is not set and tdx_deploy_verifier is false".to_string(), - ))? + info!(address = %format!("{tdx_verifier_address:#x}"), "TDXVerifier deployed"); + tdx_verifier_address + } + _ => Address::zero(), + }; + + // return error if no address was specified but verification with aligned is required. + let aligned_aggregator_address = match opts.aligned_aggregator_address { + Some(addr) if opts.aligned => addr, + None if opts.aligned => return Err(DeployerError::InternalError( + "Verification with Aligned Layer is required but no aggregator address was provided" + .to_string(), + )), + _ => Address::zero(), }; trace!( @@ -446,7 +454,7 @@ async fn deploy_contracts( risc0_verifier_address, tdx_verifier_address, sequencer_registry_address: sequencer_registry_deployment.proxy_address, - aligned_aggregator_address: opts.aligned_aggregator_address, + aligned_aggregator_address, }) } @@ -516,6 +524,10 @@ async fn initialize_contracts( let calldata_values = vec![ Value::Bool(opts.validium), Value::Address(deployer_address), + Value::Bool(opts.risc0), + Value::Bool(opts.sp1), + Value::Bool(opts.tdx), + Value::Bool(opts.aligned), Value::Address(contract_addresses.risc0_verifier_address), Value::Address(contract_addresses.sp1_verifier_address), Value::Address(contract_addresses.tdx_verifier_address), diff --git a/crates/l2/docker-compose-l2.yaml b/crates/l2/docker-compose-l2.yaml index 8a8bb2d6d53..a01754f25ea 100644 --- a/crates/l2/docker-compose-l2.yaml +++ b/crates/l2/docker-compose-l2.yaml @@ -31,16 +31,16 @@ services: - ETHREX_DEPLOYER_GENESIS_L2_PATH=${CI_ETHREX_WORKDIR}/fixtures/genesis/l2.json - ETHREX_DEPLOYER_PRIVATE_KEYS_FILE_PATH=${CI_ETHREX_WORKDIR}/fixtures/keys/private_keys_l1.txt - ETHREX_DEPLOYER_DEPLOY_RICH=${ETHREX_DEPLOYER_DEPLOY_RICH:-false} - - ETHREX_DEPLOYER_PICO_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_PICO_CONTRACT_VERIFIER:-0x00000000000000000000000000000000000000aa} - - ETHREX_DEPLOYER_PICO_DEPLOY_VERIFIER=${ETHREX_DEPLOYER_PICO_DEPLOY_VERIFIER:-false} - - ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER:-0x00000000000000000000000000000000000000aa} - - ETHREX_DEPLOYER_SP1_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_SP1_CONTRACT_VERIFIER:-0x00000000000000000000000000000000000000aa} - - ETHREX_DEPLOYER_SP1_DEPLOY_VERIFIER=${ETHREX_DEPLOYER_SP1_DEPLOY_VERIFIER:-false} - - ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=${ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS:-0x00000000000000000000000000000000000000aa} + - ETHREX_DEPLOYER_RISC0=${ETHREX_DEPLOYER_RISC0:-false} + - ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER} + - ETHREX_DEPLOYER_SP1=${ETHREX_DEPLOYER_SP1:-false} + - ETHREX_DEPLOYER_SP1_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_SP1_CONTRACT_VERIFIER} + - ETHREX_DEPLOYER_TDX=${ETHREX_DEPLOYER_TDX:-false} + - ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER} + - ETHREX_DEPLOYER_ALIGNED=${ETHREX_DEPLOYER_ALIGNED:-false} + - ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=${ETHREX_DEPLOYER_ALIGNED_CONTRACT_VERIFIER} - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk - ETHREX_RISC0_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk - - ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER:-0x00000000000000000000000000000000000000aa} - - ETHREX_DEPLOYER_TDX_DEPLOY_VERIFIER=${ETHREX_DEPLOYER_TDX_DEPLOY_VERIFIER:-false} - ETHREX_TDX_DEV_MODE=${ETHREX_TDX_DEV_MODE:-false} - ETHREX_ON_CHAIN_PROPOSER_OWNER=0x03d0a0aee676cc45bf7032649e0871927c947c8e - ETHREX_BRIDGE_OWNER=0x03d0a0aee676cc45bf7032649e0871927c947c8e diff --git a/docs/l2/aligned_mode.md b/docs/l2/aligned_mode.md index daad049c88f..6c1ae2632e7 100644 --- a/docs/l2/aligned_mode.md +++ b/docs/l2/aligned_mode.md @@ -4,7 +4,7 @@ This document explains how to run an Ethrex L2 node in **Aligned mode** and high ## How to Run -> [!IMPORTANT] +> [!IMPORTANT] > For this guide we assumed that there is an L1 running with all Aligned environment set. ### 1. Generate the SP1 ELF Program and Verification Key @@ -31,9 +31,7 @@ cargo run --release --bin ethrex_l2_l1_deployer --manifest-path contracts/Cargo. --genesis-l1-path \ --genesis-l2-path \ --contracts-path contracts \ - --sp1.verifier-address 0x00000000000000000000000000000000000000aa \ - --risc0.verifier-address 0x00000000000000000000000000000000000000aa \ - --tdx.verifier-address 0x00000000000000000000000000000000000000aa \ + --aligned \ --aligned.aggregator-address \ --bridge-owner
\ --on-chain-proposer-owner
\ @@ -43,7 +41,7 @@ cargo run --release --bin ethrex_l2_l1_deployer --manifest-path contracts/Cargo. ``` > [!NOTE] -> In this step we are initiallizing the `OnChainProposer` contract with the `ALIGNED_PROOF_AGGREGATOR_SERVICE_ADDRESS` and skipping the rest of verifiers. +> In this step we are initiallizing the `OnChainProposer` contract with the `ALIGNED_PROOF_AGGREGATOR_SERVICE_ADDRESS` and skipping the rest of verifiers. > Save the addresses of the deployed proxy contracts, as you will need them to run the L2 node. ### 3. Deposit funds to the `AlignedBatcherPaymentService` contract from the proof sender @@ -80,7 +78,7 @@ cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "l2 --proof-coordinator.addr \ --aligned \ --aligned-verifier-interval-ms \ - --beacon_url \ + --beacon_url \ --aligned-network \ --fee-estimate \ --aligned-sp1-elf-path @@ -123,7 +121,7 @@ git checkout tags/v0.16.1 prefunded_accounts: '{ "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266": { "balance": "100000000000000ETH" }, "0x70997970C51812dc3A010C7d01b50e0d17dc79C8": { "balance": "100000000000000ETH" }, - + ... "0xa0Ee7A142d267C1f36714E4a8F75612F20a79720": { "balance": "100000000000000ETH" }, + "0x4417092B70a3E5f10Dc504d0947DD256B965fc62": { "balance": "100000000000000ETH" }, @@ -142,7 +140,7 @@ cd aligned_layer make ethereum_package_start ``` -To stop it run `make ethereum_package_rm` +To stop it run `make ethereum_package_rm` 4. Start the batcher: @@ -173,9 +171,7 @@ cargo run --release --bin ethrex_l2_l1_deployer --manifest-path contracts/Cargo. --eth-rpc-url http://localhost:8545 \ --private-key 0x385c546456b6a603a1cfcaa9ec9494ba4832da08dd6bcf4de9a71e4a01b74924 \ --contracts-path contracts \ - --risc0.verifier-address 0x00000000000000000000000000000000000000aa \ - --sp1.verifier-address 0x00000000000000000000000000000000000000aa \ - --tdx.verifier-address 0x00000000000000000000000000000000000000aa \ + --aligned \ --aligned.aggregator-address 0xFD471836031dc5108809D173A067e8486B9047A3 \ --on-chain-proposer-owner 0x03d0a0aee676cc45bf7032649e0871927c947c8e \ --bridge-owner 0x03d0a0aee676cc45bf7032649e0871927c947c8e \ @@ -208,7 +204,7 @@ cd ethrex/crates/l2 ETHREX_PROOF_COORDINATOR_DEV_MODE=false cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "l2,rollup_storage_libmdbx,metrics" -- l2 init --watcher.block-delay 0 --network ../../fixtures/genesis/l2.json --http.port 1729 --http.addr 0.0.0.0 --evm levm --datadir dev_ethrex_l2 --l1.bridge-address --l1.on-chain-proposer-address --eth.rpc-url http://localhost:8545 --block-producer.coinbase-address 0x0007a881CD95B1484fca47615B64803dad620C8d --committer.l1-private-key 0x385c546456b6a603a1cfcaa9ec9494ba4832da08dd6bcf4de9a71e4a01b74924 --proof-coordinator.l1-private-key 0x39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d --proof-coordinator.addr 127.0.0.1 --aligned --aligned.beacon-url http://127.0.0.1:58801 --aligned-network devnet --aligned-sp1-elf-path prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf ``` -> [!IMPORTANT] +> [!IMPORTANT] > Set `BRIDGE_ADDRESS` and `ON_CHAIN_PROPOSER_ADDRESS` with the values printed in step 1. Suggestion: diff --git a/docs/l2/prover.md b/docs/l2/prover.md index fe6787ad0b2..d4995fac3cb 100644 --- a/docs/l2/prover.md +++ b/docs/l2/prover.md @@ -123,12 +123,14 @@ Two servers are required: one for the `Prover` and another for the `sequencer`. ETHREX_PROOF_COORDINATOR_LISTEN_ADDRESS=0.0.0.0 // Set to true to randomize the salt. ETHREX_DEPLOYER_RANDOMIZE_CONTRACT_DEPLOYMENT=true - // Check if the contract is deployed in your preferred network or set to `true` to deploy it. - ETHREX_DEPLOYER_SP1_DEPLOY_VERIFIER=true - // Check the if the contract is present on your preferred network. - ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER=
- // It can be deployed. Check the if the contract is present on your preferred network. + // Set to true if you want SP1 proofs to be required + ETHREX_DEPLOYER_SP1=true + // Check the if the verification contract is present on your preferred network. Don't define this if you want it to be deployed automatically. ETHREX_DEPLOYER_SP1_CONTRACT_VERIFIER=
+ // Set to true if you want proofs to be required + ETHREX_DEPLOYER_RISC0=true + // Check the if the contract is present on your preferred network. You shall deploy it manually if not. + ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER=
// Set to any L1 endpoint. ETHREX_ETH_RPC_URL= ``` diff --git a/docs/l2/tdx.md b/docs/l2/tdx.md index 291b1d83a1d..db624053bc5 100644 --- a/docs/l2/tdx.md +++ b/docs/l2/tdx.md @@ -58,7 +58,7 @@ Exports an image that uses [UKI](https://uapi-group.org/specifications/specs/uni ## Running -You can enable the prover by setting `ETHREX_DEPLOYER_TDX_DEPLOY_VERIFIER=true` and running the sequencer in production mode (`ETHREX_PROOF_COORDINATOR_DEV_MODE=false`). +You can enable the prover by setting `ETHREX_DEPLOYER_TDX=true` and running the sequencer in production mode (`ETHREX_PROOF_COORDINATOR_DEV_MODE=false`). For development purposes, you can use the flag `ETHREX_TDX_DEV_MODE=true` to disable quote verification. This allows you to run the quote generator even without having TDX-capable hardware. @@ -66,7 +66,7 @@ Ensure the proof coordinator is reachable at 172.17.0.1. You can bring up the ne ```sh // cd crates/l2 -make init ETHREX_DEPLOYER_TDX_DEPLOY_VERIFIER=true ETHREX_PROOF_COORDINATOR_DEV_MODE=false PROOF_COORDINATOR_ADDRESS=0.0.0.0 +make init ETHREX_DEPLOYER_TDX=true ETHREX_PROOF_COORDINATOR_DEV_MODE=false PROOF_COORDINATOR_ADDRESS=0.0.0.0 ``` And in another terminal, running the VM: From c8b08a5606652f7114bbc8de3ee3079ad589458d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 3 Jul 2025 15:59:54 -0300 Subject: [PATCH 055/236] take into account proof type --- .../l2/contracts/src/l1/OnChainProposer.sol | 77 +++++++++++++------ crates/l2/sequencer/l1_proof_sender.rs | 2 - crates/l2/sequencer/l1_proof_verifier.rs | 59 +++++++++----- 3 files changed, 95 insertions(+), 43 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 217a84f2d29..1f50f3c17f1 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -252,7 +252,10 @@ contract OnChainProposer is bytes calldata tdxPublicValues, bytes memory tdxSignature ) external override onlySequencer whenNotPaused { - require(!ALIGNED, "Batch verification should be done via Aligned Layer. Call verifyBatchesAligned() instead."); + require( + !ALIGNED, + "Batch verification should be done via Aligned Layer. Call verifyBatchesAligned() instead." + ); require( batchNumber == lastVerifiedBatch + 1, @@ -286,7 +289,10 @@ contract OnChainProposer is if (REQUIRE_TDX_PROOF) { // If the verification fails, it will revert. _verifyPublicData(batchNumber, tdxPublicValues); - ITDXVerifier(TDX_VERIFIER_ADDRESS).verify(tdxPublicValues, tdxSignature); + ITDXVerifier(TDX_VERIFIER_ADDRESS).verify( + tdxPublicValues, + tdxSignature + ); } lastVerifiedBatch = batchNumber; @@ -312,10 +318,15 @@ contract OnChainProposer is /// @inheritdoc IOnChainProposer function verifyBatchesAligned( uint256 firstBatchNumber, - bytes[] calldata alignedPublicInputsList, - bytes32[][] calldata alignedMerkleProofsList + bytes[] calldata sp1PublicInputsList, + bytes32[][] calldata sp1MerkleProofsList, + bytes[] calldata risc0PublicInputsList, + bytes32[][] calldata risc0MerkleProofsList ) external override onlySequencer whenNotPaused { - require(ALIGNED, "Batch verification should be done via smart contract verifiers. Call verifyBatch() instead."); + require( + ALIGNED, + "Batch verification should be done via smart contract verifiers. Call verifyBatch() instead." + ); require( alignedPublicInputsList.length == alignedMerkleProofsList.length, @@ -337,23 +348,21 @@ contract OnChainProposer is // Verify public data for the batch _verifyPublicData(batchNumber, alignedPublicInputsList[i][8:]); - bytes memory callData = abi.encodeWithSignature( - "verifyProofInclusion(bytes32[],bytes32,bytes)", - alignedMerkleProofsList[i], - SP1_VERIFICATION_KEY, - alignedPublicInputsList[i] - ); - (bool callResult, bytes memory response) = ALIGNEDPROOFAGGREGATOR - .staticcall(callData); - require( - callResult, - "OnChainProposer: call to ALIGNEDPROOFAGGREGATOR failed" - ); - bool proofVerified = abi.decode(response, (bool)); - require( - proofVerified, - "OnChainProposer: Aligned proof verification failed" - ); + // Verify inclusion in aggregated Aligned proof + if (REQUIRE_SP1_PROOF) { + _verifyProofInclusionAligned( + sp1MerkleProofsList[i], + SP1_VERIFICATION_KEY, + sp1PublicInputsList[i] + ); + } + if (REQUIRE_RISC0_PROOF) { + _verifyProofInclusionAligned( + risc0MerkleProofsList[i], + RISC0_VERIFICATION_KEY, + risc0PublicInputsList[i] + ); + } // The first 2 bytes are the number of transactions. uint16 privileged_transaction_count = uint16( @@ -423,6 +432,30 @@ contract OnChainProposer is ); } + function _verifyProofInclusionAligned( + bytes32[] calldata merkleProofsList, + bytes verificationKey, + bytes calldata publicInputsList + ) internal view { + bytes memory callData = abi.encodeWithSignature( + "verifyProofInclusion(bytes32[],bytes32,bytes)", + merkleProofsList[i], + verificationKey, + publicInputsList[i] + ); + (bool callResult, bytes memory response) = ALIGNEDPROOFAGGREGATOR + .staticcall(callData); + require( + callResult, + "OnChainProposer: call to ALIGNEDPROOFAGGREGATOR failed" + ); + bool proofVerified = abi.decode(response, (bool)); + require( + proofVerified, + "OnChainProposer: Aligned proof verification failed" + ); + } + /// @inheritdoc IOnChainProposer function revertBatch( uint256 batchNumber diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 6134380b528..95832bc1ffc 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -196,8 +196,6 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe } if missing_proof_types.is_empty() { - // TODO: we should put in code that if the prover is running with Aligned, then there - // shouldn't be any other required types. if state.aligned_mode { send_proof_to_aligned(state, batch_to_send, proofs.values()).await?; } else { diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index c4699907c50..d04d00c2895 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -28,7 +28,8 @@ use super::{ utils::{send_verify_tx, sleep_random}, }; -const ALIGNED_VERIFY_FUNCTION_SIGNATURE: &str = "verifyBatchesAligned(uint256,bytes[],bytes32[][])"; +const ALIGNED_VERIFY_FUNCTION_SIGNATURE: &str = + "verifyBatchesAligned(uint256,bytes[],bytes32[][],bytes[],bytes32[][])"; pub async fn start_l1_proof_verifier( cfg: SequencerConfig, @@ -169,22 +170,39 @@ impl L1ProofVerifier { } }; - let mut public_inputs_vec = Vec::new(); - let mut merkle_paths = Vec::new(); + let mut sp1_public_inputs_vec = Vec::new(); + let mut sp1_merkle_paths = Vec::new(); + let mut risc0_public_inputs_vec = Vec::new(); + let mut risc0_merkle_paths = Vec::new(); - for (public_inputs, merkle_path) in aggregated_proofs { + for (prover_type, public_inputs, merkle_path) in aggregated_proofs { let merkle_path = merkle_path .iter() .map(|x| Value::FixedBytes(bytes::Bytes::from_owner(*x))) .collect(); - public_inputs_vec.push(Value::Bytes(public_inputs.into())); - merkle_paths.push(Value::Array(merkle_path)); + match prover_type { + ProverType::SP1 => { + sp1_public_inputs_vec.push(Value::Bytes(public_inputs.into())); + sp1_merkle_paths.push(Value::Array(merkle_path)); + }, + ProverType::RISC0 => { + risc0_public_inputs_vec.push(Value::Bytes(public_inputs.into())); + risc0_merkle_paths.push(Value::Array(merkle_path)); + }, + unsupported_type => { + return Err(ProofVerifierError::UnsupportedProverType( + unsupported_type.to_string(), + )); + } + } } let calldata_values = [ Value::Uint(U256::from(first_batch_number)), - Value::Array(public_inputs_vec), - Value::Array(merkle_paths), + Value::Array(sp1_public_inputs_vec), + Value::Array(sp1_merkle_paths), + Value::Array(risc0_public_inputs_vec), + Value::Array(risc0_merkle_paths), ]; let calldata = encode_calldata(ALIGNED_VERIFY_FUNCTION_SIGNATURE, &calldata_values)?; @@ -229,28 +247,31 @@ impl L1ProofVerifier { } /// Receives an array of proofs. - /// Returns only those proofs that were aggregated by Aligned. + /// Returns merkle proofs for only those zk proofs that were aggregated by Aligned. async fn get_aggregated_proofs( &self, proofs: Vec<(u64, BatchProof)>, - ) -> Result, Vec<[u8; 32]>)>, ProofVerifierError> { + ) -> Result, Vec<[u8; 32]>)>, ProofVerifierError> { let mut aggregated_proofs = Vec::new(); for (batch_number, proof) in proofs { let public_inputs = proof.public_values(); - let vk = match proof.prover_type() { - ProverType::RISC0 => self.risc0_vk, - ProverType::SP1 => self.sp1_vk, + let prover_type = proof.prover_type(); + + let verification_data = match prover_type { + ProverType::RISC0 => AggregationModeVerificationData::Risc0 { + image_id: self.risc0_vk, + public_inputs: public_inputs.clone(), + }, + ProverType::SP1 => AggregationModeVerificationData::SP1 { + vk: self.sp1_vk, + public_inputs: public_inputs.clone(), + }, unsupported_type => { return Err(ProofVerifierError::UnsupportedProverType( unsupported_type.to_string(), )); } }; - - let verification_data = AggregationModeVerificationData::SP1 { - vk, - public_inputs: public_inputs.clone(), - }; let commitment = H256(verification_data.commitment()); if let Some((merkle_root, merkle_path)) = @@ -262,7 +283,7 @@ impl L1ProofVerifier { merkle_root = %format_args!("{merkle_root:#x}"), "Proof aggregated by Aligned" ); - aggregated_proofs.push((public_inputs, merkle_path)); + aggregated_proofs.push((prover_type, public_inputs, merkle_path)); } } Ok(aggregated_proofs) From 3a625c06b0a96479e81cf598aa174c7e4c526dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 3 Jul 2025 16:00:45 -0300 Subject: [PATCH 056/236] fix names --- crates/l2/storage/src/store_db/in_memory.rs | 6 +++--- crates/l2/storage/src/store_db/redb.rs | 4 ++-- crates/l2/storage/src/store_db/sql.rs | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/crates/l2/storage/src/store_db/in_memory.rs b/crates/l2/storage/src/store_db/in_memory.rs index 3de002e7c22..d8c97c0822b 100644 --- a/crates/l2/storage/src/store_db/in_memory.rs +++ b/crates/l2/storage/src/store_db/in_memory.rs @@ -31,7 +31,7 @@ struct StoreInner { /// Map of batch number to blob blobs: HashMap>, /// Lastest sent batch proof - lastest_sent_batch_proof: u64, + latest_sent_batch_proof: u64, /// Metrics for transaction, deposits and messages count operations_counts: [u64; 3], /// Map of block number to account updates @@ -233,14 +233,14 @@ impl StoreEngineRollup for Store { } async fn get_latest_sent_batch_proof(&self) -> Result { - Ok(self.inner()?.lastest_sent_batch_proof) + Ok(self.inner()?.latest_sent_batch_proof) } async fn set_latest_sent_batch_proof( &self, batch_number: u64, ) -> Result<(), RollupStoreError> { - self.inner()?.lastest_sent_batch_proof = batch_number; + self.inner()?.latest_sent_batch_proof = batch_number; Ok(()) } diff --git a/crates/l2/storage/src/store_db/redb.rs b/crates/l2/storage/src/store_db/redb.rs index d2ae9ac2751..5938a45f8b6 100644 --- a/crates/l2/storage/src/store_db/redb.rs +++ b/crates/l2/storage/src/store_db/redb.rs @@ -346,7 +346,7 @@ impl StoreEngineRollup for RedBStoreRollup { } } - async fn get_lastest_sent_batch_proof(&self) -> Result { + async fn get_latest_sent_batch_proof(&self) -> Result { Ok(self .read(LAST_SENT_BATCH_PROOF, 0) .await? @@ -354,7 +354,7 @@ impl StoreEngineRollup for RedBStoreRollup { .unwrap_or(0)) } - async fn set_lastest_sent_batch_proof( + async fn set_latest_sent_batch_proof( &self, batch_number: u64, ) -> Result<(), RollupStoreError> { diff --git a/crates/l2/storage/src/store_db/sql.rs b/crates/l2/storage/src/store_db/sql.rs index 54cd65bc27f..c1f142842db 100644 --- a/crates/l2/storage/src/store_db/sql.rs +++ b/crates/l2/storage/src/store_db/sql.rs @@ -402,7 +402,7 @@ impl StoreEngineRollup for SQLStore { messages_inc: u64, ) -> Result<(), RollupStoreError> { self.execute( - "UPDATE operation_count SET transactions = transactions + ?1, privileged_transactions = privileged_transactions + ?2, messages = messages + ?3", + "UPDATE operation_count SET transactions = transactions + ?1, privileged_transactions = privileged_transactions + ?2, messages = messages + ?3", (transaction_inc, privileged_transactions_inc, messages_inc)).await?; Ok(()) } @@ -429,7 +429,7 @@ impl StoreEngineRollup for SQLStore { Ok(row.next().await?.is_some()) } - async fn get_lastest_sent_batch_proof(&self) -> Result { + async fn get_latest_sent_batch_proof(&self) -> Result { let mut rows = self.query("SELECT * from latest_sent", ()).await?; if let Some(row) = rows.next().await? { return read_from_row_int(&row, 1); @@ -439,7 +439,7 @@ impl StoreEngineRollup for SQLStore { )) } - async fn set_lastest_sent_batch_proof( + async fn set_latest_sent_batch_proof( &self, batch_number: u64, ) -> Result<(), RollupStoreError> { From f4373fee4a129b1cc8992e162f5dec81c3050147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 3 Jul 2025 16:03:22 -0300 Subject: [PATCH 057/236] fmt --- crates/l2/common/src/prover.rs | 9 ++++++--- crates/l2/contracts/bin/deployer/cli.rs | 8 ++++---- crates/l2/sequencer/errors.rs | 2 +- crates/l2/sequencer/l1_proof_sender.rs | 2 +- crates/l2/sequencer/l1_proof_verifier.rs | 4 ++-- crates/l2/sequencer/mod.rs | 2 +- crates/l2/storage/src/api.rs | 3 +-- crates/l2/storage/src/store_db/in_memory.rs | 5 +---- crates/l2/storage/src/store_db/libmdbx.rs | 5 +---- crates/l2/storage/src/store_db/redb.rs | 5 +---- crates/l2/storage/src/store_db/sql.rs | 5 +---- 11 files changed, 20 insertions(+), 30 deletions(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index a5bb9b03e0c..ddf0cebd145 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -1,6 +1,9 @@ use aligned_sdk::common::types::ProvingSystemId; use serde::{Deserialize, Serialize}; -use std::{fmt::{Debug, Display}, path::PathBuf}; +use std::{ + fmt::{Debug, Display}, + path::PathBuf, +}; use crate::calldata::Value; @@ -73,7 +76,7 @@ impl ProverType { "{}/../../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf", env!("CARGO_MANIFEST_DIR") ), - _ => return None + _ => return None, }; std::fs::canonicalize(path).ok() } @@ -95,7 +98,7 @@ impl From for Option { match value { ProverType::RISC0 => Some(ProvingSystemId::Risc0), ProverType::SP1 => Some(ProvingSystemId::SP1), - _ => None + _ => None, } } } diff --git a/crates/l2/contracts/bin/deployer/cli.rs b/crates/l2/contracts/bin/deployer/cli.rs index 14649d9ba0d..5bb98923186 100644 --- a/crates/l2/contracts/bin/deployer/cli.rs +++ b/crates/l2/contracts/bin/deployer/cli.rs @@ -156,7 +156,7 @@ pub struct DeployerOptions { long = "risc0.verifier-address", value_name = "ADDRESS", env = "ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER", - help_heading = "Deployer options", + help_heading = "Deployer options" )] pub risc0_verifier_address: Option
, #[arg( @@ -173,7 +173,7 @@ pub struct DeployerOptions { long = "sp1.verifier-address", value_name = "ADDRESS", env = "ETHREX_DEPLOYER_SP1_CONTRACT_VERIFIER", - help_heading = "Deployer options", + help_heading = "Deployer options" )] pub sp1_verifier_address: Option
, #[arg( @@ -190,7 +190,7 @@ pub struct DeployerOptions { long = "tdx.verifier-address", value_name = "ADDRESS", env = "ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER", - help_heading = "Deployer options", + help_heading = "Deployer options" )] pub tdx_verifier_address: Option
, #[arg( @@ -207,7 +207,7 @@ pub struct DeployerOptions { long = "aligned.aggregator-address", value_name = "ADDRESS", env = "ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS", - help_heading = "Deployer options", + help_heading = "Deployer options" )] pub aligned_aggregator_address: Option
, #[arg( diff --git a/crates/l2/sequencer/errors.rs b/crates/l2/sequencer/errors.rs index 20b8b600e94..2a9c9dbeffc 100644 --- a/crates/l2/sequencer/errors.rs +++ b/crates/l2/sequencer/errors.rs @@ -163,7 +163,7 @@ pub enum ProofVerifierError { #[error("Block Producer failed because of a rollup store error: {0}")] RollupStoreError(#[from] RollupStoreError), #[error("Aligned does not support prover type {0}")] - UnsupportedProverType(String) + UnsupportedProverType(String), } #[derive(Debug, thiserror::Error)] diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 95832bc1ffc..c5c4dc36b36 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -96,7 +96,7 @@ impl L1ProofSenderState { l1_chain_id, network: aligned_cfg.network.clone(), fee_estimate, - aligned_mode: aligned_cfg.aligned_mode, + aligned_mode: aligned_cfg.aligned_mode, }) } } diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index d04d00c2895..07ea9d6f097 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -184,11 +184,11 @@ impl L1ProofVerifier { ProverType::SP1 => { sp1_public_inputs_vec.push(Value::Bytes(public_inputs.into())); sp1_merkle_paths.push(Value::Array(merkle_path)); - }, + } ProverType::RISC0 => { risc0_public_inputs_vec.push(Value::Bytes(public_inputs.into())); risc0_merkle_paths.push(Value::Array(merkle_path)); - }, + } unsupported_type => { return Err(ProofVerifierError::UnsupportedProverType( unsupported_type.to_string(), diff --git a/crates/l2/sequencer/mod.rs b/crates/l2/sequencer/mod.rs index 0ffcba9f270..816c0ac53f5 100644 --- a/crates/l2/sequencer/mod.rs +++ b/crates/l2/sequencer/mod.rs @@ -124,7 +124,7 @@ pub async fn start_l2( task_set.spawn(l1_proof_verifier::start_l1_proof_verifier( cfg.clone(), rollup_store.clone(), - needed_proof_types.clone() + needed_proof_types.clone(), )); } if cfg.based.based { diff --git a/crates/l2/storage/src/api.rs b/crates/l2/storage/src/api.rs index 477bc8c0fda..8898eb6cb7d 100644 --- a/crates/l2/storage/src/api.rs +++ b/crates/l2/storage/src/api.rs @@ -122,8 +122,7 @@ pub trait StoreEngineRollup: Debug + Send + Sync { async fn get_latest_sent_batch_proof(&self) -> Result; - async fn set_latest_sent_batch_proof(&self, batch_number: u64) - -> Result<(), RollupStoreError>; + async fn set_latest_sent_batch_proof(&self, batch_number: u64) -> Result<(), RollupStoreError>; async fn get_account_updates_by_block_number( &self, diff --git a/crates/l2/storage/src/store_db/in_memory.rs b/crates/l2/storage/src/store_db/in_memory.rs index d8c97c0822b..ca167078108 100644 --- a/crates/l2/storage/src/store_db/in_memory.rs +++ b/crates/l2/storage/src/store_db/in_memory.rs @@ -236,10 +236,7 @@ impl StoreEngineRollup for Store { Ok(self.inner()?.latest_sent_batch_proof) } - async fn set_latest_sent_batch_proof( - &self, - batch_number: u64, - ) -> Result<(), RollupStoreError> { + async fn set_latest_sent_batch_proof(&self, batch_number: u64) -> Result<(), RollupStoreError> { self.inner()?.latest_sent_batch_proof = batch_number; Ok(()) } diff --git a/crates/l2/storage/src/store_db/libmdbx.rs b/crates/l2/storage/src/store_db/libmdbx.rs index 52c3c9a4168..5caef951b4e 100644 --- a/crates/l2/storage/src/store_db/libmdbx.rs +++ b/crates/l2/storage/src/store_db/libmdbx.rs @@ -313,10 +313,7 @@ impl StoreEngineRollup for Store { .map(|v| v.unwrap_or(0)) } - async fn set_latest_sent_batch_proof( - &self, - batch_number: u64, - ) -> Result<(), RollupStoreError> { + async fn set_latest_sent_batch_proof(&self, batch_number: u64) -> Result<(), RollupStoreError> { self.write::(0, batch_number).await } diff --git a/crates/l2/storage/src/store_db/redb.rs b/crates/l2/storage/src/store_db/redb.rs index 5938a45f8b6..5e0bb67b9c3 100644 --- a/crates/l2/storage/src/store_db/redb.rs +++ b/crates/l2/storage/src/store_db/redb.rs @@ -354,10 +354,7 @@ impl StoreEngineRollup for RedBStoreRollup { .unwrap_or(0)) } - async fn set_latest_sent_batch_proof( - &self, - batch_number: u64, - ) -> Result<(), RollupStoreError> { + async fn set_latest_sent_batch_proof(&self, batch_number: u64) -> Result<(), RollupStoreError> { self.write(LAST_SENT_BATCH_PROOF, 0, batch_number).await } diff --git a/crates/l2/storage/src/store_db/sql.rs b/crates/l2/storage/src/store_db/sql.rs index c1f142842db..ba2a12645eb 100644 --- a/crates/l2/storage/src/store_db/sql.rs +++ b/crates/l2/storage/src/store_db/sql.rs @@ -439,10 +439,7 @@ impl StoreEngineRollup for SQLStore { )) } - async fn set_latest_sent_batch_proof( - &self, - batch_number: u64, - ) -> Result<(), RollupStoreError> { + async fn set_latest_sent_batch_proof(&self, batch_number: u64) -> Result<(), RollupStoreError> { self.execute("UPDATE latest_sent SET batch = ?1", (0, batch_number)) .await?; Ok(()) From 9f67b6f7a1707e3b76d75579f161622df9918470 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 3 Jul 2025 16:05:21 -0300 Subject: [PATCH 058/236] typo --- crates/l2/contracts/bin/deployer/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index ed1f60c2cf3..aee12a1f4d9 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -204,7 +204,7 @@ async fn deploy_contracts( Default::default() }; - // if it's a required proof type, but no address has been specify, deploy it. + // if it's a required proof type, but no address has been specified, deploy it. let sp1_verifier_address = match opts.sp1_verifier_address { Some(addr) if opts.sp1 => addr, None if opts.sp1 => { @@ -231,7 +231,7 @@ async fn deploy_contracts( )); }; - // if it's a required proof type, but no address has been specify, deploy it. + // if it's a required proof type, but no address has been specified, deploy it. let tdx_verifier_address = match opts.tdx_verifier_address { Some(addr) if opts.tdx => addr, None if opts.tdx => { From c1b2d846301dceb9028c105cbedcf891b68a4a81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 3 Jul 2025 16:39:48 -0300 Subject: [PATCH 059/236] remove aligned-sdk from ethrex-l2-common --- Cargo.lock | 1 - crates/l2/common/Cargo.toml | 1 - crates/l2/common/src/prover.rs | 11 - .../l2/prover/zkvm/interface/risc0/Cargo.lock | 3046 +---------------- crates/l2/sequencer/l1_proof_sender.rs | 8 +- 5 files changed, 86 insertions(+), 2981 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 68a90ceeb02..ab562afc3e3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3880,7 +3880,6 @@ dependencies = [ name = "ethrex-l2-common" version = "0.1.0" dependencies = [ - "aligned-sdk", "bytes", "ethereum-types 0.15.1", "ethrex-common", diff --git a/crates/l2/common/Cargo.toml b/crates/l2/common/Cargo.toml index 1052c727240..1b5a2c4fe96 100644 --- a/crates/l2/common/Cargo.toml +++ b/crates/l2/common/Cargo.toml @@ -15,7 +15,6 @@ thiserror.workspace = true keccak-hash.workspace = true serde.workspace = true lazy_static.workspace = true -aligned-sdk.workspace = true lambdaworks-crypto.workspace = true sha3.workspace = true diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index ddf0cebd145..fc58dc7bb63 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -1,4 +1,3 @@ -use aligned_sdk::common::types::ProvingSystemId; use serde::{Deserialize, Serialize}; use std::{ fmt::{Debug, Display}, @@ -93,16 +92,6 @@ impl Display for ProverType { } } -impl From for Option { - fn from(value: ProverType) -> Self { - match value { - ProverType::RISC0 => Some(ProvingSystemId::Risc0), - ProverType::SP1 => Some(ProvingSystemId::SP1), - _ => None, - } - } -} - /// Contains the proof data recently created by the prover. /// It can be either a `ProofCalldata` ready to be sent to the on-chain verifier or a `ProofBytes` /// to be sent to Aligned. diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock index 1117c5d7367..fe0ec4a9efd 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock @@ -2,16 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - [[package]] name = "addchain" version = "0.2.0" @@ -38,17 +28,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - [[package]] name = "ahash" version = "0.8.12" @@ -70,28 +49,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "aligned-sdk" -version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.16.1#d6c5ffd0b7e4952724c4ee167187bf0945238d0d" -dependencies = [ - "ciborium", - "dialoguer", - "ethers", - "futures-util", - "hex", - "lambdaworks-crypto 0.12.0", - "log", - "reqwest 0.12.22", - "serde", - "serde_json", - "serde_repr", - "sha3", - "tokio", - "tokio-tungstenite 0.23.1", - "url", -] - [[package]] name = "allocator-api2" version = "0.2.21" @@ -138,7 +95,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "crc", - "thiserror 2.0.12", + "thiserror", ] [[package]] @@ -162,7 +119,7 @@ dependencies = [ "alloy-rlp", "k256", "serde", - "thiserror 2.0.12", + "thiserror", ] [[package]] @@ -276,7 +233,7 @@ dependencies = [ "itertools 0.14.0", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror", ] [[package]] @@ -290,7 +247,7 @@ dependencies = [ "alloy-serde", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror", ] [[package]] @@ -815,15 +772,6 @@ dependencies = [ "serde", ] -[[package]] -name = "ascii-canvas" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" -dependencies = [ - "term", -] - [[package]] name = "async-trait" version = "0.1.88" @@ -835,23 +783,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "async_io_stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" -dependencies = [ - "futures", - "pharos", - "rustc_version 0.4.1", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - [[package]] name = "aurora-engine-modexp" version = "1.2.0" @@ -900,18 +831,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -924,12 +843,6 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" -[[package]] -name = "bech32" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" - [[package]] name = "bincode" version = "1.3.3" @@ -939,30 +852,15 @@ dependencies = [ "serde", ] -[[package]] -name = "bit-set" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" -dependencies = [ - "bit-vec 0.6.3", -] - [[package]] name = "bit-set" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "bit-vec 0.8.0", + "bit-vec", ] -[[package]] -name = "bit-vec" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" - [[package]] name = "bit-vec" version = "0.8.0" @@ -1016,7 +914,7 @@ dependencies = [ "arrayvec", "cc", "cfg-if", - "constant_time_eq 0.3.1", + "constant_time_eq", ] [[package]] @@ -1082,16 +980,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "sha2", - "tinyvec", -] - [[package]] name = "bumpalo" version = "3.19.0" @@ -1139,26 +1027,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bzip2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" -dependencies = [ - "bzip2-sys", - "libc", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.13+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" -dependencies = [ - "cc", - "pkg-config", -] - [[package]] name = "c-kzg" version = "1.0.3" @@ -1179,32 +1047,6 @@ name = "camino" version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.26", - "serde", - "serde_json", - "thiserror 1.0.69", -] [[package]] name = "cc" @@ -1212,8 +1054,6 @@ version = "1.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" dependencies = [ - "jobserver", - "libc", "shlex", ] @@ -1242,43 +1082,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - [[package]] name = "clap" version = "4.5.40" @@ -1325,59 +1128,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "thiserror 2.0.12", -] - -[[package]] -name = "coins-bip32" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" -dependencies = [ - "bs58", - "coins-core", - "digest 0.10.7", - "hmac", - "k256", - "serde", - "sha2", - "thiserror 1.0.69", -] - -[[package]] -name = "coins-bip39" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" -dependencies = [ - "bitvec", - "coins-bip32", - "hmac", - "once_cell", - "pbkdf2 0.12.2", - "rand 0.8.5", - "sha2", - "thiserror 1.0.69", -] - -[[package]] -name = "coins-core" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" -dependencies = [ - "base64 0.21.7", - "bech32", - "bs58", - "digest 0.10.7", - "generic-array", - "hex", - "ripemd", - "serde", - "serde_derive", - "sha2", - "sha3", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -1386,19 +1137,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" -[[package]] -name = "console" -version = "0.15.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" -dependencies = [ - "encode_unicode", - "libc", - "once_cell", - "unicode-width", - "windows-sys 0.59.0", -] - [[package]] name = "const-hex" version = "1.14.1" @@ -1438,12 +1176,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - [[package]] name = "constant_time_eq" version = "0.3.1" @@ -1572,15 +1304,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - [[package]] name = "darling" version = "0.20.11" @@ -1616,12 +1339,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "data-encoding" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" - [[package]] name = "datatest-stable" version = "0.2.10" @@ -1709,19 +1426,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "dialoguer" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" -dependencies = [ - "console", - "shell-words", - "tempfile", - "thiserror 1.0.69", - "zeroize", -] - [[package]] name = "digest" version = "0.9.0" @@ -1743,59 +1447,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "downcast-rs" version = "1.2.1" @@ -1886,81 +1537,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" [[package]] -name = "ena" -version = "0.14.3" +name = "enum-ordinalize" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" dependencies = [ - "log", + "enum-ordinalize-derive", ] [[package]] -name = "encode_unicode" -version = "1.0.0" +name = "enum-ordinalize-derive" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] [[package]] -name = "encoding_rs" -version = "0.8.35" +name = "enumn" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ - "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] -name = "enr" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" -dependencies = [ - "base64 0.21.7", - "bytes", - "hex", - "k256", - "log", - "rand 0.8.5", - "rlp 0.5.2", - "serde", - "sha3", - "zeroize", -] - -[[package]] -name = "enum-ordinalize" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" -dependencies = [ - "enum-ordinalize-derive", -] - -[[package]] -name = "enum-ordinalize-derive" -version = "4.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "enumn" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "equivalent" -version = "1.0.2" +name = "equivalent" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" @@ -1980,60 +1589,6 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5692dd7b5a1978a5aeb0ce83b7655c58ca8efdcb79d21036ea249da95afec2c6" -[[package]] -name = "eth-keystore" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" -dependencies = [ - "aes", - "ctr", - "digest 0.10.7", - "hex", - "hmac", - "pbkdf2 0.11.0", - "rand 0.8.5", - "scrypt", - "serde", - "serde_json", - "sha2", - "sha3", - "thiserror 1.0.69", - "uuid", -] - -[[package]] -name = "ethabi" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" -dependencies = [ - "ethereum-types 0.14.1", - "hex", - "once_cell", - "regex", - "serde", - "serde_json", - "sha3", - "thiserror 1.0.69", - "uint 0.9.5", -] - -[[package]] -name = "ethbloom" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" -dependencies = [ - "crunchy", - "fixed-hash", - "impl-codec 0.6.0", - "impl-rlp 0.3.0", - "impl-serde 0.4.0", - "scale-info", - "tiny-keccak", -] - [[package]] name = "ethbloom" version = "0.14.1" @@ -2042,290 +1597,25 @@ checksum = "8c321610643004cf908ec0f5f2aa0d8f1f8e14b540562a2887a1111ff1ecbf7b" dependencies = [ "crunchy", "fixed-hash", - "impl-rlp 0.4.0", - "impl-serde 0.5.0", + "impl-rlp", + "impl-serde", "tiny-keccak", ] -[[package]] -name = "ethereum-types" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" -dependencies = [ - "ethbloom 0.13.0", - "fixed-hash", - "impl-codec 0.6.0", - "impl-rlp 0.3.0", - "impl-serde 0.4.0", - "primitive-types 0.12.2", - "scale-info", - "uint 0.9.5", -] - [[package]] name = "ethereum-types" version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ab15ed80916029f878e0267c3a9f92b67df55e79af370bf66199059ae2b4ee3" dependencies = [ - "ethbloom 0.14.1", + "ethbloom", "fixed-hash", - "impl-rlp 0.4.0", - "impl-serde 0.5.0", + "impl-rlp", + "impl-serde", "primitive-types 0.13.1", "uint 0.10.0", ] -[[package]] -name = "ethers" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816841ea989f0c69e459af1cf23a6b0033b19a55424a1ea3a30099becdb8dec0" -dependencies = [ - "ethers-addressbook", - "ethers-contract", - "ethers-core", - "ethers-etherscan", - "ethers-middleware", - "ethers-providers", - "ethers-signers", - "ethers-solc", -] - -[[package]] -name = "ethers-addressbook" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5495afd16b4faa556c3bba1f21b98b4983e53c1755022377051a975c3b021759" -dependencies = [ - "ethers-core", - "once_cell", - "serde", - "serde_json", -] - -[[package]] -name = "ethers-contract" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fceafa3578c836eeb874af87abacfb041f92b4da0a78a5edd042564b8ecdaaa" -dependencies = [ - "const-hex", - "ethers-contract-abigen", - "ethers-contract-derive", - "ethers-core", - "ethers-providers", - "futures-util", - "once_cell", - "pin-project", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "ethers-contract-abigen" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04ba01fbc2331a38c429eb95d4a570166781f14290ef9fdb144278a90b5a739b" -dependencies = [ - "Inflector", - "const-hex", - "dunce", - "ethers-core", - "ethers-etherscan", - "eyre", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "reqwest 0.11.27", - "serde", - "serde_json", - "syn 2.0.104", - "toml", - "walkdir", -] - -[[package]] -name = "ethers-contract-derive" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87689dcabc0051cde10caaade298f9e9093d65f6125c14575db3fd8c669a168f" -dependencies = [ - "Inflector", - "const-hex", - "ethers-contract-abigen", - "ethers-core", - "proc-macro2", - "quote", - "serde_json", - "syn 2.0.104", -] - -[[package]] -name = "ethers-core" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" -dependencies = [ - "arrayvec", - "bytes", - "cargo_metadata", - "chrono", - "const-hex", - "elliptic-curve", - "ethabi", - "generic-array", - "k256", - "num_enum", - "once_cell", - "open-fastrlp", - "rand 0.8.5", - "rlp 0.5.2", - "serde", - "serde_json", - "strum", - "syn 2.0.104", - "tempfile", - "thiserror 1.0.69", - "tiny-keccak", - "unicode-xid", -] - -[[package]] -name = "ethers-etherscan" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79e5973c26d4baf0ce55520bd732314328cabe53193286671b47144145b9649" -dependencies = [ - "chrono", - "ethers-core", - "reqwest 0.11.27", - "semver 1.0.26", - "serde", - "serde_json", - "thiserror 1.0.69", - "tracing", -] - -[[package]] -name = "ethers-middleware" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f9fdf09aec667c099909d91908d5eaf9be1bd0e2500ba4172c1d28bfaa43de" -dependencies = [ - "async-trait", - "auto_impl", - "ethers-contract", - "ethers-core", - "ethers-etherscan", - "ethers-providers", - "ethers-signers", - "futures-channel", - "futures-locks", - "futures-util", - "instant", - "reqwest 0.11.27", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tracing", - "tracing-futures", - "url", -] - -[[package]] -name = "ethers-providers" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6434c9a33891f1effc9c75472e12666db2fa5a0fec4b29af6221680a6fe83ab2" -dependencies = [ - "async-trait", - "auto_impl", - "base64 0.21.7", - "bytes", - "const-hex", - "enr", - "ethers-core", - "futures-channel", - "futures-core", - "futures-timer", - "futures-util", - "hashers", - "http 0.2.12", - "instant", - "jsonwebtoken", - "once_cell", - "pin-project", - "reqwest 0.11.27", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tokio-tungstenite 0.20.1", - "tracing", - "tracing-futures", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "ws_stream_wasm", -] - -[[package]] -name = "ethers-signers" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228875491c782ad851773b652dd8ecac62cda8571d3bc32a5853644dd26766c2" -dependencies = [ - "async-trait", - "coins-bip32", - "coins-bip39", - "const-hex", - "elliptic-curve", - "eth-keystore", - "ethers-core", - "rand 0.8.5", - "sha2", - "thiserror 1.0.69", - "tracing", -] - -[[package]] -name = "ethers-solc" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66244a771d9163282646dbeffe0e6eca4dda4146b6498644e678ac6089b11edd" -dependencies = [ - "cfg-if", - "const-hex", - "dirs", - "dunce", - "ethers-core", - "glob", - "home", - "md-5", - "num_cpus", - "once_cell", - "path-slash", - "rayon", - "regex", - "semver 1.0.26", - "serde", - "serde_json", - "solang-parser", - "svm-rs", - "thiserror 1.0.69", - "tiny-keccak", - "tokio", - "tracing", - "walkdir", - "yansi", -] - [[package]] name = "ethrex-blockchain" version = "0.1.0" @@ -2340,7 +1630,7 @@ dependencies = [ "k256", "secp256k1", "sha3", - "thiserror 2.0.12", + "thiserror", "tokio", "tokio-util", "tracing", @@ -2353,7 +1643,7 @@ dependencies = [ "bytes", "c-kzg", "crc32fast", - "ethereum-types 0.15.1", + "ethereum-types", "ethrex-rlp", "ethrex-trie", "hex", @@ -2367,7 +1657,7 @@ dependencies = [ "serde", "serde_json", "sha3", - "thiserror 2.0.12", + "thiserror", "tinyvec", "tracing", ] @@ -2376,20 +1666,19 @@ dependencies = [ name = "ethrex-l2-common" version = "0.1.0" dependencies = [ - "aligned-sdk", "bytes", - "ethereum-types 0.15.1", + "ethereum-types", "ethrex-common", "ethrex-rlp", "ethrex-storage", "ethrex-trie", "ethrex-vm", "keccak-hash", - "lambdaworks-crypto 0.11.0", + "lambdaworks-crypto", "lazy_static", "serde", "sha3", - "thiserror 2.0.12", + "thiserror", ] [[package]] @@ -2404,7 +1693,7 @@ dependencies = [ "ethrex-rlp", "k256", "keccak-hash", - "lambdaworks-math 0.11.0", + "lambdaworks-math", "lazy_static", "num-bigint 0.4.6", "p256", @@ -2414,7 +1703,7 @@ dependencies = [ "serde_json", "sha2", "sha3", - "thiserror 2.0.12", + "thiserror", "walkdir", ] @@ -2425,7 +1714,7 @@ dependencies = [ "ethrex-common", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror", ] [[package]] @@ -2433,11 +1722,11 @@ name = "ethrex-rlp" version = "0.1.0" dependencies = [ "bytes", - "ethereum-types 0.15.1", + "ethereum-types", "hex", "lazy_static", "snap", - "thiserror 2.0.12", + "thiserror", "tinyvec", ] @@ -2449,7 +1738,7 @@ dependencies = [ "async-trait", "bincode", "bytes", - "ethereum-types 0.15.1", + "ethereum-types", "ethrex-common", "ethrex-rlp", "ethrex-trie", @@ -2457,7 +1746,7 @@ dependencies = [ "serde", "serde_json", "sha3", - "thiserror 2.0.12", + "thiserror", "tracing", ] @@ -2468,7 +1757,7 @@ dependencies = [ "anyhow", "bytes", "digest 0.10.7", - "ethereum-types 0.15.1", + "ethereum-types", "ethrex-rlp", "hex", "lazy_static", @@ -2476,7 +1765,7 @@ dependencies = [ "serde_json", "sha3", "smallvec", - "thiserror 2.0.12", + "thiserror", "tracing", ] @@ -2489,7 +1778,7 @@ dependencies = [ "cfg-if", "derive_more 1.0.0", "dyn-clone", - "ethereum-types 0.15.1", + "ethereum-types", "ethrex-common", "ethrex-levm", "ethrex-rlp", @@ -2501,27 +1790,17 @@ dependencies = [ "revm-primitives", "serde", "sha3", - "thiserror 2.0.12", + "thiserror", "tracing", ] -[[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] - [[package]] name = "fancy-regex" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298" dependencies = [ - "bit-set 0.8.0", + "bit-set", "regex-automata", "regex-syntax", ] @@ -2594,22 +1873,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - [[package]] name = "fnv" version = "1.0.7" @@ -2622,15 +1885,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared 0.1.1", -] - [[package]] name = "foreign-types" version = "0.5.0" @@ -2638,7 +1892,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ "foreign-types-macros", - "foreign-types-shared 0.3.1", + "foreign-types-shared", ] [[package]] @@ -2652,101 +1906,24 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "foreign-types-shared" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fs2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "funty" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - [[package]] name = "futures-core" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-locks" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" -dependencies = [ - "futures-channel", - "futures-task", -] - [[package]] name = "futures-macro" version = "0.3.31" @@ -2770,43 +1947,20 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" -dependencies = [ - "gloo-timers", - "send_wrapper 0.4.0", -] - [[package]] name = "futures-util" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ - "futures-channel", "futures-core", - "futures-io", "futures-macro", - "futures-sink", "futures-task", - "memchr", "pin-project-lite", "pin-utils", "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "gcd" version = "2.3.0" @@ -2831,10 +1985,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.11.1+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] @@ -2861,18 +2013,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" -[[package]] -name = "gloo-timers" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - [[package]] name = "group" version = "0.13.0" @@ -2884,54 +2024,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.10.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "h2" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http 1.3.1", - "indexmap 2.10.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "half" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" -dependencies = [ - "cfg-if", - "crunchy", -] - [[package]] name = "hashbrown" version = "0.12.3" @@ -2949,15 +2041,6 @@ dependencies = [ "serde", ] -[[package]] -name = "hashers" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" -dependencies = [ - "fxhash", -] - [[package]] name = "heck" version = "0.5.0" @@ -3003,199 +2086,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "home" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http 1.3.1", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http 1.3.1", - "http-body 1.0.1", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2 0.4.11", - "http 1.3.1", - "http-body 1.0.1", - "httparse", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" -dependencies = [ - "http 1.3.1", - "hyper 1.6.0", - "hyper-util", - "rustls 0.23.28", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.26.2", - "tower-service", -] - -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper 1.6.0", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "hyper 1.6.0", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2", - "system-configuration 0.6.1", - "tokio", - "tower-service", - "tracing", - "windows-registry", -] - [[package]] name = "iana-time-zone" version = "0.1.63" @@ -3220,119 +2110,12 @@ dependencies = [ "cc", ] -[[package]] -name = "icu_collections" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" - -[[package]] -name = "icu_properties" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "potential_utf", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" - -[[package]] -name = "icu_provider" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" -dependencies = [ - "displaydoc", - "icu_locale_core", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - [[package]] name = "ident_case" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -[[package]] -name = "idna" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - [[package]] name = "impl-codec" version = "0.6.0" @@ -3351,15 +2134,6 @@ dependencies = [ "parity-scale-codec", ] -[[package]] -name = "impl-rlp" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" -dependencies = [ - "rlp 0.5.2", -] - [[package]] name = "impl-rlp" version = "0.4.0" @@ -3369,15 +2143,6 @@ dependencies = [ "rlp 0.6.1", ] -[[package]] -name = "impl-serde" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" -dependencies = [ - "serde", -] - [[package]] name = "impl-serde" version = "0.5.0" @@ -3404,12 +2169,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee796ad498c8d9a1d68e477df8f754ed784ef875de1414ebdaf169f70a6a784" -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - [[package]] name = "indexmap" version = "1.9.3" @@ -3432,24 +2191,6 @@ dependencies = [ "serde", ] -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "generic-array", -] - -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - [[package]] name = "io-uring" version = "0.7.8" @@ -3461,22 +2202,6 @@ dependencies = [ "libc", ] -[[package]] -name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "iri-string" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -3492,15 +2217,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.12.1" @@ -3534,38 +2250,14 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" -[[package]] -name = "jobserver" -version = "0.1.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" -dependencies = [ - "getrandom 0.3.3", - "libc", -] - [[package]] name = "js-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "jsonwebtoken" -version = "8.3.0" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ - "base64 0.21.7", - "pem", - "ring 0.16.20", - "serde", - "serde_json", - "simple_asn1", + "once_cell", + "wasm-bindgen", ] [[package]] @@ -3622,37 +2314,7 @@ dependencies = [ "serde_arrays", "sha2", "sp1_bls12_381", - "spin 0.9.8", -] - -[[package]] -name = "lalrpop" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" -dependencies = [ - "ascii-canvas", - "bit-set 0.5.3", - "ena", - "itertools 0.11.0", - "lalrpop-util", - "petgraph", - "regex", - "regex-syntax", - "string_cache", - "term", - "tiny-keccak", - "unicode-xid", - "walkdir", -] - -[[package]] -name = "lalrpop-util" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" -dependencies = [ - "regex-automata", + "spin", ] [[package]] @@ -3661,20 +2323,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ec4b462bbec171e1af821f3d9fff72e17de93b3d1022f29aa70fec8262c1cee" dependencies = [ - "lambdaworks-math 0.11.0", - "serde", - "sha2", - "sha3", -] - -[[package]] -name = "lambdaworks-crypto" -version = "0.12.0" -source = "git+https://github.com/lambdaclass/lambdaworks.git?rev=5f8f2cfcc8a1a22f77e8dff2d581f1166eefb80b#5f8f2cfcc8a1a22f77e8dff2d581f1166eefb80b" -dependencies = [ - "lambdaworks-math 0.12.0", - "rand 0.8.5", - "rand_chacha 0.3.1", + "lambdaworks-math", "serde", "sha2", "sha3", @@ -3691,24 +2340,13 @@ dependencies = [ "serde_json", ] -[[package]] -name = "lambdaworks-math" -version = "0.12.0" -source = "git+https://github.com/lambdaclass/lambdaworks.git?rev=5f8f2cfcc8a1a22f77e8dff2d581f1166eefb80b#5f8f2cfcc8a1a22f77e8dff2d581f1166eefb80b" -dependencies = [ - "getrandom 0.2.16", - "rand 0.8.5", - "serde", - "serde_json", -] - [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin 0.9.8", + "spin", ] [[package]] @@ -3723,16 +2361,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" -[[package]] -name = "libredox" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" -dependencies = [ - "bitflags 2.9.1", - "libc", -] - [[package]] name = "libtest-mimic" version = "0.8.1" @@ -3751,22 +2379,6 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" -[[package]] -name = "litemap" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" - -[[package]] -name = "lock_api" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" -dependencies = [ - "autocfg", - "scopeguard", -] - [[package]] name = "log" version = "0.4.27" @@ -3793,16 +2405,6 @@ dependencies = [ "libc", ] -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest 0.10.7", -] - [[package]] name = "memchr" version = "2.7.5" @@ -3830,18 +2432,12 @@ dependencies = [ "bitflags 2.9.1", "block", "core-graphics-types", - "foreign-types 0.5.0", + "foreign-types", "log", "objc", "paste", ] -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -3862,29 +2458,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "native-tls" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - [[package]] name = "no_std_strings" version = "0.1.3" @@ -3992,28 +2565,6 @@ dependencies = [ "libc", ] -[[package]] -name = "num_enum" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" -dependencies = [ - "num_enum_derive", - "rustversion", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "nybbles" version = "0.3.4" @@ -4055,81 +2606,6 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" -[[package]] -name = "open-fastrlp" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" -dependencies = [ - "arrayvec", - "auto_impl", - "bytes", - "ethereum-types 0.14.1", - "open-fastrlp-derive", -] - -[[package]] -name = "open-fastrlp-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" -dependencies = [ - "bytes", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "openssl" -version = "0.10.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" -dependencies = [ - "bitflags 2.9.1", - "cfg-if", - "foreign-types 0.3.2", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - [[package]] name = "p256" version = "0.13.2" @@ -4291,83 +2767,12 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "parking_lot" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "password-hash" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "path-slash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" - -[[package]] -name = "pbkdf2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" -dependencies = [ - "digest 0.10.7", - "hmac", - "password-hash", - "sha2", -] - -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest 0.10.7", - "hmac", -] - -[[package]] -name = "pem" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" -dependencies = [ - "base64 0.13.1", -] - [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -4377,12 +2782,6 @@ dependencies = [ "base64ct", ] -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - [[package]] name = "pest" version = "2.8.1" @@ -4390,92 +2789,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" dependencies = [ "memchr", - "thiserror 2.0.12", + "thiserror", "ucd-trie", ] -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap 2.10.0", -] - -[[package]] -name = "pharos" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" -dependencies = [ - "futures", - "rustc_version 0.4.1", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "pin-project-lite" version = "0.2.16" @@ -4498,12 +2815,6 @@ dependencies = [ "spki", ] -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - [[package]] name = "postcard" version = "1.1.2" @@ -4516,15 +2827,6 @@ dependencies = [ "serde", ] -[[package]] -name = "potential_utf" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" -dependencies = [ - "zerovec", -] - [[package]] name = "powerfmt" version = "0.2.0" @@ -4540,22 +2842,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "prettyplease" -version = "0.2.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a" -dependencies = [ - "proc-macro2", - "syn 2.0.104", -] - [[package]] name = "primeorder" version = "0.13.6" @@ -4573,9 +2859,6 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec 0.6.0", - "impl-rlp 0.3.0", - "impl-serde 0.4.0", - "scale-info", "uint 0.9.5", ] @@ -4587,8 +2870,8 @@ checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" dependencies = [ "fixed-hash", "impl-codec 0.7.1", - "impl-rlp 0.4.0", - "impl-serde 0.5.0", + "impl-rlp", + "impl-serde", "uint 0.10.0", ] @@ -4638,8 +2921,8 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" dependencies = [ - "bit-set 0.8.0", - "bit-vec 0.8.0", + "bit-set", + "bit-vec", "bitflags 2.9.1", "lazy_static", "num-traits", @@ -4768,26 +3051,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "redox_syscall" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.16", - "libredox", - "thiserror 1.0.69", -] - [[package]] name = "ref-cast" version = "1.0.24" @@ -4808,18 +3071,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - [[package]] name = "regex-automata" version = "0.4.9" @@ -4837,87 +3088,6 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls 0.21.12", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration 0.5.1", - "tokio", - "tokio-rustls 0.24.1", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", - "winreg", -] - -[[package]] -name = "reqwest" -version = "0.12.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" -dependencies = [ - "base64 0.22.1", - "bytes", - "encoding_rs", - "futures-core", - "h2 0.4.11", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.6.0", - "hyper-rustls 0.27.7", - "hyper-tls", - "hyper-util", - "js-sys", - "log", - "mime", - "native-tls", - "percent-encoding", - "pin-project-lite", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 1.0.2", - "tokio", - "tokio-native-tls", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "revm" version = "19.7.0" @@ -4948,7 +3118,7 @@ dependencies = [ "revm", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror", ] [[package]] @@ -5009,35 +3179,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", -] - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.16", - "libc", - "untrusted 0.9.0", - "windows-sys 0.52.0", -] - [[package]] name = "ripemd" version = "0.1.3" @@ -5104,7 +3245,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c80e0a8f0f56106295bb682dbc27093438e163a5f6384a79e877ab895a11d9ae" dependencies = [ "anyhow", - "bit-vec 0.8.0", + "bit-vec", "bytemuck", "derive_more 2.0.1", "paste", @@ -5232,7 +3373,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ "bytes", - "rlp-derive", "rustc-hex", ] @@ -5246,17 +3386,6 @@ dependencies = [ "rustc-hex", ] -[[package]] -name = "rlp-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "rrs-lib" version = "0.1.0" @@ -5349,70 +3478,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring 0.17.14", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.23.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" -dependencies = [ - "once_cell", - "rustls-pki-types", - "rustls-webpki 0.103.3", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-pki-types" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" -dependencies = [ - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring 0.17.14", - "untrusted 0.9.0", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" -dependencies = [ - "ring 0.17.14", - "rustls-pki-types", - "untrusted 0.9.0", -] - [[package]] name = "rustversion" version = "1.0.21" @@ -5437,15 +3502,6 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" -[[package]] -name = "salsa20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" -dependencies = [ - "cipher", -] - [[package]] name = "same-file" version = "1.0.6" @@ -5455,39 +3511,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scale-info" -version = "2.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" -dependencies = [ - "cfg-if", - "derive_more 1.0.0", - "parity-scale-codec", - "scale-info-derive", -] - -[[package]] -name = "scale-info-derive" -version = "2.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "schannel" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "schemars" version = "0.9.0" @@ -5512,34 +3535,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scrypt" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" -dependencies = [ - "hmac", - "pbkdf2 0.11.0", - "salsa20", - "sha2", -] - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring 0.17.14", - "untrusted 0.9.0", -] - [[package]] name = "sec1" version = "0.7.3" @@ -5573,29 +3568,6 @@ dependencies = [ "cc", ] -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.9.1", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "semver" version = "0.11.0" @@ -5623,18 +3595,6 @@ dependencies = [ "pest", ] -[[package]] -name = "send_wrapper" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" - -[[package]] -name = "send_wrapper" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" - [[package]] name = "serde" version = "1.0.219" @@ -5677,45 +3637,13 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - [[package]] name = "serde_with" version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" dependencies = [ - "base64 0.22.1", + "base64", "chrono", "hex", "indexmap 1.9.3", @@ -5741,17 +3669,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - [[package]] name = "sha2" version = "0.10.8" @@ -5782,12 +3699,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "shell-words" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" - [[package]] name = "shlex" version = "1.3.0" @@ -5801,26 +3712,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "simple_asn1" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" -dependencies = [ - "num-bigint 0.4.6", - "num-traits", - "thiserror 2.0.12", - "time", -] - -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + "rand_core 0.6.4", +] [[package]] name = "slab" @@ -5843,30 +3736,6 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "solang-parser" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" -dependencies = [ - "itertools 0.11.0", - "lalrpop", - "lalrpop-util", - "phf", - "thiserror 1.0.69", - "unicode-xid", -] - [[package]] name = "sp1-lib" version = "5.0.5" @@ -5913,12 +3782,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -5945,58 +3808,18 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared", - "precomputed-hash", -] - [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.104", -] - [[package]] name = "substrate-bn" version = "0.6.0" @@ -6016,26 +3839,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "svm-rs" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11297baafe5fa0c99d5722458eac6a5e25c01eb1b8e5cd137f54079093daa7a4" -dependencies = [ - "dirs", - "fs2", - "hex", - "once_cell", - "reqwest 0.11.27", - "semver 1.0.26", - "serde", - "serde_json", - "sha2", - "thiserror 1.0.69", - "url", - "zip", -] - [[package]] name = "syn" version = "1.0.109" @@ -6070,74 +3873,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] - -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys 0.5.0", -] - -[[package]] -name = "system-configuration" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" -dependencies = [ - "bitflags 2.9.1", - "core-foundation", - "system-configuration-sys 0.6.0", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "tap" version = "1.0.1" @@ -6157,44 +3892,13 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "term" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" -dependencies = [ - "dirs-next", - "rustversion", - "winapi", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - [[package]] name = "thiserror" version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl 2.0.12", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", + "thiserror-impl", ] [[package]] @@ -6257,30 +3961,11 @@ dependencies = [ "crunchy", ] -[[package]] -name = "tinystr" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" -dependencies = [ - "displaydoc", - "zerovec", -] - [[package]] name = "tinyvec" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" @@ -6289,85 +3974,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1140bb80481756a8cbe10541f37433b459c5aa1e727b4c020fbfebdc25bf3ec4" dependencies = [ "backtrace", - "bytes", "io-uring", "libc", "mio", "pin-project-lite", "slab", - "socket2", - "tokio-macros", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-macros" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" -dependencies = [ - "rustls 0.23.28", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" -dependencies = [ - "futures-util", - "log", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", - "tungstenite 0.20.1", - "webpki-roots", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" -dependencies = [ - "futures-util", - "log", - "native-tls", - "tokio", - "tokio-native-tls", - "tungstenite 0.23.0", ] [[package]] @@ -6385,26 +3996,11 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - [[package]] name = "toml_datetime" version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", -] [[package]] name = "toml_edit" @@ -6413,64 +4009,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap 2.10.0", - "serde", - "serde_spanned", "toml_datetime", - "toml_write", "winnow", ] -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - -[[package]] -name = "tower" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper 1.0.2", - "tokio", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-http" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" -dependencies = [ - "bitflags 2.9.1", - "bytes", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "iri-string", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - [[package]] name = "tracing" version = "0.1.41" @@ -6491,81 +4033,26 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", -] - -[[package]] -name = "tracing-core" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "tracing-core", + "syn 2.0.104", ] [[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "tungstenite" -version = "0.20.1" +name = "tracing-core" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 0.2.12", - "httparse", - "log", - "rand 0.8.5", - "rustls 0.21.12", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", + "once_cell", + "valuable", ] [[package]] -name = "tungstenite" -version = "0.23.0" +name = "tracing-subscriber" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 1.3.1", - "httparse", - "log", - "native-tls", - "rand 0.8.5", - "sha1", - "thiserror 1.0.69", - "utf-8", + "tracing-core", ] [[package]] @@ -6622,81 +4109,24 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" -[[package]] -name = "unicode-width" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" - [[package]] name = "unicode-xid" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom 0.2.16", - "serde", -] - [[package]] name = "valuable" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.5" @@ -6722,15 +4152,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -6772,19 +4193,6 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" -dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" version = "0.2.100" @@ -6817,38 +4225,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "web-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" version = "0.1.9" @@ -6858,12 +4234,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows-core" version = "0.61.2" @@ -6905,17 +4275,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" -[[package]] -name = "windows-registry" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" -dependencies = [ - "windows-link", - "windows-result", - "windows-strings", -] - [[package]] name = "windows-result" version = "0.3.4" @@ -6934,24 +4293,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.59.0" @@ -6970,21 +4311,6 @@ dependencies = [ "windows-targets 0.53.2", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -7017,12 +4343,6 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -7035,12 +4355,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -7053,12 +4367,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -7083,12 +4391,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -7101,12 +4403,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -7119,12 +4415,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -7137,12 +4427,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -7164,16 +4448,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "wit-bindgen-rt" version = "0.39.0" @@ -7183,31 +4457,6 @@ dependencies = [ "bitflags 2.9.1", ] -[[package]] -name = "writeable" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" - -[[package]] -name = "ws_stream_wasm" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c173014acad22e83f16403ee360115b38846fe754e735c5d9d3803fe70c6abc" -dependencies = [ - "async_io_stream", - "futures", - "js-sys", - "log", - "pharos", - "rustc_version 0.4.1", - "send_wrapper 0.6.0", - "thiserror 2.0.12", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "wyz" version = "0.5.1" @@ -7217,36 +4466,6 @@ dependencies = [ "tap", ] -[[package]] -name = "yansi" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" - -[[package]] -name = "yoke" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", - "synstructure", -] - [[package]] name = "zerocopy" version = "0.8.26" @@ -7267,27 +4486,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", - "synstructure", -] - [[package]] name = "zeroize" version = "1.8.1" @@ -7308,59 +4506,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "zerotrie" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "zip" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" -dependencies = [ - "aes", - "byteorder", - "bzip2", - "constant_time_eq 0.1.5", - "crc32fast", - "crossbeam-utils", - "flate2", - "hmac", - "pbkdf2 0.11.0", - "sha1", - "time", - "zstd", -] - [[package]] name = "zkvm-risc0-program" version = "0.1.0" @@ -7390,34 +4535,5 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.12", -] - -[[package]] -name = "zstd" -version = "0.11.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" -dependencies = [ - "cc", - "pkg-config", + "thiserror", ] diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index c5c4dc36b36..745b1ec261c 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -26,7 +26,7 @@ use crate::{ sequencer::errors::ProofSenderError, }; use aligned_sdk::{ - common::types::{FeeEstimationType, Network, VerificationData}, + common::types::{FeeEstimationType, Network, ProvingSystemId, VerificationData}, verification_layer::{estimate_fee as aligned_estimate_fee, get_nonce_from_batcher, submit}, }; @@ -238,8 +238,10 @@ async fn send_proof_to_aligned( let wallet = wallet.with_chain_id(state.l1_chain_id); for batch_proof in batch_proofs { - let Some(proving_system) = batch_proof.prover_type().into() else { - continue; + let proving_system = match batch_proof.prover_type() { + ProverType::RISC0 => ProvingSystemId::Risc0, + ProverType::SP1 => ProvingSystemId::SP1, + _ => continue }; debug!( From 8d79d4dd98ca3f473edc9f4d3b33e693d7594391 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 3 Jul 2025 17:15:26 -0300 Subject: [PATCH 060/236] fmt --- crates/l2/prover/zkvm/interface/risc0/src/main.rs | 2 +- crates/l2/sequencer/l1_proof_sender.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/prover/zkvm/interface/risc0/src/main.rs b/crates/l2/prover/zkvm/interface/risc0/src/main.rs index ff09471826d..c88e2d31faa 100644 --- a/crates/l2/prover/zkvm/interface/risc0/src/main.rs +++ b/crates/l2/prover/zkvm/interface/risc0/src/main.rs @@ -1,5 +1,5 @@ use risc0_zkvm::guest::env; -use zkvm_interface::{io::ProgramInput, execution::execution_program}; +use zkvm_interface::{execution::execution_program, io::ProgramInput}; fn main() { let input: ProgramInput = env::read(); diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 745b1ec261c..dbcd09b0216 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -241,7 +241,7 @@ async fn send_proof_to_aligned( let proving_system = match batch_proof.prover_type() { ProverType::RISC0 => ProvingSystemId::Risc0, ProverType::SP1 => ProvingSystemId::SP1, - _ => continue + _ => continue, }; debug!( From 5645ee5ce0a305efeb5be5fa50517718847c69d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 3 Jul 2025 17:20:48 -0300 Subject: [PATCH 061/236] fix verifyProofInclusionAligned --- crates/l2/contracts/src/l1/OnChainProposer.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 1f50f3c17f1..ac18f3ba70f 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -439,9 +439,9 @@ contract OnChainProposer is ) internal view { bytes memory callData = abi.encodeWithSignature( "verifyProofInclusion(bytes32[],bytes32,bytes)", - merkleProofsList[i], + merkleProofsList, verificationKey, - publicInputsList[i] + publicInputsList ); (bool callResult, bytes memory response) = ALIGNEDPROOFAGGREGATOR .staticcall(callData); From 03cfe5d22f17d21485518700d98a6751a55d1d46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 11:12:48 -0300 Subject: [PATCH 062/236] rewrite verify_proofs_aggregation logic --- .../l2/contracts/src/l1/OnChainProposer.sol | 32 ++- crates/l2/sequencer/l1_proof_verifier.rs | 237 ++++++++++-------- 2 files changed, 148 insertions(+), 121 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index ac18f3ba70f..70a7391bce7 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -318,49 +318,55 @@ contract OnChainProposer is /// @inheritdoc IOnChainProposer function verifyBatchesAligned( uint256 firstBatchNumber, - bytes[] calldata sp1PublicInputsList, + bytes[] calldata publicInputsList, bytes32[][] calldata sp1MerkleProofsList, - bytes[] calldata risc0PublicInputsList, bytes32[][] calldata risc0MerkleProofsList ) external override onlySequencer whenNotPaused { require( ALIGNED, "Batch verification should be done via smart contract verifiers. Call verifyBatch() instead." ); - - require( - alignedPublicInputsList.length == alignedMerkleProofsList.length, - "OnChainProposer: input/proof array length mismatch" - ); - require( - firstBatchNumber == lastVerifiedBatch + 1, + require( firstBatchNumber == lastVerifiedBatch + 1, "OnChainProposer: incorrect first batch number" ); + if (REQUIRE_SP1_PROOF) { + require( + publicInputsList.length == sp1MerkleProofsList.length, + "OnChainProposer: SP1 input/proof array length mismatch" + ); + } + if (REQUIRE_RISC0_PROOF) { + require( + publicInputsList.length == risc0MerkleProofsList.length, + "OnChainProposer: Risc0 input/proof array length mismatch" + ); + } + uint256 batchNumber = firstBatchNumber; - for (uint256 i = 0; i < alignedPublicInputsList.length; i++) { + for (uint256 i = 0; i < publicInputsList.length; i++) { require( batchCommitments[batchNumber].newStateRoot != bytes32(0), "OnChainProposer: cannot verify an uncommitted batch" ); // Verify public data for the batch - _verifyPublicData(batchNumber, alignedPublicInputsList[i][8:]); + _verifyPublicData(batchNumber, publicInputsList[i][8:]); // Verify inclusion in aggregated Aligned proof if (REQUIRE_SP1_PROOF) { _verifyProofInclusionAligned( sp1MerkleProofsList[i], SP1_VERIFICATION_KEY, - sp1PublicInputsList[i] + publicInputsList[i] ); } if (REQUIRE_RISC0_PROOF) { _verifyProofInclusionAligned( risc0MerkleProofsList[i], RISC0_VERIFICATION_KEY, - risc0PublicInputsList[i] + publicInputsList[i] ); } diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index 07ea9d6f097..726c64f332b 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -1,3 +1,5 @@ +use std::collections::HashMap; + use aligned_sdk::{ aggregation_layer::{ AggregationModeVerificationData, ProofStatus, ProofVerificationAggModeError, @@ -6,16 +8,13 @@ use aligned_sdk::{ common::types::Network, }; use ethrex_common::{Address, H256, U256}; -use ethrex_l2_common::{ - calldata::Value, - prover::{BatchProof, ProverType}, -}; +use ethrex_l2_common::{calldata::Value, prover::ProverType}; use ethrex_l2_sdk::calldata::encode_calldata; use ethrex_rpc::EthClient; use ethrex_storage_rollup::StoreRollup; use reqwest::Url; use secp256k1::SecretKey; -use tracing::{error, info}; +use tracing::{error, info, warn}; use crate::{ CommitterConfig, EthConfig, ProofCoordinatorConfig, SequencerConfig, @@ -29,7 +28,7 @@ use super::{ }; const ALIGNED_VERIFY_FUNCTION_SIGNATURE: &str = - "verifyBatchesAligned(uint256,bytes[],bytes32[][],bytes[],bytes32[][])"; + "verifyBatchesAligned(uint256,bytes[],bytes32[][],bytes32[][])"; pub async fn start_l1_proof_verifier( cfg: SequencerConfig, @@ -149,60 +148,144 @@ impl L1ProofVerifier { Ok(()) } + /// Checks that all consecutive batches starting from `first_batch_number` have been + /// verified and aggregated in Aligned Layer. async fn verify_proofs_aggregation( &self, first_batch_number: u64, ) -> Result, ProofVerifierError> { - let proofs = self.get_available_proofs(first_batch_number).await?; - let aggregated_proofs = self.get_aggregated_proofs(proofs).await?; + let mut public_inputs_list = Vec::new(); + let mut sp1_merkle_proofs_list = Vec::new(); + let mut risc0_merkle_proofs_list = Vec::new(); - let aggregated_proofs_count = u64::try_from(aggregated_proofs.len()) - .map_err(|e| ProofVerifierError::InternalError(e.to_string()))?; + let mut batch_number = first_batch_number; + loop { + let mut proofs_for_batch = HashMap::new(); + for prover_type in &self.needed_proof_types { + if let Some(proof) = self + .rollup_store + .get_proof_by_batch_and_type(batch_number, *prover_type) + .await? + { + proofs_for_batch.insert(*prover_type, proof); + } else { + break; + } + } - match aggregated_proofs_count { - 0 => return Ok(None), - 1 => info!("Sending verify tx for batch {first_batch_number}"), - n => { - info!( - "Sending verify tx for batches {first_batch_number} to {}", - first_batch_number + n - 1 - ); + // break if not all required proof types have been found for this batch + if proofs_for_batch.len() != self.needed_proof_types.len() { + break; } - }; - let mut sp1_public_inputs_vec = Vec::new(); - let mut sp1_merkle_paths = Vec::new(); - let mut risc0_public_inputs_vec = Vec::new(); - let mut risc0_merkle_paths = Vec::new(); - - for (prover_type, public_inputs, merkle_path) in aggregated_proofs { - let merkle_path = merkle_path - .iter() - .map(|x| Value::FixedBytes(bytes::Bytes::from_owner(*x))) - .collect(); - match prover_type { - ProverType::SP1 => { - sp1_public_inputs_vec.push(Value::Bytes(public_inputs.into())); - sp1_merkle_paths.push(Value::Array(merkle_path)); - } - ProverType::RISC0 => { - risc0_public_inputs_vec.push(Value::Bytes(public_inputs.into())); - risc0_merkle_paths.push(Value::Array(merkle_path)); + let mut aggregated_proofs_for_batch = HashMap::new(); + let mut current_batch_public_inputs = None; + + for (prover_type, proof) in proofs_for_batch { + let public_inputs = proof.public_values(); + + if let Some(ref existing_pi) = current_batch_public_inputs { + if *existing_pi != public_inputs { + return Err(ProofVerifierError::InternalError(format!( + "Mismatched public inputs for batch {batch_number}" + ))); + } + } else { + current_batch_public_inputs = Some(public_inputs.clone()); } - unsupported_type => { - return Err(ProofVerifierError::UnsupportedProverType( - unsupported_type.to_string(), - )); + + let verification_data = match prover_type { + ProverType::SP1 => AggregationModeVerificationData::SP1 { + vk: self.sp1_vk, + public_inputs: public_inputs.clone(), + }, + ProverType::RISC0 => AggregationModeVerificationData::Risc0 { + image_id: self.risc0_vk, + public_inputs: public_inputs.clone(), + }, + unsupported_type => { + return Err(ProofVerifierError::UnsupportedProverType( + unsupported_type.to_string(), + )); + } + }; + + if let Some((merkle_root, merkle_path)) = + self.check_proof_aggregation(verification_data).await? + { + info!( + ?batch_number, + ?prover_type, + merkle_root = %format_args!("{merkle_root:#x}"), + "Proof aggregated by Aligned" + ); + aggregated_proofs_for_batch.insert(prover_type, merkle_path); + } else { + warn!( + ?batch_number, + ?prover_type, + "Proof has not been aggregated by Aligned, aborting" + ); + break; } } + + // break if not all required proof types have been aggregated for this batch + if aggregated_proofs_for_batch.len() != self.needed_proof_types.len() { + break; + } + + if let Some(public_inputs) = current_batch_public_inputs { + public_inputs_list.push(Value::Bytes(public_inputs.into())); + + let sp1_path = aggregated_proofs_for_batch + .get(&ProverType::SP1) + .map(|path| { + Value::Array( + path.iter() + .map(|p| Value::FixedBytes(bytes::Bytes::from_owner(*p))) + .collect(), + ) + }) + .unwrap_or_else(|| Value::Array(vec![])); + sp1_merkle_proofs_list.push(sp1_path); + + let risc0_path = aggregated_proofs_for_batch + .get(&ProverType::RISC0) + .map(|path| { + Value::Array( + path.iter() + .map(|p| Value::FixedBytes(bytes::Bytes::from_owner(*p))) + .collect(), + ) + }) + .unwrap_or_else(|| Value::Array(vec![])); + risc0_merkle_proofs_list.push(risc0_path); + } else { + break; + } + + batch_number += 1; + } + + if public_inputs_list.is_empty() { + return Ok(None); } + let num_batches: u64 = public_inputs_list.len().try_into().map_err(|_| { + ProofVerifierError::InternalError("Failed to convert num_batches into u64".to_string()) + })?; + info!( + "Sending verify tx for batches {} to {}", + first_batch_number, + first_batch_number + num_batches - 1 + ); + let calldata_values = [ Value::Uint(U256::from(first_batch_number)), - Value::Array(sp1_public_inputs_vec), - Value::Array(sp1_merkle_paths), - Value::Array(risc0_public_inputs_vec), - Value::Array(risc0_merkle_paths), + Value::Array(public_inputs_list), + Value::Array(sp1_merkle_proofs_list), + Value::Array(risc0_merkle_proofs_list), ]; let calldata = encode_calldata(ALIGNED_VERIFY_FUNCTION_SIGNATURE, &calldata_values)?; @@ -217,7 +300,7 @@ impl L1ProofVerifier { .await?; // Store the verify transaction hash for each batch that was aggregated. - for i in 0..aggregated_proofs_count { + for i in 0..num_batches { let batch_number = first_batch_number + i; self.rollup_store .store_verify_tx_by_batch(batch_number, verify_tx_hash) @@ -227,68 +310,6 @@ impl L1ProofVerifier { Ok(Some(verify_tx_hash)) } - /// Returns all proofs that have already been generated, starting from the given batch number. - async fn get_available_proofs( - &self, - mut batch_number: u64, - ) -> Result, ProofVerifierError> { - let mut proofs = Vec::new(); - for prover_type in &self.needed_proof_types { - while let Some(proof) = self - .rollup_store - .get_proof_by_batch_and_type(batch_number, *prover_type) - .await? - { - proofs.push((batch_number, proof)); - batch_number += 1; - } - } - Ok(proofs) - } - - /// Receives an array of proofs. - /// Returns merkle proofs for only those zk proofs that were aggregated by Aligned. - async fn get_aggregated_proofs( - &self, - proofs: Vec<(u64, BatchProof)>, - ) -> Result, Vec<[u8; 32]>)>, ProofVerifierError> { - let mut aggregated_proofs = Vec::new(); - for (batch_number, proof) in proofs { - let public_inputs = proof.public_values(); - let prover_type = proof.prover_type(); - - let verification_data = match prover_type { - ProverType::RISC0 => AggregationModeVerificationData::Risc0 { - image_id: self.risc0_vk, - public_inputs: public_inputs.clone(), - }, - ProverType::SP1 => AggregationModeVerificationData::SP1 { - vk: self.sp1_vk, - public_inputs: public_inputs.clone(), - }, - unsupported_type => { - return Err(ProofVerifierError::UnsupportedProverType( - unsupported_type.to_string(), - )); - } - }; - let commitment = H256(verification_data.commitment()); - - if let Some((merkle_root, merkle_path)) = - self.check_proof_aggregation(verification_data).await? - { - info!( - ?batch_number, - commitment = %format_args!("{commitment:#x}"), - merkle_root = %format_args!("{merkle_root:#x}"), - "Proof aggregated by Aligned" - ); - aggregated_proofs.push((prover_type, public_inputs, merkle_path)); - } - } - Ok(aggregated_proofs) - } - /// Checks if the received proof was aggregated by Aligned. async fn check_proof_aggregation( &self, From e83a5452f17a92b865405bddf99423224b1f2ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 11:40:48 -0300 Subject: [PATCH 063/236] don't require vk path (use default) --- crates/l2/contracts/bin/deployer/cli.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/l2/contracts/bin/deployer/cli.rs b/crates/l2/contracts/bin/deployer/cli.rs index 5bb98923186..b53481a8dba 100644 --- a/crates/l2/contracts/bin/deployer/cli.rs +++ b/crates/l2/contracts/bin/deployer/cli.rs @@ -148,7 +148,6 @@ pub struct DeployerOptions { value_name = "BOOLEAN", env = "ETHREX_L2_RISC0", help_heading = "Deployer options", - requires = "risc0_vk_path", help = "If true, L2 will require Risc0 proofs to validate batch proofs and settle state." )] pub risc0: bool, @@ -165,7 +164,6 @@ pub struct DeployerOptions { value_name = "BOOLEAN", env = "ETHREX_L2_SP1", help_heading = "Deployer options", - requires = "sp1_vk_path", help = "If true, L2 will require SP1 proofs to validate batch proofs and settle state." )] pub sp1: bool, From 555bea4651eadf96ccd85eda591e0e98dc02eb1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 11:41:40 -0300 Subject: [PATCH 064/236] add calldata --- crates/l2/contracts/src/l1/OnChainProposer.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 70a7391bce7..44deb0fef72 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -440,7 +440,7 @@ contract OnChainProposer is function _verifyProofInclusionAligned( bytes32[] calldata merkleProofsList, - bytes verificationKey, + bytes calldata verificationKey, bytes calldata publicInputsList ) internal view { bytes memory callData = abi.encodeWithSignature( From 4326a21e17105dd0d3c9cbf8d729249d56d224b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 11:44:03 -0300 Subject: [PATCH 065/236] contract fixes --- crates/l2/contracts/src/l1/OnChainProposer.sol | 2 +- .../contracts/src/l1/interfaces/IOnChainProposer.sol | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 44deb0fef72..0c1a99753ab 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -440,7 +440,7 @@ contract OnChainProposer is function _verifyProofInclusionAligned( bytes32[] calldata merkleProofsList, - bytes calldata verificationKey, + bytes32 verificationKey, bytes calldata publicInputsList ) internal view { bytes memory callData = abi.encodeWithSignature( diff --git a/crates/l2/contracts/src/l1/interfaces/IOnChainProposer.sol b/crates/l2/contracts/src/l1/interfaces/IOnChainProposer.sol index 149e2ad0040..896be027d51 100644 --- a/crates/l2/contracts/src/l1/interfaces/IOnChainProposer.sol +++ b/crates/l2/contracts/src/l1/interfaces/IOnChainProposer.sol @@ -83,12 +83,14 @@ interface IOnChainProposer { /// @notice Method used to verify a sequence of L2 batches in Aligned, starting from `firstBatchNumber`. /// Each proof corresponds to one batch, and batch numbers must increase by 1 sequentially. /// @param firstBatchNumber The batch number of the first proof to verify. Must be `lastVerifiedBatch + 1`. - /// @param alignedPublicInputsList An array of public input bytes, one per proof. - /// @param alignedMerkleProofsList An array of Merkle proofs (sibling hashes), one per proof. + /// @param publicInputsList An array of public input bytes, one per proof. + /// @param sp1MerkleProofsList An array of Merkle proofs (sibling hashes), one per SP1 proof. + /// @param risc0MerkleProofsList An array of Merkle proofs (sibling hashes), one per Risc0 proof. function verifyBatchesAligned( uint256 firstBatchNumber, - bytes[] calldata alignedPublicInputsList, - bytes32[][] calldata alignedMerkleProofsList + bytes[] calldata publicInputsList, + bytes32[][] calldata sp1MerkleProofsList, + bytes32[][] calldata risc0MerkleProofsList ) external; /// @notice Allows unverified batches to be reverted From 0d5aa3cf35b55c37c7391b87f827747c2f372000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 11:55:35 -0300 Subject: [PATCH 066/236] fix risc0 verifier address check --- crates/l2/contracts/bin/deployer/main.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index aee12a1f4d9..a0d39295249 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -208,7 +208,7 @@ async fn deploy_contracts( let sp1_verifier_address = match opts.sp1_verifier_address { Some(addr) if opts.sp1 => addr, None if opts.sp1 => { - info!("Deploying SP1Verifier (if sp1_deploy_verifier is true)"); + info!("Deploying SP1Verifier"); let (verifier_deployment_tx_hash, sp1_verifier_address) = deploy_contract( &[], &opts.contracts_path.join("solc_out/SP1Verifier.bin"), @@ -225,10 +225,15 @@ async fn deploy_contracts( }; // we can't deploy the risc0 contract because of uncompatible licenses - let Some(risc0_verifier_address) = opts.risc0_verifier_address else { - return Err(DeployerError::InternalError( - "Risc0Verifier address is not set and risc0 is a required prover".to_string(), - )); + let risc0_verifier_address = match opts.risc0_verifier_address { + Some(addr) if opts.risc0 => addr, + None if opts.risc0 => { + return Err(DeployerError::InternalError( + "Risc0Verifier address is not set and risc0 is a required prover".to_string(), + )); + } + + _ => Address::zero(), }; // if it's a required proof type, but no address has been specified, deploy it. From b190cbff17bec41e91e52ca8cb0c5099246600a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 11:56:30 -0300 Subject: [PATCH 067/236] fmt --- crates/l2/contracts/bin/deployer/main.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index a0d39295249..ecc67aa5e5a 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -232,7 +232,6 @@ async fn deploy_contracts( "Risc0Verifier address is not set and risc0 is a required prover".to_string(), )); } - _ => Address::zero(), }; From bcdc854c8e3ab21c4191cc0c34267aa991afd26c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 14:38:01 -0300 Subject: [PATCH 068/236] fix init calldata --- crates/l2/contracts/bin/deployer/main.rs | 27 +++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index ecc67aa5e5a..82ad329b81d 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -312,15 +312,10 @@ fn read_tdx_deployment_address(name: &str) -> Address { Address::from_str(&contents).unwrap_or(Address::zero()) } -fn read_vk(path: &str) -> Bytes { +fn read_vk(path: &str) -> Result { std::fs::read(path) - .unwrap_or_else(|_| { - warn!( - ?path, - "Failed to read verification key file, will use 0x00..00, this is expected in dev mode" - ); - vec![0u8; 32] - }).into() + .map(|bytes| bytes.into()) + .map_err(DeployerError::from) } async fn initialize_contracts( @@ -338,8 +333,16 @@ async fn initialize_contracts( .ok_or(DeployerError::FailedToGetStringFromPath)?, ); - let sp1_vk = read_vk(&opts.sp1_vk_path); - let risc0_vk = read_vk(&opts.risc0_vk_path); + let sp1_vk = if opts.sp1 { + read_vk(&opts.sp1_vk_path)? + } else { + Bytes::new() + }; + let risc0_vk = if opts.risc0 { + read_vk(&opts.risc0_vk_path)? + } else { + Bytes::new() + }; let deployer_address = get_address_from_secret_key(&opts.private_key)?; @@ -405,6 +408,10 @@ async fn initialize_contracts( let calldata_values = vec![ Value::Bool(opts.validium), Value::Address(deployer_address), + Value::Bool(opts.risc0), + Value::Bool(opts.sp1), + Value::Bool(opts.tdx), + Value::Bool(opts.aligned), Value::Address(contract_addresses.risc0_verifier_address), Value::Address(contract_addresses.sp1_verifier_address), Value::Address(contract_addresses.tdx_verifier_address), From e0337072bb27527091a5fa115c115be09d7b8e33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 14:55:59 -0300 Subject: [PATCH 069/236] fix get_needed_proof_types() --- crates/l2/common/src/prover.rs | 6 +++--- crates/l2/sequencer/utils.rs | 21 +++++++-------------- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index fc58dc7bb63..0f98c5315ff 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -58,9 +58,9 @@ impl ProverType { pub fn verifier_getter(&self) -> Option { // These values have to match with the OnChainProposer.sol contract match self { - Self::RISC0 => Some("R0VERIFIER()".to_string()), - Self::SP1 => Some("SP1VERIFIER()".to_string()), - Self::TDX => Some("TDXVERIFIER()".to_string()), + Self::RISC0 => Some("REQUIRE_RISC0_PROOF()".to_string()), + Self::SP1 => Some("REQUIRE_SP1_PROOF()".to_string()), + Self::TDX => Some("REQUIRE_TDX_PROOF()".to_string()), Self::Exec => None, } } diff --git a/crates/l2/sequencer/utils.rs b/crates/l2/sequencer/utils.rs index 9bbc3706a7e..ca71d892267 100644 --- a/crates/l2/sequencer/utils.rs +++ b/crates/l2/sequencer/utils.rs @@ -14,11 +14,6 @@ use std::time::Duration; use tokio::time::sleep; use tracing::info; -const DEV_MODE_ADDRESS: H160 = H160([ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xAA, -]); - pub async fn sleep_random(sleep_amount: u64) { sleep(random_duration(sleep_amount)).await; } @@ -83,6 +78,7 @@ pub async fn get_needed_proof_types( }; let calldata = keccak(getter)[..4].to_vec(); + // response is a boolean 0x00..01 or 0x00..00 let response = eth_client .call( on_chain_proposer_address, @@ -90,16 +86,13 @@ pub async fn get_needed_proof_types( Overrides::default(), ) .await?; - // trim to 20 bytes, also removes 0x prefix - let trimmed_response = &response[26..]; - - let address = Address::from_str(&format!("0x{trimmed_response}")).map_err(|_| { - EthClientError::Custom(format!( - "Failed to parse OnChainProposer response {response}" - )) - })?; - if address != DEV_MODE_ADDRESS { + let required_proof_type = response + .chars() + .last() + .ok_or(EthClientError::InternalError("empty response"))? + == "1"; + if !required_proof_type { info!("{prover_type} proof needed"); needed_proof_types.push(prover_type); } From 7c1b5671177572fce9ba25c88e1440c0c54d7bfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 15:00:35 -0300 Subject: [PATCH 070/236] fix prev commit --- crates/l2/sequencer/utils.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/crates/l2/sequencer/utils.rs b/crates/l2/sequencer/utils.rs index ca71d892267..5e223442869 100644 --- a/crates/l2/sequencer/utils.rs +++ b/crates/l2/sequencer/utils.rs @@ -1,5 +1,5 @@ use aligned_sdk::common::types::Network; -use ethrex_common::{Address, H160, H256}; +use ethrex_common::{Address, H256}; use ethrex_l2_common::prover::ProverType; use ethrex_rpc::{ EthClient, @@ -9,7 +9,6 @@ use ethrex_storage_rollup::{RollupStoreError, StoreRollup}; use keccak_hash::keccak; use rand::Rng; use secp256k1::SecretKey; -use std::str::FromStr; use std::time::Duration; use tokio::time::sleep; use tracing::info; @@ -90,8 +89,8 @@ pub async fn get_needed_proof_types( let required_proof_type = response .chars() .last() - .ok_or(EthClientError::InternalError("empty response"))? - == "1"; + .ok_or(EthClientError::InternalError("empty response".to_string()))? + == '1'; if !required_proof_type { info!("{prover_type} proof needed"); needed_proof_types.push(prover_type); From bc3929ae43e3eb5457ca5407a50a89788dfd6474 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 15:20:09 -0300 Subject: [PATCH 071/236] make vars public --- crates/l2/contracts/src/l1/OnChainProposer.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 0c1a99753ab..21c2ea24e69 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -83,14 +83,14 @@ contract OnChainProposer is bytes32 public RISC0_VERIFICATION_KEY; /// @notice True if a Risc0 proof is required for batch verification. - bool REQUIRE_RISC0_PROOF; + bool public REQUIRE_RISC0_PROOF; /// @notice True if a SP1 proof is required for batch verification. - bool REQUIRE_SP1_PROOF; + bool public REQUIRE_SP1_PROOF; /// @notice True if a TDX proof is required for batch verification. - bool REQUIRE_TDX_PROOF; + bool public REQUIRE_TDX_PROOF; /// @notice True if verification is done through Aligned Layer instead of smart contract verifiers. - bool ALIGNED; + bool public ALIGNED; modifier onlySequencer() { require( From 224af0b8a073b29b4977b7a42c2af3d1d15590e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 15:23:42 -0300 Subject: [PATCH 072/236] invert --- crates/l2/sequencer/utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/sequencer/utils.rs b/crates/l2/sequencer/utils.rs index 5e223442869..9689d857f78 100644 --- a/crates/l2/sequencer/utils.rs +++ b/crates/l2/sequencer/utils.rs @@ -91,7 +91,7 @@ pub async fn get_needed_proof_types( .last() .ok_or(EthClientError::InternalError("empty response".to_string()))? == '1'; - if !required_proof_type { + if required_proof_type { info!("{prover_type} proof needed"); needed_proof_types.push(prover_type); } From d9829c8f1e22092b3affafa2ee672a44be06ff72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 16:59:24 -0300 Subject: [PATCH 073/236] change sql set_latest_sent_batch_proof --- crates/l2/sequencer/l1_proof_sender.rs | 9 +++++++-- crates/l2/storage/src/store_db/sql.rs | 9 ++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index dbcd09b0216..28495fd26c4 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -201,18 +201,23 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe } else { send_proof_to_contract(state, batch_to_send, proofs).await?; } + // if transaction succeeds, then the proof was correctly sent. state .rollup_store .set_latest_sent_batch_proof(batch_to_send) .await?; + + // TODO: we should anyways handle the "OnChainProposer: batch already verified" error and + // modify the latest sent proof accordingly, otherwise we risk the proof sender getting stuck. } else { let missing_proof_types: Vec = missing_proof_types .iter() .map(|proof_type| format!("{proof_type:?}")) .collect(); info!( - "Missing {} batch proof(s), will not send", - missing_proof_types.join(", ") + ?missing_proof_types, + ?batch_to_send, + "Missing batch proof(s), will not send", ); } diff --git a/crates/l2/storage/src/store_db/sql.rs b/crates/l2/storage/src/store_db/sql.rs index ba2a12645eb..2e0be5b1e58 100644 --- a/crates/l2/storage/src/store_db/sql.rs +++ b/crates/l2/storage/src/store_db/sql.rs @@ -435,13 +435,16 @@ impl StoreEngineRollup for SQLStore { return read_from_row_int(&row, 1); } Err(RollupStoreError::Custom( - "missing operation_count row".to_string(), + "missing latest_sent row".to_string(), )) } async fn set_latest_sent_batch_proof(&self, batch_number: u64) -> Result<(), RollupStoreError> { - self.execute("UPDATE latest_sent SET batch = ?1", (0, batch_number)) - .await?; + self.execute( + "UPDATE latest_sent SET batch = ?1 WHERE _id = 0", + [batch_number], + ) + .await?; Ok(()) } From 071c71bfd9f76e3a98c897c81209655fd16d8e23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 4 Jul 2025 18:42:34 -0300 Subject: [PATCH 074/236] update elf path option --- cmd/ethrex/l2/options.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/cmd/ethrex/l2/options.rs b/cmd/ethrex/l2/options.rs index 3cde6460c82..bcc3064c1b7 100644 --- a/cmd/ethrex/l2/options.rs +++ b/cmd/ethrex/l2/options.rs @@ -152,7 +152,7 @@ impl From for SequencerConfig { &opts.aligned_opts.aligned_network.unwrap_or_default(), ), fee_estimate: opts.aligned_opts.fee_estimate, - sp1_elf_path: opts.aligned_opts.sp1_elf_path.unwrap_or_default(), + sp1_elf_path: opts.aligned_opts.sp1_elf_path, }, } } @@ -477,22 +477,22 @@ pub struct AlignedOptions { pub fee_estimate: String, #[arg( long, + default_value_t = format!("{}/../../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf", env!("CARGO_MANIFEST_DIR")), value_name = "ETHREX_ALIGNED_SP1_ELF_PATH", - required_if_eq("aligned", "true"), env = "ETHREX_ALIGNED_SP1_ELF_PATH", help_heading = "Aligned options", help = "Path to the SP1 elf. This is used for proof verification." )] - pub sp1_elf_path: Option, + pub sp1_elf_path: String, #[arg( long, + default_value_t = format!("{}/../../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-elf", env!("CARGO_MANIFEST_DIR")), value_name = "ETHREX_ALIGNED_RISC0_ELF_PATH", - required_if_eq("aligned", "true"), env = "ETHREX_ALIGNED_RISC0_ELF_PATH", help_heading = "Aligned options", help = "Path to the RISC0 elf. This is used for proof verification." )] - pub risc0_elf_path: Option, + pub risc0_elf_path: String, } impl Default for AlignedOptions { @@ -503,14 +503,14 @@ impl Default for AlignedOptions { beacon_url: Some(vec![Url::parse("http://127.0.0.1:58801").unwrap()]), aligned_network: Some("devnet".to_string()), fee_estimate: "instant".to_string(), - sp1_elf_path: Some(format!( + sp1_elf_path: format!( "{}/../../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf", env!("CARGO_MANIFEST_DIR") - )), - risc0_elf_path: Some(format!( + ), + risc0_elf_path: format!( "{}/../../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-elf", env!("CARGO_MANIFEST_DIR") - )), + ), } } } From 8df5552634a4e0d67f61f153035404d63934bd92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 7 Jul 2025 11:22:18 -0300 Subject: [PATCH 075/236] upgrade docs --- docs/l2/aligned_mode.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/l2/aligned_mode.md b/docs/l2/aligned_mode.md index 6c1ae2632e7..b4700a11865 100644 --- a/docs/l2/aligned_mode.md +++ b/docs/l2/aligned_mode.md @@ -188,6 +188,9 @@ You will see that some deposits fail with the following error: This is because not all the accounts are pre-funded from the genesis. +> [!IMPORTANT] +> Save the CommonBridge and OnChainProposer proxy addresses. + 2. Send some funds to the Aligned batcher payment service contract from the proof sender: ``` cd aligned_layer/batcher/aligned @@ -197,16 +200,13 @@ cargo run deposit-to-batcher \ --amount 1ether ``` -3. Start our l2 node: +3. Start our l2 node, setting `BRIDGE_ADDRESS` and `ON_CHAIN_PROPOSER_ADDRESS` with the values printed in step 1: ``` cd ethrex/crates/l2 -ETHREX_PROOF_COORDINATOR_DEV_MODE=false cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "l2,rollup_storage_libmdbx,metrics" -- l2 init --watcher.block-delay 0 --network ../../fixtures/genesis/l2.json --http.port 1729 --http.addr 0.0.0.0 --evm levm --datadir dev_ethrex_l2 --l1.bridge-address --l1.on-chain-proposer-address --eth.rpc-url http://localhost:8545 --block-producer.coinbase-address 0x0007a881CD95B1484fca47615B64803dad620C8d --committer.l1-private-key 0x385c546456b6a603a1cfcaa9ec9494ba4832da08dd6bcf4de9a71e4a01b74924 --proof-coordinator.l1-private-key 0x39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d --proof-coordinator.addr 127.0.0.1 --aligned --aligned.beacon-url http://127.0.0.1:58801 --aligned-network devnet --aligned-sp1-elf-path prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf +ETHREX_PROOF_COORDINATOR_DEV_MODE=false cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "rollup_storage_libmdbx,metrics" -- l2 init --watcher.block-delay 0 --network ../../fixtures/genesis/l2.json --http.port 1729 --http.addr 0.0.0.0 --evm levm --datadir dev_ethrex_l2 --l1.bridge-address 0x66acf0a5d5a24bca248ed93c0c2f346a108d8f13 --l1.on-chain-proposer-address 0x82c8bcf38d86a840a7ba1fb3f2d04c05fde194c4 --eth.rpc-url http://localhost:8545 --block-producer.coinbase-address 0x0007a881CD95B1484fca47615B64803dad620C8d --committer.l1-private-key 0x385c546456b6a603a1cfcaa9ec9494ba4832da08dd6bcf4de9a71e4a01b74924 --proof-coordinator.l1-private-key 0x39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d --proof-coordinator.addr 127.0.0.1 --aligned --aligned.beacon-url http://127.0.0.1:58801 --aligned-network devnet ``` -> [!IMPORTANT] -> Set `BRIDGE_ADDRESS` and `ON_CHAIN_PROPOSER_ADDRESS` with the values printed in step 1. - Suggestion: When running the integration test, consider increasing the `--committer.commit-time` to 2 minutes. This helps avoid having to aggregate the proofs twice. You can do this by adding the following flag to the `init-l2-no-metrics` target: ``` From 220f90d4e8d3f0f5df964aafd6590256a881049b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 7 Jul 2025 11:22:26 -0300 Subject: [PATCH 076/236] TEMP remove let chains --- crates/vm/backends/revm/mod.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/crates/vm/backends/revm/mod.rs b/crates/vm/backends/revm/mod.rs index 0dace99e584..be6bd767e84 100644 --- a/crates/vm/backends/revm/mod.rs +++ b/crates/vm/backends/revm/mod.rs @@ -324,9 +324,10 @@ impl REVM { // Apply account changes to DB let mut account_update = AccountUpdate::new(address); // If the account was changed then both original and current info will be present in the bundle account - if account.is_info_changed() - && let Some(new_acc_info) = account.account_info() - { + if account.is_info_changed() { + let Some(new_acc_info) = account.account_info() else { + panic!(); + }; // Update account info in DB let code_hash = H256::from_slice(new_acc_info.code_hash.as_slice()); let account_info = AccountInfo { @@ -337,8 +338,10 @@ impl REVM { account_update.info = Some(account_info); // Update code in db if account.is_contract_changed() - && let Some(code) = new_acc_info.code { + let Some(code) = new_acc_info.code else { + panic!() + }; account_update.code = Some(code.original_bytes().0); } } From d2bf32a14ceb56591ccc6ecc4158f186fb86e8f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 7 Jul 2025 13:30:50 -0300 Subject: [PATCH 077/236] update addresses --- docs/l2/aligned_mode.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/l2/aligned_mode.md b/docs/l2/aligned_mode.md index b4700a11865..0b422c5352f 100644 --- a/docs/l2/aligned_mode.md +++ b/docs/l2/aligned_mode.md @@ -173,6 +173,8 @@ cargo run --release --bin ethrex_l2_l1_deployer --manifest-path contracts/Cargo. --contracts-path contracts \ --aligned \ --aligned.aggregator-address 0xFD471836031dc5108809D173A067e8486B9047A3 \ + # --sp1 \ + # --risc0 \ --on-chain-proposer-owner 0x03d0a0aee676cc45bf7032649e0871927c947c8e \ --bridge-owner 0x03d0a0aee676cc45bf7032649e0871927c947c8e \ --deposit-rich \ @@ -204,7 +206,7 @@ cargo run deposit-to-batcher \ ``` cd ethrex/crates/l2 -ETHREX_PROOF_COORDINATOR_DEV_MODE=false cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "rollup_storage_libmdbx,metrics" -- l2 init --watcher.block-delay 0 --network ../../fixtures/genesis/l2.json --http.port 1729 --http.addr 0.0.0.0 --evm levm --datadir dev_ethrex_l2 --l1.bridge-address 0x66acf0a5d5a24bca248ed93c0c2f346a108d8f13 --l1.on-chain-proposer-address 0x82c8bcf38d86a840a7ba1fb3f2d04c05fde194c4 --eth.rpc-url http://localhost:8545 --block-producer.coinbase-address 0x0007a881CD95B1484fca47615B64803dad620C8d --committer.l1-private-key 0x385c546456b6a603a1cfcaa9ec9494ba4832da08dd6bcf4de9a71e4a01b74924 --proof-coordinator.l1-private-key 0x39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d --proof-coordinator.addr 127.0.0.1 --aligned --aligned.beacon-url http://127.0.0.1:58801 --aligned-network devnet +ETHREX_PROOF_COORDINATOR_DEV_MODE=false cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "rollup_storage_libmdbx,metrics" -- l2 init --watcher.block-delay 0 --network ../../fixtures/genesis/l2.json --http.port 1729 --http.addr 0.0.0.0 --evm levm --datadir dev_ethrex_l2 --l1.bridge-address 0x64e731315f33c5dfd03107958cb58f189bda3f2b --l1.on-chain-proposer-address 0xcf03d4747ce82ae9279c93232a80580c67ba0284 --eth.rpc-url http://localhost:8545 --block-producer.coinbase-address 0x0007a881CD95B1484fca47615B64803dad620C8d --committer.l1-private-key 0x385c546456b6a603a1cfcaa9ec9494ba4832da08dd6bcf4de9a71e4a01b74924 --proof-coordinator.l1-private-key 0x39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d --proof-coordinator.addr 127.0.0.1 --aligned --aligned.beacon-url http://127.0.0.1:58801 --aligned-network devnet ``` Suggestion: From 69e00e84f73f7601ba64bf1d031dabdf50617216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 7 Jul 2025 13:31:08 -0300 Subject: [PATCH 078/236] add logs' --- crates/l2/sequencer/l1_proof_sender.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 28495fd26c4..f3f5232cfb1 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -229,6 +229,11 @@ async fn send_proof_to_aligned( batch_number: u64, batch_proofs: impl IntoIterator, ) -> Result<(), ProofSenderError> { + info!( + ?batch_number, + "Sending batch proof(s) to Aligned Layer" + ); + let fee_estimation = estimate_fee(state).await?; let nonce = get_nonce_from_batcher(state.network.clone(), state.l1_address.0.into()) @@ -249,7 +254,7 @@ async fn send_proof_to_aligned( _ => continue, }; - debug!( + info!( prover_type = ?batch_proof.prover_type(), ?batch_number, "Submitting compressed proof to Aligned" From 9d226b8b765b8157220c4f8a7a03f620a9144e04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 7 Jul 2025 13:31:16 -0300 Subject: [PATCH 079/236] add prover_type to proofbytes --- crates/l2/common/src/prover.rs | 3 ++- crates/l2/prover/src/backends/risc0.rs | 1 + crates/l2/prover/src/backends/sp1.rs | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index 0f98c5315ff..c299a6e14d3 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -105,7 +105,7 @@ impl BatchProof { pub fn prover_type(&self) -> ProverType { match self { BatchProof::ProofCalldata(proof) => proof.prover_type, - BatchProof::ProofBytes(_) => todo!(), + BatchProof::ProofBytes(proof) => proof.prover_type, } } @@ -135,6 +135,7 @@ impl BatchProof { /// It is used to send the proof to Aligned. #[derive(PartialEq, Serialize, Deserialize, Clone, Debug)] pub struct ProofBytes { + pub prover_type: ProverType, pub proof: Vec, pub public_values: Vec, } diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index 3231494aa67..051ff653d5d 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -65,6 +65,7 @@ pub fn verify(receipt: &risc0_zkvm::Receipt) -> Result<(), Error> { pub fn to_batch_proof(proof: risc0_zkvm::Receipt, aligned_mode: bool) -> Result { let batch_proof = if aligned_mode { BatchProof::ProofBytes(ProofBytes { + prover_type: ProverType::RISC0, proof: bincode::serialize(&proof.proof)?, public_values: proof.proof.public_values.to_vec(), }) diff --git a/crates/l2/prover/src/backends/sp1.rs b/crates/l2/prover/src/backends/sp1.rs index 8ed526d6559..4c84634ed24 100644 --- a/crates/l2/prover/src/backends/sp1.rs +++ b/crates/l2/prover/src/backends/sp1.rs @@ -96,6 +96,7 @@ pub fn to_batch_proof( ) -> Result> { let batch_proof = if aligned_mode { BatchProof::ProofBytes(ProofBytes { + prover_type: ProverType::SP1, proof: bincode::serialize(&proof.proof)?, public_values: proof.proof.public_values.to_vec(), }) From 8bf3db09f16e6719c834fa49c15f8025dcfebd7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 7 Jul 2025 17:45:01 -0300 Subject: [PATCH 080/236] fix paths, add logs, dont deploy contracts in aligned mode --- crates/l2/common/src/prover.rs | 4 ++-- crates/l2/contracts/bin/deployer/main.rs | 2 ++ crates/l2/sequencer/l1_proof_sender.rs | 14 ++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index c299a6e14d3..e9609dff77c 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -68,11 +68,11 @@ impl ProverType { pub fn elf_path(&self) -> Option { let path = match self { Self::RISC0 => format!( - "{}/../../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-elf", + "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-elf", env!("CARGO_MANIFEST_DIR") ), Self::SP1 => format!( - "{}/../../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf", + "{}/../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf", env!("CARGO_MANIFEST_DIR") ), _ => return None, diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index 82ad329b81d..d0514255c0d 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -206,6 +206,7 @@ async fn deploy_contracts( // if it's a required proof type, but no address has been specified, deploy it. let sp1_verifier_address = match opts.sp1_verifier_address { + _ if opts.aligned => Address::zero(), Some(addr) if opts.sp1 => addr, None if opts.sp1 => { info!("Deploying SP1Verifier"); @@ -226,6 +227,7 @@ async fn deploy_contracts( // we can't deploy the risc0 contract because of uncompatible licenses let risc0_verifier_address = match opts.risc0_verifier_address { + _ if opts.aligned => Address::zero(), Some(addr) if opts.risc0 => addr, None if opts.risc0 => { return Err(DeployerError::InternalError( diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index f3f5232cfb1..54b66570260 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -13,7 +13,7 @@ use spawned_concurrency::{ messages::Unused, tasks::{CastResponse, GenServer, GenServerHandle, send_after}, }; -use tracing::{debug, error, info}; +use tracing::{error, info}; use super::{ configs::AlignedConfig, @@ -229,10 +229,7 @@ async fn send_proof_to_aligned( batch_number: u64, batch_proofs: impl IntoIterator, ) -> Result<(), ProofSenderError> { - info!( - ?batch_number, - "Sending batch proof(s) to Aligned Layer" - ); + info!(?batch_number, "Sending batch proof(s) to Aligned Layer"); let fee_estimation = estimate_fee(state).await?; @@ -267,9 +264,10 @@ async fn send_proof_to_aligned( let elf = batch_proof .prover_type() .elf_path() - .ok_or(ProofSenderError::InternalError( - "no ELF for this prover type".to_string(), - )) + .ok_or(ProofSenderError::InternalError(format!( + "no ELF for prover type {} or file does not exists", + batch_proof.prover_type() + ))) .and_then(|path| { std::fs::read(path).map_err(|e| { ProofSenderError::InternalError(format!("failed to read ELF file: {e}")) From 63c4dca8396e8be16c7c4061867eb978cb35dcb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 8 Jul 2025 11:26:59 -0300 Subject: [PATCH 081/236] update risc0 aligned proof format --- crates/l2/common/src/prover.rs | 15 ++++++++++++ crates/l2/prover/src/backends/risc0.rs | 31 +++++++++++++++--------- crates/l2/sequencer/l1_proof_sender.rs | 30 +++++++++++++---------- crates/l2/sequencer/l1_proof_verifier.rs | 6 +---- crates/vm/backends/revm/mod.rs | 3 +-- 5 files changed, 53 insertions(+), 32 deletions(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index e9609dff77c..b3236729a8e 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -79,6 +79,21 @@ impl ProverType { }; std::fs::canonicalize(path).ok() } + + pub fn vk_path(&self) -> Option { + let path = match self { + Self::RISC0 => format!( + "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-vk", + env!("CARGO_MANIFEST_DIR") + ), + Self::SP1 => format!( + "{}/../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk", + env!("CARGO_MANIFEST_DIR") + ), + _ => return None, + }; + std::fs::canonicalize(path).ok() + } } impl Display for ProverType { diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index 051ff653d5d..7c5a8ad5593 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -1,10 +1,10 @@ use ethrex_l2_common::{ calldata::Value, - prover::{BatchProof, ProofCalldata, ProverType}, + prover::{BatchProof, ProofBytes, ProofCalldata, ProverType}, }; use risc0_zkp::verify::VerificationError; use risc0_zkvm::{ - ExecutorEnv, InnerReceipt, ProverOpts, default_executor, default_prover, + ExecutorEnv, InnerReceipt, ProverOpts, Receipt, default_executor, default_prover, serde::Error as Risc0SerdeError, }; use tracing::info; @@ -25,6 +25,8 @@ pub enum Error { Risc0SerdeError(#[from] Risc0SerdeError), #[error("zkvm dynamic error: {0}")] ZkvmDyn(#[from] anyhow::Error), + #[error("bincode error: {0}")] + Bincode(#[from] Box), } pub fn execute(input: ProgramInput) -> Result<(), Error> { @@ -40,7 +42,7 @@ pub fn execute(input: ProgramInput) -> Result<(), Error> { Ok(()) } -pub fn prove(input: ProgramInput, aligned_mode: bool) -> Result { +pub fn prove(input: ProgramInput, aligned_mode: bool) -> Result { let mut stdout = Vec::new(); let env = ExecutorEnv::builder() @@ -51,32 +53,37 @@ pub fn prove(input: ProgramInput, aligned_mode: bool) -> Result Result<(), Error> { +pub fn verify(receipt: &Receipt) -> Result<(), Error> { receipt.verify(ZKVM_RISC0_PROGRAM_ID)?; Ok(()) } -pub fn to_batch_proof(proof: risc0_zkvm::Receipt, aligned_mode: bool) -> Result { +pub fn to_batch_proof(receipt: Receipt, aligned_mode: bool) -> Result { let batch_proof = if aligned_mode { BatchProof::ProofBytes(ProofBytes { prover_type: ProverType::RISC0, - proof: bincode::serialize(&proof.proof)?, - public_values: proof.proof.public_values.to_vec(), + proof: bincode::serialize(&receipt.inner)?, + public_values: receipt.journal.bytes, }) } else { - BatchProof::ProofCalldata(to_calldata(proof)) + BatchProof::ProofCalldata(to_calldata(receipt)?) }; - to_calldata(proof).map(BatchProof::ProofCalldata) + Ok(batch_proof) } -fn to_calldata(receipt: risc0_zkvm::Receipt) -> Result { +fn to_calldata(receipt: Receipt) -> Result { let seal = encode_seal(&receipt)?; let journal = receipt.journal.bytes; @@ -94,7 +101,7 @@ fn to_calldata(receipt: risc0_zkvm::Receipt) -> Result { // ref: https://github.com/risc0/risc0-ethereum/blob/046bb34ea4605f9d8420c7db89baf8e1064fa6f5/contracts/src/lib.rs#L88 // this was reimplemented because risc0-ethereum-contracts brings a different version of c-kzg into the workspace (2.1.0), // which is incompatible with our current version (1.0.3). -fn encode_seal(receipt: &risc0_zkvm::Receipt) -> Result, Error> { +fn encode_seal(receipt: &Receipt) -> Result, Error> { let InnerReceipt::Groth16(receipt) = receipt.inner.clone() else { return Err(Error::EncodeNonGroth16Seal); }; diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 54b66570260..a287466dbbe 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -245,7 +245,8 @@ async fn send_proof_to_aligned( let wallet = wallet.with_chain_id(state.l1_chain_id); for batch_proof in batch_proofs { - let proving_system = match batch_proof.prover_type() { + let prover_type = batch_proof.prover_type(); + let proving_system = match prover_type { ProverType::RISC0 => ProvingSystemId::Risc0, ProverType::SP1 => ProvingSystemId::SP1, _ => continue, @@ -261,24 +262,27 @@ async fn send_proof_to_aligned( return Err(ProofSenderError::AlignedWrongProofFormat); }; - let elf = batch_proof - .prover_type() - .elf_path() + let vm_program_code = { + let path = match prover_type { + prover_type @ ProverType::RISC0 => prover_type.vk_path(), + prover_type @ ProverType::SP1 => prover_type.elf_path(), + _ => continue, + } .ok_or(ProofSenderError::InternalError(format!( - "no ELF for prover type {} or file does not exists", - batch_proof.prover_type() - ))) - .and_then(|path| { - std::fs::read(path).map_err(|e| { - ProofSenderError::InternalError(format!("failed to read ELF file: {e}")) - }) - })?; + "no ELF/VK for prover type {prover_type} or file does not exists, did you build the zkvm program for that prover type?", + )))?; + Some(std::fs::read(path).map_err(|e| { + ProofSenderError::InternalError(format!( + "failed to read ELF/VK file for prover type {prover_type}: {e}", + )) + })?) + }; let verification_data = VerificationData { proving_system, proof, proof_generator_addr: state.l1_address.0.into(), - vm_program_code: Some(elf), + vm_program_code, verification_key: None, pub_input: None, }; diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index 726c64f332b..4d07709282c 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -221,11 +221,7 @@ impl L1ProofVerifier { ); aggregated_proofs_for_batch.insert(prover_type, merkle_path); } else { - warn!( - ?batch_number, - ?prover_type, - "Proof has not been aggregated by Aligned, aborting" - ); + info!(?prover_type, "No more proofs have been aggregated"); break; } } diff --git a/crates/vm/backends/revm/mod.rs b/crates/vm/backends/revm/mod.rs index be6bd767e84..c67e68779ff 100644 --- a/crates/vm/backends/revm/mod.rs +++ b/crates/vm/backends/revm/mod.rs @@ -337,8 +337,7 @@ impl REVM { }; account_update.info = Some(account_info); // Update code in db - if account.is_contract_changed() - { + if account.is_contract_changed() { let Some(code) = new_acc_info.code else { panic!() }; From 04ceed6d0e44a4bd8c7a0ef3c7fb89c1da9b400f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 8 Jul 2025 11:55:24 -0300 Subject: [PATCH 082/236] fix --- crates/l2/prover/src/backends/risc0.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index 7c5a8ad5593..4ade92a134c 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -53,12 +53,12 @@ pub fn prove(input: ProgramInput, aligned_mode: bool) -> Result let prover = default_prover(); // contains the receipt along with statistics about execution of the guest - let prove_info = if aligned_mode { + let prover_opts = if aligned_mode { ProverOpts::succinct() } else { ProverOpts::groth16() }; - prover.prove_with_opts(env, ZKVM_RISC0_PROGRAM_ELF, &prover_opts)?; + let prove_info = prover.prove_with_opts(env, ZKVM_RISC0_PROGRAM_ELF, &prover_opts)?; info!("Successfully generated execution receipt."); Ok(prove_info.receipt) From 8d79b68a3308df049a602f21f8f296ba9d54781e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 8 Jul 2025 15:31:06 -0300 Subject: [PATCH 083/236] add proof format, remove aligned cli arg --- cmd/ethrex_replay/src/run.rs | 2 +- crates/l2/Makefile | 3 +- crates/l2/common/src/prover.rs | 10 ++++ crates/l2/prover/src/backends/exec.rs | 6 +-- crates/l2/prover/src/backends/risc0.rs | 23 ++++----- crates/l2/prover/src/backends/sp1.rs | 23 ++++----- crates/l2/prover/src/cli.rs | 11 ---- crates/l2/prover/src/config.rs | 1 - crates/l2/prover/src/prover.rs | 17 +++--- crates/l2/prover/zkvm/interface/build.rs | 4 +- crates/l2/sequencer/l1_proof_verifier.rs | 2 +- crates/l2/sequencer/proof_coordinator.rs | 66 +++++++++++------------- 12 files changed, 79 insertions(+), 89 deletions(-) diff --git a/cmd/ethrex_replay/src/run.rs b/cmd/ethrex_replay/src/run.rs index 4cae5c5adfa..2566eafc6bf 100644 --- a/cmd/ethrex_replay/src/run.rs +++ b/cmd/ethrex_replay/src/run.rs @@ -55,7 +55,7 @@ pub async fn prove(cache: Cache) -> eyre::Result<()> { // inclusion of this crate in the workspace. ..Default::default() }, - false, + Default::default(), ) .map_err(|e| eyre::Error::msg(e.to_string()))?; Ok(()) diff --git a/crates/l2/Makefile b/crates/l2/Makefile index 4d8524cfc65..a7c4f67e2c7 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -165,7 +165,8 @@ init-prover: ../../target/release/ethrex_prover ## 🚀 Initializes the Prover ../../target/release/ethrex_prover \ --http.addr 127.0.0.1 \ --http.port 3900 \ - --log.level debug + + cargo r -r --features "l2,risc0,gpu" --manifest-path ./prover/Cargo.toml -- --http.addr 127.0.0.1 --http.port 3900 build-prover: rm -f ../../target/release/ethrex_prover diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index b3236729a8e..a47d84de6c2 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -161,3 +161,13 @@ pub struct ProofCalldata { pub prover_type: ProverType, pub calldata: Vec, } + +/// Indicates the prover which proof *format* to generate +#[derive(Serialize, Deserialize, Clone, Copy, Debug, Default)] +pub enum ProofFormat { + #[default] + /// A compressed proof wrapped over groth16. EVM friendly. + Groth16, + /// Fixed size STARK execution proof. + Compressed, +} diff --git a/crates/l2/prover/src/backends/exec.rs b/crates/l2/prover/src/backends/exec.rs index b1d80da5ec2..ec2714f7d1c 100644 --- a/crates/l2/prover/src/backends/exec.rs +++ b/crates/l2/prover/src/backends/exec.rs @@ -4,7 +4,7 @@ use zkvm_interface::io::{ProgramInput, ProgramOutput}; use ethrex_l2_common::{ calldata::Value, - prover::{BatchProof, ProofCalldata, ProverType}, + prover::{BatchProof, ProofCalldata, ProofFormat, ProverType}, }; pub struct ProveOutput(pub ProgramOutput); @@ -16,7 +16,7 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { pub fn prove( input: ProgramInput, - _aligned_mode: bool, + _format: ProofFormat, ) -> Result> { warn!("\"exec\" prover backend generates no proof, only executes"); let output = execution_program(input)?; @@ -38,7 +38,7 @@ fn to_calldata(proof: ProveOutput) -> ProofCalldata { pub fn to_batch_proof( proof: ProveOutput, - _aligned_mode: bool, + _format: ProofFormat, ) -> Result> { Ok(BatchProof::ProofCalldata(to_calldata(proof))) } diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index 4ade92a134c..522aa6beaa3 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -1,6 +1,6 @@ use ethrex_l2_common::{ calldata::Value, - prover::{BatchProof, ProofBytes, ProofCalldata, ProverType}, + prover::{BatchProof, ProofBytes, ProofCalldata, ProofFormat, ProverType}, }; use risc0_zkp::verify::VerificationError; use risc0_zkvm::{ @@ -42,7 +42,7 @@ pub fn execute(input: ProgramInput) -> Result<(), Error> { Ok(()) } -pub fn prove(input: ProgramInput, aligned_mode: bool) -> Result { +pub fn prove(input: ProgramInput, format: ProofFormat) -> Result { let mut stdout = Vec::new(); let env = ExecutorEnv::builder() @@ -52,11 +52,9 @@ pub fn prove(input: ProgramInput, aligned_mode: bool) -> Result let prover = default_prover(); - // contains the receipt along with statistics about execution of the guest - let prover_opts = if aligned_mode { - ProverOpts::succinct() - } else { - ProverOpts::groth16() + let prover_opts = match format { + ProofFormat::Compressed => ProverOpts::succinct(), + ProofFormat::Groth16 => ProverOpts::groth16(), }; let prove_info = prover.prove_with_opts(env, ZKVM_RISC0_PROGRAM_ELF, &prover_opts)?; @@ -69,15 +67,14 @@ pub fn verify(receipt: &Receipt) -> Result<(), Error> { Ok(()) } -pub fn to_batch_proof(receipt: Receipt, aligned_mode: bool) -> Result { - let batch_proof = if aligned_mode { - BatchProof::ProofBytes(ProofBytes { +pub fn to_batch_proof(receipt: Receipt, format: ProofFormat) -> Result { + let batch_proof = match format { + ProofFormat::Compressed => BatchProof::ProofBytes(ProofBytes { prover_type: ProverType::RISC0, proof: bincode::serialize(&receipt.inner)?, public_values: receipt.journal.bytes, - }) - } else { - BatchProof::ProofCalldata(to_calldata(receipt)?) + }), + ProofFormat::Groth16 => BatchProof::ProofCalldata(to_calldata(receipt)?), }; Ok(batch_proof) diff --git a/crates/l2/prover/src/backends/sp1.rs b/crates/l2/prover/src/backends/sp1.rs index 4c84634ed24..ca6473fc646 100644 --- a/crates/l2/prover/src/backends/sp1.rs +++ b/crates/l2/prover/src/backends/sp1.rs @@ -8,7 +8,7 @@ use zkvm_interface::io::{JSONProgramInput, ProgramInput}; use ethrex_l2_common::{ calldata::Value, - prover::{BatchProof, ProofBytes, ProofCalldata, ProverType}, + prover::{BatchProof, ProofBytes, ProofCalldata, ProofFormat, ProverType}, }; static PROGRAM_ELF: &[u8] = @@ -65,18 +65,16 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { pub fn prove( input: ProgramInput, - aligned_mode: bool, + format: ProofFormat, ) -> Result> { let mut stdin = SP1Stdin::new(); stdin.write(&JSONProgramInput(input)); let setup = &*PROVER_SETUP; - // contains the receipt along with statistics about execution of the guest - let proof = if aligned_mode { - setup.client.prove(&setup.pk, &stdin).compressed().run()? - } else { - setup.client.prove(&setup.pk, &stdin).groth16().run()? + let proof = match format { + ProofFormat::Compressed => setup.client.prove(&setup.pk, &stdin).compressed().run()?, + ProofFormat::Groth16 => setup.client.prove(&setup.pk, &stdin).groth16().run()?, }; info!("Successfully generated SP1Proof."); @@ -92,16 +90,15 @@ pub fn verify(output: &ProveOutput) -> Result<(), Box> { pub fn to_batch_proof( proof: ProveOutput, - aligned_mode: bool, + format: ProofFormat, ) -> Result> { - let batch_proof = if aligned_mode { - BatchProof::ProofBytes(ProofBytes { + let batch_proof = match format { + ProofFormat::Compressed => BatchProof::ProofBytes(ProofBytes { prover_type: ProverType::SP1, proof: bincode::serialize(&proof.proof)?, public_values: proof.proof.public_values.to_vec(), - }) - } else { - BatchProof::ProofCalldata(to_calldata(proof)) + }), + ProofFormat::Groth16 => BatchProof::ProofCalldata(to_calldata(proof)), }; Ok(batch_proof) diff --git a/crates/l2/prover/src/cli.rs b/crates/l2/prover/src/cli.rs index ecf8e270da2..b0a3f8368cf 100644 --- a/crates/l2/prover/src/cli.rs +++ b/crates/l2/prover/src/cli.rs @@ -42,15 +42,6 @@ pub struct ProverClientOptions { help_heading = "Prover client options" )] pub log_level: Level, - #[arg( - long, - default_value_t = false, - value_name = "BOOLEAN", - env = "PROVER_CLIENT_ALIGNED", - help = "Activate aligned proving system", - help_heading = "Prover client options" - )] - pub aligned: bool, } impl From for ProverConfig { @@ -59,7 +50,6 @@ impl From for ProverConfig { http_addr: config.http_addr, http_port: config.http_port, proving_time_ms: config.proving_time_ms, - aligned_mode: config.aligned, } } } @@ -71,7 +61,6 @@ impl Default for ProverClientOptions { http_port: 3900, proving_time_ms: 5000, log_level: Level::INFO, - aligned: false, } } } diff --git a/crates/l2/prover/src/config.rs b/crates/l2/prover/src/config.rs index 1ba0d04db69..47be0de5090 100644 --- a/crates/l2/prover/src/config.rs +++ b/crates/l2/prover/src/config.rs @@ -5,5 +5,4 @@ pub struct ProverConfig { pub http_addr: String, pub http_port: u16, pub proving_time_ms: u64, - pub aligned_mode: bool, } diff --git a/crates/l2/prover/src/prover.rs b/crates/l2/prover/src/prover.rs index 257988e5eae..125d9f674bc 100644 --- a/crates/l2/prover/src/prover.rs +++ b/crates/l2/prover/src/prover.rs @@ -1,6 +1,6 @@ use crate::{config::ProverConfig, prove, to_batch_proof}; use ethrex_l2::sequencer::proof_coordinator::{ProofData, get_commit_hash}; -use ethrex_l2_common::prover::BatchProof; +use ethrex_l2_common::prover::{BatchProof, ProofFormat}; use std::time::Duration; use tokio::{ io::{AsyncReadExt, AsyncWriteExt}, @@ -18,12 +18,12 @@ pub async fn start_prover(config: ProverConfig) { struct ProverData { batch_number: u64, input: ProgramInput, + format: ProofFormat, } struct Prover { prover_server_endpoint: String, proving_time_ms: u64, - aligned_mode: bool, commit_hash: String, } @@ -32,7 +32,6 @@ impl Prover { Self { prover_server_endpoint: format!("{}:{}", cfg.http_addr, cfg.http_port), proving_time_ms: cfg.proving_time_ms, - aligned_mode: cfg.aligned_mode, commit_hash: get_commit_hash(), } } @@ -56,8 +55,8 @@ impl Prover { // If we get the input // Generate the Proof - let Ok(batch_proof) = prove(prover_data.input, self.aligned_mode) - .and_then(|output| to_batch_proof(output, self.aligned_mode)) + let Ok(batch_proof) = prove(prover_data.input, prover_data.format) + .and_then(|output| to_batch_proof(output, prover_data.format)) .inspect_err(|e| error!("{}", e.to_string())) else { continue; @@ -79,11 +78,12 @@ impl Prover { .await .map_err(|e| format!("Failed to get Response: {e}"))?; - let (batch_number, input) = match response { + let (batch_number, input, format) = match response { ProofData::BatchResponse { batch_number, input, - } => (batch_number, input), + format, + } => (batch_number, input, format), ProofData::InvalidCodeVersion { commit_hash } => { return Err(format!( "Invalid code version received. Server commit_hash: {}, Prover commit_hash: {}", @@ -93,7 +93,7 @@ impl Prover { _ => return Err("Expecting ProofData::Response".to_owned()), }; - let (Some(batch_number), Some(input)) = (batch_number, input) else { + let (Some(batch_number), Some(input), Some(format)) = (batch_number, input, format) else { warn!( "Received Empty Response, meaning that the ProverServer doesn't have batches to prove.\nThe Prover may be advancing faster than the Proposer." ); @@ -112,6 +112,7 @@ impl Prover { #[cfg(feature = "l2")] blob_proof: input.blob_proof, }, + format, })) } diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index c7d3e398d53..5c6e13990db 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -76,11 +76,11 @@ fn build_sp1_program() { if aligned_mode == "true" { let vk = vk.vk.hash_bytes(); - std::fs::write("./sp1/out/riscv32im-succinct-zkvm-vk", &vk) + std::fs::write("./sp1/out/riscv32im-succinct-zkvm-vk", vk) .expect("could not write SP1 vk to file"); } else { let vk = vk.vk.bytes32_raw(); - std::fs::write("./sp1/out/riscv32im-succinct-zkvm-vk", &vk) + std::fs::write("./sp1/out/riscv32im-succinct-zkvm-vk", vk) .expect("could not write SP1 vk to file"); }; } diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index 4d07709282c..ccdb783c7aa 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -14,7 +14,7 @@ use ethrex_rpc::EthClient; use ethrex_storage_rollup::StoreRollup; use reqwest::Url; use secp256k1::SecretKey; -use tracing::{error, info, warn}; +use tracing::{error, info}; use crate::{ CommitterConfig, EthConfig, ProofCoordinatorConfig, SequencerConfig, diff --git a/crates/l2/sequencer/proof_coordinator.rs b/crates/l2/sequencer/proof_coordinator.rs index 90f90146f6e..b1f789d0fbb 100644 --- a/crates/l2/sequencer/proof_coordinator.rs +++ b/crates/l2/sequencer/proof_coordinator.rs @@ -1,8 +1,6 @@ +use crate::SequencerConfig; use crate::sequencer::errors::{ConnectionHandlerError, ProofCoordinatorError}; use crate::sequencer::setup::{prepare_quote_prerequisites, register_tdx_key}; -use crate::{ - BlockProducerConfig, CommitterConfig, EthConfig, ProofCoordinatorConfig, SequencerConfig, -}; use bytes::Bytes; use ethrex_blockchain::Blockchain; use ethrex_common::types::BlobsBundle; @@ -11,7 +9,7 @@ use ethrex_common::{ Address, types::{Block, blobs_bundle}, }; -use ethrex_l2_common::prover::{BatchProof, ProverType}; +use ethrex_l2_common::prover::{BatchProof, ProofFormat, ProverType}; use ethrex_rpc::clients::eth::EthClient; use ethrex_storage::Store; use ethrex_storage_rollup::StoreRollup; @@ -76,6 +74,7 @@ pub enum ProofData { BatchResponse { batch_number: Option, input: Option, + format: Option, }, /// 6. @@ -115,10 +114,11 @@ impl ProofData { } /// Builder function for creating a BatchResponse - pub fn batch_response(batch_number: u64, input: ProverInputData) -> Self { + pub fn batch_response(batch_number: u64, input: ProverInputData, format: ProofFormat) -> Self { ProofData::BatchResponse { batch_number: Some(batch_number), input: Some(input), + format: Some(format), } } @@ -126,6 +126,7 @@ impl ProofData { ProofData::BatchResponse { batch_number: None, input: None, + format: None, } } @@ -161,31 +162,29 @@ pub struct ProofCoordinatorState { blockchain: Arc, validium: bool, commit_hash: String, + aligned: bool, } impl ProofCoordinatorState { - #[allow(clippy::too_many_arguments)] pub async fn new( - config: &ProofCoordinatorConfig, - committer_config: &CommitterConfig, - eth_config: &EthConfig, - proposer_config: &BlockProducerConfig, + config: &SequencerConfig, store: Store, rollup_store: StoreRollup, blockchain: Arc, ) -> Result { let eth_client = EthClient::new_with_config( - eth_config.rpc_url.iter().map(AsRef::as_ref).collect(), - eth_config.max_number_of_retries, - eth_config.backoff_factor, - eth_config.min_retry_delay, - eth_config.max_retry_delay, - Some(eth_config.maximum_allowed_max_fee_per_gas), - Some(eth_config.maximum_allowed_max_fee_per_blob_gas), + config.eth.rpc_url.iter().map(AsRef::as_ref).collect(), + config.eth.max_number_of_retries, + config.eth.backoff_factor, + config.eth.min_retry_delay, + config.eth.max_retry_delay, + Some(config.eth.maximum_allowed_max_fee_per_gas), + Some(config.eth.maximum_allowed_max_fee_per_blob_gas), )?; - let on_chain_proposer_address = committer_config.on_chain_proposer_address; + let on_chain_proposer_address = config.l1_committer.on_chain_proposer_address; - let rpc_url = eth_config + let rpc_url = config + .eth .rpc_url .first() .ok_or(ProofCoordinatorError::Custom( @@ -194,18 +193,19 @@ impl ProofCoordinatorState { .to_string(); Ok(Self { - listen_ip: config.listen_ip, - port: config.listen_port, + listen_ip: config.proof_coordinator.listen_ip, + port: config.proof_coordinator.listen_port, store, eth_client, on_chain_proposer_address, - elasticity_multiplier: proposer_config.elasticity_multiplier, + elasticity_multiplier: config.block_producer.elasticity_multiplier, rollup_store, rpc_url, - l1_private_key: config.l1_private_key, + l1_private_key: config.proof_coordinator.l1_private_key, blockchain, - validium: config.validium, + validium: config.proof_coordinator.validium, commit_hash: get_commit_hash(), + aligned: config.aligned.aligned_mode, }) } } @@ -229,16 +229,7 @@ impl ProofCoordinator { cfg: SequencerConfig, blockchain: Arc, ) -> Result<(), ProofCoordinatorError> { - let state = ProofCoordinatorState::new( - &cfg.proof_coordinator, - &cfg.l1_committer, - &cfg.eth, - &cfg.block_producer, - store, - rollup_store, - blockchain, - ) - .await?; + let state = ProofCoordinatorState::new(&cfg, store, rollup_store, blockchain).await?; let listener = Arc::new(TcpListener::bind(format!("{}:{}", state.listen_ip, state.port)).await?); let mut proof_coordinator = ProofCoordinator::start(state); @@ -435,8 +426,13 @@ async fn handle_request( ProofData::empty_batch_response() } else { let input = create_prover_input(state, batch_to_prove).await?; + let format = if state.aligned { + ProofFormat::Compressed + } else { + ProofFormat::Groth16 + }; debug!("Sending BatchResponse for block_number: {batch_to_prove}"); - ProofData::batch_response(batch_to_prove, input) + ProofData::batch_response(batch_to_prove, input, format) }; send_response(stream, &response).await?; From 965d426fac3e73e855da0b51f013201d3d353bbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 8 Jul 2025 16:49:28 -0300 Subject: [PATCH 084/236] WIP different sp1 vk for aligned and l1 verifier --- crates/l2/common/src/prover.rs | 34 +++++++++++++++++------- crates/l2/contracts/bin/deployer/cli.rs | 16 +++-------- crates/l2/contracts/bin/deployer/main.rs | 34 ++++++++++++++++-------- crates/l2/docker-compose-l2.yaml | 4 +-- crates/l2/prover/zkvm/interface/build.rs | 15 +++-------- crates/l2/sequencer/l1_proof_sender.rs | 19 ++++--------- 6 files changed, 62 insertions(+), 60 deletions(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index a47d84de6c2..321108f16f8 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -65,34 +65,48 @@ impl ProverType { } } - pub fn elf_path(&self) -> Option { + pub fn aligned_vm_program_code(&self) -> std::io::Result>> { + // TODO: these should be compile-time consts let path = match self { + // for risc0, Aligned requires the image id Self::RISC0 => format!( - "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-elf", + "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-vk", env!("CARGO_MANIFEST_DIR") ), + // for sp1, Aligned requires the ELF file Self::SP1 => format!( "{}/../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf", env!("CARGO_MANIFEST_DIR") ), - _ => return None, + // other types are not supported by Aligned + _ => return Ok(None), }; - std::fs::canonicalize(path).ok() + let path = std::fs::canonicalize(path)?; + std::fs::read(path).map(|content| Some(content)) } - pub fn vk_path(&self) -> Option { - let path = match self { + pub fn vk(&self, aligned: bool) -> std::io::Result>> { + // TODO: these should be compile-time consts + let path = match &self { Self::RISC0 => format!( "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-vk", env!("CARGO_MANIFEST_DIR") ), - Self::SP1 => format!( - "{}/../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk", + // Aligned requires the vk's 32 bytes hash, while the L1 verifier requires + // the hash as a bn254 F_r element. + Self::SP1 if aligned => format!( + "{}/../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk-u32", + env!("CARGO_MANIFEST_DIR") + ), + Self::SP1 if !aligned => format!( + "{}/../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk-bn254", env!("CARGO_MANIFEST_DIR") ), - _ => return None, + // other types don't have a verification key + _ => return Ok(None), }; - std::fs::canonicalize(path).ok() + let path = std::fs::canonicalize(path)?; + std::fs::read(path).map(|content| Some(content)) } } diff --git a/crates/l2/contracts/bin/deployer/cli.rs b/crates/l2/contracts/bin/deployer/cli.rs index b53481a8dba..d98f31d1987 100644 --- a/crates/l2/contracts/bin/deployer/cli.rs +++ b/crates/l2/contracts/bin/deployer/cli.rs @@ -254,22 +254,20 @@ pub struct DeployerOptions { pub on_chain_proposer_owner_pk: Option, #[arg( long, - default_value_t = format!("{}/../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk", env!("CARGO_MANIFEST_DIR")), value_name = "PATH", env = "ETHREX_SP1_VERIFICATION_KEY_PATH", help_heading = "Deployer options", help = "Path to the SP1 verification key. This is used for proof verification." )] - pub sp1_vk_path: String, + pub sp1_vk_path: Option, #[arg( long, - default_value_t = format!("{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-vk", env!("CARGO_MANIFEST_DIR")), value_name = "PATH", env = "ETHREX_RISC0_VERIFICATION_KEY_PATH", help_heading = "Deployer options", help = "Path to the Risc0 image id / verification key. This is used for proof verification." )] - pub risc0_vk_path: String, + pub risc0_vk_path: Option, #[arg( long, default_value = "false", @@ -348,14 +346,8 @@ impl Default for DeployerOptions { 0x71, 0x92, 0x7c, 0x94, 0x7c, 0x8e, ]), on_chain_proposer_owner_pk: None, - sp1_vk_path: format!( - "{}/../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk", - env!("CARGO_MANIFEST_DIR") - ), - risc0_vk_path: format!( - "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-vk", - env!("CARGO_MANIFEST_DIR") - ), + sp1_vk_path: None, + risc0_vk_path: None, deploy_based_contracts: false, sequencer_registry_owner: None, } diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index d0514255c0d..edee03c4509 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -12,7 +12,7 @@ use cli::{DeployerOptions, parse_private_key}; use error::DeployerError; use ethrex_common::{Address, U256}; use ethrex_l2::utils::test_data_io::read_genesis_file; -use ethrex_l2_common::calldata::Value; +use ethrex_l2_common::{calldata::Value, prover::ProverType}; use ethrex_l2_sdk::{ calldata::encode_calldata, compile_contract, deploy_contract, deploy_with_proxy, get_address_from_secret_key, initialize_contract, @@ -320,6 +320,26 @@ fn read_vk(path: &str) -> Result { .map_err(DeployerError::from) } +fn get_vk(prover_type: ProverType, opts: &DeployerOptions) -> Result { + let (required_type, vk_path) = match prover_type { + ProverType::SP1 => (opts.sp1, opts.sp1_vk_path), + ProverType::RISC0 => (opts.risc0, opts.risc0_vk_path), + _ => unimplemented!(prover_type), + }; + + if !required_type { + Bytes::new() + } else { + vk_path.map(read_vk).unwrap_or_else(|| { + prover_type + .vk(opts.aligned)? + .ok_or(DeployerError::InternalError(format!( + "missing {prover_type} vk" + ))) + }) + } +} + async fn initialize_contracts( contract_addresses: ContractAddresses, eth_client: &EthClient, @@ -335,16 +355,8 @@ async fn initialize_contracts( .ok_or(DeployerError::FailedToGetStringFromPath)?, ); - let sp1_vk = if opts.sp1 { - read_vk(&opts.sp1_vk_path)? - } else { - Bytes::new() - }; - let risc0_vk = if opts.risc0 { - read_vk(&opts.risc0_vk_path)? - } else { - Bytes::new() - }; + let sp1_vk = get_vk(ProverType::SP1, &opts)?; + let risc0_vk = get_vk(ProverType::RISC0, &opts)?; let deployer_address = get_address_from_secret_key(&opts.private_key)?; diff --git a/crates/l2/docker-compose-l2.yaml b/crates/l2/docker-compose-l2.yaml index 0c5e4c720a0..2244b72a0c6 100644 --- a/crates/l2/docker-compose-l2.yaml +++ b/crates/l2/docker-compose-l2.yaml @@ -18,7 +18,7 @@ services: - ../../fixtures/genesis/l1-dev.json:${CI_ETHREX_WORKDIR}/fixtures/genesis/l1-dev.json - ../../fixtures/genesis/l2.json:${CI_ETHREX_WORKDIR}/fixtures/genesis/l2.json - ../../fixtures/keys/private_keys_l1.txt:${CI_ETHREX_WORKDIR}/fixtures/keys/private_keys_l1.txt - - ./prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk:${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk + - ./prover/zkvm/interface/sp1/out/:${CI_ETHREX_WORKDIR}/sp1_out - ./prover/zkvm/interface/risc0/out/riscv32im-risc0-vk:${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk environment: - ETHREX_ETH_RPC_URL=http://ethrex_l1:8545 @@ -39,7 +39,7 @@ services: - ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER} - ETHREX_DEPLOYER_ALIGNED=${ETHREX_DEPLOYER_ALIGNED:-false} - ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=${ETHREX_DEPLOYER_ALIGNED_CONTRACT_VERIFIER} - - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk + - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/sp1_out/riscv32im-succinct-zkvm-vk - ETHREX_RISC0_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk - ETHREX_TDX_DEV_MODE=${ETHREX_TDX_DEV_MODE:-false} - ETHREX_ON_CHAIN_PROPOSER_OWNER=0x03d0a0aee676cc45bf7032649e0871927c947c8e diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index 5c6e13990db..1215dc0d09a 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -72,15 +72,8 @@ fn build_sp1_program() { let prover = ProverClient::from_env(); let (_, vk) = prover.setup(&elf); - let aligned_mode = std::env::var("PROVER_CLIENT_ALIGNED").unwrap_or("false".to_string()); - - if aligned_mode == "true" { - let vk = vk.vk.hash_bytes(); - std::fs::write("./sp1/out/riscv32im-succinct-zkvm-vk", vk) - .expect("could not write SP1 vk to file"); - } else { - let vk = vk.vk.bytes32_raw(); - std::fs::write("./sp1/out/riscv32im-succinct-zkvm-vk", vk) - .expect("could not write SP1 vk to file"); - }; + std::fs::write("./sp1/out/riscv32im-succinct-zkvm-vk-bn254", vk.vk.bytes32_raw()) + .expect("could not write SP1 vk-bn254 to file"); + std::fs::write("./sp1/out/riscv32im-succinct-zkvm-vk-u32", vk.vk.hash_bytes()) + .expect("could not write SP1 vk-u32 to file"); } diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index a287466dbbe..f629b3c0ccf 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -262,21 +262,12 @@ async fn send_proof_to_aligned( return Err(ProofSenderError::AlignedWrongProofFormat); }; - let vm_program_code = { - let path = match prover_type { - prover_type @ ProverType::RISC0 => prover_type.vk_path(), - prover_type @ ProverType::SP1 => prover_type.elf_path(), - _ => continue, - } - .ok_or(ProofSenderError::InternalError(format!( - "no ELF/VK for prover type {prover_type} or file does not exists, did you build the zkvm program for that prover type?", - )))?; - Some(std::fs::read(path).map_err(|e| { - ProofSenderError::InternalError(format!( + let vm_program_code = + prover_type + .aligned_vm_program_code()? + .ok_or(ProofSenderError::InternalError(format!( "failed to read ELF/VK file for prover type {prover_type}: {e}", - )) - })?) - }; + ))); let verification_data = VerificationData { proving_system, From b6bd40f2251171bccc9b256dcb540184a4f1814c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 8 Jul 2025 17:18:33 -0300 Subject: [PATCH 085/236] update docker compose --- crates/l2/docker-compose-l2.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/l2/docker-compose-l2.yaml b/crates/l2/docker-compose-l2.yaml index 2244b72a0c6..c809d1f747c 100644 --- a/crates/l2/docker-compose-l2.yaml +++ b/crates/l2/docker-compose-l2.yaml @@ -19,7 +19,8 @@ services: - ../../fixtures/genesis/l2.json:${CI_ETHREX_WORKDIR}/fixtures/genesis/l2.json - ../../fixtures/keys/private_keys_l1.txt:${CI_ETHREX_WORKDIR}/fixtures/keys/private_keys_l1.txt - ./prover/zkvm/interface/sp1/out/:${CI_ETHREX_WORKDIR}/sp1_out - - ./prover/zkvm/interface/risc0/out/riscv32im-risc0-vk:${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk + - ./prover/zkvm/interface/sp1/out/riscv32im-succinct-vk-u32:${CI_ETHREX_WORKDIR}/riscv32im-succinct-vk-u32 + - ./prover/zkvm/interface/sp1/out/riscv32im-succinct-vk-bn254:${CI_ETHREX_WORKDIR}/riscv32im-succinct-vk-bn254 environment: - ETHREX_ETH_RPC_URL=http://ethrex_l1:8545 # NOTE: The paths in the env variables must match those @@ -39,7 +40,7 @@ services: - ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER} - ETHREX_DEPLOYER_ALIGNED=${ETHREX_DEPLOYER_ALIGNED:-false} - ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=${ETHREX_DEPLOYER_ALIGNED_CONTRACT_VERIFIER} - - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/sp1_out/riscv32im-succinct-zkvm-vk + - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 - ETHREX_RISC0_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk - ETHREX_TDX_DEV_MODE=${ETHREX_TDX_DEV_MODE:-false} - ETHREX_ON_CHAIN_PROPOSER_OWNER=0x03d0a0aee676cc45bf7032649e0871927c947c8e From 7655ba04e3ac820fd56eadcf54a4e5b71afd4597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 8 Jul 2025 17:31:48 -0300 Subject: [PATCH 086/236] fixes --- crates/l2/common/src/prover.rs | 5 ++--- crates/l2/contracts/bin/deployer/main.rs | 15 ++++++++------- crates/l2/sequencer/errors.rs | 2 ++ crates/l2/sequencer/l1_proof_sender.rs | 11 ++++------- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index 321108f16f8..306e4190b23 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -1,7 +1,6 @@ use serde::{Deserialize, Serialize}; use std::{ fmt::{Debug, Display}, - path::PathBuf, }; use crate::calldata::Value; @@ -82,7 +81,7 @@ impl ProverType { _ => return Ok(None), }; let path = std::fs::canonicalize(path)?; - std::fs::read(path).map(|content| Some(content)) + std::fs::read(path).map(Some) } pub fn vk(&self, aligned: bool) -> std::io::Result>> { @@ -106,7 +105,7 @@ impl ProverType { _ => return Ok(None), }; let path = std::fs::canonicalize(path)?; - std::fs::read(path).map(|content| Some(content)) + std::fs::read(path).map(Some) } } diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index edee03c4509..1ad46e415af 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -322,17 +322,18 @@ fn read_vk(path: &str) -> Result { fn get_vk(prover_type: ProverType, opts: &DeployerOptions) -> Result { let (required_type, vk_path) = match prover_type { - ProverType::SP1 => (opts.sp1, opts.sp1_vk_path), - ProverType::RISC0 => (opts.risc0, opts.risc0_vk_path), - _ => unimplemented!(prover_type), + ProverType::SP1 => (opts.sp1, &opts.sp1_vk_path), + ProverType::RISC0 => (opts.risc0, &opts.risc0_vk_path), + _ => unimplemented!("{prover_type}"), }; if !required_type { - Bytes::new() + Ok(Bytes::new()) } else { - vk_path.map(read_vk).unwrap_or_else(|| { + vk_path.as_deref().map(read_vk).unwrap_or_else(|| { prover_type .vk(opts.aligned)? + .map(Bytes::from) .ok_or(DeployerError::InternalError(format!( "missing {prover_type} vk" ))) @@ -355,8 +356,8 @@ async fn initialize_contracts( .ok_or(DeployerError::FailedToGetStringFromPath)?, ); - let sp1_vk = get_vk(ProverType::SP1, &opts)?; - let risc0_vk = get_vk(ProverType::RISC0, &opts)?; + let sp1_vk = get_vk(ProverType::SP1, opts)?; + let risc0_vk = get_vk(ProverType::RISC0, opts)?; let deployer_address = get_address_from_secret_key(&opts.private_key)?; diff --git a/crates/l2/sequencer/errors.rs b/crates/l2/sequencer/errors.rs index 2a9c9dbeffc..4f2b2c8a47e 100644 --- a/crates/l2/sequencer/errors.rs +++ b/crates/l2/sequencer/errors.rs @@ -120,6 +120,8 @@ pub enum ProofSenderError { EthClientError(#[from] EthClientError), #[error("Failed to encode calldata: {0}")] CalldataEncodeError(#[from] CalldataEncodeError), + #[error("io error: {0}")] + Io(#[from] std::io::Error), #[error("{0} proof is not present")] ProofNotPresent(ProverType), #[error("Unexpected Error: {0}")] diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index f629b3c0ccf..6970d11baf9 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -262,18 +262,15 @@ async fn send_proof_to_aligned( return Err(ProofSenderError::AlignedWrongProofFormat); }; - let vm_program_code = - prover_type - .aligned_vm_program_code()? - .ok_or(ProofSenderError::InternalError(format!( - "failed to read ELF/VK file for prover type {prover_type}: {e}", - ))); + let Some(vm_program_code) = prover_type.aligned_vm_program_code()? else { + return Err(ProofSenderError::InternalError(format!("no vm_program_code for {prover_type}"))); + }; let verification_data = VerificationData { proving_system, proof, proof_generator_addr: state.l1_address.0.into(), - vm_program_code, + vm_program_code: Some(vm_program_code), verification_key: None, pub_input: None, }; From da6d03498a5ecd44b96afb75bf74e93b59d17440 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 8 Jul 2025 17:42:42 -0300 Subject: [PATCH 087/236] add logs --- crates/l2/contracts/bin/deployer/main.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index 1ad46e415af..a1c9b051644 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -315,6 +315,7 @@ fn read_tdx_deployment_address(name: &str) -> Address { } fn read_vk(path: &str) -> Result { + info!(?path, "Reading vk"); std::fs::read(path) .map(|bytes| bytes.into()) .map_err(DeployerError::from) @@ -331,6 +332,7 @@ fn get_vk(prover_type: ProverType, opts: &DeployerOptions) -> Result Date: Tue, 8 Jul 2025 17:47:54 -0300 Subject: [PATCH 088/236] fix path --- crates/l2/common/src/prover.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index 306e4190b23..3f3cdb0a623 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -88,7 +88,7 @@ impl ProverType { // TODO: these should be compile-time consts let path = match &self { Self::RISC0 => format!( - "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-vk", + "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-vk", env!("CARGO_MANIFEST_DIR") ), // Aligned requires the vk's 32 bytes hash, while the L1 verifier requires From 4e9e05b5d6b9fa817a04c2ab1e3ef440a773d13f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 9 Jul 2025 11:34:05 -0300 Subject: [PATCH 089/236] add mismatch pi error --- crates/l2/sequencer/errors.rs | 7 +++++++ crates/l2/sequencer/l1_proof_verifier.rs | 9 ++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/crates/l2/sequencer/errors.rs b/crates/l2/sequencer/errors.rs index 4f2b2c8a47e..79cde2a62af 100644 --- a/crates/l2/sequencer/errors.rs +++ b/crates/l2/sequencer/errors.rs @@ -166,6 +166,13 @@ pub enum ProofVerifierError { RollupStoreError(#[from] RollupStoreError), #[error("Aligned does not support prover type {0}")] UnsupportedProverType(String), + #[error("Mismatched public inputs for batch {batch_number} and prover type {prover_type}. Existing: {existing_hex}, latest: {latest_hex}")] + MismatchedPublicInputs { + batch_number: u64, + prover_type: ProverType, + existing_hex: String, + latest_hex: String + } } #[derive(Debug, thiserror::Error)] diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index ccdb783c7aa..25d0464cbb9 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -186,9 +186,12 @@ impl L1ProofVerifier { if let Some(ref existing_pi) = current_batch_public_inputs { if *existing_pi != public_inputs { - return Err(ProofVerifierError::InternalError(format!( - "Mismatched public inputs for batch {batch_number}" - ))); + return Err(ProofVerifierError::MismatchedPublicInputs { + batch_number, + prover_type, + existing_hex: hex::encode(existing_pi), + latest_hex: hex::encode(public_inpust), + }); } } else { current_batch_public_inputs = Some(public_inputs.clone()); From f1128d0991e412c738533d48aca093161917f12d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 9 Jul 2025 11:34:39 -0300 Subject: [PATCH 090/236] fix --- crates/l2/sequencer/l1_proof_verifier.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index 25d0464cbb9..4f8ac0e3f98 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -190,7 +190,7 @@ impl L1ProofVerifier { batch_number, prover_type, existing_hex: hex::encode(existing_pi), - latest_hex: hex::encode(public_inpust), + latest_hex: hex::encode(public_inputs), }); } } else { From 22bfdf07d248c97a17a8e9da0bdef5316b3d2dc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 9 Jul 2025 12:23:09 -0300 Subject: [PATCH 091/236] sp1 commit_slice --- crates/l2/prover/zkvm/interface/sp1/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/zkvm/interface/sp1/src/main.rs b/crates/l2/prover/zkvm/interface/sp1/src/main.rs index 6829843dce7..343dc96a911 100644 --- a/crates/l2/prover/zkvm/interface/sp1/src/main.rs +++ b/crates/l2/prover/zkvm/interface/sp1/src/main.rs @@ -8,5 +8,5 @@ pub fn main() { let input = sp1_zkvm::io::read::().0; let output = execution_program(input).unwrap(); - sp1_zkvm::io::commit(&output.encode()); + sp1_zkvm::io::commit_slice(&output.encode()); } From eb52aad56352a5f90ff3116940f65a0687d2d03d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 9 Jul 2025 14:12:11 -0300 Subject: [PATCH 092/236] fix path, logs --- crates/l2/common/src/prover.rs | 6 ++---- crates/l2/prover/zkvm/interface/build.rs | 14 ++++++++++---- crates/l2/sequencer/errors.rs | 8 +++++--- crates/l2/sequencer/l1_proof_sender.rs | 6 ++++-- crates/l2/sequencer/l1_proof_verifier.rs | 5 ++++- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index 3f3cdb0a623..cddb9f7e618 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -1,7 +1,5 @@ use serde::{Deserialize, Serialize}; -use std::{ - fmt::{Debug, Display}, -}; +use std::fmt::{Debug, Display}; use crate::calldata::Value; @@ -69,7 +67,7 @@ impl ProverType { let path = match self { // for risc0, Aligned requires the image id Self::RISC0 => format!( - "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-vk", + "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-vk", env!("CARGO_MANIFEST_DIR") ), // for sp1, Aligned requires the ELF file diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index 1215dc0d09a..b77cc2b265a 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -72,8 +72,14 @@ fn build_sp1_program() { let prover = ProverClient::from_env(); let (_, vk) = prover.setup(&elf); - std::fs::write("./sp1/out/riscv32im-succinct-zkvm-vk-bn254", vk.vk.bytes32_raw()) - .expect("could not write SP1 vk-bn254 to file"); - std::fs::write("./sp1/out/riscv32im-succinct-zkvm-vk-u32", vk.vk.hash_bytes()) - .expect("could not write SP1 vk-u32 to file"); + std::fs::write( + "./sp1/out/riscv32im-succinct-zkvm-vk-bn254", + vk.vk.bytes32_raw(), + ) + .expect("could not write SP1 vk-bn254 to file"); + std::fs::write( + "./sp1/out/riscv32im-succinct-zkvm-vk-u32", + vk.vk.hash_bytes(), + ) + .expect("could not write SP1 vk-u32 to file"); } diff --git a/crates/l2/sequencer/errors.rs b/crates/l2/sequencer/errors.rs index 79cde2a62af..6f868526469 100644 --- a/crates/l2/sequencer/errors.rs +++ b/crates/l2/sequencer/errors.rs @@ -166,13 +166,15 @@ pub enum ProofVerifierError { RollupStoreError(#[from] RollupStoreError), #[error("Aligned does not support prover type {0}")] UnsupportedProverType(String), - #[error("Mismatched public inputs for batch {batch_number} and prover type {prover_type}. Existing: {existing_hex}, latest: {latest_hex}")] + #[error( + "Mismatched public inputs for batch {batch_number} and prover type {prover_type}. Existing: {existing_hex}, latest: {latest_hex}" + )] MismatchedPublicInputs { batch_number: u64, prover_type: ProverType, existing_hex: String, - latest_hex: String - } + latest_hex: String, + }, } #[derive(Debug, thiserror::Error)] diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 6970d11baf9..c73952e00fb 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -255,7 +255,7 @@ async fn send_proof_to_aligned( info!( prover_type = ?batch_proof.prover_type(), ?batch_number, - "Submitting compressed proof to Aligned" + "Submitting proof to Aligned" ); let Some(proof) = batch_proof.compressed() else { @@ -263,7 +263,9 @@ async fn send_proof_to_aligned( }; let Some(vm_program_code) = prover_type.aligned_vm_program_code()? else { - return Err(ProofSenderError::InternalError(format!("no vm_program_code for {prover_type}"))); + return Err(ProofSenderError::InternalError(format!( + "no vm_program_code for {prover_type}" + ))); }; let verification_data = VerificationData { diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index 4f8ac0e3f98..af795e52e27 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -224,7 +224,10 @@ impl L1ProofVerifier { ); aggregated_proofs_for_batch.insert(prover_type, merkle_path); } else { - info!(?prover_type, "No more proofs have been aggregated"); + info!( + ?prover_type, + "Proof has not been aggregated by Aligned, aborting" + ); break; } } From 2f917fde3bfdba6fb9f98c6b6b4b3d58bc12a8a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 9 Jul 2025 17:12:35 -0300 Subject: [PATCH 093/236] add pub input for risc0 --- crates/l2/sequencer/l1_proof_sender.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index c73952e00fb..e6dd5f4190c 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -268,13 +268,19 @@ async fn send_proof_to_aligned( ))); }; + let pub_input = match prover_type { + ProverType::RISC0 => Some(batch_proof.public_values()), + ProverType::SP1 => None, // SP1 pub inputs are embedded in the proof + _ => continue, + }; + let verification_data = VerificationData { proving_system, proof, proof_generator_addr: state.l1_address.0.into(), vm_program_code: Some(vm_program_code), verification_key: None, - pub_input: None, + pub_input, }; submit( From 112bb83ee5180e9b123009f1eaa0e9443ad5efc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 9 Jul 2025 17:19:19 -0300 Subject: [PATCH 094/236] send Aligned proofs asap --- crates/l2/sequencer/l1_proof_sender.rs | 30 ++++++++++++++------------ 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index e6dd5f4190c..12fecb28dc0 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -195,21 +195,14 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe } } - if missing_proof_types.is_empty() { - if state.aligned_mode { - send_proof_to_aligned(state, batch_to_send, proofs.values()).await?; - } else { - send_proof_to_contract(state, batch_to_send, proofs).await?; - } - // if transaction succeeds, then the proof was correctly sent. - state - .rollup_store - .set_latest_sent_batch_proof(batch_to_send) - .await?; - - // TODO: we should anyways handle the "OnChainProposer: batch already verified" error and - // modify the latest sent proof accordingly, otherwise we risk the proof sender getting stuck. + if state.aligned_mode { + // send proofs to Aligned batcher as soon as sequencer receives them + send_proof_to_aligned(state, batch_to_send, proofs.values()).await?; + } else if missing_proofs_types.is_empty() { + // send proofs to L1 verifier as soon as all required proofs are present + send_proof_to_contract(state, batch_to_send, proofs).await?; } else { + // not Aligned, nor all required types present let missing_proof_types: Vec = missing_proof_types .iter() .map(|proof_type| format!("{proof_type:?}")) @@ -219,8 +212,17 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe ?batch_to_send, "Missing batch proof(s), will not send", ); + return Ok(()); } + // if above transaction succeeds, assume proofs are valid + state + .rollup_store + .set_latest_sent_batch_proof(batch_to_send) + .await?; + // TODO: we should anyways handle the "OnChainProposer: batch already verified" error and + // modify the latest sent proof accordingly, otherwise we risk the proof sender getting stuck. + Ok(()) } From 9f9f780bb3db72e6cfd200bc953e19f625f0a739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 9 Jul 2025 17:29:29 -0300 Subject: [PATCH 095/236] fix logic --- crates/l2/sequencer/l1_proof_sender.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 12fecb28dc0..b0ddf3bfe0c 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -194,13 +194,27 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe missing_proof_types.push(proof_type); } } + let missing_types = !missing_proof_types.is_empty(); if state.aligned_mode { // send proofs to Aligned batcher as soon as sequencer receives them send_proof_to_aligned(state, batch_to_send, proofs.values()).await?; - } else if missing_proofs_types.is_empty() { + if !missing_types { + // if sent all required types, next batch + state + .rollup_store + .set_latest_sent_batch_proof(batch_to_send) + .await?; + } + } else if !missing_types { // send proofs to L1 verifier as soon as all required proofs are present send_proof_to_contract(state, batch_to_send, proofs).await?; + state + .rollup_store + .set_latest_sent_batch_proof(batch_to_send) + .await?; + // TODO: we should anyways handle the "OnChainProposer: batch already verified" error and + // modify the latest sent proof accordingly, otherwise we risk the proof sender getting stuck. } else { // not Aligned, nor all required types present let missing_proof_types: Vec = missing_proof_types @@ -215,14 +229,6 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe return Ok(()); } - // if above transaction succeeds, assume proofs are valid - state - .rollup_store - .set_latest_sent_batch_proof(batch_to_send) - .await?; - // TODO: we should anyways handle the "OnChainProposer: batch already verified" error and - // modify the latest sent proof accordingly, otherwise we risk the proof sender getting stuck. - Ok(()) } From cc7814e61cec314ada29bc18267e89686ecb7ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 10 Jul 2025 13:19:19 -0300 Subject: [PATCH 096/236] bump aligned --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 958c5c10490..f30b7ec04ed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -95,7 +95,7 @@ eyre = "0.6.12" kzg-rs = "0.2.6" libsql = "0.9.10" futures = "0.3.31" -aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag = "v0.16.1" } +aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag = "v0.17.0" } # Changing the tag for spawned will break the TDX image build # When updating it try to build the TDX image and update service.nix with the new hash spawned-concurrency = {git = "https://github.com/lambdaclass/spawned.git", tag = "v0.1.2-alpha"} From 1b8f25088bc49e7a60dfda6733d5823ff1dba34b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 10 Jul 2025 13:19:28 -0300 Subject: [PATCH 097/236] nits --- crates/l2/common/src/prover.rs | 2 -- crates/l2/sequencer/l1_proof_sender.rs | 12 ++---------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index cddb9f7e618..418755297ea 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -63,7 +63,6 @@ impl ProverType { } pub fn aligned_vm_program_code(&self) -> std::io::Result>> { - // TODO: these should be compile-time consts let path = match self { // for risc0, Aligned requires the image id Self::RISC0 => format!( @@ -83,7 +82,6 @@ impl ProverType { } pub fn vk(&self, aligned: bool) -> std::io::Result>> { - // TODO: these should be compile-time consts let path = match &self { Self::RISC0 => format!( "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-vk", diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index b0ddf3bfe0c..5449ab87265 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -260,11 +260,7 @@ async fn send_proof_to_aligned( _ => continue, }; - info!( - prover_type = ?batch_proof.prover_type(), - ?batch_number, - "Submitting proof to Aligned" - ); + info!(?prover_type, ?batch_number, "Submitting proof to Aligned"); let Some(proof) = batch_proof.compressed() else { return Err(ProofSenderError::AlignedWrongProofFormat); @@ -300,11 +296,7 @@ async fn send_proof_to_aligned( ) .await?; - info!( - prover_type = ?batch_proof.prover_type(), - ?batch_number, - "Submitted compressed proof to Aligned" - ); + info!(?prover_type, ?batch_number, "Submitted proof to Aligned"); } Ok(()) From b38eacb8b29a1c2ad6a3deed976b6211106887ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 10 Jul 2025 13:33:04 -0300 Subject: [PATCH 098/236] revert sender logic --- Cargo.lock | 2 +- crates/l2/sequencer/l1_proof_sender.rs | 22 ++++++---------------- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ab562afc3e3..e3d85aac368 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -114,7 +114,7 @@ dependencies = [ [[package]] name = "aligned-sdk" version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.16.1#d6c5ffd0b7e4952724c4ee167187bf0945238d0d" +source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.17.0#86cfefdd98568b9d440c1d1cab38e7dce53b08c3" dependencies = [ "ciborium", "dialoguer", diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 5449ab87265..4c87c9347c7 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -194,21 +194,13 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe missing_proof_types.push(proof_type); } } - let missing_types = !missing_proof_types.is_empty(); - - if state.aligned_mode { - // send proofs to Aligned batcher as soon as sequencer receives them - send_proof_to_aligned(state, batch_to_send, proofs.values()).await?; - if !missing_types { - // if sent all required types, next batch - state - .rollup_store - .set_latest_sent_batch_proof(batch_to_send) - .await?; + + if !missing_proof_types.is_empty() { + if state.aligned_mode { + send_proof_to_aligned(state, batch_to_send, proofs.values()).await?; + } else { + send_proof_to_contract(state, batch_to_send, proofs).await?; } - } else if !missing_types { - // send proofs to L1 verifier as soon as all required proofs are present - send_proof_to_contract(state, batch_to_send, proofs).await?; state .rollup_store .set_latest_sent_batch_proof(batch_to_send) @@ -216,7 +208,6 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe // TODO: we should anyways handle the "OnChainProposer: batch already verified" error and // modify the latest sent proof accordingly, otherwise we risk the proof sender getting stuck. } else { - // not Aligned, nor all required types present let missing_proof_types: Vec = missing_proof_types .iter() .map(|proof_type| format!("{proof_type:?}")) @@ -226,7 +217,6 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe ?batch_to_send, "Missing batch proof(s), will not send", ); - return Ok(()); } Ok(()) From 1a29bb3431df9c95773403e996e0c89865b0aec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 10 Jul 2025 16:53:28 -0300 Subject: [PATCH 099/236] fix if statement --- crates/l2/sequencer/l1_proof_sender.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 4c87c9347c7..1ebdbd5d9e3 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -195,7 +195,7 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe } } - if !missing_proof_types.is_empty() { + if missing_proof_types.is_empty() { if state.aligned_mode { send_proof_to_aligned(state, batch_to_send, proofs.values()).await?; } else { From f4ba924d84713aac24ca1b24dd19e1bde882d3ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 11 Jul 2025 11:19:58 -0300 Subject: [PATCH 100/236] change l1_proof_verifier early return --- crates/l2/sequencer/l1_proof_verifier.rs | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index af795e52e27..561b95b4371 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -113,20 +113,12 @@ impl L1ProofVerifier { .get_last_verified_batch(self.on_chain_proposer_address) .await?; - for prover_type in &self.needed_proof_types { - if self - .rollup_store - .get_proof_by_batch_and_type(first_batch_to_verify, *prover_type) - .await? - .is_none() - { - info!( - ?first_batch_to_verify, - ?prover_type, - "Missing proof, skipping verification" - ); - return Ok(()); - }; + if self.rollup_store.get_latest_sent_batch_proof() < first_batch_to_verify { + info!( + ?first_batch_to_verify, + "Batch to verify not sent to Aligned yet" + ); + return Ok(()); } match self From 5cfa26518ae770461a728189b46c4e37677fe180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 11 Jul 2025 11:54:17 -0300 Subject: [PATCH 101/236] remove pi slicing --- crates/l2/contracts/src/l1/OnChainProposer.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 21c2ea24e69..f6b778fb0de 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -278,7 +278,7 @@ contract OnChainProposer is if (REQUIRE_SP1_PROOF) { // If the verification fails, it will revert. - _verifyPublicData(batchNumber, sp1PublicValues[8:]); + _verifyPublicData(batchNumber, sp1PublicValues); ISP1Verifier(SP1_VERIFIER_ADDRESS).verifyProof( SP1_VERIFICATION_KEY, sp1PublicValues, @@ -352,7 +352,7 @@ contract OnChainProposer is ); // Verify public data for the batch - _verifyPublicData(batchNumber, publicInputsList[i][8:]); + _verifyPublicData(batchNumber, publicInputsList[i]); // Verify inclusion in aggregated Aligned proof if (REQUIRE_SP1_PROOF) { From cb3c484bbc83a0b7962103960ad66650ba411ff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 11 Jul 2025 11:59:10 -0300 Subject: [PATCH 102/236] fix --- crates/l2/sequencer/l1_proof_verifier.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index 561b95b4371..fcdf85cd4b5 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -113,7 +113,7 @@ impl L1ProofVerifier { .get_last_verified_batch(self.on_chain_proposer_address) .await?; - if self.rollup_store.get_latest_sent_batch_proof() < first_batch_to_verify { + if self.rollup_store.get_latest_sent_batch_proof().await? < first_batch_to_verify { info!( ?first_batch_to_verify, "Batch to verify not sent to Aligned yet" From a056f4531bca97071e9c012595a8bb110ba2cf4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 11 Jul 2025 14:17:52 -0300 Subject: [PATCH 103/236] remove early return --- crates/l2/sequencer/l1_proof_verifier.rs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index fcdf85cd4b5..e29db754a54 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -113,14 +113,6 @@ impl L1ProofVerifier { .get_last_verified_batch(self.on_chain_proposer_address) .await?; - if self.rollup_store.get_latest_sent_batch_proof().await? < first_batch_to_verify { - info!( - ?first_batch_to_verify, - "Batch to verify not sent to Aligned yet" - ); - return Ok(()); - } - match self .verify_proofs_aggregation(first_batch_to_verify) .await? From 45f43a45b4c4e44069610e0f2bd15588cf2a8735 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 11 Jul 2025 17:45:27 -0300 Subject: [PATCH 104/236] fix docs, fix and improve prover build/init rules --- .github/workflows/main_prover.yaml | 4 +- cmd/ethrex_replay/Makefile | 10 ++--- crates/l2/Makefile | 50 ++++++++++++------------ crates/l2/prover/Cargo.toml | 12 +++++- crates/l2/prover/src/backends/sp1.rs | 6 ++- crates/l2/prover/zkvm/interface/build.rs | 6 ++- docs/l2/aligned_mode.md | 44 +++++++++++---------- docs/l2/prover.md | 6 +-- 8 files changed, 79 insertions(+), 59 deletions(-) diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index 5f03d725874..3d9a05fd702 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -55,7 +55,7 @@ jobs: # if: ${{ always() && github.event_name == 'merge_group' }} run: | cd crates/l2 - make build-prover + make build-prover PROVER=sp1 GPU=true - name: Build test # if: ${{ always() && github.event_name == 'merge_group' }} @@ -89,7 +89,7 @@ jobs: # if: ${{ always() && github.event_name == 'merge_group' }} run: | cd crates/l2 - RUST_LOG=info,ethrex_prover_lib=debug SP1_PROVER=cuda make init-prover & + RUST_LOG=info,ethrex_prover_lib=debug make init-prover PROVER=sp1 GPU=true & PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex_prover -s SIGINT diff --git a/cmd/ethrex_replay/Makefile b/cmd/ethrex_replay/Makefile index 6476811787a..6f157846a7a 100644 --- a/cmd/ethrex_replay/Makefile +++ b/cmd/ethrex_replay/Makefile @@ -9,9 +9,9 @@ REPLAY_ARGS += --rpc-url ${RPC_URL} --network ${NETWORK} --bench # Execution only sp1: - SP1_PROVER=cpu cargo r -r --features sp1 -- execute block ${REPLAY_ARGS} + cargo r -r --features sp1 -- execute block ${REPLAY_ARGS} sp1-gpu: - SP1_PROVER=cuda cargo r -r --features "sp1,gpu" -- execute block ${REPLAY_ARGS} + cargo r -r --features "sp1,gpu" -- execute block ${REPLAY_ARGS} risc0: cargo r -r --no-default-features --features risc0 -- execute block ${REPLAY_ARGS} risc0-gpu: @@ -19,11 +19,11 @@ risc0-gpu: # Proving prove-sp1: - SP1_PROVER=cpu cargo r -r --features sp1 -- prove block ${REPLAY_ARGS} + cargo r -r --features sp1 -- prove block ${REPLAY_ARGS} prove-sp1-gpu: - SP1_PROVER=cuda cargo r -r --features "sp1,gpu" -- prove block ${REPLAY_ARGS} + cargo r -r --features "sp1,gpu" -- prove block ${REPLAY_ARGS} prove-sp1-gpu-ci: - SP1_PROVER=cuda cargo r -r --features "sp1,gpu,ci" -- prove block ${REPLAY_ARGS} + cargo r -r --features "sp1,gpu,ci" -- prove block ${REPLAY_ARGS} prove-risc0: cargo r -r --no-default-features --features risc0 -- prove block ${REPLAY_ARGS} prove-risc0-gpu: diff --git a/crates/l2/Makefile b/crates/l2/Makefile index a7c4f67e2c7..c1389b8b5a6 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -158,38 +158,38 @@ down-l2: ## 🛑 Shuts down the L2 Lambda ethrex Client restart-l2: down-l2 rm-db-l2 init-l2 ## 🔄 Restarts the L2 Lambda ethrex Client -PROVER_SRC_FILES := $(shell find prover/src -type f) - -init-prover: ../../target/release/ethrex_prover ## 🚀 Initializes the Prover - CONFIGS_PATH=${ethrex_L2_CONFIGS_PATH} \ - ../../target/release/ethrex_prover \ - --http.addr 127.0.0.1 \ - --http.port 3900 \ - - cargo r -r --features "l2,risc0,gpu" --manifest-path ./prover/Cargo.toml -- --http.addr 127.0.0.1 --http.port 3900 - build-prover: - rm -f ../../target/release/ethrex_prover - $(MAKE) ../../target/release/ethrex_prover - -../../target/release/ethrex_prover: $(PROVER_SRC_FILES) @if [ -z "$$PROVER" ]; then \ - echo "Error: ProverType (PROVER) is missing. Running in exec mode."; \ - echo "Please provide it as an argument:"; \ - echo "make init-prover PROVER= "; \ - echo "The prover can also be run with GPU (G)"; \ + echo "Error: ProverType (PROVER) is missing. Running with 'exec' backend (no proving)."; \ + echo "You may a different backend by:"; \ + echo "make init-prover PROVER="; \ + exit 1; \ + fi; \ + FEATURES="$$PROVER,l2"; \ + if [ -n "$$GPU" ]; then \ + FEATURES="$$FEATURES,gpu"; \ fi; \ - @if [ -z "$$G" ]; then \ - GPU=""; \ - else \ - GPU=",gpu"; \ + RUSTFLAGS='-C target-cpu=native' \ + cargo build --release --features "$$FEATURES" --manifest-path ./prover/Cargo.toml \ + +init-prover: + @if [ -z "$$PROVER" ]; then \ + echo "Error: ProverType (PROVER) is missing. Running with 'exec' backend (no proving)."; \ + echo "You may a different backend by:"; \ + echo "make init-prover PROVER="; \ + exit 1; \ + fi; \ + FEATURES="$$PROVER,l2"; \ + if [ -n "$$GPU" ]; then \ + FEATURES="$$FEATURES,gpu"; \ fi; \ + CONFIGS_PATH=${ethrex_L2_CONFIGS_PATH} \ RUSTFLAGS='-C target-cpu=native' \ - cargo build --release --features "$$PROVER$$GPU,l2" \ - --manifest-path ./prover/Cargo.toml \ - --bin ethrex_prover + cargo run --release --features "$$FEATURES" --manifest-path ./prover/Cargo.toml -- \ + --http.addr 127.0.0.1 \ + --http.port 3900 rm-db-l2: ## 🛑 Removes the DB used by the L2 cargo run --release --manifest-path ../../Cargo.toml --bin ethrex -- l2 removedb --datadir ${ethrex_L2_DEV_LIBMDBX} --force diff --git a/crates/l2/prover/Cargo.toml b/crates/l2/prover/Cargo.toml index c5ab47eebfa..69ec4aa74ff 100644 --- a/crates/l2/prover/Cargo.toml +++ b/crates/l2/prover/Cargo.toml @@ -52,9 +52,19 @@ name = "ethrex_prover_lib" path = "src/lib.rs" [[bin]] -name = "ethrex_prover" +name = "ethrex_prover_exec" path = "src/main.rs" +[[bin]] +name = "ethrex_prover_risc0" +path = "src/main.rs" +required-features = ["risc0"] + +[[bin]] +name = "ethrex_prover_sp1" +path = "src/main.rs" +required-features = ["sp1"] + [features] # TODO(#2662) Prover shouldn't have l2 as a default but cargo complains about missing field in struct default = ["l2"] diff --git a/crates/l2/prover/src/backends/sp1.rs b/crates/l2/prover/src/backends/sp1.rs index ca6473fc646..939e86807dc 100644 --- a/crates/l2/prover/src/backends/sp1.rs +++ b/crates/l2/prover/src/backends/sp1.rs @@ -21,7 +21,11 @@ struct ProverSetup { } static PROVER_SETUP: LazyLock = LazyLock::new(|| { - let client = ProverClient::from_env(); + let client = if cfg!(feature = "gpu") { + ProverClient::builder().cuda().build() + } else { + ProverClient::builder().cpu().build() + }; let (pk, vk) = client.setup(PROGRAM_ELF); ProverSetup { client, pk, vk } }); diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index b77cc2b265a..27cd3741495 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -69,7 +69,11 @@ fn build_sp1_program() { // ref: https://github.com/succinctlabs/sp1/blob/dev/crates/cli/src/commands/vkey.rs let elf = std::fs::read("./sp1/out/riscv32im-succinct-zkvm-elf") .expect("could not read SP1 elf file"); - let prover = ProverClient::from_env(); + let prover = if cfg!(feature = "gpu") { + ProverClient::builder().cuda().build() + } else { + ProverClient::builder().cpu().build() + }; let (_, vk) = prover.setup(&elf); std::fs::write( diff --git a/docs/l2/aligned_mode.md b/docs/l2/aligned_mode.md index 0b422c5352f..d8ef65898ab 100644 --- a/docs/l2/aligned_mode.md +++ b/docs/l2/aligned_mode.md @@ -2,18 +2,21 @@ This document explains how to run an Ethrex L2 node in **Aligned mode** and highlights the key differences in component behavior compared to the default mode. -## How to Run +- Check [How to Run (local devnet)](#how-to-run-local-devnet) for a development or testing. +- Check [How to Run (testnet)](#how-to-run-testnet) for a prod-like environment. + +## How to run (testnet) > [!IMPORTANT] > For this guide we assumed that there is an L1 running with all Aligned environment set. -### 1. Generate the SP1 ELF Program and Verification Key +### 1. Generate the prover ELF/VK Run: ```bash cd ethrex/crates/l2 -SP1_PROVER=cuda make build-prover PROVER=sp1 PROVER_CLIENT_ALIGNED=true +make build-prover PROVER= # optional: GPU=true ``` This will generate the SP1 ELF program and verification key under: @@ -97,10 +100,10 @@ Aligned params explanation: In a console with `ethrex/crates/l2` as the current directory, run the following command: ```bash -SP1_PROVER=cuda make init-prover PROVER=sp1 PROVER_CLIENT_ALIGNED=true +make init-prover PROVER= # optional: GPU=true ``` -## How to Run Using an Aligned Dev Environment +## How to run (local devnet) > [!IMPORTANT] > This guide asumes you have already generated the SP1 ELF Program and Verification Key. See: [Generate the SP1 ELF Program and Verification Key](#1-generate-the-sp1-elf-program-and-verification-key) @@ -113,7 +116,7 @@ SP1_PROVER=cuda make init-prover PROVER=sp1 PROVER_CLIENT_ALIGNED=true ```bash git clone git@github.com:yetanotherco/aligned_layer.git cd aligned_layer -git checkout tags/v0.16.1 +git checkout tags/v0.17.0 ``` 2. Edit the `aligned_layer/network_params.rs` file to send some funds to the `committer` and `integration_test` addresses: @@ -144,7 +147,7 @@ To stop it run `make ethereum_package_rm` 4. Start the batcher: -First, increase the `max_proof_size` in `aligned_layer/config-files/config-batcher-ethereum-package.yaml` `max_proof_size: 41943040` for example. +First, increase the `max_proof_size` in `aligned_layer/config-files/config-batcher-ethereum-package.yaml` `max_proof_size: 104857600 # 100 MiB` for example. ``` cd aligned_layer @@ -164,7 +167,7 @@ let ws_stream_future = ``` ### Initialize L2 node -1. In another terminal, let's deploy the L1 contracts specifying the `AlignedProofAggregatorService` contract address: +1. In another terminal let's deploy the L1 contracts, specifying the `AlignedProofAggregatorService` contract address, and adding the required prover types (Risc0 or SP1): ``` cd ethrex/crates/l2 cargo run --release --bin ethrex_l2_l1_deployer --manifest-path contracts/Cargo.toml -- \ @@ -195,18 +198,18 @@ This is because not all the accounts are pre-funded from the genesis. 2. Send some funds to the Aligned batcher payment service contract from the proof sender: ``` -cd aligned_layer/batcher/aligned +cd aligned_layer/crates/cli cargo run deposit-to-batcher \ --network devnet \ --private_key 0x39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d \ --amount 1ether ``` -3. Start our l2 node, setting `BRIDGE_ADDRESS` and `ON_CHAIN_PROPOSER_ADDRESS` with the values printed in step 1: +3. Start our l2 node, set `--l1.bridge-address` and `--l1.on-chain-proposer-address` with the values printed in step 1 if they differ with the ones below (they are deterministic so shouldn't change): ``` cd ethrex/crates/l2 -ETHREX_PROOF_COORDINATOR_DEV_MODE=false cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "rollup_storage_libmdbx,metrics" -- l2 init --watcher.block-delay 0 --network ../../fixtures/genesis/l2.json --http.port 1729 --http.addr 0.0.0.0 --evm levm --datadir dev_ethrex_l2 --l1.bridge-address 0x64e731315f33c5dfd03107958cb58f189bda3f2b --l1.on-chain-proposer-address 0xcf03d4747ce82ae9279c93232a80580c67ba0284 --eth.rpc-url http://localhost:8545 --block-producer.coinbase-address 0x0007a881CD95B1484fca47615B64803dad620C8d --committer.l1-private-key 0x385c546456b6a603a1cfcaa9ec9494ba4832da08dd6bcf4de9a71e4a01b74924 --proof-coordinator.l1-private-key 0x39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d --proof-coordinator.addr 127.0.0.1 --aligned --aligned.beacon-url http://127.0.0.1:58801 --aligned-network devnet +ETHREX_PROOF_COORDINATOR_DEV_MODE=false cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "rollup_storage_libmdbx,metrics" -- l2 init --watcher.block-delay 0 --network ../../fixtures/genesis/l2.json --http.port 1729 --http.addr 0.0.0.0 --evm levm --datadir dev_ethrex_l2 --l1.bridge-address 0x64e731315f33c5dfd03107958cb58f189bda3f2b --l1.on-chain-proposer-address 0x458277bb9707e8e6a8143305b11feff3166c17db --eth.rpc-url http://localhost:8545 --block-producer.coinbase-address 0x0007a881CD95B1484fca47615B64803dad620C8d --committer.l1-private-key 0x385c546456b6a603a1cfcaa9ec9494ba4832da08dd6bcf4de9a71e4a01b74924 --proof-coordinator.l1-private-key 0x39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d --proof-coordinator.addr 127.0.0.1 --aligned --aligned.beacon-url http://127.0.0.1:58801 --aligned-network devnet ``` Suggestion: @@ -215,23 +218,22 @@ When running the integration test, consider increasing the `--committer.commit-t --committer.commit-time 120000 ``` -4. Start prover: -``` +4. Start prover(s) in different terminals: +```bash cd ethrex/crates/l2 -SP1_PROVER=cuda make init-prover PROVER=sp1 PROVER_CLIENT_ALIGNED=true +make init-prover PROVER= # optional: GPU=true ``` ### Aggregate proofs: -After some time, you will see that the `l1_proof_verifier` is waiting for Aligned to aggregate the proofs: -``` -2025-06-18T22:03:53.470356Z INFO ethrex_l2::sequencer::l1_proof_verifier: Batch 1 has not yet been aggregated by Aligned. Waiting for 5 seconds -``` +After some time, you will see that the `l1_proof_verifier` is waiting for Aligned to aggregate the proofs. You can trigger an aggregation (for either sp1 or risc0 proofs) by running: -You can aggregate them by running: -``` +```bash cd aligned_layer -make start_proof_aggregator AGGREGATOR=sp1 +make proof_aggregator_start AGGREGATOR= + +# or with gpu acceleration +make proof_aggregator_start_gpu AGGREGATOR= ``` If successful, the `l1_proof_verifier` will print the following logs: diff --git a/docs/l2/prover.md b/docs/l2/prover.md index d4995fac3cb..414afb9f77f 100644 --- a/docs/l2/prover.md +++ b/docs/l2/prover.md @@ -50,7 +50,7 @@ ethrex-prover is able to generate execution proofs of Ethereum Mainnet/Testnet b To run the blockchain (`proposer`) and prover in conjunction, start the `Prover`, use the following command: ```sh -make init-prover T="prover_type (risc0,sp1) G=true" +make init-prover PROVER # optional: GPU=true ``` #### Run the whole system with the prover - In one Machine @@ -66,7 +66,7 @@ make init-prover T="prover_type (risc0,sp1) G=true" - Init the L1 in a docker container on port `8545`. - Deploy the needed contracts for the L2 on the L1. - Start the L2 locally on port `1729`. -4. In a new terminal → `make init-prover T=(sp1,risc0)`. +4. In a new terminal → `make init-prover PROVER= # GPU=true`. After this initialization we should have the prover running in `dev_mode` → No real proofs. @@ -104,7 +104,7 @@ Two servers are required: one for the `Prover` and another for the `sequencer`. - PROVER_CLIENT_PROVING_TIME_MS: The amount of time to wait before requesting new data to prove - `Finally`, to start the `Prover`/`zkvm`, run: - - `make init-prover T=(sp1,risc0) G=true` + - `make init-prover PROVER= # optional: GPU=true` 2. `ProofCoordinator`/`sequencer` → this server just needs rust installed. 1. `cd ethrex/crates/l2` From 31e63cc4b1f1ada9961688a458d8f90c203de09e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 14 Jul 2025 14:27:05 -0300 Subject: [PATCH 105/236] fix sp1 gpu build and prover rules --- crates/l2/Makefile | 58 ++++++++++----------- crates/l2/prover/src/backends/sp1.rs | 64 +++++++++++++----------- crates/l2/prover/zkvm/interface/build.rs | 6 +-- 3 files changed, 64 insertions(+), 64 deletions(-) diff --git a/crates/l2/Makefile b/crates/l2/Makefile index c1389b8b5a6..771fb126244 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -159,37 +159,37 @@ down-l2: ## 🛑 Shuts down the L2 Lambda ethrex Client restart-l2: down-l2 rm-db-l2 init-l2 ## 🔄 Restarts the L2 Lambda ethrex Client build-prover: - @if [ -z "$$PROVER" ]; then \ - echo "Error: ProverType (PROVER) is missing. Running with 'exec' backend (no proving)."; \ - echo "You may a different backend by:"; \ - echo "make init-prover PROVER="; \ - exit 1; \ - fi; \ - FEATURES="$$PROVER,l2"; \ - if [ -n "$$GPU" ]; then \ - FEATURES="$$FEATURES,gpu"; \ - fi; \ - - RUSTFLAGS='-C target-cpu=native' \ - cargo build --release --features "$$FEATURES" --manifest-path ./prover/Cargo.toml \ + @{ \ + if [ -z "$$PROVER" ]; then \ + echo "warn: PROVER= is missing, falling back to 'exec' backend (no proving)" \ + exit 1; \ + fi; \ + FEATURES="$$PROVER"; \ + if [ -n "$$GPU" ]; then \ + FEATURES="$$FEATURES,gpu"; \ + fi; \ + RUSTFLAGS='-C target-cpu=native' \ + cargo build --release --no-default-features --features "$$FEATURES,l2" --manifest-path ./prover/Cargo.toml \ + --bin "ethrex_prover_$$PROVER"; \ + } init-prover: - @if [ -z "$$PROVER" ]; then \ - echo "Error: ProverType (PROVER) is missing. Running with 'exec' backend (no proving)."; \ - echo "You may a different backend by:"; \ - echo "make init-prover PROVER="; \ - exit 1; \ - fi; \ - FEATURES="$$PROVER,l2"; \ - if [ -n "$$GPU" ]; then \ - FEATURES="$$FEATURES,gpu"; \ - fi; \ - - CONFIGS_PATH=${ethrex_L2_CONFIGS_PATH} \ - RUSTFLAGS='-C target-cpu=native' \ - cargo run --release --features "$$FEATURES" --manifest-path ./prover/Cargo.toml -- \ - --http.addr 127.0.0.1 \ - --http.port 3900 + @{ \ + if [ -z "$$PROVER" ]; then \ + echo "warn: PROVER= is missing, falling back to 'exec' backend (no proving)" \ + exit 1; \ + fi; \ + FEATURES="$$PROVER"; \ + if [ -n "$$GPU" ]; then \ + FEATURES="$$FEATURES,gpu"; \ + fi; \ + RUSTFLAGS='-C target-cpu=native' \ + cargo run --release --no-default-features --features "$$FEATURES,l2" --manifest-path ./prover/Cargo.toml \ + --bin "ethrex_prover_$$PROVER" \ + -- \ + --http.addr 127.0.0.1 \ + --http.port 3900; \ + } rm-db-l2: ## 🛑 Removes the DB used by the L2 cargo run --release --manifest-path ../../Cargo.toml --bin ethrex -- l2 removedb --datadir ${ethrex_L2_DEV_LIBMDBX} --force diff --git a/crates/l2/prover/src/backends/sp1.rs b/crates/l2/prover/src/backends/sp1.rs index 939e86807dc..200c899c143 100644 --- a/crates/l2/prover/src/backends/sp1.rs +++ b/crates/l2/prover/src/backends/sp1.rs @@ -1,8 +1,8 @@ use sp1_sdk::{ - EnvProver, HashableKey, ProverClient, SP1ProofWithPublicValues, SP1ProvingKey, SP1Stdin, - SP1VerifyingKey, + EnvProver, HashableKey, Prover, ProverClient, SP1ProofWithPublicValues, SP1ProvingKey, + SP1Stdin, SP1VerifyingKey, }; -use std::{fmt::Debug, sync::LazyLock}; +use std::fmt::Debug; use tracing::info; use zkvm_interface::io::{JSONProgramInput, ProgramInput}; @@ -14,22 +14,6 @@ use ethrex_l2_common::{ static PROGRAM_ELF: &[u8] = include_bytes!("../../zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf"); -struct ProverSetup { - client: EnvProver, - pk: SP1ProvingKey, - vk: SP1VerifyingKey, -} - -static PROVER_SETUP: LazyLock = LazyLock::new(|| { - let client = if cfg!(feature = "gpu") { - ProverClient::builder().cuda().build() - } else { - ProverClient::builder().cpu().build() - }; - let (pk, vk) = client.setup(PROGRAM_ELF); - ProverSetup { client, pk, vk } -}); - pub struct ProveOutput { pub proof: SP1ProofWithPublicValues, pub vk: SP1VerifyingKey, @@ -59,9 +43,13 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { let mut stdin = SP1Stdin::new(); stdin.write(&JSONProgramInput(input)); - let setup = &*PROVER_SETUP; - - setup.client.execute(PROGRAM_ELF, &stdin).run()?; + if cfg!(feature = "gpu") { + let client = ProverClient::builder().cuda().build(); + client.execute(PROGRAM_ELF, &stdin).run()?; + } else { + let client = ProverClient::builder().cpu().build(); + client.execute(PROGRAM_ELF, &stdin).run()?; + } info!("Successfully executed SP1 program."); Ok(()) @@ -74,20 +62,36 @@ pub fn prove( let mut stdin = SP1Stdin::new(); stdin.write(&JSONProgramInput(input)); - let setup = &*PROVER_SETUP; - - let proof = match format { - ProofFormat::Compressed => setup.client.prove(&setup.pk, &stdin).compressed().run()?, - ProofFormat::Groth16 => setup.client.prove(&setup.pk, &stdin).groth16().run()?, + let (proof, vk) = if cfg!(feature = "gpu") { + let client = ProverClient::builder().cuda().build(); + let (pk, vk) = client.setup(PROGRAM_ELF); + let proof = match format { + ProofFormat::Compressed => client.prove(&pk, &stdin).compressed().run()?, + ProofFormat::Groth16 => client.prove(&pk, &stdin).groth16().run()?, + }; + (proof, vk) + } else { + let client = ProverClient::builder().cpu().build(); + let (pk, vk) = client.setup(PROGRAM_ELF); + let proof = match format { + ProofFormat::Compressed => client.prove(&pk, &stdin).compressed().run()?, + ProofFormat::Groth16 => client.prove(&pk, &stdin).groth16().run()?, + }; + (proof, vk) }; info!("Successfully generated SP1Proof."); - Ok(ProveOutput::new(proof, setup.vk.clone())) + Ok(ProveOutput::new(proof, vk)) } pub fn verify(output: &ProveOutput) -> Result<(), Box> { - let setup = &*PROVER_SETUP; - setup.client.verify(&output.proof, &output.vk)?; + if cfg!(feature = "gpu") { + let client = ProverClient::builder().cuda().build(); + client.verify(&output.proof, &output.vk)?; + } else { + let client = ProverClient::builder().cpu().build(); + client.verify(&output.proof, &output.vk)?; + }; Ok(()) } diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index 27cd3741495..b77cc2b265a 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -69,11 +69,7 @@ fn build_sp1_program() { // ref: https://github.com/succinctlabs/sp1/blob/dev/crates/cli/src/commands/vkey.rs let elf = std::fs::read("./sp1/out/riscv32im-succinct-zkvm-elf") .expect("could not read SP1 elf file"); - let prover = if cfg!(feature = "gpu") { - ProverClient::builder().cuda().build() - } else { - ProverClient::builder().cpu().build() - }; + let prover = ProverClient::from_env(); let (_, vk) = prover.setup(&elf); std::fs::write( From 7375cea6ed9609dfd1e21e7a69065746d24bf3c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 14 Jul 2025 15:35:53 -0300 Subject: [PATCH 106/236] fix --- cmd/ethrex_replay/src/run.rs | 3 ++- crates/l2/sequencer/mod.rs | 1 + crates/l2/sequencer/proof_coordinator.rs | 27 +++++++++++------------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/cmd/ethrex_replay/src/run.rs b/cmd/ethrex_replay/src/run.rs index b1259724483..0d6e43e9686 100644 --- a/cmd/ethrex_replay/src/run.rs +++ b/cmd/ethrex_replay/src/run.rs @@ -20,7 +20,8 @@ pub async fn exec(cache: Cache) -> eyre::Result<()> { pub async fn prove(cache: Cache) -> eyre::Result<()> { let input = get_input(cache)?; - ethrex_prover_lib::prove(input, Default::default()).map_err(|e| eyre::Error::msg(e.to_string()))?; + ethrex_prover_lib::prove(input, Default::default()) + .map_err(|e| eyre::Error::msg(e.to_string()))?; Ok(()) } diff --git a/crates/l2/sequencer/mod.rs b/crates/l2/sequencer/mod.rs index 6b549ce0f5a..0118516313f 100644 --- a/crates/l2/sequencer/mod.rs +++ b/crates/l2/sequencer/mod.rs @@ -84,6 +84,7 @@ pub async fn start_l2( rollup_store.clone(), cfg.clone(), blockchain.clone(), + needed_proof_types.clone(), ) .await .inspect_err(|err| { diff --git a/crates/l2/sequencer/proof_coordinator.rs b/crates/l2/sequencer/proof_coordinator.rs index 98050ee41c5..147eb25bf3a 100644 --- a/crates/l2/sequencer/proof_coordinator.rs +++ b/crates/l2/sequencer/proof_coordinator.rs @@ -161,6 +161,7 @@ pub struct ProofCoordinatorState { l1_private_key: SecretKey, blockchain: Arc, validium: bool, + needed_proof_types: Vec, commit_hash: String, aligned: bool, } @@ -171,6 +172,7 @@ impl ProofCoordinatorState { store: Store, rollup_store: StoreRollup, blockchain: Arc, + needed_proof_types: Vec, ) -> Result { let eth_client = EthClient::new_with_config( config.eth.rpc_url.iter().map(AsRef::as_ref).collect(), @@ -204,6 +206,7 @@ impl ProofCoordinatorState { l1_private_key: config.proof_coordinator.l1_private_key, blockchain, validium: config.proof_coordinator.validium, + needed_proof_types, commit_hash: get_commit_hash(), aligned: config.aligned.aligned_mode, }) @@ -228,8 +231,11 @@ impl ProofCoordinator { rollup_store: StoreRollup, cfg: SequencerConfig, blockchain: Arc, + needed_proof_types: Vec, ) -> Result<(), ProofCoordinatorError> { - let state = ProofCoordinatorState::new(&cfg, store, rollup_store, blockchain).await?; + let state = + ProofCoordinatorState::new(&cfg, store, rollup_store, blockchain, needed_proof_types) + .await?; let listener = Arc::new(TcpListener::bind(format!("{}:{}", state.listen_ip, state.port)).await?); let mut proof_coordinator = ProofCoordinator::start(state); @@ -421,20 +427,11 @@ async fn handle_request( return Ok(()); } - let batch_to_verify = 1 + get_latest_sent_batch( - state.needed_proof_types.clone(), - &state.rollup_store, - &state.eth_client, - state.on_chain_proposer_address, - ) - .await - .map_err(|err| ProofCoordinatorError::InternalError(err.to_string()))?; - let mut all_proofs_exist = true; for proof_type in &state.needed_proof_types { if state .rollup_store - .get_proof_by_batch_and_type(batch_to_verify, *proof_type) + .get_proof_by_batch_and_type(batch_to_prove, *proof_type) .await? .is_none() { @@ -444,18 +441,18 @@ async fn handle_request( } let response = - if all_proofs_exist || !state.rollup_store.contains_batch(&batch_to_verify).await? { + if all_proofs_exist || !state.rollup_store.contains_batch(&batch_to_prove).await? { debug!("Sending empty BatchResponse"); ProofData::empty_batch_response() } else { - let input = create_prover_input(state, batch_to_verify).await?; + let input = create_prover_input(state, batch_to_prove).await?; let format = if state.aligned { ProofFormat::Compressed } else { ProofFormat::Groth16 }; - debug!("Sending BatchResponse for block_number: {batch_to_verify}"); - ProofData::batch_response(batch_to_verify, input, format) + debug!("Sending BatchResponse for block_number: {batch_to_prove}"); + ProofData::batch_response(batch_to_prove, input, format) }; send_response(stream, &response).await?; From ab57ce913fb64457f6935de719443a5304e277de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 14 Jul 2025 16:57:57 -0300 Subject: [PATCH 107/236] fix prover make rules --- .github/workflows/main_prover.yaml | 6 +-- .github/workflows/pr-main_l2.yaml | 8 ++-- crates/l2/Makefile | 68 +++++++++++++++--------------- docs/l2/aligned_mode.md | 2 +- 4 files changed, 40 insertions(+), 44 deletions(-) diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index 80f04a86ccb..daac3fb425d 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -46,7 +46,7 @@ jobs: # if: ${{ always() && github.event_name == 'merge_group' }} run: | cd crates/l2 - make build-prover PROVER=sp1 GPU=true + make build-prover-sp1 GPU=true - name: Build test # if: ${{ always() && github.event_name == 'merge_group' }} @@ -80,7 +80,7 @@ jobs: # if: ${{ always() && github.event_name == 'merge_group' }} run: | cd crates/l2 - RUST_LOG=info,ethrex_prover_lib=debug make init-prover PROVER=sp1 GPU=true & + RUST_LOG=info,ethrex_prover_lib=debug make init-prover-sp1 GPU=true & PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex_prover -s SIGINT @@ -92,4 +92,4 @@ jobs: - name: Ensure admin permissions in _work if: always() - run: sudo chown admin:admin -R /home/admin/actions-runner/_work/ \ No newline at end of file + run: sudo chown admin:admin -R /home/admin/actions-runner/_work/ diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index 1fc9b1aed57..4fc41b07200 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -65,12 +65,10 @@ jobs: version: v0.8.29 token: ${{ secrets.GITHUB_TOKEN || '' }} - # also creates empty verification keys (as workflow runs with exec backend) - name: Build prover run: | cd crates/l2 - make build-prover - mkdir -p prover/zkvm/interface/sp1/out && touch prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk + make build-prover-exec - name: Build test run: | @@ -108,7 +106,7 @@ jobs: run: | sudo chmod -R a+rw crates/l2 cd crates/l2 - RUST_LOG=info,ethrex_prover_lib=debug make init-prover & + RUST_LOG=info,ethrex_prover_lib=debug make init-prover-exec & docker logs --follow ethrex_l2 & PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex_prover -s SIGINT @@ -195,7 +193,7 @@ jobs: run: | sudo chmod -R a+rw crates/l2 cd crates/l2 - RUST_LOG=info,ethrex_prover_lib=debug make init-prover & + RUST_LOG=info,ethrex_prover_lib=debug make init-prover-exec & PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex_prover -s SIGINT diff --git a/crates/l2/Makefile b/crates/l2/Makefile index 8fe7e38e8fd..f35fe335064 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -1,6 +1,7 @@ .PHONY: help init down clean restart init-local-l1 init-l1 down-local-l1 \ restart-local-l1 rm-db-l1 clean-contract-deps restart-contract-deps deploy-l1 init-l2 \ - init-l2-no-metrics down-l2 restart-l2 init-prover rm-db-l2 ci_test test \ + init-l2-no-metrics down-l2 restart-l2 init-prover-sp1 init-prover-risc0 init-prover-exec \ + build-prover-sp1 build-prover-risc0 build-prover-exec rm-db-l2 ci_test test \ init-testnet deploy-l1-testnet restart-testnet .DEFAULT_GOAL := help @@ -158,38 +159,35 @@ down-l2: ## 🛑 Shuts down the L2 Lambda ethrex Client restart-l2: down-l2 rm-db-l2 init-l2 ## 🔄 Restarts the L2 Lambda ethrex Client -build-prover: - @{ \ - if [ -z "$$PROVER" ]; then \ - echo "warn: PROVER= is missing, falling back to 'exec' backend (no proving)" \ - exit 1; \ - fi; \ - FEATURES="$$PROVER"; \ - if [ -n "$$GPU" ]; then \ - FEATURES="$$FEATURES,gpu"; \ - fi; \ - RUSTFLAGS='-C target-cpu=native' \ - cargo build --release --no-default-features --features "$$FEATURES,l2" --manifest-path ./prover/Cargo.toml \ - --bin "ethrex_prover_$$PROVER"; \ - } - -init-prover: - @{ \ - if [ -z "$$PROVER" ]; then \ - echo "warn: PROVER= is missing, falling back to 'exec' backend (no proving)" \ - exit 1; \ - fi; \ - FEATURES="$$PROVER"; \ - if [ -n "$$GPU" ]; then \ - FEATURES="$$FEATURES,gpu"; \ - fi; \ - RUSTFLAGS='-C target-cpu=native' \ - cargo run --release --no-default-features --features "$$FEATURES,l2" --manifest-path ./prover/Cargo.toml \ - --bin "ethrex_prover_$$PROVER" \ - -- \ - --http.addr 127.0.0.1 \ - --http.port 3900; \ - } +ifdef GPU + GPU? := gpu +else + GPU? := +endif + +build-prover-sp1: + cargo build --release --no-default-features --features "$(GPU?),sp1,l2" --manifest-path ./prover/Cargo.toml --bin "ethrex_prover_sp1"; + +build-prover-risc0: + cargo build --release --no-default-features --features "$(GPU?),risc0,l2" --manifest-path ./prover/Cargo.toml --bin "ethrex_prover_risc0"; + +build-prover-exec: + cargo build --release --no-default-features --features "$(GPU?),l2" --manifest-path ./prover/Cargo.toml --bin "ethrex_prover_exec"; + +init-prover-sp1: + cargo run --release --no-default-features --features "$(GPU?),sp1,l2" --manifest-path ./prover/Cargo.toml --bin "ethrex_prover_sp1" -- \ + --http.addr 127.0.0.1 \ + --http.port 3900; + +init-prover-risc0: + cargo run --release --no-default-features --features "$(GPU?),risc0,l2" --manifest-path ./prover/Cargo.toml --bin "ethrex_prover_risc0" -- \ + --http.addr 127.0.0.1 \ + --http.port 3900; + +init-prover-exec: + cargo run --release --no-default-features --features "$(GPU?),exec,l2" --manifest-path ./prover/Cargo.toml --bin "ethrex_prover_exec" -- \ + --http.addr 127.0.0.1 \ + --http.port 3900; rm-db-l2: ## 🛑 Removes the DB used by the L2 cargo run --release --manifest-path ../../Cargo.toml --bin ethrex -- l2 removedb --datadir ${ethrex_L2_DEV_LIBMDBX} --force @@ -204,7 +202,7 @@ integration-test: rm-db-l2 rm-db-l1# We create an empty .env file simply because CI_ETHREX_WORKDIR=${CI_ETHREX_WORKDIR} \ ETHREX_L2_VALIDIUM=${ETHREX_L2_VALIDIUM} \ docker compose -f ${ethrex_L2_DOCKER_COMPOSE_PATH} up --detach --build - RUST_LOG=info,ethrex_prover_lib=debug make init-prover & \ + RUST_LOG=info,ethrex_prover_lib=debug make init-prover-exec & \ ETHREX_WATCHER_BRIDGE_ADDRESS=$(shell make bridge-address) \ ETHREX_COMMITTER_ON_CHAIN_PROPOSER_ADDRESS=$(shell make on-chain-proposer-address) \ cargo test l2 --release -- --nocapture --test-threads=1 @@ -220,7 +218,7 @@ integration-test-gpu: rm-db-l2 rm-db-l1 ETHREX_BLOCK_PRODUCER_BLOCK_TIME=${ETHREX_BLOCK_PRODUCER_BLOCK_TIME} \ docker compose -f ${ethrex_L2_DOCKER_COMPOSE_PATH} up --detach --build - RUST_LOG=info,ethrex_prover_lib=debug SP1_PROVER=cuda make init-prover & \ + RUST_LOG=info,ethrex_prover_lib=debug GPU=true make init-prover-sp1 & \ cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex_prover -s SIGINT # if sent a SIGTERM, SP1 does not shuts down the sp1-gpu container diff --git a/docs/l2/aligned_mode.md b/docs/l2/aligned_mode.md index 1320786608e..b22aa55786b 100644 --- a/docs/l2/aligned_mode.md +++ b/docs/l2/aligned_mode.md @@ -16,7 +16,7 @@ Run: ```bash cd ethrex/crates/l2 -make build-prover PROVER= # optional: GPU=true +make build-prover- # optional: GPU=true ``` This will generate the SP1 ELF program and verification key under: From 7759c3815574ca64b688ca7a8c1b7d937c8e9d09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 14 Jul 2025 17:13:00 -0300 Subject: [PATCH 108/236] fix tdx --- crates/l2/tee/quote-gen/Cargo.lock | 2 +- crates/l2/tee/quote-gen/src/sender.rs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/l2/tee/quote-gen/Cargo.lock b/crates/l2/tee/quote-gen/Cargo.lock index 902cc432367..361be775bbb 100644 --- a/crates/l2/tee/quote-gen/Cargo.lock +++ b/crates/l2/tee/quote-gen/Cargo.lock @@ -61,7 +61,7 @@ dependencies = [ [[package]] name = "aligned-sdk" version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.16.1#d6c5ffd0b7e4952724c4ee167187bf0945238d0d" +source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.17.0#86cfefdd98568b9d440c1d1cab38e7dce53b08c3" dependencies = [ "ciborium", "dialoguer", diff --git a/crates/l2/tee/quote-gen/src/sender.rs b/crates/l2/tee/quote-gen/src/sender.rs index 560edc92feb..154f1e4af3f 100644 --- a/crates/l2/tee/quote-gen/src/sender.rs +++ b/crates/l2/tee/quote-gen/src/sender.rs @@ -22,6 +22,7 @@ pub async fn get_batch(commit_hash: String) -> Result<(u64, ProgramInput), Strin ProofData::BatchResponse { batch_number, input, + .. } => match (batch_number, input) { (Some(batch_number), Some(input)) => Ok(( batch_number, From 57bb66ab2cb280897fac0e9e130e774f98363c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 14 Jul 2025 17:35:47 -0300 Subject: [PATCH 109/236] remove fail fast, fix based integration: --- .github/workflows/main_prover_l1.yaml | 1 - .github/workflows/pr-main_l2.yaml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/main_prover_l1.yaml b/.github/workflows/main_prover_l1.yaml index 27380d4e6a9..8bbd5075f3a 100644 --- a/.github/workflows/main_prover_l1.yaml +++ b/.github/workflows/main_prover_l1.yaml @@ -21,7 +21,6 @@ jobs: name: Prove an L1 block with ${{ matrix.backend }} backend runs-on: gpu strategy: - fail-fast: true matrix: backend: ["sp1", "risc0"] steps: diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index 4fc41b07200..2f7d5c7192b 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -138,7 +138,7 @@ jobs: - name: Build prover run: | cd crates/l2 - make build-prover + make build-prover-exec mkdir -p prover/zkvm/interface/sp1/out && touch prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk - name: Start L1 & Deploy contracts From 2cc6a57e5f0d5aa5b3ae98aa2995927ca0d9232e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 14 Jul 2025 18:20:30 -0300 Subject: [PATCH 110/236] update aligned-sdk in service.nix --- crates/l2/tee/quote-gen/service.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/tee/quote-gen/service.nix b/crates/l2/tee/quote-gen/service.nix index abfa0af0806..81c53a88e1a 100644 --- a/crates/l2/tee/quote-gen/service.nix +++ b/crates/l2/tee/quote-gen/service.nix @@ -14,7 +14,7 @@ let cargo = toolchain; rustc = toolchain; }; - gitignoreSrc = pkgs.fetchFromGitHub { + gitignoreSrc = pkgs.fetchFromGitHub { owner = "hercules-ci"; repo = "gitignore.nix"; rev = "637db329424fd7e46cf4185293b9cc8c88c95394"; @@ -35,7 +35,7 @@ let outputHashes = { "bls12_381-0.8.0" = "sha256-8/pXRA7hVAPeMKCZ+PRPfQfxqstw5Ob4MJNp85pv5WQ="; "spawned-concurrency-0.1.0" = "sha256-63xBuGAlrHvIf8hboScUY4LZronPZJZzmfJBdAbUKTU="; - "aligned-sdk-0.1.0" = "sha256-Az97VtggdN4gsYds3myezNJ+mNeSaIDbF0Pq5kq2M3M="; + "aligned-sdk-0.1.0" = "sha256-EuiuuYiyjZ+M+wS5Ayqqcvw0CfUBOhFrLrbdD4SYFM0="; "lambdaworks-crypto-0.12.0" = "sha256-4vgW/O85zVLhhFrcZUwcPjavy/rRWB8LGTabAkPNrDw="; }; }; From fe5c8f4fe678c6af922fa880e08ab3f202c5abea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 15 Jul 2025 14:16:57 -0300 Subject: [PATCH 111/236] fix verifier address env vars --- .github/workflows/pr-main_l2.yaml | 19 +++++++++---------- crates/l2/contracts/bin/deployer/cli.rs | 6 +++--- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index 2f7d5c7192b..6d6b43b1fba 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -88,9 +88,8 @@ jobs: touch .env CI_ETHREX_WORKDIR=/usr/local/bin \ ETHREX_DEPLOYER_DEPLOY_RICH=true \ - ETHREX_DEPLOYER_PICO_CONTRACT_ADDRESS=0x00000000000000000000000000000000000000aa \ - ETHREX_DEPLOYER_SP1_CONTRACT_ADDRESS=0x00000000000000000000000000000000000000aa \ - ETHREX_DEPLOYER_RISC0_CONTRACT_ADDRESS=0x00000000000000000000000000000000000000aa \ + ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ + ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ ETHREX_L2_VALIDIUM=${{ matrix.validium }} \ docker compose -f docker-compose-l2.yaml up contract_deployer @@ -134,7 +133,7 @@ jobs: tags: ethrex_dev:latest push: false - # also creates empty verification keys (as workflow runs with exec backend) + # lso creates empty verification keys (as workflow runs with exec backend) - name: Build prover run: | cd crates/l2 @@ -147,9 +146,9 @@ jobs: touch .env CI_ETHREX_WORKDIR=/usr/local/bin \ ETHREX_DEPLOYER_DEPLOY_RICH=true \ - ETHREX_DEPLOYER_PICO_CONTRACT_ADDRESS=0x00000000000000000000000000000000000000aa \ - ETHREX_DEPLOYER_SP1_CONTRACT_ADDRESS=0x00000000000000000000000000000000000000aa \ - ETHREX_DEPLOYER_RISC0_CONTRACT_ADDRESS=0x00000000000000000000000000000000000000aa \ + ETHREX_DEPLOYER_PICO_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ + ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ + ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ ETHREX_DEPLOYER_DEPLOY_BASED_CONTRACTS=true \ docker compose -f docker-compose-l2.yaml up contract_deployer @@ -226,9 +225,9 @@ jobs: touch .env CI_ETHREX_WORKDIR=/usr/local/bin \ ETHREX_DEPLOYER_DEPLOY_RICH=true \ - ETHREX_DEPLOYER_PICO_CONTRACT_ADDRESS=0x00000000000000000000000000000000000000aa \ - ETHREX_DEPLOYER_SP1_CONTRACT_ADDRESS=0x00000000000000000000000000000000000000aa \ - ETHREX_DEPLOYER_RISC0_CONTRACT_ADDRESS=0x00000000000000000000000000000000000000aa \ + ETHREX_DEPLOYER_PICO_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ + ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ + ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ docker compose -f docker-compose-l2.yaml up contract_deployer - name: Run tests diff --git a/crates/l2/contracts/bin/deployer/cli.rs b/crates/l2/contracts/bin/deployer/cli.rs index 3b28557da90..6f39788cd7a 100644 --- a/crates/l2/contracts/bin/deployer/cli.rs +++ b/crates/l2/contracts/bin/deployer/cli.rs @@ -154,7 +154,7 @@ pub struct DeployerOptions { #[arg( long = "risc0.verifier-address", value_name = "ADDRESS", - env = "ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER", + env = "ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS", help_heading = "Deployer options" )] pub risc0_verifier_address: Option
, @@ -170,7 +170,7 @@ pub struct DeployerOptions { #[arg( long = "sp1.verifier-address", value_name = "ADDRESS", - env = "ETHREX_DEPLOYER_SP1_CONTRACT_VERIFIER", + env = "ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS", help_heading = "Deployer options" )] pub sp1_verifier_address: Option
, @@ -187,7 +187,7 @@ pub struct DeployerOptions { #[arg( long = "tdx.verifier-address", value_name = "ADDRESS", - env = "ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER", + env = "ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS", help_heading = "Deployer options" )] pub tdx_verifier_address: Option
, From 5c46f0aa23507a883370e7d0156de81bb2d56435 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 15 Jul 2025 15:30:48 -0300 Subject: [PATCH 112/236] fix aligned aggergator env var in docker --- crates/l2/docker-compose-l2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/docker-compose-l2.yaml b/crates/l2/docker-compose-l2.yaml index 58251ccf077..0b5c86be0ec 100644 --- a/crates/l2/docker-compose-l2.yaml +++ b/crates/l2/docker-compose-l2.yaml @@ -39,7 +39,7 @@ services: - ETHREX_DEPLOYER_TDX=${ETHREX_DEPLOYER_TDX:-false} - ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER} - ETHREX_DEPLOYER_ALIGNED=${ETHREX_DEPLOYER_ALIGNED:-false} - - ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=${ETHREX_DEPLOYER_ALIGNED_CONTRACT_VERIFIER} + - ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=${ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS} - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 - ETHREX_RISC0_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk - ETHREX_TDX_DEV_MODE=${ETHREX_TDX_DEV_MODE:-false} From ab21891e4cd598056b229c95e8ad9f7cdc7a6aa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 15 Jul 2025 15:30:58 -0300 Subject: [PATCH 113/236] update Cargo.lock --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index e2354c22c5f..d1b4e3e0740 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4213,7 +4213,7 @@ dependencies = [ "futures-util", "hex", "lazy_static", - "reqwest 0.12.20", + "reqwest 0.12.22", "revm 19.7.0", "revm-inspectors", "revm-primitives 15.2.0", From 35a09f3b357c42e0b967a957646a6527305b5772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 15 Jul 2025 17:25:33 -0300 Subject: [PATCH 114/236] use make rules in aligned doc --- docs/l2/aligned_mode.md | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/docs/l2/aligned_mode.md b/docs/l2/aligned_mode.md index b22aa55786b..eaf9bbefb73 100644 --- a/docs/l2/aligned_mode.md +++ b/docs/l2/aligned_mode.md @@ -170,20 +170,11 @@ let ws_stream_future = 1. In another terminal let's deploy the L1 contracts, specifying the `AlignedProofAggregatorService` contract address, and adding the required prover types (Risc0 or SP1): ``` cd ethrex/crates/l2 -cargo run --release --bin ethrex_l2_l1_deployer --manifest-path contracts/Cargo.toml -- \ - --eth-rpc-url http://localhost:8545 \ - --private-key 0x385c546456b6a603a1cfcaa9ec9494ba4832da08dd6bcf4de9a71e4a01b74924 \ - --contracts-path contracts \ - --aligned \ - --aligned.aggregator-address 0xFD471836031dc5108809D173A067e8486B9047A3 \ - # --sp1 \ - # --risc0 \ - --on-chain-proposer-owner 0x4417092b70a3e5f10dc504d0947dd256b965fc62 \ - --bridge-owner 0x4417092b70a3e5f10dc504d0947dd256b965fc62 \ - --deposit-rich \ - --private-keys-file-path ../../fixtures/keys/private_keys_l1.txt \ - --genesis-l1-path ../../fixtures/genesis/l1-dev.json \ - --genesis-l2-path ../../fixtures/genesis/l2.json +ETHREX_L2_ALIGNED=true \ +ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=0xFD471836031dc5108809D173A067e8486B9047A3 \ +ETHREX_L2_SP1=true \ # optional +ETHREX_L2_RISC0=true \ # optional +make deploy-l1 ``` You will see that some deposits fail with the following error: @@ -205,11 +196,15 @@ cargo run deposit-to-batcher \ --amount 1ether ``` -3. Start our l2 node, set `--l1.bridge-address` and `--l1.on-chain-proposer-address` with the values printed in step 1 if they differ with the ones below (they are deterministic so shouldn't change): +3. Start our l2 node, set `--l1.bridge-address` and `--l1.on-chain-proposer-address`: ``` cd ethrex/crates/l2 -ETHREX_PROOF_COORDINATOR_DEV_MODE=false cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "rollup_storage_libmdbx,metrics" -- l2 init --watcher.block-delay 0 --network ../../fixtures/genesis/l2.json --http.port 1729 --http.addr 0.0.0.0 --evm levm --datadir dev_ethrex_l2 --l1.bridge-address 0x64e731315f33c5dfd03107958cb58f189bda3f2b --l1.on-chain-proposer-address 0x458277bb9707e8e6a8143305b11feff3166c17db --eth.rpc-url http://localhost:8545 --block-producer.coinbase-address 0x0007a881CD95B1484fca47615B64803dad620C8d --committer.l1-private-key 0x385c546456b6a603a1cfcaa9ec9494ba4832da08dd6bcf4de9a71e4a01b74924 --proof-coordinator.l1-private-key 0x39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d --proof-coordinator.addr 127.0.0.1 --aligned --aligned.beacon-url http://127.0.0.1:58801 --aligned-network devnet +ETHREX_ALIGNED_MODE=true \ +ETHREX_ALIGNED_BEACON_URL=http://127.0.0.1:58801 \ +ETHREX_ALIGNED_NETWORK=devnet \ +ETHREX_PROOF_COORDINATOR_DEV_MODE=false \ +make init-l2-no-metrics ``` Suggestion: From 40b45606b318d270b7ebbb0b77cb384446d06bd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 15 Jul 2025 17:32:11 -0300 Subject: [PATCH 115/236] remove unexistant exec feature --- crates/l2/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/Makefile b/crates/l2/Makefile index f35fe335064..74eb0444cbf 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -185,7 +185,7 @@ init-prover-risc0: --http.port 3900; init-prover-exec: - cargo run --release --no-default-features --features "$(GPU?),exec,l2" --manifest-path ./prover/Cargo.toml --bin "ethrex_prover_exec" -- \ + cargo run --release --no-default-features --features "$(GPU?),l2" --manifest-path ./prover/Cargo.toml --bin "ethrex_prover_exec" -- \ --http.addr 127.0.0.1 \ --http.port 3900; From fa3832553cb33fd57c1cc858cf878013f479517d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 15 Jul 2025 18:20:10 -0300 Subject: [PATCH 116/236] add docs to prover fns --- crates/l2/common/src/prover.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index 418755297ea..02a12f7a1b0 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -52,6 +52,7 @@ impl ProverType { } } + /// Used to call a getter for the REQUIRE_*_PROOF boolean in the OnChainProposer contract pub fn verifier_getter(&self) -> Option { // These values have to match with the OnChainProposer.sol contract match self { @@ -62,6 +63,8 @@ impl ProverType { } } + /// Fills the "vm_program_code" field of an AlignedVerificationData struct, + /// used for sending a proof to Aligned Layer. pub fn aligned_vm_program_code(&self) -> std::io::Result>> { let path = match self { // for risc0, Aligned requires the image id @@ -81,6 +84,8 @@ impl ProverType { std::fs::read(path).map(Some) } + /// Gets the verification key or image id for this prover backend, used for + /// proof verification. Aligned Layer uses a different vk in SP1's case. pub fn vk(&self, aligned: bool) -> std::io::Result>> { let path = match &self { Self::RISC0 => format!( From c5d37dc6e36e528a544c1db5ebde8c4a45336666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 15 Jul 2025 18:23:44 -0300 Subject: [PATCH 117/236] fixed names --- crates/l2/contracts/src/l1/OnChainProposer.sol | 2 +- crates/l2/contracts/src/l1/based/OnChainProposer.sol | 2 +- docs/l2/sequencer.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index f6b778fb0de..dced687e7d1 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -64,7 +64,7 @@ contract OnChainProposer is address public BRIDGE; /// @dev Deprecated variable. - address public PICOVERIFIER; + address public PICO_VERIFIER_ADDRESS; address public RISC0_VERIFIER_ADDRESS; address public SP1_VERIFIER_ADDRESS; diff --git a/crates/l2/contracts/src/l1/based/OnChainProposer.sol b/crates/l2/contracts/src/l1/based/OnChainProposer.sol index 67c969438b4..7b6105556ff 100644 --- a/crates/l2/contracts/src/l1/based/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/based/OnChainProposer.sol @@ -59,7 +59,7 @@ contract OnChainProposer is address public BRIDGE; /// @dev Deprecated variable. - address public PICOVERIFIER; + address public PICO_VERIFIER_ADDRESS; address public RISC0_VERIFIER_ADDRESS; address public SP1_VERIFIER_ADDRESS; address public TDX_VERIFIER_ADDRESS; diff --git a/docs/l2/sequencer.md b/docs/l2/sequencer.md index 02cac8a5028..2db401e7bef 100644 --- a/docs/l2/sequencer.md +++ b/docs/l2/sequencer.md @@ -33,7 +33,7 @@ For more information about the Proof Coordinator, the Prover, and the proving pr The L1 Proof Sender is responsible for interacting with Ethereum L1 to manage proof verification. Its key functionalities include: - Connecting to Ethereum L1 to send proofs for verification. -- Dynamically determine required proof types based on active verifier contracts (`PICOVERIFIER`, `R0VERIFIER`, `SP1VERIFIER`). +- Dynamically determine required proof types based on active verifier contracts (`REQUIRE__PROOF`). - Ensure blocks are verified in the correct order by invoking the `verify(..)` function in the `OnChainProposer` contract. Upon successful verification, an event is emitted to confirm the block's verification status. - Operating on a configured interval defined by `proof_send_interval_ms`. From 614a19e96a00b7adab53b26ea67893f9c05ff05b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 16 Jul 2025 17:47:25 -0300 Subject: [PATCH 118/236] refactor --- crates/l2/sequencer/l1_proof_verifier.rs | 139 +++++++++++++---------- 1 file changed, 81 insertions(+), 58 deletions(-) diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index e29db754a54..4fa173e4ffb 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -8,7 +8,10 @@ use aligned_sdk::{ common::types::Network, }; use ethrex_common::{Address, H256, U256}; -use ethrex_l2_common::{calldata::Value, prover::ProverType}; +use ethrex_l2_common::{ + calldata::Value, + prover::{BatchProof, ProverType}, +}; use ethrex_l2_sdk::calldata::encode_calldata; use ethrex_rpc::EthClient; use ethrex_storage_rollup::StoreRollup; @@ -144,18 +147,7 @@ impl L1ProofVerifier { let mut batch_number = first_batch_number; loop { - let mut proofs_for_batch = HashMap::new(); - for prover_type in &self.needed_proof_types { - if let Some(proof) = self - .rollup_store - .get_proof_by_batch_and_type(batch_number, *prover_type) - .await? - { - proofs_for_batch.insert(*prover_type, proof); - } else { - break; - } - } + let proofs_for_batch = self.get_proofs_for_batch(batch_number).await?; // break if not all required proof types have been found for this batch if proofs_for_batch.len() != self.needed_proof_types.len() { @@ -168,6 +160,7 @@ impl L1ProofVerifier { for (prover_type, proof) in proofs_for_batch { let public_inputs = proof.public_values(); + // check all proofs have the same public inputs if let Some(ref existing_pi) = current_batch_public_inputs { if *existing_pi != public_inputs { return Err(ProofVerifierError::MismatchedPublicInputs { @@ -181,21 +174,7 @@ impl L1ProofVerifier { current_batch_public_inputs = Some(public_inputs.clone()); } - let verification_data = match prover_type { - ProverType::SP1 => AggregationModeVerificationData::SP1 { - vk: self.sp1_vk, - public_inputs: public_inputs.clone(), - }, - ProverType::RISC0 => AggregationModeVerificationData::Risc0 { - image_id: self.risc0_vk, - public_inputs: public_inputs.clone(), - }, - unsupported_type => { - return Err(ProofVerifierError::UnsupportedProverType( - unsupported_type.to_string(), - )); - } - }; + let verification_data = self.verification_data(prover_type, public_inputs)?; if let Some((merkle_root, merkle_path)) = self.check_proof_aggregation(verification_data).await? @@ -221,35 +200,20 @@ impl L1ProofVerifier { break; } - if let Some(public_inputs) = current_batch_public_inputs { - public_inputs_list.push(Value::Bytes(public_inputs.into())); - - let sp1_path = aggregated_proofs_for_batch - .get(&ProverType::SP1) - .map(|path| { - Value::Array( - path.iter() - .map(|p| Value::FixedBytes(bytes::Bytes::from_owner(*p))) - .collect(), - ) - }) - .unwrap_or_else(|| Value::Array(vec![])); - sp1_merkle_proofs_list.push(sp1_path); - - let risc0_path = aggregated_proofs_for_batch - .get(&ProverType::RISC0) - .map(|path| { - Value::Array( - path.iter() - .map(|p| Value::FixedBytes(bytes::Bytes::from_owner(*p))) - .collect(), - ) - }) - .unwrap_or_else(|| Value::Array(vec![])); - risc0_merkle_proofs_list.push(risc0_path); - } else { - break; - } + let public_inputs = + current_batch_public_inputs.ok_or(ProofVerifierError::InternalError(format!( + "no proofs for batch {batch_number}, are there any needed proof types?" + )))?; + + public_inputs_list.push(Value::Bytes(public_inputs.into())); + + let sp1_merkle_proof = + self.proof_of_inclusion(&aggregated_proofs_for_batch, ProverType::SP1); + let risc0_merkle_proof = + self.proof_of_inclusion(&aggregated_proofs_for_batch, ProverType::RISC0); + + sp1_merkle_proofs_list.push(sp1_merkle_proof); + risc0_merkle_proofs_list.push(risc0_merkle_proof); batch_number += 1; } @@ -285,7 +249,7 @@ impl L1ProofVerifier { ) .await?; - // Store the verify transaction hash for each batch that was aggregated. + // store the verify transaction hash for each batch that was aggregated. for i in 0..num_batches { let batch_number = first_batch_number + i; self.rollup_store @@ -296,6 +260,65 @@ impl L1ProofVerifier { Ok(Some(verify_tx_hash)) } + fn proof_of_inclusion( + &self, + aggregated_proofs_for_batch: &HashMap>, + prover_type: ProverType, + ) -> Value { + aggregated_proofs_for_batch + .get(&prover_type) + .map(|path| { + Value::Array( + path.iter() + .map(|p| Value::FixedBytes(bytes::Bytes::from_owner(*p))) + .collect(), + ) + }) + .unwrap_or_else(|| Value::Array(vec![])) + } + + fn verification_data( + &self, + prover_type: ProverType, + public_inputs: Vec, + ) -> Result { + let verification_data = match prover_type { + ProverType::SP1 => AggregationModeVerificationData::SP1 { + vk: self.sp1_vk, + public_inputs: public_inputs.clone(), + }, + ProverType::RISC0 => AggregationModeVerificationData::Risc0 { + image_id: self.risc0_vk, + public_inputs: public_inputs.clone(), + }, + unsupported_type => { + return Err(ProofVerifierError::UnsupportedProverType( + unsupported_type.to_string(), + )); + } + }; + Ok(verification_data) + } + + async fn get_proofs_for_batch( + &self, + batch_number: u64, + ) -> Result, ProofVerifierError> { + let mut proofs_for_batch = HashMap::new(); + for prover_type in &self.needed_proof_types { + if let Some(proof) = self + .rollup_store + .get_proof_by_batch_and_type(batch_number, *prover_type) + .await? + { + proofs_for_batch.insert(*prover_type, proof); + } else { + break; + } + } + Ok(proofs_for_batch) + } + /// Checks if the received proof was aggregated by Aligned. async fn check_proof_aggregation( &self, From 06ee2b1967feaadbc5c7e5de6a0a305e6660011c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 16 Jul 2025 18:24:59 -0300 Subject: [PATCH 119/236] rename ALIGNED to ALIGNED_MODE --- Cargo.lock | 4 ++-- crates/l2/contracts/src/l1/OnChainProposer.sol | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 29906958bbc..f616a42a5cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4079,7 +4079,7 @@ dependencies = [ "ethrex-storage-rollup", "hex", "keccak-hash", - "reqwest 0.12.20", + "reqwest 0.12.22", "rustc-hex", "secp256k1", "serde", @@ -4443,7 +4443,7 @@ dependencies = [ "hex", "keccak-hash", "lazy_static", - "reqwest 0.12.20", + "reqwest 0.12.22", "secp256k1", "serde_json", "thiserror 2.0.12", diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index dced687e7d1..5a42ecc5b7e 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -90,7 +90,7 @@ contract OnChainProposer is bool public REQUIRE_TDX_PROOF; /// @notice True if verification is done through Aligned Layer instead of smart contract verifiers. - bool public ALIGNED; + bool public ALIGNED_MODE; modifier onlySequencer() { require( @@ -141,7 +141,7 @@ contract OnChainProposer is TDX_VERIFIER_ADDRESS = tdxverifier; // Aligned Layer constants - ALIGNED = aligned; + ALIGNED_MODE = aligned; ALIGNEDPROOFAGGREGATOR = alignedProofAggregator; batchCommitments[0] = BatchCommitmentInfo( @@ -253,7 +253,7 @@ contract OnChainProposer is bytes memory tdxSignature ) external override onlySequencer whenNotPaused { require( - !ALIGNED, + !ALIGNED_MODE, "Batch verification should be done via Aligned Layer. Call verifyBatchesAligned() instead." ); @@ -323,7 +323,7 @@ contract OnChainProposer is bytes32[][] calldata risc0MerkleProofsList ) external override onlySequencer whenNotPaused { require( - ALIGNED, + ALIGNED_MODE, "Batch verification should be done via smart contract verifiers. Call verifyBatch() instead." ); require( firstBatchNumber == lastVerifiedBatch + 1, From 8b15659bbccbdaa2860c34c23327df0270bf306c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 17 Jul 2025 11:18:53 -0300 Subject: [PATCH 120/236] lint --- crates/l2/sequencer/l1_proof_sender.rs | 2 +- crates/l2/sequencer/proof_coordinator.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index cd9119b1cdd..1428915befe 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -266,7 +266,7 @@ async fn send_proof_to_aligned( let verification_data = VerificationData { proving_system, proof, - proof_generator_addr: state.l1_address.0.into(), + proof_generator_addr: state.signer.address().0.into(), vm_program_code: Some(vm_program_code), verification_key: None, pub_input, diff --git a/crates/l2/sequencer/proof_coordinator.rs b/crates/l2/sequencer/proof_coordinator.rs index eb31d225571..82d952aca80 100644 --- a/crates/l2/sequencer/proof_coordinator.rs +++ b/crates/l2/sequencer/proof_coordinator.rs @@ -203,7 +203,7 @@ impl ProofCoordinatorState { elasticity_multiplier: config.block_producer.elasticity_multiplier, rollup_store, rpc_url, - tdx_private_key: config.tdx_private_key, + tdx_private_key: config.proof_coordinator.tdx_private_key, blockchain, validium: config.proof_coordinator.validium, needed_proof_types, From 43474865a507dc4a3dd0f156ca9f57e48a105db4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 17 Jul 2025 11:23:20 -0300 Subject: [PATCH 121/236] remove extra risc0vk assignment --- crates/l2/contracts/src/l1/OnChainProposer.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 5a42ecc5b7e..e65333042f5 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -134,7 +134,6 @@ contract OnChainProposer is REQUIRE_SP1_PROOF = requireSp1Proof; SP1_VERIFIER_ADDRESS = sp1verifier; SP1_VERIFICATION_KEY = sp1Vk; - RISC0_VERIFICATION_KEY = risc0Vk; // TDX constants REQUIRE_TDX_PROOF = requireTdxProof; From ae524ede31164cfbec76499a36d6852661715f84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 17 Jul 2025 14:27:56 -0300 Subject: [PATCH 122/236] fix potentially stuck proof sender --- crates/l2/sequencer/l1_proof_sender.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 1428915befe..786c18db493 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -164,7 +164,12 @@ impl GenServer for L1ProofSender { } async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSenderError> { - let batch_to_send = 1 + state.rollup_store.get_latest_sent_batch_proof().await?; + let last_sent_batch = state.rollup_store.get_latest_sent_batch_proof().await?; + let last_verified_batch = state + .eth_client + .get_last_verified_batch(state.on_chain_proposer_address) + .await?; + let batch_to_send = std::cmp::max(last_sent_batch, last_verified_batch) + 1; let last_committed_batch = state .eth_client From e2ca168cc004e5e8f43d30a7524db5426ebda6cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 17 Jul 2025 14:30:25 -0300 Subject: [PATCH 123/236] remove comment --- crates/l2/sequencer/l1_proof_sender.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 786c18db493..131583f09a5 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -205,8 +205,6 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe .rollup_store .set_latest_sent_batch_proof(batch_to_send) .await?; - // TODO: we should anyways handle the "OnChainProposer: batch already verified" error and - // modify the latest sent proof accordingly, otherwise we risk the proof sender getting stuck. } else { let missing_proof_types: Vec = missing_proof_types .iter() From c5a5426fd8188353a51e237ba41d32bf1d40a4a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 17 Jul 2025 15:07:28 -0300 Subject: [PATCH 124/236] use last_verified in no-aligned --- crates/l2/sequencer/l1_proof_sender.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 131583f09a5..b7898311eb7 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -164,12 +164,16 @@ impl GenServer for L1ProofSender { } async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSenderError> { - let last_sent_batch = state.rollup_store.get_latest_sent_batch_proof().await?; let last_verified_batch = state .eth_client .get_last_verified_batch(state.on_chain_proposer_address) .await?; - let batch_to_send = std::cmp::max(last_sent_batch, last_verified_batch) + 1; + let batch_to_send = if state.aligned_mode { + let last_sent_batch = state.rollup_store.get_latest_sent_batch_proof().await?; + std::cmp::max(last_sent_batch, last_verified_batch) + 1 + } else { + last_verified_batch + }; let last_committed_batch = state .eth_client From dc4eaecff0a9ab829bd8c52ac41230febcfe6b40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 17 Jul 2025 16:40:56 -0300 Subject: [PATCH 125/236] TEMP remove write of aggregator addr from deployer --- crates/l2/contracts/bin/deployer/main.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index c2b5b53a5c1..b31265f0e48 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -666,11 +666,11 @@ fn write_contract_addresses_to_env( "ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER={:#x}", contract_addresses.risc0_verifier_address )?; - writeln!( - writer, - "ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS={:#x}", - contract_addresses.aligned_aggregator_address - )?; + //writeln!( + // writer, + // "ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS={:#x}", + // contract_addresses.aligned_aggregator_address + //)?; writeln!( writer, "ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER={:#x}", From eeb18863ab1e2e196c989554b3fa7539dd873f7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 17 Jul 2025 18:07:10 -0300 Subject: [PATCH 126/236] Revert "TEMP remove write of aggregator addr from deployer" This reverts commit dc4eaecff0a9ab829bd8c52ac41230febcfe6b40. --- crates/l2/contracts/bin/deployer/main.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index 13f1bb67efd..e3fc3454898 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -668,11 +668,11 @@ fn write_contract_addresses_to_env( "ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER={:#x}", contract_addresses.risc0_verifier_address )?; - //writeln!( - // writer, - // "ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS={:#x}", - // contract_addresses.aligned_aggregator_address - //)?; + writeln!( + writer, + "ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS={:#x}", + contract_addresses.aligned_aggregator_address + )?; writeln!( writer, "ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER={:#x}", From 48b5e71b73bbf6432c946a36f2037f1ce2f347e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 17 Jul 2025 18:19:12 -0300 Subject: [PATCH 127/236] TEMP remove aggregator env var from docker compose --- crates/l2/docker-compose-l2.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/l2/docker-compose-l2.yaml b/crates/l2/docker-compose-l2.yaml index ac420cc6118..60fb2c29f66 100644 --- a/crates/l2/docker-compose-l2.yaml +++ b/crates/l2/docker-compose-l2.yaml @@ -39,7 +39,6 @@ services: - ETHREX_DEPLOYER_TDX=${ETHREX_DEPLOYER_TDX:-false} - ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER} - ETHREX_DEPLOYER_ALIGNED=${ETHREX_DEPLOYER_ALIGNED:-false} - - ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=${ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS} - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 - ETHREX_RISC0_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk - ETHREX_TDX_DEV_MODE=${ETHREX_TDX_DEV_MODE:-false} From b0d1eb734c8d18a0846b0fb2a3c209e3d7b2f5bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 21 Jul 2025 15:34:20 -0300 Subject: [PATCH 128/236] Update docs/l2/aligned_mode.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Avila Gastón <72628438+avilagaston9@users.noreply.github.com> --- docs/l2/aligned_mode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/l2/aligned_mode.md b/docs/l2/aligned_mode.md index de8e3262e13..ea60b1f1389 100644 --- a/docs/l2/aligned_mode.md +++ b/docs/l2/aligned_mode.md @@ -222,7 +222,7 @@ When running the integration test, consider increasing the `--committer.commit-t 4. Start prover(s) in different terminals: ```bash cd ethrex/crates/l2 -make init-prover PROVER= # optional: GPU=true +make init-prover- # optional: GPU=true ``` ### Aggregate proofs: From 239c303d1950c48cb3b894f5d1358742827c2340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 21 Jul 2025 15:34:36 -0300 Subject: [PATCH 129/236] Update docs/l2/aligned_mode.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Avila Gastón <72628438+avilagaston9@users.noreply.github.com> --- docs/l2/aligned_mode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/l2/aligned_mode.md b/docs/l2/aligned_mode.md index ea60b1f1389..a1ac4db13d8 100644 --- a/docs/l2/aligned_mode.md +++ b/docs/l2/aligned_mode.md @@ -202,7 +202,7 @@ cargo run deposit-to-batcher \ --amount 1ether ``` -3. Start our l2 node, set `--l1.bridge-address` and `--l1.on-chain-proposer-address`: +3. Start our l2 node: ``` cd ethrex/crates/l2 From 109e16630f28b589a306d133ea264cbb6a533e6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 21 Jul 2025 15:36:31 -0300 Subject: [PATCH 130/236] Update docs/l2/aligned_mode.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Avila Gastón <72628438+avilagaston9@users.noreply.github.com> --- docs/l2/aligned_mode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/l2/aligned_mode.md b/docs/l2/aligned_mode.md index a1ac4db13d8..6e22d351335 100644 --- a/docs/l2/aligned_mode.md +++ b/docs/l2/aligned_mode.md @@ -108,7 +108,7 @@ make init-prover PROVER= # optional: GPU=true ## How to run (local devnet) > [!IMPORTANT] -> This guide asumes you have already generated the SP1 ELF Program and Verification Key. See: [Generate the SP1 ELF Program and Verification Key](#1-generate-the-sp1-elf-program-and-verification-key) +> This guide assumes you have already generated the prover ELF/VK. See: [Generate the prover ELF/VK](#1-generate-the-prover-elfvk) ### Set Up the Aligned Environment From 56ab44ad3714f09da1a6d1747d8101593227e1b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 21 Jul 2025 15:38:23 -0300 Subject: [PATCH 131/236] add comment --- crates/l2/sequencer/l1_proof_verifier.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index 7bc7b7a9f00..c4cbace71c6 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -134,7 +134,7 @@ impl L1ProofVerifier { } /// Checks that all consecutive batches starting from `first_batch_number` have been - /// verified and aggregated in Aligned Layer. + /// verified and aggregated in Aligned Layer. This advances the OnChainProposer. async fn verify_proofs_aggregation( &self, first_batch_number: u64, From 43e5f2b6d3f14b89bf10fad3eb465b3433995cea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 21 Jul 2025 18:01:53 -0300 Subject: [PATCH 132/236] update doc, remove rerun if PROVER_CLIENT_ALIGNED changed --- crates/l2/prover/zkvm/interface/build.rs | 1 - docs/l2/aligned_mode.md | 7 ++----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/crates/l2/prover/zkvm/interface/build.rs b/crates/l2/prover/zkvm/interface/build.rs index b77cc2b265a..fdd6563ad4a 100644 --- a/crates/l2/prover/zkvm/interface/build.rs +++ b/crates/l2/prover/zkvm/interface/build.rs @@ -1,6 +1,5 @@ fn main() { println!("cargo::rerun-if-changed=build.rs"); - println!("cargo:rerun-if-env-changed=PROVER_CLIENT_ALIGNED"); #[cfg(feature = "risc0")] build_risc0_program(); diff --git a/docs/l2/aligned_mode.md b/docs/l2/aligned_mode.md index 6e22d351335..b962a10420c 100644 --- a/docs/l2/aligned_mode.md +++ b/docs/l2/aligned_mode.md @@ -102,7 +102,7 @@ Aligned params explanation: In a console with `ethrex/crates/l2` as the current directory, run the following command: ```bash -make init-prover PROVER= # optional: GPU=true +make init-prover- # optional: GPU=true ``` ## How to run (local devnet) @@ -157,7 +157,7 @@ make batcher_start_ethereum_package ``` This is the Aligned component that receives the proofs before sending them in a batch. > [!Warning] -> If you see the following error in the batcher: `[ERROR aligned_batcher] Unexpected error: Space limit exceeded: Message too long: 16940713 > 16777216` modify the file `aligned_layer/batcher/aligned-batcher/src/lib.rs` at line 433 with the following code: +> > If you see the following error in the batcher: `[ERROR aligned_batcher] Unexpected error: Space limit exceeded: Message too long: 16940713 > 16777216` modify the file `aligned_layer/crates/batcher/src/lib.rs` at line 435 with the following code: ```Rust use tokio_tungstenite::tungstenite::protocol::WebSocketConfig; @@ -190,9 +190,6 @@ You will see that some deposits fail with the following error: This is because not all the accounts are pre-funded from the genesis. -> [!IMPORTANT] -> Save the CommonBridge and OnChainProposer proxy addresses. - 2. Send some funds to the Aligned batcher payment service contract from the proof sender: ``` cd aligned_layer/crates/cli From 240d45be05d68f686a00d7526d561368e14c6e20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 22 Jul 2025 11:46:21 -0300 Subject: [PATCH 133/236] fix batch_to_send --- crates/l2/sequencer/l1_proof_sender.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index b7898311eb7..03efa8b9582 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -172,7 +172,7 @@ async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSe let last_sent_batch = state.rollup_store.get_latest_sent_batch_proof().await?; std::cmp::max(last_sent_batch, last_verified_batch) + 1 } else { - last_verified_batch + last_verified_batch + 1 }; let last_committed_batch = state From 2cef6625cb81e296c682cce12776bac3695748cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 23 Jul 2025 11:23:30 -0300 Subject: [PATCH 134/236] pin zkvm versions --- .../l2/prover/zkvm/interface/risc0/Cargo.lock | 21 ++++++----- .../l2/prover/zkvm/interface/risc0/Cargo.toml | 3 +- .../l2/prover/zkvm/interface/sp1/Cargo.lock | 36 +++++++++---------- .../l2/prover/zkvm/interface/sp1/Cargo.toml | 2 +- 4 files changed, 30 insertions(+), 32 deletions(-) diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock index 2e8f91a2b73..f1cd5c41626 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock @@ -2315,9 +2315,9 @@ dependencies = [ [[package]] name = "io-uring" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" dependencies = [ "bitflags 2.9.1", "cfg-if", @@ -3351,9 +3351,9 @@ dependencies = [ [[package]] name = "risc0-circuit-keccak" -version = "3.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0094af5a57b020388a03bdd3834959c7d62723f1687be81414ade25104d93263" +checksum = "8d339c65b0e011677404bd6bdfe1b0f29748187a568fb2f74df7fb650590181a" dependencies = [ "anyhow", "bytemuck", @@ -3367,9 +3367,9 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "3.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ebded45c902c2b6939924a1cddd1d06b5d1d4ad1531e8798ebfee78f9c038d" +checksum = "8c6501fd3936aea2dd3e55915f34328fe96e6ca25ef00320242f837ae668785b" dependencies = [ "anyhow", "bytemuck", @@ -3382,9 +3382,9 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im" -version = "3.0.0" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15030849f8356f01f23c74b37dbfa4283100b594eb634109993e9e005ef45f64" +checksum = "c80e0a8f0f56106295bb682dbc27093438e163a5f6384a79e877ab895a11d9ae" dependencies = [ "anyhow", "bit-vec", @@ -3467,9 +3467,9 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "2.3.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9684b333c1c5d83f29ce2a92314ccfafd9d8cdfa6c4e19c07b97015d2f1eb9d0" +checksum = "0f1014d2efcb3b359aff878c9aeb6aa949a6d91f091a2ffb5ffd8d928a1ab7f3" dependencies = [ "anyhow", "borsh", @@ -4808,7 +4808,6 @@ dependencies = [ "ethrex-storage", "ethrex-vm", "risc0-zkvm", - "risc0-zkvm-platform", "zkvm_interface", ] diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml index 836ac51d4d3..c307756045a 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml @@ -6,8 +6,7 @@ edition = "2024" [workspace] [dependencies] -risc0-zkvm = { version = "2.1.0", default-features = false, features = ["std"] } -risc0-zkvm-platform = { version = "2.0.2", default-features = false, features = ["sys-getenv"] } +risc0-zkvm = { version = "=2.1.0", default-features = false, features = ["std"] } zkvm_interface = { path = "../", default-features = false, features = ["c-kzg"]} ethrex-common = { path = "../../../../../common", default-features = false } diff --git a/crates/l2/prover/zkvm/interface/sp1/Cargo.lock b/crates/l2/prover/zkvm/interface/sp1/Cargo.lock index 202fa140d14..c5811ca0012 100644 --- a/crates/l2/prover/zkvm/interface/sp1/Cargo.lock +++ b/crates/l2/prover/zkvm/interface/sp1/Cargo.lock @@ -730,9 +730,9 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.9.3" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" +checksum = "441473f2b4b0459a68628c744bc61d23e730fb00128b841d30fa4bb3972257e4" dependencies = [ "proc-macro2", "quote", @@ -777,9 +777,9 @@ checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" [[package]] name = "cc" -version = "1.2.29" +version = "1.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" dependencies = [ "shlex", ] @@ -1917,9 +1917,9 @@ dependencies = [ [[package]] name = "io-uring" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" dependencies = [ "bitflags", "cfg-if", @@ -2600,7 +2600,7 @@ dependencies = [ "bitflags", "lazy_static", "num-traits", - "rand 0.9.1", + "rand 0.9.2", "rand_chacha 0.9.0", "rand_xorshift", "regex-syntax", @@ -2650,9 +2650,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -2900,7 +2900,7 @@ dependencies = [ "primitive-types 0.12.2", "proptest", "rand 0.8.5", - "rand 0.9.1", + "rand 0.9.2", "rlp 0.5.2", "ruint-macro", "serde", @@ -3108,9 +3108,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" dependencies = [ "indexmap 2.10.0", "itoa", @@ -3219,9 +3219,9 @@ checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] name = "sp1-lib" -version = "5.0.5" +version = "5.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0fd8bc101e5603ccf2dc1836ea06410f25ce2298755b2dac626add9be2424b4" +checksum = "7fbb6e3d8741c0fcdaa37e74d2dd9a2bdcbf958d192e438eec59e8071e08124c" dependencies = [ "bincode", "elliptic-curve", @@ -3231,9 +3231,9 @@ dependencies = [ [[package]] name = "sp1-primitives" -version = "5.0.5" +version = "5.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "699935774a5131c1a8b371108d0666c0c80c43611045fb77fae43f2f242676d5" +checksum = "a4d2be9803acce74985f8861b6d5eb375ad1c5f176a68c2c735755937248f25e" dependencies = [ "bincode", "blake3", @@ -3251,9 +3251,9 @@ dependencies = [ [[package]] name = "sp1-zkvm" -version = "5.0.5" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3aae088b8816da83224f4eec9bb08d81b62c02c6e74b1a8c7076fe8d45cd438" +checksum = "16e69fef4d915b10072461e52fd616ca2625409ede7b37a36ec910e1a52bd860" dependencies = [ "cfg-if", "getrandom 0.2.16", diff --git a/crates/l2/prover/zkvm/interface/sp1/Cargo.toml b/crates/l2/prover/zkvm/interface/sp1/Cargo.toml index a3ad69d3576..5ec1c7be5b2 100644 --- a/crates/l2/prover/zkvm/interface/sp1/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/sp1/Cargo.toml @@ -6,7 +6,7 @@ edition = "2024" [workspace] [dependencies] -sp1-zkvm = "5.0.0" +sp1-zkvm = "=5.0.0" zkvm_interface = { path = "../" } ethrex-common = { path = "../../../../../common", default-features = false } From d9768c1182778a93291e02bf75732fde57271b09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 23 Jul 2025 11:51:22 -0300 Subject: [PATCH 135/236] pin rest of deps --- Cargo.lock | 173 +++++++++++---------- crates/l2/prover/Cargo.toml | 2 +- crates/l2/prover/zkvm/interface/Cargo.toml | 6 +- 3 files changed, 95 insertions(+), 86 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0d5d611eb5d..47b6fe8e334 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -302,9 +302,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6177ed26655d4e84e00b65cb494d4e0b8830e7cae7ef5d63087d445a2600fb55" +checksum = "3cfebde8c581a5d37b678d0a48a32decb51efd7a63a08ce2517ddec26db705c8" dependencies = [ "bytes", "cfg-if 1.0.1", @@ -315,7 +315,7 @@ dependencies = [ "itoa", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "paste", - "rand 0.9.1", + "rand 0.9.2", "ruint", "serde", "tiny-keccak", @@ -1835,9 +1835,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.29" +version = "1.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" dependencies = [ "jobserver", "libc", @@ -2549,7 +2549,7 @@ dependencies = [ "futures-core", "mio", "parking_lot 0.12.4", - "rustix 1.0.7", + "rustix 1.0.8", "signal-hook", "signal-hook-mio", "winapi", @@ -5530,7 +5530,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -5604,7 +5604,7 @@ dependencies = [ "tokio", "tokio-rustls 0.26.2", "tower-service", - "webpki-roots 1.0.1", + "webpki-roots 1.0.2", ] [[package]] @@ -5650,9 +5650,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" dependencies = [ "base64 0.22.1", "bytes", @@ -5666,7 +5666,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.6.0", "system-configuration 0.6.1", "tokio", "tower-service", @@ -5993,9 +5993,9 @@ dependencies = [ [[package]] name = "instability" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf9fed6d91cfb734e7476a06bde8300a1b94e217e1b523b6f0cd1a01998c71d" +checksum = "435d80800b936787d62688c927b6490e887c7ef5ff9ce922c6c6050fca75eb9a" dependencies = [ "darling", "indoc", @@ -6024,9 +6024,9 @@ dependencies = [ [[package]] name = "io-uring" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" dependencies = [ "bitflags 2.9.1", "cfg-if 1.0.1", @@ -6484,9 +6484,9 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" +checksum = "4488594b9328dee448adb906d8b126d9b7deb7cf5c22161ee591610bb1be83c0" dependencies = [ "bitflags 2.9.1", "libc", @@ -6494,9 +6494,9 @@ dependencies = [ [[package]] name = "libsql" -version = "0.9.15" +version = "0.9.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc3175d20b8605d4706e539ae7f013dfebf1b4236442b4e58ae6e8c590d89a41" +checksum = "c92f460194a673c29e82520a061a82f83892faca9ce6881db93d591cd38cb3dc" dependencies = [ "anyhow", "async-stream", @@ -6534,9 +6534,9 @@ dependencies = [ [[package]] name = "libsql-ffi" -version = "0.9.15" +version = "0.9.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b8a3faca8c47beef7e6e28d5a8ef2d339bb4d31f50c6a2a5b656dbca6acb865" +checksum = "64691b229b9d5c0754115f59a0e5c0d1bcc102bfe402b96f2bbf9d5150a4ab3c" dependencies = [ "bindgen 0.66.1", "cc", @@ -6546,9 +6546,9 @@ dependencies = [ [[package]] name = "libsql-hrana" -version = "0.9.15" +version = "0.9.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55713f112374dda899471f98c4a0959718897b8eefcd45f4a1cc6d4299a34936" +checksum = "c18b78daf4af8603c048f584faada18c8970f4f3af16df0c3319a92c90d0d696" dependencies = [ "base64 0.21.7", "bytes", @@ -6558,9 +6558,9 @@ dependencies = [ [[package]] name = "libsql-rusqlite" -version = "0.9.15" +version = "0.9.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd1d6d27e67ed7ea59319272d7affe8e61f483ac6e465cad712b1e43670af22a" +checksum = "c502ebc6fd1a7ba1b686c47226016fb8e913080c4021491bda33ca33c6fa1ab4" dependencies = [ "bitflags 2.9.1", "fallible-iterator 0.2.0", @@ -6590,9 +6590,9 @@ dependencies = [ [[package]] name = "libsql-sys" -version = "0.9.15" +version = "0.9.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58340b21ecfce759c5ac1ee76e87fe992b183bb23c51b02a72904a4879ad835" +checksum = "9e7b9ab82fa6122efe2b2fe066043d6330aa4a7aa656b4ec0df9768ffd1ea6a0" dependencies = [ "bytes", "libsql-ffi", @@ -6604,9 +6604,9 @@ dependencies = [ [[package]] name = "libsql_replication" -version = "0.9.15" +version = "0.9.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3f3fba7804633768a1dbfce4ed91da6b48f0a55adc06903161e97d051a487d" +checksum = "aa911faee7c1e039a44aeced5e61b5106fb714782e26d89216c87c83eb1ce410" dependencies = [ "aes", "async-stream", @@ -7857,7 +7857,7 @@ checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if 1.0.1", "libc", - "redox_syscall 0.5.13", + "redox_syscall 0.5.15", "smallvec", "windows-targets 0.52.6", ] @@ -8445,7 +8445,7 @@ dependencies = [ "bitflags 2.9.1", "lazy_static", "num-traits", - "rand 0.9.1", + "rand 0.9.2", "rand_chacha 0.9.0", "rand_xorshift", "regex-syntax 0.8.5", @@ -8548,7 +8548,7 @@ dependencies = [ "quinn-udp", "rustc-hash 2.1.1", "rustls 0.23.29", - "socket2", + "socket2 0.5.10", "thiserror 2.0.12", "tokio", "tracing", @@ -8564,7 +8564,7 @@ dependencies = [ "bytes", "getrandom 0.3.3", "lru-slab", - "rand 0.9.1", + "rand 0.9.2", "ring 0.17.14", "rustc-hash 2.1.1", "rustls 0.23.29", @@ -8585,7 +8585,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.5.10", "tracing", "windows-sys 0.59.0", ] @@ -8651,9 +8651,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -8854,9 +8854,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec" dependencies = [ "bitflags 2.9.1", ] @@ -9037,7 +9037,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.1", + "webpki-roots 1.0.2", ] [[package]] @@ -9326,9 +9326,9 @@ dependencies = [ [[package]] name = "risc0-build" -version = "2.2.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714776c8ccf3e206ecf499dab6561259beef6e7a82dfb49ccf5c911c7350dd5e" +checksum = "d17d6657b1fb615c0482bd4b57aae7850911ed7dbdc8e783df20e93f33209a8f" dependencies = [ "anyhow", "cargo_metadata 0.19.2", @@ -9365,9 +9365,9 @@ dependencies = [ [[package]] name = "risc0-circuit-keccak" -version = "3.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0094af5a57b020388a03bdd3834959c7d62723f1687be81414ade25104d93263" +checksum = "8d339c65b0e011677404bd6bdfe1b0f29748187a568fb2f74df7fb650590181a" dependencies = [ "anyhow", "bytemuck", @@ -9387,9 +9387,9 @@ dependencies = [ [[package]] name = "risc0-circuit-keccak-sys" -version = "3.0.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43afb4572af3b812fb0c83bfac5014041af10937288dcb67b7f9cea649483ff8" +checksum = "a25d00769a0f855d4973e8a85dbffe6e13889ca6a4703cf98d0a2976bdc2be17" dependencies = [ "cc", "cust", @@ -9403,9 +9403,9 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "3.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ebded45c902c2b6939924a1cddd1d06b5d1d4ad1531e8798ebfee78f9c038d" +checksum = "8c6501fd3936aea2dd3e55915f34328fe96e6ca25ef00320242f837ae668785b" dependencies = [ "anyhow", "bytemuck", @@ -9429,9 +9429,9 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion-sys" -version = "3.0.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a0eda7272f9e18b914f33b85b58e221056dbef1477ceb13351e442a06a44de9" +checksum = "0a7f8aee9b6b299fc5c3259a1a6e00a49a17dfd55811e90070840a887b113645" dependencies = [ "glob", "risc0-build-kernel", @@ -9442,9 +9442,9 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im" -version = "3.0.0" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15030849f8356f01f23c74b37dbfa4283100b594eb634109993e9e005ef45f64" +checksum = "c80e0a8f0f56106295bb682dbc27093438e163a5f6384a79e877ab895a11d9ae" dependencies = [ "anyhow", "auto_ops", @@ -9474,9 +9474,9 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im-sys" -version = "3.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5e586b310d20fab3f141a318704ded77c20ace155af4db1b6594bd60579b90" +checksum = "ddac6b8acb1db761872fafa063155d99fe2cc845dc60037cde9ac05466044898" dependencies = [ "cc", "cust", @@ -9582,9 +9582,9 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "2.2.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59aaf1898f2f5d526a79d53dbe6288aeb1ce52a17184b85af84d06dedb1a367" +checksum = "0f1014d2efcb3b359aff878c9aeb6aa949a6d91f091a2ffb5ffd8d928a1ab7f3" dependencies = [ "addr2line 0.22.0", "anyhow", @@ -9758,7 +9758,7 @@ dependencies = [ "primitive-types 0.12.2", "proptest", "rand 0.8.5", - "rand 0.9.1", + "rand 0.9.2", "rlp 0.5.2", "ruint-macro", "serde", @@ -9777,7 +9777,7 @@ name = "runner" version = "0.1.0" dependencies = [ "bytes", - "clap 4.5.40", + "clap 4.5.41", "env_logger 0.11.8", "ethrex-blockchain", "ethrex-common", @@ -9859,15 +9859,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ "bitflags 2.9.1", "errno", "libc", "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -10176,9 +10176,9 @@ dependencies = [ [[package]] name = "sdd" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f5557d2bbddd5afd236ba7856b0e494f5acc7ce805bb0774cc5674b20a06b4" +checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" [[package]] name = "sealed" @@ -10346,9 +10346,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" dependencies = [ "indexmap 2.10.0", "itoa", @@ -10726,6 +10726,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "solang-parser" version = "0.3.3" @@ -10761,16 +10771,15 @@ dependencies = [ [[package]] name = "sp1-build" -version = "5.0.8" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d96525859507f33edf4389c16470d21f6515d33ae7a2c73d5fb0aea36f5aba" +checksum = "62ef25d7c5d6f3a8fb695c57a248abfc7627eaab3a663b89edc3ceafee593cd0" dependencies = [ "anyhow", "cargo_metadata 0.18.1", "chrono", "clap 4.5.41", "dirs 5.0.1", - "sp1-prover", ] [[package]] @@ -11133,11 +11142,11 @@ dependencies = [ [[package]] name = "sp1-sdk" -version = "5.0.8" +version = "5.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6f73c5efb1f55c0b6dca8a9427124eff4e36bd57108a96a7eb5a6034cf61a1" +checksum = "4e05659d72bc760a14e2a9fb801075d5577453318316b2bd1998e0d2781cbc1b" dependencies = [ - "alloy-primitives 1.2.1", + "alloy-primitives 1.3.0", "anyhow", "async-trait", "backoff", @@ -11228,9 +11237,9 @@ dependencies = [ [[package]] name = "spawned-concurrency" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01bd46fef02d70d06e3e169d89eaddf1a3c8db6cb689a541705463f7a12260d7" +checksum = "239ab1253b4872aa9104a64e2d884859d909b075444e3fa8a2f3a1b51f0d3df3" dependencies = [ "futures", "spawned-rt", @@ -11240,9 +11249,9 @@ dependencies = [ [[package]] name = "spawned-rt" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7105ceb2a49ea3566f29c57bdc164397d81db934ff6241e1a555df76069b657" +checksum = "972bbfe83337d386c1ba0a464b3bc6371b285b59cc35dfc3f605a0790f6558b1" dependencies = [ "crossbeam", "tokio", @@ -11630,7 +11639,7 @@ dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix 1.0.7", + "rustix 1.0.8", "windows-sys 0.59.0", ] @@ -11910,16 +11919,16 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "slab", - "socket2", + "socket2 0.5.10", "tokio-macros", "windows-sys 0.52.0", ] [[package]] name = "tokio-io-timeout" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +checksum = "0bd86198d9ee903fedd2f9a2e72014287c0d9167e4ae43b5853007205dda1b76" dependencies = [ "pin-project-lite", "tokio", @@ -12156,7 +12165,7 @@ dependencies = [ "prost 0.13.5", "rustls-native-certs 0.8.1", "rustls-pemfile 2.2.0", - "socket2", + "socket2 0.5.10", "tokio", "tokio-rustls 0.26.2", "tokio-stream", @@ -13148,14 +13157,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.1", + "webpki-roots 1.0.2", ] [[package]] name = "webpki-roots" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8782dd5a41a24eed3a4f40b606249b3e236ca61adf1f25ea4d45c73de122b502" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" dependencies = [ "rustls-pki-types", ] diff --git a/crates/l2/prover/Cargo.toml b/crates/l2/prover/Cargo.toml index 45ef925158d..7214bbcd70b 100644 --- a/crates/l2/prover/Cargo.toml +++ b/crates/l2/prover/Cargo.toml @@ -34,7 +34,7 @@ ethrex-sdk.workspace = true zkvm_interface = { path = "./zkvm/interface", default-features = false } -risc0-zkvm = { version = "2.1.0", optional = true } +risc0-zkvm = { version = "=2.1.0", optional = true } risc0-zkp = {version = "2.0.1", optional = true } sp1-sdk = { version = "5.0.0", optional = true } diff --git a/crates/l2/prover/zkvm/interface/Cargo.toml b/crates/l2/prover/zkvm/interface/Cargo.toml index bddeb52aac3..d9449926cc3 100644 --- a/crates/l2/prover/zkvm/interface/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/Cargo.toml @@ -18,9 +18,9 @@ ethrex-trie = { path = "../../../../common/trie", default-features = false } ethrex-l2-common = { path = "../../../common", default-features = false } [build-dependencies] -risc0-build = { version = "2.1.2", optional = true } -risc0-zkvm = { version = "2.1.0", optional = true } -sp1-build = { version = "5.0.0", optional = true } +risc0-build = { version = "=2.1.2", optional = true } +risc0-zkvm = { version = "=2.1.0", optional = true } +sp1-build = { version = "=5.0.0", optional = true } sp1-sdk = { version = "5.0.0", optional = true } [package.metadata.risc0] From ecb8da203bceb975f0604a141de4231939b5a4b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 23 Jul 2025 12:04:47 -0300 Subject: [PATCH 136/236] remove unused env vars in workflow --- .github/workflows/pr-main_l2.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index 4d405da82b3..b583d220985 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -103,8 +103,6 @@ jobs: touch .env CI_ETHREX_WORKDIR=/usr/local/bin \ ETHREX_DEPLOYER_DEPLOY_RICH=true \ - ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ - ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ ETHREX_L2_VALIDIUM=${{ matrix.validium }} \ docker compose -f docker-compose-l2.yaml up contract_deployer @@ -161,9 +159,6 @@ jobs: touch .env CI_ETHREX_WORKDIR=/usr/local/bin \ ETHREX_DEPLOYER_DEPLOY_RICH=true \ - ETHREX_DEPLOYER_PICO_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ - ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ - ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS=0x00000000000000000000000000000000000000aa \ ETHREX_DEPLOYER_DEPLOY_BASED_CONTRACTS=true \ COMPILE_CONTRACTS=true \ docker compose -f docker-compose-l2.yaml up contract_deployer From 64e4c3eec7796d8f12a669ab9cc1a0ca88acd25c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 23 Jul 2025 12:52:03 -0300 Subject: [PATCH 137/236] downgrade spawned --- Cargo.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b683103fe20..49d5a581e1b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2162,7 +2162,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] @@ -11239,9 +11239,9 @@ dependencies = [ [[package]] name = "spawned-concurrency" -version = "0.1.7" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239ab1253b4872aa9104a64e2d884859d909b075444e3fa8a2f3a1b51f0d3df3" +checksum = "01bd46fef02d70d06e3e169d89eaddf1a3c8db6cb689a541705463f7a12260d7" dependencies = [ "futures", "spawned-rt", @@ -11251,9 +11251,9 @@ dependencies = [ [[package]] name = "spawned-rt" -version = "0.1.7" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "972bbfe83337d386c1ba0a464b3bc6371b285b59cc35dfc3f605a0790f6558b1" +checksum = "a7105ceb2a49ea3566f29c57bdc164397d81db934ff6241e1a555df76069b657" dependencies = [ "crossbeam", "tokio", @@ -13223,7 +13223,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] From 5df8c5015c3ad05a6295d6547b8c759e6412d50e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 23 Jul 2025 15:11:30 -0300 Subject: [PATCH 138/236] revert risc0 platform --- crates/l2/prover/zkvm/interface/risc0/Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml index c307756045a..108f17ad0a0 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml @@ -9,6 +9,9 @@ edition = "2024" risc0-zkvm = { version = "=2.1.0", default-features = false, features = ["std"] } zkvm_interface = { path = "../", default-features = false, features = ["c-kzg"]} +# This crate is necessary to enable the sys_getenv system call +risc0-zkvm-platform = { version = "2.0.2", default-features = false, features = ["sys-getenv"] } + ethrex-common = { path = "../../../../../common", default-features = false } ethrex-storage = { path = "../../../../../storage", default-features = false } ethrex-rlp = { path = "../../../../../common/rlp" } From 8c51004f0c3cb238f1f33b018400b4d583548779 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 23 Jul 2025 15:35:47 -0300 Subject: [PATCH 139/236] update cargo lock --- crates/l2/prover/zkvm/interface/risc0/Cargo.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock index f1cd5c41626..afcca1054d5 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock @@ -4808,6 +4808,7 @@ dependencies = [ "ethrex-storage", "ethrex-vm", "risc0-zkvm", + "risc0-zkvm-platform", "zkvm_interface", ] From be28c2a3e6398d1ee0970359def5981bc7690e4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 23 Jul 2025 17:30:26 -0300 Subject: [PATCH 140/236] fix errors after conflict --- crates/l2/sequencer/l1_proof_sender.rs | 63 +++++++++++------------- crates/l2/sequencer/proof_coordinator.rs | 28 ++++------- 2 files changed, 39 insertions(+), 52 deletions(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 0d4c64aa313..af7e2807899 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -129,21 +129,21 @@ impl L1ProofSender { .map_err(ProofSenderError::GenServerError) } - async fn verify_and_send_proof(state: &L1ProofSenderState) -> Result<(), ProofSenderError> { - let last_verified_batch = state + async fn verify_and_send_proof(&self) -> Result<(), ProofSenderError> { + let last_verified_batch = self .eth_client - .get_last_verified_batch(state.on_chain_proposer_address) + .get_last_verified_batch(self.on_chain_proposer_address) .await?; - let batch_to_send = if state.aligned_mode { - let last_sent_batch = state.rollup_store.get_latest_sent_batch_proof().await?; + let batch_to_send = if self.aligned_mode { + let last_sent_batch = self.rollup_store.get_latest_sent_batch_proof().await?; std::cmp::max(last_sent_batch, last_verified_batch) + 1 } else { last_verified_batch + 1 }; - let last_committed_batch = state + let last_committed_batch = self .eth_client - .get_last_committed_batch(state.on_chain_proposer_address) + .get_last_committed_batch(self.on_chain_proposer_address) .await?; if last_committed_batch < batch_to_send { @@ -153,8 +153,8 @@ impl L1ProofSender { let mut proofs = HashMap::new(); let mut missing_proof_types = Vec::new(); - for proof_type in &state.needed_proof_types { - if let Some(proof) = state + for proof_type in &self.needed_proof_types { + if let Some(proof) = self .rollup_store .get_proof_by_batch_and_type(batch_to_send, *proof_type) .await? @@ -166,13 +166,13 @@ impl L1ProofSender { } if missing_proof_types.is_empty() { - if state.aligned_mode { - send_proof_to_aligned(state, batch_to_send, proofs.values()).await?; + if self.aligned_mode { + self.send_proof_to_aligned(batch_to_send, proofs.values()) + .await?; } else { - send_proof_to_contract(state, batch_to_send, proofs).await?; + self.send_proof_to_contract(batch_to_send, proofs).await?; } - state - .rollup_store + self.rollup_store .set_latest_sent_batch_proof(batch_to_send) .await?; } else { @@ -191,21 +191,21 @@ impl L1ProofSender { } async fn send_proof_to_aligned( - state: &L1ProofSenderState, + &self, batch_number: u64, batch_proofs: impl IntoIterator, ) -> Result<(), ProofSenderError> { info!(?batch_number, "Sending batch proof(s) to Aligned Layer"); - let fee_estimation = estimate_fee(state).await?; + let fee_estimation = Self::estimate_fee(self).await?; - let nonce = get_nonce_from_batcher(state.network.clone(), state.signer.address().0.into()) + let nonce = get_nonce_from_batcher(self.network.clone(), self.signer.address().0.into()) .await .map_err(|err| { ProofSenderError::AlignedGetNonceError(format!("Failed to get nonce: {err:?}")) })?; - let Signer::Local(local_signer) = &state.signer else { + let Signer::Local(local_signer) = &self.signer else { return Err(ProofSenderError::InternalError( "Aligned mode only supports local signer".to_string(), )); @@ -214,7 +214,7 @@ impl L1ProofSender { let wallet = Wallet::from_bytes(local_signer.private_key.as_ref()) .map_err(|_| ProofSenderError::InternalError("Failed to create wallet".to_owned()))?; - let wallet = wallet.with_chain_id(state.l1_chain_id); + let wallet = wallet.with_chain_id(self.l1_chain_id); for batch_proof in batch_proofs { let prover_type = batch_proof.prover_type(); @@ -245,14 +245,14 @@ impl L1ProofSender { let verification_data = VerificationData { proving_system, proof, - proof_generator_addr: state.signer.address().0.into(), + proof_generator_addr: self.signer.address().0.into(), vm_program_code: Some(vm_program_code), verification_key: None, pub_input, }; submit( - state.network.clone(), + self.network.clone(), &verification_data, fee_estimation, wallet.clone(), @@ -267,12 +267,10 @@ impl L1ProofSender { } /// Performs a call to aligned SDK estimate_fee function with retries over all RPC URLs. - async fn estimate_fee( - state: &L1ProofSenderState, - ) -> Result { - for rpc_url in &state.eth_client.urls { + async fn estimate_fee(&self) -> Result { + for rpc_url in &self.eth_client.urls { if let Ok(estimation) = - aligned_estimate_fee(rpc_url.as_str(), state.fee_estimate.clone()).await + aligned_estimate_fee(rpc_url.as_str(), self.fee_estimate.clone()).await { return Ok(estimation); } @@ -283,7 +281,7 @@ impl L1ProofSender { } pub async fn send_proof_to_contract( - state: &L1ProofSenderState, + &self, batch_number: u64, proofs: HashMap, ) -> Result<(), ProofSenderError> { @@ -316,14 +314,13 @@ impl L1ProofSender { let verify_tx_hash = send_verify_tx( calldata, - &state.eth_client, - state.on_chain_proposer_address, - &state.signer, + &self.eth_client, + self.on_chain_proposer_address, + &self.signer, ) .await?; - state - .rollup_store + self.rollup_store .store_verify_tx_by_batch(batch_number, verify_tx_hash) .await?; @@ -345,7 +342,7 @@ impl GenServer for L1ProofSender { type Error = ProofSenderError; async fn handle_cast( - mut self, + self, _message: Self::CastMsg, handle: &GenServerHandle, ) -> CastResponse { diff --git a/crates/l2/sequencer/proof_coordinator.rs b/crates/l2/sequencer/proof_coordinator.rs index 8bb2ddbff3b..f1c6620c526 100644 --- a/crates/l2/sequencer/proof_coordinator.rs +++ b/crates/l2/sequencer/proof_coordinator.rs @@ -229,9 +229,7 @@ impl ProofCoordinator { blockchain: Arc, needed_proof_types: Vec, ) -> Result<(), ProofCoordinatorError> { - let state = - Self::new(&cfg, store, rollup_store, blockchain, needed_proof_types) - .await?; + let state = Self::new(&cfg, store, rollup_store, blockchain, needed_proof_types).await?; let listener = Arc::new(TcpListener::bind(format!("{}:{}", state.listen_ip, state.port)).await?); let mut proof_coordinator = ProofCoordinator::start(state); @@ -273,6 +271,7 @@ impl ProofCoordinator { commit_hash: String, ) -> Result<(), ProofCoordinatorError> { info!("BatchRequest received"); + let batch_to_prove = 1 + self.rollup_store.get_latest_sent_batch_proof().await?; if commit_hash != self.commit_hash { error!( @@ -286,20 +285,11 @@ impl ProofCoordinator { return Ok(()); } - let batch_to_verify = 1 + get_latest_sent_batch( - self.needed_proof_types.clone(), - &self.rollup_store, - &self.eth_client, - self.on_chain_proposer_address, - ) - .await - .map_err(|err| ProofCoordinatorError::InternalError(err.to_string()))?; - let mut all_proofs_exist = true; for proof_type in &self.needed_proof_types { if self .rollup_store - .get_proof_by_batch_and_type(batch_to_verify, *proof_type) + .get_proof_by_batch_and_type(batch_to_prove, *proof_type) .await? .is_none() { @@ -309,22 +299,22 @@ impl ProofCoordinator { } let response = - if all_proofs_exist || !self.rollup_store.contains_batch(&batch_to_verify).await? { + if all_proofs_exist || !self.rollup_store.contains_batch(&batch_to_prove).await? { debug!("Sending empty BatchResponse"); ProofData::empty_batch_response() } else { - let input = self.create_prover_input(batch_to_verify).await?; - let format = if state.aligned { + let input = self.create_prover_input(batch_to_prove).await?; + let format = if self.aligned { ProofFormat::Compressed } else { ProofFormat::Groth16 }; - debug!("Sending BatchResponse for block_number: {batch_to_verify}"); - ProofData::batch_response(batch_to_verify, input, format) + debug!("Sending BatchResponse for block_number: {batch_to_prove}"); + ProofData::batch_response(batch_to_prove, input, format) }; send_response(stream, &response).await?; - info!("BatchResponse sent for batch number: {batch_to_verify}"); + info!("BatchResponse sent for batch number: {batch_to_prove}"); Ok(()) } From e288e305ddd1546491ccaacbba06e7db66e4a5aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 23 Jul 2025 17:33:09 -0300 Subject: [PATCH 141/236] fix submit nonce --- crates/l2/sequencer/l1_proof_sender.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index af7e2807899..a202d86c5bc 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -199,7 +199,7 @@ impl L1ProofSender { let fee_estimation = Self::estimate_fee(self).await?; - let nonce = get_nonce_from_batcher(self.network.clone(), self.signer.address().0.into()) + let mut nonce = get_nonce_from_batcher(self.network.clone(), self.signer.address().0.into()) .await .map_err(|err| { ProofSenderError::AlignedGetNonceError(format!("Failed to get nonce: {err:?}")) @@ -260,6 +260,8 @@ impl L1ProofSender { ) .await?; + nonce = nonce + 1; + info!(?prover_type, ?batch_number, "Submitted proof to Aligned"); } From d7b03ceeeb9617e1d387804c266b3e985e6a5e84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 23 Jul 2025 18:10:20 -0300 Subject: [PATCH 142/236] fix nonce --- crates/l2/sequencer/l1_proof_sender.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index a202d86c5bc..b7ecd56dd67 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -260,7 +260,7 @@ impl L1ProofSender { ) .await?; - nonce = nonce + 1; + nonce = nonce.checked_add(1.into()).ok_or(ProofSenderError::InternalError("aligned batcher nonce overflow".to_string()))?; info!(?prover_type, ?batch_number, "Submitted proof to Aligned"); } From eadfd05432232b400fecfe8004853a5f1e699b8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 23 Jul 2025 18:16:45 -0300 Subject: [PATCH 143/236] fmt --- crates/l2/sequencer/l1_proof_sender.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index b7ecd56dd67..eaadc28547d 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -199,11 +199,12 @@ impl L1ProofSender { let fee_estimation = Self::estimate_fee(self).await?; - let mut nonce = get_nonce_from_batcher(self.network.clone(), self.signer.address().0.into()) - .await - .map_err(|err| { - ProofSenderError::AlignedGetNonceError(format!("Failed to get nonce: {err:?}")) - })?; + let mut nonce = + get_nonce_from_batcher(self.network.clone(), self.signer.address().0.into()) + .await + .map_err(|err| { + ProofSenderError::AlignedGetNonceError(format!("Failed to get nonce: {err:?}")) + })?; let Signer::Local(local_signer) = &self.signer else { return Err(ProofSenderError::InternalError( @@ -260,7 +261,11 @@ impl L1ProofSender { ) .await?; - nonce = nonce.checked_add(1.into()).ok_or(ProofSenderError::InternalError("aligned batcher nonce overflow".to_string()))?; + nonce = nonce + .checked_add(1.into()) + .ok_or(ProofSenderError::InternalError( + "aligned batcher nonce overflow".to_string(), + ))?; info!(?prover_type, ?batch_number, "Submitted proof to Aligned"); } From 12f8255717c8979c366b174c41e1a1f92bf2c208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 31 Jul 2025 15:31:37 -0300 Subject: [PATCH 144/236] clippy --- Cargo.lock | 1 + crates/l2/contracts/bin/deployer/main.rs | 27 ++++++++++++++---------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3a96eb1618e..68dc2d42761 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10785,6 +10785,7 @@ dependencies = [ "chrono", "clap 4.5.41", "dirs 5.0.1", + "sp1-prover", ] [[package]] diff --git a/crates/l2/contracts/bin/deployer/main.rs b/crates/l2/contracts/bin/deployer/main.rs index 56d0ee9a505..babfa097409 100644 --- a/crates/l2/contracts/bin/deployer/main.rs +++ b/crates/l2/contracts/bin/deployer/main.rs @@ -320,20 +320,25 @@ fn get_vk(prover_type: ProverType, opts: &DeployerOptions) -> Result Bytes { - std::fs::read_to_string(path).and_then(|string| string.trim().strip_prefix("0x")).and_then(hex::decode).map(Bytes::from) +fn read_vk(path: &str) -> Result { + let string = std::fs::read_to_string(path)?; + let trimmed = string.trim_start_matches("0x"); + let decoded = hex::decode(trimmed) + .map_err(|_| DeployerError::InternalError("failed to decode vk".to_string()))?; + Ok(Bytes::from(decoded)) } async fn initialize_contracts( From f4ab66cc8f0ebb7d5d27155397141ff7be17f781 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 31 Jul 2025 16:11:10 -0300 Subject: [PATCH 145/236] Update sp1.rs --- crates/l2/prover/src/backends/sp1.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/backends/sp1.rs b/crates/l2/prover/src/backends/sp1.rs index 71858b97e5c..215ce2ef2b5 100644 --- a/crates/l2/prover/src/backends/sp1.rs +++ b/crates/l2/prover/src/backends/sp1.rs @@ -54,7 +54,7 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { let now = Instant::now(); client.execute(PROGRAM_ELF, &stdin).run()?; now.elapsed(); - } + }; info!("Successfully executed SP1 program in {:.2?}", elapsed); Ok(()) From 09e630695cdb3e316a069f38d9849154459e8446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 13 Aug 2025 17:42:00 -0300 Subject: [PATCH 146/236] lint --- cmd/ethrex_replay/src/run.rs | 3 ++- crates/l2/prover/src/lib.rs | 18 +++++++++--------- .../l2/prover/zkvm/interface/risc0/Cargo.toml | 3 --- crates/l2/sequencer/mod.rs | 1 + 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/cmd/ethrex_replay/src/run.rs b/cmd/ethrex_replay/src/run.rs index 6157b1f7b9d..0f396b3bc55 100644 --- a/cmd/ethrex_replay/src/run.rs +++ b/cmd/ethrex_replay/src/run.rs @@ -18,7 +18,8 @@ pub async fn exec(backend: Backend, cache: Cache) -> eyre::Result<()> { pub async fn prove(backend: Backend, cache: Cache) -> eyre::Result<()> { let input = get_input(cache)?; - ethrex_prover_lib::prove(backend, input, Default::default()).map_err(|e| eyre::Error::msg(e.to_string()))?; + ethrex_prover_lib::prove(backend, input, Default::default()) + .map_err(|e| eyre::Error::msg(e.to_string()))?; Ok(()) } diff --git a/crates/l2/prover/src/lib.rs b/crates/l2/prover/src/lib.rs index bffce194e28..ccc9654bc19 100644 --- a/crates/l2/prover/src/lib.rs +++ b/crates/l2/prover/src/lib.rs @@ -3,7 +3,7 @@ pub mod prover; pub mod config; use config::ProverConfig; -use ethrex_l2_common::prover::BatchProof; +use ethrex_l2_common::prover::{BatchProof, ProofFormat}; use tracing::warn; use zkvm_interface::io::ProgramInput; @@ -27,26 +27,26 @@ pub fn execute(backend: Backend, input: ProgramInput) -> Result<(), Box Result> { match backend { - Backend::Exec => backends::exec::prove(input, aligned_mode).map(ProveOutput::Exec), + Backend::Exec => backends::exec::prove(input, format).map(ProveOutput::Exec), #[cfg(feature = "sp1")] - Backend::SP1 => backends::sp1::prove(input, aligned_mode).map(ProveOutput::SP1), + Backend::SP1 => backends::sp1::prove(input, format).map(ProveOutput::SP1), #[cfg(feature = "risc0")] - Backend::RISC0 => backends::risc0::prove(input, aligned_mode).map(ProveOutput::RISC0), + Backend::RISC0 => backends::risc0::prove(input, format).map(ProveOutput::RISC0), } } pub fn to_batch_proof( proof: ProveOutput, - aligned_mode: bool, + format: ProofFormat, ) -> Result> { match proof { - ProveOutput::Exec(proof) => backends::exec::to_batch_proof(proof, aligned_mode), + ProveOutput::Exec(proof) => backends::exec::to_batch_proof(proof, format), #[cfg(feature = "sp1")] - ProveOutput::SP1(proof) => backends::sp1::to_batch_proof(proof, aligned_mode), + ProveOutput::SP1(proof) => backends::sp1::to_batch_proof(proof, format), #[cfg(feature = "risc0")] - ProveOutput::RISC0(receipt) => backends::risc0::to_batch_proof(receipt, aligned_mode), + ProveOutput::RISC0(receipt) => backends::risc0::to_batch_proof(receipt, format), } } diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml index 6b74fc2aaf2..f70bda7940d 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.toml +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.toml @@ -16,9 +16,6 @@ zkvm_interface = { path = "../", default-features = false, features = [ "c-kzg", ] } -# This crate is necessary to enable the sys_getenv system call -risc0-zkvm-platform = { version = "2.0.2", default-features = false, features = ["sys-getenv"] } - ethrex-common = { path = "../../../../../common", default-features = false } ethrex-storage = { path = "../../../../../storage", default-features = false } ethrex-rlp = { path = "../../../../../common/rlp" } diff --git a/crates/l2/sequencer/mod.rs b/crates/l2/sequencer/mod.rs index 60175c31502..957726772f7 100644 --- a/crates/l2/sequencer/mod.rs +++ b/crates/l2/sequencer/mod.rs @@ -6,6 +6,7 @@ use crate::monitor::EthrexMonitor; use crate::{BlockFetcher, SequencerConfig, StateUpdater}; use block_producer::BlockProducer; use ethrex_blockchain::Blockchain; +use ethrex_l2_common::prover::ProverType; use ethrex_storage::Store; use ethrex_storage_rollup::StoreRollup; use l1_committer::L1Committer; From e7968ac38d67ed0a709829670e5d5f04cd2b7bc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 14 Aug 2025 11:03:56 -0300 Subject: [PATCH 147/236] update risc0 cargo lock --- .../l2/prover/zkvm/interface/risc0/Cargo.lock | 246 +++++++++--------- 1 file changed, 123 insertions(+), 123 deletions(-) diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock index f6e339835b3..3dc1b32b3ed 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock @@ -179,7 +179,7 @@ dependencies = [ "const-hex", "derive_more 2.0.1", "foldhash", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "indexmap 2.10.0", "itoa", "k256", @@ -213,7 +213,7 @@ checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -272,7 +272,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -288,7 +288,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", "syn-solidity", "tiny-keccak", ] @@ -305,7 +305,7 @@ dependencies = [ "macro-string", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", "syn-solidity", ] @@ -365,9 +365,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -395,29 +395,29 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "ark-bn254" @@ -461,7 +461,7 @@ checksum = "e7e89fe77d1f0f4fe5b96dfc940923d88d17b6a773808124f21e764dfb063c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -477,7 +477,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "itertools 0.13.0", "num-bigint 0.4.6", "num-integer", @@ -570,7 +570,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -608,7 +608,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -638,7 +638,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -712,7 +712,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -780,7 +780,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -801,7 +801,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -977,7 +977,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -1009,7 +1009,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -1044,15 +1044,15 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0" [[package]] name = "cc" -version = "1.2.30" +version = "1.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +checksum = "2352e5597e9c544d5e6d9c95190d5d27738ade584fa8db0a16e130e5c2b5296e" dependencies = [ "shlex", ] @@ -1084,9 +1084,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.41" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" +checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" dependencies = [ "clap_builder", "clap_derive", @@ -1094,9 +1094,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.41" +version = "4.5.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" +checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" dependencies = [ "anstream", "anstyle", @@ -1106,14 +1106,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.41" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -1325,7 +1325,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -1336,7 +1336,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -1410,7 +1410,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", "unicode-xid", ] @@ -1422,7 +1422,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", "unicode-xid", ] @@ -1455,7 +1455,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -1472,9 +1472,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" @@ -1499,7 +1499,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -1563,7 +1563,7 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -1574,7 +1574,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -1922,7 +1922,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -1960,7 +1960,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -2037,9 +2037,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "group" @@ -2060,9 +2060,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "foldhash", @@ -2286,7 +2286,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -2313,7 +2313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "serde", ] @@ -2475,9 +2475,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.174" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libm" @@ -2523,7 +2523,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -2919,7 +2919,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -2978,9 +2978,9 @@ dependencies = [ [[package]] name = "postcard" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c1de96e20f51df24ca73cafcc4690e044854d803259db27a00a461cb3b9d17a" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" dependencies = [ "cobs", "embedded-io 0.4.0", @@ -3073,14 +3073,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "d61789d7719defeb74ea5fe81f2fdfdbd28a803847077cecce2ff14e1472f6f1" dependencies = [ "unicode-ident", ] @@ -3203,9 +3203,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -3213,9 +3213,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -3238,7 +3238,7 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -3406,9 +3406,9 @@ dependencies = [ [[package]] name = "risc0-circuit-keccak" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d339c65b0e011677404bd6bdfe1b0f29748187a568fb2f74df7fb650590181a" +checksum = "0094af5a57b020388a03bdd3834959c7d62723f1687be81414ade25104d93263" dependencies = [ "anyhow", "bytemuck", @@ -3422,9 +3422,9 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6501fd3936aea2dd3e55915f34328fe96e6ca25ef00320242f837ae668785b" +checksum = "76ebded45c902c2b6939924a1cddd1d06b5d1d4ad1531e8798ebfee78f9c038d" dependencies = [ "anyhow", "bytemuck", @@ -3437,9 +3437,9 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im" -version = "2.0.4" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c80e0a8f0f56106295bb682dbc27093438e163a5f6384a79e877ab895a11d9ae" +checksum = "15030849f8356f01f23c74b37dbfa4283100b594eb634109993e9e005ef45f64" dependencies = [ "anyhow", "bit-vec", @@ -3522,9 +3522,9 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "2.1.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1014d2efcb3b359aff878c9aeb6aa949a6d91f091a2ffb5ffd8d928a1ab7f3" +checksum = "9684b333c1c5d83f29ce2a92314ccfafd9d8cdfa6c4e19c07b97015d2f1eb9d0" dependencies = [ "anyhow", "borsh", @@ -3595,9 +3595,9 @@ dependencies = [ [[package]] name = "ruint" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11256b5fe8c68f56ac6f39ef0720e592f33d2367a4782740d9c9142e889c7fb4" +checksum = "9ecb38f82477f20c5c3d62ef52d7c4e536e38ea9b73fb570a20c5cae0e14bcf6" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -3628,9 +3628,9 @@ checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" [[package]] name = "rustc-demangle" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -3677,9 +3677,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-fork" @@ -3818,14 +3818,14 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] name = "serde_json" -version = "1.0.141" +version = "1.0.142" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" +checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" dependencies = [ "indexmap 2.10.0", "itoa", @@ -3863,7 +3863,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -3923,9 +3923,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" @@ -3944,9 +3944,9 @@ checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] name = "sp1-lib" -version = "5.0.8" +version = "5.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbb6e3d8741c0fcdaa37e74d2dd9a2bdcbf958d192e438eec59e8071e08124c" +checksum = "0e1fe81b6f87134f9170cb642f948ae41e0ee1cd3785e0cb665add5b67106d1a" dependencies = [ "bincode", "serde", @@ -3955,9 +3955,9 @@ dependencies = [ [[package]] name = "sp1-primitives" -version = "5.0.8" +version = "5.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4d2be9803acce74985f8861b6d5eb375ad1c5f176a68c2c735755937248f25e" +checksum = "dddd8d022840c1c500e0d7f82e9b9cf080b7dabd469f06b394010e6a594f692b" dependencies = [ "bincode", "blake3", @@ -4011,7 +4011,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -4050,7 +4050,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -4085,9 +4085,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.104" +version = "2.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "7bc3fcb250e53458e712715cf74285c1f889686520d79294a9ef3bd7aa1fc619" dependencies = [ "proc-macro2", "quote", @@ -4103,7 +4103,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -4114,7 +4114,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -4138,22 +4138,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "0b0949c3a6c842cbde3f1686d6eea5a010516deb7085f79db747562d4102f41e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "cc5b44b4ab9c2fdd0e0512e6bece8388e214c0749f5862b114cc5b7a25daf227" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -4232,9 +4232,9 @@ checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" [[package]] name = "tokio" -version = "1.46.1" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "io-uring", @@ -4246,15 +4246,14 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", "futures-sink", "futures-util", - "hashbrown 0.15.4", "pin-project-lite", "tokio", ] @@ -4296,7 +4295,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -4499,7 +4498,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", "wasm-bindgen-shared", ] @@ -4521,7 +4520,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4587,7 +4586,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -4598,7 +4597,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -4640,7 +4639,7 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.2", + "windows-targets 0.53.3", ] [[package]] @@ -4661,10 +4660,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ + "windows-link", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -4824,7 +4824,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", "synstructure", ] @@ -4845,7 +4845,7 @@ checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -4865,7 +4865,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", "synstructure", ] @@ -4886,7 +4886,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] @@ -4902,9 +4902,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -4919,7 +4919,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.105", ] [[package]] From e89ada0dff1071b8a627bc6fa1d8d1141ddea43f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 19 Aug 2025 16:41:05 -0300 Subject: [PATCH 148/236] remove unused elf paths' --- cmd/ethrex/l2/options.rs | 27 ------------------- crates/l2/sequencer/configs.rs | 1 - docs/CLI.md | 5 ---- .../fundamentals/components/aligned_mode.md | 2 -- 4 files changed, 35 deletions(-) diff --git a/cmd/ethrex/l2/options.rs b/cmd/ethrex/l2/options.rs index 3b67627049f..99bf6748e7f 100644 --- a/cmd/ethrex/l2/options.rs +++ b/cmd/ethrex/l2/options.rs @@ -223,7 +223,6 @@ impl TryFrom for SequencerConfig { &opts.aligned_opts.aligned_network.unwrap_or_default(), ), fee_estimate: opts.aligned_opts.fee_estimate, - sp1_elf_path: opts.aligned_opts.sp1_elf_path, }, monitor: MonitorConfig { enabled: !opts.no_monitor, @@ -617,24 +616,6 @@ pub struct AlignedOptions { help_heading = "Aligned options" )] pub fee_estimate: String, - #[arg( - long, - default_value_t = format!("{}/../../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf", env!("CARGO_MANIFEST_DIR")), - value_name = "ETHREX_ALIGNED_SP1_ELF_PATH", - env = "ETHREX_ALIGNED_SP1_ELF_PATH", - help_heading = "Aligned options", - help = "Path to the SP1 elf. This is used for proof verification." - )] - pub sp1_elf_path: String, - #[arg( - long, - default_value_t = format!("{}/../../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-elf", env!("CARGO_MANIFEST_DIR")), - value_name = "ETHREX_ALIGNED_RISC0_ELF_PATH", - env = "ETHREX_ALIGNED_RISC0_ELF_PATH", - help_heading = "Aligned options", - help = "Path to the RISC0 elf. This is used for proof verification." - )] - pub risc0_elf_path: String, } impl Default for AlignedOptions { @@ -645,14 +626,6 @@ impl Default for AlignedOptions { beacon_url: None, aligned_network: Some("devnet".to_string()), fee_estimate: "instant".to_string(), - sp1_elf_path: format!( - "{}/../../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf", - env!("CARGO_MANIFEST_DIR") - ), - risc0_elf_path: format!( - "{}/../../prover/zkvm/interface/risc0/out/riscv32im-risc0-zkvm-elf", - env!("CARGO_MANIFEST_DIR") - ), } } } diff --git a/crates/l2/sequencer/configs.rs b/crates/l2/sequencer/configs.rs index 1daf500a60c..9f8834cc06f 100644 --- a/crates/l2/sequencer/configs.rs +++ b/crates/l2/sequencer/configs.rs @@ -89,7 +89,6 @@ pub struct AlignedConfig { pub beacon_urls: Vec, pub network: Network, pub fee_estimate: String, - pub sp1_elf_path: String, } #[derive(Clone, Debug)] diff --git a/docs/CLI.md b/docs/CLI.md index 908ad66ce9f..2192d5fc8a7 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -422,11 +422,6 @@ Aligned options: [env: ETHREX_ALIGNED_FEE_ESTIMATE=] [default: instant] - --aligned-sp1-elf-path - Path to the SP1 elf. This is used for proof verification. - - [env: ETHREX_ALIGNED_SP1_ELF_PATH=] - L2 options: --validium If true, L2 will run on validium mode as opposed to the default rollup mode, meaning it will not publish state diffs to the L1. diff --git a/docs/l2/fundamentals/components/aligned_mode.md b/docs/l2/fundamentals/components/aligned_mode.md index 9029b37e46c..816632faac5 100644 --- a/docs/l2/fundamentals/components/aligned_mode.md +++ b/docs/l2/fundamentals/components/aligned_mode.md @@ -86,7 +86,6 @@ cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "l2 --beacon_url \ --aligned-network \ --fee-estimate \ - --aligned-sp1-elf-path ``` Aligned params explanation: @@ -94,7 +93,6 @@ Aligned params explanation: - `--aligned`: Enables aligned mode, enforcing all required parameters. - `ETHREX_ALIGNED_VERIFIER_INTERVAL_MS`: Interval in millisecs, that the `proof_verifier` will sleep between each proof aggregation check. - `ETHREX_ALIGNED_BEACON_CLIENT_URL`: URL of the beacon client used by the Aligned SDK to verify proof aggregations. -- `ETHREX_ALIGNED_SP1_ELF_PATH`: Path to the SP1 ELF program. This is the same file used for SP1 verification outside of Aligned mode. - `ETHREX_ALIGNED_NETWORK` and `ETHREX_ALIGNED_FEE_ESTIMATE`: Parameters used by the [Aligned SDK](https://docs.alignedlayer.com/guides/1.2_sdk_api_reference). ### 4. Running the Prover From 36d2f899889b9e57aef4bbbad8894e3874d2edb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 19 Aug 2025 16:52:06 -0300 Subject: [PATCH 149/236] update risc0 cargo lock --- .../l2/prover/zkvm/interface/risc0/Cargo.lock | 180 +++++++++--------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock index d1ce189cdb3..e38a142a8a7 100644 --- a/crates/l2/prover/zkvm/interface/risc0/Cargo.lock +++ b/crates/l2/prover/zkvm/interface/risc0/Cargo.lock @@ -213,7 +213,7 @@ checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -272,7 +272,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -288,7 +288,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", "syn-solidity", "tiny-keccak", ] @@ -305,7 +305,7 @@ dependencies = [ "macro-string", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", "syn-solidity", ] @@ -461,7 +461,7 @@ checksum = "e7e89fe77d1f0f4fe5b96dfc940923d88d17b6a773808124f21e764dfb063c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -570,7 +570,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -608,7 +608,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -712,7 +712,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -774,13 +774,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -801,7 +801,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -875,9 +875,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" dependencies = [ "serde", ] @@ -977,7 +977,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -1012,7 +1012,7 @@ checksum = "efb7846e0cb180355c2dec69e721edafa36919850f1a9f52ffba4ebc0393cb71" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1032,7 +1032,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -1073,18 +1073,18 @@ checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0" [[package]] name = "cc" -version = "1.2.32" +version = "1.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2352e5597e9c544d5e6d9c95190d5d27738ade584fa8db0a16e130e5c2b5296e" +checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f" dependencies = [ "shlex", ] [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -1136,7 +1136,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -1162,9 +1162,9 @@ checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "const-hex" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" +checksum = "dccd746bf9b1038c0507b7cec21eb2b11222db96a2902c96e8c185d6d20fb9c4" dependencies = [ "cfg-if", "cpufeatures", @@ -1348,7 +1348,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -1359,7 +1359,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -1433,7 +1433,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", "unicode-xid", ] @@ -1445,7 +1445,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", "unicode-xid", ] @@ -1478,7 +1478,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -1522,7 +1522,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -1586,7 +1586,7 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -1597,7 +1597,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -1946,7 +1946,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -1984,7 +1984,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -2310,7 +2310,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -2347,7 +2347,7 @@ version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "cfg-if", "libc", ] @@ -2547,7 +2547,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -2567,7 +2567,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c738d3789301e957a8f7519318fcbb1b92bb95863b28f6938ae5a05be6259f34" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", "itertools 0.14.0", "libm", "ryu", @@ -2638,7 +2638,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block", "core-graphics-types", "foreign-types", @@ -2669,22 +2669,22 @@ dependencies = [ [[package]] name = "munge" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cce144fab80fbb74ec5b89d1ca9d41ddf6b644ab7e986f7d3ed0aab31625cb1" +checksum = "d7feb0b48aa0a25f9fe0899482c6e1379ee7a11b24a53073eacdecb9adb6dc60" dependencies = [ "munge_macro", ] [[package]] name = "munge_macro" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "574af9cd5b9971cbfdf535d6a8d533778481b241c447826d976101e0149392a1" +checksum = "f2e3795a5d2da581a8b252fec6022eee01aea10161a4d1bf237d4cbe47f7e988" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3009,7 +3009,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -3163,14 +3163,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] name = "proc-macro2" -version = "1.0.97" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61789d7719defeb74ea5fe81f2fdfdbd28a803847077cecce2ff14e1472f6f1" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -3183,7 +3183,7 @@ checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.9.1", + "bitflags 2.9.2", "lazy_static", "num-traits", "rand 0.9.2", @@ -3212,7 +3212,7 @@ checksum = "ca414edb151b4c8d125c12566ab0d74dc9cdba36fb80eb7b848c15f495fd32d1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3357,7 +3357,7 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -3484,7 +3484,7 @@ dependencies = [ "alloy-eip7702", "alloy-primitives", "auto_impl", - "bitflags 2.9.1", + "bitflags 2.9.2", "bitvec", "c-kzg", "cfg-if", @@ -3693,13 +3693,13 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e147371c75553e1e2fcdb483944a8540b8438c31426279553b9a8182a9b7b65" +checksum = "19f5c3e5da784cd8c69d32cdc84673f3204536ca56e1fa01be31a74b92c932ac" dependencies = [ "bytecheck", "bytes", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "indexmap 2.10.0", "munge", "ptr_meta", @@ -3712,13 +3712,13 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246b40ac189af6c675d124b802e8ef6d5246c53e17367ce9501f8f66a81abb7a" +checksum = "4270433626cffc9c4c1d3707dd681f2a2718d3d7b09ad754bec137acecda8d22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3826,7 +3826,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "errno", "libc", "linux-raw-sys", @@ -3985,14 +3985,14 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.142" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ "indexmap 2.10.0", "itoa", @@ -4030,7 +4030,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -4184,7 +4184,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" dependencies = [ "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -4223,7 +4223,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -4258,9 +4258,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.105" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc3fcb250e53458e712715cf74285c1f889686520d79294a9ef3bd7aa1fc619" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -4276,7 +4276,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -4287,7 +4287,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -4311,22 +4311,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.14" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b0949c3a6c842cbde3f1686d6eea5a010516deb7085f79db747562d4102f41e" +checksum = "80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.14" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc5b44b4ab9c2fdd0e0512e6bece8388e214c0749f5862b114cc5b7a25daf227" +checksum = "44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -4399,9 +4399,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -4477,7 +4477,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -4614,9 +4614,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" dependencies = [ "js-sys", "wasm-bindgen", @@ -4690,7 +4690,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", "wasm-bindgen-shared", ] @@ -4712,7 +4712,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4788,7 +4788,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -4799,7 +4799,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -4988,7 +4988,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", ] [[package]] @@ -5026,7 +5026,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", "synstructure", ] @@ -5047,7 +5047,7 @@ checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -5067,7 +5067,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", "synstructure", ] @@ -5088,7 +5088,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -5121,7 +5121,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.105", + "syn 2.0.106", ] [[package]] @@ -5150,8 +5150,8 @@ dependencies = [ "ethrex-storage", "ethrex-trie", "ethrex-vm", - "rkyv", "hex", + "rkyv", "serde", "serde_json", "serde_with", From b783ca6d2ee10031f194f2824211bb1b41dcf054 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 19 Aug 2025 17:22:19 -0300 Subject: [PATCH 150/236] fix error return type --- crates/l2/prover/src/backends/risc0.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index 9b5fc391dc7..63447a8942c 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -30,7 +30,7 @@ pub enum Error { Bincode(#[from] Box), } -pub fn execute(input: ProgramInput) -> Result<(), Error> { +pub fn execute(input: ProgramInput) -> Result<(), Box> { let env = ExecutorEnv::builder() .write(&JSONProgramInput(input))? .build()?; @@ -45,7 +45,7 @@ pub fn execute(input: ProgramInput) -> Result<(), Error> { Ok(()) } -pub fn prove(input: ProgramInput, format: ProofFormat) -> Result { +pub fn prove(input: ProgramInput, format: ProofFormat) -> Result> { let mut stdout = Vec::new(); let env = ExecutorEnv::builder() @@ -70,7 +70,7 @@ pub fn verify(receipt: &Receipt) -> Result<(), Error> { Ok(()) } -pub fn to_batch_proof(receipt: Receipt, format: ProofFormat) -> Result { +pub fn to_batch_proof(receipt: Receipt, format: ProofFormat) -> Result> { let batch_proof = match format { ProofFormat::Compressed => BatchProof::ProofBytes(ProofBytes { prover_type: ProverType::RISC0, From ce7fadb71d18a945a22afadc8bdf09bc38665846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 20 Aug 2025 16:20:09 -0300 Subject: [PATCH 151/236] fix lint --- crates/l2/prover/src/backends/risc0.rs | 10 ++++++++-- crates/l2/prover/src/backends/sp1.rs | 7 +++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/crates/l2/prover/src/backends/risc0.rs b/crates/l2/prover/src/backends/risc0.rs index 63447a8942c..d4c5d919ae0 100644 --- a/crates/l2/prover/src/backends/risc0.rs +++ b/crates/l2/prover/src/backends/risc0.rs @@ -45,7 +45,10 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { Ok(()) } -pub fn prove(input: ProgramInput, format: ProofFormat) -> Result> { +pub fn prove( + input: ProgramInput, + format: ProofFormat, +) -> Result> { let mut stdout = Vec::new(); let env = ExecutorEnv::builder() @@ -70,7 +73,10 @@ pub fn verify(receipt: &Receipt) -> Result<(), Error> { Ok(()) } -pub fn to_batch_proof(receipt: Receipt, format: ProofFormat) -> Result> { +pub fn to_batch_proof( + receipt: Receipt, + format: ProofFormat, +) -> Result> { let batch_proof = match format { ProofFormat::Compressed => BatchProof::ProofBytes(ProofBytes { prover_type: ProverType::RISC0, diff --git a/crates/l2/prover/src/backends/sp1.rs b/crates/l2/prover/src/backends/sp1.rs index a932134aaaa..9bac1817964 100644 --- a/crates/l2/prover/src/backends/sp1.rs +++ b/crates/l2/prover/src/backends/sp1.rs @@ -1,7 +1,6 @@ use rkyv::rancor::Error; use sp1_sdk::{ - EnvProver, HashableKey, Prover, ProverClient, SP1ProofWithPublicValues, SP1ProvingKey, - SP1Stdin, SP1VerifyingKey, + HashableKey, Prover, ProverClient, SP1ProofWithPublicValues, SP1Stdin, SP1VerifyingKey, }; use std::fmt::Debug; use tracing::info; @@ -50,12 +49,12 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { let client = ProverClient::builder().cuda().build(); let now = Instant::now(); client.execute(PROGRAM_ELF, &stdin).run()?; - now.elapsed(); + now.elapsed() } else { let client = ProverClient::builder().cpu().build(); let now = Instant::now(); client.execute(PROGRAM_ELF, &stdin).run()?; - now.elapsed(); + now.elapsed() }; info!("Successfully executed SP1 program in {:.2?}", elapsed); From 5bb7fffdb7de446a557c19f46a9e76d8430adbe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 20 Aug 2025 16:36:10 -0300 Subject: [PATCH 152/236] solve comments on l2 makefile --- crates/l2/Makefile | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/crates/l2/Makefile b/crates/l2/Makefile index ef1fbae71df..8f89e7c2e4c 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -167,28 +167,25 @@ else endif build-prover-sp1: - cargo build --release --no-default-features --features "$(GPU?),sp1,l2" --manifest-path ./prover/Cargo.toml + cargo build --release --no-default-features --features "$(GPU?),sp1,l2" --manifest-path ../../Cargo.toml build-prover-risc0: - cargo build --release --no-default-features --features "$(GPU?),risc0,l2" --manifest-path ./prover/Cargo.toml; + cargo build --release --no-default-features --features "$(GPU?),risc0,l2" --manifest-path ../../Cargo.toml; build-prover-exec: - cargo build --release --no-default-features --features "$(GPU?),l2" --manifest-path ./prover/Cargo.toml; + cargo build --release --no-default-features --features "$(GPU?),l2" --manifest-path ../../Cargo.toml; init-prover-sp1: - cargo run --release --no-default-features --features "$(GPU?),sp1,l2" --manifest-path ./prover/Cargo.toml -- \ - --http.addr 127.0.0.1 \ - --http.port 3900; + cargo run --release --no-default-features --features "$(GPU?),sp1,l2" --manifest-path ../../Cargo.toml -- \ + --proof-coordinator tcp://127.0.0.1:3900 init-prover-risc0: - cargo run --release --no-default-features --features "$(GPU?),risc0,l2" --manifest-path ./prover/Cargo.toml -- \ - --http.addr 127.0.0.1 \ - --http.port 3900; + cargo run --release --no-default-features --features "$(GPU?),risc0,l2" --manifest-path ../../Cargo.toml -- \ + --proof-coordinator tcp://127.0.0.1:3900 init-prover-exec: - cargo run --release --no-default-features --features "$(GPU?),l2" --manifest-path ./prover/Cargo.toml -- \ - --http.addr 127.0.0.1 \ - --http.port 3900; + cargo run --release --no-default-features --features "$(GPU?),l2" --manifest-path ../../Cargo.toml -- \ + --proof-coordinator tcp://127.0.0.1:3900 # ============================================================================== # TEE From 1b9f2b65340b3b06b5c10daeed73a678388acc1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 20 Aug 2025 16:37:55 -0300 Subject: [PATCH 153/236] typo --- .github/workflows/pr-main_l2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index c7f9ed791cf..4d99d370ecc 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -189,7 +189,7 @@ jobs: run: | docker load --input /tmp/ethrex_image.tar - # lso creates empty verification keys (as workflow runs with exec backend) + # also creates empty verification keys (as workflow runs with exec backend) - name: Build prover run: | cd crates/l2 From 1d226c60eaa116eab0fa8d173e9963d1872a6d9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 20 Aug 2025 16:44:48 -0300 Subject: [PATCH 154/236] change default to use explicity type --- Cargo.lock | 1 + cmd/ethrex_replay/Cargo.toml | 1 + cmd/ethrex_replay/src/run.rs | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 2fd3330c6b6..dbe8a2ae4c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4246,6 +4246,7 @@ dependencies = [ "clap 4.5.45", "ethrex-common", "ethrex-config", + "ethrex-l2-common", "ethrex-levm", "ethrex-prover", "ethrex-rpc", diff --git a/cmd/ethrex_replay/Cargo.toml b/cmd/ethrex_replay/Cargo.toml index 7d58841b3c9..4a060d3e355 100644 --- a/cmd/ethrex_replay/Cargo.toml +++ b/cmd/ethrex_replay/Cargo.toml @@ -6,6 +6,7 @@ edition = "2024" [dependencies] ethrex-config.workspace = true ethrex-common.workspace = true +ethrex-l2-common.workspace = true ethrex-vm.workspace = true ethrex-levm.workspace = true ethrex-rpc.workspace = true diff --git a/cmd/ethrex_replay/src/run.rs b/cmd/ethrex_replay/src/run.rs index 890445f68f0..5f3138b8771 100644 --- a/cmd/ethrex_replay/src/run.rs +++ b/cmd/ethrex_replay/src/run.rs @@ -3,6 +3,7 @@ use ethrex_common::{ H256, types::{AccountUpdate, ELASTICITY_MULTIPLIER, Receipt}, }; +use ethrex_l2_common::prover::ProofFormat; use ethrex_levm::{db::gen_db::GeneralizedDatabase, vm::VMType}; use ethrex_prover_lib::backends::Backend; use ethrex_vm::{DynVmDatabase, Evm, EvmEngine, ExecutionWitnessWrapper, backends::levm::LEVM}; @@ -18,7 +19,7 @@ pub async fn exec(backend: Backend, cache: Cache) -> eyre::Result<()> { pub async fn prove(backend: Backend, cache: Cache) -> eyre::Result<()> { let input = get_input(cache)?; - ethrex_prover_lib::prove(backend, input, Default::default()) + ethrex_prover_lib::prove(backend, input, ProofFormat::Groth16) .map_err(|e| eyre::Error::msg(e.to_string()))?; Ok(()) } From 568d2d86de7bfd229d9dc67daead3f7515be2c45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 20 Aug 2025 17:52:52 -0300 Subject: [PATCH 155/236] remove l2 feature from makefile --- crates/l2/Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/l2/Makefile b/crates/l2/Makefile index 8f89e7c2e4c..efe9f75ec0a 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -167,24 +167,24 @@ else endif build-prover-sp1: - cargo build --release --no-default-features --features "$(GPU?),sp1,l2" --manifest-path ../../Cargo.toml + cargo build --release --no-default-features --features "$(GPU?),sp1" --manifest-path ../../Cargo.toml build-prover-risc0: - cargo build --release --no-default-features --features "$(GPU?),risc0,l2" --manifest-path ../../Cargo.toml; + cargo build --release --no-default-features --features "$(GPU?),risc0" --manifest-path ../../Cargo.toml; build-prover-exec: - cargo build --release --no-default-features --features "$(GPU?),l2" --manifest-path ../../Cargo.toml; + cargo build --release --no-default-features --features "$(GPU?)" --manifest-path ../../Cargo.toml; init-prover-sp1: - cargo run --release --no-default-features --features "$(GPU?),sp1,l2" --manifest-path ../../Cargo.toml -- \ + cargo run --release --no-default-features --features "$(GPU?),sp1" --manifest-path ../../Cargo.toml -- \ --proof-coordinator tcp://127.0.0.1:3900 init-prover-risc0: - cargo run --release --no-default-features --features "$(GPU?),risc0,l2" --manifest-path ../../Cargo.toml -- \ + cargo run --release --no-default-features --features "$(GPU?),risc0" --manifest-path ../../Cargo.toml -- \ --proof-coordinator tcp://127.0.0.1:3900 init-prover-exec: - cargo run --release --no-default-features --features "$(GPU?),l2" --manifest-path ../../Cargo.toml -- \ + cargo run --release --no-default-features --features "$(GPU?)" --manifest-path ../../Cargo.toml -- \ --proof-coordinator tcp://127.0.0.1:3900 # ============================================================================== From 27a0dbea86ec16755a7e415c8522d67a53f15db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 21 Aug 2025 15:15:48 -0300 Subject: [PATCH 156/236] remove accidentally added files --- crates/l2/storage/src/store_db/libmdbx.rs | 546 ---------------------- crates/l2/storage/src/store_db/redb.rs | 504 -------------------- 2 files changed, 1050 deletions(-) delete mode 100644 crates/l2/storage/src/store_db/libmdbx.rs delete mode 100644 crates/l2/storage/src/store_db/redb.rs diff --git a/crates/l2/storage/src/store_db/libmdbx.rs b/crates/l2/storage/src/store_db/libmdbx.rs deleted file mode 100644 index baca4d68c71..00000000000 --- a/crates/l2/storage/src/store_db/libmdbx.rs +++ /dev/null @@ -1,546 +0,0 @@ -use std::{ - fmt::{Debug, Formatter}, - ops::Range, - path::Path, - sync::Arc, -}; - -use crate::error::RollupStoreError; -use ethrex_common::{ - H256, - types::{AccountUpdate, Blob, BlockNumber, batch::Batch}, -}; -use ethrex_l2_common::prover::{BatchProof, ProverType}; -use ethrex_rlp::encode::RLPEncode; -use libmdbx::{ - DatabaseOptions, Mode, PageSize, RW, ReadWriteOptions, - orm::{Database, Table, Transaction}, - table, table_info, -}; - -use crate::{ - api::StoreEngineRollup, - rlp::{BlockNumbersRLP, MessageHashesRLP, OperationsCountRLP, Rlp}, -}; - -pub struct Store { - db: Arc, -} -impl Store { - pub fn new(path: &str) -> Result { - Ok(Self { - db: Arc::new(init_db(Some(path))?), - }) - } - - // Helper method to write into a libmdbx table - async fn write(&self, key: T::Key, value: T::Value) -> Result<(), RollupStoreError> { - let db = self.db.clone(); - tokio::task::spawn_blocking(move || { - let txn = db - .begin_readwrite() - .map_err(RollupStoreError::LibmdbxError)?; - txn.upsert::(key, value) - .map_err(RollupStoreError::LibmdbxError)?; - txn.commit().map_err(RollupStoreError::LibmdbxError) - }) - .await - .map_err(|e| RollupStoreError::Custom(format!("task panicked: {e}")))? - } - - // Helper method to read from a libmdbx table - async fn read(&self, key: T::Key) -> Result, RollupStoreError> { - let db = self.db.clone(); - tokio::task::spawn_blocking(move || { - let txn = db.begin_read().map_err(RollupStoreError::LibmdbxError)?; - txn.get::(key).map_err(RollupStoreError::LibmdbxError) - }) - .await - .map_err(|e| RollupStoreError::Custom(format!("task panicked: {e}")))? - } -} - -/// default page size recommended by libmdbx -/// -/// - See here: https://github.com/erthink/libmdbx/tree/master?tab=readme-ov-file#limitations -/// - and here: https://libmdbx.dqdkfa.ru/structmdbx_1_1env_1_1geometry.html#a45048bf2de9120d01dae2151c060d459 -const DB_PAGE_SIZE: usize = 4096; - -/// Initializes a new database with the provided path. If the path is `None`, the database -/// will be temporary. -pub fn init_db(path: Option>) -> Result { - let tables = [ - table_info!(BatchesByBlockNumber), - table_info!(MessageHashesByBatch), - table_info!(BlockNumbersByBatch), - table_info!(OperationsCount), - table_info!(SignatureByBlockHash), - table_info!(SignatureByBatch), - table_info!(PrecommitPrivileged), - table_info!(BlobsBundles), - table_info!(StateRoots), - table_info!(PrivilegedTransactionsHash), - table_info!(LastSentBatchProof), - table_info!(AccountUpdatesByBlockNumber), - table_info!(BatchProofs), - table_info!(CommitTxByBatch), - table_info!(VerifyTxByBatch), - ] - .into_iter() - .collect(); - let path = path.map(|p| p.as_ref().to_path_buf()); - let options = DatabaseOptions { - page_size: Some(PageSize::Set(DB_PAGE_SIZE)), - mode: Mode::ReadWrite(ReadWriteOptions { - // Set max DB size to 1TB - max_size: Some(1024_isize.pow(4)), - ..Default::default() - }), - ..Default::default() - }; - Database::create_with_options(path, options, &tables).map_err(RollupStoreError::LibmdbxError) -} - -impl Debug for Store { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - f.debug_struct("Libmdbx L2 Store").finish() - } -} - -#[async_trait::async_trait] -impl StoreEngineRollup for Store { - async fn get_batch_number_by_block( - &self, - block_number: BlockNumber, - ) -> Result, RollupStoreError> { - self.read::(block_number).await - } - - async fn get_message_hashes_by_batch( - &self, - batch_number: u64, - ) -> Result>, RollupStoreError> { - Ok(self - .read::(batch_number) - .await? - .map(|w| w.to())) - } - - async fn get_block_numbers_by_batch( - &self, - batch_number: u64, - ) -> Result>, RollupStoreError> { - Ok(self - .read::(batch_number) - .await? - .map(|numbers| numbers.to())) - } - - async fn get_privileged_transactions_hash_by_batch_number( - &self, - batch_number: u64, - ) -> Result, RollupStoreError> { - Ok(self - .read::(batch_number) - .await? - .map(|hash| hash.to())) - } - - async fn get_state_root_by_batch_number( - &self, - batch_number: u64, - ) -> Result, RollupStoreError> { - Ok(self - .read::(batch_number) - .await? - .map(|hash| hash.to())) - } - - async fn get_blob_bundle_by_batch_number( - &self, - batch_number: u64, - ) -> Result>, RollupStoreError> { - Ok(self - .read::(batch_number) - .await? - .map(|blobs| blobs.to())) - } - - async fn get_commit_tx_by_batch( - &self, - batch_number: u64, - ) -> Result, RollupStoreError> { - Ok(self - .read::(batch_number) - .await? - .map(|tx| tx.to())) - } - - async fn store_commit_tx_by_batch( - &self, - batch_number: u64, - commit_tx: H256, - ) -> Result<(), RollupStoreError> { - self.write::(batch_number, commit_tx.into()) - .await - } - - async fn get_verify_tx_by_batch( - &self, - batch_number: u64, - ) -> Result, RollupStoreError> { - Ok(self - .read::(batch_number) - .await? - .map(|tx| tx.to())) - } - - async fn store_verify_tx_by_batch( - &self, - batch_number: u64, - verify_tx: H256, - ) -> Result<(), RollupStoreError> { - self.write::(batch_number, verify_tx.into()) - .await - } - - async fn contains_batch(&self, batch_number: &u64) -> Result { - let exists = self - .read::(*batch_number) - .await? - .is_some(); - Ok(exists) - } - - async fn update_operations_count( - &self, - transaction_inc: u64, - privileged_tx_inc: u64, - messages_inc: u64, - ) -> Result<(), RollupStoreError> { - let (transaction_count, messages_count, privileged_tx_count) = { - let current_operations = self.get_operations_count().await?; - ( - current_operations[0] + transaction_inc, - current_operations[1] + privileged_tx_inc, - current_operations[2] + messages_inc, - ) - }; - - self.write::( - 0, - OperationsCountRLP::from_bytes( - vec![transaction_count, messages_count, privileged_tx_count].encode_to_vec(), - ), - ) - .await - } - - async fn get_operations_count(&self) -> Result<[u64; 3], RollupStoreError> { - let operations = self - .read::(0) - .await? - .map(|operations| operations.to()); - match operations { - Some(mut operations) => Ok([ - operations.remove(0), - operations.remove(0), - operations.remove(0), - ]), - _ => Ok([0, 0, 0]), - } - } - - async fn store_signature_by_block( - &self, - block_hash: H256, - signature: ethereum_types::Signature, - ) -> Result<(), RollupStoreError> { - let key = block_hash.as_fixed_bytes(); - let signature = signature.to_fixed_bytes(); - self.write::(*key, signature).await - } - - async fn get_signature_by_block( - &self, - block_hash: H256, - ) -> Result, RollupStoreError> { - let key = block_hash.as_fixed_bytes(); - Ok(self - .read::(*key) - .await? - .map(|s| ethereum_types::Signature::from_slice(&s))) - } - - async fn store_signature_by_batch( - &self, - batch_number: u64, - signature: ethereum_types::Signature, - ) -> Result<(), RollupStoreError> { - let signature = signature.to_fixed_bytes(); - self.write::(batch_number, signature) - .await - } - - async fn get_signature_by_batch( - &self, - batch_number: u64, - ) -> Result, RollupStoreError> { - Ok(self - .read::(batch_number) - .await? - .map(|s| ethereum_types::Signature::from_slice(&s))) - } - - async fn get_latest_sent_batch_proof(&self) -> Result { - self.read::(0) - .await - .map(|v| v.unwrap_or(0)) - } - - async fn set_latest_sent_batch_proof(&self, batch_number: u64) -> Result<(), RollupStoreError> { - self.write::(0, batch_number).await - } - - async fn get_account_updates_by_block_number( - &self, - block_number: BlockNumber, - ) -> Result>, RollupStoreError> { - self.read::(block_number) - .await? - .map(|s| bincode::deserialize(&s)) - .transpose() - .map_err(RollupStoreError::from) - } - - async fn store_account_updates_by_block_number( - &self, - block_number: BlockNumber, - account_updates: Vec, - ) -> Result<(), RollupStoreError> { - let serialized = bincode::serialize(&account_updates)?; - self.write::(block_number, serialized) - .await - } - async fn store_proof_by_batch_and_type( - &self, - batch_number: u64, - proof_type: ProverType, - proof: BatchProof, - ) -> Result<(), RollupStoreError> { - let serialized = bincode::serialize(&proof)?; - self.write::((batch_number, proof_type.into()), serialized) - .await - } - - async fn get_proof_by_batch_and_type( - &self, - batch_number: u64, - proof_type: ProverType, - ) -> Result, RollupStoreError> { - self.read::((batch_number, proof_type.into())) - .await? - .map(|s| bincode::deserialize(&s)) - .transpose() - .map_err(RollupStoreError::from) - } - - async fn revert_to_batch(&self, batch_number: u64) -> Result<(), RollupStoreError> { - let Some(kept_blocks) = self.get_block_numbers_by_batch(batch_number).await? else { - return Ok(()); - }; - let last_kept_block = *kept_blocks.iter().max().unwrap_or(&0); - let txn = self - .db - .begin_readwrite() - .map_err(RollupStoreError::LibmdbxError)?; - delete_starting_at::(&txn, last_kept_block + 1)?; - delete_starting_at::(&txn, batch_number + 1)?; - delete_starting_at::(&txn, batch_number + 1)?; - delete_starting_at::(&txn, batch_number + 1)?; - delete_starting_at::(&txn, batch_number + 1)?; - delete_starting_at::(&txn, batch_number + 1)?; - txn.clear_table::() - .map_err(RollupStoreError::LibmdbxError)?; - txn.commit().map_err(RollupStoreError::LibmdbxError)?; - Ok(()) - } - - async fn seal_batch(&self, batch: Batch) -> Result<(), RollupStoreError> { - let blocks: Vec = (batch.first_block..=batch.last_block).collect(); - let db = self.db.clone(); - tokio::task::spawn_blocking(move || { - let transaction = db - .begin_readwrite() - .map_err(RollupStoreError::LibmdbxError)?; - - for block in blocks.iter() { - transaction - .upsert::(*block, batch.number) - .map_err(RollupStoreError::LibmdbxError)?; - } - - transaction - .upsert::( - batch.number, - BlockNumbersRLP::from_bytes(blocks.encode_to_vec()), - ) - .map_err(RollupStoreError::LibmdbxError)?; - - transaction - .upsert::(batch.number, batch.message_hashes.into()) - .map_err(RollupStoreError::LibmdbxError)?; - - transaction - .upsert::( - batch.number, - Rlp::from_bytes(batch.privileged_transactions_hash.encode_to_vec()), - ) - .map_err(RollupStoreError::LibmdbxError)?; - - transaction - .upsert::(batch.number, batch.blobs_bundle.blobs.into()) - .map_err(RollupStoreError::LibmdbxError)?; - - transaction - .upsert::( - batch.number, - Rlp::from_bytes(batch.state_root.encode_to_vec()), - ) - .map_err(RollupStoreError::LibmdbxError)?; - - if let Some(commit_tx) = batch.commit_tx { - transaction - .upsert::(batch.number, commit_tx.into()) - .map_err(RollupStoreError::LibmdbxError)?; - } - - if let Some(verify_tx) = batch.verify_tx { - transaction - .upsert::(batch.number, verify_tx.into()) - .map_err(RollupStoreError::LibmdbxError)?; - } - transaction - .clear_table::() - .map_err(RollupStoreError::LibmdbxError)?; - transaction.commit().map_err(RollupStoreError::LibmdbxError) - }) - .await - .map_err(|e| RollupStoreError::Custom(format!("task panicked: {e}")))? - } - - async fn precommit_privileged(&self) -> Result>, RollupStoreError> { - if let Some(val) = self.read::(0).await? { - let (from, to) = val.to(); - return Ok(Some(from..to)); - } else { - return Ok(None); - } - } - - async fn update_precommit_privileged( - &self, - range: Option>, - ) -> Result<(), RollupStoreError> { - if let Some(range) = range { - let val = (range.start, range.end); - self.write::(0, val.into()).await?; - } else { - self.db - .begin_readwrite() - .map_err(RollupStoreError::LibmdbxError)? - .clear_table::() - .map_err(RollupStoreError::LibmdbxError)?; - } - Ok(()) - } -} - -/// Deletes keys above key, assuming they are contiguous -fn delete_starting_at>( - txn: &Transaction, - mut key: u64, -) -> Result<(), RollupStoreError> { - while let Some(val) = txn.get::(key).map_err(RollupStoreError::LibmdbxError)? { - txn.delete::(key, Some(val)) - .map_err(RollupStoreError::LibmdbxError)?; - key += 1; - } - Ok(()) -} - -table!( - /// Batch number by block number - ( BatchesByBlockNumber ) BlockNumber => u64 -); - -table!( - /// messages by batch number - ( MessageHashesByBatch ) u64 => MessageHashesRLP -); - -table!( - /// Block numbers by batch number - ( BlockNumbersByBatch ) u64 => BlockNumbersRLP -); - -table!( - /// Transaction, privileged transaction, messages count - ( OperationsCount ) u64 => OperationsCountRLP -); - -table!( - /// Signature by block hash - ( SignatureByBlockHash ) [u8; 32] => [u8; 65] -); - -table!( - /// Signature by batch number - ( SignatureByBatch ) u64 => [u8; 65] -); - -table!( - /// Privileged transaction ids included in batch being built - ( PrecommitPrivileged ) u64 => Rlp<(u64, u64)> -); - -table!( - /// Blobs bundles by batch number - ( BlobsBundles ) u64 => Rlp> -); - -table!( - /// State roots by batch number - ( StateRoots ) u64 => Rlp -); - -table!( - /// Privileged transactions hash by batch number - ( PrivilegedTransactionsHash ) u64 => Rlp -); - -table!( - /// Last sent batch proof - ( LastSentBatchProof ) u64 => u64 -); - -table!( - /// List of serialized account updates by block number - ( AccountUpdatesByBlockNumber ) BlockNumber => Vec -); - -table!( - /// Stores batch proofs, keyed by (BatchNumber, ProverType as u8). - /// Value is the bincode-encoded BatchProof data. - (BatchProofs) (u64, u32) => Vec -); - -table!( - /// Commit transaction by batch number - ( CommitTxByBatch ) u64 => Rlp -); - -table!( - /// Verify transaction by batch number - ( VerifyTxByBatch ) u64 => Rlp -); diff --git a/crates/l2/storage/src/store_db/redb.rs b/crates/l2/storage/src/store_db/redb.rs deleted file mode 100644 index 556e3acd5b2..00000000000 --- a/crates/l2/storage/src/store_db/redb.rs +++ /dev/null @@ -1,504 +0,0 @@ -use std::{ops::Range, panic::RefUnwindSafe, sync::Arc}; - -use crate::error::RollupStoreError; -use ethrex_common::{ - H256, - types::{AccountUpdate, Blob, BlockNumber, batch::Batch}, -}; -use ethrex_l2_common::prover::{BatchProof, ProverType}; -use ethrex_rlp::encode::RLPEncode; -use redb::{AccessGuard, Database, Key, ReadableTable, TableDefinition, Value, WriteTransaction}; - -use crate::{ - api::StoreEngineRollup, - rlp::{BlockNumbersRLP, MessageHashesRLP, OperationsCountRLP, Rlp}, -}; - -const BATCHES_BY_BLOCK_NUMBER_TABLE: TableDefinition = - TableDefinition::new("BatchesByBlockNumbers"); - -const MESSAGES_BY_BATCH: TableDefinition = - TableDefinition::new("MesageHashesByBatch"); - -const BLOCK_NUMBERS_BY_BATCH: TableDefinition = - TableDefinition::new("BlockNumbersByBatch"); - -const OPERATIONS_COUNTS: TableDefinition = - TableDefinition::new("OperationsCount"); - -const PRECOMMIT_PRIVILEGED: TableDefinition> = - TableDefinition::new("PrecommitPrivileged"); - -const BLOB_BUNDLES: TableDefinition>> = TableDefinition::new("BlobBundles"); - -const STATE_ROOTS: TableDefinition> = TableDefinition::new("StateRoots"); - -const PRIVILEGED_TRANSACTIONS_HASHES: TableDefinition> = - TableDefinition::new("PrivilegedTransactionHashes"); - -const LAST_SENT_BATCH_PROOF: TableDefinition = TableDefinition::new("LastSentBatchProof"); - -const SIGNATURES_BY_BLOCK: TableDefinition<[u8; 32], [u8; 65]> = - TableDefinition::new("SignaturesByBlock"); - -const SIGNATURES_BY_BATCH: TableDefinition = - TableDefinition::new("SignaturesByBatch"); - -const ACCOUNT_UPDATES_BY_BLOCK_NUMBER: TableDefinition> = - TableDefinition::new("AccountUpdatesByBlockNumber"); - -const BATCH_PROOF_BY_BATCH_AND_TYPE: TableDefinition<(u64, u32), Vec> = - TableDefinition::new("BatchProofByBatchAndType"); - -const COMMIT_TX_BY_BATCH: TableDefinition> = TableDefinition::new("CommitTxByBatch"); - -const VERIFY_TX_BY_BATCH: TableDefinition> = TableDefinition::new("VerifyTxByBatch"); - -#[derive(Debug)] -pub struct RedBStoreRollup { - db: Arc, -} - -impl RefUnwindSafe for RedBStoreRollup {} -impl RedBStoreRollup { - pub fn new() -> Result { - Ok(Self { - db: Arc::new(init_db()?), - }) - } - - // Helper method to write into a redb table - async fn write<'k, 'v, 'a, K, V>( - &self, - table: TableDefinition<'a, K, V>, - key: K::SelfType<'k>, - value: V::SelfType<'v>, - ) -> Result<(), RollupStoreError> - where - K: Key + Send + 'static, - V: Value + Send + 'static, - K::SelfType<'k>: Send, - V::SelfType<'v>: Send, - 'a: 'static, - 'k: 'static, - 'v: 'static, - { - let db = self.db.clone(); - tokio::task::spawn_blocking(move || { - let write_txn = db.begin_write().map_err(Box::new)?; - write_txn.open_table(table)?.insert(key, value)?; - write_txn.commit()?; - - Ok(()) - }) - .await - .map_err(|e| RollupStoreError::Custom(format!("task panicked: {e}")))? - } - // Helper method to read from a redb table - async fn read<'k, 'a, K, V>( - &self, - table: TableDefinition<'a, K, V>, - key: K::SelfType<'k>, - ) -> Result>, RollupStoreError> - where - K: Key + Send + 'static, - V: Value + Send + 'static, - K::SelfType<'k>: Send, - 'a: 'static, - 'k: 'static, - { - let db = self.db.clone(); - tokio::task::spawn_blocking(move || { - let read_txn = db.begin_read().map_err(Box::new)?; - let table = read_txn.open_table(table)?; - let result = table.get(key)?; - Ok(result) - }) - .await - .map_err(|e| RollupStoreError::Custom(format!("task panicked: {e}")))? - } -} - -pub fn init_db() -> Result { - let db = Database::create("ethrex_l2.redb")?; - - let table_creation_txn = db.begin_write().map_err(Box::new)?; - - table_creation_txn.open_table(BATCHES_BY_BLOCK_NUMBER_TABLE)?; - table_creation_txn.open_table(MESSAGES_BY_BATCH)?; - table_creation_txn.open_table(OPERATIONS_COUNTS)?; - table_creation_txn.open_table(BLOB_BUNDLES)?; - table_creation_txn.open_table(STATE_ROOTS)?; - table_creation_txn.open_table(PRIVILEGED_TRANSACTIONS_HASHES)?; - table_creation_txn.open_table(BLOCK_NUMBERS_BY_BATCH)?; - table_creation_txn.open_table(LAST_SENT_BATCH_PROOF)?; - table_creation_txn.open_table(SIGNATURES_BY_BLOCK)?; - table_creation_txn.open_table(SIGNATURES_BY_BATCH)?; - table_creation_txn.open_table(ACCOUNT_UPDATES_BY_BLOCK_NUMBER)?; - table_creation_txn.open_table(BATCH_PROOF_BY_BATCH_AND_TYPE)?; - table_creation_txn.open_table(COMMIT_TX_BY_BATCH)?; - table_creation_txn.open_table(VERIFY_TX_BY_BATCH)?; - table_creation_txn.commit()?; - - Ok(db) -} - -#[async_trait::async_trait] -impl StoreEngineRollup for RedBStoreRollup { - async fn get_batch_number_by_block( - &self, - block_number: BlockNumber, - ) -> Result, RollupStoreError> { - Ok(self - .read(BATCHES_BY_BLOCK_NUMBER_TABLE, block_number) - .await? - .map(|b| b.value())) - } - - async fn get_message_hashes_by_batch( - &self, - batch_number: u64, - ) -> Result>, RollupStoreError> { - Ok(self - .read(MESSAGES_BY_BATCH, batch_number) - .await? - .map(|w| w.value().to())) - } - - async fn get_block_numbers_by_batch( - &self, - batch_number: u64, - ) -> Result>, RollupStoreError> { - Ok(self - .read(BLOCK_NUMBERS_BY_BATCH, batch_number) - .await? - .map(|rlp| rlp.value().to())) - } - - async fn contains_batch(&self, batch_number: &u64) -> Result { - let exists = self - .read(BLOCK_NUMBERS_BY_BATCH, *batch_number) - .await? - .is_some(); - Ok(exists) - } - - async fn get_privileged_transactions_hash_by_batch_number( - &self, - batch_number: u64, - ) -> Result, RollupStoreError> { - Ok(self - .read(PRIVILEGED_TRANSACTIONS_HASHES, batch_number) - .await? - .map(|rlp| rlp.value().to())) - } - - async fn get_state_root_by_batch_number( - &self, - batch_number: u64, - ) -> Result, RollupStoreError> { - Ok(self - .read(STATE_ROOTS, batch_number) - .await? - .map(|rlp| rlp.value().to())) - } - - async fn get_blob_bundle_by_batch_number( - &self, - batch_number: u64, - ) -> Result>, RollupStoreError> { - Ok(self - .read(BLOB_BUNDLES, batch_number) - .await? - .map(|rlp| rlp.value().to())) - } - - async fn get_commit_tx_by_batch( - &self, - batch_number: u64, - ) -> Result, RollupStoreError> { - Ok(self - .read(COMMIT_TX_BY_BATCH, batch_number) - .await? - .map(|rlp| rlp.value().to())) - } - - async fn store_commit_tx_by_batch( - &self, - batch_number: u64, - commit_tx: H256, - ) -> Result<(), RollupStoreError> { - self.write(COMMIT_TX_BY_BATCH, batch_number, commit_tx.into()) - .await - } - - async fn get_verify_tx_by_batch( - &self, - batch_number: u64, - ) -> Result, RollupStoreError> { - Ok(self - .read(VERIFY_TX_BY_BATCH, batch_number) - .await? - .map(|rlp| rlp.value().to())) - } - - async fn store_verify_tx_by_batch( - &self, - batch_number: u64, - verify_tx: H256, - ) -> Result<(), RollupStoreError> { - self.write(VERIFY_TX_BY_BATCH, batch_number, verify_tx.into()) - .await - } - - async fn update_operations_count( - &self, - transaction_inc: u64, - privileged_tx_inc: u64, - messages_inc: u64, - ) -> Result<(), RollupStoreError> { - let (transaction_count, messages_count, privileged_tx_count) = { - let current_operations = self.get_operations_count().await?; - ( - current_operations[0] + transaction_inc, - current_operations[1] + messages_inc, - current_operations[2] + privileged_tx_inc, - ) - }; - - self.write( - OPERATIONS_COUNTS, - 0, - OperationsCountRLP::from_bytes( - vec![transaction_count, messages_count, privileged_tx_count].encode_to_vec(), - ), - ) - .await - } - - async fn get_operations_count(&self) -> Result<[u64; 3], RollupStoreError> { - let operations = self - .read(OPERATIONS_COUNTS, 0) - .await? - .map(|rlp| rlp.value().to()); - match operations { - Some(mut operations) => Ok([ - operations.pop().unwrap_or_default(), - operations.pop().unwrap_or_default(), - operations.pop().unwrap_or_default(), - ]), - _ => Ok([0, 0, 0]), - } - } - - async fn get_latest_sent_batch_proof(&self) -> Result { - Ok(self - .read(LAST_SENT_BATCH_PROOF, 0) - .await? - .map(|b| b.value()) - .unwrap_or(0)) - } - - async fn set_latest_sent_batch_proof(&self, batch_number: u64) -> Result<(), RollupStoreError> { - self.write(LAST_SENT_BATCH_PROOF, 0, batch_number).await - } - - async fn store_signature_by_block( - &self, - block_hash: H256, - signature: ethereum_types::Signature, - ) -> Result<(), RollupStoreError> { - let signature = signature.to_fixed_bytes(); - self.write(SIGNATURES_BY_BLOCK, block_hash.into(), signature) - .await - } - async fn get_signature_by_block( - &self, - block_hash: H256, - ) -> Result, RollupStoreError> { - Ok(self - .read(SIGNATURES_BY_BLOCK, block_hash.into()) - .await? - .map(|s| ethereum_types::Signature::from_slice(&s.value()))) - } - async fn store_signature_by_batch( - &self, - batch_number: u64, - signature: ethereum_types::Signature, - ) -> Result<(), RollupStoreError> { - let signature = signature.to_fixed_bytes(); - self.write(SIGNATURES_BY_BATCH, batch_number, signature) - .await - } - async fn get_signature_by_batch( - &self, - batch_number: u64, - ) -> Result, RollupStoreError> { - Ok(self - .read(SIGNATURES_BY_BATCH, batch_number) - .await? - .map(|s| ethereum_types::Signature::from_slice(&s.value()))) - } - - async fn get_account_updates_by_block_number( - &self, - block_number: BlockNumber, - ) -> Result>, RollupStoreError> { - self.read(ACCOUNT_UPDATES_BY_BLOCK_NUMBER, block_number) - .await? - .map(|s| bincode::deserialize(&s.value())) - .transpose() - .map_err(RollupStoreError::from) - } - - async fn store_account_updates_by_block_number( - &self, - block_number: BlockNumber, - account_updates: Vec, - ) -> Result<(), RollupStoreError> { - let serialized = bincode::serialize(&account_updates)?; - self.write(ACCOUNT_UPDATES_BY_BLOCK_NUMBER, block_number, serialized) - .await - } - async fn store_proof_by_batch_and_type( - &self, - batch_number: u64, - proof_type: ProverType, - proof: BatchProof, - ) -> Result<(), RollupStoreError> { - let serialized = bincode::serialize(&proof)?; - self.write( - BATCH_PROOF_BY_BATCH_AND_TYPE, - (batch_number, proof_type.into()), - serialized, - ) - .await - } - - async fn get_proof_by_batch_and_type( - &self, - batch_number: u64, - proof_type: ProverType, - ) -> Result, RollupStoreError> { - self.read( - BATCH_PROOF_BY_BATCH_AND_TYPE, - (batch_number, proof_type.into()), - ) - .await? - .map(|s| bincode::deserialize(&s.value())) - .transpose() - .map_err(RollupStoreError::from) - } - - async fn revert_to_batch(&self, batch_number: u64) -> Result<(), RollupStoreError> { - let Some(kept_blocks) = self.get_block_numbers_by_batch(batch_number).await? else { - return Ok(()); - }; - let last_kept_block = *kept_blocks.iter().max().unwrap_or(&0); - let txn = self.db.begin_write().map_err(Box::new)?; - delete_starting_at(&txn, BATCHES_BY_BLOCK_NUMBER_TABLE, last_kept_block + 1)?; - delete_starting_at(&txn, MESSAGES_BY_BATCH, batch_number + 1)?; - delete_starting_at(&txn, BLOCK_NUMBERS_BY_BATCH, batch_number + 1)?; - delete_starting_at(&txn, PRIVILEGED_TRANSACTIONS_HASHES, batch_number + 1)?; - delete_starting_at(&txn, STATE_ROOTS, batch_number + 1)?; - delete_starting_at(&txn, BLOB_BUNDLES, batch_number + 1)?; - txn.commit()?; - Ok(()) - } - - async fn seal_batch(&self, batch: Batch) -> Result<(), RollupStoreError> { - let blocks: Vec = (batch.first_block..=batch.last_block).collect(); - let db = self.db.clone(); - tokio::task::spawn_blocking(move || { - let transaction = db.begin_write().map_err(Box::new)?; - - { - let mut table = transaction.open_table(BATCHES_BY_BLOCK_NUMBER_TABLE)?; - for block in blocks.iter() { - table.insert(*block, batch.number)?; - } - } - - transaction.open_table(BLOCK_NUMBERS_BY_BATCH)?.insert( - batch.number, - BlockNumbersRLP::from_bytes(blocks.encode_to_vec()), - )?; - - transaction.open_table(MESSAGES_BY_BATCH)?.insert( - batch.number, - as Into>::into(batch.message_hashes), - )?; - - transaction - .open_table(PRIVILEGED_TRANSACTIONS_HASHES)? - .insert( - batch.number, - >>::into(batch.privileged_transactions_hash), - )?; - - transaction.open_table(BLOB_BUNDLES)?.insert( - batch.number, - as Into>>>::into(batch.blobs_bundle.blobs), - )?; - - transaction.open_table(STATE_ROOTS)?.insert( - batch.number, - >>::into(batch.state_root), - )?; - - if let Some(commit_tx) = batch.commit_tx { - transaction - .open_table(COMMIT_TX_BY_BATCH)? - .insert(batch.number, >>::into(commit_tx))?; - } - - if let Some(verify_tx) = batch.verify_tx { - transaction - .open_table(VERIFY_TX_BY_BATCH)? - .insert(batch.number, >>::into(verify_tx))?; - } - - transaction.commit()?; - Ok(()) - }) - .await - .map_err(|e| RollupStoreError::Custom(format!("task panicked: {e}")))? - } - - async fn precommit_privileged(&self) -> Result>, RollupStoreError> { - Ok(self - .read(PRECOMMIT_PRIVILEGED, 0) - .await? - .map(|b| b.value().to()) - .map(|(start, end)| start..end)) - } - - async fn update_precommit_privileged( - &self, - range: Option>, - ) -> Result<(), RollupStoreError> { - if let Some(range) = range { - self.write(PRECOMMIT_PRIVILEGED, 0, (range.start, range.end).into()) - .await?; - } else { - let txn = self.db.begin_write().map_err(Box::new)?; - txn.open_table(PRECOMMIT_PRIVILEGED)?.remove(0)?; - txn.commit()?; - } - Ok(()) - } -} - -/// Deletes keys above key, assuming they are contiguous -fn delete_starting_at( - txn: &WriteTransaction, - table: TableDefinition, - mut key: u64, -) -> Result<(), RollupStoreError> { - let mut table = txn.open_table(table)?; - while table.get(key)?.is_some() { - table.remove(key)?; - key += 1; - } - Ok(()) -} From 19b259f5bd7c0cdf293b0b24c0e993e7e052e626 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 21 Aug 2025 17:23:46 -0300 Subject: [PATCH 157/236] remove --no-default-features makefile --- crates/l2/Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/l2/Makefile b/crates/l2/Makefile index efe9f75ec0a..fd109aec46f 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -167,24 +167,24 @@ else endif build-prover-sp1: - cargo build --release --no-default-features --features "$(GPU?),sp1" --manifest-path ../../Cargo.toml + cargo build --release --features "$(GPU?),sp1" --manifest-path ../../Cargo.toml build-prover-risc0: - cargo build --release --no-default-features --features "$(GPU?),risc0" --manifest-path ../../Cargo.toml; + cargo build --release --features "$(GPU?),risc0" --manifest-path ../../Cargo.toml; build-prover-exec: - cargo build --release --no-default-features --features "$(GPU?)" --manifest-path ../../Cargo.toml; + cargo build --release --features "$(GPU?)" --manifest-path ../../Cargo.toml; init-prover-sp1: - cargo run --release --no-default-features --features "$(GPU?),sp1" --manifest-path ../../Cargo.toml -- \ + cargo run --release --features "$(GPU?),sp1" --manifest-path ../../Cargo.toml -- \ --proof-coordinator tcp://127.0.0.1:3900 init-prover-risc0: - cargo run --release --no-default-features --features "$(GPU?),risc0" --manifest-path ../../Cargo.toml -- \ + cargo run --release --features "$(GPU?),risc0" --manifest-path ../../Cargo.toml -- \ --proof-coordinator tcp://127.0.0.1:3900 init-prover-exec: - cargo run --release --no-default-features --features "$(GPU?)" --manifest-path ../../Cargo.toml -- \ + cargo run --release --features "$(GPU?)" --manifest-path ../../Cargo.toml -- \ --proof-coordinator tcp://127.0.0.1:3900 # ============================================================================== From 250bbca8a831c053fc211de544571ee5ea1acf98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 27 Aug 2025 16:05:14 -0300 Subject: [PATCH 158/236] dont propagate err --- cmd/ethrex_replay/src/run.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/ethrex_replay/src/run.rs b/cmd/ethrex_replay/src/run.rs index 0022317995f..8fc73075a7b 100644 --- a/cmd/ethrex_replay/src/run.rs +++ b/cmd/ethrex_replay/src/run.rs @@ -24,7 +24,7 @@ pub async fn prove(backend: Backend, cache: Cache) -> eyre::Result<()> { let input = get_input(cache)?; catch_unwind(AssertUnwindSafe(|| { ethrex_prover_lib::prove(backend, input, ProofFormat::Groth16) - .map_err(|e| eyre::Error::msg(e.to_string()))?; + .map_err(|e| eyre::Error::msg(e.to_string())) })) .map_err(|_e| eyre::Error::msg("SP1 panicked while proving"))??; Ok(()) From f306da0da3f642d1911d6c993cccb65e14b9a300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 27 Aug 2025 17:57:52 -0300 Subject: [PATCH 159/236] make based REQUIRE_* bools public, rename ALIGNED to ALIGNED_MODE --- .../l2/contracts/src/l1/based/OnChainProposer.sol | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/crates/l2/contracts/src/l1/based/OnChainProposer.sol b/crates/l2/contracts/src/l1/based/OnChainProposer.sol index efffa33156f..a04035c9ec6 100644 --- a/crates/l2/contracts/src/l1/based/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/based/OnChainProposer.sol @@ -78,14 +78,14 @@ contract OnChainProposer is bytes32 public RISC0_VERIFICATION_KEY; /// @notice True if a Risc0 proof is required for batch verification. - bool REQUIRE_RISC0_PROOF; + bool public REQUIRE_RISC0_PROOF; /// @notice True if a SP1 proof is required for batch verification. - bool REQUIRE_SP1_PROOF; + bool public REQUIRE_SP1_PROOF; /// @notice True if a TDX proof is required for batch verification. - bool REQUIRE_TDX_PROOF; + bool public REQUIRE_TDX_PROOF; /// @notice True if verification is done through Aligned Layer instead of smart contract verifiers. - bool ALIGNED; + bool public ALIGNED_MODE; /// @notice Chain ID of the network uint256 public CHAIN_ID; @@ -142,7 +142,7 @@ contract OnChainProposer is TDX_VERIFIER_ADDRESS = tdxverifier; // Aligned Layer constants - ALIGNED = aligned; + ALIGNED_MODE = aligned; ALIGNEDPROOFAGGREGATOR = alignedProofAggregator; batchCommitments[0] = BatchCommitmentInfo( @@ -281,7 +281,7 @@ contract OnChainProposer is bytes calldata tdxPublicValues, bytes memory tdxSignature ) external { - require(!ALIGNED, "Batch verification should be done via Aligned Layer. Call verifyBatchesAligned() instead."); + require(!ALIGNED_MODE, "Batch verification should be done via Aligned Layer. Call verifyBatchesAligned() instead."); require( batchCommitments[batchNumber].newStateRoot != bytes32(0), @@ -341,7 +341,7 @@ contract OnChainProposer is bytes[] calldata alignedPublicInputsList, bytes32[][] calldata alignedMerkleProofsList ) external override { - require(ALIGNED, "Batch verification should be done via smart contract verifiers. Call verifyBatch() instead."); + require(ALIGNED_MODE, "Batch verification should be done via smart contract verifiers. Call verifyBatch() instead."); require( alignedPublicInputsList.length == alignedMerkleProofsList.length, From 6a4bd6a66765d1a73e48cfa2760b7a4fae677b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 28 Aug 2025 16:49:31 -0300 Subject: [PATCH 160/236] fix error renaming --- Cargo.lock | 4 ++-- crates/l2/sequencer/l1_proof_sender.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 18038da904b..0482ae2b75f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4291,7 +4291,7 @@ dependencies = [ name = "ethrex-replayer" version = "0.1.0" dependencies = [ - "clap 4.5.40", + "clap 4.5.46", "ethrex-common", "ethrex-config", "ethrex-replay", @@ -4299,7 +4299,7 @@ dependencies = [ "eyre", "futures", "hex", - "reqwest 0.12.20", + "reqwest 0.12.23", "serde", "serde_json", "serde_with", diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 42828fd2843..9d46ce9a021 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -215,7 +215,7 @@ impl L1ProofSender { }; let Some(vm_program_code) = prover_type.aligned_vm_program_code()? else { - return Err(ProofSenderError::InternalError(format!( + return Err(ProofSenderError::UnexpectedError(format!( "no vm_program_code for {prover_type}" ))); }; @@ -246,7 +246,7 @@ impl L1ProofSender { nonce = nonce .checked_add(1.into()) - .ok_or(ProofSenderError::InternalError( + .ok_or(ProofSenderError::UnexpectedError( "aligned batcher nonce overflow".to_string(), ))?; From ab48d07361ea28f952cf0a68fb2c727a786956d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 4 Sep 2025 16:54:03 -0300 Subject: [PATCH 161/236] Update crates/l2/storage/src/store_db/sql.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- crates/l2/storage/src/store_db/sql.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/storage/src/store_db/sql.rs b/crates/l2/storage/src/store_db/sql.rs index 4c6724626ca..a4525cb667e 100644 --- a/crates/l2/storage/src/store_db/sql.rs +++ b/crates/l2/storage/src/store_db/sql.rs @@ -522,7 +522,7 @@ impl StoreEngineRollup for SQLStore { async fn set_latest_sent_batch_proof(&self, batch_number: u64) -> Result<(), RollupStoreError> { self.execute( - "UPDATE latest_sent SET batch = ?1 WHERE _id = 0", + "INSERT OR REPLACE INTO latest_sent (_id, batch) VALUES (0, ?1)", [batch_number], ) .await?; From 9f2cd7063d2fe30d0b09866925294fc97767a5cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 4 Sep 2025 17:45:36 -0300 Subject: [PATCH 162/236] fix onchainproposer variables --- crates/l2/contracts/src/l1/OnChainProposer.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 68222209490..bc08004ab7e 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -296,7 +296,7 @@ contract OnChainProposer is ); } try - IRiscZeroVerifier(R0VERIFIER).verify( + IRiscZeroVerifier(RISC0_VERIFIER_ADDRESS).verify( risc0BlockProof, RISC0_VERIFICATION_KEY, sha256(risc0Journal) @@ -323,7 +323,7 @@ contract OnChainProposer is ); } try - ISP1Verifier(SP1VERIFIER).verifyProof( + ISP1Verifier(SP1_VERIFICATION_KEY).verifyProof( SP1_VERIFICATION_KEY, sp1PublicValues, sp1ProofBytes @@ -350,7 +350,7 @@ contract OnChainProposer is ); } try - ITDXVerifier(TDXVERIFIER).verify(tdxPublicValues, tdxSignature) + ITDXVerifier(TDX_VERIFIER_ADDRESS).verify(tdxPublicValues, tdxSignature) {} catch { revert( "OnChainProposer: Invalid TDX proof failed proof verification" @@ -430,7 +430,7 @@ contract OnChainProposer is } bytes memory callData = abi.encodeWithSignature( "verifyProofInclusion(bytes32[],bytes32,bytes)", - alignedMerkleProofsList[i], + merkleProofsList[i], SP1_VERIFICATION_KEY, publicInputsList[i] ); From ae53b8e00fb836031f99002b58ae06c170eab096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 15 Sep 2025 15:06:20 -0300 Subject: [PATCH 163/236] update based contract --- .../l2/contracts/src/l1/OnChainProposer.sol | 41 ++++----- .../src/l1/based/OnChainProposer.sol | 85 +++++++++++++------ .../l1/based/interfaces/IOnChainProposer.sol | 10 ++- 3 files changed, 88 insertions(+), 48 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index bc08004ab7e..61e1b97d1c8 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -350,7 +350,10 @@ contract OnChainProposer is ); } try - ITDXVerifier(TDX_VERIFIER_ADDRESS).verify(tdxPublicValues, tdxSignature) + ITDXVerifier(TDX_VERIFIER_ADDRESS).verify( + tdxPublicValues, + tdxSignature + ) {} catch { revert( "OnChainProposer: Invalid TDX proof failed proof verification" @@ -377,7 +380,8 @@ contract OnChainProposer is ALIGNED_MODE, "Batch verification should be done via smart contract verifiers. Call verifyBatch() instead." ); - require( firstBatchNumber == lastVerifiedBatch + 1, + require( + firstBatchNumber == lastVerifiedBatch + 1, "OnChainProposer: incorrect first batch number" ); @@ -428,23 +432,22 @@ contract OnChainProposer is ) ); } - bytes memory callData = abi.encodeWithSignature( - "verifyProofInclusion(bytes32[],bytes32,bytes)", - merkleProofsList[i], - SP1_VERIFICATION_KEY, - publicInputsList[i] - ); - (bool callResult, bytes memory response) = ALIGNEDPROOFAGGREGATOR - .staticcall(callData); - require( - callResult, - "OnChainProposer: call to ALIGNEDPROOFAGGREGATOR failed" - ); - bool proofVerified = abi.decode(response, (bool)); - require( - proofVerified, - "OnChainProposer: Invalid ALIGNED proof failed proof verification" - ); + + if (REQUIRE_SP1_PROOF) { + _verifyProofInclusionAligned( + sp1MerkleProofsList[i], + SP1_VERIFICATION_KEY, + publicInputsList[i] + ); + } + + if (REQUIRE_RISC0_PROOF) { + _verifyProofInclusionAligned( + risc0MerkleProofsList[i], + RISC0_VERIFICATION_KEY, + publicInputsList[i] + ); + } // Remove previous batch commitment delete batchCommitments[batchNumber - 1]; diff --git a/crates/l2/contracts/src/l1/based/OnChainProposer.sol b/crates/l2/contracts/src/l1/based/OnChainProposer.sol index 3a5c191231f..37b2aa85635 100644 --- a/crates/l2/contracts/src/l1/based/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/based/OnChainProposer.sol @@ -386,23 +386,35 @@ contract OnChainProposer is /// @inheritdoc IOnChainProposer function verifyBatchesAligned( uint256 firstBatchNumber, - bytes[] calldata alignedPublicInputsList, - bytes32[][] calldata alignedMerkleProofsList + bytes[] calldata publicInputsList, + bytes32[][] calldata sp1MerkleProofsList, + bytes32[][] calldata risc0MerkleProofsList ) external override { - require(ALIGNED_MODE, "Batch verification should be done via smart contract verifiers. Call verifyBatch() instead."); - require( - alignedPublicInputsList.length == alignedMerkleProofsList.length, - "OnChainProposer: input/proof array length mismatch" + ALIGNED_MODE, + "Batch verification should be done via smart contract verifiers. Call verifyBatch() instead." ); require( firstBatchNumber == lastVerifiedBatch + 1, "OnChainProposer: incorrect first batch number" ); + if (REQUIRE_SP1_PROOF) { + require( + publicInputsList.length == sp1MerkleProofsList.length, + "OnChainProposer: SP1 input/proof array length mismatch" + ); + } + if (REQUIRE_RISC0_PROOF) { + require( + publicInputsList.length == risc0MerkleProofsList.length, + "OnChainProposer: Risc0 input/proof array length mismatch" + ); + } + uint256 batchNumber = firstBatchNumber; - for (uint256 i = 0; i < alignedPublicInputsList.length; i++) { + for (uint256 i = 0; i < publicInputsList.length; i++) { require( batchCommitments[batchNumber].newStateRoot != bytes32(0), "OnChainProposer: cannot verify an uncommitted batch" @@ -424,7 +436,7 @@ contract OnChainProposer is // Verify public data for the batch string memory reason = _verifyPublicData( batchNumber, - alignedPublicInputsList[i][8:] + publicInputsList[i][8:] ); if (bytes(reason).length != 0) { revert( @@ -434,23 +446,22 @@ contract OnChainProposer is ) ); } - bytes memory callData = abi.encodeWithSignature( - "verifyProofInclusion(bytes32[],bytes32,bytes)", - alignedMerkleProofsList[i], - SP1_VERIFICATION_KEY, - alignedPublicInputsList[i] - ); - (bool callResult, bytes memory response) = ALIGNEDPROOFAGGREGATOR - .staticcall(callData); - require( - callResult, - "OnChainProposer: call to ALIGNEDPROOFAGGREGATOR failed" - ); - bool proofVerified = abi.decode(response, (bool)); - require( - proofVerified, - "OnChainProposer: Aligned proof verification failed" - ); + + if (REQUIRE_SP1_PROOF) { + _verifyProofInclusionAligned( + sp1MerkleProofsList[i], + SP1_VERIFICATION_KEY, + publicInputsList[i] + ); + } + + if (REQUIRE_RISC0_PROOF) { + _verifyProofInclusionAligned( + risc0MerkleProofsList[i], + RISC0_VERIFICATION_KEY, + publicInputsList[i] + ); + } // Remove previous batch commitment delete batchCommitments[batchNumber - 1]; @@ -520,6 +531,30 @@ contract OnChainProposer is return ""; } + function _verifyProofInclusionAligned( + bytes32[] calldata merkleProofsList, + bytes32 verificationKey, + bytes calldata publicInputsList + ) internal view { + bytes memory callData = abi.encodeWithSignature( + "verifyProofInclusion(bytes32[],bytes32,bytes)", + merkleProofsList, + verificationKey, + publicInputsList + ); + (bool callResult, bytes memory response) = ALIGNEDPROOFAGGREGATOR + .staticcall(callData); + require( + callResult, + "OnChainProposer: call to ALIGNEDPROOFAGGREGATOR failed" + ); + bool proofVerified = abi.decode(response, (bool)); + require( + proofVerified, + "OnChainProposer: Aligned proof verification failed" + ); + } + /// @notice Allow owner to upgrade the contract. /// @param newImplementation the address of the new implementation function _authorizeUpgrade( diff --git a/crates/l2/contracts/src/l1/based/interfaces/IOnChainProposer.sol b/crates/l2/contracts/src/l1/based/interfaces/IOnChainProposer.sol index ee99942dac1..02ab25271d2 100644 --- a/crates/l2/contracts/src/l1/based/interfaces/IOnChainProposer.sol +++ b/crates/l2/contracts/src/l1/based/interfaces/IOnChainProposer.sol @@ -81,11 +81,13 @@ interface IOnChainProposer { /// @notice Method used to verify a sequence of L2 batches in Aligned, starting from `firstBatchNumber`. /// Each proof corresponds to one batch, and batch numbers must increase by 1 sequentially. /// @param firstBatchNumber The batch number of the first proof to verify. Must be `lastVerifiedBatch + 1`. - /// @param alignedPublicInputsList An array of public input bytes, one per proof. - /// @param alignedMerkleProofsList An array of Merkle proofs (sibling hashes), one per proof. + /// @param publicInputsList An array of public input bytes, one per proof. + /// @param sp1MerkleProofsList An array of Merkle proofs (sibling hashes), one per SP1 proof. + /// @param risc0MerkleProofsList An array of Merkle proofs (sibling hashes), one per Risc0 proof. function verifyBatchesAligned( uint256 firstBatchNumber, - bytes[] calldata alignedPublicInputsList, - bytes32[][] calldata alignedMerkleProofsList + bytes[] calldata publicInputsList, + bytes32[][] calldata sp1MerkleProofsList, + bytes32[][] calldata risc0MerkleProofsList ) external; } From 27d03acb221c3e1549c2b5b7aab0fc15ae1b4c42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 15 Sep 2025 16:02:25 -0300 Subject: [PATCH 164/236] downgrade serde to <1.0.22 --- Cargo.toml | 4 +++- crates/common/trie/Cargo.toml | 3 +-- crates/l2/networking/rpc/Cargo.toml | 2 +- crates/l2/prover/src/guest_program/Cargo.toml | 2 +- crates/l2/tee/quote-gen/Cargo.toml | 2 +- crates/networking/rpc/Cargo.toml | 2 +- crates/storage/Cargo.toml | 2 +- crates/vm/levm/Cargo.toml | 2 +- 8 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e5c54813253..78e5fea22ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,7 +76,9 @@ tracing-subscriber = { version = "0.3.0", features = ["env-filter"] } async-trait = "0.1.88" ethereum-types = { version = "0.15.1", features = ["serialize"] } -serde = { version = "1.0.203", features = ["derive"] } +serde = { version = "<1.0.220", features = ["derive"] } +# serde >=1.0.22 contains a breaking change for alloy-consensus +# https://github.com/alloy-rs/alloy/issues/2876 serde_with = "3.11.0" serde_json = "1.0.117" libmdbx = { version = "=0.5.3", features = ["orm"] } diff --git a/crates/common/trie/Cargo.toml b/crates/common/trie/Cargo.toml index 527e5ebc4d9..7948259af9f 100644 --- a/crates/common/trie/Cargo.toml +++ b/crates/common/trie/Cargo.toml @@ -13,7 +13,7 @@ tracing.workspace = true thiserror.workspace = true sha3.workspace = true hex.workspace = true -serde = { version = "1.0.203", features = ["derive"] } +serde.workspace = true serde_json = "1.0.117" libmdbx = { workspace = true, optional = true } rocksdb = { workspace = true, optional = true } @@ -43,4 +43,3 @@ path = "./trie.rs" [[bench]] name = "trie_bench" harness = false - diff --git a/crates/l2/networking/rpc/Cargo.toml b/crates/l2/networking/rpc/Cargo.toml index bfd24de85bc..27e34c77e49 100644 --- a/crates/l2/networking/rpc/Cargo.toml +++ b/crates/l2/networking/rpc/Cargo.toml @@ -17,7 +17,7 @@ ethrex-rlp.workspace = true axum.workspace = true tower-http = { version = "0.6.2", features = ["cors"] } -serde = { version = "1.0.203", features = ["derive"] } +serde.workspace = true serde_json = "1.0.117" tokio = { workspace = true, features = ["full"] } bytes.workspace = true diff --git a/crates/l2/prover/src/guest_program/Cargo.toml b/crates/l2/prover/src/guest_program/Cargo.toml index 81867f67254..db9c9c59738 100644 --- a/crates/l2/prover/src/guest_program/Cargo.toml +++ b/crates/l2/prover/src/guest_program/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2024" [dependencies] -serde = { version = "1.0.203", features = ["derive"] } +serde.workspace = true serde_with.workspace = true serde_json = "1.0.117" thiserror = "2.0.9" diff --git a/crates/l2/tee/quote-gen/Cargo.toml b/crates/l2/tee/quote-gen/Cargo.toml index 74fe0025be6..051ae2ebb46 100644 --- a/crates/l2/tee/quote-gen/Cargo.toml +++ b/crates/l2/tee/quote-gen/Cargo.toml @@ -9,7 +9,7 @@ tokio = { version = "1.41.1", features = ["full"] } keccak-hash = "0.11" hex = "0.4" zerocopy = "0.8" -serde = { version = "1.0", features = ["derive"] } +serde.workspace = true serde_json = "1.0" ethrex-common = { path = "../../../common", default-features = false } diff --git a/crates/networking/rpc/Cargo.toml b/crates/networking/rpc/Cargo.toml index da9d8585402..55573fca96d 100644 --- a/crates/networking/rpc/Cargo.toml +++ b/crates/networking/rpc/Cargo.toml @@ -8,7 +8,7 @@ edition = "2024" [dependencies] axum.workspace = true tower-http = { version = "0.6.2", features = ["cors"] } -serde = { version = "1.0.203", features = ["derive"] } +serde.workspace = true serde_json = "1.0.117" tokio = { workspace = true, features = ["full"] } bytes.workspace = true diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index 973da96e69a..317c9e0dcfd 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -18,7 +18,7 @@ tracing.workspace = true thiserror.workspace = true sha3.workspace = true hex.workspace = true -serde = { version = "1.0.203", features = ["derive"] } +serde.workspace = true serde_json = "1.0.117" libmdbx = { workspace = true, optional = true } rocksdb = { workspace = true, optional = true } diff --git a/crates/vm/levm/Cargo.toml b/crates/vm/levm/Cargo.toml index a67f8272402..78b6dfcffc9 100644 --- a/crates/vm/levm/Cargo.toml +++ b/crates/vm/levm/Cargo.toml @@ -13,7 +13,7 @@ derive_more = { version = "1.0.0", features = ["full"] } bytes.workspace = true keccak-hash.workspace = true thiserror.workspace = true -serde = { workspace = true, features = ["derive", "rc"] } +serde.workspace = true serde_json.workspace = true sha3 = "0.10.8" From 7ae7fd52e2d64de346e5d595b1bf37d7294c948f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 15 Sep 2025 16:04:15 -0300 Subject: [PATCH 165/236] fix comment --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 78e5fea22ae..7b7856f18de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -77,7 +77,7 @@ tracing-subscriber = { version = "0.3.0", features = ["env-filter"] } async-trait = "0.1.88" ethereum-types = { version = "0.15.1", features = ["serialize"] } serde = { version = "<1.0.220", features = ["derive"] } -# serde >=1.0.22 contains a breaking change for alloy-consensus +# serde >=1.0.220 contains a breaking change for alloy-consensus # https://github.com/alloy-rs/alloy/issues/2876 serde_with = "3.11.0" serde_json = "1.0.117" From e5a885dda11c25899d075d3cce4596ff80a10caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 15 Sep 2025 16:06:57 -0300 Subject: [PATCH 166/236] tdx is not in workspace --- crates/l2/tee/quote-gen/Cargo.toml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/l2/tee/quote-gen/Cargo.toml b/crates/l2/tee/quote-gen/Cargo.toml index 051ae2ebb46..2f721adc347 100644 --- a/crates/l2/tee/quote-gen/Cargo.toml +++ b/crates/l2/tee/quote-gen/Cargo.toml @@ -9,7 +9,9 @@ tokio = { version = "1.41.1", features = ["full"] } keccak-hash = "0.11" hex = "0.4" zerocopy = "0.8" -serde.workspace = true +serde = { version = "<1.0.220", features = ["derive"] } +# serde >=1.0.220 contains a breaking change for alloy-consensus +# https://github.com/alloy-rs/alloy/issues/2876 serde_json = "1.0" ethrex-common = { path = "../../../common", default-features = false } From c51957045124f31aff6447a60c43490d57b572c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 15 Sep 2025 16:07:39 -0300 Subject: [PATCH 167/236] Update crates/vm/levm/Cargo.toml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- crates/vm/levm/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/vm/levm/Cargo.toml b/crates/vm/levm/Cargo.toml index 78b6dfcffc9..a67f8272402 100644 --- a/crates/vm/levm/Cargo.toml +++ b/crates/vm/levm/Cargo.toml @@ -13,7 +13,7 @@ derive_more = { version = "1.0.0", features = ["full"] } bytes.workspace = true keccak-hash.workspace = true thiserror.workspace = true -serde.workspace = true +serde = { workspace = true, features = ["derive", "rc"] } serde_json.workspace = true sha3 = "0.10.8" From 941add8609b49308f72021524b1ed924b66e8a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 15 Sep 2025 16:20:48 -0300 Subject: [PATCH 168/236] update cargo locks --- Cargo.lock | 71 ++++++++----------- .../src/guest_program/src/risc0/Cargo.lock | 71 +++++++++++-------- .../src/guest_program/src/sp1/Cargo.lock | 63 +++++++++------- 3 files changed, 105 insertions(+), 100 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0829bdafa1f..2fc64dc0a7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1732,11 +1732,11 @@ dependencies = [ [[package]] name = "camino" -version = "1.2.0" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1de8bc0aa9e9385ceb3bf0c152e3a9b9544f6c4a912c8ae504e80c1f0368603" +checksum = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5" dependencies = [ - "serde_core", + "serde", ] [[package]] @@ -1756,7 +1756,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_json", "thiserror 1.0.69", @@ -1770,7 +1770,7 @@ checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" dependencies = [ "camino", "cargo-platform", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_json", "thiserror 2.0.16", @@ -2224,14 +2224,15 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.16.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6407bff74dea37e0fa3dc1c1c974e5d46405f0c987bf9997a0762adce71eda6" +checksum = "dccd746bf9b1038c0507b7cec21eb2b11222db96a2902c96e8c185d6d20fb9c4" dependencies = [ "cfg-if 1.0.3", "cpufeatures", + "hex", "proptest", - "serde_core", + "serde", ] [[package]] @@ -3575,12 +3576,11 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.8" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "259d404d09818dec19332e31d94558aeb442fea04c817006456c24b5460bbd4b" +checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" dependencies = [ "serde", - "serde_core", "typeid", ] @@ -3823,7 +3823,7 @@ dependencies = [ "chrono", "ethers-core", "reqwest 0.11.27", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_json", "thiserror 1.0.69", @@ -3933,7 +3933,7 @@ dependencies = [ "path-slash", "rayon", "regex", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_json", "solang-parser", @@ -9643,7 +9643,7 @@ dependencies = [ "risc0-zkp", "risc0-zkvm-platform", "ruint", - "semver 1.0.27", + "semver 1.0.26", "serde", "tracing", ] @@ -9665,7 +9665,7 @@ dependencies = [ "risc0-zkp", "risc0-zkvm-platform", "rzup", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_json", "stability", @@ -9964,7 +9964,7 @@ dependencies = [ "rrs-lib", "rustc-demangle", "rzup", - "semver 1.0.27", + "semver 1.0.26", "serde", "sha2", "stability", @@ -10250,7 +10250,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.27", + "semver 1.0.26", ] [[package]] @@ -10462,7 +10462,7 @@ checksum = "5d2aed296f203fa64bcb4b52069356dd86d6ec578593985b919b6995bee1f0ae" dependencies = [ "hex", "rsa", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_with", "sha2", @@ -10721,12 +10721,11 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.27" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ "serde", - "serde_core", ] [[package]] @@ -10758,11 +10757,10 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.224" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aaeb1e94f53b16384af593c71e20b095e958dab1d26939c1b70645c5cfbcc0b" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ - "serde_core", "serde_derive", ] @@ -10775,20 +10773,11 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_core" -version = "1.0.224" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f39390fa6346e24defbcdd3d9544ba8a19985d0af74df8501fbfe9a64341ab" -dependencies = [ - "serde_derive", -] - [[package]] name = "serde_derive" -version = "1.0.224" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ff78ab5e8561c9a675bfc1785cb07ae721f0ee53329a595cefd8c04c2ac4e0" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -10797,27 +10786,25 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ "indexmap 2.11.1", "itoa", "memchr", "ryu", "serde", - "serde_core", ] [[package]] name = "serde_path_to_error" -version = "0.1.20" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" dependencies = [ "itoa", "serde", - "serde_core", ] [[package]] @@ -11927,7 +11914,7 @@ dependencies = [ "hex", "once_cell", "reqwest 0.11.27", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_json", "sha2", diff --git a/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock b/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock index 540e3d62e0e..9ea65961217 100644 --- a/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock @@ -566,18 +566,18 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.8.1" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" +checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" dependencies = [ "proc-macro2", "quote", @@ -616,15 +616,15 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.12" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5" +checksum = "e1de8bc0aa9e9385ceb3bf0c152e3a9b9544f6c4a912c8ae504e80c1f0368603" [[package]] name = "cc" -version = "1.2.36" +version = "1.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54" +checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" dependencies = [ "find-msvc-tools", "shlex", @@ -1511,7 +1511,7 @@ dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.4+wasi-0.2.4", + "wasi 0.14.6+wasi-0.2.4", ] [[package]] @@ -1609,9 +1609,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1801,9 +1801,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" dependencies = [ "equivalent", "hashbrown 0.15.5", @@ -2927,7 +2927,7 @@ dependencies = [ "bytecheck", "bytes", "hashbrown 0.15.5", - "indexmap 2.11.0", + "indexmap 2.11.1", "munge", "ptr_meta", "rancor", @@ -3149,7 +3149,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.0", + "indexmap 2.11.1", "schemars 0.9.0", "schemars 1.0.4", "serde", @@ -3538,7 +3538,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "toml_datetime", "winnow", ] @@ -3640,9 +3640,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-segmentation" @@ -3720,9 +3720,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.4+wasi-0.2.4" +version = "0.14.6+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f71243a3f320c00a8459e455c046ce571229c2f31fd11645d9dc095e3068ca0" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a5f4a424faf49c3c2c344f166f0662341d470ea185e939657aaff130f0ec4a" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ "wit-bindgen", ] @@ -3807,13 +3816,13 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.1.3", + "windows-link 0.2.0", "windows-result", "windows-strings", ] @@ -3854,20 +3863,20 @@ checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" [[package]] name = "windows-result" -version = "0.3.4" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" dependencies = [ - "windows-link 0.1.3", + "windows-link 0.2.0", ] [[package]] name = "windows-strings" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" dependencies = [ - "windows-link 0.1.3", + "windows-link 0.2.0", ] [[package]] @@ -4046,9 +4055,9 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.45.1" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" diff --git a/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock b/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock index 44cea0cc247..718f5b22e6f 100644 --- a/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock @@ -450,15 +450,15 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.12" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5" +checksum = "e1de8bc0aa9e9385ceb3bf0c152e3a9b9544f6c4a912c8ae504e80c1f0368603" [[package]] name = "cc" -version = "1.2.36" +version = "1.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54" +checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" dependencies = [ "find-msvc-tools", "shlex", @@ -1248,7 +1248,7 @@ dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.4+wasi-0.2.4", + "wasi 0.14.6+wasi-0.2.4", ] [[package]] @@ -1337,9 +1337,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1523,9 +1523,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" dependencies = [ "equivalent", "hashbrown 0.15.5", @@ -2328,7 +2328,7 @@ dependencies = [ "bytecheck", "bytes", "hashbrown 0.15.5", - "indexmap 2.11.0", + "indexmap 2.11.1", "munge", "ptr_meta", "rancor", @@ -2521,7 +2521,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.0", + "indexmap 2.11.1", "schemars 0.9.0", "schemars 1.0.4", "serde", @@ -2923,7 +2923,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "toml_datetime", "winnow", ] @@ -3010,9 +3010,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-segmentation" @@ -3096,9 +3096,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.4+wasi-0.2.4" +version = "0.14.6+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a5f4a424faf49c3c2c344f166f0662341d470ea185e939657aaff130f0ec4a" +checksum = "7f71243a3f320c00a8459e455c046ce571229c2f31fd11645d9dc095e3068ca0" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ "wit-bindgen", ] @@ -3183,13 +3192,13 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.1.3", + "windows-link 0.2.0", "windows-result", "windows-strings", ] @@ -3230,20 +3239,20 @@ checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" [[package]] name = "windows-result" -version = "0.3.4" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" dependencies = [ - "windows-link 0.1.3", + "windows-link 0.2.0", ] [[package]] name = "windows-strings" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" dependencies = [ - "windows-link 0.1.3", + "windows-link 0.2.0", ] [[package]] @@ -3422,9 +3431,9 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.45.1" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" From 0daff881589e819cc2c7ec673dafad8e5ae3d3f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 15 Sep 2025 18:30:02 -0300 Subject: [PATCH 169/236] contract fixes --- crates/l2/contracts/src/l1/OnChainProposer.sol | 2 +- crates/l2/contracts/src/l1/based/OnChainProposer.sol | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 61e1b97d1c8..e594e3e2e92 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -323,7 +323,7 @@ contract OnChainProposer is ); } try - ISP1Verifier(SP1_VERIFICATION_KEY).verifyProof( + ISP1Verifier(SP1_VERIFIER_ADDRESS).verifyProof( SP1_VERIFICATION_KEY, sp1PublicValues, sp1ProofBytes diff --git a/crates/l2/contracts/src/l1/based/OnChainProposer.sol b/crates/l2/contracts/src/l1/based/OnChainProposer.sol index 37b2aa85635..ac426c43c30 100644 --- a/crates/l2/contracts/src/l1/based/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/based/OnChainProposer.sol @@ -313,7 +313,7 @@ contract OnChainProposer is ); } try - IRiscZeroVerifier(R0VERIFIER).verify( + IRiscZeroVerifier(RISC0_VERIFIER_ADDRESS).verify( risc0BlockProof, RISC0_VERIFICATION_KEY, sha256(risc0Journal) @@ -340,7 +340,7 @@ contract OnChainProposer is ); } try - ISP1Verifier(SP1VERIFIER).verifyProof( + ISP1Verifier(SP1_VERIFIER_ADDRESS).verifyProof( SP1_VERIFICATION_KEY, sp1PublicValues, sp1ProofBytes @@ -367,7 +367,7 @@ contract OnChainProposer is ); } try - ITDXVerifier(TDXVERIFIER).verify(tdxPublicValues, tdxSignature) + ITDXVerifier(TDX_VERIFIER_ADDRESS).verify(tdxPublicValues, tdxSignature) {} catch { revert( "OnChainProposer: Invalid TDX proof failed proof verification" From 12492fed29e9dd257c17c9b8810849055af3ae84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 22 Sep 2025 14:13:45 -0300 Subject: [PATCH 170/236] fix merge errors --- crates/l2/prover/src/backend/sp1.rs | 12 ------------ crates/l2/sequencer/l1_proof_sender.rs | 18 ++++++------------ 2 files changed, 6 insertions(+), 24 deletions(-) diff --git a/crates/l2/prover/src/backend/sp1.rs b/crates/l2/prover/src/backend/sp1.rs index b78abfda8ca..0885ab57c00 100644 --- a/crates/l2/prover/src/backend/sp1.rs +++ b/crates/l2/prover/src/backend/sp1.rs @@ -21,18 +21,6 @@ static PROGRAM_ELF: &[u8] = #[cfg(clippy)] static PROGRAM_ELF: &[u8] = &[]; -struct ProverSetup { - client: EnvProver, - pk: SP1ProvingKey, - vk: SP1VerifyingKey, -} - -static PROVER_SETUP: LazyLock = LazyLock::new(|| { - let client = ProverClient::from_env(); - let (pk, vk) = client.setup(PROGRAM_ELF); - ProverSetup { client, pk, vk } -}); - pub struct ProveOutput { pub proof: SP1ProofWithPublicValues, pub vk: SP1VerifyingKey, diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index d1bf9177470..939446346a4 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -85,8 +85,6 @@ pub struct L1ProofSenderHealth { network: String, #[serde(skip_serializing_if = "Option::is_none")] fee_estimate: Option, - #[serde(skip_serializing_if = "Option::is_none")] - aligned_sp1_elf_path: Option, } impl L1ProofSender { @@ -397,15 +395,12 @@ impl L1ProofSender { let rpc_healthcheck = self.eth_client.test_urls().await; let signer_status = self.signer.health().await; - let (fee_estimate, aligned_sp1_elf_path) = - if self.needed_proof_types.contains(&ProverType::Aligned) { - ( - Some(self.fee_estimate.clone()), - Some(self.aligned_sp1_elf_path.clone()), - ) - } else { - (None, None) - }; + let fee_estimate = if self.aligned_mode { + Some(self.fee_estimate.clone()) + } else { + None + }; + CallResponse::Reply(OutMessage::Health(Box::new(L1ProofSenderHealth { rpc_healthcheck, signer_status, @@ -420,7 +415,6 @@ impl L1ProofSender { l1_chain_id: self.l1_chain_id, network: format!("{:?}", self.network), fee_estimate, - aligned_sp1_elf_path, }))) } } From 8aa15c77f18607bf5ddaae1b580f2c8b6bd3fe3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 23 Sep 2025 11:09:34 -0300 Subject: [PATCH 171/236] add custom error to priv logs --- .../l2/contracts/src/l1/OnChainProposer.sol | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index e594e3e2e92..52e9f1d2abe 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -95,6 +95,11 @@ contract OnChainProposer is /// @notice True if verification is done through Aligned Layer instead of smart contract verifiers. bool public ALIGNED_MODE; + error InvalidPrivilegedTransactionLogs( + bytes32 claimedProcessedTransactions, + bytes32 processedPrivilegedTransactionsRollingHash + ); + modifier onlySequencer() { require( authorizedSequencerAddresses[msg.sender], @@ -200,11 +205,15 @@ contract OnChainProposer is .getPendingTransactionsVersionedHash( uint16(bytes2(processedPrivilegedTransactionsRollingHash)) ); - require( - claimedProcessedTransactions == - processedPrivilegedTransactionsRollingHash, - "OnChainProposer: invalid privileged transaction logs" - ); + if ( + claimedProcessedTransactions != + processedPrivilegedTransactionsRollingHash + ) { + revert InvalidPrivilegedTransactionLogs( + claimedProcessedTransactions, + processedPrivilegedTransactionsRollingHash + ); + } } if (withdrawalsLogsMerkleRoot != bytes32(0)) { ICommonBridge(BRIDGE).publishWithdrawals( From 33190fa9753faf9847087c2f614426d99896eb00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 23 Sep 2025 12:27:38 -0300 Subject: [PATCH 172/236] fix proof-coordinators in makefile --- crates/l2/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/l2/Makefile b/crates/l2/Makefile index a5fbc1ecaf8..e56493a8f18 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -176,17 +176,17 @@ build-prover-exec: init-prover-sp1: cargo run --release --features "$(GPU?),sp1" --manifest-path ../../Cargo.toml -- \ - --proof-coordinator tcp://127.0.0.1:3900 \ + --proof-coordinators tcp://127.0.0.1:3900 \ --backend sp1 init-prover-risc0: cargo run --release --features "$(GPU?),risc0" --manifest-path ../../Cargo.toml -- \ - --proof-coordinator tcp://127.0.0.1:3900 \ + --proof-coordinators tcp://127.0.0.1:3900 \ --backend risc0 init-prover-exec: cargo run --release --features "$(GPU?)" --manifest-path ../../Cargo.toml -- \ - --proof-coordinator tcp://127.0.0.1:3900 \ + --proof-coordinators tcp://127.0.0.1:3900 \ --backend exec # ============================================================================== From be374da7c0183025642e81704dad1d3213162e40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 23 Sep 2025 16:14:27 -0300 Subject: [PATCH 173/236] add l2 prover to init-prover rules --- crates/l2/Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/l2/Makefile b/crates/l2/Makefile index e56493a8f18..6d6b8f39fc3 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -176,16 +176,19 @@ build-prover-exec: init-prover-sp1: cargo run --release --features "$(GPU?),sp1" --manifest-path ../../Cargo.toml -- \ + l2 prover \ --proof-coordinators tcp://127.0.0.1:3900 \ --backend sp1 init-prover-risc0: cargo run --release --features "$(GPU?),risc0" --manifest-path ../../Cargo.toml -- \ + l2 prover \ --proof-coordinators tcp://127.0.0.1:3900 \ --backend risc0 init-prover-exec: cargo run --release --features "$(GPU?)" --manifest-path ../../Cargo.toml -- \ + l2 prover \ --proof-coordinators tcp://127.0.0.1:3900 \ --backend exec From 15788c96d5e1dbd44a8a6cb488d8421ce3f8db6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 23 Sep 2025 17:57:37 -0300 Subject: [PATCH 174/236] fix init-prover rule that does not exist anymore --- .github/workflows/pr-main_l2.yaml | 2 +- crates/l2/Makefile | 2 +- docs/l2/architecture/prover.md | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index c8a58ef2f35..993cd3ae834 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -251,7 +251,7 @@ jobs: run: | sudo chmod -R a+rw crates/l2 cd crates/l2 - RUST_LOG=info,ethrex_prover_lib=debug make init-prover & + RUST_LOG=info,ethrex_prover_lib=debug make init-prover-exec & docker logs --follow ethrex_l2 & PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex -s SIGINT diff --git a/crates/l2/Makefile b/crates/l2/Makefile index 6d6b8f39fc3..2b1f365dee7 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -1,7 +1,7 @@ .PHONY: help init down restart init-l1-docker down-l1-docker restart-l1-docker \ init-l1 rm-db-l1 deploy-l1 deploy-l1-sp1 init-l2 \ init-metrics down-metrics restart-metrics down-l2 restart-l2 rm-db-l2 \ - init-prover build-prover clean-tee clean-tee-contract-deps \ + init-prover-sp1 init-prover-risc0 init-prover-exec build-prover clean-tee clean-tee-contract-deps \ test integration-test integration-test-gpu state-diff-test .DEFAULT_GOAL := help diff --git a/docs/l2/architecture/prover.md b/docs/l2/architecture/prover.md index 965bbc37f25..6fb554bffc9 100644 --- a/docs/l2/architecture/prover.md +++ b/docs/l2/architecture/prover.md @@ -52,7 +52,7 @@ ethrex-prover is able to generate execution proofs of Ethereum Mainnet/Testnet b To run the blockchain (`proposer`) and prover in conjunction, start the `Prover`, use the following command: ```sh -make init-prover PROVER # optional: GPU=true +make init-prover- # optional: GPU=true ``` #### Run the whole system with the prover - In one Machine @@ -68,7 +68,7 @@ make init-prover PROVER # optional: GPU=true - Init the L1 in a docker container on port `8545`. - Deploy the needed contracts for the L2 on the L1. - Start the L2 locally on port `1729`. -4. In a new terminal → `make init-prover PROVER= # GPU=true`. +4. In a new terminal → `make init-prover- # GPU=true`. After this initialization we should have the prover running in `dev_mode` → No real proofs. @@ -106,7 +106,7 @@ Two servers are required: one for the `Prover` and another for the `sequencer`. - PROVER_CLIENT_PROVING_TIME_MS: The amount of time to wait before requesting new data to prove - `Finally`, to start the `Prover`/`zkvm`, run: - - `make init-prover PROVER= # optional: GPU=true` + - `make init-prover- # optional: GPU=true` 2. `ProofCoordinator`/`sequencer` → this server just needs rust installed. From 5cd190c25737edd779c2d2f2928d3187cb7c0226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 23 Sep 2025 17:57:47 -0300 Subject: [PATCH 175/236] Revert "add custom error to priv logs" This reverts commit 8aa15c77f18607bf5ddaae1b580f2c8b6bd3fe3e. --- .../l2/contracts/src/l1/OnChainProposer.sol | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 52e9f1d2abe..e594e3e2e92 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -95,11 +95,6 @@ contract OnChainProposer is /// @notice True if verification is done through Aligned Layer instead of smart contract verifiers. bool public ALIGNED_MODE; - error InvalidPrivilegedTransactionLogs( - bytes32 claimedProcessedTransactions, - bytes32 processedPrivilegedTransactionsRollingHash - ); - modifier onlySequencer() { require( authorizedSequencerAddresses[msg.sender], @@ -205,15 +200,11 @@ contract OnChainProposer is .getPendingTransactionsVersionedHash( uint16(bytes2(processedPrivilegedTransactionsRollingHash)) ); - if ( - claimedProcessedTransactions != - processedPrivilegedTransactionsRollingHash - ) { - revert InvalidPrivilegedTransactionLogs( - claimedProcessedTransactions, - processedPrivilegedTransactionsRollingHash - ); - } + require( + claimedProcessedTransactions == + processedPrivilegedTransactionsRollingHash, + "OnChainProposer: invalid privileged transaction logs" + ); } if (withdrawalsLogsMerkleRoot != bytes32(0)) { ICommonBridge(BRIDGE).publishWithdrawals( From e72183072c93c3726e12d33ee019ef2b21f4d3f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 24 Sep 2025 10:31:14 -0300 Subject: [PATCH 176/236] fix env var names --- .github/workflows/main_prover.yaml | 2 +- .github/workflows/pr-main_l2.yaml | 2 +- cmd/ethrex/l2/deployer.rs | 12 +++++++----- crates/l2/docker-compose.yaml | 12 ++++++------ docs/l2/architecture/prover.md | 10 +++++----- docs/l2/architecture/tdx.md | 4 ++-- 6 files changed, 22 insertions(+), 20 deletions(-) diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index f7b2f482372..3c9c59fc729 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -65,7 +65,7 @@ jobs: cd crates/l2 DOCKER_ETHREX_WORKDIR=/usr/local/bin \ ETHREX_DEPLOYER_DEPLOY_RICH=true \ - ETHREX_DEPLOYER_SP1=true \ + ETHREX_L2_SP1=true \ docker compose up --build contract_deployer - name: Ensure admin permissions in _work diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index 993cd3ae834..12725b31ff6 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -319,7 +319,7 @@ jobs: cd crates/l2 make init-l1-docker; ETHREX_DEPLOYER_DEPLOY_RICH=true \ - ETHREX_DEPLOYER_TDX_DEPLOY=true \ + ETHREX_L2_TDX=true \ ETHREX_TDX_DEV_MODE=true \ make deploy-l1 diff --git a/cmd/ethrex/l2/deployer.rs b/cmd/ethrex/l2/deployer.rs index 74ec249eeb2..3763cdf5a89 100644 --- a/cmd/ethrex/l2/deployer.rs +++ b/cmd/ethrex/l2/deployer.rs @@ -197,7 +197,8 @@ pub struct DeployerOptions { long = "sp1.verifier-address", value_name = "ADDRESS", env = "ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS", - help_heading = "Deployer options" + help_heading = "Deployer options", + help = "If no verifier address is provided, contract deployer will deploy the SP1 verifier" )] pub sp1_verifier_address: Option
, #[arg( @@ -214,7 +215,8 @@ pub struct DeployerOptions { long = "tdx.verifier-address", value_name = "ADDRESS", env = "ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS", - help_heading = "Deployer options" + help_heading = "Deployer options", + help = "If no verifier address is provided, contract deployer will deploy the TDX verifier" )] pub tdx_verifier_address: Option
, #[arg( @@ -1077,13 +1079,13 @@ fn write_contract_addresses_to_env( )?; writeln!( writer, - "ETHREX_DEPLOYER_SP1_CONTRACT_VERIFIER={:#x}", + "ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS={:#x}", contract_addresses.sp1_verifier_address )?; writeln!( writer, - "ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER={:#x}", + "ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS={:#x}", contract_addresses.risc0_verifier_address )?; writeln!( @@ -1093,7 +1095,7 @@ fn write_contract_addresses_to_env( )?; writeln!( writer, - "ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER={:#x}", + "ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS={:#x}", contract_addresses.tdx_verifier_address )?; // TDX aux contracts, qpl-tool depends on exact env var naming diff --git a/crates/l2/docker-compose.yaml b/crates/l2/docker-compose.yaml index bb74be93c3f..846706b749d 100644 --- a/crates/l2/docker-compose.yaml +++ b/crates/l2/docker-compose.yaml @@ -34,12 +34,12 @@ services: - ETHREX_DEPLOYER_GENESIS_L2_PATH=${DOCKER_ETHREX_WORKDIR}/fixtures/genesis/l2.json - ETHREX_DEPLOYER_PRIVATE_KEYS_FILE_PATH=${DOCKER_ETHREX_WORKDIR}/fixtures/keys/private_keys_l1.txt - ETHREX_DEPLOYER_DEPLOY_RICH=${ETHREX_DEPLOYER_DEPLOY_RICH:-true} - - ETHREX_DEPLOYER_RISC0=${ETHREX_DEPLOYER_RISC0:-false} - - ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER} - - ETHREX_DEPLOYER_SP1=${ETHREX_DEPLOYER_SP1:-false} - - ETHREX_DEPLOYER_SP1_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_SP1_CONTRACT_VERIFIER} - - ETHREX_DEPLOYER_TDX=${ETHREX_DEPLOYER_TDX:-false} - - ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER=${ETHREX_DEPLOYER_TDX_CONTRACT_VERIFIER} + - ETHREX_L2_RISC0=${ETHREX_L2_RISC0:-false} + - ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS=${ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS} + - ETHREX_L2_SP1=${ETHREX_L2_SP1:-false} + - ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS=${ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS} + - ETHREX_L2_TDX=${ETHREX_L2_TDX:-false} + - ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS=${ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS} - ETHREX_DEPLOYER_ALIGNED=${ETHREX_DEPLOYER_ALIGNED:-false} - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 - ETHREX_RISC0_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk diff --git a/docs/l2/architecture/prover.md b/docs/l2/architecture/prover.md index 6fb554bffc9..2c95492d358 100644 --- a/docs/l2/architecture/prover.md +++ b/docs/l2/architecture/prover.md @@ -127,13 +127,13 @@ Two servers are required: one for the `Prover` and another for the `sequencer`. // Set to true to randomize the salt. ETHREX_DEPLOYER_RANDOMIZE_CONTRACT_DEPLOYMENT=true // Set to true if you want SP1 proofs to be required - ETHREX_DEPLOYER_SP1=true + ETHREX_L2_SP1=true // Check the if the verification contract is present on your preferred network. Don't define this if you want it to be deployed automatically. - ETHREX_DEPLOYER_SP1_CONTRACT_VERIFIER=
+ ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS=
// Set to true if you want proofs to be required - ETHREX_DEPLOYER_RISC0=true + ETHREX_L2_RISC0=true // Check the if the contract is present on your preferred network. You shall deploy it manually if not. - ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER=
+ ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS=
// Set to any L1 endpoint. ETHREX_ETH_RPC_URL= ``` @@ -178,7 +178,7 @@ Two servers are required: one for the `Prover` and another for the `sequencer`. ```bash bash contracts/script/manage DeployEstopGroth16Verifier --broadcast ``` - 1. if the deployment was successful you should see the contract address in the output of the command, you will need to pass this as an argument to the L2 contract deployer, or via the `ETHREX_DEPLOYER_RISC0_CONTRACT_VERIFIER=
` env. variable. + 1. if the deployment was successful you should see the contract address in the output of the command, you will need to pass this as an argument to the L2 contract deployer, or via the `ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS=
` env. variable. if you get an error like `risc0-ethereum/contracts/../lib/forge-std/src/Script.sol": No such file or directory (os error 2)`, try to update the git submodules (foundry dependencies) with `git submodule update --init --recursive`. ## Configuration diff --git a/docs/l2/architecture/tdx.md b/docs/l2/architecture/tdx.md index 0d9a614ff7b..b193821069b 100644 --- a/docs/l2/architecture/tdx.md +++ b/docs/l2/architecture/tdx.md @@ -58,7 +58,7 @@ Exports an image that uses [UKI](https://uapi-group.org/specifications/specs/uni ## Running -You can enable the prover by setting `ETHREX_DEPLOYER_TDX=true`. +You can enable the prover by setting `ETHREX_L2_TDX=true`. For development purposes, you can use the flag `ETHREX_TDX_DEV_MODE=true` to disable quote verification. This allows you to run the quote generator even without having TDX-capable hardware. @@ -66,7 +66,7 @@ Ensure the proof coordinator is reachable at 172.17.0.1. You can bring up the ne ```sh // cd crates/l2 -make init ETHREX_DEPLOYER_TDX=true PROOF_COORDINATOR_ADDRESS=0.0.0.0 +make init ETHREX_L2_TDX=true PROOF_COORDINATOR_ADDRESS=0.0.0.0 ``` And in another terminal, running the VM: From 42d12f28ce56b1b66e06d90e1e18fcb1b28a4f9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 24 Sep 2025 11:03:52 -0300 Subject: [PATCH 177/236] move docker logs to be first command --- .github/workflows/main_prover.yaml | 2 +- .github/workflows/pr-main_l2.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index 3c9c59fc729..040199acb5e 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -84,9 +84,9 @@ jobs: - name: Run test # if: ${{ always() && github.event_name == 'merge_group' }} run: | + docker logs --follow ethrex_l2 & DOCKER_LOGS_PID=$! cd crates/l2 RUST_LOG=info,ethrex_prover_lib=debug make init-prover-sp1 GPU=true & - docker logs --follow ethrex_l2 & DOCKER_LOGS_PID=$! PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex -s SIGINT kill $DOCKER_LOGS_PID || true diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index 12725b31ff6..2c7a3e0095a 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -159,10 +159,10 @@ jobs: - name: Run test run: | + docker logs --follow ethrex_l2 & sudo chmod -R a+rw crates/l2 cd crates/l2 RUST_LOG=info,ethrex_prover_lib=debug make init-prover-exec & - docker logs --follow ethrex_l2 & PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex -s SIGINT @@ -249,10 +249,10 @@ jobs: - name: Run test run: | + docker logs --follow ethrex_l2 & sudo chmod -R a+rw crates/l2 cd crates/l2 RUST_LOG=info,ethrex_prover_lib=debug make init-prover-exec & - docker logs --follow ethrex_l2 & PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex -s SIGINT From dd81141c251e47c07e93476f573bdfee99dfbdd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 24 Sep 2025 14:52:57 -0300 Subject: [PATCH 178/236] disable verifier address env vars being set always --- crates/l2/docker-compose.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/l2/docker-compose.yaml b/crates/l2/docker-compose.yaml index 846706b749d..30765f48873 100644 --- a/crates/l2/docker-compose.yaml +++ b/crates/l2/docker-compose.yaml @@ -35,11 +35,11 @@ services: - ETHREX_DEPLOYER_PRIVATE_KEYS_FILE_PATH=${DOCKER_ETHREX_WORKDIR}/fixtures/keys/private_keys_l1.txt - ETHREX_DEPLOYER_DEPLOY_RICH=${ETHREX_DEPLOYER_DEPLOY_RICH:-true} - ETHREX_L2_RISC0=${ETHREX_L2_RISC0:-false} - - ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS=${ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS} + - ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS=${ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS?} - ETHREX_L2_SP1=${ETHREX_L2_SP1:-false} - - ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS=${ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS} + - ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS=${ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS?} - ETHREX_L2_TDX=${ETHREX_L2_TDX:-false} - - ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS=${ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS} + - ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS=${ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS?} - ETHREX_DEPLOYER_ALIGNED=${ETHREX_DEPLOYER_ALIGNED:-false} - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 - ETHREX_RISC0_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk From 2b50b236877cd3745b1f9c2a00481b21af583fe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 25 Sep 2025 15:58:18 -0300 Subject: [PATCH 179/236] fix en vvars --- crates/l2/docker-compose.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/l2/docker-compose.yaml b/crates/l2/docker-compose.yaml index 30765f48873..1372658c488 100644 --- a/crates/l2/docker-compose.yaml +++ b/crates/l2/docker-compose.yaml @@ -35,11 +35,11 @@ services: - ETHREX_DEPLOYER_PRIVATE_KEYS_FILE_PATH=${DOCKER_ETHREX_WORKDIR}/fixtures/keys/private_keys_l1.txt - ETHREX_DEPLOYER_DEPLOY_RICH=${ETHREX_DEPLOYER_DEPLOY_RICH:-true} - ETHREX_L2_RISC0=${ETHREX_L2_RISC0:-false} - - ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS=${ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS?} + - ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS - ETHREX_L2_SP1=${ETHREX_L2_SP1:-false} - - ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS=${ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS?} + - ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS - ETHREX_L2_TDX=${ETHREX_L2_TDX:-false} - - ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS=${ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS?} + - ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS - ETHREX_DEPLOYER_ALIGNED=${ETHREX_DEPLOYER_ALIGNED:-false} - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 - ETHREX_RISC0_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk From 968ede2ac0974862756616b7dec067f5a50e5294 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 8 Oct 2025 18:06:34 -0300 Subject: [PATCH 180/236] remove requires --- cmd/ethrex/l2/deployer.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/cmd/ethrex/l2/deployer.rs b/cmd/ethrex/l2/deployer.rs index 738e50f57f8..527cf9e4d66 100644 --- a/cmd/ethrex/l2/deployer.rs +++ b/cmd/ethrex/l2/deployer.rs @@ -207,7 +207,6 @@ pub struct DeployerOptions { value_name = "BOOLEAN", env = "ETHREX_L2_TDX", help_heading = "Deployer options", - requires = "tdx_verifier_address", help = "If true, L2 will require TDX proofs to validate batch proofs and settle state." )] pub tdx: bool, @@ -225,7 +224,6 @@ pub struct DeployerOptions { value_name = "BOOLEAN", env = "ETHREX_L2_ALIGNED", help_heading = "Deployer options", - requires = "aligned_aggregator_address", help = "If true, L2 will verify proofs using Aligned Layer instead of smart contract verifiers." )] pub aligned: bool, From 6f3b141d7d634d9770f80a7efac0259d6318d33c Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Thu, 9 Oct 2025 17:20:10 -0300 Subject: [PATCH 181/236] Fix elf and vk paths --- crates/l2/common/src/prover.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index 02a12f7a1b0..f1ec8a3ee61 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -69,12 +69,12 @@ impl ProverType { let path = match self { // for risc0, Aligned requires the image id Self::RISC0 => format!( - "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-vk", + "{}/../prover/src/guest_program/src/risc0/out/riscv32im-risc0-vk", env!("CARGO_MANIFEST_DIR") ), // for sp1, Aligned requires the ELF file Self::SP1 => format!( - "{}/../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-elf", + "{}/../prover/src/guest_program/src/sp1/out/riscv32im-succinct-zkvm-elf", env!("CARGO_MANIFEST_DIR") ), // other types are not supported by Aligned @@ -89,17 +89,17 @@ impl ProverType { pub fn vk(&self, aligned: bool) -> std::io::Result>> { let path = match &self { Self::RISC0 => format!( - "{}/../prover/zkvm/interface/risc0/out/riscv32im-risc0-vk", + "{}/../prover/src/guest_program/src/risc0/out/riscv32im-risc0-vk", env!("CARGO_MANIFEST_DIR") ), // Aligned requires the vk's 32 bytes hash, while the L1 verifier requires // the hash as a bn254 F_r element. Self::SP1 if aligned => format!( - "{}/../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk-u32", + "{}/../prover/src/guest_program/src/sp1/out/riscv32im-succinct-zkvm-vk-u32", env!("CARGO_MANIFEST_DIR") ), Self::SP1 if !aligned => format!( - "{}/../prover/zkvm/interface/sp1/out/riscv32im-succinct-zkvm-vk-bn254", + "{}/../prover/src/guest_program/src/sp1/out/riscv32im-succinct-zkvm-vk-bn254", env!("CARGO_MANIFEST_DIR") ), // other types don't have a verification key From da269298b4e03561f1a63894ed5c63fbad1b0290 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Mon, 13 Oct 2025 16:26:05 -0300 Subject: [PATCH 182/236] Fix vk read not in hex --- cmd/ethrex/l2/deployer.rs | 10 +++++----- crates/l2/common/src/prover.rs | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cmd/ethrex/l2/deployer.rs b/cmd/ethrex/l2/deployer.rs index 527cf9e4d66..09e62f754bf 100644 --- a/cmd/ethrex/l2/deployer.rs +++ b/cmd/ethrex/l2/deployer.rs @@ -727,18 +727,18 @@ fn get_vk(prover_type: ProverType, opts: &DeployerOptions) -> Result Result { let string = std::fs::read_to_string(path)?; - let trimmed = string.trim_start_matches("0x"); + let trimmed = string.trim_start_matches("0x").trim(); let decoded = hex::decode(trimmed) .map_err(|_| DeployerError::InternalError("failed to decode vk".to_string()))?; Ok(Bytes::from(decoded)) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index f1ec8a3ee61..940fd0714b2 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -1,5 +1,5 @@ use serde::{Deserialize, Serialize}; -use std::fmt::{Debug, Display}; +use std::{fmt::{Debug, Display}, path::PathBuf}; use crate::calldata::Value; @@ -86,7 +86,7 @@ impl ProverType { /// Gets the verification key or image id for this prover backend, used for /// proof verification. Aligned Layer uses a different vk in SP1's case. - pub fn vk(&self, aligned: bool) -> std::io::Result>> { + pub fn vk_path(&self, aligned: bool) -> std::io::Result> { let path = match &self { Self::RISC0 => format!( "{}/../prover/src/guest_program/src/risc0/out/riscv32im-risc0-vk", @@ -106,7 +106,7 @@ impl ProverType { _ => return Ok(None), }; let path = std::fs::canonicalize(path)?; - std::fs::read(path).map(Some) + Ok(Some(path)) } } From 2c85f6efda2a66a4bdc4a1a454343894aadea69b Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Mon, 13 Oct 2025 16:58:35 -0300 Subject: [PATCH 183/236] Fix verify public data --- crates/l2/contracts/src/l1/OnChainProposer.sol | 2 +- crates/l2/contracts/src/l1/based/OnChainProposer.sol | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index 6ea50076ce3..5a0c791ce5c 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -434,7 +434,7 @@ contract OnChainProposer is // Verify public data for the batch string memory reason = _verifyPublicData( batchNumber, - publicInputsList[i][8:] + publicInputsList[i] ); if (bytes(reason).length != 0) { revert( diff --git a/crates/l2/contracts/src/l1/based/OnChainProposer.sol b/crates/l2/contracts/src/l1/based/OnChainProposer.sol index 380700ec215..5f0d94944d4 100644 --- a/crates/l2/contracts/src/l1/based/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/based/OnChainProposer.sol @@ -448,7 +448,7 @@ contract OnChainProposer is // Verify public data for the batch string memory reason = _verifyPublicData( batchNumber, - publicInputsList[i][8:] + publicInputsList[i] ); if (bytes(reason).length != 0) { revert( @@ -489,7 +489,7 @@ contract OnChainProposer is uint256 batchNumber, bytes calldata publicData ) internal view returns (string memory) { - if (publicData.length != 224) { + if (publicData.length != 256) { return "invalid public data length"; } bytes32 initialStateRoot = bytes32(publicData[0:32]); From 27f75b932b54cde3780050fd09774576be219822 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Mon, 13 Oct 2025 17:05:57 -0300 Subject: [PATCH 184/236] Fix steps --- docs/l2/architecture/aligned_mode.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/l2/architecture/aligned_mode.md b/docs/l2/architecture/aligned_mode.md index 09dde9d3e6b..6466d7b8918 100644 --- a/docs/l2/architecture/aligned_mode.md +++ b/docs/l2/architecture/aligned_mode.md @@ -139,6 +139,8 @@ You can also decrease the seconds per slot in `aligned_layer/network_params.rs`: seconds_per_slot: 4 ``` +Change the `ethereum_genesis_generator_params` to `ethpandaops/ethereum-genesis-generator:5.0.8` + 3. Make sure you have the latest version of [kurtosis](https://github.com/kurtosis-tech/kurtosis) installed and start the ethereum-package: ``` @@ -146,7 +148,7 @@ cd aligned_layer make ethereum_package_start ``` -To stop it run `make ethereum_package_rm` +If you need to stop it run `make ethereum_package_rm` 4. Start the batcher: @@ -179,18 +181,21 @@ cd ethrex/crates/l2 COMPILE_CONTRACTS=true \ ETHREX_L2_ALIGNED=true \ ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=0xFD471836031dc5108809D173A067e8486B9047A3 \ -ETHREX_L2_SP1=true \ # optional -ETHREX_L2_RISC0=true \ # optional +ETHREX_L2_SP1=true \ +ETHREX_L2_RISC0=true \ make deploy-l1 ``` +Both `ETHREX_L2_SP1` and `ETHREX_L2_RISC0` are optional + > [!NOTE] > This command requires the COMPILE_CONTRACTS env variable to be set, as the deployer needs the SDK to embed the proxy bytecode. You will see that some deposits fail with the following error: ``` -2025-06-18T19:19:24.066126Z WARN ethrex_l2_l1_deployer: Failed to make deposits: Deployer EthClient error: eth_estimateGas request error: execution reverted: CommonBridge: amount to deposit is zero: CommonBridge: amount to deposit is zero +2025-10-13T19:44:51.600047Z ERROR ethrex::l2::deployer: Failed to deposit address=0x0002869e27c6faee08cca6b765a726e7a076ee0f value_to_deposit=0 +2025-10-13T19:44:51.600114Z WARN ethrex::l2::deployer: Failed to make deposits: Deployer EthClient error: eth_sendRawTransaction request error: insufficient funds for gas * price + value: have 0 want 249957710190063 ``` This is because not all the accounts are pre-funded from the genesis. @@ -213,7 +218,7 @@ ETHREX_ALIGNED_MODE=true \ ETHREX_ALIGNED_BEACON_URL=http://127.0.0.1:58801 \ ETHREX_ALIGNED_NETWORK=devnet \ ETHREX_PROOF_COORDINATOR_DEV_MODE=false \ -make init-l2-no-metrics +make init-l2 ``` Suggestion: @@ -226,7 +231,7 @@ When running the integration test, consider increasing the `--committer.commit-t 4. Start prover(s) in different terminals: ```bash cd ethrex/crates/l2 -make init-prover- # optional: GPU=true +make init-prover- GPU=true # The GPU flag is optional ``` ### Aggregate proofs: From 3b95954f90396857efc17db7cfd0bb3d90e74e94 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Mon, 13 Oct 2025 18:01:59 -0300 Subject: [PATCH 185/236] Change precompute to 0 --- crates/common/crypto/kzg.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/common/crypto/kzg.rs b/crates/common/crypto/kzg.rs index 5f87483c2d9..968b64e9e82 100644 --- a/crates/common/crypto/kzg.rs +++ b/crates/common/crypto/kzg.rs @@ -46,7 +46,7 @@ pub fn verify_cell_kzg_proof_batch( ))); #[cfg(feature = "c-kzg")] { - let c_kzg_settings = c_kzg::ethereum_kzg_settings(8); + let c_kzg_settings = c_kzg::ethereum_kzg_settings(0); let mut cells = Vec::new(); for blob in blobs { cells.extend(c_kzg_settings.compute_cells(&(*blob).into())?.into_iter()); @@ -90,7 +90,7 @@ pub fn verify_blob_kzg_proof( #[cfg(feature = "c-kzg")] { c_kzg::KzgSettings::verify_blob_kzg_proof( - c_kzg::ethereum_kzg_settings(8), + c_kzg::ethereum_kzg_settings(0), &blob.into(), &commitment.into(), &proof.into(), @@ -120,7 +120,7 @@ pub fn verify_kzg_proof( #[cfg(feature = "c-kzg")] { c_kzg::KzgSettings::verify_kzg_proof( - c_kzg::ethereum_kzg_settings(8), + c_kzg::ethereum_kzg_settings(0), &commitment_bytes.into(), &z.into(), &y.into(), @@ -135,11 +135,11 @@ pub fn blob_to_kzg_commitment_and_proof(blob: &Blob) -> Result<(Commitment, Proo let blob: c_kzg::Blob = (*blob).into(); let commitment = - c_kzg::KzgSettings::blob_to_kzg_commitment(c_kzg::ethereum_kzg_settings(8), &blob)?; + c_kzg::KzgSettings::blob_to_kzg_commitment(c_kzg::ethereum_kzg_settings(0), &blob)?; let commitment_bytes = commitment.to_bytes(); let proof = c_kzg::KzgSettings::compute_blob_kzg_proof( - c_kzg::ethereum_kzg_settings(8), + c_kzg::ethereum_kzg_settings(0), &blob, &commitment_bytes, )?; From 7372805dcf7f1526f5b67fda4a3116efc44b97b5 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Mon, 13 Oct 2025 18:46:35 -0300 Subject: [PATCH 186/236] Fix risc0 image id reading hex --- crates/l2/common/Cargo.toml | 1 + crates/l2/common/src/prover.rs | 38 ++++++++++++------- .../src/guest_program/src/risc0/Cargo.lock | 1 + 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/crates/l2/common/Cargo.toml b/crates/l2/common/Cargo.toml index c8d0a4ada79..0ed5d6652cf 100644 --- a/crates/l2/common/Cargo.toml +++ b/crates/l2/common/Cargo.toml @@ -18,6 +18,7 @@ serde.workspace = true lambdaworks-crypto.workspace = true sha3.workspace = true secp256k1.workspace = true +hex.workspace = true [lints.clippy] unwrap_used = "deny" diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index 940fd0714b2..13d27f40344 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -65,23 +65,33 @@ impl ProverType { /// Fills the "vm_program_code" field of an AlignedVerificationData struct, /// used for sending a proof to Aligned Layer. - pub fn aligned_vm_program_code(&self) -> std::io::Result>> { - let path = match self { - // for risc0, Aligned requires the image id - Self::RISC0 => format!( - "{}/../prover/src/guest_program/src/risc0/out/riscv32im-risc0-vk", - env!("CARGO_MANIFEST_DIR") - ), + pub fn aligned_vm_program_code(&self) -> std::io::Result>> { + match self { + Self::RISC0 => { + let path = format!( + "{}/../prover/src/guest_program/src/risc0/out/riscv32im-risc0-vk", + env!("CARGO_MANIFEST_DIR") + ); + let path = std::fs::canonicalize(path)?; + let string = std::fs::read_to_string(path)?; + let trimmed = string.trim_start_matches("0x").trim(); + let decoded = hex::decode(trimmed).map_err(|e| { + std::io::Error::new(std::io::ErrorKind::InvalidData, format!("{e}")) + })?; + Ok(Some(decoded)) + }, // for sp1, Aligned requires the ELF file - Self::SP1 => format!( - "{}/../prover/src/guest_program/src/sp1/out/riscv32im-succinct-zkvm-elf", - env!("CARGO_MANIFEST_DIR") - ), + Self::SP1 => { + let path = format!( + "{}/../prover/src/guest_program/src/sp1/out/riscv32im-succinct-zkvm-elf", + env!("CARGO_MANIFEST_DIR")); + let path = std::fs::canonicalize(path)?; + std::fs::read(path).map(Some) + } + , // other types are not supported by Aligned _ => return Ok(None), - }; - let path = std::fs::canonicalize(path)?; - std::fs::read(path).map(Some) + } } /// Gets the verification key or image id for this prover backend, used for diff --git a/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock b/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock index 81225bf52eb..f26712b3a8b 100644 --- a/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock @@ -1248,6 +1248,7 @@ dependencies = [ "ethrex-storage", "ethrex-trie", "ethrex-vm", + "hex", "lambdaworks-crypto", "secp256k1", "serde", From 10fb413ead325b7996d35df0a50865c64c309390 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Tue, 14 Oct 2025 15:24:52 -0300 Subject: [PATCH 187/236] Update aligned to 0.19.1 --- Cargo.lock | 13 ++++++++++++- Cargo.toml | 2 +- .../l2/prover/src/guest_program/src/sp1/Cargo.lock | 1 + crates/l2/sequencer/l1_proof_sender.rs | 6 +----- docs/l2/architecture/aligned_mode.md | 4 +--- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d21cf57ae4f..82bae925fd5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -99,7 +99,7 @@ dependencies = [ [[package]] name = "aligned-sdk" version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.17.0#86cfefdd98568b9d440c1d1cab38e7dce53b08c3" +source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.19.1#030e1285889e144b53275cf3922a851e046e5916" dependencies = [ "ciborium", "dialoguer", @@ -110,6 +110,7 @@ dependencies = [ "log", "reqwest 0.12.23", "serde", + "serde_bytes", "serde_json", "serde_repr", "sha3", @@ -3737,6 +3738,7 @@ dependencies = [ "ethrex-storage 0.1.0", "ethrex-trie 0.1.0", "ethrex-vm", + "hex", "lambdaworks-crypto 0.11.0", "secp256k1", "serde", @@ -9925,6 +9927,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_bytes" +version = "0.11.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" +dependencies = [ + "serde", +] + [[package]] name = "serde_derive" version = "1.0.219" diff --git a/Cargo.toml b/Cargo.toml index 0fe5d7c0463..295a820d090 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -115,7 +115,7 @@ url = { version = "2.5.4", features = ["serde"] } kzg-rs = "0.2.6" libsql = "0.9.10" futures = "0.3.31" -aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag = "v0.17.0" } +aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag = "v0.19.1" } spawned-concurrency = "0.4.0" spawned-rt = "0.4.0" lambdaworks-crypto = "0.11.0" diff --git a/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock b/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock index 729ab505e2b..8dffc52a099 100644 --- a/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock @@ -1011,6 +1011,7 @@ dependencies = [ "ethrex-storage", "ethrex-trie", "ethrex-vm", + "hex", "lambdaworks-crypto", "secp256k1", "serde", diff --git a/crates/l2/sequencer/l1_proof_sender.rs b/crates/l2/sequencer/l1_proof_sender.rs index 8aa26a63c5f..5d7124ea9cf 100644 --- a/crates/l2/sequencer/l1_proof_sender.rs +++ b/crates/l2/sequencer/l1_proof_sender.rs @@ -252,11 +252,7 @@ impl L1ProofSender { ))); }; - let pub_input = match prover_type { - ProverType::RISC0 => Some(batch_proof.public_values()), - ProverType::SP1 => None, // SP1 pub inputs are embedded in the proof - _ => continue, - }; + let pub_input = Some(batch_proof.public_values()); let verification_data = VerificationData { proving_system, diff --git a/docs/l2/architecture/aligned_mode.md b/docs/l2/architecture/aligned_mode.md index 6466d7b8918..df5e5b8a0e4 100644 --- a/docs/l2/architecture/aligned_mode.md +++ b/docs/l2/architecture/aligned_mode.md @@ -139,8 +139,6 @@ You can also decrease the seconds per slot in `aligned_layer/network_params.rs`: seconds_per_slot: 4 ``` -Change the `ethereum_genesis_generator_params` to `ethpandaops/ethereum-genesis-generator:5.0.8` - 3. Make sure you have the latest version of [kurtosis](https://github.com/kurtosis-tech/kurtosis) installed and start the ethereum-package: ``` @@ -180,7 +178,7 @@ let ws_stream_future = cd ethrex/crates/l2 COMPILE_CONTRACTS=true \ ETHREX_L2_ALIGNED=true \ -ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=0xFD471836031dc5108809D173A067e8486B9047A3 \ +ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547cc \ ETHREX_L2_SP1=true \ ETHREX_L2_RISC0=true \ make deploy-l1 From b6e27dbcd6bbb9480528c3075596398692e6a696 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Tue, 14 Oct 2025 17:51:41 -0300 Subject: [PATCH 188/236] Add risc0 feature to kzg --- crates/common/Cargo.toml | 1 + crates/common/crypto/Cargo.toml | 1 + crates/common/crypto/kzg.rs | 19 ++++++++++++++----- .../src/guest_program/src/risc0/Cargo.toml | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index b5113a8e8e4..1f27c458738 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -40,6 +40,7 @@ hex-literal.workspace = true [features] default = [] c-kzg = ["dep:c-kzg", "ethrex-crypto/c-kzg"] +risc0 = ["ethrex-crypto/risc0"] [lib] path = "./common.rs" diff --git a/crates/common/crypto/Cargo.toml b/crates/common/crypto/Cargo.toml index d1de2c2e5be..7975810c9bb 100644 --- a/crates/common/crypto/Cargo.toml +++ b/crates/common/crypto/Cargo.toml @@ -18,3 +18,4 @@ thiserror.workspace = true [features] default = [] c-kzg = ["dep:c-kzg"] +risc0 = [] diff --git a/crates/common/crypto/kzg.rs b/crates/common/crypto/kzg.rs index 968b64e9e82..8ed0245b46d 100644 --- a/crates/common/crypto/kzg.rs +++ b/crates/common/crypto/kzg.rs @@ -10,6 +10,15 @@ pub const FIELD_ELEMENTS_PER_EXT_BLOB: usize = 2 * FIELD_ELEMENTS_PER_BLOB; pub const FIELD_ELEMENTS_PER_CELL: usize = 64; pub const BYTES_PER_CELL: usize = FIELD_ELEMENTS_PER_CELL * BYTES_PER_FIELD_ELEMENT; pub const CELLS_PER_EXT_BLOB: usize = FIELD_ELEMENTS_PER_EXT_BLOB / FIELD_ELEMENTS_PER_CELL; + +// https://github.com/ethereum/c-kzg-4844?tab=readme-ov-file#precompute +// For Risc0 we need this parameter to be 0. +// For the rest we keep the value 8 due to optimizations. +#[cfg(not(feature = "risc0"))] +pub const KZG_PRECOMPUTE: u64 = 8; +#[cfg(feature = "risc0")] +pub const KZG_PRECOMPUTE: u64 = 0; + type Bytes48 = [u8; 48]; type Blob = [u8; BYTES_PER_BLOB]; type Commitment = Bytes48; @@ -46,7 +55,7 @@ pub fn verify_cell_kzg_proof_batch( ))); #[cfg(feature = "c-kzg")] { - let c_kzg_settings = c_kzg::ethereum_kzg_settings(0); + let c_kzg_settings = c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE); let mut cells = Vec::new(); for blob in blobs { cells.extend(c_kzg_settings.compute_cells(&(*blob).into())?.into_iter()); @@ -90,7 +99,7 @@ pub fn verify_blob_kzg_proof( #[cfg(feature = "c-kzg")] { c_kzg::KzgSettings::verify_blob_kzg_proof( - c_kzg::ethereum_kzg_settings(0), + c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE), &blob.into(), &commitment.into(), &proof.into(), @@ -120,7 +129,7 @@ pub fn verify_kzg_proof( #[cfg(feature = "c-kzg")] { c_kzg::KzgSettings::verify_kzg_proof( - c_kzg::ethereum_kzg_settings(0), + c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE), &commitment_bytes.into(), &z.into(), &y.into(), @@ -135,11 +144,11 @@ pub fn blob_to_kzg_commitment_and_proof(blob: &Blob) -> Result<(Commitment, Proo let blob: c_kzg::Blob = (*blob).into(); let commitment = - c_kzg::KzgSettings::blob_to_kzg_commitment(c_kzg::ethereum_kzg_settings(0), &blob)?; + c_kzg::KzgSettings::blob_to_kzg_commitment(c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE), &blob)?; let commitment_bytes = commitment.to_bytes(); let proof = c_kzg::KzgSettings::compute_blob_kzg_proof( - c_kzg::ethereum_kzg_settings(0), + c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE), &blob, &commitment_bytes, )?; diff --git a/crates/l2/prover/src/guest_program/src/risc0/Cargo.toml b/crates/l2/prover/src/guest_program/src/risc0/Cargo.toml index f4b0cea8cee..1878b885654 100644 --- a/crates/l2/prover/src/guest_program/src/risc0/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/risc0/Cargo.toml @@ -20,7 +20,7 @@ guest_program = { path = "../../", default-features = false, features = [ rkyv = { version = "0.8.10", features = ["unaligned"] } -ethrex-common = { path = "../../../../../../common", default-features = false } +ethrex-common = { path = "../../../../../../common", default-features = false, features = ["risc0"] } ethrex-storage = { path = "../../../../../../storage", default-features = false } ethrex-rlp = { path = "../../../../../../common/rlp" } ethrex-vm = { path = "../../../../../../vm", default-features = false, features = [ From a4eb29271302031ed124ea0e1540c2a92d09b30d Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Tue, 14 Oct 2025 18:10:45 -0300 Subject: [PATCH 189/236] Update aligned version --- docs/l2/architecture/aligned_mode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/l2/architecture/aligned_mode.md b/docs/l2/architecture/aligned_mode.md index df5e5b8a0e4..509aa72ba43 100644 --- a/docs/l2/architecture/aligned_mode.md +++ b/docs/l2/architecture/aligned_mode.md @@ -115,7 +115,7 @@ make init-prover- # optional: GPU=true ```bash git clone git@github.com:yetanotherco/aligned_layer.git cd aligned_layer -git checkout tags/v0.17.0 +git checkout tags/v0.19.1 ``` 2. Edit the `aligned_layer/network_params.rs` file to send some funds to the `committer` and `integration_test` addresses: From a3a725723b30588b8ba31210fc282f6a0a878c67 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Tue, 14 Oct 2025 18:53:30 -0300 Subject: [PATCH 190/236] Fix lint --- Cargo.lock | 181 +++++++++++++++++---------------- crates/l2/common/src/prover.rs | 2 +- 2 files changed, 92 insertions(+), 91 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 638eab7df8f..6d7f474b7ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -99,7 +99,7 @@ dependencies = [ [[package]] name = "aligned-sdk" version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.16.1#d6c5ffd0b7e4952724c4ee167187bf0945238d0d" +source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.19.1#030e1285889e144b53275cf3922a851e046e5916" dependencies = [ "ciborium", "dialoguer", @@ -110,6 +110,7 @@ dependencies = [ "log", "reqwest 0.12.23", "serde", + "serde_bytes", "serde_json", "serde_repr", "sha3", @@ -135,7 +136,7 @@ dependencies = [ "const-hex", "derive_more 2.0.1", "hashbrown 0.16.0", - "indexmap 2.11.4", + "indexmap 2.11.1", "itoa", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "paste", @@ -794,9 +795,9 @@ dependencies = [ [[package]] name = "axum" -version = "0.8.6" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" +checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" dependencies = [ "axum-core 0.5.5", "bytes", @@ -813,7 +814,8 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "serde_core", + "rustversion", + "serde", "serde_json", "serde_path_to_error", "serde_urlencoded", @@ -884,11 +886,11 @@ dependencies = [ [[package]] name = "axum-extra" -version = "0.10.3" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9963ff19f40c6102c76756ef0a46004c0d58957d87259fc9208ff8441c12ab96" +checksum = "45bf463831f5131b7d3c756525b305d40f1185b688565648a92e1392ca35713d" dependencies = [ - "axum 0.8.6", + "axum 0.8.4", "axum-core 0.5.5", "bytes", "futures-util", @@ -899,10 +901,10 @@ dependencies = [ "mime", "pin-project-lite", "rustversion", - "serde_core", + "serde", + "tower 0.5.2", "tower-layer", "tower-service", - "tracing", ] [[package]] @@ -1389,11 +1391,11 @@ dependencies = [ [[package]] name = "camino" -version = "1.2.1" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +checksum = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5" dependencies = [ - "serde_core", + "serde", ] [[package]] @@ -1413,7 +1415,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_json", "thiserror 1.0.69", @@ -1427,7 +1429,7 @@ checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" dependencies = [ "camino", "cargo-platform", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_json", "thiserror 2.0.17", @@ -1471,7 +1473,7 @@ checksum = "3fce8dd7fcfcbf3a0a87d8f515194b49d6135acab73e18bd380d1d93bb1a15eb" dependencies = [ "clap 4.5.48", "heck 0.4.1", - "indexmap 2.11.4", + "indexmap 2.11.1", "log", "proc-macro2", "quote", @@ -1860,14 +1862,15 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.16.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6407bff74dea37e0fa3dc1c1c974e5d46405f0c987bf9997a0762adce71eda6" +checksum = "dccd746bf9b1038c0507b7cec21eb2b11222db96a2902c96e8c185d6d20fb9c4" dependencies = [ "cfg-if 1.0.3", "cpufeatures", + "hex", "proptest", - "serde_core", + "serde", ] [[package]] @@ -2534,12 +2537,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.4" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", - "serde_core", + "serde", ] [[package]] @@ -3131,12 +3134,11 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.8" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "259d404d09818dec19332e31d94558aeb442fea04c817006456c24b5460bbd4b" +checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" dependencies = [ "serde", - "serde_core", "typeid", ] @@ -3379,7 +3381,7 @@ dependencies = [ "chrono", "ethers-core", "reqwest 0.11.27", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_json", "thiserror 1.0.69", @@ -3489,7 +3491,7 @@ dependencies = [ "path-slash", "rayon", "regex", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_json", "solang-parser", @@ -3672,7 +3674,7 @@ version = "0.1.0" dependencies = [ "aligned-sdk", "anyhow", - "axum 0.8.6", + "axum 0.8.4", "bincode", "bytes", "chrono", @@ -3735,6 +3737,7 @@ dependencies = [ "ethrex-storage 0.1.0", "ethrex-trie 0.1.0", "ethrex-vm", + "hex", "lambdaworks-crypto 0.11.0", "secp256k1", "serde", @@ -3746,7 +3749,7 @@ dependencies = [ name = "ethrex-l2-rpc" version = "0.1.0" dependencies = [ - "axum 0.8.6", + "axum 0.8.4", "bytes", "ethereum-types 0.15.1", "ethrex-blockchain", @@ -3808,7 +3811,7 @@ dependencies = [ name = "ethrex-metrics" version = "0.1.0" dependencies = [ - "axum 0.8.6", + "axum 0.8.4", "ethrex-common 0.1.0", "prometheus 0.13.4", "serde", @@ -3929,7 +3932,7 @@ dependencies = [ name = "ethrex-rpc" version = "0.1.0" dependencies = [ - "axum 0.8.6", + "axum 0.8.4", "axum-extra", "bytes", "envy", @@ -4627,7 +4630,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" dependencies = [ "fallible-iterator 0.3.0", - "indexmap 2.11.4", + "indexmap 2.11.1", "stable_deref_trait", ] @@ -4796,7 +4799,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.11.4", + "indexmap 2.11.1", "slab", "tokio", "tokio-util", @@ -4815,7 +4818,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.11.4", + "indexmap 2.11.1", "slab", "tokio", "tokio-util", @@ -5009,6 +5012,9 @@ name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] [[package]] name = "hex-conservative" @@ -5561,14 +5567,13 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown 0.15.5", "serde", - "serde_core", ] [[package]] @@ -5602,7 +5607,7 @@ dependencies = [ "crossbeam-utils 0.8.21", "dashmap 6.1.0", "env_logger 0.11.8", - "indexmap 2.11.4", + "indexmap 2.11.1", "itoa", "log", "num-format", @@ -6097,7 +6102,7 @@ dependencies = [ "bitflags 2.9.4", "derive_more 1.0.0", "impls", - "indexmap 2.11.4", + "indexmap 2.11.1", "libc", "mdbx-sys", "parking_lot 0.12.5", @@ -6218,7 +6223,7 @@ dependencies = [ "bitflags 2.9.4", "cc", "fallible-iterator 0.3.0", - "indexmap 2.11.4", + "indexmap 2.11.1", "log", "memchr", "phf", @@ -7736,7 +7741,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.11.4", + "indexmap 2.11.1", ] [[package]] @@ -7746,7 +7751,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset 0.5.7", - "indexmap 2.11.4", + "indexmap 2.11.1", ] [[package]] @@ -8054,7 +8059,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.23.7", + "toml_edit 0.23.4", ] [[package]] @@ -8846,7 +8851,7 @@ dependencies = [ "risc0-zkp", "risc0-zkvm-platform", "ruint", - "semver 1.0.27", + "semver 1.0.26", "serde", "tracing", ] @@ -8868,7 +8873,7 @@ dependencies = [ "risc0-zkp", "risc0-zkvm-platform", "rzup", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_json", "stability", @@ -9167,7 +9172,7 @@ dependencies = [ "rrs-lib", "rustc-demangle", "rzup", - "semver 1.0.27", + "semver 1.0.26", "serde", "sha2", "stability", @@ -9201,7 +9206,7 @@ dependencies = [ "bytecheck", "bytes", "hashbrown 0.15.5", - "indexmap 2.11.4", + "indexmap 2.11.1", "munge", "ptr_meta", "rancor", @@ -9337,14 +9342,13 @@ dependencies = [ [[package]] name = "ruint" -version = "1.17.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a68df0380e5c9d20ce49534f292a36a7514ae21350726efe1865bdb1fa91d278" +checksum = "9ecb38f82477f20c5c3d62ef52d7c4e536e38ea9b73fb570a20c5cae0e14bcf6" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", "ark-ff 0.4.2", - "ark-ff 0.5.0", "borsh", "bytes", "fastrlp 0.3.1", @@ -9359,7 +9363,7 @@ dependencies = [ "rand 0.9.2", "rlp 0.5.2", "ruint-macro", - "serde_core", + "serde", "valuable", "zeroize", ] @@ -9430,7 +9434,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.27", + "semver 1.0.26", ] [[package]] @@ -9626,7 +9630,7 @@ checksum = "5d2aed296f203fa64bcb4b52069356dd86d6ec578593985b919b6995bee1f0ae" dependencies = [ "hex", "rsa", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_with", "sha2", @@ -9877,12 +9881,11 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.27" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ "serde", - "serde_core", ] [[package]] @@ -9908,11 +9911,10 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ - "serde_core", "serde_derive", ] @@ -9926,19 +9928,19 @@ dependencies = [ ] [[package]] -name = "serde_core" -version = "1.0.228" +name = "serde_bytes" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" dependencies = [ - "serde_derive", + "serde", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -9947,27 +9949,25 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.11.1", "itoa", "memchr", "ryu", "serde", - "serde_core", ] [[package]] name = "serde_path_to_error" -version = "0.1.20" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" dependencies = [ "itoa", "serde", - "serde_core", ] [[package]] @@ -10004,18 +10004,19 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.15.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" +checksum = "c522100790450cf78eeac1507263d0a350d4d5b30df0c8e1fe051a10c22b376e" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.4", + "indexmap 2.11.1", "schemars 0.9.0", "schemars 1.0.4", - "serde_core", + "serde", + "serde_derive", "serde_json", "serde_with_macros", "time", @@ -10023,9 +10024,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.15.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" +checksum = "327ada00f7d64abaac1e55a6911e90cf665aa051b9a561c7006c157f4633135e" dependencies = [ "darling 0.21.3", "proc-macro2", @@ -10935,7 +10936,7 @@ dependencies = [ "hex", "once_cell", "reqwest 0.11.27", - "semver 1.0.27", + "semver 1.0.26", "serde", "serde_json", "sha2", @@ -11501,11 +11502,11 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.3" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" dependencies = [ - "serde_core", + "serde", ] [[package]] @@ -11514,7 +11515,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.11.1", "toml_datetime 0.6.11", "winnow 0.5.40", ] @@ -11525,7 +11526,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.11.1", "serde", "serde_spanned", "toml_datetime 0.6.11", @@ -11535,12 +11536,12 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.7" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +checksum = "7211ff1b8f0d3adae1663b7da9ffe396eabe1ca25f0b0bee42b0da29a9ddce93" dependencies = [ - "indexmap 2.11.4", - "toml_datetime 0.7.3", + "indexmap 2.11.1", + "toml_datetime 0.7.0", "toml_parser", "winnow 0.7.13", ] @@ -13127,7 +13128,7 @@ dependencies = [ "crossbeam-utils 0.8.21", "displaydoc", "flate2", - "indexmap 2.11.4", + "indexmap 2.11.1", "memchr", "thiserror 2.0.17", "zopfli", diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index 13d27f40344..e0b2a665014 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -90,7 +90,7 @@ impl ProverType { } , // other types are not supported by Aligned - _ => return Ok(None), + _ => Ok(None), } } From 4c529d9b855d9c81564d094875376e1ae8bf624e Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Tue, 14 Oct 2025 19:04:38 -0300 Subject: [PATCH 191/236] Format code --- cmd/ethrex/l2/deployer.rs | 6 +++++- crates/common/crypto/kzg.rs | 6 ++++-- crates/l2/common/src/prover.rs | 7 +++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/cmd/ethrex/l2/deployer.rs b/cmd/ethrex/l2/deployer.rs index a3923aeaf6c..3b036060350 100644 --- a/cmd/ethrex/l2/deployer.rs +++ b/cmd/ethrex/l2/deployer.rs @@ -758,7 +758,11 @@ fn get_vk(prover_type: ProverType, opts: &DeployerOptions) -> Result Result<(Commitment, Proof), KzgError> { let blob: c_kzg::Blob = (*blob).into(); - let commitment = - c_kzg::KzgSettings::blob_to_kzg_commitment(c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE), &blob)?; + let commitment = c_kzg::KzgSettings::blob_to_kzg_commitment( + c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE), + &blob, + )?; let commitment_bytes = commitment.to_bytes(); let proof = c_kzg::KzgSettings::compute_blob_kzg_proof( diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index e0b2a665014..06306cbf440 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -1,5 +1,8 @@ use serde::{Deserialize, Serialize}; -use std::{fmt::{Debug, Display}, path::PathBuf}; +use std::{ + fmt::{Debug, Display}, + path::PathBuf, +}; use crate::calldata::Value; @@ -65,7 +68,7 @@ impl ProverType { /// Fills the "vm_program_code" field of an AlignedVerificationData struct, /// used for sending a proof to Aligned Layer. - pub fn aligned_vm_program_code(&self) -> std::io::Result>> { + pub fn aligned_vm_program_code(&self) -> std::io::Result>> { match self { Self::RISC0 => { let path = format!( From 9ebad9efea49ef1b7a6b40d3e0fe7d73507d6089 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 10:33:24 -0300 Subject: [PATCH 192/236] Fix prover workflow --- .github/workflows/main_prover.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index 28ab1a5cd54..7e3f740333d 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -93,8 +93,6 @@ jobs: cd crates/l2 RUST_LOG=info,ethrex_prover_lib=debug make init-prover-sp1 GPU=true & docker logs --follow ethrex_l2 & DOCKER_LOGS_PID=$! - cd crates/l2 - RUST_LOG=info,ethrex_prover_lib=debug make init-prover-sp1 GPU=true & PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex -s SIGINT kill $DOCKER_LOGS_PID || true From 157b1a6dd7380dedfe62b303bc3ed38f39c0b369 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 10:53:11 -0300 Subject: [PATCH 193/236] Revert "Fix prover workflow" This reverts commit 9ebad9efea49ef1b7a6b40d3e0fe7d73507d6089. --- .github/workflows/main_prover.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index 7e3f740333d..28ab1a5cd54 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -93,6 +93,8 @@ jobs: cd crates/l2 RUST_LOG=info,ethrex_prover_lib=debug make init-prover-sp1 GPU=true & docker logs --follow ethrex_l2 & DOCKER_LOGS_PID=$! + cd crates/l2 + RUST_LOG=info,ethrex_prover_lib=debug make init-prover-sp1 GPU=true & PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex -s SIGINT kill $DOCKER_LOGS_PID || true From 4def56be2d051435b9ae987ce26f3f88c965ab94 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 10:53:28 -0300 Subject: [PATCH 194/236] Change prover workflow --- .github/workflows/main_prover.yaml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index 28ab1a5cd54..ef841e4f61e 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -58,7 +58,12 @@ jobs: run: | cargo test l2 --no-run --release - - name: Start L1 & Deploy contracts + - name: Start L1 + run: | + cd crates/l2 + docker compose up --detach ethrex_l1 + + - name: Deploy contracts # if: ${{ always() && github.event_name == 'merge_group' }} run: | touch cmd/.env @@ -66,7 +71,7 @@ jobs: DOCKER_ETHREX_WORKDIR=/usr/local/bin \ ETHREX_DEPLOYER_DEPLOY_RICH=true \ ETHREX_L2_SP1=true \ - docker compose up --build contract_deployer + docker compose up contract_deployer - name: Ensure admin permissions in _work run: sudo chown admin:admin -R /home/admin/actions-runner/_work/ From d8858bdf8fe93a263a027c97ca56158ce24d7dfa Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 11:16:46 -0300 Subject: [PATCH 195/236] Fix service nix --- crates/l2/tee/quote-gen/service.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/tee/quote-gen/service.nix b/crates/l2/tee/quote-gen/service.nix index dd8f7e518be..6dfefcbe78a 100644 --- a/crates/l2/tee/quote-gen/service.nix +++ b/crates/l2/tee/quote-gen/service.nix @@ -39,7 +39,7 @@ let lockFile = ./Cargo.lock; outputHashes = { "bls12_381-0.8.0" = "sha256-8/pXRA7hVAPeMKCZ+PRPfQfxqstw5Ob4MJNp85pv5WQ="; - "aligned-sdk-0.1.0" = "sha256-EuiuuYiyjZ+M+wS5Ayqqcvw0CfUBOhFrLrbdD4SYFM0="; + "aligned-sdk-0.1.0" = "sha256-42Fl2ta3bq0OeyiPu/vW5ohCqpOASTWBSDrS4S03UYc="; "lambdaworks-crypto-0.12.0" = "sha256-4vgW/O85zVLhhFrcZUwcPjavy/rRWB8LGTabAkPNrDw="; }; }; From cfee01a6a3d518a25b43befbcaecbc483d14ef0e Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 11:18:47 -0300 Subject: [PATCH 196/236] Fix serde version --- Cargo.toml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 327a87cc15b..1356d592bee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -82,9 +82,7 @@ tracing-subscriber = { version = "0.3.0", features = ["env-filter"] } async-trait = "0.1.88" ethereum-types = { version = "0.15.1", features = ["serialize"] } -serde = { version = "<1.0.220", features = ["derive"] } -# serde >=1.0.220 contains a breaking change for alloy-consensus -# https://github.com/alloy-rs/alloy/issues/2876 +serde = { version = "1.0.203", features = ["derive"] } serde_with = "3.11.0" serde_json = "1.0.117" bytes = { version = "1.6.0", features = ["serde"] } From a606248e2bb2d3ffd10e0470ebaa94064aeaeb30 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 11:32:51 -0300 Subject: [PATCH 197/236] Update nix lock --- crates/l2/tee/quote-gen/Cargo.lock | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/l2/tee/quote-gen/Cargo.lock b/crates/l2/tee/quote-gen/Cargo.lock index 75340d807c7..ab7c518e853 100644 --- a/crates/l2/tee/quote-gen/Cargo.lock +++ b/crates/l2/tee/quote-gen/Cargo.lock @@ -73,7 +73,7 @@ dependencies = [ [[package]] name = "aligned-sdk" version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.17.0#86cfefdd98568b9d440c1d1cab38e7dce53b08c3" +source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.19.1#030e1285889e144b53275cf3922a851e046e5916" dependencies = [ "ciborium", "dialoguer", @@ -84,6 +84,7 @@ dependencies = [ "log", "reqwest 0.12.23", "serde", + "serde_bytes", "serde_json", "serde_repr", "sha3", @@ -2219,6 +2220,7 @@ dependencies = [ "ethrex-storage", "ethrex-trie", "ethrex-vm", + "hex", "lambdaworks-crypto 0.11.0", "secp256k1", "serde", @@ -5529,6 +5531,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_bytes" +version = "0.11.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" +dependencies = [ + "serde", +] + [[package]] name = "serde_derive" version = "1.0.219" From 467d137e460826d0c21adc70733231818ff95ff8 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 11:36:24 -0300 Subject: [PATCH 198/236] Fix locks --- Cargo.lock | 59 +++-- crates/l2/tee/quote-gen/Cargo.lock | 361 +++++++++++++++++------------ 2 files changed, 246 insertions(+), 174 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3f2abcaa40c..8c462c862af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -136,7 +136,7 @@ dependencies = [ "const-hex", "derive_more 2.0.1", "hashbrown 0.16.0", - "indexmap 2.11.1", + "indexmap 2.11.4", "itoa", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "paste", @@ -1473,7 +1473,7 @@ checksum = "3fce8dd7fcfcbf3a0a87d8f515194b49d6135acab73e18bd380d1d93bb1a15eb" dependencies = [ "clap 4.5.48", "heck 0.4.1", - "indexmap 2.11.1", + "indexmap 2.11.4", "log", "proc-macro2", "quote", @@ -4631,7 +4631,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" dependencies = [ "fallible-iterator 0.3.0", - "indexmap 2.11.1", + "indexmap 2.11.4", "stable_deref_trait", ] @@ -4800,7 +4800,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.11.1", + "indexmap 2.11.4", "slab", "tokio", "tokio-util", @@ -4819,7 +4819,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.11.1", + "indexmap 2.11.4", "slab", "tokio", "tokio-util", @@ -5568,13 +5568,14 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.1" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "serde", + "serde_core", ] [[package]] @@ -5608,7 +5609,7 @@ dependencies = [ "crossbeam-utils 0.8.21", "dashmap 6.1.0", "env_logger 0.11.8", - "indexmap 2.11.1", + "indexmap 2.11.4", "itoa", "log", "num-format", @@ -6103,7 +6104,7 @@ dependencies = [ "bitflags 2.9.4", "derive_more 1.0.0", "impls", - "indexmap 2.11.1", + "indexmap 2.11.4", "libc", "mdbx-sys", "parking_lot 0.12.5", @@ -6224,7 +6225,7 @@ dependencies = [ "bitflags 2.9.4", "cc", "fallible-iterator 0.3.0", - "indexmap 2.11.1", + "indexmap 2.11.4", "log", "memchr", "phf", @@ -7742,7 +7743,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.11.1", + "indexmap 2.11.4", ] [[package]] @@ -7752,7 +7753,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset 0.5.7", - "indexmap 2.11.1", + "indexmap 2.11.4", ] [[package]] @@ -9207,7 +9208,7 @@ dependencies = [ "bytecheck", "bytes", "hashbrown 0.15.5", - "indexmap 2.11.1", + "indexmap 2.11.4", "munge", "ptr_meta", "rancor", @@ -9912,10 +9913,11 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -9937,11 +9939,20 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -9954,7 +9965,7 @@ version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ - "indexmap 2.11.1", + "indexmap 2.11.4", "itoa", "memchr", "ryu", @@ -10013,7 +10024,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.1", + "indexmap 2.11.4", "schemars 0.9.0", "schemars 1.0.4", "serde", @@ -11516,7 +11527,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.11.1", + "indexmap 2.11.4", "toml_datetime 0.6.11", "winnow 0.5.40", ] @@ -11527,7 +11538,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.1", + "indexmap 2.11.4", "serde", "serde_spanned", "toml_datetime 0.6.11", @@ -11541,7 +11552,7 @@ version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7211ff1b8f0d3adae1663b7da9ffe396eabe1ca25f0b0bee42b0da29a9ddce93" dependencies = [ - "indexmap 2.11.1", + "indexmap 2.11.4", "toml_datetime 0.7.0", "toml_parser", "winnow 0.7.13", @@ -13129,7 +13140,7 @@ dependencies = [ "crossbeam-utils 0.8.21", "displaydoc", "flate2", - "indexmap 2.11.1", + "indexmap 2.11.4", "memchr", "thiserror 2.0.17", "zopfli", diff --git a/crates/l2/tee/quote-gen/Cargo.lock b/crates/l2/tee/quote-gen/Cargo.lock index 861d7b25f2c..95838915941 100644 --- a/crates/l2/tee/quote-gen/Cargo.lock +++ b/crates/l2/tee/quote-gen/Cargo.lock @@ -83,7 +83,7 @@ dependencies = [ "lambdaworks-crypto 0.12.0", "log", "reqwest 0.12.23", - "serde", + "serde 1.0.228", "serde_bytes", "serde_json", "serde_repr", @@ -222,7 +222,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -235,7 +235,7 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -274,7 +274,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -316,7 +316,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -344,7 +344,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -376,7 +376,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rustversion", - "serde", + "serde 1.0.228", "serde_json", "serde_path_to_error", "serde_urlencoded", @@ -425,7 +425,7 @@ dependencies = [ "mime", "pin-project-lite", "rustversion", - "serde", + "serde 1.0.228", "tower", "tower-layer", "tower-service", @@ -488,7 +488,7 @@ version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "serde", + "serde 1.0.228", ] [[package]] @@ -649,7 +649,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efb7846e0cb180355c2dec69e721edafa36919850f1a9f52ffba4ebc0393cb71" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -671,7 +671,7 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" dependencies = [ - "serde", + "serde 1.0.228", ] [[package]] @@ -706,7 +706,7 @@ dependencies = [ "hex", "libc", "once_cell", - "serde", + "serde 1.0.228", ] [[package]] @@ -715,7 +715,7 @@ version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5" dependencies = [ - "serde", + "serde 1.0.228", ] [[package]] @@ -724,7 +724,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" dependencies = [ - "serde", + "serde 1.0.228", ] [[package]] @@ -736,7 +736,7 @@ dependencies = [ "camino", "cargo-platform", "semver", - "serde", + "serde 1.0.228", "serde_json", "thiserror 1.0.69", ] @@ -789,7 +789,7 @@ dependencies = [ "iana-time-zone", "js-sys", "num-traits", - "serde", + "serde 1.0.228", "wasm-bindgen", "windows-link 0.2.0", ] @@ -802,7 +802,7 @@ checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" dependencies = [ "ciborium-io", "ciborium-ll", - "serde", + "serde 1.0.228", ] [[package]] @@ -861,7 +861,7 @@ checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" dependencies = [ "heck", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -882,7 +882,7 @@ dependencies = [ "digest", "hmac", "k256", - "serde", + "serde 1.0.228", "sha2", "thiserror 1.0.69", ] @@ -916,8 +916,8 @@ dependencies = [ "generic-array", "hex", "ripemd", - "serde", - "serde_derive", + "serde 1.0.228", + "serde_derive 1.0.228", "sha2", "sha3", "thiserror 1.0.69", @@ -1008,7 +1008,7 @@ dependencies = [ "cpufeatures", "hex", "proptest", - "serde", + "serde 1.0.228", ] [[package]] @@ -1033,8 +1033,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" dependencies = [ "proc-macro2", - "quote", - "unicode-xid", + "quote 1.0.40", + "unicode-xid 0.2.6", ] [[package]] @@ -1329,7 +1329,7 @@ dependencies = [ "fnv", "ident_case", "proc-macro2", - "quote", + "quote 1.0.40", "strsim", "syn 2.0.106", ] @@ -1341,7 +1341,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -1381,7 +1381,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", - "serde", + "serde 1.0.228", ] [[package]] @@ -1401,7 +1401,7 @@ checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ "darling", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -1441,9 +1441,9 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "convert_case 0.6.0", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", - "unicode-xid", + "unicode-xid 0.2.6", ] [[package]] @@ -1454,7 +1454,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "convert_case 0.7.1", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -1541,7 +1541,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -1588,7 +1588,7 @@ checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" dependencies = [ "enum-ordinalize", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -1655,7 +1655,7 @@ dependencies = [ "log", "rand 0.8.5", "rlp 0.5.2", - "serde", + "serde 1.0.228", "sha3", "zeroize", ] @@ -1676,7 +1676,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -1696,7 +1696,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f47e0157f2cb54f5ae1bd371b30a2ae4311e1c028f575cd4e81de7353215965" dependencies = [ - "serde", + "serde 1.0.228", ] [[package]] @@ -1735,7 +1735,7 @@ dependencies = [ "pbkdf2 0.11.0", "rand 0.8.5", "scrypt", - "serde", + "serde 1.0.228", "serde_json", "sha2", "sha3", @@ -1753,7 +1753,7 @@ dependencies = [ "hex", "once_cell", "regex", - "serde", + "serde 1.0.228", "serde_json", "sha3", "thiserror 1.0.69", @@ -1842,7 +1842,7 @@ checksum = "5495afd16b4faa556c3bba1f21b98b4983e53c1755022377051a975c3b021759" dependencies = [ "ethers-core", "once_cell", - "serde", + "serde 1.0.228", "serde_json", ] @@ -1860,7 +1860,7 @@ dependencies = [ "futures-util", "once_cell", "pin-project", - "serde", + "serde 1.0.228", "serde_json", "thiserror 1.0.69", ] @@ -1879,10 +1879,10 @@ dependencies = [ "eyre", "prettyplease", "proc-macro2", - "quote", + "quote 1.0.40", "regex", "reqwest 0.11.27", - "serde", + "serde 1.0.228", "serde_json", "syn 2.0.106", "toml", @@ -1900,7 +1900,7 @@ dependencies = [ "ethers-contract-abigen", "ethers-core", "proc-macro2", - "quote", + "quote 1.0.40", "serde_json", "syn 2.0.106", ] @@ -1925,14 +1925,14 @@ dependencies = [ "open-fastrlp", "rand 0.8.5", "rlp 0.5.2", - "serde", + "serde 1.0.228", "serde_json", "strum 0.26.3", "syn 2.0.106", "tempfile", "thiserror 1.0.69", "tiny-keccak", - "unicode-xid", + "unicode-xid 0.2.6", ] [[package]] @@ -1945,7 +1945,7 @@ dependencies = [ "ethers-core", "reqwest 0.11.27", "semver", - "serde", + "serde 1.0.228", "serde_json", "thiserror 1.0.69", "tracing", @@ -1969,7 +1969,7 @@ dependencies = [ "futures-util", "instant", "reqwest 0.11.27", - "serde", + "serde 1.0.228", "serde_json", "thiserror 1.0.69", "tokio", @@ -2002,7 +2002,7 @@ dependencies = [ "once_cell", "pin-project", "reqwest 0.11.27", - "serde", + "serde 1.0.228", "serde_json", "thiserror 1.0.69", "tokio", @@ -2055,7 +2055,7 @@ dependencies = [ "rayon", "regex", "semver", - "serde", + "serde 1.0.228", "serde_json", "solang-parser", "svm-rs", @@ -2103,7 +2103,7 @@ dependencies = [ "rayon", "rkyv", "secp256k1", - "serde", + "serde 1.0.228", "serde_json", "sha2", "sha3", @@ -2120,7 +2120,7 @@ dependencies = [ "ethrex-common", "ethrex-p2p", "hex", - "serde", + "serde 1.0.228", "serde_json", ] @@ -2144,7 +2144,7 @@ dependencies = [ "hex", "jsonwebtoken 9.3.1", "reqwest 0.12.23", - "serde", + "serde 1.0.228", "serde_json", "sha2", "thiserror 2.0.16", @@ -2193,7 +2193,7 @@ dependencies = [ "ratatui", "reqwest 0.12.23", "secp256k1", - "serde", + "serde 1.0.228", "serde_json", "serde_with", "spawned-concurrency", @@ -2223,7 +2223,7 @@ dependencies = [ "hex", "lambdaworks-crypto 0.11.0", "secp256k1", - "serde", + "serde 1.0.228", "sha3", "thiserror 2.0.16", ] @@ -2247,7 +2247,7 @@ dependencies = [ "reqwest 0.12.23", "rustc-hex", "secp256k1", - "serde", + "serde 1.0.228", "serde_json", "thiserror 2.0.16", "tokio", @@ -2278,7 +2278,7 @@ dependencies = [ "p256", "ripemd", "secp256k1", - "serde", + "serde 1.0.228", "serde_json", "sha2", "sha3", @@ -2292,7 +2292,7 @@ name = "ethrex-metrics" version = "0.1.0" dependencies = [ "ethrex-common", - "serde", + "serde 1.0.228", "serde_json", "thiserror 2.0.16", "tracing-subscriber", @@ -2325,7 +2325,7 @@ dependencies = [ "rand 0.8.5", "rayon", "secp256k1", - "serde", + "serde 1.0.228", "serde_json", "sha2", "sha3", @@ -2373,7 +2373,7 @@ dependencies = [ "rand 0.8.5", "reqwest 0.12.23", "secp256k1", - "serde", + "serde 1.0.228", "serde_json", "sha2", "sha3", @@ -2404,7 +2404,7 @@ dependencies = [ "lazy_static", "reqwest 0.12.23", "secp256k1", - "serde", + "serde 1.0.228", "serde_json", "thiserror 2.0.16", "tokio", @@ -2432,7 +2432,7 @@ dependencies = [ "ethrex-rlp", "ethrex-trie", "hex", - "serde", + "serde 1.0.228", "serde_json", "sha3", "thiserror 2.0.16", @@ -2477,7 +2477,7 @@ dependencies = [ "ethrex-threadpool", "hex", "lazy_static", - "serde", + "serde 1.0.228", "serde_json", "sha3", "smallvec", @@ -2501,7 +2501,7 @@ dependencies = [ "hex", "lazy_static", "rkyv", - "serde", + "serde 1.0.228", "sha3", "thiserror 2.0.16", "tracing", @@ -2558,7 +2558,7 @@ dependencies = [ "num-integer", "num-traits", "proc-macro2", - "quote", + "quote 1.0.40", "syn 1.0.109", ] @@ -2719,7 +2719,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -2877,7 +2877,7 @@ dependencies = [ "ethrex-vm", "hex", "rkyv", - "serde", + "serde 1.0.228", "serde_json", "serde_with", "thiserror 2.0.16", @@ -3392,7 +3392,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" dependencies = [ - "serde", + "serde 1.0.228", ] [[package]] @@ -3401,7 +3401,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a143eada6a1ec4aefa5049037a26a6d597bfd64f8c026d07b77133e02b7dd0b" dependencies = [ - "serde", + "serde 1.0.228", ] [[package]] @@ -3411,7 +3411,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -3429,7 +3429,7 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", - "serde", + "serde 1.0.228", ] [[package]] @@ -3440,7 +3440,7 @@ checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", "hashbrown 0.15.5", - "serde", + "serde 1.0.228", "serde_core", ] @@ -3468,7 +3468,7 @@ dependencies = [ "darling", "indoc", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -3505,7 +3505,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" dependencies = [ "memchr", - "serde", + "serde 1.0.228", ] [[package]] @@ -3585,7 +3585,7 @@ dependencies = [ "base64 0.21.7", "pem 1.1.1", "ring 0.16.20", - "serde", + "serde 1.0.228", "serde_json", "simple_asn1", ] @@ -3600,7 +3600,7 @@ dependencies = [ "js-sys", "pem 3.0.5", "ring 0.17.14", - "serde", + "serde 1.0.228", "serde_json", "simple_asn1", ] @@ -3659,7 +3659,7 @@ dependencies = [ "string_cache", "term", "tiny-keccak", - "unicode-xid", + "unicode-xid 0.2.6", "walkdir", ] @@ -3679,7 +3679,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ec4b462bbec171e1af821f3d9fff72e17de93b3d1022f29aa70fec8262c1cee" dependencies = [ "lambdaworks-math 0.11.0", - "serde", + "serde 1.0.228", "sha2", "sha3", ] @@ -3692,7 +3692,7 @@ dependencies = [ "lambdaworks-math 0.12.0", "rand 0.8.5", "rand_chacha 0.3.1", - "serde", + "serde 1.0.228", "sha2", "sha3", ] @@ -3704,7 +3704,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "708d148956bcdc21ae5c432b4e20bbaa26fd68d5376a3a6c461f41095abea0ba" dependencies = [ "rayon", - "serde", + "serde 1.0.228", "serde_json", ] @@ -3715,7 +3715,7 @@ source = "git+https://github.com/lambdaclass/lambdaworks.git?rev=5f8f2cfcc8a1a22 dependencies = [ "getrandom 0.2.16", "rand 0.8.5", - "serde", + "serde 1.0.228", "serde_json", ] @@ -3973,7 +3973,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2e3795a5d2da581a8b252fec6022eee01aea10161a4d1bf237d4cbe47f7e988" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -4082,7 +4082,7 @@ checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ "proc-macro-crate", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -4137,7 +4137,7 @@ checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" dependencies = [ "bytes", "proc-macro2", - "quote", + "quote 1.0.40", "syn 1.0.109", ] @@ -4163,7 +4163,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -4221,7 +4221,7 @@ dependencies = [ "p3-poseidon2", "p3-symmetric", "rand 0.8.5", - "serde", + "serde 1.0.228", ] [[package]] @@ -4248,7 +4248,7 @@ dependencies = [ "num-traits", "p3-util", "rand 0.8.5", - "serde", + "serde 1.0.228", ] [[package]] @@ -4262,7 +4262,7 @@ dependencies = [ "p3-maybe-rayon", "p3-util", "rand 0.8.5", - "serde", + "serde 1.0.228", "tracing", ] @@ -4298,7 +4298,7 @@ dependencies = [ "p3-mds", "p3-symmetric", "rand 0.8.5", - "serde", + "serde 1.0.228", ] [[package]] @@ -4309,7 +4309,7 @@ checksum = "edb439bea1d822623b41ff4b51e3309e80d13cadf8b86d16ffd5e6efb9fdc360" dependencies = [ "itertools 0.12.1", "p3-field", - "serde", + "serde 1.0.228", ] [[package]] @@ -4318,7 +4318,7 @@ version = "0.2.3-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c2c2010678b9332b563eaa38364915b585c1a94b5ca61e2c7541c087ddda5c" dependencies = [ - "serde", + "serde 1.0.228", ] [[package]] @@ -4343,7 +4343,7 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec-derive", "rustversion", - "serde", + "serde 1.0.228", ] [[package]] @@ -4354,7 +4354,7 @@ checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ "proc-macro-crate", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -4442,7 +4442,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" dependencies = [ "base64 0.22.1", - "serde", + "serde 1.0.228", ] [[package]] @@ -4509,7 +4509,7 @@ dependencies = [ "phf_generator", "phf_shared", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -4538,7 +4538,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -4731,10 +4731,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca414edb151b4c8d125c12566ab0d74dc9cdba36fb80eb7b848c15f495fd32d1" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] +[[package]] +name = "quote" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" + [[package]] name = "quote" version = "1.0.40" @@ -4760,7 +4766,7 @@ dependencies = [ "guest_program", "hex", "secp256k1", - "serde", + "serde 0.9.15", "serde_json", "tokio", "zerocopy", @@ -4932,7 +4938,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -5005,7 +5011,7 @@ dependencies = [ "pin-project-lite", "rustls 0.21.12", "rustls-pemfile", - "serde", + "serde 1.0.228", "serde_json", "serde_urlencoded", "sync_wrapper 0.1.2", @@ -5046,7 +5052,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rustls-pki-types", - "serde", + "serde 1.0.228", "serde_json", "serde_urlencoded", "sync_wrapper 1.0.2", @@ -5135,7 +5141,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4270433626cffc9c4c1d3707dd681f2a2718d3d7b09ad754bec137acecda8d22" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -5167,7 +5173,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 1.0.109", ] @@ -5193,7 +5199,7 @@ dependencies = [ "glob", "proc-macro-crate", "proc-macro2", - "quote", + "quote 1.0.40", "regex", "relative-path", "rustc_version", @@ -5372,7 +5378,7 @@ checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ "proc-macro-crate", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -5393,7 +5399,7 @@ checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" dependencies = [ "dyn-clone", "ref-cast", - "serde", + "serde 1.0.228", "serde_json", ] @@ -5405,7 +5411,7 @@ checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" dependencies = [ "dyn-clone", "ref-cast", - "serde", + "serde 1.0.228", "serde_json", ] @@ -5500,7 +5506,7 @@ version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ - "serde", + "serde 1.0.228", ] [[package]] @@ -5515,6 +5521,15 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" +[[package]] +name = "serde" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b623917345a631dc9608d5194cc206b3fe6c3554cd1c75b937e55e285254af" +dependencies = [ + "serde_derive 0.9.15", +] + [[package]] name = "serde" version = "1.0.228" @@ -5522,7 +5537,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", - "serde_derive", + "serde_derive 1.0.228", ] [[package]] @@ -5531,7 +5546,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94a16b99c5ea4fe3daccd14853ad260ec00ea043b2708d1fd1da3106dcd8d9df" dependencies = [ - "serde", + "serde 1.0.228", ] [[package]] @@ -5540,7 +5555,16 @@ version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" dependencies = [ - "serde", + "serde 1.0.228", +] + +[[package]] +name = "serde_codegen_internals" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc888bd283bd2420b16ad0d860e35ad8acb21941180a83a189bb2046f9d00400" +dependencies = [ + "syn 0.11.11", ] [[package]] @@ -5549,7 +5573,18 @@ version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ - "serde_derive", + "serde_derive 1.0.228", +] + +[[package]] +name = "serde_derive" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978fd866f4d4872084a81ccc35e275158351d3b9fe620074e7d7504b816b74ba" +dependencies = [ + "quote 0.3.15", + "serde_codegen_internals", + "syn 0.11.11", ] [[package]] @@ -5559,7 +5594,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -5572,7 +5607,7 @@ dependencies = [ "itoa", "memchr", "ryu", - "serde", + "serde 1.0.228", ] [[package]] @@ -5582,7 +5617,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" dependencies = [ "itoa", - "serde", + "serde 1.0.228", ] [[package]] @@ -5592,7 +5627,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -5602,7 +5637,7 @@ version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ - "serde", + "serde 1.0.228", ] [[package]] @@ -5614,7 +5649,7 @@ dependencies = [ "form_urlencoded", "itoa", "ryu", - "serde", + "serde 1.0.228", ] [[package]] @@ -5630,8 +5665,8 @@ dependencies = [ "indexmap 2.11.4", "schemars 0.9.0", "schemars 1.0.4", - "serde", - "serde_derive", + "serde 1.0.228", + "serde_derive 1.0.228", "serde_json", "serde_with_macros", "time", @@ -5645,7 +5680,7 @@ checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" dependencies = [ "darling", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -5815,7 +5850,7 @@ dependencies = [ "lalrpop-util", "phf", "thiserror 1.0.69", - "unicode-xid", + "unicode-xid 0.2.6", ] [[package]] @@ -5825,7 +5860,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e1fe81b6f87134f9170cb642f948ae41e0ee1cd3785e0cb665add5b67106d1a" dependencies = [ "bincode", - "serde", + "serde 1.0.228", "sp1-primitives", ] @@ -5845,7 +5880,7 @@ dependencies = [ "p3-field", "p3-poseidon2", "p3-symmetric", - "serde", + "serde 1.0.228", "sha2", ] @@ -5969,7 +6004,7 @@ checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ "heck", "proc-macro2", - "quote", + "quote 1.0.40", "rustversion", "syn 2.0.106", ] @@ -5982,7 +6017,7 @@ checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ "heck", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -6004,7 +6039,7 @@ dependencies = [ "once_cell", "reqwest 0.11.27", "semver", - "serde", + "serde 1.0.228", "serde_json", "sha2", "thiserror 1.0.69", @@ -6012,6 +6047,17 @@ dependencies = [ "zip", ] +[[package]] +name = "syn" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" +dependencies = [ + "quote 0.3.15", + "synom", + "unicode-xid 0.0.4", +] + [[package]] name = "syn" version = "1.0.109" @@ -6019,7 +6065,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "unicode-ident", ] @@ -6030,7 +6076,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "unicode-ident", ] @@ -6049,6 +6095,15 @@ dependencies = [ "futures-core", ] +[[package]] +name = "synom" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" +dependencies = [ + "unicode-xid 0.0.4", +] + [[package]] name = "synstructure" version = "0.13.2" @@ -6056,7 +6111,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -6166,7 +6221,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -6177,7 +6232,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -6210,7 +6265,7 @@ dependencies = [ "num-conv", "num_threads", "powerfmt", - "serde", + "serde 1.0.228", "time-core", "time-macros", ] @@ -6292,7 +6347,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -6387,7 +6442,7 @@ version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ - "serde", + "serde 1.0.228", "serde_spanned", "toml_datetime", "toml_edit", @@ -6399,7 +6454,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ - "serde", + "serde 1.0.228", ] [[package]] @@ -6409,7 +6464,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap 2.11.4", - "serde", + "serde 1.0.228", "serde_spanned", "toml_datetime", "toml_write", @@ -6487,7 +6542,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -6707,6 +6762,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +[[package]] +name = "unicode-xid" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -6734,7 +6795,7 @@ dependencies = [ "form_urlencoded", "idna", "percent-encoding", - "serde", + "serde 1.0.228", ] [[package]] @@ -6762,7 +6823,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ "getrandom 0.2.16", - "serde", + "serde 1.0.228", ] [[package]] @@ -6888,7 +6949,7 @@ dependencies = [ "bumpalo", "log", "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", "wasm-bindgen-shared", ] @@ -6912,7 +6973,7 @@ version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" dependencies = [ - "quote", + "quote 1.0.40", "wasm-bindgen-macro-support", ] @@ -6923,7 +6984,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", @@ -7015,7 +7076,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -7026,7 +7087,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -7373,7 +7434,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ - "serde", + "serde 1.0.228", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -7386,7 +7447,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", "synstructure", ] @@ -7407,7 +7468,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -7427,7 +7488,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", "synstructure", ] @@ -7448,7 +7509,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] @@ -7481,7 +7542,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", - "quote", + "quote 1.0.40", "syn 2.0.106", ] From 26ed049773d7ad6eac2f15f1628ba56e350c13dc Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 12:51:00 -0300 Subject: [PATCH 199/236] Reapply "Fix prover workflow" This reverts commit 157b1a6dd7380dedfe62b303bc3ed38f39c0b369. --- .github/workflows/main_prover.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index ef841e4f61e..aeb07b54359 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -98,8 +98,6 @@ jobs: cd crates/l2 RUST_LOG=info,ethrex_prover_lib=debug make init-prover-sp1 GPU=true & docker logs --follow ethrex_l2 & DOCKER_LOGS_PID=$! - cd crates/l2 - RUST_LOG=info,ethrex_prover_lib=debug make init-prover-sp1 GPU=true & PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex -s SIGINT kill $DOCKER_LOGS_PID || true From 3950a39098bbec32f48f8c2f3313f9cfea6a8786 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 15:08:43 -0300 Subject: [PATCH 200/236] Change lock --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 31b41f042d1..de9c63a5834 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3811,7 +3811,7 @@ dependencies = [ name = "ethrex-metrics" version = "3.0.0" dependencies = [ - "axum 0.8.6", + "axum 0.8.4", "ethrex-common 3.0.0", "prometheus 0.13.4", "serde", From f4e62a3eaa3b507b30b6e82ffdac544ed3189eba Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 16:59:15 -0300 Subject: [PATCH 201/236] add logs on failure --- .github/workflows/pr-main_l2.yaml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index 648c262a8da..e054e31b748 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -413,7 +413,7 @@ jobs: - name: Start ethrex run: | cd crates/l2 - make init-l2-dev & + make init-l2-dev || tee ethrex.log & - name: Wait for ethrex l2 run: | @@ -430,7 +430,7 @@ jobs: - name: Init prover run: | - target/release/ethrex l2 prover --proof-coordinators http://localhost:3900 & + target/release/ethrex l2 prover --proof-coordinators http://localhost:3900 || tee prover.log & - name: Run test run: | @@ -439,6 +439,18 @@ jobs: PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d \ cargo test l2 --release -- --nocapture --test-threads=1 + - name: Show ethrex logs on failure + if: failure() + run: | + echo "Dumping ethrex logs..." + cat crates/l2/ethrex.log || echo "No logs found" + + - name: Show prover logs on failure + if: failure() + run: | + echo "Dumping prover logs..." + cat prover.log || echo "No logs found" + # The purpose of this job is to add it as a required check in GitHub so that we don't have to add every individual job as a required check all-tests: # "Integration Test" is a required check, don't change the name From 48c5e0f3fd1197571518b050cccab89231274dee Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 17:17:18 -0300 Subject: [PATCH 202/236] add logs --- .github/workflows/pr-main_l2.yaml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index e054e31b748..897b9df6884 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -435,22 +435,12 @@ jobs: - name: Run test run: | cd crates/l2 + tail -n 100 -f /crates/l2/ethrex.log & + tail -n 100 -f prover.log & INTEGRATION_TEST_SKIP_FEE_VAULT_CHECK=true \ PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d \ cargo test l2 --release -- --nocapture --test-threads=1 - - name: Show ethrex logs on failure - if: failure() - run: | - echo "Dumping ethrex logs..." - cat crates/l2/ethrex.log || echo "No logs found" - - - name: Show prover logs on failure - if: failure() - run: | - echo "Dumping prover logs..." - cat prover.log || echo "No logs found" - # The purpose of this job is to add it as a required check in GitHub so that we don't have to add every individual job as a required check all-tests: # "Integration Test" is a required check, don't change the name From 4dfd3730a989ca6ed67686184d3086e14900963f Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 17:30:41 -0300 Subject: [PATCH 203/236] Change how logs appear --- .github/workflows/pr-main_l2.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index 897b9df6884..9934f10b69f 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -413,7 +413,7 @@ jobs: - name: Start ethrex run: | cd crates/l2 - make init-l2-dev || tee ethrex.log & + make init-l2-dev 2>&1 || tee /tmp/ethrex.log & - name: Wait for ethrex l2 run: | @@ -430,13 +430,13 @@ jobs: - name: Init prover run: | - target/release/ethrex l2 prover --proof-coordinators http://localhost:3900 || tee prover.log & + target/release/ethrex l2 prover --proof-coordinators http://localhost:3900 2>&1 || tee /tmp/prover.log & - name: Run test run: | cd crates/l2 - tail -n 100 -f /crates/l2/ethrex.log & - tail -n 100 -f prover.log & + tail -n 100 -f /tmp/ethrex.log & + tail -n 100 -f /tmp/prover.log & INTEGRATION_TEST_SKIP_FEE_VAULT_CHECK=true \ PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d \ cargo test l2 --release -- --nocapture --test-threads=1 From 712623ab97140f8174f30b50ba328bcbdbfe5a2a Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 17:44:06 -0300 Subject: [PATCH 204/236] Fix pipe --- .github/workflows/pr-main_l2.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index 9934f10b69f..0ea0b16c812 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -413,7 +413,7 @@ jobs: - name: Start ethrex run: | cd crates/l2 - make init-l2-dev 2>&1 || tee /tmp/ethrex.log & + make init-l2-dev 2>&1 | tee /tmp/ethrex.log & - name: Wait for ethrex l2 run: | @@ -430,7 +430,7 @@ jobs: - name: Init prover run: | - target/release/ethrex l2 prover --proof-coordinators http://localhost:3900 2>&1 || tee /tmp/prover.log & + target/release/ethrex l2 prover --proof-coordinators http://localhost:3900 2>&1 | tee /tmp/prover.log & - name: Run test run: | From afeb85fb149af91f027227bcee4087a28fb50863 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 18:26:38 -0300 Subject: [PATCH 205/236] Fix compilation --- cmd/ethrex/l2/options.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cmd/ethrex/l2/options.rs b/cmd/ethrex/l2/options.rs index db64b1f1ce2..74a2ecfea11 100644 --- a/cmd/ethrex/l2/options.rs +++ b/cmd/ethrex/l2/options.rs @@ -799,10 +799,6 @@ impl AlignedOptions { .aligned_network .clone() .or(defaults.aligned_network.clone()); - self.aligned_sp1_elf_path = self - .aligned_sp1_elf_path - .clone() - .or(defaults.aligned_sp1_elf_path.clone()); } } From b025118f99149ca9a0a63a7d57a3644edae99a58 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 15 Oct 2025 18:26:48 -0300 Subject: [PATCH 206/236] init l2 dev without monitor --- .github/workflows/pr-main_l2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index 33f292f1f81..6ef1107e5e1 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -414,7 +414,7 @@ jobs: - name: Start ethrex run: | cd crates/l2 - make init-l2-dev 2>&1 | tee /tmp/ethrex.log & + ETHREX_NO_MONITOR=true make init-l2-dev 2>&1 | tee /tmp/ethrex.log & - name: Wait for ethrex l2 run: | From 9f8c8fbd90be28dffab0c954ffe58fc281b865b2 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Thu, 16 Oct 2025 13:59:05 -0300 Subject: [PATCH 207/236] Add envs to workflow --- .github/workflows/pr-main_l2.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index 6ef1107e5e1..d0813636661 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -433,11 +433,17 @@ jobs: run: | target/release/ethrex l2 prover --proof-coordinators http://localhost:3900 2>&1 | tee /tmp/prover.log & + - name: show envs + run: | + cat cmd/.env + cat crates/l2/.env + - name: Run test run: | cd crates/l2 tail -n 100 -f /tmp/ethrex.log & tail -n 100 -f /tmp/prover.log & + export $(shell cat ../../cmd/.env | xargs); \ INTEGRATION_TEST_SKIP_FEE_VAULT_CHECK=true \ PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d \ cargo test l2 --release -- --nocapture --test-threads=1 From 59d2e04acd0d9c177c96dbd8a6a98c72d01b8d8d Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Thu, 16 Oct 2025 14:19:13 -0300 Subject: [PATCH 208/236] Change env --- .github/workflows/pr-main_l2.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index d0813636661..d86fdb50ea4 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -435,7 +435,6 @@ jobs: - name: show envs run: | - cat cmd/.env cat crates/l2/.env - name: Run test @@ -443,7 +442,7 @@ jobs: cd crates/l2 tail -n 100 -f /tmp/ethrex.log & tail -n 100 -f /tmp/prover.log & - export $(shell cat ../../cmd/.env | xargs); \ + export $(shell cat .env | xargs); \ INTEGRATION_TEST_SKIP_FEE_VAULT_CHECK=true \ PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d \ cargo test l2 --release -- --nocapture --test-threads=1 From b565a138e60840c0ea2616ca98f574eb1dfb66a9 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Thu, 16 Oct 2025 14:54:31 -0300 Subject: [PATCH 209/236] Change default on chain proposer addr --- crates/l2/tests/tests.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/l2/tests/tests.rs b/crates/l2/tests/tests.rs index 97b0071e755..b4cc1f87f8f 100644 --- a/crates/l2/tests/tests.rs +++ b/crates/l2/tests/tests.rs @@ -80,10 +80,10 @@ const DEFAULT_PROPOSER_COINBASE_ADDRESS: Address = H160([ 0xad, 0x62, 0x0c, 0x8d, ]); -// 0x44e09413ab37c3dae5663f2fd408e60ac2dbc7e2 +// 0x3e141f8f9f083024c6e1ec3de2509de5da47c354 const DEFAULT_ON_CHAIN_PROPOSER_ADDRESS: Address = H160([ - 0x44, 0xe0, 0x94, 0x13, 0xab, 0x37, 0xc3, 0xda, 0xe5, 0x66, 0x3f, 0x2f, 0xd4, 0x08, 0xe6, 0x0a, - 0xc2, 0xdb, 0xc7, 0xe2, + 0x3e, 0x14, 0x1f, 0x8f, 0x9f, 0x08, 0x30, 0x24, 0xc6, 0xe1, 0xec, 0x3d, 0xe2, 0x50, 0x9d, 0xe5, + 0xda, 0x47, 0xc3, 0x54, ]); // 0x000c0d6b7c4516a5b274c51ea331a9410fe69127 From 8199456471503e1b791dd6e1274746d8798c5274 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Thu, 16 Oct 2025 17:25:11 -0300 Subject: [PATCH 210/236] Fix TDX verifier addr --- crates/l2/sequencer/setup.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/sequencer/setup.rs b/crates/l2/sequencer/setup.rs index c2d197457db..caecd5e9708 100644 --- a/crates/l2/sequencer/setup.rs +++ b/crates/l2/sequencer/setup.rs @@ -95,7 +95,7 @@ async fn get_tdx_address( eth_client: &EthClient, on_chain_proposer_address: Address, ) -> Result { - let calldata = keccak("TDXVERIFIER()")[..4].to_vec(); + let calldata = keccak("TDX_VERIFIER_ADDRESS()")[..4].to_vec(); let response = eth_client .call( @@ -109,7 +109,7 @@ async fn get_tdx_address( Address::from_str(&format!("0x{trimmed_response}")).map_err(|_| { ProofCoordinatorError::InternalError( - "Failed to convert TDXVERIFIER result to address".to_owned(), + "Failed to convert TDX_VERIFIER_ADDRESS result to address".to_owned(), ) }) } From c3f0cf27850f8dddd6a0e93ad49a4549773264a8 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Thu, 16 Oct 2025 17:38:38 -0300 Subject: [PATCH 211/236] Fix makefile --- crates/l2/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/Makefile b/crates/l2/Makefile index 9ad89b065be..c77e7084b1e 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -167,7 +167,7 @@ else endif build-prover-sp1: - cargo build --release --features "$(GPU?),sp1" --manifest-path ../../Cargo.toml --bin ethrex + cargo build --release --features "l2,l2-sql,$(GPU?),sp1" --manifest-path ../../Cargo.toml --bin ethrex build-prover-risc0: cargo build --release --features "l2,l2-sql,$(GPU?),risc0" --manifest-path ../../Cargo.toml --bin ethrex From 2bad1c187869d25fc785a5dc516a1ad57233aa7e Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Thu, 16 Oct 2025 18:54:09 -0300 Subject: [PATCH 212/236] Update Cargo.lock --- Cargo.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 51624d25435..9df986f53b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -823,7 +823,7 @@ dependencies = [ "sha1", "sync_wrapper 1.0.2", "tokio", - "tokio-tungstenite 0.28.0", + "tokio-tungstenite 0.26.2", "tower 0.5.2", "tower-layer", "tower-service", @@ -11474,14 +11474,14 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.28.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" +checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", "tokio", - "tungstenite 0.28.0", + "tungstenite 0.26.2", ] [[package]] @@ -11958,9 +11958,9 @@ dependencies = [ [[package]] name = "tungstenite" -version = "0.28.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" dependencies = [ "bytes", "data-encoding", From aff05ab4b0eb634291e6bdd470fa39d7b3fc0d30 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 17 Oct 2025 11:19:17 -0300 Subject: [PATCH 213/236] Add build --- .github/workflows/main_prover.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index 22211c87703..3e341fbab49 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -71,7 +71,7 @@ jobs: DOCKER_ETHREX_WORKDIR=/usr/local/bin \ ETHREX_DEPLOYER_DEPLOY_RICH=true \ ETHREX_L2_SP1=true \ - docker compose up contract_deployer + docker compose up --build contract_deployer DEPLOYER_EXIT_CODE=$(docker inspect -f '{{.State.ExitCode}}' contract_deployer) if [ "$DEPLOYER_EXIT_CODE" != "0" ]; then From 07d78560de434d49c225cdf57d5d99882db99038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 17 Oct 2025 11:30:52 -0300 Subject: [PATCH 214/236] add argaction::set to boolean args in deployer --- .github/workflows/pr-main_l2.yaml | 7 ++----- cmd/ethrex/l2/deployer.rs | 6 ++++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index 3785cd7949a..dc05a7efe46 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -222,7 +222,7 @@ jobs: - name: Deploy contracts run: | # - # If this job fails due to connection refused to ethrex_l1 consider increasing the failure retries + # If this job fails due to connection refused to ethrex_l1 consider increasing the failure retries # in the contract_deployer service in crates/l2/docker-compose.yaml # touch cmd/.env @@ -238,9 +238,6 @@ jobs: fi DOCKER_ETHREX_WORKDIR=/usr/local/bin \ ETHREX_DEPLOYER_DEPLOY_RICH=true \ - ETHREX_DEPLOYER_PICO_CONTRACT_ADDRESS=0x00000000000000000000000000000000000000aa \ - ETHREX_DEPLOYER_SP1_CONTRACT_ADDRESS=0x00000000000000000000000000000000000000aa \ - ETHREX_DEPLOYER_RISC0_CONTRACT_ADDRESS=0x00000000000000000000000000000000000000aa \ ETHREX_L2_VALIDIUM=${{ matrix.validium }} \ ETHREX_NATIVE_TOKEN_L1_ADDRESS=$ETHREX_NATIVE_TOKEN_L1_ADDRESS \ docker compose up contract_deployer @@ -449,7 +446,7 @@ jobs: - name: Start L1 & Deploy contracts run: | # - # If this job fails due to connection refused to ethrex_l1 consider increasing the failure retries + # If this job fails due to connection refused to ethrex_l1 consider increasing the failure retries # in the contract_deployer service in crates/l2/docker-compose.yaml # touch cmd/.env diff --git a/cmd/ethrex/l2/deployer.rs b/cmd/ethrex/l2/deployer.rs index 3b036060350..82e1dbba728 100644 --- a/cmd/ethrex/l2/deployer.rs +++ b/cmd/ethrex/l2/deployer.rs @@ -173,6 +173,7 @@ pub struct DeployerOptions { default_value = "false", value_name = "BOOLEAN", env = "ETHREX_L2_RISC0", + action = ArgAction::Set, help_heading = "Deployer options", help = "If true, L2 will require Risc0 proofs to validate batch proofs and settle state." )] @@ -189,6 +190,7 @@ pub struct DeployerOptions { default_value = "false", value_name = "BOOLEAN", env = "ETHREX_L2_SP1", + action = ArgAction::Set, help_heading = "Deployer options", help = "If true, L2 will require SP1 proofs to validate batch proofs and settle state." )] @@ -206,6 +208,7 @@ pub struct DeployerOptions { default_value = "false", value_name = "BOOLEAN", env = "ETHREX_L2_TDX", + action = ArgAction::Set, help_heading = "Deployer options", help = "If true, L2 will require TDX proofs to validate batch proofs and settle state." )] @@ -223,6 +226,7 @@ pub struct DeployerOptions { default_value = "false", value_name = "BOOLEAN", env = "ETHREX_L2_ALIGNED", + action = ArgAction::Set, help_heading = "Deployer options", help = "If true, L2 will verify proofs using Aligned Layer instead of smart contract verifiers." )] @@ -249,6 +253,7 @@ pub struct DeployerOptions { default_value = "false", value_name = "BOOLEAN", env = "ETHREX_L2_VALIDIUM", + action = ArgAction::Set, help_heading = "Deployer options", help = "If true, L2 will run on validium mode as opposed to the default rollup mode, meaning it will not publish state diffs to the L1." )] @@ -325,6 +330,7 @@ pub struct DeployerOptions { long, default_value = "false", env = "ETHREX_USE_COMPILED_GENESIS", + action = ArgAction::Set, help_heading = "Deployer options", help = "Genesis data is extracted at compile time, used for development" )] From 06a9be990b475688910547f8897d4ee6f8cff1a9 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 17 Oct 2025 16:09:42 -0300 Subject: [PATCH 215/236] Add use compiled genesis --- crates/l2/docker-compose.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/l2/docker-compose.yaml b/crates/l2/docker-compose.yaml index 380ecd83427..152f9b07126 100644 --- a/crates/l2/docker-compose.yaml +++ b/crates/l2/docker-compose.yaml @@ -58,6 +58,7 @@ services: - ETHREX_L2_VALIDIUM=${ETHREX_L2_VALIDIUM:-false} - ETHREX_NATIVE_TOKEN_L1_ADDRESS=${ETHREX_NATIVE_TOKEN_L1_ADDRESS:-0x0000000000000000000000000000000000000000} - COMPILE_CONTRACTS=true + - ETHREX_USE_COMPILED_GENESIS=true depends_on: - ethrex_l1 entrypoint: From 4fdac3b62974e963f6cd00e07170916124e436ed Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 17 Oct 2025 16:51:46 -0300 Subject: [PATCH 216/236] Change workdir --- crates/l2/docker-compose.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/docker-compose.yaml b/crates/l2/docker-compose.yaml index 152f9b07126..ccea806bec6 100644 --- a/crates/l2/docker-compose.yaml +++ b/crates/l2/docker-compose.yaml @@ -48,8 +48,8 @@ services: - ETHREX_L2_TDX=${ETHREX_L2_TDX:-false} - ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS - ETHREX_DEPLOYER_ALIGNED=${ETHREX_DEPLOYER_ALIGNED:-false} - - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 - - ETHREX_RISC0_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk + - ETHREX_SP1_VERIFICATION_KEY_PATH=${DOCKER_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 + - ETHREX_RISC0_VERIFICATION_KEY_PATH=${DOCKER_ETHREX_WORKDIR}/riscv32im-risc0-vk - ETHREX_TDX_DEV_MODE=${ETHREX_TDX_DEV_MODE:-false} - ETHREX_ON_CHAIN_PROPOSER_OWNER=0x4417092b70a3e5f10dc504d0947dd256b965fc62 - ETHREX_BRIDGE_OWNER=0x4417092b70a3e5f10dc504d0947dd256b965fc62 From 205261792c9e7bf18eaa2dd0ee98384a8a21f0ca Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 17 Oct 2025 17:36:49 -0300 Subject: [PATCH 217/236] Add logs --- cmd/ethrex/l2/deployer.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cmd/ethrex/l2/deployer.rs b/cmd/ethrex/l2/deployer.rs index 82e1dbba728..51d22e9eab5 100644 --- a/cmd/ethrex/l2/deployer.rs +++ b/cmd/ethrex/l2/deployer.rs @@ -530,8 +530,12 @@ pub async fn deploy_l1_contracts( Some(opts.maximum_allowed_max_fee_per_blob_gas), )?; + info!("Deploying contracts"); + let contract_addresses = deploy_contracts(ð_client, &opts, &signer).await?; + info!("Initializing contracts"); + initialize_contracts(contract_addresses, ð_client, &opts, &signer).await?; if opts.deposit_rich { @@ -791,8 +795,10 @@ async fn initialize_contracts( trace!(committer_l1_address = %opts.committer_l1_address, "Using committer L1 address for OnChainProposer initialization"); let genesis: Genesis = if opts.use_compiled_genesis { + info!("Using compiled genesis for OnChainProposer initialization"); serde_json::from_str(LOCAL_DEVNETL2_GENESIS_CONTENTS).map_err(|_| DeployerError::Genesis)? } else { + info!("Using genesis file from path for OnChainProposer initialization"); read_genesis_file( opts.genesis_l2_path .to_str() @@ -800,9 +806,14 @@ async fn initialize_contracts( ) }; + info!("Reading verification keys for OnChainProposer initialization"); + let sp1_vk = get_vk(ProverType::SP1, opts)?; + info!("SP1 VK read"); let risc0_vk = get_vk(ProverType::RISC0, opts)?; + info!("Risc0 vk read"); + let deployer_address = get_address_from_secret_key(&opts.private_key).map_err(DeployerError::InternalError)?; From d991b53da755444bcb6ebff39d304e681c556e7f Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 17 Oct 2025 18:19:26 -0300 Subject: [PATCH 218/236] Add log for path --- cmd/ethrex/l2/deployer.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/ethrex/l2/deployer.rs b/cmd/ethrex/l2/deployer.rs index 51d22e9eab5..595cd477b99 100644 --- a/cmd/ethrex/l2/deployer.rs +++ b/cmd/ethrex/l2/deployer.rs @@ -757,6 +757,7 @@ fn get_vk(prover_type: ProverType, opts: &DeployerOptions) -> Result unimplemented!("{prover_type}"), }; + info!("Reading vk in path {vk_path:?}"); if !required_type { Ok(Bytes::new()) } else if let Some(vk_path) = vk_path { From 2457e850016c7c83b56053e1879eac6603093320 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 17 Oct 2025 19:17:50 -0300 Subject: [PATCH 219/236] Show vks --- .github/workflows/main_prover.yaml | 5 +++++ crates/l2/docker-compose.yaml | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index 3e341fbab49..e7b742e144e 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -53,6 +53,11 @@ jobs: cd crates/l2 make build-prover-sp1 GPU=true + - name: Show vks + # if: ${{ always() && github.event_name == 'merge_group' }} + run: | + ls -lah crates/l2/prover/src/guest_program/src/sp1/out/ + - name: Build test # if: ${{ always() && github.event_name == 'merge_group' }} run: | diff --git a/crates/l2/docker-compose.yaml b/crates/l2/docker-compose.yaml index ccea806bec6..152f9b07126 100644 --- a/crates/l2/docker-compose.yaml +++ b/crates/l2/docker-compose.yaml @@ -48,8 +48,8 @@ services: - ETHREX_L2_TDX=${ETHREX_L2_TDX:-false} - ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS - ETHREX_DEPLOYER_ALIGNED=${ETHREX_DEPLOYER_ALIGNED:-false} - - ETHREX_SP1_VERIFICATION_KEY_PATH=${DOCKER_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 - - ETHREX_RISC0_VERIFICATION_KEY_PATH=${DOCKER_ETHREX_WORKDIR}/riscv32im-risc0-vk + - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 + - ETHREX_RISC0_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk - ETHREX_TDX_DEV_MODE=${ETHREX_TDX_DEV_MODE:-false} - ETHREX_ON_CHAIN_PROPOSER_OWNER=0x4417092b70a3e5f10dc504d0947dd256b965fc62 - ETHREX_BRIDGE_OWNER=0x4417092b70a3e5f10dc504d0947dd256b965fc62 From ece78fae04ab9940da1b77689aa461a35b2ddb29 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 17 Oct 2025 19:25:03 -0300 Subject: [PATCH 220/236] Add ls to dockerfile --- crates/l2/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/docker-compose.yaml b/crates/l2/docker-compose.yaml index 152f9b07126..9e95d9f2643 100644 --- a/crates/l2/docker-compose.yaml +++ b/crates/l2/docker-compose.yaml @@ -64,7 +64,7 @@ services: entrypoint: - /bin/bash - -c - - touch /env/.env; ./ethrex l2 deploy "$0" "$@" + - touch /env/.env; ls -lah .; ./ethrex l2 deploy "$0" "$@" command: > --randomize-contract-deployment From 014d3b6e9fa5ab48e0971d076f16aa12b8cf9744 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 17 Oct 2025 19:33:06 -0300 Subject: [PATCH 221/236] Fix vk doesnt have zkvm --- crates/l2/docker-compose.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/docker-compose.yaml b/crates/l2/docker-compose.yaml index 9e95d9f2643..b2fd31fee57 100644 --- a/crates/l2/docker-compose.yaml +++ b/crates/l2/docker-compose.yaml @@ -28,8 +28,8 @@ services: - ../../fixtures/genesis/l2.json:${DOCKER_ETHREX_WORKDIR}/fixtures/genesis/l2.json - ../../fixtures/keys/private_keys_l1.txt:${DOCKER_ETHREX_WORKDIR}/fixtures/keys/private_keys_l1.txt - ./prover/src/guest_program/src/sp1/out/:${DOCKER_ETHREX_WORKDIR}/sp1_out - - ./prover/src/guest_program/src/sp1/out/riscv32im-succinct-vk-u32:${DOCKER_ETHREX_WORKDIR}/riscv32im-succinct-vk-u32 - - ./prover/src/guest_program/src/sp1/out/riscv32im-succinct-vk-bn254:${DOCKER_ETHREX_WORKDIR}/riscv32im-succinct-vk-bn254 + - ./prover/src/guest_program/src/sp1/out/riscv32im-succinct-zkvm-vk-u32:${DOCKER_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-u32 + - ./prover/src/guest_program/src/sp1/out/riscv32im-succinct-zkvm-vk-bn254:${DOCKER_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 - ./prover/src/guest_program/src/risc0/out/riscv32im-risc0-vk:${DOCKER_ETHREX_WORKDIR}/riscv32im-risc0-vk environment: - ETHREX_ETH_RPC_URL=http://ethrex_l1:8545 From c00e2b9518f57ac1178ebff7ad1b59509783fc67 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 17 Oct 2025 20:31:28 -0300 Subject: [PATCH 222/236] Fix CI workdir --- crates/l2/docker-compose.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/l2/docker-compose.yaml b/crates/l2/docker-compose.yaml index b2fd31fee57..f1e9f65978c 100644 --- a/crates/l2/docker-compose.yaml +++ b/crates/l2/docker-compose.yaml @@ -48,8 +48,8 @@ services: - ETHREX_L2_TDX=${ETHREX_L2_TDX:-false} - ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS - ETHREX_DEPLOYER_ALIGNED=${ETHREX_DEPLOYER_ALIGNED:-false} - - ETHREX_SP1_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 - - ETHREX_RISC0_VERIFICATION_KEY_PATH=${CI_ETHREX_WORKDIR}/riscv32im-risc0-vk + - ETHREX_SP1_VERIFICATION_KEY_PATH=${DOCKER_ETHREX_WORKDIR}/riscv32im-succinct-zkvm-vk-bn254 + - ETHREX_RISC0_VERIFICATION_KEY_PATH=${DOCKER_ETHREX_WORKDIR}/riscv32im-risc0-vk - ETHREX_TDX_DEV_MODE=${ETHREX_TDX_DEV_MODE:-false} - ETHREX_ON_CHAIN_PROPOSER_OWNER=0x4417092b70a3e5f10dc504d0947dd256b965fc62 - ETHREX_BRIDGE_OWNER=0x4417092b70a3e5f10dc504d0947dd256b965fc62 @@ -64,7 +64,7 @@ services: entrypoint: - /bin/bash - -c - - touch /env/.env; ls -lah .; ./ethrex l2 deploy "$0" "$@" + - touch /env/.env; ./ethrex l2 deploy "$0" "$@" command: > --randomize-contract-deployment From 3f3fb5bc0dfaece080c1b156685c0c56beb8ffc6 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 17 Oct 2025 20:39:53 -0300 Subject: [PATCH 223/236] Update Cargo.lock --- .../src/guest_program/src/sp1/Cargo.lock | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock b/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock index 83cb8363707..517239e7f77 100644 --- a/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock @@ -448,6 +448,20 @@ name = "bytemuck" version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] [[package]] name = "byteorder" @@ -1045,6 +1059,7 @@ dependencies = [ "sha2", "sha3", "strum", + "substrate-bn", "thiserror", "walkdir", ] @@ -1726,6 +1741,9 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] [[package]] name = "libc" @@ -2791,6 +2809,22 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "substrate-bn" +version = "0.6.0" +source = "git+https://github.com/sp1-patches/bn?tag=patch-0.6.0-sp1-5.0.0#e0d67f219b2ad6a1887e3275b7ba09ada4b1afb6" +dependencies = [ + "bytemuck", + "byteorder", + "cfg-if", + "crunchy", + "lazy_static", + "num-bigint 0.4.6", + "rand", + "rustc-hex", + "sp1-lib", +] + [[package]] name = "subtle" version = "2.6.1" From ac084dc7c6d1920c3844937f0f2e58f0e9d80a74 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Tue, 21 Oct 2025 12:32:12 -0300 Subject: [PATCH 224/236] Fix genesis --- .github/workflows/main_prover.yaml | 2 +- crates/l2/docker-compose.yaml | 1 - docs/l2/architecture/aligned_mode.md | 10 ++++++- fixtures/genesis/l2.json | 42 +++++++++++++++++----------- 4 files changed, 36 insertions(+), 19 deletions(-) diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index e7b742e144e..81f9a3046a3 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -108,7 +108,7 @@ jobs: # if: ${{ always() && github.event_name == 'merge_group' }} run: | cd crates/l2 - RUST_LOG=info,ethrex_prover_lib=debug make init-prover-sp1 GPU=true & + make init-prover-sp1 GPU=true & docker logs --follow ethrex_l2 & DOCKER_LOGS_PID=$! PROPOSER_COINBASE_ADDRESS=0x0007a881CD95B1484fca47615B64803dad620C8d cargo test l2 --release -- --nocapture --test-threads=1 killall ethrex -s SIGINT diff --git a/crates/l2/docker-compose.yaml b/crates/l2/docker-compose.yaml index f1e9f65978c..5b0ec9fe5e0 100644 --- a/crates/l2/docker-compose.yaml +++ b/crates/l2/docker-compose.yaml @@ -44,7 +44,6 @@ services: - ETHREX_L2_RISC0=${ETHREX_L2_RISC0:-false} - ETHREX_DEPLOYER_RISC0_VERIFIER_ADDRESS - ETHREX_L2_SP1=${ETHREX_L2_SP1:-false} - - ETHREX_DEPLOYER_SP1_VERIFIER_ADDRESS - ETHREX_L2_TDX=${ETHREX_L2_TDX:-false} - ETHREX_DEPLOYER_TDX_VERIFIER_ADDRESS - ETHREX_DEPLOYER_ALIGNED=${ETHREX_DEPLOYER_ALIGNED:-false} diff --git a/docs/l2/architecture/aligned_mode.md b/docs/l2/architecture/aligned_mode.md index 509aa72ba43..a641ca5014a 100644 --- a/docs/l2/architecture/aligned_mode.md +++ b/docs/l2/architecture/aligned_mode.md @@ -139,6 +139,14 @@ You can also decrease the seconds per slot in `aligned_layer/network_params.rs`: seconds_per_slot: 4 ``` +Change `ethereum-genesis-generator` to 5.0.8 + +``` +ethereum_genesis_generator_params: + # The image to use for ethereum genesis generator + image: ethpandaops/ethereum-genesis-generator:5.0.8 +``` + 3. Make sure you have the latest version of [kurtosis](https://github.com/kurtosis-tech/kurtosis) installed and start the ethereum-package: ``` @@ -179,7 +187,7 @@ cd ethrex/crates/l2 COMPILE_CONTRACTS=true \ ETHREX_L2_ALIGNED=true \ ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS=0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547cc \ -ETHREX_L2_SP1=true \ +ETHREX_L2_SP1=true \ ETHREX_L2_RISC0=true \ make deploy-l1 ``` diff --git a/fixtures/genesis/l2.json b/fixtures/genesis/l2.json index 91d36411f65..a235f5e1158 100644 --- a/fixtures/genesis/l2.json +++ b/fixtures/genesis/l2.json @@ -20,19 +20,29 @@ "depositContractAddress": "0x00000000219ab540356cbb839cbe05303d7705fa", "blobSchedule": { "cancun": { - "target": 3, + "baseFeeUpdateFraction": 3338477, "max": 6, - "baseFeeUpdateFraction": 3338477 + "target": 3 }, "prague": { - "target": 6, + "baseFeeUpdateFraction": 5007716, "max": 9, - "baseFeeUpdateFraction": 5007716 + "target": 6 }, "osaka": { - "target": 6, + "baseFeeUpdateFraction": 5007716, "max": 9, - "baseFeeUpdateFraction": 5007716 + "target": 6 + }, + "bpo1": { + "baseFeeUpdateFraction": 8346193, + "max": 15, + "target": 10 + }, + "bpo2": { + "baseFeeUpdateFraction": 11684671, + "max": 21, + "target": 14 } }, "mergeNetsplitBlock": 0, @@ -53,13 +63,13 @@ "nonce": "0x1" }, "0x000000000000000000000000000000000000effe": { - "code": "0x60806040526004361015610013575b61016f565b61001d5f3561003b565b8062cffbe514610036576360206aab0361000e5761013a565b610098565b60e01c90565b60405190565b5f80fd5b5f80fd5b90565b61005b8161004f565b0361006257565b5f80fd5b9050359061007382610052565b565b9060208282031261008e5761008b915f01610066565b90565b61004b565b5f0190565b346100c6576100b06100ab366004610075565b610299565b6100b8610041565b806100c281610093565b0390f35b610047565b5f9103126100d557565b61004b565b1c90565b90565b6100f19060086100f693026100da565b6100de565b90565b9061010491546100e1565b90565b6101125f5f906100f9565b90565b90565b61012190610115565b9052565b9190610138905f60208501940190610118565b565b3461016a5761014a3660046100cb565b610166610155610107565b61015d610041565b91829182610125565b0390f35b610047565b5f80fd5b90565b90565b61018d61018861019292610173565b610176565b610115565b90565b5f1c90565b6101a66101ab91610195565b6100de565b90565b6101b8905461019a565b90565b634e487b7160e01b5f52601160045260245ffd5b6101de6101e491939293610115565b92610115565b82018092116101ef57565b6101bb565b5f1b90565b906102055f19916101f4565b9181191691161790565b61022361021e61022892610115565b610176565b610115565b90565b90565b9061024361023e61024a9261020f565b61022b565b82546101f9565b9055565b60018060a01b031690565b61026d6102686102729261024e565b610176565b61024e565b90565b61027e90610259565b90565b61028a90610275565b90565b6102969061004f565b90565b6102bd6102b76102a96001610179565b6102b25f6101ae565b6101cf565b5f61022e565b33906102c85f6101ae565b906103056102ff6102f97f18d7b705344d616d1b61daa6a8ccfcf9f10c27ade007cc45cf870d1e121f1a9d95610281565b9261028d565b9261020f565b9261030e610041565b8061031881610093565b0390a456fea26469706673582212204396f246249f52e780861cf7c8e99ebc34211e11586f573a735d1178cc6f3e8664736f6c634300081d0033", + "code": "0x60806040526004361015610013575b61016f565b61001d5f3561003b565b8062cffbe514610036576360206aab0361000e5761013a565b610098565b60e01c90565b60405190565b5f80fd5b5f80fd5b90565b61005b8161004f565b0361006257565b5f80fd5b9050359061007382610052565b565b9060208282031261008e5761008b915f01610066565b90565b61004b565b5f0190565b346100c6576100b06100ab366004610075565b610299565b6100b8610041565b806100c281610093565b0390f35b610047565b5f9103126100d557565b61004b565b1c90565b90565b6100f19060086100f693026100da565b6100de565b90565b9061010491546100e1565b90565b6101125f5f906100f9565b90565b90565b61012190610115565b9052565b9190610138905f60208501940190610118565b565b3461016a5761014a3660046100cb565b610166610155610107565b61015d610041565b91829182610125565b0390f35b610047565b5f80fd5b90565b90565b61018d61018861019292610173565b610176565b610115565b90565b5f1c90565b6101a66101ab91610195565b6100de565b90565b6101b8905461019a565b90565b634e487b7160e01b5f52601160045260245ffd5b6101de6101e491939293610115565b92610115565b82018092116101ef57565b6101bb565b5f1b90565b906102055f19916101f4565b9181191691161790565b61022361021e61022892610115565b610176565b610115565b90565b90565b9061024361023e61024a9261020f565b61022b565b82546101f9565b9055565b60018060a01b031690565b61026d6102686102729261024e565b610176565b61024e565b90565b61027e90610259565b90565b61028a90610275565b90565b6102969061004f565b90565b6102bd6102b76102a96001610179565b6102b25f6101ae565b6101cf565b5f61022e565b33906102c85f6101ae565b906103056102ff6102f97f18d7b705344d616d1b61daa6a8ccfcf9f10c27ade007cc45cf870d1e121f1a9d95610281565b9261028d565b9261020f565b9261030e610041565b8061031881610093565b0390a456", "storage": {}, "balance": "0x0", "nonce": "0x1" }, "0x000000000000000000000000000000000000efff": { - "code": "0x60806040526004361015610013575b610383565b61001d5f3561009c565b806351cff8d91461009757806358bc83371461009257806379204fe01461008d57806379c0cdef146100885780637e1233a914610083578063b0f4d3951461007e578063d23061db146100795763fccc28130361000e5761034e565b610308565b6102df565b6102aa565b610262565b61022b565b61018a565b610109565b60e01c90565b60405190565b5f80fd5b60018060a01b031690565b6100c0906100ac565b90565b6100cc816100b7565b036100d357565b5f80fd5b905035906100e4826100c3565b565b906020828203126100ff576100fc915f016100d7565b90565b6100a8565b5f0190565b61011c6101173660046100e6565b610710565b6101246100a2565b8061012e81610104565b0390f35b5f80fd5b5f91031261014057565b6100a8565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90565b610165610145565b90565b610171906100b7565b9052565b9190610188905f60208501940190610168565b565b346101ba5761019a366004610136565b6101b66101a561015d565b6101ad6100a2565b91829182610175565b0390f35b610132565b90565b6101cb816101bf565b036101d257565b5f80fd5b905035906101e3826101c2565b565b608081830312610226576101fb825f83016100d7565b9261022361020c84602085016100d7565b9361021a81604086016100d7565b936060016101d6565b90565b6100a8565b3461025d5761024761023e3660046101e5565b92919091610af7565b61024f6100a2565b8061025981610104565b0390f35b610132565b346102945761027e6102753660046101e5565b92919091610ce9565b6102866100a2565b8061029081610104565b0390f35b610132565b61fffe90565b6102a7610299565b90565b346102da576102ba366004610136565b6102d66102c561029f565b6102cd6100a2565b91829182610175565b0390f35b610132565b6102f26102ed3660046100e6565b610cf7565b6102fa6100a2565b8061030481610104565b0390f35b3461033a5761032461031b3660046101e5565b92919091610dfe565b61032c6100a2565b8061033681610104565b0390f35b610132565b5f90565b61034b61033f565b90565b3461037e5761035e366004610136565b61037a610369610343565b6103716100a2565b91829182610175565b0390f35b610132565b5f80fd5b90565b90565b6103a161039c6103a692610387565b61038a565b6101bf565b90565b60209181520190565b60207f7665000000000000000000000000000000000000000000000000000000000000917f5769746864726177616c20616d6f756e74206d75737420626520706f736974695f8201520152565b61040c60226040926103a9565b610415816103b2565b0190565b61042e9060208101905f8183039101526103ff565b90565b1561043857565b6104406100a2565b62461bcd60e51b81528061045660048201610419565b0390fd5b905090565b61046a5f809261045a565b0190565b6104779061045f565b90565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906104a29061047a565b810190811067ffffffffffffffff8211176104bc57604052565b610484565b906104d46104cd6100a2565b9283610498565b565b67ffffffffffffffff81116104f4576104f060209161047a565b0190565b610484565b9061050b610506836104d6565b6104c1565b918252565b606090565b3d5f14610530576105253d6104f9565b903d5f602084013e5b565b610538610510565b9061052e565b5f7f4661696c656420746f206275726e204574686572000000000000000000000000910152565b61057260146020926103a9565b61057b8161053e565b0190565b6105949060208101905f818303910152610565565b90565b1561059e57565b6105a66100a2565b62461bcd60e51b8152806105bc6004820161057f565b0390fd5b6105d46105cf6105d9926100ac565b61038a565b6100ac565b90565b6105e5906105c0565b90565b6105f1906105dc565b90565b61060861060361060d926101bf565b61038a565b6101bf565b90565b610619906105c0565b90565b61062590610610565b90565b610631906105dc565b90565b60601b90565b61064390610634565b90565b61064f9061063a565b90565b61065e610663916100b7565b610646565b9052565b90565b61067661067b916101bf565b610667565b9052565b926106ac60146106b4946106a4828861069c60209b9a8399610652565b018092610652565b018092610652565b01809261066a565b0190565b60200190565b5190565b5f80fd5b60e01b90565b5f9103126106d657565b6100a8565b90565b6106e7906106db565b9052565b91906106fe905f602085019401906106de565b565b6107086100a2565b3d5f823e3d90fd5b61072c346107266107205f61038d565b916101bf565b11610431565b61075f5f8061073961033f565b346107426100a2565b908161074d8161046e565b03925af1610759610515565b50610597565b3381349061079f6107996107937fbb2689ff876f7ef453cf8865dde5ab10349d222e2e1383c5152fbdb083f02da2956105e8565b926105e8565b926105f4565b926107a86100a2565b806107b281610104565b0390a46107cd6107c86107c3610299565b61061c565b610628565b9062cffbe59061080f6107de610145565b6108006107e9610145565b9334906107f46100a2565b9586946020860161067f565b60208201810382520382610498565b61082161081b826106be565b916106b8565b20823b1561089557610852926108475f809461083b6100a2565b968795869485936106c6565b8352600483016106eb565b03925af1801561089057610864575b50565b610883905f3d8111610889575b61087b8183610498565b8101906106cc565b5f610861565b503d610871565b610700565b6106c2565b6108a3906105dc565b90565b60207f6520627269646765000000000000000000000000000000000000000000000000917f436f6d6d6f6e4272696467654c323a2063616c6c6572206973206e6f742074685f8201520152565b61090060286040926103a9565b610909816108a6565b0190565b6109229060208101905f8183039101526108f3565b90565b1561092c57565b6109346100a2565b62461bcd60e51b81528061094a6004820161090d565b0390fd5b9061097e9392916109793361097361096d6109683061089a565b6100b7565b916100b7565b14610925565b610a16565b565b63ffffffff1690565b63ffffffff60e01b1690565b6109a96109a46109ae92610980565b6106c6565b610989565b90565b6109ba906101bf565b9052565b6109f36109fa946109e96060949897956109df608086019a5f870190610168565b6020850190610168565b6040830190610168565b01906109b1565b565b151590565b9190610a14905f602085019401906109b1565b565b92919092610a855f80610a283061089a565b6004610a6c6379c0cdef610a5d88918b8d610a448d9293610995565b94610a4d6100a2565b97889660208801908152016109be565b60208201810382520382610498565b82602082019151925af1610a7e610515565b50156109fc565b610ae4575b92909192610adf610acd610ac7610ac17ff5353a2477e10b23280de25ca6cea55c17bb48000d8807ee631e514080e7fb4e946105e8565b946105e8565b946105e8565b94610ad66100a2565b91829182610a01565b0390a4565b610af2818584908692610f16565b610a8a565b90610b0393929161094e565b565b90610b35939291610b3033610b2a610b24610b1f3061089a565b6100b7565b916100b7565b14610925565b610bb6565b565b610b40906105c0565b90565b610b4c90610b37565b90565b610b58906105dc565b90565b90505190610b68826100c3565b565b90602082820312610b8357610b80915f01610b5b565b90565b6100a8565b15610b8f57565b5f80fd5b916020610bb4929493610bad60408201965f830190610168565b01906109b1565b565b90610bc090610b43565b610be46020610bce83610b4f565b63c2eeeebd90610bdc6100a2565b9384926106c6565b8252815f81610bf560048201610104565b03925af18015610ce457610c2c93610c27925f92610cac575b50610c1b610c21916100b7565b916100b7565b14610b88565b610b4f565b916318bf5077919092803b15610ca757610c595f8094610c64610c4d6100a2565b978896879586946106c6565b845260048401610b93565b03925af18015610ca257610c76575b50565b610c95905f3d8111610c9b575b610c8d8183610498565b8101906106cc565b5f610c73565b503d610c83565b610700565b6106c2565b610c21919250610cd5610c1b9160203d8111610cdd575b610ccd8183610498565b810190610b6a565b929150610c0e565b503d610cc3565b610700565b90610cf5939291610b05565b565b610d245f808334610d066100a2565b9081610d118161046e565b03925af1610d1d610515565b50156109fc565b610d6f575b3490610d6a610d587f85a190caa61692b36b63a55e069330d18ab9af179fed7a25c16a4262bc63b7d2926105e8565b92610d616100a2565b91829182610a01565b0390a2565b610d783061089a565b6351cff8d934919091908390803b15610df957610da85f93610db395610d9c6100a2565b968795869485936106c6565b835260048301610175565b03925af18015610df457610dc8575b50610d29565b610de7905f3d8111610ded575b610ddf8183610498565b8101906106cc565b5f610dc2565b503d610dd5565b610700565b6106c2565b929091610e1d82610e17610e115f61038d565b916101bf565b11610431565b610e2e610e2984610b43565b610b4f565b93632b8c49e3338496803b15610f1157610e5b5f8094610e66610e4f6100a2565b9b8c96879586946106c6565b845260048401610b93565b03925af1948515610f0c57610ede95610ee0575b50808483908592610ed2610ec0610eba610eb47f54538b93c6e9b3f518076db2d896122f653fac2bb32fa0b6bc75097b9f332e75946105e8565b946105e8565b946105e8565b94610ec96100a2565b91829182610a01565b0390a492909192610f16565b565b610eff905f3d8111610f05575b610ef78183610498565b8101906106cc565b5f610e7a565b503d610eed565b610700565b6106c2565b9190610f6290610f53610f37610f32610f2d610299565b61061c565b610628565b9562cffbe5959294610f476100a2565b9586946020860161067f565b60208201810382520382610498565b610f74610f6e826106be565b916106b8565b20823b15610fe857610fa592610f9a5f8094610f8e6100a2565b968795869485936106c6565b8352600483016106eb565b03925af18015610fe357610fb7575b50565b610fd6905f3d8111610fdc575b610fce8183610498565b8101906106cc565b5f610fb4565b503d610fc4565b610700565b6106c256fea2646970667358221220ba047060ba3574875cd782f062d08240871ba803894074a664b4df16b994741164736f6c634300081d0033", + "code": "0x60806040526004361015610013575b610383565b61001d5f3561009c565b80632f7fd3951461009757806351cff8d91461009257806379204fe01461008d57806379c0cdef146100885780637e1233a914610083578063b0f4d3951461007e578063d23061db146100795763fccc28130361000e5761034e565b610308565b6102df565b6102aa565b610262565b61022b565b610196565b61011b565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f9103126100ba57565b6100ac565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90565b6100df6100bf565b90565b60018060a01b031690565b6100f6906100e2565b90565b610102906100ed565b9052565b9190610119905f602085019401906100f9565b565b3461014b5761012b3660046100b0565b6101476101366100d7565b61013e6100a2565b91829182610106565b0390f35b6100a8565b610159816100ed565b0361016057565b5f80fd5b9050359061017182610150565b565b9060208282031261018c57610189915f01610164565b90565b6100ac565b5f0190565b6101a96101a4366004610173565b610710565b6101b16100a2565b806101bb81610191565b0390f35b90565b6101cb816101bf565b036101d257565b5f80fd5b905035906101e3826101c2565b565b608081830312610226576101fb825f8301610164565b9261022361020c8460208501610164565b9361021a8160408601610164565b936060016101d6565b90565b6100ac565b3461025d5761024761023e3660046101e5565b92919091610af7565b61024f6100a2565b8061025981610191565b0390f35b6100a8565b346102945761027e6102753660046101e5565b92919091610ce9565b6102866100a2565b8061029081610191565b0390f35b6100a8565b61fffe90565b6102a7610299565b90565b346102da576102ba3660046100b0565b6102d66102c561029f565b6102cd6100a2565b91829182610106565b0390f35b6100a8565b6102f26102ed366004610173565b610cf7565b6102fa6100a2565b8061030481610191565b0390f35b3461033a5761032461031b3660046101e5565b92919091610dfe565b61032c6100a2565b8061033681610191565b0390f35b6100a8565b5f90565b61034b61033f565b90565b3461037e5761035e3660046100b0565b61037a610369610343565b6103716100a2565b91829182610106565b0390f35b6100a8565b5f80fd5b90565b90565b6103a161039c6103a692610387565b61038a565b6101bf565b90565b60209181520190565b60207f7665000000000000000000000000000000000000000000000000000000000000917f5769746864726177616c20616d6f756e74206d75737420626520706f736974695f8201520152565b61040c60226040926103a9565b610415816103b2565b0190565b61042e9060208101905f8183039101526103ff565b90565b1561043857565b6104406100a2565b62461bcd60e51b81528061045660048201610419565b0390fd5b905090565b61046a5f809261045a565b0190565b6104779061045f565b90565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906104a29061047a565b810190811067ffffffffffffffff8211176104bc57604052565b610484565b906104d46104cd6100a2565b9283610498565b565b67ffffffffffffffff81116104f4576104f060209161047a565b0190565b610484565b9061050b610506836104d6565b6104c1565b918252565b606090565b3d5f14610530576105253d6104f9565b903d5f602084013e5b565b610538610510565b9061052e565b5f7f4661696c656420746f206275726e204574686572000000000000000000000000910152565b61057260146020926103a9565b61057b8161053e565b0190565b6105949060208101905f818303910152610565565b90565b1561059e57565b6105a66100a2565b62461bcd60e51b8152806105bc6004820161057f565b0390fd5b6105d46105cf6105d9926100e2565b61038a565b6100e2565b90565b6105e5906105c0565b90565b6105f1906105dc565b90565b61060861060361060d926101bf565b61038a565b6101bf565b90565b610619906105c0565b90565b61062590610610565b90565b610631906105dc565b90565b60601b90565b61064390610634565b90565b61064f9061063a565b90565b61065e610663916100ed565b610646565b9052565b90565b61067661067b916101bf565b610667565b9052565b926106ac60146106b4946106a4828861069c60209b9a8399610652565b018092610652565b018092610652565b01809261066a565b0190565b60200190565b5190565b5f80fd5b60e01b90565b5f9103126106d657565b6100ac565b90565b6106e7906106db565b9052565b91906106fe905f602085019401906106de565b565b6107086100a2565b3d5f823e3d90fd5b61072c346107266107205f61038d565b916101bf565b11610431565b61075f5f8061073961033f565b346107426100a2565b908161074d8161046e565b03925af1610759610515565b50610597565b3381349061079f6107996107937fbb2689ff876f7ef453cf8865dde5ab10349d222e2e1383c5152fbdb083f02da2956105e8565b926105e8565b926105f4565b926107a86100a2565b806107b281610191565b0390a46107cd6107c86107c3610299565b61061c565b610628565b9062cffbe59061080f6107de6100bf565b6108006107e96100bf565b9334906107f46100a2565b9586946020860161067f565b60208201810382520382610498565b61082161081b826106be565b916106b8565b20823b1561089557610852926108475f809461083b6100a2565b968795869485936106c6565b8352600483016106eb565b03925af1801561089057610864575b50565b610883905f3d8111610889575b61087b8183610498565b8101906106cc565b5f610861565b503d610871565b610700565b6106c2565b6108a3906105dc565b90565b60207f6520627269646765000000000000000000000000000000000000000000000000917f436f6d6d6f6e4272696467654c323a2063616c6c6572206973206e6f742074685f8201520152565b61090060286040926103a9565b610909816108a6565b0190565b6109229060208101905f8183039101526108f3565b90565b1561092c57565b6109346100a2565b62461bcd60e51b81528061094a6004820161090d565b0390fd5b9061097e9392916109793361097361096d6109683061089a565b6100ed565b916100ed565b14610925565b610a16565b565b63ffffffff1690565b63ffffffff60e01b1690565b6109a96109a46109ae92610980565b6106c6565b610989565b90565b6109ba906101bf565b9052565b6109f36109fa946109e96060949897956109df608086019a5f8701906100f9565b60208501906100f9565b60408301906100f9565b01906109b1565b565b151590565b9190610a14905f602085019401906109b1565b565b92919092610a855f80610a283061089a565b6004610a6c6379c0cdef610a5d88918b8d610a448d9293610995565b94610a4d6100a2565b97889660208801908152016109be565b60208201810382520382610498565b82602082019151925af1610a7e610515565b50156109fc565b610ae4575b92909192610adf610acd610ac7610ac17ff5353a2477e10b23280de25ca6cea55c17bb48000d8807ee631e514080e7fb4e946105e8565b946105e8565b946105e8565b94610ad66100a2565b91829182610a01565b0390a4565b610af2818584908692610f16565b610a8a565b90610b0393929161094e565b565b90610b35939291610b3033610b2a610b24610b1f3061089a565b6100ed565b916100ed565b14610925565b610bb6565b565b610b40906105c0565b90565b610b4c90610b37565b90565b610b58906105dc565b90565b90505190610b6882610150565b565b90602082820312610b8357610b80915f01610b5b565b90565b6100ac565b15610b8f57565b5f80fd5b916020610bb4929493610bad60408201965f8301906100f9565b01906109b1565b565b90610bc090610b43565b610be46020610bce83610b4f565b63c2eeeebd90610bdc6100a2565b9384926106c6565b8252815f81610bf560048201610191565b03925af18015610ce457610c2c93610c27925f92610cac575b50610c1b610c21916100ed565b916100ed565b14610b88565b610b4f565b916318bf5077919092803b15610ca757610c595f8094610c64610c4d6100a2565b978896879586946106c6565b845260048401610b93565b03925af18015610ca257610c76575b50565b610c95905f3d8111610c9b575b610c8d8183610498565b8101906106cc565b5f610c73565b503d610c83565b610700565b6106c2565b610c21919250610cd5610c1b9160203d8111610cdd575b610ccd8183610498565b810190610b6a565b929150610c0e565b503d610cc3565b610700565b90610cf5939291610b05565b565b610d245f808334610d066100a2565b9081610d118161046e565b03925af1610d1d610515565b50156109fc565b610d6f575b3490610d6a610d587f85a190caa61692b36b63a55e069330d18ab9af179fed7a25c16a4262bc63b7d2926105e8565b92610d616100a2565b91829182610a01565b0390a2565b610d783061089a565b6351cff8d934919091908390803b15610df957610da85f93610db395610d9c6100a2565b968795869485936106c6565b835260048301610106565b03925af18015610df457610dc8575b50610d29565b610de7905f3d8111610ded575b610ddf8183610498565b8101906106cc565b5f610dc2565b503d610dd5565b610700565b6106c2565b929091610e1d82610e17610e115f61038d565b916101bf565b11610431565b610e2e610e2984610b43565b610b4f565b93632b8c49e3338496803b15610f1157610e5b5f8094610e66610e4f6100a2565b9b8c96879586946106c6565b845260048401610b93565b03925af1948515610f0c57610ede95610ee0575b50808483908592610ed2610ec0610eba610eb47f54538b93c6e9b3f518076db2d896122f653fac2bb32fa0b6bc75097b9f332e75946105e8565b946105e8565b946105e8565b94610ec96100a2565b91829182610a01565b0390a492909192610f16565b565b610eff905f3d8111610f05575b610ef78183610498565b8101906106cc565b5f610e7a565b503d610eed565b610700565b6106c2565b9190610f6290610f53610f37610f32610f2d610299565b61061c565b610628565b9562cffbe5959294610f476100a2565b9586946020860161067f565b60208201810382520382610498565b610f74610f6e826106be565b916106b8565b20823b15610fe857610fa592610f9a5f8094610f8e6100a2565b968795869485936106c6565b8352600483016106eb565b03925af18015610fe357610fb7575b50565b610fd6905f3d8111610fdc575b610fce8183610498565b8101906106cc565b5f610fb4565b503d610fc4565b610700565b6106c256", "storage": {}, "balance": "0x0", "nonce": "0x1" @@ -67,14 +77,14 @@ "0x000000000000000000000000000000000000fffd": { "code": "0x608060405261000c61000e565b005b610016610040565b565b60018060a01b031690565b61002c90610018565b90565b63ffffffff60e01b1690565b5f0190565b3361005a61005461004f6100c2565b610023565b91610023565b145f146100b35763ffffffff60e01b5f351661008561007f63278f794360e11b61002f565b9161002f565b14155f146100a9575f6334ad5dbb60e21b8152806100a56004820161003b565b0390fd5b6100b16102d9565b565b6100d6565b5f90565b61f00090565b6100ca6100b8565b506100d36100bc565b90565b6100de610318565b61032c565b90565b90565b90565b6101006100fb610105926100e3565b6100e9565b6100e6565b90565b60405190565b5f80fd5b5f80fd5b90939293848311610136578411610131576001820201920390565b610112565b61010e565b91565b5f80fd5b5f80fd5b61014f90610018565b90565b61015b81610146565b0361016257565b5f80fd5b9050359061017382610152565b565b5f80fd5b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906101a59061017d565b810190811067ffffffffffffffff8211176101bf57604052565b610187565b906101d76101d0610108565b928361019b565b565b67ffffffffffffffff81116101f7576101f360209161017d565b0190565b610187565b90825f939282370152565b9092919261021c610217826101d9565b6101c4565b9381855260208501908284011161023857610236926101fc565b565b610179565b9080601f8301121561025b5781602061025893359101610207565b90565b610175565b9190916040818403126102a057610279835f8301610166565b92602082013567ffffffffffffffff811161029b57610298920161023d565b90565b610142565b61013e565b6102b96102b46102be92610018565b6100e9565b610018565b90565b6102ca906102a5565b90565b6102d6906102c1565b90565b61031661031161030a6103026102fc5f366102f460046100ec565b908092610116565b9061013b565b810190610260565b91906102cd565b610379565b565b6103206100b8565b50610329610486565b90565b5f8091368280378136915af43d5f803e5f14610346573d5ff35b3d5ffd5b610353906102c1565b90565b5190565b90565b61037161036c6103769261035a565b6100e9565b6100e6565b90565b906103838261050c565b816103ae7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9161034a565b906103b7610108565b806103c18161003b565b0390a26103cd81610356565b6103df6103d95f61035d565b916100e6565b115f146103f3576103ef916105dc565b505b565b50506103fd610561565b6103f1565b90565b90565b5f1b90565b61042161041c61042692610402565b610408565b610405565b90565b6104527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61040d565b90565b5f1c90565b60018060a01b031690565b61047161047691610455565b61045a565b90565b6104839054610465565b90565b61048e6100b8565b506104a95f6104a361049e610429565b61060b565b01610479565b90565b6104b590610023565b9052565b91906104cc905f602085019401906104ac565b565b906104df60018060a01b0391610408565b9181191691161790565b90565b906105016104fc6105089261034a565b6104e9565b82546104ce565b9055565b803b61052061051a5f61035d565b916100e6565b1461054257610540905f61053a610535610429565b61060b565b016104ec565b565b61055d905f918291634c9c8ce360e01b8352600483016104b9565b0390fd5b3461057461056e5f61035d565b916100e6565b1161057b57565b5f63b398979f60e01b8152806105936004820161003b565b0390fd5b606090565b906105ae6105a9836101d9565b6101c4565b918252565b3d5f146105ce576105c33d61059c565b903d5f602084013e5b565b6105d6610597565b906105cc565b5f80610608936105ea610597565b508390602081019051915af4906105ff6105b3565b90919091610613565b90565b90565b151590565b9061062790610620610597565b501561060e565b5f146106335750610697565b61063c82610356565b61064e6106485f61035d565b916100e6565b148061067c575b61065d575090565b610678905f918291639996b31560e01b8352600483016104b9565b0390fd5b50803b61069161068b5f61035d565b916100e6565b14610655565b6106a081610356565b6106b26106ac5f61035d565b916100e6565b115f146106c157602081519101fd5b5f63d6bda27560e01b8152806106d96004820161003b565b0390fd", "storage": { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xeffd", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xf000" + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xf000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xeffd" }, "balance": "0x0", "nonce": "0x1" }, "0x000000000000000000000000000000000000fffe": { - "code": "0x608060405261000c61000e565b005b610016610040565b565b60018060a01b031690565b61002c90610018565b90565b63ffffffff60e01b1690565b5f0190565b3361005a61005461004f6100c2565b610023565b91610023565b145f146100b35763ffffffff60e01b5f351661008561007f63278f794360e11b61002f565b9161002f565b14155f146100a9575f6334ad5dbb60e21b8152806100a56004820161003b565b0390fd5b6100b16102d9565b565b6100d6565b5f90565b61f00090565b6100ca6100b8565b506100d36100bc565b90565b6100de610318565b61032c565b90565b90565b90565b6101006100fb610105926100e3565b6100e9565b6100e6565b90565b60405190565b5f80fd5b5f80fd5b90939293848311610136578411610131576001820201920390565b610112565b61010e565b91565b5f80fd5b5f80fd5b61014f90610018565b90565b61015b81610146565b0361016257565b5f80fd5b9050359061017382610152565b565b5f80fd5b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906101a59061017d565b810190811067ffffffffffffffff8211176101bf57604052565b610187565b906101d76101d0610108565b928361019b565b565b67ffffffffffffffff81116101f7576101f360209161017d565b0190565b610187565b90825f939282370152565b9092919261021c610217826101d9565b6101c4565b9381855260208501908284011161023857610236926101fc565b565b610179565b9080601f8301121561025b5781602061025893359101610207565b90565b610175565b9190916040818403126102a057610279835f8301610166565b92602082013567ffffffffffffffff811161029b57610298920161023d565b90565b610142565b61013e565b6102b96102b46102be92610018565b6100e9565b610018565b90565b6102ca906102a5565b90565b6102d6906102c1565b90565b61031661031161030a6103026102fc5f366102f460046100ec565b908092610116565b9061013b565b810190610260565b91906102cd565b610379565b565b6103206100b8565b50610329610486565b90565b5f8091368280378136915af43d5f803e5f14610346573d5ff35b3d5ffd5b610353906102c1565b90565b5190565b90565b61037161036c6103769261035a565b6100e9565b6100e6565b90565b906103838261050c565b816103ae7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9161034a565b906103b7610108565b806103c18161003b565b0390a26103cd81610356565b6103df6103d95f61035d565b916100e6565b115f146103f3576103ef9161059c565b505b565b50506103fd610561565b6103f1565b90565b90565b5f1b90565b61042161041c61042692610402565b610408565b610405565b90565b6104527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61040d565b90565b5f1c90565b60018060a01b031690565b61047161047691610455565b61045a565b90565b6104839054610465565b90565b61048e6100b8565b506104a95f6104a361049e610429565b61066f565b01610479565b90565b6104b590610023565b9052565b91906104cc905f602085019401906104ac565b565b906104df60018060a01b0391610408565b9181191691161790565b90565b906105016104fc6105089261034a565b6104e9565b82546104ce565b9055565b803b61052061051a5f61035d565b916100e6565b1461054257610540905f61053a610535610429565b61066f565b016104ec565b565b61055d905f918291634c9c8ce360e01b8352600483016104b9565b0390fd5b3461057461056e5f61035d565b916100e6565b1161057b57565b5f63b398979f60e01b8152806105936004820161003b565b0390fd5b606090565b906105b0906105a9610597565b5082610676565b808061062c575b5f146105ca5750506105c76106ab565b90565b5f146105ef576105eb905f918291639996b31560e01b8352600483016104b9565b0390fd5b6105f7610693565b6106096106035f61035d565b916100e6565b115f036106a0575f63d6bda27560e01b8152806106286004820161003b565b0390fd5b50610635610693565b6106476106415f61035d565b916100e6565b118015610654575b6105b7565b50813b6106696106635f61035d565b916100e6565b1161064f565b90565b5f90565b5f918291610682610672565b50602082519201905af490565b5f90565b61069b61068f565b503d90565b6040513d5f823e3d90fd5b6106b3610597565b50604051903d82523d5f602084013e3d602001820160405256fea2646970667358221220da9f1f29d0ed5131ce1f37bb5f2d1b5c6de637a513f4e6d4cc498b2391c0f6e564736f6c634300081d0033", + "code": "0x608060405261000c61000e565b005b610016610040565b565b60018060a01b031690565b61002c90610018565b90565b63ffffffff60e01b1690565b5f0190565b3361005a61005461004f6100c2565b610023565b91610023565b145f146100b35763ffffffff60e01b5f351661008561007f63278f794360e11b61002f565b9161002f565b14155f146100a9575f6334ad5dbb60e21b8152806100a56004820161003b565b0390fd5b6100b16102d9565b565b6100d6565b5f90565b61f00090565b6100ca6100b8565b506100d36100bc565b90565b6100de610318565b61032c565b90565b90565b90565b6101006100fb610105926100e3565b6100e9565b6100e6565b90565b60405190565b5f80fd5b5f80fd5b90939293848311610136578411610131576001820201920390565b610112565b61010e565b91565b5f80fd5b5f80fd5b61014f90610018565b90565b61015b81610146565b0361016257565b5f80fd5b9050359061017382610152565b565b5f80fd5b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906101a59061017d565b810190811067ffffffffffffffff8211176101bf57604052565b610187565b906101d76101d0610108565b928361019b565b565b67ffffffffffffffff81116101f7576101f360209161017d565b0190565b610187565b90825f939282370152565b9092919261021c610217826101d9565b6101c4565b9381855260208501908284011161023857610236926101fc565b565b610179565b9080601f8301121561025b5781602061025893359101610207565b90565b610175565b9190916040818403126102a057610279835f8301610166565b92602082013567ffffffffffffffff811161029b57610298920161023d565b90565b610142565b61013e565b6102b96102b46102be92610018565b6100e9565b610018565b90565b6102ca906102a5565b90565b6102d6906102c1565b90565b61031661031161030a6103026102fc5f366102f460046100ec565b908092610116565b9061013b565b810190610260565b91906102cd565b610379565b565b6103206100b8565b50610329610486565b90565b5f8091368280378136915af43d5f803e5f14610346573d5ff35b3d5ffd5b610353906102c1565b90565b5190565b90565b61037161036c6103769261035a565b6100e9565b6100e6565b90565b906103838261050c565b816103ae7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9161034a565b906103b7610108565b806103c18161003b565b0390a26103cd81610356565b6103df6103d95f61035d565b916100e6565b115f146103f3576103ef916105dc565b505b565b50506103fd610561565b6103f1565b90565b90565b5f1b90565b61042161041c61042692610402565b610408565b610405565b90565b6104527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61040d565b90565b5f1c90565b60018060a01b031690565b61047161047691610455565b61045a565b90565b6104839054610465565b90565b61048e6100b8565b506104a95f6104a361049e610429565b61060b565b01610479565b90565b6104b590610023565b9052565b91906104cc905f602085019401906104ac565b565b906104df60018060a01b0391610408565b9181191691161790565b90565b906105016104fc6105089261034a565b6104e9565b82546104ce565b9055565b803b61052061051a5f61035d565b916100e6565b1461054257610540905f61053a610535610429565b61060b565b016104ec565b565b61055d905f918291634c9c8ce360e01b8352600483016104b9565b0390fd5b3461057461056e5f61035d565b916100e6565b1161057b57565b5f63b398979f60e01b8152806105936004820161003b565b0390fd5b606090565b906105ae6105a9836101d9565b6101c4565b918252565b3d5f146105ce576105c33d61059c565b903d5f602084013e5b565b6105d6610597565b906105cc565b5f80610608936105ea610597565b508390602081019051915af4906105ff6105b3565b90919091610613565b90565b90565b151590565b9061062790610620610597565b501561060e565b5f146106335750610697565b61063c82610356565b61064e6106485f61035d565b916100e6565b148061067c575b61065d575090565b610678905f918291639996b31560e01b8352600483016104b9565b0390fd5b50803b61069161068b5f61035d565b916100e6565b14610655565b6106a081610356565b6106b26106ac5f61035d565b916100e6565b115f146106c157602081519101fd5b5f63d6bda27560e01b8152806106d96004820161003b565b0390fd", "storage": { "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xeffe", "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xf000" @@ -83,16 +93,16 @@ "nonce": "0x1" }, "0x000000000000000000000000000000000000ffff": { - "code": "0x608060405261000c61000e565b005b610016610040565b565b60018060a01b031690565b61002c90610018565b90565b63ffffffff60e01b1690565b5f0190565b3361005a61005461004f6100c2565b610023565b91610023565b145f146100b35763ffffffff60e01b5f351661008561007f63278f794360e11b61002f565b9161002f565b14155f146100a9575f6334ad5dbb60e21b8152806100a56004820161003b565b0390fd5b6100b16102d9565b565b6100d6565b5f90565b61f00090565b6100ca6100b8565b506100d36100bc565b90565b6100de610318565b61032c565b90565b90565b90565b6101006100fb610105926100e3565b6100e9565b6100e6565b90565b60405190565b5f80fd5b5f80fd5b90939293848311610136578411610131576001820201920390565b610112565b61010e565b91565b5f80fd5b5f80fd5b61014f90610018565b90565b61015b81610146565b0361016257565b5f80fd5b9050359061017382610152565b565b5f80fd5b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906101a59061017d565b810190811067ffffffffffffffff8211176101bf57604052565b610187565b906101d76101d0610108565b928361019b565b565b67ffffffffffffffff81116101f7576101f360209161017d565b0190565b610187565b90825f939282370152565b9092919261021c610217826101d9565b6101c4565b9381855260208501908284011161023857610236926101fc565b565b610179565b9080601f8301121561025b5781602061025893359101610207565b90565b610175565b9190916040818403126102a057610279835f8301610166565b92602082013567ffffffffffffffff811161029b57610298920161023d565b90565b610142565b61013e565b6102b96102b46102be92610018565b6100e9565b610018565b90565b6102ca906102a5565b90565b6102d6906102c1565b90565b61031661031161030a6103026102fc5f366102f460046100ec565b908092610116565b9061013b565b810190610260565b91906102cd565b610379565b565b6103206100b8565b50610329610486565b90565b5f8091368280378136915af43d5f803e5f14610346573d5ff35b3d5ffd5b610353906102c1565b90565b5190565b90565b61037161036c6103769261035a565b6100e9565b6100e6565b90565b906103838261050c565b816103ae7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9161034a565b906103b7610108565b806103c18161003b565b0390a26103cd81610356565b6103df6103d95f61035d565b916100e6565b115f146103f3576103ef9161059c565b505b565b50506103fd610561565b6103f1565b90565b90565b5f1b90565b61042161041c61042692610402565b610408565b610405565b90565b6104527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61040d565b90565b5f1c90565b60018060a01b031690565b61047161047691610455565b61045a565b90565b6104839054610465565b90565b61048e6100b8565b506104a95f6104a361049e610429565b61066f565b01610479565b90565b6104b590610023565b9052565b91906104cc905f602085019401906104ac565b565b906104df60018060a01b0391610408565b9181191691161790565b90565b906105016104fc6105089261034a565b6104e9565b82546104ce565b9055565b803b61052061051a5f61035d565b916100e6565b1461054257610540905f61053a610535610429565b61066f565b016104ec565b565b61055d905f918291634c9c8ce360e01b8352600483016104b9565b0390fd5b3461057461056e5f61035d565b916100e6565b1161057b57565b5f63b398979f60e01b8152806105936004820161003b565b0390fd5b606090565b906105b0906105a9610597565b5082610676565b808061062c575b5f146105ca5750506105c76106ab565b90565b5f146105ef576105eb905f918291639996b31560e01b8352600483016104b9565b0390fd5b6105f7610693565b6106096106035f61035d565b916100e6565b115f036106a0575f63d6bda27560e01b8152806106286004820161003b565b0390fd5b50610635610693565b6106476106415f61035d565b916100e6565b118015610654575b6105b7565b50813b6106696106635f61035d565b916100e6565b1161064f565b90565b5f90565b5f918291610682610672565b50602082519201905af490565b5f90565b61069b61068f565b503d90565b6040513d5f823e3d90fd5b6106b3610597565b50604051903d82523d5f602084013e3d602001820160405256fea2646970667358221220da9f1f29d0ed5131ce1f37bb5f2d1b5c6de637a513f4e6d4cc498b2391c0f6e564736f6c634300081d0033", + "code": "0x608060405261000c61000e565b005b610016610040565b565b60018060a01b031690565b61002c90610018565b90565b63ffffffff60e01b1690565b5f0190565b3361005a61005461004f6100c2565b610023565b91610023565b145f146100b35763ffffffff60e01b5f351661008561007f63278f794360e11b61002f565b9161002f565b14155f146100a9575f6334ad5dbb60e21b8152806100a56004820161003b565b0390fd5b6100b16102d9565b565b6100d6565b5f90565b61f00090565b6100ca6100b8565b506100d36100bc565b90565b6100de610318565b61032c565b90565b90565b90565b6101006100fb610105926100e3565b6100e9565b6100e6565b90565b60405190565b5f80fd5b5f80fd5b90939293848311610136578411610131576001820201920390565b610112565b61010e565b91565b5f80fd5b5f80fd5b61014f90610018565b90565b61015b81610146565b0361016257565b5f80fd5b9050359061017382610152565b565b5f80fd5b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906101a59061017d565b810190811067ffffffffffffffff8211176101bf57604052565b610187565b906101d76101d0610108565b928361019b565b565b67ffffffffffffffff81116101f7576101f360209161017d565b0190565b610187565b90825f939282370152565b9092919261021c610217826101d9565b6101c4565b9381855260208501908284011161023857610236926101fc565b565b610179565b9080601f8301121561025b5781602061025893359101610207565b90565b610175565b9190916040818403126102a057610279835f8301610166565b92602082013567ffffffffffffffff811161029b57610298920161023d565b90565b610142565b61013e565b6102b96102b46102be92610018565b6100e9565b610018565b90565b6102ca906102a5565b90565b6102d6906102c1565b90565b61031661031161030a6103026102fc5f366102f460046100ec565b908092610116565b9061013b565b810190610260565b91906102cd565b610379565b565b6103206100b8565b50610329610486565b90565b5f8091368280378136915af43d5f803e5f14610346573d5ff35b3d5ffd5b610353906102c1565b90565b5190565b90565b61037161036c6103769261035a565b6100e9565b6100e6565b90565b906103838261050c565b816103ae7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9161034a565b906103b7610108565b806103c18161003b565b0390a26103cd81610356565b6103df6103d95f61035d565b916100e6565b115f146103f3576103ef916105dc565b505b565b50506103fd610561565b6103f1565b90565b90565b5f1b90565b61042161041c61042692610402565b610408565b610405565b90565b6104527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61040d565b90565b5f1c90565b60018060a01b031690565b61047161047691610455565b61045a565b90565b6104839054610465565b90565b61048e6100b8565b506104a95f6104a361049e610429565b61060b565b01610479565b90565b6104b590610023565b9052565b91906104cc905f602085019401906104ac565b565b906104df60018060a01b0391610408565b9181191691161790565b90565b906105016104fc6105089261034a565b6104e9565b82546104ce565b9055565b803b61052061051a5f61035d565b916100e6565b1461054257610540905f61053a610535610429565b61060b565b016104ec565b565b61055d905f918291634c9c8ce360e01b8352600483016104b9565b0390fd5b3461057461056e5f61035d565b916100e6565b1161057b57565b5f63b398979f60e01b8152806105936004820161003b565b0390fd5b606090565b906105ae6105a9836101d9565b6101c4565b918252565b3d5f146105ce576105c33d61059c565b903d5f602084013e5b565b6105d6610597565b906105cc565b5f80610608936105ea610597565b508390602081019051915af4906105ff6105b3565b90919091610613565b90565b90565b151590565b9061062790610620610597565b501561060e565b5f146106335750610697565b61063c82610356565b61064e6106485f61035d565b916100e6565b148061067c575b61065d575090565b610678905f918291639996b31560e01b8352600483016104b9565b0390fd5b50803b61069161068b5f61035d565b916100e6565b14610655565b6106a081610356565b6106b26106ac5f61035d565b916100e6565b115f146106c157602081519101fd5b5f63d6bda27560e01b8152806106d96004820161003b565b0390fd", "storage": { - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xf000", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xefff" + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xefff", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xf000" }, "balance": "0x0", "nonce": "0x1" }, "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2": { - "code": "0x60806040526004361015610015575b366105b157005b61001f5f356100be565b8063076c37b2146100b95780633f4ba83a146100b4578063481286e6146100af57806356299481146100aa5780635c975abb146100a557806366cfa057146100a0578063715018a61461009b5780638456cb59146100965780638da5cb5b146100915763f2fde38b0361000e5761057e565b61052b565b6104f8565b6104c5565b610491565b610320565b6102c3565b610230565b610197565b610154565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f80fd5b90565b6100e2816100d6565b036100e957565b5f80fd5b905035906100fa826100d9565b565b90565b610108816100fc565b0361010f57565b5f80fd5b90503590610120826100ff565b565b919060408382031261014a578061013e610147925f86016100ed565b93602001610113565b90565b6100ce565b5f0190565b346101835761016d610167366004610122565b906105f3565b6101756100c4565b8061017f8161014f565b0390f35b6100ca565b5f91031261019257565b6100ce565b346101c5576101a7366004610188565b6101af61061b565b6101b76100c4565b806101c18161014f565b0390f35b6100ca565b91906040838203126101f257806101e66101ef925f8601610113565b93602001610113565b90565b6100ce565b60018060a01b031690565b61020b906101f7565b90565b61021790610202565b9052565b919061022e905f6020850194019061020e565b565b346102615761025d61024c6102463660046101ca565b90610629565b6102546100c4565b9182918261021b565b0390f35b6100ca565b61026f81610202565b0361027657565b5f80fd5b9050359061028782610266565b565b90916060828403126102be576102bb6102a4845f8501610113565b936102b28160208601610113565b9360400161027a565b90565b6100ce565b346102f4576102f06102df6102d9366004610289565b9161063f565b6102e76100c4565b9182918261021b565b0390f35b6100ca565b151590565b610307906102f9565b9052565b919061031e905f602085019401906102fe565b565b3461035057610330366004610188565b61034c61033b610689565b6103436100c4565b9182918261030b565b0390f35b6100ca565b5f80fd5b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906103859061035d565b810190811067ffffffffffffffff82111761039f57604052565b610367565b906103b76103b06100c4565b928361037b565b565b67ffffffffffffffff81116103d7576103d360209161035d565b0190565b610367565b90825f939282370152565b909291926103fc6103f7826103b9565b6103a4565b9381855260208501908284011161041857610416926103dc565b565b610359565b9080601f8301121561043b57816020610438933591016103e7565b90565b610355565b9160608383031261048c57610457825f85016100ed565b926104658360208301610113565b92604082013567ffffffffffffffff811161048757610484920161041d565b90565b6100d2565b6100ce565b346104c0576104aa6104a4366004610440565b916106c3565b6104b26100c4565b806104bc8161014f565b0390f35b6100ca565b346104f3576104d5366004610188565b6104dd610723565b6104e56100c4565b806104ef8161014f565b0390f35b6100ca565b3461052657610508366004610188565b610510610749565b6105186100c4565b806105228161014f565b0390f35b6100ca565b3461055b5761053b366004610188565b610557610546610784565b61054e6100c4565b9182918261021b565b0390f35b6100ca565b9060208282031261057957610576915f0161027a565b90565b6100ce565b346105ac57610596610591366004610560565b61088d565b61059e6100c4565b806105a88161014f565b0390f35b6100ca565b5f80fd5b906105c7916105c261091a565b6105c9565b565b906105f091906102b5916105df602084016103a4565b92808452610efd6020850139610b0e565b50565b906105fd916105b5565b565b610607610c16565b61060f610611565b565b610619610cef565b565b6106236105ff565b565b5f90565b9061063c91610636610625565b50610cf9565b90565b916106559261064c610625565b50919091610d1a565b90565b5f90565b60a01c90565b60ff1690565b6106746106799161065c565b610662565b90565b6106869054610668565b90565b610691610658565b5061069b5f61067c565b90565b906106b192916106ac61091a565b6106b3565b565b916106c092919091610b0e565b50565b906106ce929161069e565b565b6106d8610c16565b6106e0610710565b565b90565b90565b6106fc6106f7610701926106e2565b6106e5565b6101f7565b90565b61070d906106e8565b90565b61072161071c5f610704565b610d92565b565b61072b6106d0565b565b610735610c16565b61073d61073f565b565b610747610e51565b565b61075161072d565b565b5f1c90565b60018060a01b031690565b61076f61077491610753565b610758565b90565b6107819054610763565b90565b61078c610625565b506107965f610777565b90565b6107aa906107a5610c16565b61085d565b565b60209181520190565b60207f6464726573730000000000000000000000000000000000000000000000000000917f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201520152565b61080f60266040926107ac565b610818816107b5565b0190565b6108319060208101905f818303910152610802565b90565b1561083b57565b6108436100c4565b62461bcd60e51b8152806108596004820161081c565b0390fd5b61088b906108868161087f6108796108745f610704565b610202565b91610202565b1415610834565b610d92565b565b61089690610799565b565b5f7f5061757361626c653a2070617573656400000000000000000000000000000000910152565b6108cc60106020926107ac565b6108d581610898565b0190565b6108ee9060208101905f8183039101526108bf565b90565b156108f857565b6109006100c4565b62461bcd60e51b815280610916600482016108d9565b0390fd5b61093361092e610928610689565b156102f9565b6108f1565b565b61094961094461094e926101f7565b6106e5565b6101f7565b90565b61095a90610935565b90565b61096690610951565b90565b5f7f437265617465323a20696e73756666696369656e742062616c616e6365000000910152565b61099d601d6020926107ac565b6109a681610969565b0190565b6109bf9060208101905f818303910152610990565b90565b156109c957565b6109d16100c4565b62461bcd60e51b8152806109e7600482016109aa565b0390fd5b5190565b610a036109fe610a08926106e2565b6106e5565b6100d6565b90565b5f7f437265617465323a2062797465636f6465206c656e677468206973207a65726f910152565b610a3e602080926107ac565b610a4781610a0b565b0190565b610a609060208101905f818303910152610a32565b90565b15610a6a57565b610a726100c4565b62461bcd60e51b815280610a8860048201610a4b565b0390fd5b5f7f437265617465323a204661696c6564206f6e206465706c6f7900000000000000910152565b610ac060196020926107ac565b610ac981610a8c565b0190565b610ae29060208101905f818303910152610ab3565b90565b15610aec57565b610af46100c4565b62461bcd60e51b815280610b0a60048201610acd565b0390fd5b919091610b19610625565b50610b40610b263061095d565b31610b39610b33846100d6565b916100d6565b10156109c2565b610b65610b4c836109eb565b610b5e610b585f6109ef565b916100d6565b1415610a63565b60208251920190f590610b9382610b8c610b86610b815f610704565b610202565b91610202565b1415610ae5565b565b5f7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572910152565b610bc8602080926107ac565b610bd181610b95565b0190565b610bea9060208101905f818303910152610bbc565b90565b15610bf457565b610bfc6100c4565b62461bcd60e51b815280610c1260048201610bd5565b0390fd5b610c40610c21610784565b610c3a610c34610c2f610e5b565b610202565b91610202565b14610bed565b565b610c4a610eea565b610c52610ca2565b565b60a01b90565b90610c6960ff60a01b91610c54565b9181191691161790565b610c7c906102f9565b90565b90565b90610c97610c92610c9e92610c73565b610c7f565b8254610c5a565b9055565b610cac5f5f610c82565b610cb4610e5b565b610cea7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa91610ce16100c4565b9182918261021b565b0390a1565b610cf7610c42565b565b90610d1791610d06610625565b5090610d113061095d565b91610d1a565b90565b90605592600b92610d29610625565b50604051926040840152602083015281520160ff81532090565b5f1b90565b90610d5960018060a01b0391610d43565b9181191691161790565b610d6c90610951565b90565b90565b90610d87610d82610d8e92610d63565b610d6f565b8254610d48565b9055565b610d9b5f610777565b610da5825f610d72565b90610dd9610dd37f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093610d63565b91610d63565b91610de26100c4565b80610dec8161014f565b0390a3565b610df961091a565b610e01610e03565b565b610e0e60015f610c82565b610e16610e5b565b610e4c7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610e436100c4565b9182918261021b565b0390a1565b610e59610df1565b565b610e63610625565b503390565b5f7f5061757361626c653a206e6f7420706175736564000000000000000000000000910152565b610e9c60146020926107ac565b610ea581610e68565b0190565b610ebe9060208101905f818303910152610e8f565b90565b15610ec857565b610ed06100c4565b62461bcd60e51b815280610ee660048201610ea9565b0390fd5b610efa610ef5610689565b610ec1565b56fe608060405234601c57600e6020565b61028a61002b823961028a90f35b6026565b60405190565b5f80fdfe60806040526004361015610013575b610125565b61001d5f3561002c565b63249cb3fa0361000e576100ef565b60e01c90565b60405190565b5f80fd5b5f80fd5b90565b61004c81610040565b0361005357565b5f80fd5b9050359061006482610043565b565b60018060a01b031690565b61007a90610066565b90565b61008681610071565b0361008d57565b5f80fd5b9050359061009e8261007d565b565b91906040838203126100c857806100bc6100c5925f8601610057565b93602001610091565b90565b61003c565b6100d690610040565b9052565b91906100ed905f602085019401906100cd565b565b346101205761011c61010b6101053660046100a0565b90610210565b610113610032565b918291826100da565b0390f35b610038565b5f80fd5b5f90565b61013690610040565b90565b906101439061012d565b5f5260205260405f2090565b90565b61016661016161016b92610066565b61014f565b610066565b90565b61017790610152565b90565b6101839061016e565b90565b906101909061017a565b5f5260205260405f2090565b5f1c90565b60ff1690565b6101b36101b89161019c565b6101a1565b90565b6101c590546101a7565b90565b90565b5f1b90565b6101e46101df6101e9926101c8565b6101cb565b610040565b90565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b490565b6102349161022a61022f92610223610129565b505f610139565b610186565b6101bb565b5f14610246576102426101ec565b5b90565b61024f5f6101d0565b61024356fea26469706673582212203dcabd569808849d0e409a052e5e7d1fa1624dd221cdb5cd5d9cbed0d5bd521b64736f6c634300081d0033a2646970667358221220c9ee82b3796a8b1e888ae9b0f1244e703b889a0a49a1fc2f76e48ff4436c7a1564736f6c634300081d0033", + "code": "0x60806040526004361015610015575b366105b157005b61001f5f356100be565b8063076c37b2146100b95780633f4ba83a146100b4578063481286e6146100af57806356299481146100aa5780635c975abb146100a557806366cfa057146100a0578063715018a61461009b5780638456cb59146100965780638da5cb5b146100915763f2fde38b0361000e5761057e565b61052b565b6104f8565b6104c5565b610491565b610320565b6102c3565b610230565b610197565b610154565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f80fd5b90565b6100e2816100d6565b036100e957565b5f80fd5b905035906100fa826100d9565b565b90565b610108816100fc565b0361010f57565b5f80fd5b90503590610120826100ff565b565b919060408382031261014a578061013e610147925f86016100ed565b93602001610113565b90565b6100ce565b5f0190565b346101835761016d610167366004610122565b906105f3565b6101756100c4565b8061017f8161014f565b0390f35b6100ca565b5f91031261019257565b6100ce565b346101c5576101a7366004610188565b6101af61061b565b6101b76100c4565b806101c18161014f565b0390f35b6100ca565b91906040838203126101f257806101e66101ef925f8601610113565b93602001610113565b90565b6100ce565b60018060a01b031690565b61020b906101f7565b90565b61021790610202565b9052565b919061022e905f6020850194019061020e565b565b346102615761025d61024c6102463660046101ca565b90610629565b6102546100c4565b9182918261021b565b0390f35b6100ca565b61026f81610202565b0361027657565b5f80fd5b9050359061028782610266565b565b90916060828403126102be576102bb6102a4845f8501610113565b936102b28160208601610113565b9360400161027a565b90565b6100ce565b346102f4576102f06102df6102d9366004610289565b9161063f565b6102e76100c4565b9182918261021b565b0390f35b6100ca565b151590565b610307906102f9565b9052565b919061031e905f602085019401906102fe565b565b3461035057610330366004610188565b61034c61033b610689565b6103436100c4565b9182918261030b565b0390f35b6100ca565b5f80fd5b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906103859061035d565b810190811067ffffffffffffffff82111761039f57604052565b610367565b906103b76103b06100c4565b928361037b565b565b67ffffffffffffffff81116103d7576103d360209161035d565b0190565b610367565b90825f939282370152565b909291926103fc6103f7826103b9565b6103a4565b9381855260208501908284011161041857610416926103dc565b565b610359565b9080601f8301121561043b57816020610438933591016103e7565b90565b610355565b9160608383031261048c57610457825f85016100ed565b926104658360208301610113565b92604082013567ffffffffffffffff811161048757610484920161041d565b90565b6100d2565b6100ce565b346104c0576104aa6104a4366004610440565b916106c3565b6104b26100c4565b806104bc8161014f565b0390f35b6100ca565b346104f3576104d5366004610188565b6104dd610723565b6104e56100c4565b806104ef8161014f565b0390f35b6100ca565b3461052657610508366004610188565b610510610749565b6105186100c4565b806105228161014f565b0390f35b6100ca565b3461055b5761053b366004610188565b610557610546610784565b61054e6100c4565b9182918261021b565b0390f35b6100ca565b9060208282031261057957610576915f0161027a565b90565b6100ce565b346105ac57610596610591366004610560565b61088d565b61059e6100c4565b806105a88161014f565b0390f35b6100ca565b5f80fd5b906105c7916105c261091a565b6105c9565b565b906105f0919061027f916105df602084016103a4565b92808452610efd6020850139610b0e565b50565b906105fd916105b5565b565b610607610c16565b61060f610611565b565b610619610cef565b565b6106236105ff565b565b5f90565b9061063c91610636610625565b50610cf9565b90565b916106559261064c610625565b50919091610d1a565b90565b5f90565b60a01c90565b60ff1690565b6106746106799161065c565b610662565b90565b6106869054610668565b90565b610691610658565b5061069b5f61067c565b90565b906106b192916106ac61091a565b6106b3565b565b916106c092919091610b0e565b50565b906106ce929161069e565b565b6106d8610c16565b6106e0610710565b565b90565b90565b6106fc6106f7610701926106e2565b6106e5565b6101f7565b90565b61070d906106e8565b90565b61072161071c5f610704565b610d92565b565b61072b6106d0565b565b610735610c16565b61073d61073f565b565b610747610e51565b565b61075161072d565b565b5f1c90565b60018060a01b031690565b61076f61077491610753565b610758565b90565b6107819054610763565b90565b61078c610625565b506107965f610777565b90565b6107aa906107a5610c16565b61085d565b565b60209181520190565b60207f6464726573730000000000000000000000000000000000000000000000000000917f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201520152565b61080f60266040926107ac565b610818816107b5565b0190565b6108319060208101905f818303910152610802565b90565b1561083b57565b6108436100c4565b62461bcd60e51b8152806108596004820161081c565b0390fd5b61088b906108868161087f6108796108745f610704565b610202565b91610202565b1415610834565b610d92565b565b61089690610799565b565b5f7f5061757361626c653a2070617573656400000000000000000000000000000000910152565b6108cc60106020926107ac565b6108d581610898565b0190565b6108ee9060208101905f8183039101526108bf565b90565b156108f857565b6109006100c4565b62461bcd60e51b815280610916600482016108d9565b0390fd5b61093361092e610928610689565b156102f9565b6108f1565b565b61094961094461094e926101f7565b6106e5565b6101f7565b90565b61095a90610935565b90565b61096690610951565b90565b5f7f437265617465323a20696e73756666696369656e742062616c616e6365000000910152565b61099d601d6020926107ac565b6109a681610969565b0190565b6109bf9060208101905f818303910152610990565b90565b156109c957565b6109d16100c4565b62461bcd60e51b8152806109e7600482016109aa565b0390fd5b5190565b610a036109fe610a08926106e2565b6106e5565b6100d6565b90565b5f7f437265617465323a2062797465636f6465206c656e677468206973207a65726f910152565b610a3e602080926107ac565b610a4781610a0b565b0190565b610a609060208101905f818303910152610a32565b90565b15610a6a57565b610a726100c4565b62461bcd60e51b815280610a8860048201610a4b565b0390fd5b5f7f437265617465323a204661696c6564206f6e206465706c6f7900000000000000910152565b610ac060196020926107ac565b610ac981610a8c565b0190565b610ae29060208101905f818303910152610ab3565b90565b15610aec57565b610af46100c4565b62461bcd60e51b815280610b0a60048201610acd565b0390fd5b919091610b19610625565b50610b40610b263061095d565b31610b39610b33846100d6565b916100d6565b10156109c2565b610b65610b4c836109eb565b610b5e610b585f6109ef565b916100d6565b1415610a63565b60208251920190f590610b9382610b8c610b86610b815f610704565b610202565b91610202565b1415610ae5565b565b5f7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572910152565b610bc8602080926107ac565b610bd181610b95565b0190565b610bea9060208101905f818303910152610bbc565b90565b15610bf457565b610bfc6100c4565b62461bcd60e51b815280610c1260048201610bd5565b0390fd5b610c40610c21610784565b610c3a610c34610c2f610e5b565b610202565b91610202565b14610bed565b565b610c4a610eea565b610c52610ca2565b565b60a01b90565b90610c6960ff60a01b91610c54565b9181191691161790565b610c7c906102f9565b90565b90565b90610c97610c92610c9e92610c73565b610c7f565b8254610c5a565b9055565b610cac5f5f610c82565b610cb4610e5b565b610cea7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa91610ce16100c4565b9182918261021b565b0390a1565b610cf7610c42565b565b90610d1791610d06610625565b5090610d113061095d565b91610d1a565b90565b90605592600b92610d29610625565b50604051926040840152602083015281520160ff81532090565b5f1b90565b90610d5960018060a01b0391610d43565b9181191691161790565b610d6c90610951565b90565b90565b90610d87610d82610d8e92610d63565b610d6f565b8254610d48565b9055565b610d9b5f610777565b610da5825f610d72565b90610dd9610dd37f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093610d63565b91610d63565b91610de26100c4565b80610dec8161014f565b0390a3565b610df961091a565b610e01610e03565b565b610e0e60015f610c82565b610e16610e5b565b610e4c7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610e436100c4565b9182918261021b565b0390a1565b610e59610df1565b565b610e63610625565b503390565b5f7f5061757361626c653a206e6f7420706175736564000000000000000000000000910152565b610e9c60146020926107ac565b610ea581610e68565b0190565b610ebe9060208101905f818303910152610e8f565b90565b15610ec857565b610ed06100c4565b62461bcd60e51b815280610ee660048201610ea9565b0390fd5b610efa610ef5610689565b610ec1565b56fe608060405234601c57600e6020565b61025461002b823961025490f35b6026565b60405190565b5f80fdfe60806040526004361015610013575b610125565b61001d5f3561002c565b63249cb3fa0361000e576100ef565b60e01c90565b60405190565b5f80fd5b5f80fd5b90565b61004c81610040565b0361005357565b5f80fd5b9050359061006482610043565b565b60018060a01b031690565b61007a90610066565b90565b61008681610071565b0361008d57565b5f80fd5b9050359061009e8261007d565b565b91906040838203126100c857806100bc6100c5925f8601610057565b93602001610091565b90565b61003c565b6100d690610040565b9052565b91906100ed905f602085019401906100cd565b565b346101205761011c61010b6101053660046100a0565b90610210565b610113610032565b918291826100da565b0390f35b610038565b5f80fd5b5f90565b61013690610040565b90565b906101439061012d565b5f5260205260405f2090565b90565b61016661016161016b92610066565b61014f565b610066565b90565b61017790610152565b90565b6101839061016e565b90565b906101909061017a565b5f5260205260405f2090565b5f1c90565b60ff1690565b6101b36101b89161019c565b6101a1565b90565b6101c590546101a7565b90565b90565b5f1b90565b6101e46101df6101e9926101c8565b6101cb565b610040565b90565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b490565b6102349161022a61022f92610223610129565b505f610139565b610186565b6101bb565b5f14610246576102426101ec565b5b90565b61024f5f6101d0565b61024356", "storage": {}, "balance": "0x0", "nonce": "0x1" @@ -110,4 +120,4 @@ "nonce": "0x1" } } -} +} \ No newline at end of file From d00065fbb89775eb20c8a26b6db72fbe4dff66c5 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Tue, 21 Oct 2025 17:13:13 -0300 Subject: [PATCH 225/236] Fix bn254 vk write --- crates/l2/prover/src/guest_program/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index b0ef39117a8..785513119ac 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -78,7 +78,7 @@ fn build_sp1_program() { std::fs::write( "./src/sp1/out/riscv32im-succinct-zkvm-vk-bn254", - format!("{}\n", hex::encode(vk.vk.bytes32())), + format!("{}\n", vk.vk.bytes32()), ) .expect("could not write SP1 vk-bn254 to file"); std::fs::write( From 79ae2b7d394839ee07447346e4c74ef69b557877 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Tue, 21 Oct 2025 17:18:52 -0300 Subject: [PATCH 226/236] Fix lock --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 0219008aeb1..12f1f7f1a9e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3835,7 +3835,7 @@ dependencies = [ name = "ethrex-metrics" version = "4.0.0" dependencies = [ - "axum 0.8.6", + "axum 0.8.4", "ethrex-common 4.0.0", "prometheus 0.13.4", "serde", From c1298831d57662978842ec42537b876b7458c076 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Wed, 22 Oct 2025 16:58:27 -0300 Subject: [PATCH 227/236] Add steps for testnet --- Cargo.lock | 2 +- Cargo.toml | 2 +- crates/l2/sequencer/utils.rs | 1 + docs/l2/architecture/aligned_mode.md | 83 +++++++++++++++++----------- 4 files changed, 53 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 12f1f7f1a9e..0131f73b715 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -99,7 +99,7 @@ dependencies = [ [[package]] name = "aligned-sdk" version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.19.1#030e1285889e144b53275cf3922a851e046e5916" +source = "git+https://github.com/yetanotherco/aligned_layer?rev=c60d7eb147edbdf12bb7a7c6e92ec178d9f8da23#c60d7eb147edbdf12bb7a7c6e92ec178d9f8da23" dependencies = [ "ciborium", "dialoguer", diff --git a/Cargo.toml b/Cargo.toml index 82fcd00eff4..7dfdeeffd96 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -114,7 +114,7 @@ url = { version = "2.5.4", features = ["serde"] } kzg-rs = "0.2.6" libsql = "0.9.10" futures = "0.3.31" -aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", tag = "v0.19.1" } +aligned-sdk = { git = "https://github.com/yetanotherco/aligned_layer", rev = "c60d7eb147edbdf12bb7a7c6e92ec178d9f8da23" } spawned-concurrency = "0.4.2" spawned-rt = "0.4.2" lambdaworks-crypto = "0.11.0" diff --git a/crates/l2/sequencer/utils.rs b/crates/l2/sequencer/utils.rs index 52d4a25bf8f..109d902130d 100644 --- a/crates/l2/sequencer/utils.rs +++ b/crates/l2/sequencer/utils.rs @@ -114,6 +114,7 @@ pub fn resolve_aligned_network(network: &str) -> Network { "holesky" => Network::Holesky, "holesky-stage" => Network::HoleskyStage, "mainnet" => Network::Mainnet, + "hoodi" => Network::Hoodi, _ => Network::Devnet, // TODO: Implement custom networks } } diff --git a/docs/l2/architecture/aligned_mode.md b/docs/l2/architecture/aligned_mode.md index a641ca5014a..93f8de3233f 100644 --- a/docs/l2/architecture/aligned_mode.md +++ b/docs/l2/architecture/aligned_mode.md @@ -30,32 +30,32 @@ In a console with `ethrex/crates/l2` as the current directory, run the following ```bash COMPILE_CONTRACTS=true \ -cargo run --release --bin ethrex_l2_l1_deployer --manifest-path contracts/Cargo.toml -- \ - --eth-rpc-url \ - --private-key \ - --genesis-l1-path \ - --genesis-l2-path \ - --contracts-path contracts \ - --aligned \ - --aligned.aggregator-address \ - --bridge-owner
\ - --on-chain-proposer-owner
\ - --private-keys-file-path \ - --sequencer-registry-owner
\ - --sp1-vk-path +ETHREX_L2_ALIGNED=true \ +ETHREX_DEPLOYER_ALIGNED_AGGREGATOR_ADDRESS= \ +ETHREX_L2_SP1=true \ +ETHREX_DEPLOYER_RANDOMIZE_CONTRACT_DEPLOYMENT=true \ +cargo run --release --features l2,l2-sql --manifest-path "../../Cargo.toml" -- l2 deploy \ + --eth-rpc-url \ + --private-key \ + --on-chain-proposer-owner \ + --bridge-owner \ + --genesis-l2-path "../../fixtures/genesis/l2.json" \ + --proof-sender.l1-address ``` > [!NOTE] > This command requires the COMPILE_CONTRACTS env variable to be set, as the deployer needs the SDK to embed the proxy bytecode. -> In this step we are initiallizing the `OnChainProposer` contract with the `ALIGNED_PROOF_AGGREGATOR_SERVICE_ADDRESS` and skipping the rest of verifiers. +> In this step we are initiallizing the `OnChainProposer` contract with the `ALIGNED_PROOF_AGGREGATOR_SERVICE_ADDRESS` and skipping the rest of verifiers, you can find the address for the aligned aggegator service [here](https://docs.alignedlayer.com/guides/7_contract_addresses) > Save the addresses of the deployed proxy contracts, as you will need them to run the L2 node. +> Both the private key and the addresses for the on chain proposer, bridge and proof sender should have funds. ### 3. Deposit funds to the `AlignedBatcherPaymentService` contract from the proof sender ```bash -aligned \ +aligned deposit-to-batcher \ --network \ --private_key \ +--rpc_url \ --amount ``` @@ -69,40 +69,57 @@ In a console with `ethrex/crates/l2` as the current directory, run the following ```bash cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "l2" -- \ l2 \ - --watcher.block-delay \ - --network \ - --http.port \ - --http.addr \ - --datadir \ + --watcher.block-delay 0 \ + --network "../../fixtures/genesis/l2.json" \ --l1.bridge-address \ --l1.on-chain-proposer-address \ - --eth.rpc-url \ - --block-producer.coinbase-address \ - --committer.l1-private-key \ - --proof-coordinator.l1-private-key \ - --proof-coordinator.addr \ + --eth.rpc-url \ --aligned \ - --aligned-verifier-interval-ms \ - --beacon_url \ - --aligned-network \ - --fee-estimate \ + --aligned-network \ + --block-producer.coinbase-address \ + --committer.l1-private-key \ + --proof-coordinator.l1-private-key \ + --aligned.beacon-url \ + --datadir ethrex_l2 \ + --no-monitor ``` +Both commiter and proof coordinator should have funds. + Aligned params explanation: - `--aligned`: Enables aligned mode, enforcing all required parameters. -- `ETHREX_ALIGNED_VERIFIER_INTERVAL_MS`: Interval in millisecs, that the `proof_verifier` will sleep between each proof aggregation check. -- `ETHREX_ALIGNED_BEACON_CLIENT_URL`: URL of the beacon client used by the Aligned SDK to verify proof aggregations. -- `ETHREX_ALIGNED_NETWORK` and `ETHREX_ALIGNED_FEE_ESTIMATE`: Parameters used by the [Aligned SDK](https://docs.alignedlayer.com/guides/1.2_sdk_api_reference). +- `--aligned.beacon-url`: URL of the beacon client used by the Aligned SDK to verify proof aggregations, it has to support `/eth/v1/beacon/blobs` +- `--aligned-network`: Parameter used by the [Aligned SDK](https://docs.alignedlayer.com/guides/1.2_sdk_api_reference). + +If you can't find a beacon client URL which supports that endpoint, you can run your own with lighthouse and ethrex: + +Create secrets directory and jwt secret + +```bash +mkdir -p ethereum/secrets/ +cd ethereum/ +openssl rand -hex 32 | tr -d "\n" | tee ./secrets/jwt.hex +``` + +```bash +lighthouse bn --network --execution-endpoint http://localhost:8551 --execution-jwt --checkpoint-sync-url --http --purge-db-force --supernode +``` + +```bash +cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --authrpc.jwtsecret --network +``` ### 4. Running the Prover In a console with `ethrex/crates/l2` as the current directory, run the following command: ```bash -make init-prover- # optional: GPU=true +make init-prover- GPU=true # The GPU parameter is optional ``` +Then you should wait until aligned aggregates your proof + ## How to run (local devnet) > [!IMPORTANT] From 60ffc0cc960e027ec84280a1f670303b301a1e67 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 24 Oct 2025 14:31:05 -0300 Subject: [PATCH 228/236] Format --- crates/l2/sequencer/proof_coordinator.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/sequencer/proof_coordinator.rs b/crates/l2/sequencer/proof_coordinator.rs index 8029c1747b4..8f858f02565 100644 --- a/crates/l2/sequencer/proof_coordinator.rs +++ b/crates/l2/sequencer/proof_coordinator.rs @@ -4,7 +4,7 @@ use crate::sequencer::setup::{prepare_quote_prerequisites, register_tdx_key}; use crate::sequencer::utils::get_git_commit_hash; use bytes::Bytes; use ethrex_common::Address; -use ethrex_l2_common::prover::{BatchProof, ProverInputData, ProverType, ProofFormat}; +use ethrex_l2_common::prover::{BatchProof, ProofFormat, ProverInputData, ProverType}; use ethrex_metrics::metrics; use ethrex_rpc::clients::eth::EthClient; use ethrex_storage_rollup::StoreRollup; From be1566b027e1f08bc02cb5d487a43338e9297e17 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 24 Oct 2025 14:33:24 -0300 Subject: [PATCH 229/236] Fix lock --- crates/l2/tee/quote-gen/Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/tee/quote-gen/Cargo.lock b/crates/l2/tee/quote-gen/Cargo.lock index 77c46cf45ef..359b59cac95 100644 --- a/crates/l2/tee/quote-gen/Cargo.lock +++ b/crates/l2/tee/quote-gen/Cargo.lock @@ -73,7 +73,7 @@ dependencies = [ [[package]] name = "aligned-sdk" version = "0.1.0" -source = "git+https://github.com/yetanotherco/aligned_layer?tag=v0.19.1#030e1285889e144b53275cf3922a851e046e5916" +source = "git+https://github.com/yetanotherco/aligned_layer?rev=c60d7eb147edbdf12bb7a7c6e92ec178d9f8da23#c60d7eb147edbdf12bb7a7c6e92ec178d9f8da23" dependencies = [ "ciborium", "dialoguer", @@ -2438,8 +2438,8 @@ dependencies = [ "ethrex-rlp", "ethrex-trie", "hex", - "serde 1.0.228", "rustc-hash", + "serde 1.0.228", "serde_json", "sha3", "thiserror 2.0.16", From 435855d032dc1ca418539935c3a08c452714f9e1 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 24 Oct 2025 14:48:14 -0300 Subject: [PATCH 230/236] fix hash --- crates/l2/tee/quote-gen/service.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/tee/quote-gen/service.nix b/crates/l2/tee/quote-gen/service.nix index 6dfefcbe78a..dacb5f0e798 100644 --- a/crates/l2/tee/quote-gen/service.nix +++ b/crates/l2/tee/quote-gen/service.nix @@ -39,7 +39,7 @@ let lockFile = ./Cargo.lock; outputHashes = { "bls12_381-0.8.0" = "sha256-8/pXRA7hVAPeMKCZ+PRPfQfxqstw5Ob4MJNp85pv5WQ="; - "aligned-sdk-0.1.0" = "sha256-42Fl2ta3bq0OeyiPu/vW5ohCqpOASTWBSDrS4S03UYc="; + "aligned-sdk-0.1.0" = "sha256-aBU5mgGoKHDG2OYL+qJGSk97hn2AirxQ3soaK9DShpQ="; "lambdaworks-crypto-0.12.0" = "sha256-4vgW/O85zVLhhFrcZUwcPjavy/rRWB8LGTabAkPNrDw="; }; }; From 4eee747cb83c9ec051f9648cae01371a06755a88 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 24 Oct 2025 16:08:56 -0300 Subject: [PATCH 231/236] Embed elfs --- cmd/ethrex/Cargo.toml | 4 ++-- crates/l2/common/Cargo.toml | 4 ++++ crates/l2/common/src/prover.rs | 28 ++++++++++++++++------------ 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/cmd/ethrex/Cargo.toml b/cmd/ethrex/Cargo.toml index e91f6dc5304..a77b405bc03 100644 --- a/cmd/ethrex/Cargo.toml +++ b/cmd/ethrex/Cargo.toml @@ -109,9 +109,9 @@ l2 = [ "dep:hex", ] l2-sql = ["ethrex-storage-rollup/sql"] -sp1 = ["ethrex-prover/sp1"] +sp1 = ["ethrex-prover/sp1", "ethrex-l2-common/sp1"] gpu = ["ethrex-prover/gpu"] -risc0 = ["ethrex-prover/risc0"] +risc0 = ["ethrex-prover/risc0", "ethrex-l2-common/risc0"] [build-dependencies] vergen-git2 = { version = "1.0.7", features = ["rustc"] } diff --git a/crates/l2/common/Cargo.toml b/crates/l2/common/Cargo.toml index a3cb608cd51..cc1dba3af50 100644 --- a/crates/l2/common/Cargo.toml +++ b/crates/l2/common/Cargo.toml @@ -33,3 +33,7 @@ indexing_slicing = "deny" as_conversions = "deny" unnecessary_cast = "warn" panic = "deny" + +[features] +sp1 = [] +risc0 = [] diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index 996bc0ed9c4..89a10221e30 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -11,6 +11,20 @@ use std::{ use crate::calldata::Value; +#[cfg(feature = "sp1")] +const SP1_VM_PROGRAM_CODE: Option> = Some(include_bytes!(concat!( + "../prover/src/guest_program/src/sp1/out/riscv32im-succinct-zkvm-elf" +))); +#[cfg(not(feature = "sp1"))] +const SP1_VM_PROGRAM_CODE: Option> = None; + +#[cfg(feature = "risc0")] +const RISC0_VM_PROGRAM_CODE: Option<&str> = Some(include_str!(concat!( + "../prover/src/guest_program/src/risc0/out/riscv32im-risc0-vk" +))); +#[cfg(not(feature = "risc0"))] +const RISC0_VM_PROGRAM_CODE: Option<&str> = None; + #[serde_as] #[derive(Serialize, Deserialize, RDeserialize, RSerialize, Archive)] pub struct ProverInputData { @@ -89,13 +103,7 @@ impl ProverType { pub fn aligned_vm_program_code(&self) -> std::io::Result>> { match self { Self::RISC0 => { - let path = format!( - "{}/../prover/src/guest_program/src/risc0/out/riscv32im-risc0-vk", - env!("CARGO_MANIFEST_DIR") - ); - let path = std::fs::canonicalize(path)?; - let string = std::fs::read_to_string(path)?; - let trimmed = string.trim_start_matches("0x").trim(); + let trimmed = RISC0_VM_PROGRAM_CODE.unwrap_or_default().trim_start_matches("0x").trim(); let decoded = hex::decode(trimmed).map_err(|e| { std::io::Error::new(std::io::ErrorKind::InvalidData, format!("{e}")) })?; @@ -103,11 +111,7 @@ impl ProverType { }, // for sp1, Aligned requires the ELF file Self::SP1 => { - let path = format!( - "{}/../prover/src/guest_program/src/sp1/out/riscv32im-succinct-zkvm-elf", - env!("CARGO_MANIFEST_DIR")); - let path = std::fs::canonicalize(path)?; - std::fs::read(path).map(Some) + Ok(SP1_VM_PROGRAM_CODE) } , // other types are not supported by Aligned From 8724a0816b6a6a2a32169149dd054e41f3b27fd2 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Fri, 24 Oct 2025 16:28:15 -0300 Subject: [PATCH 232/236] Fix elf constants --- crates/l2/common/src/prover.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/l2/common/src/prover.rs b/crates/l2/common/src/prover.rs index 89a10221e30..30db0e6ae9a 100644 --- a/crates/l2/common/src/prover.rs +++ b/crates/l2/common/src/prover.rs @@ -12,15 +12,15 @@ use std::{ use crate::calldata::Value; #[cfg(feature = "sp1")] -const SP1_VM_PROGRAM_CODE: Option> = Some(include_bytes!(concat!( - "../prover/src/guest_program/src/sp1/out/riscv32im-succinct-zkvm-elf" +const SP1_VM_PROGRAM_CODE: Option<&[u8]> = Some(include_bytes!(concat!( + "../../prover/src/guest_program/src/sp1/out/riscv32im-succinct-zkvm-elf" ))); #[cfg(not(feature = "sp1"))] -const SP1_VM_PROGRAM_CODE: Option> = None; +const SP1_VM_PROGRAM_CODE: Option<&[u8]> = None; #[cfg(feature = "risc0")] const RISC0_VM_PROGRAM_CODE: Option<&str> = Some(include_str!(concat!( - "../prover/src/guest_program/src/risc0/out/riscv32im-risc0-vk" + "../../prover/src/guest_program/src/risc0/out/riscv32im-risc0-vk" ))); #[cfg(not(feature = "risc0"))] const RISC0_VM_PROGRAM_CODE: Option<&str> = None; @@ -111,7 +111,7 @@ impl ProverType { }, // for sp1, Aligned requires the ELF file Self::SP1 => { - Ok(SP1_VM_PROGRAM_CODE) + Ok(SP1_VM_PROGRAM_CODE.map(|x| x.to_vec())) } , // other types are not supported by Aligned From f7ef8816b1ee59db8050b3f2d4d57e9ff10a0cb1 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Mon, 27 Oct 2025 15:32:41 -0300 Subject: [PATCH 233/236] Add commitment --- crates/l2/sequencer/l1_proof_verifier.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/l2/sequencer/l1_proof_verifier.rs b/crates/l2/sequencer/l1_proof_verifier.rs index c9e5aebe2e9..61634fbbe7c 100644 --- a/crates/l2/sequencer/l1_proof_verifier.rs +++ b/crates/l2/sequencer/l1_proof_verifier.rs @@ -178,7 +178,7 @@ impl L1ProofVerifier { } let verification_data = self.verification_data(prover_type, public_inputs)?; - + let commitment = H256(verification_data.commitment()); if let Some((merkle_root, merkle_path)) = self.check_proof_aggregation(verification_data).await? { @@ -186,6 +186,7 @@ impl L1ProofVerifier { ?batch_number, ?prover_type, merkle_root = %format_args!("{merkle_root:#x}"), + commitment = %format_args!("{commitment:#x}"), "Proof aggregated by Aligned" ); aggregated_proofs_for_batch.insert(prover_type, merkle_path); From dfc788edbb64a938cb8c13c97fea951c8626a909 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Mon, 27 Oct 2025 16:38:04 -0300 Subject: [PATCH 234/236] Add flags for init --- docs/l2/architecture/aligned_mode.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/l2/architecture/aligned_mode.md b/docs/l2/architecture/aligned_mode.md index 93f8de3233f..b126d9b9158 100644 --- a/docs/l2/architecture/aligned_mode.md +++ b/docs/l2/architecture/aligned_mode.md @@ -67,7 +67,7 @@ aligned deposit-to-batcher \ In a console with `ethrex/crates/l2` as the current directory, run the following command: ```bash -cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "l2" -- \ +cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "l2",sp1 -- \ l2 \ --watcher.block-delay 0 \ --network "../../fixtures/genesis/l2.json" \ @@ -107,7 +107,7 @@ lighthouse bn --network --execution-endpoint http://localhost:8551 --e ``` ```bash -cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --authrpc.jwtsecret --network +cargo run --release --manifest-path ../../Cargo.toml --bin ethrex -- --authrpc.jwtsecret --network ``` ### 4. Running the Prover @@ -241,6 +241,8 @@ ETHREX_ALIGNED_MODE=true \ ETHREX_ALIGNED_BEACON_URL=http://127.0.0.1:58801 \ ETHREX_ALIGNED_NETWORK=devnet \ ETHREX_PROOF_COORDINATOR_DEV_MODE=false \ +SP1=true \ +RISC0=true \ make init-l2 ``` From 1bc319ca4ca93e7b137028cf06f91490bb568ed2 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Mon, 27 Oct 2025 16:38:40 -0300 Subject: [PATCH 235/236] Add flags to makefile --- crates/l2/Makefile | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/crates/l2/Makefile b/crates/l2/Makefile index 2c6d0f5bfb5..085f9ce26ac 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -114,9 +114,21 @@ deploy-l1-sp1: ## 📜 Deploys the L1 contracts # L2 # ============================================================================== +ifdef SP1 + SP1? := sp1 +else + SP1? := +endif + +ifdef RISC0 + RISC0? := risc0 +else + RISC0? := +endif + init-l2: ## 🚀 Initializes an L2 Lambda ethrex Client export $(shell cat ../../cmd/.env | xargs); \ - cargo run --release --features l2,l2-sql --manifest-path ../../Cargo.toml -- \ + cargo run --release --features l2,l2-sql,$(SP1?),$(RISC0?) --manifest-path ../../Cargo.toml -- \ l2 \ --watcher.block-delay 0 \ --network ${L2_GENESIS_FILE_PATH} \ From 06417b650e166cc6f12b1613cec976f7b109f760 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Tue, 28 Oct 2025 14:34:01 -0300 Subject: [PATCH 236/236] Update docs/l2/architecture/aligned_mode.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Manuel Iñaki Bilbao --- docs/l2/architecture/aligned_mode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/l2/architecture/aligned_mode.md b/docs/l2/architecture/aligned_mode.md index b126d9b9158..2605c3a0317 100644 --- a/docs/l2/architecture/aligned_mode.md +++ b/docs/l2/architecture/aligned_mode.md @@ -67,7 +67,7 @@ aligned deposit-to-batcher \ In a console with `ethrex/crates/l2` as the current directory, run the following command: ```bash -cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "l2",sp1 -- \ +cargo run --release --manifest-path ../../Cargo.toml --bin ethrex --features "l2,sp1" -- \ l2 \ --watcher.block-delay 0 \ --network "../../fixtures/genesis/l2.json" \