diff --git a/.gitignore b/.gitignore index 580459d0e..c7c81b612 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ proptest-regressions/ # ceno serialized files *.bin *.json +*.srs \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 88968389b..93d607201 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,16 @@ # 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" @@ -28,6 +38,17 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[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.11" @@ -63,7 +84,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cd9d29a6a0bb8d4832ff7685dcbb430011b832f2ccec1af9571a0e75c1f7e9c" dependencies = [ "alloy-eips", - "alloy-primitives", + "alloy-primitives 1.4.0", "alloy-rlp", "alloy-serde", "alloy-trie", @@ -87,7 +108,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" dependencies = [ - "alloy-primitives", + "alloy-primitives 1.4.0", "alloy-rlp", "crc", "serde", @@ -100,7 +121,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b82752a889170df67bbb36d42ca63c531eb16274f0d7299ae2a680facba17bd" dependencies = [ - "alloy-primitives", + "alloy-primitives 1.4.0", "alloy-rlp", "serde", ] @@ -111,8 +132,9 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d4769c6ffddca380b0070d71c8b7f30bed375543fe76bb2f74ec0acf4b7cd16" dependencies = [ - "alloy-primitives", + "alloy-primitives 1.4.0", "alloy-rlp", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde", "thiserror 2.0.12", ] @@ -126,7 +148,7 @@ dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", - "alloy-primitives", + "alloy-primitives 1.4.0", "alloy-rlp", "alloy-serde", "auto_impl", @@ -135,10 +157,82 @@ dependencies = [ "either", "serde", "serde_with", - "sha2", + "sha2 0.10.9", "thiserror 2.0.12", ] +[[package]] +name = "alloy-json-abi" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4584e3641181ff073e9d5bec5b3b8f78f9749d9fb108a1cfbc4399a4a139c72a" +dependencies = [ + "alloy-primitives 0.8.26", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-primitives" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e416903084d3392ebd32d94735c395d6709415b76c7728e594d3f996f2b03e65" +dependencies = [ + "bytes", + "cfg-if", + "const-hex", + "derive_more 0.99.20", + "hex-literal", + "itoa", + "ruint", + "tiny-keccak", +] + +[[package]] +name = "alloy-primitives" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0628ec0ba5b98b3370bb6be17b12f23bfce8ee4ad83823325a20546d9b03b78" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more 0.99.20", + "hex-literal", + "itoa", + "ruint", + "tiny-keccak", +] + +[[package]] +name = "alloy-primitives" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777d58b30eb9a4db0e5f59bc30e8c2caef877fee7dc8734cf242a51a60f22e05" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more 2.0.1", + "foldhash 0.1.5", + "hashbrown 0.15.3", + "indexmap 2.9.0", + "itoa", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "keccak-asm", + "paste", + "proptest", + "rand 0.8.5", + "ruint", + "rustc-hash 2.1.1", + "serde", + "sha3", + "tiny-keccak", +] + [[package]] name = "alloy-primitives" version = "1.4.0" @@ -160,7 +254,7 @@ dependencies = [ "proptest", "rand 0.9.2", "ruint", - "rustc-hash", + "rustc-hash 2.1.1", "serde", "sha3", "tiny-keccak", @@ -194,18 +288,92 @@ version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19c3835bdc128f2f3418f5d6c76aec63a245d72973e0eaacc9720aa0787225c5" dependencies = [ - "alloy-primitives", + "alloy-primitives 1.4.0", "serde", "serde_json", ] +[[package]] +name = "alloy-sol-macro" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e68b32b6fa0d09bb74b4cefe35ccc8269d711c26629bc7cd98a47eeb12fe353f" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2afe6879ac373e58fd53581636f2cce843998ae0b058ebe1e4f649195e2bd23c" +dependencies = [ + "alloy-json-abi", + "alloy-sol-macro-input", + "const-hex", + "heck", + "indexmap 2.9.0", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.101", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ba01aee235a8c699d07e5be97ba215607564e71be72f433665329bec307d28" +dependencies = [ + "alloy-json-abi", + "const-hex", + "dunce", + "heck", + "macro-string", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.101", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c13fc168b97411e04465f03e632f31ef94cad1c7c8951bf799237fd7870d535" +dependencies = [ + "serde", + "winnow 0.7.13", +] + +[[package]] +name = "alloy-sol-types" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e960c4b52508ef2ae1e37cae5058e905e9ae099b107900067a503f8c454036f" +dependencies = [ + "alloy-json-abi", + "alloy-primitives 0.8.26", + "alloy-sol-macro", + "const-hex", + "serde", +] + [[package]] name = "alloy-trie" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3412d52bb97c6c6cc27ccc28d4e6e8cf605469101193b50b0bd5813b1f990b5" dependencies = [ - "alloy-primitives", + "alloy-primitives 1.4.0", "alloy-rlp", "arrayvec", "derive_more 2.0.1", @@ -221,7 +389,7 @@ version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc79013f9ac3a8ddeb60234d43da09e6d6abfc1c9dd29d3fe97adfbece3f4a08" dependencies = [ - "alloy-primitives", + "alloy-primitives 1.4.0", "darling 0.21.3", "proc-macro2", "quote", @@ -311,6 +479,16 @@ dependencies = [ "backtrace", ] +[[package]] +name = "ariadne" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "367fd0ad87307588d087544707bc5fbf4805ded96c7db922b70d368fa1cb5702" +dependencies = [ + "unicode-width 0.1.14", + "yansi 0.5.1", +] + [[package]] name = "ark-bls12-381" version = "0.5.0" @@ -331,6 +509,7 @@ checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" dependencies = [ "ark-ec", "ark-ff 0.5.0", + "ark-r1cs-std", "ark-std 0.5.0", ] @@ -496,6 +675,35 @@ dependencies = [ "hashbrown 0.15.3", ] +[[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 0.2.25", +] + [[package]] name = "ark-serialize" version = "0.3.0" @@ -583,6 +791,24 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "ascii-canvas" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] + +[[package]] +name = "atomic" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" +dependencies = [ + "bytemuck", +] + [[package]] name = "aurora-engine-modexp" version = "1.2.0" @@ -638,6 +864,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[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" @@ -679,15 +911,30 @@ dependencies = [ "virtue", ] +[[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", + "bit-vec 0.8.0", ] +[[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" @@ -734,6 +981,12 @@ dependencies = [ "hex-conservative", ] +[[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.0" @@ -769,7 +1022,7 @@ checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" dependencies = [ "arrayref", "arrayvec", - "constant_time_eq", + "constant_time_eq 0.3.1", ] [[package]] @@ -782,7 +1035,16 @@ dependencies = [ "arrayvec", "cc", "cfg-if", - "constant_time_eq", + "constant_time_eq 0.3.1", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.7", ] [[package]] @@ -844,6 +1106,22 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "bstr" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "build_const" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ae4235e6dac0694637c763029ecea1a2ec9e4e06ec2729bd21ba4d9c863eb7" + [[package]] name = "bumpalo" version = "3.17.0" @@ -897,6 +1175,26 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bd91ee7b2422bcb158d90ef4d14f75ef67f340943fc4149891dcce8f8b972a3" +[[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 = "2.1.4" @@ -953,7 +1251,7 @@ dependencies = [ "tikv-jemallocator", "tracing", "tracing-forest", - "tracing-subscriber", + "tracing-subscriber 0.3.19", "vergen-git2", ] @@ -1047,13 +1345,13 @@ name = "ceno_crypto" version = "0.1.0" dependencies = [ "alloy-consensus", - "alloy-primitives", + "alloy-primitives 1.4.0", "ceno_keccak", "ceno_sha2", "ceno_syscall", "k256 0.13.4 (git+https://github.com/scroll-tech/elliptic-curves?branch=ceno%2Fk256-13.4)", "p256 0.13.2 (git+https://github.com/scroll-tech/elliptic-curves?branch=ceno%2Fk256-13.4)", - "revm-precompile", + "revm-precompile 27.0.0", "substrate-bn 0.6.0 (git+https://github.com/scroll-tech/bn?branch=ceno)", "thiserror 2.0.12", ] @@ -1086,7 +1384,7 @@ dependencies = [ "p256 0.13.2 (git+https://github.com/scroll-tech/elliptic-curves?branch=ceno%2Fk256-13.4)", "rayon", "rrs-succinct", - "rustc-hash", + "rustc-hash 2.1.1", "secp", "serde", "smallvec", @@ -1125,6 +1423,7 @@ dependencies = [ name = "ceno_recursion" version = "0.1.0" dependencies = [ + "anyhow", "bincode 1.3.3", "ceno-examples", "ceno_emul", @@ -1157,7 +1456,7 @@ dependencies = [ "sumcheck", "tracing", "tracing-forest", - "tracing-subscriber", + "tracing-subscriber 0.3.19", "transcript", "whir", "witness", @@ -1199,7 +1498,7 @@ source = "git+https://github.com/scroll-tech/ceno-patch.git?branch=main#bc61dbd5 name = "ceno_zkvm" version = "0.1.0" dependencies = [ - "base64", + "base64 0.22.1", "bincode 1.3.3", "ceno-examples", "ceno_emul", @@ -1232,7 +1531,7 @@ dependencies = [ "proptest", "rand 0.8.5", "rayon", - "rustc-hash", + "rustc-hash 2.1.1", "serde", "serde_json", "smallvec", @@ -1246,7 +1545,7 @@ dependencies = [ "tiny-keccak", "tracing", "tracing-forest", - "tracing-subscriber", + "tracing-subscriber 0.3.19", "transcript", "typenum", "whir", @@ -1298,6 +1597,16 @@ dependencies = [ "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.37" @@ -1395,12 +1704,34 @@ 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" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -1440,6 +1771,15 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + [[package]] name = "criterion" version = "0.5.1" @@ -1693,6 +2033,7 @@ dependencies = [ "lock_api", "once_cell", "parking_lot_core", + "rayon", ] [[package]] @@ -1845,12 +2186,23 @@ dependencies = [ ] [[package]] -name = "derive_builder" -version = "0.20.2" +name = "derive-where" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ - "derive_builder_macro", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", ] [[package]] @@ -1875,6 +2227,19 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "derive_more" +version = "0.99.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version 0.4.1", + "syn 2.0.101", +] + [[package]] name = "derive_more" version = "1.0.0" @@ -1932,12 +2297,21 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", + "block-buffer 0.10.4", "const-oid", "crypto-common", "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" @@ -1948,6 +2322,18 @@ dependencies = [ "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" @@ -1991,6 +2377,12 @@ version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" +[[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.20" @@ -2072,12 +2464,30 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ena" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +dependencies = [ + "log", +] + [[package]] name = "encode_unicode" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + [[package]] name = "endian-type" version = "0.1.2" @@ -2116,6 +2526,17 @@ dependencies = [ "syn 2.0.101", ] +[[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.101", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -2132,12 +2553,138 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "ethabi" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" +dependencies = [ + "ethereum-types", + "hex", + "once_cell", + "regex", + "serde", + "serde_json", + "sha3", + "thiserror 1.0.69", + "uint", +] + +[[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", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "scale-info", + "uint", +] + +[[package]] +name = "ethers-core" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" +dependencies = [ + "arrayvec", + "bytes", + "chrono", + "const-hex", + "elliptic-curve", + "ethabi", + "generic-array 0.14.7", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "num_enum 0.7.4", + "open-fastrlp", + "rand 0.8.5", + "rlp", + "serde", + "serde_json", + "strum", + "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", + "semver 1.0.26", + "serde", + "serde_json", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "ethers-solc" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de34e484e7ae3cab99fbfd013d6c5dc7f9013676a4e0e414d8b12e1213e8b3ba" +dependencies = [ + "cfg-if", + "const-hex", + "dirs", + "dunce", + "ethers-core", + "futures-util", + "glob", + "home", + "md-5", + "num_cpus", + "once_cell", + "path-slash", + "rayon", + "regex", + "semver 1.0.26", + "serde", + "serde_json", + "sha2 0.10.9", + "solang-parser", + "svm-rs", + "svm-rs-builds", + "thiserror 1.0.69", + "tiny-keccak", + "tokio", + "tracing", + "walkdir", + "yansi 0.5.1", +] + [[package]] name = "examples" version = "0.1.0" dependencies = [ "alloy-consensus", - "alloy-primitives", + "alloy-primitives 1.4.0", "ceno_crypto", "ceno_crypto_primitives", "ceno_keccak", @@ -2148,7 +2695,7 @@ dependencies = [ "k256 0.13.4 (git+https://github.com/scroll-tech/elliptic-curves?branch=ceno%2Fk256-13.4)", "p256 0.13.2 (git+https://github.com/scroll-tech/elliptic-curves?branch=ceno%2Fk256-13.4)", "rand 0.8.5", - "revm-precompile", + "revm-precompile 27.0.0", "substrate-bn 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bn 0.6.0 (git+https://github.com/scroll-tech/bn?branch=ceno)", "tiny-keccak", @@ -2242,6 +2789,20 @@ dependencies = [ "serde", ] +[[package]] +name = "figment" +version = "0.10.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" +dependencies = [ + "atomic", + "pear", + "serde", + "toml 0.8.22", + "uncased", + "version_check", +] + [[package]] name = "findshlibs" version = "0.10.2" @@ -2266,6 +2827,22 @@ 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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "fnv" version = "1.0.7" @@ -2284,6 +2861,21 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" +[[package]] +name = "forge-fmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac0b82597ff80bc12b3b001dfb968769c345e353650dd32d337f2c64d2167c88" +dependencies = [ + "alloy-primitives 0.3.3", + "ariadne", + "foundry-config", + "itertools 0.11.0", + "solang-parser", + "thiserror 1.0.69", + "tracing", +] + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -2293,12 +2885,114 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "foundry-config" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a64a9bdad47eb4d950523b8ff14e675db8f2226a2aef79063d9344449b3abd5" +dependencies = [ + "Inflector", + "dirs-next", + "ethers-core", + "ethers-etherscan", + "ethers-solc", + "eyre", + "figment", + "globset", + "number_prefix", + "once_cell", + "open-fastrlp", + "path-slash", + "regex", + "reqwest", + "revm-primitives 1.3.0", + "semver 1.0.26", + "serde", + "serde_json", + "serde_regex", + "thiserror 1.0.69", + "toml 0.7.8", + "toml_edit 0.19.15", + "tracing", + "walkdir", +] + +[[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-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[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.101", +] + +[[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-io", + "futures-macro", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + [[package]] name = "gcd" version = "2.3.0" @@ -2388,7 +3082,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5220b8ba44c68a9a7f7a7659e864dd73692e417ef0211bea133c7b74e031eeb9" dependencies = [ - "bitflags", + "bitflags 2.9.0", "libc", "libgit2-sys", "log", @@ -2422,7 +3116,7 @@ dependencies = [ "tikv-jemallocator", "tracing", "tracing-forest", - "tracing-subscriber", + "tracing-subscriber 0.3.19", "transcript", "witness", ] @@ -2439,6 +3133,19 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +[[package]] +name = "globset" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata 0.4.13", + "regex-syntax 0.8.5", +] + [[package]] name = "gmp-mpfr-sys" version = "1.6.8" @@ -2472,6 +3179,25 @@ dependencies = [ "subtle", ] +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 2.9.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "half" version = "2.6.0" @@ -2492,17 +3218,80 @@ dependencies = [ ] [[package]] -name = "halo2_proofs" -version = "0.1.0" +name = "halo2-axiom" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e925780549adee8364c7f2b685c753f6f3df23bde520c67416e93bf615933760" +checksum = "0aee3f8178b78275038e5ea0e2577140056d2c4c87fccaf6777dc0a8eebe455a" dependencies = [ "blake2b_simd", - "ff 0.12.1", - "group 0.12.1", - "pasta_curves 0.4.1", - "rand_core 0.6.4", - "rayon", + "crossbeam", + "ff 0.13.1", + "group 0.13.0", + "halo2curves-axiom", + "itertools 0.11.0", + "maybe-rayon", + "pairing 0.23.0", + "rand 0.8.5", + "rand_core 0.6.4", + "rayon", + "rustc-hash 1.1.0", + "sha3", + "tracing", +] + +[[package]] +name = "halo2-base" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678cf3adc0a39d7b4d9b82315a655201aa24a430dd1902b162c508047f56ac69" +dependencies = [ + "getset", + "halo2-axiom", + "itertools 0.11.0", + "log", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "poseidon-primitives", + "rand_chacha 0.3.1", + "rayon", + "rustc-hash 1.1.0", + "serde", + "serde_json", +] + +[[package]] +name = "halo2-ecc" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c00681fdd1febaf552d8814e9f5a6a142d81a1514102190da07039588b366" +dependencies = [ + "halo2-base", + "itertools 0.11.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "rayon", + "serde", + "serde_json", + "test-case", +] + +[[package]] +name = "halo2_proofs" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e925780549adee8364c7f2b685c753f6f3df23bde520c67416e93bf615933760" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "pasta_curves 0.4.1", + "rand_core 0.6.4", + "rayon", ] [[package]] @@ -2528,7 +3317,7 @@ dependencies = [ "rayon", "serde", "serde_arrays", - "sha2", + "sha2 0.10.9", "static_assertions", "subtle", "unroll", @@ -2556,7 +3345,7 @@ dependencies = [ "rayon", "serde", "serde_arrays", - "sha2", + "sha2 0.10.9", "static_assertions", "subtle", "unroll", @@ -2589,6 +3378,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", + "allocator-api2", ] [[package]] @@ -2600,6 +3390,7 @@ dependencies = [ "allocator-api2", "equivalent", "foldhash 0.1.5", + "serde", ] [[package]] @@ -2666,6 +3457,87 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.1", +] + +[[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-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "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", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "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", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + [[package]] name = "iana-time-zone" version = "0.1.64" @@ -2844,6 +3716,24 @@ 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", +] + +[[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-trait-for-tuples" version = "0.2.3" @@ -2900,6 +3790,27 @@ dependencies = [ "str_stack", ] +[[package]] +name = "inlinable_string" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + [[package]] name = "is-terminal" version = "0.4.16" @@ -2926,6 +3837,15 @@ 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.13.0" @@ -2994,7 +3914,7 @@ dependencies = [ "ecdsa 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", "elliptic-curve", "once_cell", - "sha2", + "sha2 0.10.9", "signature", ] @@ -3010,7 +3930,7 @@ dependencies = [ "elliptic-curve", "hex", "once_cell", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -3032,6 +3952,36 @@ dependencies = [ "sha3-asm", ] +[[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 0.8.5", + "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 0.4.13", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -3081,10 +4031,56 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags", + "bitflags 2.9.0", "libc", ] +[[package]] +name = "libsecp256k1" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79019718125edc905a079a70cfa5f3820bc76139fc91d6f9abc27ea2a887139" +dependencies = [ + "arrayref", + "base64 0.22.1", + "digest 0.9.0", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.5", + "serde", + "sha2 0.9.9", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + [[package]] name = "libz-sys" version = "1.1.22" @@ -3140,6 +4136,17 @@ dependencies = [ "hashbrown 0.15.3", ] +[[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.101", +] + [[package]] name = "matchers" version = "0.1.0" @@ -3159,6 +4166,26 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + +[[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.4" @@ -3204,7 +4231,7 @@ dependencies = [ "once_cell", "tracing", "tracing-core", - "tracing-subscriber", + "tracing-subscriber 0.3.19", ] [[package]] @@ -3226,6 +4253,12 @@ dependencies = [ "sketches-ddsketch", ] +[[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.8" @@ -3233,6 +4266,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.61.1", ] [[package]] @@ -3253,7 +4298,7 @@ dependencies = [ "serde", "sumcheck", "tracing", - "tracing-subscriber", + "tracing-subscriber 0.3.19", "transcript", "whir", "witness", @@ -3289,6 +4334,12 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + [[package]] name = "nibble_vec" version = "0.1.0" @@ -3304,7 +4355,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags", + "bitflags 2.9.0", "cfg-if", "libc", ] @@ -3522,6 +4573,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 2.0.101", @@ -3536,6 +4588,12 @@ dependencies = [ "libc", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "nums" version = "0.1.0" @@ -3583,10 +4641,41 @@ version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[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", + "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 = "openvm" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "bytemuck", "num-bigint 0.4.6", @@ -3599,7 +4688,7 @@ dependencies = [ [[package]] name = "openvm-algebra-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -3628,7 +4717,7 @@ dependencies = [ [[package]] name = "openvm-algebra-complex-macros" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-macros-common", "quote", @@ -3638,7 +4727,7 @@ dependencies = [ [[package]] name = "openvm-algebra-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "halo2curves-axiom", "num-bigint 0.4.6", @@ -3654,7 +4743,7 @@ dependencies = [ [[package]] name = "openvm-algebra-moduli-macros" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "num-bigint 0.4.6", "num-prime", @@ -3666,7 +4755,7 @@ dependencies = [ [[package]] name = "openvm-algebra-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-algebra-guest", "openvm-instructions", @@ -3680,7 +4769,7 @@ dependencies = [ [[package]] name = "openvm-bigint-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -3703,7 +4792,7 @@ dependencies = [ [[package]] name = "openvm-bigint-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-platform", "strum_macros", @@ -3712,7 +4801,7 @@ dependencies = [ [[package]] name = "openvm-bigint-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-bigint-guest", "openvm-instructions", @@ -3727,7 +4816,7 @@ dependencies = [ [[package]] name = "openvm-build" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "cargo_metadata 0.18.1", "eyre", @@ -3739,7 +4828,7 @@ dependencies = [ [[package]] name = "openvm-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "backtrace", "cfg-if", @@ -3767,7 +4856,7 @@ dependencies = [ "p3-baby-bear", "p3-field", "rand 0.8.5", - "rustc-hash", + "rustc-hash 2.1.1", "serde", "serde-big-array", "static_assertions", @@ -3778,7 +4867,7 @@ dependencies = [ [[package]] name = "openvm-circuit-derive" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "itertools 0.14.0", "proc-macro2", @@ -3789,7 +4878,7 @@ dependencies = [ [[package]] name = "openvm-circuit-primitives" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "derive-new 0.6.0", "itertools 0.14.0", @@ -3807,7 +4896,7 @@ dependencies = [ [[package]] name = "openvm-circuit-primitives-derive" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "itertools 0.14.0", "quote", @@ -3817,7 +4906,7 @@ dependencies = [ [[package]] name = "openvm-continuations" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "derivative", "openvm-circuit", @@ -3854,7 +4943,7 @@ dependencies = [ "p3-merkle-tree", "p3-symmetric", "p3-util", - "rustc-hash", + "rustc-hash 2.1.1", "serde", "serde_json", "thiserror 1.0.69", @@ -3887,7 +4976,7 @@ dependencies = [ [[package]] name = "openvm-custom-insn" version = "0.1.0" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "proc-macro2", "quote", @@ -3897,7 +4986,7 @@ dependencies = [ [[package]] name = "openvm-ecc-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -3926,7 +5015,7 @@ dependencies = [ [[package]] name = "openvm-ecc-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "ecdsa 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", "elliptic-curve", @@ -3945,7 +5034,7 @@ dependencies = [ [[package]] name = "openvm-ecc-sw-macros" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-macros-common", "quote", @@ -3955,7 +5044,7 @@ dependencies = [ [[package]] name = "openvm-ecc-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-ecc-guest", "openvm-instructions", @@ -3969,7 +5058,7 @@ dependencies = [ [[package]] name = "openvm-instructions" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "backtrace", "derive-new 0.6.0", @@ -3986,7 +5075,7 @@ dependencies = [ [[package]] name = "openvm-instructions-derive" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "quote", "syn 2.0.101", @@ -3995,7 +5084,7 @@ dependencies = [ [[package]] name = "openvm-keccak256-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4020,7 +5109,7 @@ dependencies = [ [[package]] name = "openvm-keccak256-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-platform", ] @@ -4028,7 +5117,7 @@ dependencies = [ [[package]] name = "openvm-keccak256-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -4042,7 +5131,7 @@ dependencies = [ [[package]] name = "openvm-macros-common" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "syn 2.0.101", ] @@ -4050,7 +5139,7 @@ dependencies = [ [[package]] name = "openvm-mod-circuit-builder" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", @@ -4068,7 +5157,7 @@ dependencies = [ [[package]] name = "openvm-native-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4099,7 +5188,7 @@ dependencies = [ [[package]] name = "openvm-native-compiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "backtrace", "itertools 0.14.0", @@ -4113,6 +5202,7 @@ dependencies = [ "openvm-stark-backend", "openvm-stark-sdk", "serde", + "snark-verifier-sdk", "strum", "strum_macros", "zkhash", @@ -4121,7 +5211,7 @@ dependencies = [ [[package]] name = "openvm-native-compiler-derive" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "quote", "syn 2.0.101", @@ -4130,11 +5220,12 @@ dependencies = [ [[package]] name = "openvm-native-recursion" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "cfg-if", "itertools 0.14.0", "lazy_static", + "once_cell", "openvm-circuit", "openvm-native-circuit", "openvm-native-compiler", @@ -4148,13 +5239,15 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", + "serde_with", + "snark-verifier-sdk", "tracing", ] [[package]] name = "openvm-native-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-instructions", "openvm-transpiler", @@ -4164,7 +5257,7 @@ dependencies = [ [[package]] name = "openvm-pairing-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4193,7 +5286,7 @@ dependencies = [ [[package]] name = "openvm-pairing-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "halo2curves-axiom", "hex-literal", @@ -4214,7 +5307,7 @@ dependencies = [ [[package]] name = "openvm-pairing-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-instructions", "openvm-pairing-guest", @@ -4227,7 +5320,7 @@ dependencies = [ [[package]] name = "openvm-platform" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "libm", "openvm-custom-insn", @@ -4237,7 +5330,7 @@ dependencies = [ [[package]] name = "openvm-poseidon2-air" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "derivative", "lazy_static", @@ -4255,7 +5348,7 @@ dependencies = [ [[package]] name = "openvm-rv32-adapters" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "derive-new 0.6.0", "itertools 0.14.0", @@ -4272,7 +5365,7 @@ dependencies = [ [[package]] name = "openvm-rv32im-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4295,7 +5388,7 @@ dependencies = [ [[package]] name = "openvm-rv32im-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-custom-insn", "p3-field", @@ -4305,7 +5398,7 @@ dependencies = [ [[package]] name = "openvm-rv32im-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -4321,8 +5414,9 @@ dependencies = [ [[package]] name = "openvm-sdk" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ + "alloy-sol-types", "bitcode", "bon", "cfg-if", @@ -4330,6 +5424,7 @@ dependencies = [ "derivative", "derive_more 1.0.0", "eyre", + "forge-fmt", "getset", "hex", "itertools 0.14.0", @@ -4366,27 +5461,29 @@ dependencies = [ "serde", "serde_json", "serde_with", + "snark-verifier", + "snark-verifier-sdk", "tempfile", "thiserror 1.0.69", - "toml", + "toml 0.8.22", "tracing", ] [[package]] name = "openvm-sha256-air" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-circuit-primitives", "openvm-stark-backend", "rand 0.8.5", - "sha2", + "sha2 0.10.9", ] [[package]] name = "openvm-sha256-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4402,14 +5499,14 @@ dependencies = [ "openvm-stark-sdk", "rand 0.8.5", "serde", - "sha2", + "sha2 0.10.9", "strum", ] [[package]] name = "openvm-sha256-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-platform", ] @@ -4417,7 +5514,7 @@ dependencies = [ [[package]] name = "openvm-sha256-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -4449,10 +5546,11 @@ dependencies = [ "p3-uni-stark", "p3-util", "rayon", - "rustc-hash", + "rustc-hash 2.1.1", "serde", "serde_json", "thiserror 1.0.69", + "tikv-jemallocator", "tracing", ] @@ -4486,17 +5584,17 @@ dependencies = [ "serde", "serde_json", "static_assertions", - "toml", + "toml 0.8.22", "tracing", "tracing-forest", - "tracing-subscriber", + "tracing-subscriber 0.3.19", "zkhash", ] [[package]] name = "openvm-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Foptional_native_sumcheck#3b83c3a98c6739dc16f5bdb16d409b3b83d73cbd" dependencies = [ "elf", "eyre", @@ -4507,6 +5605,12 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "ordered-float" version = "4.6.0" @@ -4531,7 +5635,7 @@ dependencies = [ "ecdsa 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", "elliptic-curve", "primeorder 0.13.6 (registry+https://github.com/rust-lang/crates.io-index)", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -4544,7 +5648,7 @@ dependencies = [ "ecdsa 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", "elliptic-curve", "primeorder 0.13.6 (git+https://github.com/scroll-tech/elliptic-curves?branch=ceno%2Fk256-13.4)", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -4988,6 +6092,17 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "487f2ccd1e17ce8c1bfab3a65c89525af41cfad4c8659021a1e9a2aacd73b89b" +[[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 = "pasta_curves" version = "0.4.1" @@ -5024,6 +6139,47 @@ 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 0.10.9", +] + +[[package]] +name = "pear" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdeeaa00ce488657faba8ebf44ab9361f9365a97bd39ffb8a60663f57ff4b467" +dependencies = [ + "inlinable_string", + "pear_codegen", + "yansi 1.0.1", +] + +[[package]] +name = "pear_codegen" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bab5b985dc082b345f812b7df84e1bef27e7207b39e448439ba8bd69c93f147" +dependencies = [ + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn 2.0.101", +] + [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -5050,12 +6206,70 @@ dependencies = [ "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.9.0", +] + +[[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.101", +] + +[[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-lite" 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" @@ -5125,6 +6339,21 @@ dependencies = [ "serde", ] +[[package]] +name = "poseidon-primitives" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4aaeda7a092e21165cc5f0cbc738e72a46f31c03c3cbd87b71ceae9d2d93bc" +dependencies = [ + "bitvec", + "ff 0.13.1", + "lazy_static", + "log", + "rand 0.8.5", + "rand_xorshift", + "thiserror 1.0.69", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -5162,6 +6391,12 @@ dependencies = [ "zerocopy 0.8.25", ] +[[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.34" @@ -5211,6 +6446,9 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", "uint", ] @@ -5264,15 +6502,28 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "version_check", + "yansi 1.0.1", +] + [[package]] name = "proptest" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ - "bit-set", - "bit-vec", - "bitflags", + "bit-set 0.8.0", + "bit-vec 0.8.0", + "bitflags 2.9.0", "lazy_static", "num-traits", "rand 0.8.5", @@ -5354,6 +6605,7 @@ dependencies = [ "libc", "rand_chacha 0.3.1", "rand_core 0.6.4", + "serde", ] [[package]] @@ -5422,7 +6674,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags", + "bitflags 2.9.0", ] [[package]] @@ -5457,7 +6709,7 @@ version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ - "bitflags", + "bitflags 2.9.0", ] [[package]] @@ -5535,6 +6787,209 @@ 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", + "http", + "http-body", + "hyper", + "hyper-rustls", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "revm" +version = "24.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d277408ff8d6f747665ad9e52150ab4caf8d5eaf0d787614cf84633c8337b4" +dependencies = [ + "revm-bytecode", + "revm-context", + "revm-context-interface", + "revm-database", + "revm-database-interface", + "revm-handler", + "revm-inspector", + "revm-interpreter", + "revm-precompile 21.0.0", + "revm-primitives 19.2.0", + "revm-state", +] + +[[package]] +name = "revm-bytecode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "942fe4724cf552fd28db6b0a2ca5b79e884d40dd8288a4027ed1e9090e0c6f49" +dependencies = [ + "bitvec", + "once_cell", + "phf", + "revm-primitives 19.2.0", + "serde", +] + +[[package]] +name = "revm-context" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b01aad49e1233f94cebda48a4e5cef022f7c7ed29b4edf0d202b081af23435ef" +dependencies = [ + "cfg-if", + "derive-where", + "revm-bytecode", + "revm-context-interface", + "revm-database-interface", + "revm-primitives 19.2.0", + "revm-state", + "serde", +] + +[[package]] +name = "revm-context-interface" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b844f48a411e62c7dde0f757bf5cce49c85b86d6fc1d3b2722c07f2bec4c3ce" +dependencies = [ + "alloy-eip2930", + "alloy-eip7702", + "auto_impl", + "either", + "revm-database-interface", + "revm-primitives 19.2.0", + "revm-state", + "serde", +] + +[[package]] +name = "revm-database" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad3fbe34f6bb00a9c3155723b3718b9cb9f17066ba38f9eb101b678cd3626775" +dependencies = [ + "alloy-eips", + "revm-bytecode", + "revm-database-interface", + "revm-primitives 19.2.0", + "revm-state", + "serde", +] + +[[package]] +name = "revm-database-interface" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b8acd36784a6d95d5b9e1b7be3ce014f1e759abb59df1fa08396b30f71adc2a" +dependencies = [ + "auto_impl", + "revm-primitives 19.2.0", + "revm-state", + "serde", +] + +[[package]] +name = "revm-handler" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "481e8c3290ff4fa1c066592fdfeb2b172edfd14d12e6cade6f6f5588cad9359a" +dependencies = [ + "auto_impl", + "revm-bytecode", + "revm-context", + "revm-context-interface", + "revm-database-interface", + "revm-interpreter", + "revm-precompile 21.0.0", + "revm-primitives 19.2.0", + "revm-state", + "serde", +] + +[[package]] +name = "revm-inspector" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc1167ef8937d8867888e63581d8ece729a72073d322119ef4627d813d99ecb" +dependencies = [ + "auto_impl", + "revm-context", + "revm-database-interface", + "revm-handler", + "revm-interpreter", + "revm-primitives 19.2.0", + "revm-state", + "serde", + "serde_json", +] + +[[package]] +name = "revm-interpreter" +version = "20.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5ee65e57375c6639b0f50555e92a4f1b2434349dd32f52e2176f5c711171697" +dependencies = [ + "revm-bytecode", + "revm-context-interface", + "revm-primitives 19.2.0", + "serde", +] + +[[package]] +name = "revm-precompile" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9311e735123d8d53a02af2aa81877bba185be7c141be7f931bb3d2f3af449c" +dependencies = [ + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "aurora-engine-modexp", + "blst", + "c-kzg", + "cfg-if", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libsecp256k1", + "once_cell", + "p256 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", + "revm-primitives 19.2.0", + "ripemd", + "secp256k1", + "sha2 0.10.9", +] + [[package]] name = "revm-precompile" version = "27.0.0" @@ -5551,9 +7006,36 @@ dependencies = [ "cfg-if", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "p256 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", - "revm-primitives", + "revm-primitives 20.2.1", "ripemd", - "sha2", + "sha2 0.10.9", +] + +[[package]] +name = "revm-primitives" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51187b852d9e458816a2e19c81f1dd6c924077e1a8fccd16e4f044f865f299d7" +dependencies = [ + "alloy-primitives 0.4.2", + "alloy-rlp", + "auto_impl", + "bitflags 2.9.0", + "bitvec", + "enumn", + "hashbrown 0.14.5", + "hex", +] + +[[package]] +name = "revm-primitives" +version = "19.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c1588093530ec4442461163be49c433c07a3235d1ca6f6799fef338dacc50d3" +dependencies = [ + "alloy-primitives 1.4.0", + "num_enum 0.7.4", + "serde", ] [[package]] @@ -5562,11 +7044,23 @@ version = "20.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aa29d9da06fe03b249b6419b33968ecdf92ad6428e2f012dc57bcd619b5d94e" dependencies = [ - "alloy-primitives", + "alloy-primitives 1.4.0", "num_enum 0.7.4", "once_cell", ] +[[package]] +name = "revm-state" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0040c61c30319254b34507383ba33d85f92949933adf6525a2cede05d165e1fa" +dependencies = [ + "bitflags 2.9.0", + "revm-bytecode", + "revm-primitives 19.2.0", + "serde", +] + [[package]] name = "rfc6979" version = "0.4.0" @@ -5595,6 +7089,20 @@ dependencies = [ "bytemuck", ] +[[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", + "windows-sys 0.52.0", +] + [[package]] name = "ripemd" version = "0.1.3" @@ -5611,9 +7119,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ "bytes", + "rlp-derive", "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" @@ -5686,6 +7206,12 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hash" version = "2.1.1" @@ -5722,13 +7248,44 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "bitflags", + "bitflags 2.9.0", "errno", "libc", "linux-raw-sys", "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", + "rustls-webpki", + "sct", +] + +[[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-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.22" @@ -5816,6 +7373,16 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "sec1" version = "0.7.3" @@ -5943,6 +7510,7 @@ version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ + "indexmap 2.9.0", "itoa", "memchr", "serde", @@ -5950,6 +7518,16 @@ dependencies = [ "zmij", ] +[[package]] +name = "serde_regex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8136f1a4ea815d7eac4101cfd0b16dc0cb5e1fe1b8609dfd728058656b7badf" +dependencies = [ + "regex", + "serde", +] + [[package]] name = "serde_spanned" version = "0.6.9" @@ -5959,13 +7537,25 @@ 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.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c522100790450cf78eeac1507263d0a350d4d5b30df0c8e1fe051a10c22b376e" dependencies = [ - "base64", + "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", @@ -5991,6 +7581,30 @@ dependencies = [ "syn 2.0.101", ] +[[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.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + [[package]] name = "sha2" version = "0.10.9" @@ -6037,6 +7651,16 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + [[package]] name = "signature" version = "2.2.0" @@ -6047,12 +7671,30 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "simd-adler32" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + [[package]] name = "sketches-ddsketch" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85636c14b73d81f541e525f585c0a2109e6744e1565b5c1668e31c70c10ed65c" +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + [[package]] name = "smallvec" version = "1.15.0" @@ -6062,14 +7704,93 @@ dependencies = [ "serde", ] +[[package]] +name = "snark-verifier" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9203c416ff9de0762667270b21573ba5e6edaeda08743b3ca37dc8a5e0a4480" +dependencies = [ + "halo2-base", + "halo2-ecc", + "hex", + "itertools 0.11.0", + "lazy_static", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "pairing 0.23.0", + "rand 0.8.5", + "revm", + "ruint", + "serde", + "sha3", +] + +[[package]] +name = "snark-verifier-sdk" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290ae6e750d9d5fdf05393bbcae6bf7a63e3408eab023abf7d466156a234ac85" +dependencies = [ + "bincode 1.3.3", + "ethereum-types", + "getset", + "halo2-base", + "hex", + "itertools 0.11.0", + "lazy_static", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "snark-verifier", +] + [[package]] name = "snowbridge-amcl" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460a9ed63cdf03c1b9847e8a12a5f5ba19c4efd5869e4a737e05be25d7c427e5" +checksum = "460a9ed63cdf03c1b9847e8a12a5f5ba19c4efd5869e4a737e05be25d7c427e5" +dependencies = [ + "parity-scale-codec", + "scale-info", +] + +[[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 = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "solang-parser" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cb9fa2fa2fa6837be8a2495486ff92e3ffe68a99b6eeba288e139efdd842457" dependencies = [ - "parity-scale-codec", - "scale-info", + "itertools 0.11.0", + "lalrpop", + "lalrpop-util", + "phf", + "thiserror 1.0.69", + "unicode-xid", ] [[package]] @@ -6134,6 +7855,18 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" +[[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" @@ -6228,6 +7961,39 @@ dependencies = [ "syn 2.0.101", ] +[[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", + "semver 1.0.26", + "serde", + "serde_json", + "sha2 0.10.9", + "thiserror 1.0.69", + "url", + "zip", +] + +[[package]] +name = "svm-rs-builds" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa64b5e8eecd3a8af7cfc311e29db31a268a62d5953233d3e8243ec77a71c4e3" +dependencies = [ + "build_const", + "hex", + "semver 1.0.26", + "serde_json", + "svm-rs", +] + [[package]] name = "symbolic-common" version = "12.15.5" @@ -6273,6 +8039,24 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn-solidity" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab4e6eed052a117409a1a744c8bda9c3ea6934597cf7419f791cb7d590871c4c" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "synstructure" version = "0.13.2" @@ -6284,6 +8068,27 @@ dependencies = [ "syn 2.0.101", ] +[[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", +] + +[[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 = "tap" version = "1.0.1" @@ -6314,6 +8119,39 @@ dependencies = [ "winapi", ] +[[package]] +name = "test-case" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb2550dd13afcd286853192af8601920d959b14c401fcece38071d53bf0768a8" +dependencies = [ + "test-case-macros", +] + +[[package]] +name = "test-case-core" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adcb7fd841cd518e279be3d5a3eb0636409487998a4aff22f3de87b81e88384f" +dependencies = [ + "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "test-case-macros" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "test-case-core", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -6466,6 +8304,57 @@ dependencies = [ "serde_json", ] +[[package]] +name = "tokio" +version = "1.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.6.1", + "windows-sys 0.61.1", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "indexmap 2.9.0", + "serde", + "serde_spanned", + "toml_datetime 0.6.9", + "toml_edit 0.19.15", +] + [[package]] name = "toml" version = "0.8.22" @@ -6503,6 +8392,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ "indexmap 2.9.0", + "serde", + "serde_spanned", "toml_datetime 0.6.9", "winnow 0.5.40", ] @@ -6548,6 +8439,12 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +[[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" @@ -6590,7 +8487,7 @@ dependencies = [ "smallvec", "thiserror 1.0.69", "tracing", - "tracing-subscriber", + "tracing-subscriber 0.3.19", ] [[package]] @@ -6604,6 +8501,15 @@ dependencies = [ "tracing-core", ] +[[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 = "tracing-subscriber" version = "0.3.19" @@ -6643,6 +8549,12 @@ dependencies = [ "strength_reduce", ] +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "typenum" version = "1.19.0" @@ -6673,6 +8585,15 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" +[[package]] +name = "uncased" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-ident" version = "1.0.18" @@ -6707,6 +8628,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "unty" version = "0.0.4" @@ -6833,6 +8760,15 @@ 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.0+wasi-snapshot-preview1" @@ -6874,6 +8810,19 @@ 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" @@ -6916,6 +8865,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "whir" version = "0.1.0" @@ -7029,6 +8984,24 @@ 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" @@ -7047,6 +9020,30 @@ dependencies = [ "windows-targets 0.53.4", ] +[[package]] +name = "windows-sys" +version = "0.61.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +dependencies = [ + "windows-link", +] + +[[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" @@ -7080,6 +9077,12 @@ 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" @@ -7092,6 +9095,12 @@ 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" @@ -7104,6 +9113,12 @@ 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" @@ -7128,6 +9143,12 @@ 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" @@ -7140,6 +9161,12 @@ 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" @@ -7152,6 +9179,12 @@ 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" @@ -7164,6 +9197,12 @@ 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" @@ -7194,13 +9233,23 @@ 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" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags", + "bitflags 2.9.0", ] [[package]] @@ -7237,6 +9286,18 @@ dependencies = [ "tap", ] +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + [[package]] name = "yoke" version = "0.7.5" @@ -7364,6 +9425,26 @@ dependencies = [ "syn 2.0.101", ] +[[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", + "sha1", + "time", + "zstd", +] + [[package]] name = "zkhash" version = "0.2.0" @@ -7385,7 +9466,7 @@ dependencies = [ "pasta_curves 0.5.1", "rand 0.8.5", "serde", - "sha2", + "sha2 0.10.9", "sha3", "subtle", ] @@ -7395,3 +9476,32 @@ name = "zmij" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94f63c051f4fe3c1509da62131a678643c5b6fbdc9273b2b79d4378ebda003d2" + +[[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.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml index 0a75e8c40..b22213fb2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -92,16 +92,16 @@ ceno_gpu = { git = "https://github.com/scroll-tech/ceno-gpu-mock.git", package = cudarc = { version = "0.17.3", features = ["driver", "cuda-version-from-build-system"] } # ceno-recursion dependencies -openvm = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-continuations = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-instructions = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-native-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-native-compiler = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-native-compiler-derive = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-native-recursion = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-rv32im-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-sdk = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +openvm = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/optional_native_sumcheck", default-features = false } +openvm-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/optional_native_sumcheck", default-features = false } +openvm-continuations = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/optional_native_sumcheck", default-features = false } +openvm-instructions = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/optional_native_sumcheck", default-features = false } +openvm-native-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/optional_native_sumcheck", default-features = false } +openvm-native-compiler = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/optional_native_sumcheck", default-features = false } +openvm-native-compiler-derive = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/optional_native_sumcheck", default-features = false } +openvm-native-recursion = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/optional_native_sumcheck", default-features = false } +openvm-rv32im-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/optional_native_sumcheck", default-features = false } +openvm-sdk = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/optional_native_sumcheck", features = ["evm-prove", "evm-verify"] } openvm-cuda-backend = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.2.1", default-features = false } openvm-stark-backend = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.2.1", default-features = false } diff --git a/ceno_cli/src/sdk.rs b/ceno_cli/src/sdk.rs index cbcb601b9..29880230b 100644 --- a/ceno_cli/src/sdk.rs +++ b/ceno_cli/src/sdk.rs @@ -19,15 +19,17 @@ use gkr_iop::cpu::{CpuBackend, CpuProver}; use gkr_iop::gpu::{GpuBackend, GpuProver}; use gkr_iop::hal::ProverBackend; use mpcs::{Basefold, BasefoldRSParams, PolynomialCommitmentScheme, SecurityLevel}; -use openvm_continuations::verifier::internal::types::VmStarkProof; #[cfg(feature = "gpu")] use openvm_cuda_backend::engine::GpuBabyBearPoseidon2Engine as BabyBearPoseidon2Engine; -use openvm_native_circuit::{NativeBuilder, NativeConfig}; -use openvm_sdk::prover::vm::new_local_prover; -use openvm_stark_backend::config::StarkGenericConfig; -use openvm_stark_sdk::config::baby_bear_poseidon2::BabyBearPoseidon2Config; +use openvm_native_circuit::{NativeBuilder, NativeConfig, NativeCpuBuilder}; +use openvm_sdk::{RootSC, prover::vm::new_local_prover}; +use openvm_stark_backend::{config::StarkGenericConfig, proof::Proof}; #[cfg(not(feature = "gpu"))] use openvm_stark_sdk::config::baby_bear_poseidon2::BabyBearPoseidon2Engine; +use openvm_stark_sdk::config::{ + baby_bear_poseidon2::BabyBearPoseidon2Config, + baby_bear_poseidon2_root::BabyBearPoseidon2RootEngine, +}; use serde::Serialize; use std::sync::Arc; @@ -194,7 +196,7 @@ where pub fn compress_to_root_proof( &mut self, base_proofs: Vec>>, - ) -> VmStarkProof { + ) -> Proof { let vb = NativeBuilder::default(); // TODO: cache agg_prover @@ -216,7 +218,20 @@ where "Aggregation must provide existing base layer vk." ); let base_vk = self.zkvm_vk.as_ref().unwrap().clone(); - CenoAggregationProver::new(base_vk, leaf_prover, internal_prover, agg_pk.clone()) + let root_prover = new_local_prover::( + Default::default(), + &agg_pk.root_vm_pk, + agg_pk.root_committed_exe.exe.clone(), + ) + .expect("root prover"); + + CenoAggregationProver::new( + base_vk, + leaf_prover, + internal_prover, + root_prover, + agg_pk.clone(), + ) } else { let agg_prover = CenoAggregationProver::from_base_vk(self.zkvm_vk.clone().unwrap()); self.agg_pk = Some(agg_prover.pk.clone()); diff --git a/ceno_recursion/Cargo.toml b/ceno_recursion/Cargo.toml index 3b978aa56..9f21adb5d 100644 --- a/ceno_recursion/Cargo.toml +++ b/ceno_recursion/Cargo.toml @@ -46,6 +46,7 @@ tracing-subscriber.workspace = true transcript.workspace = true whir.workspace = true witness.workspace = true +anyhow.workspace = true [[bin]] name = "e2e_aggregate" diff --git a/ceno_recursion/src/aggregation/internal.rs b/ceno_recursion/src/aggregation/internal.rs index bd494a0e9..0d57cdd7b 100644 --- a/ceno_recursion/src/aggregation/internal.rs +++ b/ceno_recursion/src/aggregation/internal.rs @@ -3,12 +3,13 @@ /// https://github.com/openvm-org/openvm/blob/main/crates/continuations/src/verifier/common/non_leaf.rs use std::{array, borrow::Borrow}; +use ceno_zkvm::scheme::constants::SEPTIC_EXTENSION_DEGREE; use openvm_circuit::arch::PUBLIC_VALUES_AIR_ID; use openvm_instructions::program::Program; use openvm_native_compiler::{ conversion::CompilerOptions, - ir::{Array, Builder, Config, DIGEST_SIZE, Felt, RVar}, - prelude::Var, + ir::{Array, Builder, Config, DIGEST_SIZE, Felt, RVar, Usize}, + prelude::*, }; use openvm_native_recursion::{ challenger::duplex::DuplexChallengerVariable, fri::TwoAdicFriPcsVariable, stark::StarkVerifier, @@ -21,15 +22,22 @@ use openvm_stark_sdk::{ }; use p3::field::FieldAlgebra; +use crate::{ + aggregation::{ + InternalVmVerifierInput, + types::{InternalVmVerifierExtraPvs, InternalVmVerifierPvs, VmVerifierPvs}, + }, + zkvm_verifier::{ + binding::{SepticExtensionVariable, SepticPointVariable}, + verifier::add_septic_points_in_place, + }, +}; use openvm_continuations::verifier::{ common::{ assert_or_assign_connector_pvs, assert_required_air_for_agg_vm_present, - assert_single_segment_vm_exit_successfully, get_program_commit, types::VmVerifierPvs, - }, - internal::{ - types::{InternalVmVerifierExtraPvs, InternalVmVerifierInput, InternalVmVerifierPvs}, - vars::InternalVmVerifierInputVariable, + assert_single_segment_vm_exit_successfully, get_program_commit, }, + internal::vars::InternalVmVerifierInputVariable, }; use openvm_native_recursion::hints::Hintable; @@ -91,6 +99,16 @@ impl NonLeafVerifierVariables { let pvs = VmVerifierPvs::>::uninit(builder); let leaf_verifier_commit = array::from_fn(|_| builder.uninit()); + let ec_sum = SepticPointVariable { + x: SepticExtensionVariable { + vs: builder.dyn_array(7), + }, + y: SepticExtensionVariable { + vs: builder.dyn_array(7), + }, + is_infinity: Usize::uninit(builder), + }; + builder.range(0, proofs.len()).for_each(|i_vec, builder| { let i = i_vec[0]; let proof = builder.get(proofs, i); @@ -98,26 +116,61 @@ impl NonLeafVerifierVariables { let proof_vm_pvs = self.verify_internal_or_leaf_verifier_proof(builder, &proof); assert_single_segment_vm_exit_successfully(builder, &proof); - builder.if_eq(i, RVar::zero()).then_or_else( |builder| { - builder.assign(&pvs.app_commit, proof_vm_pvs.vm_verifier_pvs.app_commit); + for i in 0..SEPTIC_EXTENSION_DEGREE { + let x = Ext::uninit(builder); + builder.assign(&x, proof_vm_pvs.vm_verifier_pvs.shard_ram_connector.x[i]); + let y = Ext::uninit(builder); + builder.assign(&y, proof_vm_pvs.vm_verifier_pvs.shard_ram_connector.y[i]); + + builder.set(&ec_sum.x.vs, i, x); + builder.set(&ec_sum.y.vs, i, y); + } + let inf = Usize::Var(builder.cast_felt_to_var( + proof_vm_pvs.vm_verifier_pvs.shard_ram_connector.is_infinity, + )); + builder.assign(&ec_sum.is_infinity, inf); + builder.assign( &leaf_verifier_commit, proof_vm_pvs.extra_pvs.leaf_verifier_commit, ); }, |builder| { - builder.assert_eq::<[_; DIGEST_SIZE]>( - pvs.app_commit, - proof_vm_pvs.vm_verifier_pvs.app_commit, - ); + let right = SepticPointVariable { + x: SepticExtensionVariable { + vs: builder.dyn_array(7), + }, + y: SepticExtensionVariable { + vs: builder.dyn_array(7), + }, + is_infinity: Usize::uninit(builder), + }; + + for i in 0..SEPTIC_EXTENSION_DEGREE { + let x = Ext::uninit(builder); + builder.assign(&x, proof_vm_pvs.vm_verifier_pvs.shard_ram_connector.x[i]); + let y = Ext::uninit(builder); + builder.assign(&y, proof_vm_pvs.vm_verifier_pvs.shard_ram_connector.y[i]); + + builder.set(&right.x.vs, i, x); + builder.set(&right.y.vs, i, y); + } + let inf = Usize::Var(builder.cast_felt_to_var( + proof_vm_pvs.vm_verifier_pvs.shard_ram_connector.is_infinity, + )); + builder.assign(&right.is_infinity, inf); + + add_septic_points_in_place(builder, &ec_sum, &right); + builder.assert_eq::<[_; DIGEST_SIZE]>( leaf_verifier_commit, proof_vm_pvs.extra_pvs.leaf_verifier_commit, ); }, ); + assert_or_assign_connector_pvs( builder, &pvs.connector, @@ -125,72 +178,27 @@ impl NonLeafVerifierVariables { &proof_vm_pvs.vm_verifier_pvs.connector, ); - // TODO: sum shard ram ec point in each proof - // // EC sum verification - // let expected_last_shard_id = Usize::uninit(builder); - // builder.assign(&expected_last_shard_id, pv.len() - Usize::from(1)); - - // let shard_id_fs = builder.get(&shard_raw_pi, SHARD_ID_IDX); - // let shard_id_f = builder.get(&shard_id_fs, 0); - // let shard_id = Usize::Var(builder.cast_felt_to_var(shard_id_f)); - // builder.assert_usize_eq(expected_last_shard_id, shard_id); + for i in 0..SEPTIC_EXTENSION_DEGREE { + let x_ext = builder.get(&ec_sum.x.vs, i); + let y_ext = builder.get(&ec_sum.y.vs, i); + let x_fs = builder.ext2felt(x_ext); + let y_fs = builder.ext2felt(y_ext); + let x = builder.get(&x_fs, 0); + let y = builder.get(&y_fs, 0); - // let ec_sum = SepticPointVariable { - // x: SepticExtensionVariable { - // vs: builder.dyn_array(7), - // }, - // y: SepticExtensionVariable { - // vs: builder.dyn_array(7), - // }, - // is_infinity: Usize::uninit(builder), - // }; - // builder.assign(&ec_sum.is_infinity, Usize::from(1)); - - // builder.range(0, pv.len()).for_each(|idx_vec, builder| { - // let shard_pv = builder.get(&pv, idx_vec[0]); - // let x = SepticExtensionVariable { - // vs: shard_pv.slice( - // builder, - // SHARD_RW_SUM_IDX, - // SHARD_RW_SUM_IDX + SEPTIC_EXTENSION_DEGREE, - // ), - // }; - // let y = SepticExtensionVariable { - // vs: shard_pv.slice( - // builder, - // SHARD_RW_SUM_IDX + SEPTIC_EXTENSION_DEGREE, - // SHARD_RW_SUM_IDX + 2 * SEPTIC_EXTENSION_DEGREE, - // ), - // }; - // let shard_ec = SepticPointVariable { - // x: x.clone(), - // y: y.clone(), - // is_infinity: Usize::uninit(builder), - // }; - // let is_x_zero = x.is_zero(builder); - // let is_y_zero = y.is_zero(builder); - // builder.if_eq(is_x_zero, Usize::from(1)).then_or_else( - // |builder| { - // builder - // .if_eq(is_y_zero.clone(), Usize::from(1)) - // .then_or_else( - // |builder| { - // builder.assign(&shard_ec.is_infinity, Usize::from(1)); - // }, - // |builder| { - // builder.assign(&shard_ec.is_infinity, Usize::from(0)); - // }, - // ); - // }, - // |builder| { - // builder.assign(&shard_ec.is_infinity, Usize::from(0)); - // }, - // ); - - // add_septic_points_in_place(builder, &ec_sum, &shard_ec); - // }); - - // add_septic_points_in_place(builder, &ec_sum, &calculated_shard_ec_sum); + builder.assign(&pvs.shard_ram_connector.x[i], x); + builder.assign(&pvs.shard_ram_connector.y[i], y); + } + builder + .if_eq(ec_sum.is_infinity.clone(), Usize::from(1)) + .then_or_else( + |builder| { + builder.assign(&pvs.shard_ram_connector.is_infinity, C::F::ONE); + }, + |builder| { + builder.assign(&pvs.shard_ram_connector.is_infinity, C::F::ZERO); + }, + ); // This is only needed when `is_terminate` but branching here won't save much, so we // always assign it. @@ -301,6 +309,7 @@ impl InternalVmVerifierConfig { internal_pcs, internal_advice, }; + builder.cycle_tracker_start("VerifyProofs"); let (vm_verifier_pvs, leaf_verifier_commit) = non_leaf_verifier.verify_internal_or_leaf_verifier_proofs(&mut builder, &proofs); diff --git a/ceno_recursion/src/aggregation/mod.rs b/ceno_recursion/src/aggregation/mod.rs index 6884103da..bc68fe079 100644 --- a/ceno_recursion/src/aggregation/mod.rs +++ b/ceno_recursion/src/aggregation/mod.rs @@ -1,10 +1,13 @@ -use crate::zkvm_verifier::{ - binding::{E, F, ZKVMProofInput, ZKVMProofInputVariable}, - verifier::verify_zkvm_proof, +use crate::{ + aggregation::{root::CenoRootVmVerifierConfig, statics::StaticProverVerifier}, + zkvm_verifier::{ + binding::{E, F, ZKVMProofInput, ZKVMProofInputVariable}, + verifier::verify_zkvm_proof, + }, }; use ceno_zkvm::{ instructions::riscv::constants::{END_PC_IDX, EXIT_CODE_IDX, INIT_PC_IDX}, - scheme::ZKVMProof, + scheme::{ZKVMProof, constants::SEPTIC_EXTENSION_DEGREE}, structs::ZKVMVerifyingKey, }; use ff_ext::BabyBearExt4; @@ -16,83 +19,94 @@ use openvm_circuit::{ system::program::trace::VmCommittedExe, utils::air_test_impl, }; -use openvm_stark_backend::config::{PcsProverData, Val}; +use openvm_stark_backend::{ + config::{PcsProverData, Val}, + verifier::VerificationError, +}; use internal::InternalVmVerifierConfig; use openvm_continuations::{ C, - verifier::{ - common::types::VmVerifierPvs, - internal::types::{InternalVmVerifierInput, InternalVmVerifierPvs, VmStarkProof}, - }, + verifier::{internal::types::InternalVmVerifierInput, root::types::RootVmVerifierInput}, }; #[cfg(feature = "gpu")] use openvm_cuda_backend::engine::GpuBabyBearPoseidon2Engine as BabyBearPoseidon2Engine; -use openvm_native_circuit::{NativeBuilder, NativeConfig}; +use openvm_native_circuit::{NativeBuilder, NativeConfig, NativeCpuBuilder}; use openvm_native_compiler::{ asm::AsmBuilder, conversion::{CompilerOptions, convert_program}, prelude::*, }; -use openvm_native_recursion::hints::Hintable; +use openvm_native_recursion::{halo2::RawEvmProof, hints::Hintable}; use openvm_sdk::{ SC, - commit::AppExecutionCommit, config::DEFAULT_NUM_CHILDREN_INTERNAL, - prover::vm::{new_local_prover, types::VmProvingKey}, + keygen::{RootVerifierProvingKey, perm::AirIdPermutation}, + prover::{ + RootVerifierLocalProver, + vm::{new_local_prover, types::VmProvingKey}, + }, + util::check_max_constraint_degrees, }; use openvm_stark_backend::{ config::{Com, StarkGenericConfig}, engine::StarkEngine, + proof::Proof, }; #[cfg(not(feature = "gpu"))] use openvm_stark_sdk::config::baby_bear_poseidon2::BabyBearPoseidon2Engine; use openvm_stark_sdk::{ config::{ FriParameters, baby_bear_poseidon2::BabyBearPoseidon2Config, + baby_bear_poseidon2_root::BabyBearPoseidon2RootEngine, fri_params::standard_fri_params_with_100_bits_conjectured_security, }, engine::StarkFriEngine, openvm_stark_backend::keygen::types::MultiStarkVerifyingKey, - p3_bn254_fr::Bn254Fr, }; use p3::field::FieldAlgebra; use serde::{Deserialize, Serialize}; -use std::{borrow::Borrow, sync::Arc, time::Instant}; +use std::{fs::File, sync::Arc, time::Instant}; pub type RecPcs = Basefold; -use openvm_circuit::{ - arch::{ - CONNECTOR_AIR_ID, PROGRAM_AIR_ID, PROGRAM_CACHED_TRACE_INDEX, PUBLIC_VALUES_AIR_ID, - SingleSegmentVmProver, - hasher::{Hasher, poseidon2::vm_poseidon2_hasher}, - instructions::exe::VmExe, - }, - system::{memory::CHUNK, program::trace::compute_exe_commit}, +use crate::aggregation::types::{InternalVmVerifierPvs, VmVerifierPvs}; +use anyhow::Result; +use openvm_circuit::arch::{ + PUBLIC_VALUES_AIR_ID, PreflightExecutionOutput, SingleSegmentVmProver, instructions::exe::VmExe, }; +use openvm_continuations::RootSC; +use openvm_native_circuit::extension::Native; use openvm_native_compiler::{ asm::AsmConfig, ir::{Builder, Config, Felt}, }; -use openvm_sdk::util::check_max_constraint_degrees; -use openvm_stark_backend::proof::Proof; mod internal; mod root; +mod statics; mod types; pub type InnerConfig = AsmConfig; pub const LEAF_LOG_BLOWUP: usize = 1; pub const INTERNAL_LOG_BLOWUP: usize = 2; pub const ROOT_LOG_BLOWUP: usize = 3; +pub const ROOT_MAX_CONSTRAINT_DEG: usize = (1 << ROOT_LOG_BLOWUP) + 1; +pub const ROOT_NUM_PUBLIC_VALUES: usize = 15; pub const SBOX_SIZE: usize = 7; const VM_MAX_TRACE_HEIGHTS: &[u32] = &[ 4194304, 4, 128, 2097152, 8388608, 4194304, 262144, 8388608, 16777216, 2097152, 16777216, 2097152, 8388608, 262144, 2097152, 1048576, 4194304, 1048576, 262144, ]; +const ROOT_VM_MAX_TRACE_HEIGHTS: &[u32] = &[ + 4194304, 4, 128, 2097152, 8388608, 4194304, 262144, 2097152, 16777216, 2097152, 8388608, + 262144, 2097152, 1048576, 4194304, 1048576, 262144, +]; pub struct CenoAggregationProver { pub base_vk: ZKVMVerifyingKey>, pub leaf_prover: VmInstance, pub internal_prover: VmInstance, + pub root_prover: VmInstance, + pub permuted_root_prover: Option, + pub static_prover_verifier: StaticProverVerifier, pub vk: CenoRecursionVerifierKeys, pub pk: CenoRecursionProvingKeys, } @@ -102,12 +116,16 @@ impl CenoAggregationProver { base_vk: ZKVMVerifyingKey>, leaf_prover: VmInstance, internal_prover: VmInstance, + root_prover: VmInstance, pk: CenoRecursionProvingKeys, ) -> Self { Self { base_vk, leaf_prover, internal_prover, + root_prover, + permuted_root_prover: None, + static_prover_verifier: StaticProverVerifier::new(), vk: pk.get_vk(), pk, } @@ -115,7 +133,7 @@ impl CenoAggregationProver { pub fn from_base_vk(vk: ZKVMVerifyingKey>) -> Self { let vb = NativeBuilder::default(); - let [leaf_fri_params, internal_fri_params, _root_fri_params] = + let [leaf_fri_params, internal_fri_params, root_fri_params] = [LEAF_LOG_BLOWUP, INTERNAL_LOG_BLOWUP, ROOT_LOG_BLOWUP] .map(FriParameters::standard_with_100_bits_conjectured_security); @@ -132,7 +150,7 @@ impl CenoAggregationProver { .with_max_segment_len((1 << 24) - 100) .with_profiling() .without_continuations(), - native: Default::default(), + native: Native(true), }; // Leaf layer keygen @@ -185,7 +203,7 @@ impl CenoAggregationProver { .with_max_segment_len((1 << 24) - 100) .with_profiling() .without_continuations(), - native: Default::default(), + native: Native(true), }; // Internal keygen @@ -216,6 +234,8 @@ impl CenoAggregationProver { internal_program.into(), internal_vm.engine.config().pcs(), )); + let internal_vm_verifier_commit: [F; DIGEST_SIZE] = + internal_committed_exe.get_program_commit().into(); let internal_prover = new_local_prover::( vb.clone(), &internal_vm_pk, @@ -223,28 +243,81 @@ impl CenoAggregationProver { ) .expect("internal prover"); - // TODO: build root program (requires shard ram ec point is zero) - // TODO: add root prover + // Root prover + let root_vm_config = NativeConfig { + system: SystemConfig::new( + SBOX_SIZE.min(ROOT_MAX_CONSTRAINT_DEG), + MemoryConfig { + max_access_adapter_n: 8, + ..Default::default() + }, + ROOT_NUM_PUBLIC_VALUES, + ) + .without_continuations() + .with_max_segment_len((1 << 24) - 100) + .with_profiling(), + native: Native(false), + }; + + let mut root_engine = BabyBearPoseidon2RootEngine::new(root_fri_params); + root_engine.max_constraint_degree = ROOT_MAX_CONSTRAINT_DEG; + + let (root_vm, root_vm_pk) = VirtualMachine::<_, NativeCpuBuilder>::new_with_keygen( + root_engine, + Default::default(), + root_vm_config.clone(), + ) + .expect("root keygen"); + let root_program = CenoRootVmVerifierConfig { + leaf_fri_params, + internal_fri_params, + num_user_public_values: ROOT_NUM_PUBLIC_VALUES, + internal_vm_verifier_commit, + compiler_options: CompilerOptions::default().with_cycle_tracker(), + } + .build_program(&leaf_vm_vk, &internal_vm_vk); + let root_committed_exe = Arc::new(VmCommittedExe::::commit( + root_program.into(), + root_vm.engine.config().pcs(), + )); + let root_vm_pk = Arc::new(VmProvingKey { + fri_params: root_fri_params, + vm_config: root_vm_config, + vm_pk: root_vm_pk, + }); + let root_prover = new_local_prover::( + Default::default(), + &root_vm_pk, + root_committed_exe.exe.clone(), + ) + .expect("root prover"); + // Recursion keys let vk = CenoRecursionVerifierKeys { leaf_vm_vk, leaf_fri_params: leaf_vm_pk.fri_params, internal_vm_vk, internal_fri_params: internal_vm_pk.fri_params, internal_commit: internal_committed_exe.get_program_commit(), + root_vm_vk: root_vm_pk.vm_pk.get_vk(), }; - let pk = CenoRecursionProvingKeys { leaf_vm_pk, leaf_committed_exe, internal_vm_pk, internal_committed_exe, + root_vm_pk, + root_committed_exe, + permuted_root_pk: None, }; Self { base_vk: leaf_vm_verifier_config.vk, leaf_prover, internal_prover, + root_prover, + permuted_root_prover: None, + static_prover_verifier: StaticProverVerifier::new(), vk, pk, } @@ -253,7 +326,7 @@ impl CenoAggregationProver { pub fn generate_root_proof( &mut self, base_proofs: Vec>>, - ) -> VmStarkProof { + ) -> Proof { let aggregation_start_timestamp = Instant::now(); // Construct zkvm proof input @@ -360,14 +433,134 @@ impl CenoAggregationProver { ); println!("Aggregation - Final height: {:?}", internal_node_height); - // TODO: generate root proof from last internal proof + let last_internal = proofs.pop().unwrap(); - // Export e2e stark proof (used in verify_e2e_stark_proof) - VmStarkProof { - inner: proofs.pop().unwrap(), - user_public_values, + // Export last internal proof + let file = + File::create("./src/exports/internal_proof.bin").expect("Create export proof file"); + bincode::serialize_into(file, &last_internal).expect("failed to serialize internal proof"); + + // _todo: possible multi-layer wrapping for reducing AIR heights + + let root_input = RootVmVerifierInput { + proofs: vec![last_internal], + public_values: user_public_values, + }; + + // Initiate the root prover with AIR height permutation + // This step is skipped if the permuted root prover is already initiated + // (either from a run of `generate_root_proof`` or with a dummy) + let root_permutation_start_timestamp = Instant::now(); + if self.permuted_root_prover.is_none() { + self.init_root_prover_with_permutation(&root_input); } + println!( + "Root - AIR-permuted root prover is not initiated. Completed initiation at: {:?}", + root_permutation_start_timestamp.elapsed() + ); + + // Generate root proof (AIR-permuted) + let root_start_timestamp = Instant::now(); + let air_permuted_root_proof = SingleSegmentVmProver::prove( + self.permuted_root_prover.as_mut().unwrap(), + root_input.write(), + ROOT_VM_MAX_TRACE_HEIGHTS, + ) + .expect("root proof"); + + // Export root proof + let file = File::create("./src/exports/root_proof.bin").expect("Create export proof file"); + bincode::serialize_into(file, &air_permuted_root_proof) + .expect("failed to serialize root proof"); + + println!( + "Root - Completed root proof at: {:?}", + root_start_timestamp.elapsed() + ); + + air_permuted_root_proof } + + pub fn prove_static(&mut self, root_proof: &Proof) -> RawEvmProof { + let halo2_proof = self + .static_prover_verifier + .prove_static(root_proof, &self.pk); + + // Export halo2 proof + let file = File::create("./src/exports/halo2_proof.bin").expect("Create export proof file"); + bincode::serialize_into(file, &halo2_proof).expect("failed to serialize halo2 proof"); + + halo2_proof + } + + pub fn verify_static(&mut self, halo2_proof: RawEvmProof) -> Result<()> { + let _ = self.static_prover_verifier.verify_static(halo2_proof); + Ok(()) + } + + pub fn init_root_prover_with_permutation(&mut self, root_input: &RootVmVerifierInput) { + self.root_prover.reset_state(root_input.write()); + let mut trace_heights = ROOT_VM_MAX_TRACE_HEIGHTS.to_vec(); + + let num_public_values = self.root_prover.vm.config().as_ref().num_public_values as u32; + trace_heights[PUBLIC_VALUES_AIR_ID] = num_public_values; + + let state = self + .root_prover + .state + .take() + .expect("vm state should exist"); + let vm = &mut self.root_prover.vm; + vm.transport_init_memory_to_device(&state.memory); + + let PreflightExecutionOutput { + system_records, + record_arenas, + to_state: _, + } = vm + .execute_preflight( + &mut self.root_prover.interpreter, + state, + None, + &trace_heights, + ) + .expect("execute preflight"); + + let ctx = vm + .generate_proving_ctx(system_records, record_arenas) + .expect("proving context"); + let air_heights: Vec = ctx + .into_iter() + .map(|(_, air_ctx)| air_ctx.main_trace_height().next_power_of_two() as u32) + .collect(); + let root_air_perm = AirIdPermutation::compute(&air_heights); + let mut root_vm_pk = self.pk.root_vm_pk.vm_pk.clone(); + root_air_perm.permute(&mut root_vm_pk.per_air); + + let root_permuted_pk = RootVerifierProvingKey { + vm_pk: Arc::new(VmProvingKey { + fri_params: self.pk.root_vm_pk.fri_params, + vm_config: self.pk.root_vm_pk.vm_config.clone(), + vm_pk: root_vm_pk, + }), + root_committed_exe: self.pk.root_committed_exe.clone(), + air_heights, + }; + self.permuted_root_prover = + Some(RootVerifierLocalProver::new(&root_permuted_pk).expect("create a root prover")); + self.pk.permuted_root_pk = Some(Arc::new(root_permuted_pk)); + } +} + +pub fn verify_root_proof( + vk: &CenoRecursionVerifierKeys, + root_proof: &Proof, +) -> Result<(), VerificationError> { + let root_fri_params = + FriParameters::standard_with_100_bits_conjectured_security(ROOT_LOG_BLOWUP); + let root_engine = BabyBearPoseidon2RootEngine::new(root_fri_params); + root_engine.verify(&vk.root_vm_vk, root_proof)?; + Ok(()) } /// Config to generate leaf VM verifier program. @@ -387,16 +580,10 @@ impl CenoLeafVmVerifierConfig { builder.cycle_tracker_start("Verify Ceno ZKVM Proof"); let zkvm_proof = ceno_leaf_input.proof; let raw_pi = zkvm_proof.raw_pi.clone(); - let _calculated_shard_ec_sum = verify_zkvm_proof(&mut builder, zkvm_proof, &self.vk); + let shard_ec_sum = verify_zkvm_proof(&mut builder, zkvm_proof, &self.vk); builder.cycle_tracker_end("Verify Ceno ZKVM Proof"); builder.cycle_tracker_start("PV Operations"); - - // TODO: define our own VmVerifierPvs - for i in 0..DIGEST_SIZE { - builder.assign(&stark_pvs.app_commit[i], F::ZERO); - } - let pv = &raw_pi; let init_pc = { let arr = builder.get(pv, INIT_PC_IDX); @@ -414,7 +601,27 @@ impl CenoLeafVmVerifierConfig { builder.assign(&stark_pvs.connector.final_pc, end_pc); builder.assign(&stark_pvs.connector.exit_code, exit_code); - // TODO: assign shard_ec_sum to stark_pvs.shard_ec_sum + for i in 0..SEPTIC_EXTENSION_DEGREE { + let x_ext = builder.get(&shard_ec_sum.x.vs, i); + let y_ext = builder.get(&shard_ec_sum.y.vs, i); + let x_fs = builder.ext2felt(x_ext); + let y_fs = builder.ext2felt(y_ext); + let x = builder.get(&x_fs, 0); + let y = builder.get(&y_fs, 0); + + builder.assign(&stark_pvs.shard_ram_connector.x[i], x); + builder.assign(&stark_pvs.shard_ram_connector.y[i], y); + } + builder + .if_eq(shard_ec_sum.is_infinity, Usize::from(1)) + .then_or_else( + |builder| { + builder.assign(&stark_pvs.shard_ram_connector.is_infinity, F::ONE); + }, + |builder| { + builder.assign(&stark_pvs.shard_ram_connector.is_infinity, F::ZERO); + }, + ); // builder // .if_eq(ceno_leaf_input.is_last, Usize::from(1)) @@ -443,7 +650,6 @@ impl CenoLeafVmVerifierConfig { // ); // builder.assign(&prev_pc, end_pc); // }); - // }); for pv in stark_pvs.flatten() { @@ -468,6 +674,7 @@ pub struct CenoRecursionVerifierKeys { pub internal_vm_vk: MultiStarkVerifyingKey, pub internal_fri_params: FriParameters, pub internal_commit: Com, + pub root_vm_vk: MultiStarkVerifyingKey, } #[derive(Serialize, Deserialize)] @@ -480,6 +687,9 @@ pub struct CenoRecursionProvingKeys { pub leaf_committed_exe: Arc>, pub internal_vm_pk: Arc>, pub internal_committed_exe: Arc>, + pub root_vm_pk: Arc>, + pub root_committed_exe: Arc>, + pub permuted_root_pk: Option>, } impl Clone for CenoRecursionProvingKeys { @@ -489,6 +699,9 @@ impl Clone for CenoRecursionProvingKeys { leaf_committed_exe: self.leaf_committed_exe.clone(), internal_vm_pk: self.internal_vm_pk.clone(), internal_committed_exe: self.internal_committed_exe.clone(), + root_vm_pk: self.root_vm_pk.clone(), + root_committed_exe: self.root_committed_exe.clone(), + permuted_root_pk: self.permuted_root_pk.clone(), } } } @@ -501,6 +714,7 @@ impl CenoRecursionProvingKeys { internal_vm_vk: self.internal_vm_pk.vm_pk.get_vk(), internal_fri_params: self.internal_vm_pk.fri_params, internal_commit: self.internal_committed_exe.get_program_commit(), + root_vm_vk: self.root_vm_pk.vm_pk.get_vk(), } } } @@ -550,104 +764,6 @@ pub(crate) fn chunk_ceno_leaf_proof_inputs( ret } -// Source from OpenVm SDK::verify_e2e_stark_proof with abridged key -// See: https://github.com/openvm-org/openvm -pub fn verify_e2e_stark_proof( - k: &CenoRecursionVerifierKeys, - proof: &VmStarkProof, - _expected_exe_commit: &Bn254Fr, - _expected_vm_commit: &Bn254Fr, -) -> Result { - if proof.inner.per_air.len() < 3 { - return Err("Invalid number of AIRs: expected at least 3".into()); - } else if proof.inner.per_air[0].air_id != PROGRAM_AIR_ID { - return Err("Missing program AIR".into()); - } else if proof.inner.per_air[1].air_id != CONNECTOR_AIR_ID { - return Err("Missing connector AIR".into()); - } else if proof.inner.per_air[2].air_id != PUBLIC_VALUES_AIR_ID { - return Err("Missing public values AIR".into()); - } - let public_values_air_proof_data = &proof.inner.per_air[2]; - - let program_commit = proof.inner.commitments.main_trace[PROGRAM_CACHED_TRACE_INDEX].as_ref(); - let internal_commit: &[_; CHUNK] = &k.internal_commit.into(); - - let (vm_vk, fri_params, vm_commit) = if program_commit == internal_commit { - let internal_pvs: &InternalVmVerifierPvs<_> = public_values_air_proof_data - .public_values - .as_slice() - .borrow(); - if internal_commit != &internal_pvs.extra_pvs.internal_program_commit { - return Err(format!( - "Invalid internal program commit: expected {:?}, got {:?}", - internal_commit, internal_pvs.extra_pvs.internal_program_commit - )); - } - ( - &k.internal_vm_vk, - k.internal_fri_params, - internal_pvs.extra_pvs.leaf_verifier_commit, - ) - } else { - (&k.leaf_vm_vk, k.leaf_fri_params, *program_commit) - }; - let e = BabyBearPoseidon2Engine::new(fri_params); - e.verify(vm_vk, &proof.inner) - .expect("stark e2e proof verification should pass"); - - let pvs: &VmVerifierPvs<_> = - public_values_air_proof_data.public_values[..VmVerifierPvs::::width()].borrow(); - - // _debug: AIR ordering - // if let Some(exit_code) = pvs.connector.exit_code() { - // if exit_code != 0 { - // return Err(format!( - // "Invalid exit code: expected 0, got {}", - // exit_code - // )); - // } - // } else { - // return Err(format!("Program did not terminate")); - // } - - let hasher = vm_poseidon2_hasher(); - let _public_values_root = hasher.merkle_root(&proof.user_public_values); - // _debug: Public value commitment - // if public_values_root != pvs.public_values_commit { - // return Err(format!( - // "Invalid public values root: expected {:?}, got {:?}", - // pvs.public_values_commit, - // public_values_root - // )); - // } - - let exe_commit = compute_exe_commit( - &hasher, - &pvs.app_commit, - &pvs.memory.initial_root, - pvs.connector.initial_pc, - ); - let app_commit = AppExecutionCommit::from_field_commit(exe_commit, vm_commit); - let _exe_commit_bn254 = app_commit.app_exe_commit.to_bn254(); - let _vm_commit_bn254 = app_commit.app_vm_commit.to_bn254(); - - // _debug: execution commit checks - // if exe_commit_bn254 != *expected_exe_commit { - // return Err(eyre::eyre!( - // "Invalid app exe commit: expected {:?}, got {:?}", - // expected_exe_commit, - // exe_commit_bn254 - // )); - // } else if vm_commit_bn254 != *expected_vm_commit { - // return Err(eyre::eyre!( - // "Invalid app vm commit: expected {:?}, got {:?}", - // expected_vm_commit, - // vm_commit_bn254 - // )); - // } - Ok(app_commit) -} - /// Build Ceno's zkVM verifier program from vk in OpenVM's eDSL pub fn build_zkvm_verifier_program( vk: &ZKVMVerifyingKey>, @@ -706,9 +822,11 @@ pub fn verify_proofs( #[cfg(test)] mod tests { - use super::verify_e2e_stark_proof; use crate::{ - aggregation::{CenoAggregationProver, verify_proofs}, + aggregation::{ + CenoAggregationProver, F, RootVmVerifierInput, ZKVMProofInput, verify_proofs, + verify_root_proof, + }, zkvm_verifier::binding::E, }; use ceno_zkvm::{ @@ -717,15 +835,17 @@ mod tests { structs::ZKVMVerifyingKey, }; use mpcs::{Basefold, BasefoldRSParams}; - use openvm_stark_sdk::{config::setup_tracing_with_log_level, p3_bn254_fr::Bn254Fr}; - use p3::field::FieldAlgebra; + use openvm_sdk::SC; + use openvm_stark_backend::proof::Proof; + use openvm_stark_sdk::config::setup_tracing_with_log_level; use std::fs::File; - pub fn aggregation_inner_thread() { + pub fn root_proof_permutation_inner_thread() { setup_tracing_with_log_level(tracing::Level::WARN); let proof_path = "./src/imported/proof.bin"; let vk_path = "./src/imported/vk.bin"; + let internal_proof_path = "./src/exports/internal_proof.bin"; let zkvm_proofs: Vec>> = bincode::deserialize_from(File::open(proof_path).expect("Failed to open proof file")) @@ -734,18 +854,51 @@ mod tests { let vk: ZKVMVerifyingKey> = bincode::deserialize_from(File::open(vk_path).expect("Failed to open vk file")) .expect("Failed to deserialize vk file"); - let mut agg_prover = CenoAggregationProver::from_base_vk(vk); - let root_stark_proof = agg_prover.generate_root_proof(zkvm_proofs); // _debug - verify_e2e_stark_proof( - &agg_prover.vk, - &root_stark_proof, - &Bn254Fr::ZERO, - &Bn254Fr::ZERO, + let internal_proof: Proof = bincode::deserialize_from( + File::open(internal_proof_path).expect("Failed to open proof file"), ) - .expect("Verify e2e stark proof should pass"); + .expect("Failed to deserialize proof file"); + + let zkvm_proof_inputs: Vec = zkvm_proofs + .into_iter() + .enumerate() + .map(|(shard_id, p)| ZKVMProofInput::from_proof(shard_id, p, &agg_prover.base_vk)) + .collect(); + let user_public_values: Vec = zkvm_proof_inputs + .iter() + .flat_map(|p| p.raw_pi.iter().flat_map(|v| v.clone()).collect::>()) + .collect(); + let root_input = RootVmVerifierInput { + proofs: vec![internal_proof], + public_values: user_public_values, + }; + + agg_prover.init_root_prover_with_permutation(&root_input); + } + + pub fn aggregation_inner_thread() { + setup_tracing_with_log_level(tracing::Level::WARN); + + let proof_path = "./src/imported/proof.bin"; + let vk_path = "./src/imported/vk.bin"; + + let zkvm_proofs: Vec>> = + bincode::deserialize_from(File::open(proof_path).expect("Failed to open proof file")) + .expect("Failed to deserialize proof file"); + + let vk: ZKVMVerifyingKey> = + bincode::deserialize_from(File::open(vk_path).expect("Failed to open vk file")) + .expect("Failed to deserialize vk file"); + + let mut agg_prover = CenoAggregationProver::from_base_vk(vk); + let root_proof = agg_prover.generate_root_proof(zkvm_proofs); + let halo2_proof = agg_prover.prove_static(&root_proof); + agg_prover + .verify_static(halo2_proof) + .expect("halo2 proof is ok"); } pub fn verify_single_inner_thread() { @@ -785,9 +938,22 @@ mod tests { #[test] #[ignore = "need to generate proof first"] - pub fn test_aggregation() { + pub fn test_root_proof_permutation() { let stack_size = 256 * 1024 * 1024; // 64 MB + let handler = std::thread::Builder::new() + .stack_size(stack_size) + .spawn(root_proof_permutation_inner_thread) + .expect("Failed to spawn thread"); + + handler.join().expect("Thread panicked"); + } + + #[test] + #[ignore = "need to generate proof first"] + pub fn test_aggregation() { + let stack_size = 1024 * 1024 * 1024; // 512 MB + let handler = std::thread::Builder::new() .stack_size(stack_size) .spawn(aggregation_inner_thread) diff --git a/ceno_recursion/src/aggregation/root.rs b/ceno_recursion/src/aggregation/root.rs index 746672af6..f506e97ac 100644 --- a/ceno_recursion/src/aggregation/root.rs +++ b/ceno_recursion/src/aggregation/root.rs @@ -1,6 +1,170 @@ -// TODO: assert that the shard ram ec point is `PointAtInfinity` +use openvm_continuations::{C, F, SC}; +use openvm_instructions::program::Program; +use openvm_native_compiler::{ + conversion::CompilerOptions, + ir::{Array, Builder, Config, DIGEST_SIZE, Felt, Variable}, +}; +use openvm_native_recursion::{ + fri::TwoAdicFriPcsVariable, hints::Hintable, types::new_from_inner_multi_vk, + utils::const_fri_config, +}; +use openvm_stark_backend::keygen::types::MultiStarkVerifyingKey; +use openvm_stark_sdk::config::FriParameters; +use std::array; -// let is_sum_x_zero = ec_sum.x.is_zero(builder); -// let is_sum_y_zero = ec_sum.y.is_zero(builder); -// builder.assert_usize_eq(is_sum_x_zero, Usize::from(1)); -// builder.assert_usize_eq(is_sum_y_zero, Usize::from(1)); +use crate::aggregation::{SEPTIC_EXTENSION_DEGREE, internal::NonLeafVerifierVariables}; +use openvm_native_compiler::prelude::*; +use openvm_native_recursion::vars::StarkProofVariable; +use openvm_stark_sdk::openvm_stark_backend::{ + config::{StarkGenericConfig, Val}, + proof::Proof, +}; +use p3::field::FieldAlgebra; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize)] +pub struct CenoRootVmVerifierInput { + /// The proofs of leaf verifier or internal verifier in the execution order. + pub proofs: Vec>, + /// Public values to expose directly + pub public_values: Vec>, +} + +#[derive(DslVariable, Clone)] +pub struct CenoRootVmVerifierInputVariable { + /// The proofs of leaf verifier or internal verifier in the execution order. + pub proofs: Array>, + /// Public values to expose + pub public_values: Array>, +} + +impl Hintable for CenoRootVmVerifierInput { + type HintVariable = CenoRootVmVerifierInputVariable; + + fn read(builder: &mut Builder) -> Self::HintVariable { + let proofs = Vec::>::read(builder); + let public_values = Vec::>::read(builder); + Self::HintVariable { + proofs, + public_values, + } + } + + fn write(&self) -> Vec::N>> { + let mut stream = self.proofs.write(); + stream.extend(self.public_values.write()); + stream + } +} + +pub struct CenoRootVmVerifierConfig { + pub leaf_fri_params: FriParameters, + pub internal_fri_params: FriParameters, + pub num_user_public_values: usize, + pub internal_vm_verifier_commit: [F; DIGEST_SIZE], + pub compiler_options: CompilerOptions, +} + +#[derive(Debug)] +pub struct CenoRootVmVerifierPvs { + pub init_pc: T, + pub public_values: Vec, +} +impl CenoRootVmVerifierPvs { + pub fn flatten(self) -> Vec { + let mut ret = vec![]; + ret.extend(vec![self.init_pc]); + ret.extend(self.public_values); + ret + } + + pub fn from_flatten(flatten: Vec) -> Self { + let init_pc = flatten[1]; + let public_values = flatten[1..].to_vec(); + + Self { + init_pc, + public_values, + } + } +} + +impl CenoRootVmVerifierConfig { + pub fn build_program( + &self, + leaf_vm_vk: &MultiStarkVerifyingKey, + internal_vm_vk: &MultiStarkVerifyingKey, + ) -> Program { + let mut builder = Builder::::default(); + + builder.cycle_tracker_start("ReadProofsFromInput"); + let root_verifier_input = CenoRootVmVerifierInput::::read(&mut builder); + builder.cycle_tracker_end("ReadProofsFromInput"); + + let pvs = { + let leaf_advice = new_from_inner_multi_vk(leaf_vm_vk); + let internal_advice = new_from_inner_multi_vk(internal_vm_vk); + let CenoRootVmVerifierInputVariable { + proofs, + public_values, + } = root_verifier_input; + + builder.cycle_tracker_start("InitializePcsConst"); + let leaf_pcs = TwoAdicFriPcsVariable { + config: const_fri_config(&mut builder, &self.leaf_fri_params), + }; + let internal_pcs = TwoAdicFriPcsVariable { + config: const_fri_config(&mut builder, &self.internal_fri_params), + }; + builder.cycle_tracker_end("InitializePcsConst"); + let internal_program_commit = + array::from_fn(|i| builder.eval(self.internal_vm_verifier_commit[i])); + builder.cycle_tracker_start("VerifyProofs"); + let non_leaf_verifier = NonLeafVerifierVariables { + internal_program_commit, + leaf_pcs, + leaf_advice, + internal_pcs, + internal_advice, + }; + let (merged_pvs, _expected_leaf_commit) = + non_leaf_verifier.verify_internal_or_leaf_verifier_proofs(&mut builder, &proofs); + builder.cycle_tracker_end("VerifyProofs"); + + // Assert final ec sum is zero + let z: Felt<_> = builder.constant(::F::ZERO); + for i in 0..SEPTIC_EXTENSION_DEGREE { + builder.assert_felt_eq(merged_pvs.shard_ram_connector.x[i], z); + builder.assert_felt_eq(merged_pvs.shard_ram_connector.y[i], z); + } + let one: Felt<_> = builder.constant(::F::ONE); + builder.assert_felt_eq(merged_pvs.shard_ram_connector.is_infinity, one); + + /* _todo: Change merged pv operations, including checking final ec sum is infinity + // App Program should terminate + builder.assert_felt_eq(merged_pvs.connector.is_terminate, F::ONE); + // App Program should exit successfully + builder.assert_felt_eq(merged_pvs.connector.exit_code, F::ZERO); + */ + + builder.cycle_tracker_start("ExtractPublicValues"); + // builder.assert_usize_eq(public_values.len(), RVar::from(self.num_user_public_values)); + let public_values_vec: Vec> = (0..(self.num_user_public_values - 1)) // The init_pc is read separately + .map(|i| builder.get(&public_values, i)) + .collect(); + builder.cycle_tracker_end("ExtractPublicValues"); + + CenoRootVmVerifierPvs { + init_pc: merged_pvs.connector.initial_pc, + public_values: public_values_vec, + } + }; + + pvs.flatten() + .into_iter() + .for_each(|v| builder.commit_public_value(v)); + + builder.halt(); + builder.compile_isa_with_options(self.compiler_options) + } +} diff --git a/ceno_recursion/src/aggregation/statics.rs b/ceno_recursion/src/aggregation/statics.rs new file mode 100644 index 000000000..ab66a5c88 --- /dev/null +++ b/ceno_recursion/src/aggregation/statics.rs @@ -0,0 +1,194 @@ +use crate::{ + aggregation::{CenoRecursionProvingKeys, root::CenoRootVmVerifierPvs}, + zkvm_verifier::binding::F, +}; +use anyhow::Result; +use openvm_continuations::{ + RootSC, static_verifier::StaticVerifierPvHandler, verifier::common::types::SpecialAirIds, +}; +#[cfg(feature = "gpu")] +use openvm_cuda_backend::engine::GpuBabyBearPoseidon2Engine as BabyBearPoseidon2Engine; +use openvm_native_circuit::NativeConfig; +use openvm_native_compiler::ir::Builder; +use openvm_native_recursion::{ + config::outer::OuterConfig, + halo2::{ + RawEvmProof, + utils::{CacheHalo2ParamsReader, Halo2ParamsReader}, + wrapper::{FallbackEvmVerifier, Halo2WrapperProvingKey}, + }, + vars::StarkProofVariable, +}; +use openvm_sdk::{config::Halo2Config, keygen::Halo2ProvingKey, prover::Halo2Prover}; +use openvm_stark_backend::proof::Proof; +use openvm_stark_sdk::config::baby_bear_poseidon2::BabyBearPoseidon2Config; +use p3::field::FieldAlgebra; +use std::sync::Arc; + +pub const HALO2_VERIFIER_K: usize = 23; + +pub struct StaticProverVerifier { + config: Halo2Config, + params_reader: CacheHalo2ParamsReader, + static_pv_handler: StaticPvHandler, + prover: Option, // expensive to construct + verifier: Option, +} + +pub struct StaticPvHandler { + pub _init_pc: F, +} +impl StaticPvHandler { + pub fn init() -> Self { + Self { _init_pc: F::ZERO } + } +} + +impl StaticVerifierPvHandler for StaticPvHandler { + fn handle_public_values( + &self, + builder: &mut Builder, + input: &StarkProofVariable, + special_air_ids: &SpecialAirIds, + ) -> usize { + let pv_air = builder.get(&input.per_air, special_air_ids.public_values_air_id); + let public_values: Vec<_> = pv_air + .public_values + .vec() + .into_iter() + .map(|x| builder.cast_felt_to_var(x)) + .collect(); + let pvs = CenoRootVmVerifierPvs::from_flatten(public_values); + + pvs.public_values.len() + } +} +impl Default for StaticProverVerifier { + fn default() -> Self { + Self::new() + } +} +impl StaticProverVerifier { + pub fn new() -> Self { + let params_reader = CacheHalo2ParamsReader::new("./src/params/"); + let halo2_config = Halo2Config { + verifier_k: HALO2_VERIFIER_K, + wrapper_k: None, // Auto-tuned + profiling: false, + }; + let static_pv_handler = StaticPvHandler::init(); + Self { + config: halo2_config, + params_reader, + static_pv_handler, + prover: None, + verifier: None, + } + } + pub fn init( + &mut self, + root_proof: &Proof, + ceno_recursion_key: &CenoRecursionProvingKeys, + ) { + assert!(ceno_recursion_key.permuted_root_pk.is_some()); + + let verifier = ceno_recursion_key + .permuted_root_pk + .as_ref() + .unwrap() + .keygen_static_verifier( + &self.params_reader.read_params(self.config.verifier_k), + root_proof.clone(), + &self.static_pv_handler, + ); + let dummy_snark = verifier.generate_dummy_snark(&self.params_reader); + let wrapper = if let Some(wrapper_k) = self.config.wrapper_k { + Halo2WrapperProvingKey::keygen(&self.params_reader.read_params(wrapper_k), dummy_snark) + } else { + Halo2WrapperProvingKey::keygen_auto_tune(&self.params_reader, dummy_snark) + }; + + let halo2_pk = Halo2ProvingKey { + verifier: Arc::new(verifier), + wrapper: Arc::new(wrapper), + profiling: self.config.profiling, + }; + + // Update prover/verifier + let wrapper_k = halo2_pk.wrapper.pinning.metadata.config_params.k; + let params = self.params_reader.read_params(wrapper_k); + let static_verifier = halo2_pk.wrapper.generate_fallback_evm_verifier(¶ms); + let prover = Halo2Prover::new(&self.params_reader, halo2_pk); + + self.prover = Some(prover); + self.verifier = Some(static_verifier); + } + + pub fn prove_static( + &mut self, + root_proof: &Proof, + ceno_recursion_key: &CenoRecursionProvingKeys, + ) -> RawEvmProof { + if self.prover.is_none() { + self.init(root_proof, ceno_recursion_key); + } + self.prover + .as_ref() + .unwrap() + .prove_for_evm(root_proof) + .try_into() + .expect("generate halo2 proof") + } + + pub fn verify_static(&mut self, proof: RawEvmProof) -> Result<()> { + let static_verifier = self + .verifier + .as_ref() + .expect("static verifier must be initiated"); + Halo2WrapperProvingKey::evm_verify(static_verifier, &proof).unwrap(); + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use crate::{aggregation::CenoAggregationProver, zkvm_verifier::binding::E}; + use ceno_zkvm::structs::ZKVMVerifyingKey; + use mpcs::{Basefold, BasefoldRSParams}; + use openvm_continuations::RootSC; + use openvm_stark_backend::proof::Proof; + use openvm_stark_sdk::config::setup_tracing_with_log_level; + use std::fs::File; + + pub fn test_static_verifier_inner_thread() { + setup_tracing_with_log_level(tracing::Level::WARN); + + let vk_path = "./src/imported/vk.bin"; + let vk: ZKVMVerifyingKey> = + bincode::deserialize_from(File::open(vk_path).expect("Failed to open vk file")) + .expect("Failed to deserialize vk file"); + let mut agg_prover = CenoAggregationProver::from_base_vk(vk); + + let root_proof_path = "./src/exports/root_proof.bin"; + let root_proof: Proof = bincode::deserialize_from( + File::open(root_proof_path).expect("Failed to open proof file"), + ) + .expect("Deserialize root proof"); + + // let halo2_proof = agg_prover.prove_static(&root_proof); + // agg_prover.verify_static(halo2_proof); + } + + #[test] + // #[ignore = "need to generate proof first"] + pub fn test_static_verifier() { + let stack_size = 256 * 1024 * 1024; // 64 MB + + let handler = std::thread::Builder::new() + .stack_size(stack_size) + .spawn(test_static_verifier_inner_thread) + .expect("Failed to spawn thread"); + + handler.join().expect("Thread panicked"); + } +} diff --git a/ceno_recursion/src/aggregation/types.rs b/ceno_recursion/src/aggregation/types.rs index be88a6fb8..cf244aec2 100644 --- a/ceno_recursion/src/aggregation/types.rs +++ b/ceno_recursion/src/aggregation/types.rs @@ -1,38 +1,111 @@ -// TODO: enable this -// #[derive(Debug, Clone, AlignedBorrow)] -// pub struct ContinuationPvs { -// pub sum: SepticPoint, -// } - -// impl ContinuationPvs> { -// pub fn uninit(builder: &mut Builder) -> Self { -// todo!() -// } -// } - -// #[derive(Debug, Clone, AlignedBorrow)] -// #[repr(C)] -// pub struct VmVerifierPvs { -// /// The merged execution state of all the segments this circuit aggregates. -// pub connector: VmConnectorPvs, -// /// The state before/after all the segments this circuit aggregates. -// // (TODO) pub shard_ram_connector: ContinuationPvs, -// /// The merkle root of all public values. This is only meaningful when the last segment is -// /// aggregated by this circuit. -// pub public_values_commit: [T; DIGEST_SIZE], -// } - -// impl VmVerifierPvs> { -// pub fn uninit(builder: &mut Builder) -> Self { -// VmVerifierPvs { -// connector: VmConnectorPvs { -// initial_pc: builder.uninit(), -// final_pc: builder.uninit(), -// exit_code: builder.uninit(), -// is_terminate: builder.uninit(), -// }, -// // shard_ram_connector: builder.uninit(), -// public_values_commit: array::from_fn(|_| builder.uninit()), -// } -// } -// } +use ceno_zkvm::scheme::constants::SEPTIC_EXTENSION_DEGREE; +use openvm_circuit::{circuit_derive::AlignedBorrow, system::connector::VmConnectorPvs}; +use openvm_native_compiler::ir::{Builder, Config, DIGEST_SIZE, Felt, Variable}; +use p3::field::PrimeField32; +use std::{array, borrow::BorrowMut}; + +#[derive(Clone, Copy, AlignedBorrow)] +pub struct ContinuationPvs { + pub x: [T; SEPTIC_EXTENSION_DEGREE], + pub y: [T; SEPTIC_EXTENSION_DEGREE], + pub is_infinity: T, +} + +impl ContinuationPvs> { + pub fn uninit>(builder: &mut Builder) -> Self { + Self { + x: array::from_fn(|_| builder.uninit()), + y: array::from_fn(|_| builder.uninit()), + is_infinity: Felt::uninit(builder), + } + } +} + +#[derive(Clone, Copy, AlignedBorrow)] +#[repr(C)] +pub struct VmVerifierPvs { + /// The merged execution state of all the segments this circuit aggregates. + pub connector: VmConnectorPvs, + /// The state before/after all the segments this circuit aggregates. + pub shard_ram_connector: ContinuationPvs, + /// The merkle root of all public values. This is only meaningful when the last segment is + /// aggregated by this circuit. + pub public_values_commit: [T; DIGEST_SIZE], +} + +impl VmVerifierPvs> { + pub fn uninit>(builder: &mut Builder) -> Self { + VmVerifierPvs { + connector: VmConnectorPvs { + initial_pc: builder.uninit(), + final_pc: builder.uninit(), + exit_code: builder.uninit(), + is_terminate: builder.uninit(), + }, + shard_ram_connector: ContinuationPvs::uninit(builder), + public_values_commit: array::from_fn(|_| builder.uninit()), + } + } +} + +impl VmVerifierPvs> { + pub fn flatten(self) -> Vec> { + let mut v = vec![Felt(0, Default::default()); VmVerifierPvs::::width()]; + *v.as_mut_slice().borrow_mut() = self; + v + } +} + +/// Aggregated state of all segments +#[derive(Clone, Copy, AlignedBorrow)] +#[repr(C)] +pub struct InternalVmVerifierPvs { + pub vm_verifier_pvs: VmVerifierPvs, + pub extra_pvs: InternalVmVerifierExtraPvs, +} + +/// Extra PVs for internal VM verifier except VmVerifierPvs. +#[derive(Clone, Copy, AlignedBorrow)] +#[repr(C)] +pub struct InternalVmVerifierExtraPvs { + /// The commitment of the leaf verifier program. + pub leaf_verifier_commit: [T; DIGEST_SIZE], + /// For recursion verification, a program need its own commitment, but its own commitment + /// cannot be hardcoded inside the program itself. So the commitment has to be read from + /// external and be committed. + pub internal_program_commit: [T; DIGEST_SIZE], +} + +impl InternalVmVerifierPvs> { + pub fn uninit>(builder: &mut Builder) -> Self { + Self { + vm_verifier_pvs: VmVerifierPvs::>::uninit(builder), + extra_pvs: InternalVmVerifierExtraPvs::>::uninit(builder), + } + } +} + +impl InternalVmVerifierPvs> { + pub fn flatten(self) -> Vec> { + let mut v = vec![Felt(0, Default::default()); InternalVmVerifierPvs::::width()]; + *v.as_mut_slice().borrow_mut() = self; + v + } +} + +impl InternalVmVerifierExtraPvs> { + pub fn uninit>(builder: &mut Builder) -> Self { + Self { + leaf_verifier_commit: array::from_fn(|_| builder.uninit()), + internal_program_commit: array::from_fn(|_| builder.uninit()), + } + } +} + +impl InternalVmVerifierExtraPvs> { + pub fn flatten(self) -> Vec> { + let mut v = vec![Felt(0, Default::default()); InternalVmVerifierExtraPvs::::width()]; + *v.as_mut_slice().borrow_mut() = self; + v + } +} diff --git a/ceno_recursion/src/arithmetics/mod.rs b/ceno_recursion/src/arithmetics/mod.rs index 4d78d0315..5635b68d6 100644 --- a/ceno_recursion/src/arithmetics/mod.rs +++ b/ceno_recursion/src/arithmetics/mod.rs @@ -1063,7 +1063,7 @@ mod tests { let system_config = SystemConfig::default() .with_public_values(20) .with_max_segment_len((1 << 22) - 100); - let config = NativeConfig::new(system_config, Native); + let config = NativeConfig::new(system_config, Native(true)); let executor = VmExecutor::::new(config).expect("executor initiation"); let exe = VmExe::new(program); diff --git a/ceno_recursion/src/basefold_verifier/hash.rs b/ceno_recursion/src/basefold_verifier/hash.rs index d13d790ac..d177d20b4 100644 --- a/ceno_recursion/src/basefold_verifier/hash.rs +++ b/ceno_recursion/src/basefold_verifier/hash.rs @@ -74,7 +74,7 @@ mod tests { // configure the VM executor let system_config = SystemConfig::default().with_max_segment_len(1 << 20); - let config = NativeConfig::new(system_config, Native); + let config = NativeConfig::new(system_config, Native(true)); let executor = VmExecutor::new(config).unwrap(); // prepare input diff --git a/ceno_recursion/src/basefold_verifier/mmcs.rs b/ceno_recursion/src/basefold_verifier/mmcs.rs index d4a59e0ad..973a67501 100644 --- a/ceno_recursion/src/basefold_verifier/mmcs.rs +++ b/ceno_recursion/src/basefold_verifier/mmcs.rs @@ -255,7 +255,7 @@ pub mod tests { let system_config = SystemConfig::default() .with_public_values(4) .with_max_segment_len((1 << 25) - 100); - let config = NativeConfig::new(system_config, Native); + let config = NativeConfig::new(system_config, Native(true)); let executor = VmExecutor::::new(config).unwrap(); diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 6bf40113f..a158fa4b7 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -944,7 +944,7 @@ pub mod tests { let system_config = SystemConfig::default() .with_public_values(4) .with_max_segment_len((1 << 25) - 100); - let config = NativeConfig::new(system_config, Native); + let config = NativeConfig::new(system_config, Native(true)); let exe = VmExe::new(program); let executor = VmExecutor::::new(config.clone()).unwrap(); diff --git a/ceno_recursion/src/basefold_verifier/rs.rs b/ceno_recursion/src/basefold_verifier/rs.rs index c70ce2d49..305753a30 100644 --- a/ceno_recursion/src/basefold_verifier/rs.rs +++ b/ceno_recursion/src/basefold_verifier/rs.rs @@ -274,7 +274,7 @@ pub mod tests { let system_config = SystemConfig::default() .with_public_values(4) .with_max_segment_len((1 << 25) - 100); - let config = NativeConfig::new(system_config, Native); + let config = NativeConfig::new(system_config, Native(true)); let executor = VmExecutor::::new(config).unwrap(); let exe = VmExe::new(program); diff --git a/ceno_recursion/src/basefold_verifier/verifier.rs b/ceno_recursion/src/basefold_verifier/verifier.rs index c343660d0..6ce433eab 100644 --- a/ceno_recursion/src/basefold_verifier/verifier.rs +++ b/ceno_recursion/src/basefold_verifier/verifier.rs @@ -374,7 +374,7 @@ pub mod tests { .with_public_values(4) .with_max_segment_len((1 << 25) - 100) .with_profiling(); - let config = NativeConfig::new(system_config, Native); + let config = NativeConfig::new(system_config, Native(true)); // _debug // let executor = VmExecutor::::new(config); diff --git a/ceno_recursion/src/bin/e2e_aggregate.rs b/ceno_recursion/src/bin/e2e_aggregate.rs index 7f6e94120..ca5235877 100644 --- a/ceno_recursion/src/bin/e2e_aggregate.rs +++ b/ceno_recursion/src/bin/e2e_aggregate.rs @@ -270,5 +270,6 @@ fn main() { let vk = result.vk.expect("PrepSanityCheck should yield vk."); let mut agg_prover = CenoAggregationProver::from_base_vk(vk); - let _ = agg_prover.generate_root_proof(zkvm_proofs); + let root_proof = agg_prover.generate_root_proof(zkvm_proofs); + let _halo2_proof = agg_prover.prove_static(&root_proof); } diff --git a/ceno_recursion/src/extensions/mod.rs b/ceno_recursion/src/extensions/mod.rs index 6e92fbd60..d518774f8 100644 --- a/ceno_recursion/src/extensions/mod.rs +++ b/ceno_recursion/src/extensions/mod.rs @@ -49,7 +49,7 @@ mod tests { .with_public_values(4) .with_max_segment_len((1 << 25) - 100); system_config.profiling = true; - let config = NativeConfig::new(system_config, Native); + let config = NativeConfig::new(system_config, Native(true)); let executor = VmExecutor::::new(config).unwrap(); let exe = VmExe::new(program); diff --git a/ceno_recursion/src/zkvm_verifier/binding.rs b/ceno_recursion/src/zkvm_verifier/binding.rs index ab7cad5f4..8492e5f18 100644 --- a/ceno_recursion/src/zkvm_verifier/binding.rs +++ b/ceno_recursion/src/zkvm_verifier/binding.rs @@ -11,7 +11,7 @@ use crate::{ }, }; use ceno_zkvm::{ - scheme::{ZKVMChipProof, ZKVMProof}, + scheme::{ZKVMChipProof, ZKVMProof, constants::SEPTIC_EXTENSION_DEGREE}, structs::{EccQuarkProof, TowerProofs, ZKVMVerifyingKey}, }; use gkr_iop::gkr::{GKRProof, layer::sumcheck_layer::LayerProof}; @@ -858,6 +858,27 @@ pub struct SepticPointVariable { pub is_infinity: Usize, } +impl SepticPointVariable { + pub fn zero(builder: &mut Builder) -> Self { + let r = SepticPointVariable { + x: SepticExtensionVariable { + vs: builder.dyn_array(7), + }, + y: SepticExtensionVariable { + vs: builder.dyn_array(7), + }, + is_infinity: Usize::uninit(builder), + }; + let z: Ext = builder.constant(C::EF::ZERO); + for i in 0..SEPTIC_EXTENSION_DEGREE { + builder.set(&r.x.vs, i, z); + builder.set(&r.y.vs, i, z); + } + builder.assign(&r.is_infinity, Usize::from(1)); + r + } +} + pub struct EccQuarkProofInput { pub zerocheck_proof: IOPProof, pub num_instances: usize, diff --git a/ceno_recursion/src/zkvm_verifier/verifier.rs b/ceno_recursion/src/zkvm_verifier/verifier.rs index 68c935fdb..5f06d10ca 100644 --- a/ceno_recursion/src/zkvm_verifier/verifier.rs +++ b/ceno_recursion/src/zkvm_verifier/verifier.rs @@ -236,15 +236,7 @@ pub fn verify_zkvm_proof>( let witin_openings: Array> = builder.dyn_array(proofs_len.clone()); let fixed_openings: Array> = builder.dyn_array(proofs_len); - let shard_ec_sum = SepticPointVariable { - x: SepticExtensionVariable { - vs: builder.dyn_array(7), - }, - y: SepticExtensionVariable { - vs: builder.dyn_array(7), - }, - is_infinity: Usize::uninit(builder), - }; + let shard_ec_sum = SepticPointVariable::zero(builder); let num_chips_verified: Usize = builder.eval(C::N::ZERO); let num_fixed_openings: Usize = builder.eval(C::N::ZERO); @@ -561,16 +553,7 @@ pub fn verify_chip_proof( &num_var_with_rotation, log2_num_instances.clone() + Usize::from(composed_cs.rotation_vars().unwrap_or(0)), ); - - let shard_ec_sum = SepticPointVariable { - x: SepticExtensionVariable { - vs: builder.dyn_array(7), - }, - y: SepticExtensionVariable { - vs: builder.dyn_array(7), - }, - is_infinity: Usize::uninit(builder), - }; + let shard_ec_sum = SepticPointVariable::zero(builder); if composed_cs.has_ecc_ops() { builder.assert_nonzero(&chip_proof.has_ecc_proof); @@ -1960,7 +1943,11 @@ pub fn septic_ext_squared( builder: &mut Builder, a: &SepticExtensionVariable, ) -> SepticExtensionVariable { + let z: Ext = builder.constant(C::EF::ZERO); let r: Array> = builder.dyn_array(SEPTIC_EXTENSION_DEGREE); + for i in 0..SEPTIC_EXTENSION_DEGREE { + builder.set(&r, i, z); + } let two_ext: Ext = builder.constant(C::EF::TWO); let five_ext: Ext = builder.constant(C::EF::from_canonical_u32(5)); @@ -2039,7 +2026,11 @@ pub fn septic_ext_mul( a: &SepticExtensionVariable, b: &SepticExtensionVariable, ) -> SepticExtensionVariable { + let z: Ext = builder.constant(C::EF::ZERO); let r: Array> = builder.dyn_array(SEPTIC_EXTENSION_DEGREE); + for i in 0..SEPTIC_EXTENSION_DEGREE { + builder.set(&r, i, z); + } let two_ext: Ext = builder.constant(C::EF::TWO); let five_ext: Ext = builder.constant(C::EF::from_canonical_u32(5)); @@ -2290,10 +2281,8 @@ pub fn add_septic_points_in_place( let y_sum = septic_ext_add(builder, &right.y, &left.y); let is_y_sum_zero = y_sum.is_zero(builder); builder.assert_usize_eq(is_y_sum_zero, Usize::from(1)); - let zero_ext_arr: Array> = - builder.dyn_array(SEPTIC_EXTENSION_DEGREE); - builder.assign(&left.x, zero_ext_arr.clone()); - builder.assign(&left.y, zero_ext_arr.clone()); + builder.assign(&left.x, y_sum.clone()); + builder.assign(&left.y, y_sum.clone()); builder.assign(&left.is_infinity, Usize::from(1)); }, );