From c4ea9064321679788f3fb5496e739c942ac7d90f Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Sun, 30 Jul 2023 10:51:40 +0800 Subject: [PATCH 01/39] Update to use new scroll-prover in libzkp. --- common/libzkp/impl/Cargo.lock | 4022 ++++++----------- common/libzkp/impl/Cargo.toml | 16 +- common/libzkp/impl/rustfmt.toml | 9 + common/libzkp/impl/src/batch.rs | 88 + common/libzkp/impl/src/chunk.rs | 62 + common/libzkp/impl/src/lib.rs | 24 +- common/libzkp/impl/src/prove.rs | 58 - common/libzkp/impl/src/utils.rs | 24 + common/libzkp/impl/src/verify.rs | 44 - .../{verifier.go => batch_verifier.go} | 0 ...erifier_test.go => batch_verifier_test.go} | 0 .../internal/logic/verifier/chunk_verifier.go | 72 + .../logic/verifier/chunk_verifier_test.go | 45 + prover/.gitignore | 4 +- prover/core/{prover.go => batch_prover.go} | 2 - .../{prover_test.go => batch_prover_test.go} | 4 +- prover/core/chunk_prover.go | 102 + prover/core/chunk_prover_test.go | 63 + 18 files changed, 1834 insertions(+), 2805 deletions(-) create mode 100644 common/libzkp/impl/rustfmt.toml create mode 100644 common/libzkp/impl/src/batch.rs create mode 100644 common/libzkp/impl/src/chunk.rs delete mode 100644 common/libzkp/impl/src/prove.rs create mode 100644 common/libzkp/impl/src/utils.rs delete mode 100644 common/libzkp/impl/src/verify.rs rename coordinator/internal/logic/verifier/{verifier.go => batch_verifier.go} (100%) rename coordinator/internal/logic/verifier/{verifier_test.go => batch_verifier_test.go} (100%) create mode 100644 coordinator/internal/logic/verifier/chunk_verifier.go create mode 100644 coordinator/internal/logic/verifier/chunk_verifier_test.go rename prover/core/{prover.go => batch_prover.go} (96%) rename prover/core/{prover_test.go => batch_prover_test.go} (87%) create mode 100644 prover/core/chunk_prover.go create mode 100644 prover/core/chunk_prover_test.go diff --git a/common/libzkp/impl/Cargo.lock b/common/libzkp/impl/Cargo.lock index 3a695e7abb..e0dadf53ea 100644 --- a/common/libzkp/impl/Cargo.lock +++ b/common/libzkp/impl/Cargo.lock @@ -2,32 +2,13 @@ # It is not intended for manual editing. version = 3 -[[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 = "addr2line" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" -dependencies = [ - "gimli 0.26.2", -] - [[package]] name = "addr2line" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" dependencies = [ - "gimli 0.27.0", + "gimli", ] [[package]] @@ -48,13 +29,33 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "aggregator" +version = "0.1.0" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" +dependencies = [ + "ark-std", + "env_logger 0.10.0", + "eth-types", + "ethers-core", + "halo2_proofs", + "itertools", + "log", + "rand", + "serde", + "serde_json", + "snark-verifier", + "snark-verifier-sdk", + "zkevm-circuits", +] + [[package]] name = "ahash" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.7", + "getrandom", "once_cell", "version_check", ] @@ -66,34 +67,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" dependencies = [ "cfg-if 1.0.0", - "getrandom 0.2.7", "once_cell", "version_check", ] [[package]] name = "aho-corasick" -version = "0.7.18" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" dependencies = [ "memchr", ] [[package]] -name = "ansi_term" -version = "0.12.1" +name = "android-tzdata" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "winapi", + "libc", ] [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" + +[[package]] +name = "arc-swap" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "ark-std" @@ -102,48 +114,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" dependencies = [ "num-traits", - "rand 0.8.5", + "rand", ] -[[package]] -name = "array-bytes" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" - [[package]] name = "array-init" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6945cc5422176fc5e602e590c2878d2c2acd9a4fe20a4baa7c28022521698ec6" +checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc" [[package]] name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "arrayvec" -version = "0.5.2" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "async-trait" -version = "0.1.61" +version = "0.1.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "705339e0e4a9690e2908d2b3d049d85682cf19fbd5782494498fbf7003a6a282" +checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.27", ] [[package]] @@ -163,21 +163,21 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] [[package]] name = "auto_impl" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a8c1df849285fbacd587de7818cc7d13be6cd2cbcd47a04fb1801b0e2706e33" +checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -188,16 +188,16 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.67" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" dependencies = [ - "addr2line 0.19.0", + "addr2line", "cc", "cfg-if 1.0.0", "libc", - "miniz_oxide 0.6.2", - "object 0.30.1", + "miniz_oxide", + "object", "rustc-demangle", ] @@ -213,19 +213,13 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" -[[package]] -name = "base58" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" - [[package]] name = "base58check" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ee2fe4c9a0c84515f136aaae2466744a721af6d63339c18689d9e995d74d99b" dependencies = [ - "base58 0.1.0", + "base58", "sha2 0.8.2", ] @@ -237,15 +231,15 @@ checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.0" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "base64ct" @@ -274,6 +268,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" + [[package]] name = "bitvec" version = "0.17.4" @@ -298,11 +298,11 @@ dependencies = [ [[package]] name = "blake2" -version = "0.10.4" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest 0.10.3", + "digest 0.10.7", ] [[package]] @@ -312,7 +312,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" dependencies = [ "arrayref", - "arrayvec 0.7.2", + "arrayvec", "constant_time_eq", ] @@ -345,16 +345,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ "block-padding 0.2.1", - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] name = "block-buffer" -version = "0.10.2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -373,48 +373,71 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] -name = "bounded-collections" -version = "0.1.4" +name = "borsh" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de2aff4807e40f478132150d80b031f2461d88f061851afcab537d7600c24120" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" dependencies = [ - "log", - "parity-scale-codec", - "scale-info", - "serde", + "borsh-derive", + "hashbrown 0.13.2", ] [[package]] -name = "bs58" -version = "0.4.0" +name = "borsh-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +dependencies = [ + "borsh-derive-internal", + "borsh-schema-derive-internal", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] [[package]] -name = "bstr" -version = "0.2.17" +name = "borsh-derive-internal" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" dependencies = [ - "memchr", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + [[package]] name = "bumpalo" -version = "3.8.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "bus-mapping" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=v0.3#c1c400436fd60b2e80e223e4c10cbff38d41e307" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" dependencies = [ "eth-types", "ethers-core", "ethers-providers", "ethers-signers", - "fp-evm", "gadgets", "halo2_proofs", "hex", @@ -424,14 +447,9 @@ dependencies = [ "log", "mock", "once_cell", - "pallet-evm-precompile-blake2", - "pallet-evm-precompile-bn128", - "pallet-evm-precompile-curve25519", - "pallet-evm-precompile-modexp", - "pallet-evm-precompile-simple", "poseidon-circuit", - "primitive-types 0.12.1", - "rand 0.8.5", + "rand", + "revm-precompile", "serde", "serde_json", "strum", @@ -440,9 +458,9 @@ dependencies = [ [[package]] name = "byte-slice-cast" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c5fdd0166095e1d463fc6cc01aa8ce547ad77a4e84d42eb6762b084e28067e" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "byte-tools" @@ -456,6 +474,28 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +[[package]] +name = "bytecheck" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "byteorder" version = "1.4.3" @@ -473,18 +513,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.73" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" - -[[package]] -name = "cfg-expr" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" -dependencies = [ - "smallvec", -] +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" [[package]] name = "cfg-if" @@ -500,85 +531,26 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" dependencies = [ - "libc", - "num-integer", + "android-tzdata", + "iana-time-zone", + "js-sys", "num-traits", "time", + "wasm-bindgen", "winapi", ] -[[package]] -name = "chrono-tz" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58549f1842da3080ce63002102d5bc954c7bc843d4f47818e642abdc36253552" -dependencies = [ - "chrono", - "chrono-tz-build", - "phf", -] - -[[package]] -name = "chrono-tz-build" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db058d493fb2f65f41861bfed7e3fe6335264a9f0f92710cab5bdf01fef09069" -dependencies = [ - "parse-zoneinfo", - "phf", - "phf_codegen", -] - [[package]] name = "cipher" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "clap" -version = "3.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1fe12880bae935d142c8702d500c63a4e8634b6c3c57ad72bf978fc7b6249a" -dependencies = [ - "atty", - "bitflags", - "clap_derive", - "clap_lex", - "indexmap", - "once_cell", - "strsim", - "termcolor", - "textwrap", -] - -[[package]] -name = "clap_derive" -version = "3.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6db9e867166a43a53f7199b5e4d1f522a1e5bd626654be263c999ce59df39a" -dependencies = [ - "heck", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87eba3c8c7f42ef17f6c659fc7416d0f4758cd3e58861ee63c5fa4a4dde649e4" -dependencies = [ - "os_str_bytes", + "generic-array 0.14.7", ] [[package]] @@ -590,13 +562,13 @@ dependencies = [ "bincode", "bs58", "coins-core", - "digest 0.10.3", - "getrandom 0.2.7", + "digest 0.10.7", + "getrandom", "hmac 0.12.1", "k256", "lazy_static", "serde", - "sha2 0.10.2", + "sha2 0.10.7", "thiserror", ] @@ -608,12 +580,12 @@ checksum = "2a11892bcac83b4c6e95ab84b5b06c76d9d70ad73548dd07418269c5c7977171" dependencies = [ "bitvec 0.17.4", "coins-bip32", - "getrandom 0.2.7", + "getrandom", "hex", "hmac 0.12.1", "pbkdf2 0.11.0", - "rand 0.8.5", - "sha2 0.10.2", + "rand", + "sha2 0.10.7", "thiserror", ] @@ -627,28 +599,34 @@ dependencies = [ "base64 0.12.3", "bech32", "blake2", - "digest 0.10.3", - "generic-array 0.14.6", + "digest 0.10.7", + "generic-array 0.14.7", "hex", "ripemd", "serde", "serde_derive", - "sha2 0.10.2", - "sha3 0.10.1", + "sha2 0.10.7", + "sha3 0.10.8", "thiserror", ] [[package]] name = "const-oid" -version = "0.9.0" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722e23542a15cea1f65d4a1419c4cfd7a26706c70871a13a04238ca3f40f1661" +checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" [[package]] name = "constant_time_eq" -version = "0.2.5" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" + +[[package]] +name = "convert_case" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "convert_case" @@ -657,46 +635,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb4a24b1aaf0fd0ce8b45161144d6f42cd91677fd5940fd431183eb023b3a2b8" [[package]] -name = "cpp_demangle" -version = "0.3.5" +name = "core-foundation-sys" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" -dependencies = [ - "cfg-if 1.0.0", -] +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.2" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ "libc", ] [[package]] -name = "cranelift-entity" -version = "0.93.1" +name = "crc32fast" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf583f7b093f291005f9fb1323e2c37f6ee4c7909e39ce016b2e8360d461705" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ - "serde", + "cfg-if 1.0.0", ] [[package]] -name = "crc32fast" -version = "1.3.2" +name = "crossbeam" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" dependencies = [ "cfg-if 1.0.0", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", ] [[package]] name = "crossbeam-channel" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -704,9 +684,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ "cfg-if 1.0.0", "crossbeam-epoch", @@ -715,26 +695,34 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.9" +version = "0.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" dependencies = [ "autocfg", "cfg-if 1.0.0", "crossbeam-utils", "memoffset", - "once_cell", "scopeguard", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" -version = "0.8.9" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" dependencies = [ "cfg-if 1.0.0", - "once_cell", ] [[package]] @@ -745,23 +733,23 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f2b443d17d49dad5ef0ede301c3179cc923b8822f3393b4d2c28c269dd4a122" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.6", - "rand_core 0.6.3", + "generic-array 0.14.7", + "rand_core", "subtle", "zeroize", ] [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "typenum", ] @@ -771,17 +759,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.6", - "subtle", -] - -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "subtle", ] @@ -794,45 +772,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "curve25519-dalek" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" -dependencies = [ - "byteorder", - "digest 0.8.1", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek" -version = "4.0.0-pre.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4033478fbf70d6acf2655ac70da91ee65852d69daf7a67bf7a2f518fb47aafcf" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.3", - "subtle", - "zeroize", -] - [[package]] name = "darling" version = "0.13.4" @@ -854,7 +793,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 1.0.109", ] [[package]] @@ -865,28 +804,28 @@ checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "der" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dd2ae565c0a381dde7fade45fce95984c568bdcb4700a4fdbe3175e0380b2f" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", "zeroize", ] [[package]] -name = "derive-syn-parse" -version = "0.1.5" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -895,17 +834,13 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ + "convert_case 0.4.0", "proc-macro2", "quote", - "syn", + "rustc_version", + "syn 1.0.109", ] -[[package]] -name = "deunicode" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690" - [[package]] name = "digest" version = "0.7.6" @@ -930,16 +865,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] name = "digest" -version = "0.10.3" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.2", + "block-buffer 0.10.4", "crypto-common", "subtle", ] @@ -951,57 +886,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "dyn-clonable" -version = "0.9.0" +name = "ecdsa" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" -dependencies = [ - "dyn-clonable-impl", - "dyn-clone", -] - -[[package]] -name = "dyn-clonable-impl" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "dyn-clone" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" - -[[package]] -name = "ecc" -version = "0.1.0" -source = "git+https://github.com/privacy-scaling-explorations/halo2wrong?tag=v2023_02_02#5905a20b62fcd9f6c269416a39c80de7ced8fb02" -dependencies = [ - "group", - "integer", - "num-bigint", - "num-integer", - "num-traits", - "rand 0.8.5", - "subtle", -] - -[[package]] -name = "ecdsa" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85789ce7dfbd0f0624c07ef653a08bb2ebf43d3e16531361f46d36dd54334fed" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ "der", "elliptic-curve", @@ -1009,46 +897,11 @@ dependencies = [ "signature", ] -[[package]] -name = "ed25519" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369" -dependencies = [ - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek 3.2.0", - "ed25519", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-zebra" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" -dependencies = [ - "curve25519-dalek 3.2.0", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.3", - "sha2 0.9.9", - "zeroize", -] - [[package]] name = "either" -version = "1.6.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" @@ -1059,12 +912,12 @@ dependencies = [ "base16ct", "crypto-bigint", "der", - "digest 0.10.3", + "digest 0.10.7", "ff", - "generic-array 0.14.6", + "generic-array 0.14.7", "group", "pkcs8", - "rand_core 0.6.3", + "rand_core", "sec1", "subtle", "zeroize", @@ -1072,18 +925,42 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.31" +version = "0.8.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "enumn" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b893c4eb2dc092c811165f84dc7447fae16fb66521717968c34c509b39b1a5c5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.27", +] + [[package]] name = "env_logger" -version = "0.9.0" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "env_logger" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" dependencies = [ "atty", "humantime", @@ -1093,10 +970,23 @@ dependencies = [ ] [[package]] -name = "environmental" -version = "1.1.4" +name = "env_logger" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" @@ -1109,6 +999,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "errno-dragonfly" version = "0.1.2" @@ -1127,24 +1028,24 @@ checksum = "6f65b750ac950f2f825b36d08bef4cda4112e19a7b1a68f6e2bb499413e12440" dependencies = [ "aes", "ctr", - "digest 0.10.3", + "digest 0.10.7", "hex", "hmac 0.12.1", "pbkdf2 0.11.0", - "rand 0.8.5", + "rand", "scrypt", "serde", "serde_json", - "sha2 0.10.2", - "sha3 0.10.1", + "sha2 0.10.7", + "sha3 0.10.8", "thiserror", - "uuid", + "uuid 0.8.2", ] [[package]] name = "eth-types" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=v0.3#c1c400436fd60b2e80e223e4c10cbff38d41e307" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" dependencies = [ "ethers-core", "ethers-signers", @@ -1160,7 +1061,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "sha3 0.10.1", + "sha3 0.10.8", "strum", "strum_macros", "subtle", @@ -1179,7 +1080,7 @@ dependencies = [ "regex", "serde", "serde_json", - "sha3 0.10.1", + "sha3 0.10.8", "thiserror", "uint", ] @@ -1193,7 +1094,7 @@ dependencies = [ "crunchy", "fixed-hash 0.7.0", "impl-rlp", - "impl-serde 0.3.2", + "impl-serde", "tiny-keccak", ] @@ -1205,31 +1106,9 @@ checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" dependencies = [ "crunchy", "fixed-hash 0.8.0", - "impl-codec", - "impl-rlp", - "impl-serde 0.4.0", - "scale-info", "tiny-keccak", ] -[[package]] -name = "ethereum" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a89fb87a9e103f71b903b80b670200b54cc67a07578f070681f1fffb7396fb7" -dependencies = [ - "bytes", - "ethereum-types 0.14.1", - "hash-db 0.15.2", - "hash256-std-hasher", - "parity-scale-codec", - "rlp", - "scale-info", - "serde", - "sha3 0.10.1", - "triehash", -] - [[package]] name = "ethereum-types" version = "0.13.1" @@ -1239,7 +1118,7 @@ dependencies = [ "ethbloom 0.12.1", "fixed-hash 0.7.0", "impl-rlp", - "impl-serde 0.3.2", + "impl-serde", "primitive-types 0.11.1", "uint", ] @@ -1252,11 +1131,7 @@ checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" dependencies = [ "ethbloom 0.13.0", "fixed-hash 0.8.0", - "impl-codec", - "impl-rlp", - "impl-serde 0.4.0", "primitive-types 0.12.1", - "scale-info", "uint", ] @@ -1266,25 +1141,25 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ebdd63c828f58aa067f40f9adcbea5e114fb1f90144b3a1e2858e0c9b1ff4e8" dependencies = [ - "arrayvec 0.7.2", + "arrayvec", "bytes", "chrono", - "convert_case", + "convert_case 0.5.0", "elliptic-curve", "ethabi", "fastrlp", - "generic-array 0.14.6", + "generic-array 0.14.7", "hex", "k256", "proc-macro2", - "rand 0.8.5", + "rand", "rlp", "rlp-derive", "rust_decimal", "serde", "serde_json", "strum", - "syn", + "syn 1.0.109", "thiserror", "tiny-keccak", "unicode-xid", @@ -1298,13 +1173,13 @@ checksum = "e46482e4d1e79b20c338fd9db9e166184eb387f0a4e7c05c5b5c0aa2e8c8900c" dependencies = [ "async-trait", "auto_impl", - "base64 0.13.0", + "base64 0.13.1", "ethers-core", "futures-channel", "futures-core", "futures-timer", "futures-util", - "getrandom 0.2.7", + "getrandom", "hashers", "hex", "http", @@ -1340,86 +1215,15 @@ dependencies = [ "eth-keystore", "ethers-core", "hex", - "rand 0.8.5", - "sha2 0.10.2", + "rand", + "sha2 0.10.7", "thiserror", ] -[[package]] -name = "evm" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4448c65b71e8e2b9718232d84d09045eeaaccb2320494e6bd6dbf7e58fec8ff" -dependencies = [ - "auto_impl", - "environmental", - "ethereum", - "evm-core", - "evm-gasometer", - "evm-runtime", - "log", - "parity-scale-codec", - "primitive-types 0.12.1", - "rlp", - "scale-info", - "serde", - "sha3 0.10.1", -] - -[[package]] -name = "evm-core" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c51bec0eb68a891c2575c758eaaa1d61373fc51f7caaf216b1fb5c3fea3b5d" -dependencies = [ - "parity-scale-codec", - "primitive-types 0.12.1", - "scale-info", - "serde", -] - -[[package]] -name = "evm-gasometer" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8b93c59c54fc26522d842f0e0d3f8e8be331c776df18ff3e540b53c2f64d509" -dependencies = [ - "environmental", - "evm-core", - "evm-runtime", - "primitive-types 0.12.1", -] - -[[package]] -name = "evm-runtime" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c79b9459ce64f1a28688397c4013764ce53cd57bb84efc16b5187fa9b05b13ad" -dependencies = [ - "auto_impl", - "environmental", - "evm-core", - "primitive-types 0.12.1", - "sha3 0.10.1", -] - -[[package]] -name = "expander" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f360349150728553f92e4c997a16af8915f418d3a0f21b440d34c5632f16ed84" -dependencies = [ - "blake2", - "fs-err", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "external-tracer" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=v0.3#c1c400436fd60b2e80e223e4c10cbff38d41e307" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" dependencies = [ "eth-types", "geth-utils", @@ -1434,19 +1238,13 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - [[package]] name = "fastrlp" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "089263294bb1c38ac73649a6ad563dd9a5142c8dc0482be15b8b9acb22a1611e" dependencies = [ - "arrayvec 0.7.2", + "arrayvec", "auto_impl", "bytes", "ethereum-types 0.13.1", @@ -1455,24 +1253,24 @@ dependencies = [ [[package]] name = "fastrlp-derive" -version = "0.1.2" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fa41ebc231af281098b11ad4a4f6182ec9096902afffe948034a20d4e1385a" +checksum = "a0f9d074ab623d1b388c12544bfeed759c7df36dc5c300cda053df9ba1232075" dependencies = [ "bytes", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "ff" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df689201f395c6b90dfe87127685f8dbfc083a5e779e613575d8bd7314300c3e" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ "bitvec 1.0.1", - "rand_core 0.6.3", + "rand_core", "subtle", ] @@ -1483,7 +1281,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" dependencies = [ "byteorder", - "rand 0.8.5", + "rand", "rustc-hex", "static_assertions", ] @@ -1495,19 +1293,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand 0.8.5", + "rand", "rustc-hex", "static_assertions", ] [[package]] name = "flate2" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" dependencies = [ "crc32fast", - "miniz_oxide 0.5.3", + "miniz_oxide", ] [[package]] @@ -1518,114 +1316,13 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ "percent-encoding", ] -[[package]] -name = "fp-evm" -version = "3.0.0-dev" -source = "git+https://github.com/paritytech/frontier?rev=76ad4c8f#76ad4c8fe970e15fafcdd931fa00d8af237ec513" -dependencies = [ - "evm", - "frame-support", - "parity-scale-codec", - "serde", - "sp-core", - "sp-std", -] - -[[package]] -name = "frame-metadata" -version = "15.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" -dependencies = [ - "cfg-if 1.0.0", - "parity-scale-codec", - "scale-info", - "serde", -] - -[[package]] -name = "frame-support" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "bitflags", - "environmental", - "frame-metadata", - "frame-support-procedural", - "impl-trait-for-tuples", - "k256", - "log", - "once_cell", - "parity-scale-codec", - "paste", - "scale-info", - "serde", - "smallvec", - "sp-api", - "sp-arithmetic", - "sp-core", - "sp-core-hashing-proc-macro", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-weights", - "tt-call", -] - -[[package]] -name = "frame-support-procedural" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "Inflector", - "cfg-expr", - "derive-syn-parse", - "frame-support-procedural-tools", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural-tools" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "frame-support-procedural-tools-derive", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural-tools-derive" -version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "fs-err" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541" - [[package]] name = "funty" version = "2.0.0" @@ -1634,9 +1331,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -1649,9 +1346,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -1659,50 +1356,49 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", "futures-util", - "num_cpus", ] [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.27", ] [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-timer" @@ -1712,9 +1408,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -1740,7 +1436,7 @@ dependencies = [ [[package]] name = "gadgets" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=v0.3#c1c400436fd60b2e80e223e4c10cbff38d41e307" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" dependencies = [ "digest 0.7.6", "eth-types", @@ -1769,9 +1465,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -1780,29 +1476,18 @@ dependencies = [ [[package]] name = "geth-utils" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=v0.3#c1c400436fd60b2e80e223e4c10cbff38d41e307" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" dependencies = [ - "env_logger", - "gobuild", + "env_logger 0.9.3", + "gobuild 0.1.0-alpha.2 (git+https://github.com/scroll-tech/gobuild.git)", "log", ] [[package]] name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.7" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -1813,43 +1498,37 @@ dependencies = [ [[package]] name = "gimli" -version = "0.26.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" -dependencies = [ - "fallible-iterator", - "stable_deref_trait", -] +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" [[package]] -name = "gimli" -version = "0.27.0" +name = "git-version" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec7af912d60cdbd3677c1af9352ebae6fb8394d165568a2234df0fa00f87793" +checksum = "f6b0decc02f4636b9ccad390dcbe77b722a77efedfa393caf8379a51d5c61899" +dependencies = [ + "git-version-macro", + "proc-macro-hack", +] [[package]] -name = "globset" -version = "0.4.9" +name = "git-version-macro" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" +checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f" dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "globwalk" -version = "0.8.1" +name = "glob" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc" -dependencies = [ - "bitflags", - "ignore", - "walkdir", -] +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "gobuild" @@ -1860,23 +1539,30 @@ dependencies = [ "cc", ] +[[package]] +name = "gobuild" +version = "0.1.0-alpha.2" +source = "git+https://github.com/scroll-tech/gobuild.git#8b84111fc3b58e2134e4794a06d1f199412cf2b0" +dependencies = [ + "cc", +] + [[package]] name = "group" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7391856def869c1c81063a03457c676fbcd419709c3dfb33d8d319de484b154d" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ - "byteorder", "ff", - "rand_core 0.6.3", + "rand_core", "subtle", ] [[package]] name = "h2" -version = "0.3.13" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" +checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" dependencies = [ "bytes", "fnv", @@ -1884,7 +1570,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap", + "indexmap 1.9.3", "slab", "tokio", "tokio-util", @@ -1892,135 +1578,79 @@ dependencies = [ ] [[package]] -name = "halo2-ecc-circuit-lib" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/halo2-snark-aggregator?branch=scroll-dev-0220#67519cd84168a3ac54a7b24c025acaa9d41d6e06" +name = "halo2-base" +version = "0.2.2" +source = "git+https://github.com/scroll-tech/halo2-lib?branch=develop#2c225864227e74b207d9f4b9e08c4d5f1afc69a1" dependencies = [ - "group", + "ff", "halo2_proofs", - "halo2curves 0.3.1 (git+https://github.com/privacy-scaling-explorations//halo2curves.git?rev=9b67e19)", + "itertools", "num-bigint", "num-integer", + "num-traits", + "rand_chacha", + "rustc-hash", ] [[package]] -name = "halo2-mpt-circuits" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/mpt-circuit.git?branch=goerli-0215-dual-hash#ae8acdf37eafbbb5b6dffcb9e977dab465970c83" -dependencies = [ - "halo2_proofs", - "hex", - "lazy_static", - "num-bigint", - "poseidon-circuit", - "rand 0.8.5", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "halo2-snark-aggregator-api" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/halo2-snark-aggregator?branch=scroll-dev-0220#67519cd84168a3ac54a7b24c025acaa9d41d6e06" -dependencies = [ - "blake2b_simd", - "chrono", - "digest 0.10.3", - "group", - "halo2_proofs", - "halo2curves 0.3.1 (git+https://github.com/privacy-scaling-explorations//halo2curves.git?rev=9b67e19)", - "log", - "num-bigint", - "poseidon", - "rand 0.8.5", - "rand_pcg", - "rand_xorshift", -] - -[[package]] -name = "halo2-snark-aggregator-circuit" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/halo2-snark-aggregator?branch=scroll-dev-0220#67519cd84168a3ac54a7b24c025acaa9d41d6e06" -dependencies = [ - "clap", - "halo2-ecc-circuit-lib", - "halo2-snark-aggregator-api", - "halo2_proofs", - "halo2curves 0.3.1 (git+https://github.com/privacy-scaling-explorations//halo2curves.git?rev=9b67e19)", - "log", - "rand 0.8.5", - "rand_core 0.6.3", - "rayon", - "serde_json", - "sha2 0.10.2", - "sha3 0.10.1", -] - -[[package]] -name = "halo2-snark-aggregator-solidity" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/halo2-snark-aggregator?branch=scroll-dev-0220#67519cd84168a3ac54a7b24c025acaa9d41d6e06" -dependencies = [ - "halo2-ecc-circuit-lib", - "halo2-snark-aggregator-api", - "halo2-snark-aggregator-circuit", - "halo2_proofs", - "halo2curves 0.3.1 (git+https://github.com/privacy-scaling-explorations//halo2curves.git?rev=9b67e19)", - "log", - "num-bigint", - "sha3 0.10.1", - "tera", -] - -[[package]] -name = "halo2_base" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/halo2-lib?branch=halo2-ecc-ecdsa-0129#89cf51f0ac452e4814e028b9a331ec613aafa726" +name = "halo2-ecc" +version = "0.2.2" +source = "git+https://github.com/scroll-tech/halo2-lib?branch=develop#2c225864227e74b207d9f4b9e08c4d5f1afc69a1" dependencies = [ "ff", - "halo2_proofs", + "group", + "halo2-base", + "itertools", "num-bigint", "num-integer", "num-traits", + "rand", + "rand_chacha", + "rand_core", + "serde", + "serde_json", ] [[package]] -name = "halo2_ecc" +name = "halo2-mpt-circuits" version = "0.1.0" -source = "git+https://github.com/scroll-tech/halo2-lib?branch=halo2-ecc-ecdsa-0129#89cf51f0ac452e4814e028b9a331ec613aafa726" +source = "git+https://github.com/scroll-tech/mpt-circuit.git?branch=v0.4#d8f957ffaf2f8f8f7a824d89e4ad4193307644bf" dependencies = [ - "ark-std", - "ff", - "group", - "halo2_base", + "ethers-core", "halo2_proofs", - "halo2curves 0.3.1 (git+https://github.com/jonathanpwang/halo2curves.git)", + "hex", + "itertools", + "lazy_static", + "log", "num-bigint", - "num-integer", "num-traits", - "rand 0.8.5", - "rand_core 0.6.3", + "poseidon-circuit", + "rand", "serde", "serde_json", + "strum", + "strum_macros", + "thiserror", ] [[package]] name = "halo2_proofs" version = "0.2.0" -source = "git+https://github.com/scroll-tech/halo2.git?branch=scroll-dev-0220#5689a747c6acf9f7316b73dbe5ce4a1b3628c60c" +source = "git+https://github.com/scroll-tech/halo2.git?branch=develop#4d8a405a97ce445c88fc8ec40f9a2dd0a661c697" dependencies = [ "ark-std", "blake2b_simd", "cfg-if 0.1.10", + "crossbeam", + "env_logger 0.8.4", "ff", "group", - "halo2curves 0.3.1 (git+https://github.com/privacy-scaling-explorations//halo2curves.git?rev=9b67e19)", + "halo2curves", "log", "num-bigint", "num-integer", "poseidon", - "rand_core 0.6.3", + "rand_core", "rayon", "sha3 0.9.1", "subtle", @@ -2030,24 +1660,7 @@ dependencies = [ [[package]] name = "halo2curves" version = "0.3.1" -source = "git+https://github.com/privacy-scaling-explorations//halo2curves.git?rev=9b67e19" -dependencies = [ - "ff", - "group", - "lazy_static", - "num-bigint", - "num-traits", - "pasta_curves", - "rand 0.8.5", - "rand_core 0.6.3", - "static_assertions", - "subtle", -] - -[[package]] -name = "halo2curves" -version = "0.3.1" -source = "git+https://github.com/jonathanpwang/halo2curves.git#a6437dbe92fe3fd347674ab32cc0909c605a4f89" +source = "git+https://github.com/scroll-tech/halo2curves.git?branch=0.3.1-derive-serde#969f1e44d9713ee4cd552563bd0c762c5d53b56e" dependencies = [ "ff", "group", @@ -2055,8 +1668,10 @@ dependencies = [ "num-bigint", "num-traits", "pasta_curves", - "rand 0.8.5", - "rand_core 0.6.3", + "paste", + "rand", + "rand_core", + "serde", "static_assertions", "subtle", ] @@ -2064,7 +1679,7 @@ dependencies = [ [[package]] name = "halo2wrong" version = "0.1.0" -source = "git+https://github.com/privacy-scaling-explorations/halo2wrong?tag=v2023_02_02#5905a20b62fcd9f6c269416a39c80de7ced8fb02" +source = "git+https://github.com/scroll-tech/halo2wrong.git?branch=halo2-ecc-snark-verifier-0323#939d679cb16abf0e820bd606248661e400328afa" dependencies = [ "group", "halo2_proofs", @@ -2073,27 +1688,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "hash-db" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" - -[[package]] -name = "hash-db" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" - -[[package]] -name = "hash256-std-hasher" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" -dependencies = [ - "crunchy", -] - [[package]] name = "hashbrown" version = "0.12.3" @@ -2112,6 +1706,12 @@ dependencies = [ "ahash 0.8.3", ] +[[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + [[package]] name = "hashers" version = "1.0.1" @@ -2123,9 +1723,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -2136,6 +1736,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" + [[package]] name = "hex" version = "0.4.3" @@ -2143,22 +1749,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "hmac" -version = "0.8.1" +name = "hex-literal" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" -dependencies = [ - "crypto-mac 0.8.0", - "digest 0.9.0", -] +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] name = "hmac" -version = "0.11.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ - "crypto-mac 0.11.1", + "crypto-mac", "digest 0.9.0", ] @@ -2168,7 +1770,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.3", + "digest 0.10.7", ] [[package]] @@ -2178,15 +1780,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.6", + "generic-array 0.14.7", "hmac 0.8.1", ] [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", @@ -2206,9 +1808,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" @@ -2216,12 +1818,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" -[[package]] -name = "humansize" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026" - [[package]] name = "humantime" version = "2.1.0" @@ -2230,9 +1826,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.19" +version = "0.14.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ "bytes", "futures-channel", @@ -2254,15 +1850,39 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" +checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" dependencies = [ + "futures-util", "http", "hyper", - "rustls", + "rustls 0.21.5", "tokio", - "tokio-rustls", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", ] [[package]] @@ -2273,32 +1893,14 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", ] -[[package]] -name = "ignore" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" -dependencies = [ - "crossbeam-utils", - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - [[package]] name = "impl-codec" version = "0.6.0" @@ -2326,15 +1928,6 @@ dependencies = [ "serde", ] -[[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.2" @@ -2343,18 +1936,27 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "indexmap" -version = "1.9.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", - "serde", +] + +[[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown 0.14.0", ] [[package]] @@ -2369,50 +1971,17 @@ dependencies = [ "web-sys", ] -[[package]] -name = "integer" -version = "0.1.0" -source = "git+https://github.com/privacy-scaling-explorations/halo2wrong?tag=v2023_02_02#5905a20b62fcd9f6c269416a39c80de7ced8fb02" -dependencies = [ - "group", - "maingate", - "num-bigint", - "num-integer", - "num-traits", - "rand 0.8.5", - "subtle", -] - -[[package]] -name = "integer-sqrt" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" -dependencies = [ - "num-traits", -] - -[[package]] -name = "io-lifetimes" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c3f4eff5495aee4c0399d7b6a0dc2b6e81be84242ffbfcf253ebacccc1d0cb" - [[package]] name = "io-lifetimes" -version = "1.0.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e" -dependencies = [ - "libc", - "windows-sys 0.42.0", -] +checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "ipnet" -version = "2.5.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" [[package]] name = "is-even" @@ -2429,6 +1998,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5741cc4ac9f6105f6bb067d09bb5685dc255e5bdec6f3bf6d86f4bda6187d17e" +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi 0.3.2", + "rustix 0.38.4", + "windows-sys 0.48.0", +] + [[package]] name = "itertools" version = "0.10.5" @@ -2440,44 +2020,47 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "js-sys" -version = "0.3.58" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" dependencies = [ "wasm-bindgen", ] [[package]] name = "k256" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3636d281d46c3b64182eb3a0a42b7b483191a2ecc3f05301fa67403f7c9bc949" +checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" dependencies = [ "cfg-if 1.0.0", "ecdsa", "elliptic-curve", - "sha2 0.10.2", - "sha3 0.10.1", + "sha2 0.10.7", + "sha3 0.10.8", ] [[package]] name = "keccak" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +dependencies = [ + "cpufeatures", +] [[package]] name = "keccak256" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=v0.3#c1c400436fd60b2e80e223e4c10cbff38d41e307" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" dependencies = [ - "env_logger", + "env_logger 0.9.3", "eth-types", "halo2_proofs", "itertools", @@ -2498,30 +2081,24 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.139" +version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" - -[[package]] -name = "libm" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] name = "libsecp256k1" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" dependencies = [ "arrayref", - "base64 0.13.0", + "base64 0.13.1", "digest 0.9.0", "hmac-drbg", "libsecp256k1-core", "libsecp256k1-gen-ecmult", "libsecp256k1-gen-genmult", - "rand 0.8.5", + "rand", "serde", "sha2 0.9.9", "typenum", @@ -2564,15 +2141,15 @@ checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" [[package]] name = "linux-raw-sys" -version = "0.1.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" [[package]] name = "lock_api" -version = "0.4.7" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" dependencies = [ "autocfg", "scopeguard", @@ -2580,179 +2157,128 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if 1.0.0", -] +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" [[package]] -name = "mach" -version = "0.3.2" +name = "log-mdc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a94d21414c1f4a51209ad204c1776a3d0765002c76c6abcb602a6f09f1e881c7" + +[[package]] +name = "log4rs" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +checksum = "d36ca1786d9e79b8193a68d480a0907b612f109537115c6ff655a3a1967533fd" dependencies = [ + "anyhow", + "arc-swap", + "chrono", + "derivative", + "fnv", "libc", + "log", + "log-mdc", + "parking_lot 0.12.1", + "thiserror", + "thread-id", + "winapi", ] [[package]] name = "maingate" version = "0.1.0" -source = "git+https://github.com/privacy-scaling-explorations/halo2wrong?tag=v2023_02_02#5905a20b62fcd9f6c269416a39c80de7ced8fb02" +source = "git+https://github.com/scroll-tech/halo2wrong.git?branch=halo2-ecc-snark-verifier-0323#939d679cb16abf0e820bd606248661e400328afa" dependencies = [ "group", "halo2wrong", "num-bigint", "num-integer", "num-traits", - "rand 0.8.5", + "rand", "subtle", ] [[package]] -name = "maplit" -version = "1.0.2" +name = "memchr" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] -name = "matchers" -version = "0.0.1" +name = "memoffset" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" dependencies = [ - "regex-automata", + "autocfg", ] [[package]] -name = "memchr" -version = "2.5.0" +name = "mime" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] -name = "memfd" -version = "0.6.2" +name = "miniz_oxide" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ - "rustix 0.36.7", + "adler", ] [[package]] -name = "memoffset" -version = "0.6.5" +name = "mio" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ - "autocfg", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", ] [[package]] -name = "memory-db" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" +name = "mock" +version = "0.1.0" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" dependencies = [ - "hash-db 0.16.0", -] - -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - -[[package]] -name = "merlin" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.5.1", - "zeroize", -] - -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "miniz_oxide" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" -dependencies = [ - "adler", -] - -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.36.1", -] - -[[package]] -name = "mock" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=v0.3#c1c400436fd60b2e80e223e4c10cbff38d41e307" -dependencies = [ - "eth-types", - "ethers-core", - "ethers-signers", - "external-tracer", - "itertools", - "lazy_static", - "rand 0.8.5", - "rand_chacha 0.3.1", + "eth-types", + "ethers-core", + "ethers-signers", + "external-tracer", + "itertools", + "lazy_static", + "rand", + "rand_chacha", ] [[package]] name = "mpt-zktrie" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=v0.3#c1c400436fd60b2e80e223e4c10cbff38d41e307" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" dependencies = [ "bus-mapping", "eth-types", "halo2-mpt-circuits", "halo2_proofs", + "hex", "lazy_static", "log", "num-bigint", + "poseidon-circuit", "zktrie", ] -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - [[package]] name = "num" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" dependencies = [ "num-bigint", "num-complex", @@ -2771,28 +2297,18 @@ dependencies = [ "autocfg", "num-integer", "num-traits", - "rand 0.8.5", + "rand", ] [[package]] name = "num-complex" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" +checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" dependencies = [ "num-traits", ] -[[package]] -name = "num-format" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" -dependencies = [ - "arrayvec 0.7.2", - "itoa", -] - [[package]] name = "num-integer" version = "0.1.45" @@ -2816,9 +2332,9 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", "num-bigint", @@ -2828,49 +2344,58 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.2", "libc", ] [[package]] -name = "object" -version = "0.29.0" +name = "num_enum" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ - "crc32fast", - "hashbrown 0.12.3", - "indexmap", - "memchr", + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] name = "object" -version = "0.30.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d864c91689fdc196779b98dba0aceac6118594c2df6ee5d943eb6a8df4d107a" +checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "opaque-debug" @@ -2884,68 +2409,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" -[[package]] -name = "os_str_bytes" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa" - -[[package]] -name = "pallet-evm-precompile-blake2" -version = "2.0.0-dev" -source = "git+https://github.com/paritytech/frontier?rev=76ad4c8f#76ad4c8fe970e15fafcdd931fa00d8af237ec513" -dependencies = [ - "fp-evm", -] - -[[package]] -name = "pallet-evm-precompile-bn128" -version = "2.0.0-dev" -source = "git+https://github.com/paritytech/frontier?rev=76ad4c8f#76ad4c8fe970e15fafcdd931fa00d8af237ec513" -dependencies = [ - "fp-evm", - "sp-core", - "substrate-bn", -] - -[[package]] -name = "pallet-evm-precompile-curve25519" -version = "1.0.0-dev" -source = "git+https://github.com/paritytech/frontier?rev=76ad4c8f#76ad4c8fe970e15fafcdd931fa00d8af237ec513" -dependencies = [ - "curve25519-dalek 4.0.0-pre.1", - "fp-evm", -] - -[[package]] -name = "pallet-evm-precompile-modexp" -version = "2.0.0-dev" -source = "git+https://github.com/paritytech/frontier?rev=76ad4c8f#76ad4c8fe970e15fafcdd931fa00d8af237ec513" -dependencies = [ - "fp-evm", - "num", -] - -[[package]] -name = "pallet-evm-precompile-simple" -version = "2.0.0-dev" -source = "git+https://github.com/paritytech/frontier?rev=76ad4c8f#76ad4c8fe970e15fafcdd931fa00d8af237ec513" -dependencies = [ - "fp-evm", - "ripemd", - "sp-io", -] - [[package]] name = "parity-scale-codec" -version = "3.3.0" +version = "3.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3840933452adf7b3b9145e27086a5a3376c619dca1a21b1e5a5af0d54979bed" +checksum = "dd8e946cc0cc711189c0b0249fb8b599cbeeab9784d83c415719368bb8d4ac64" dependencies = [ - "arrayvec 0.7.2", + "arrayvec", "bitvec 1.0.1", "byte-slice-cast", - "bytes", "impl-trait-for-tuples", "parity-scale-codec-derive", "serde", @@ -2953,22 +2425,16 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.1.4" +version = "3.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b" +checksum = "2a296c3079b5fefbc499e1de58dc26c09b1b9a5952d26694ee89f04a43ebbb3e" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] -[[package]] -name = "parity-wasm" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" - [[package]] name = "parking_lot" version = "0.11.2" @@ -2977,7 +2443,7 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", ] [[package]] @@ -2987,43 +2453,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.5", + "parking_lot_core 0.9.8", ] [[package]] name = "parking_lot_core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "winapi", ] [[package]] name = "parking_lot_core" -version = "0.9.5" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall", + "redox_syscall 0.3.5", "smallvec", - "windows-sys 0.42.0", -] - -[[package]] -name = "parse-zoneinfo" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" -dependencies = [ - "regex", + "windows-targets", ] [[package]] @@ -3033,7 +2490,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d791538a6dcc1e7cb7fe6f6b58aca40e7f79403c45b2bc274008b5e647af1d8" dependencies = [ "base64ct", - "rand_core 0.6.3", + "rand_core", "subtle", ] @@ -3044,39 +2501,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" dependencies = [ "base64ct", - "rand_core 0.6.3", + "rand_core", "subtle", ] [[package]] name = "pasta_curves" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "369d7785168ad7ff0cbe467d968ca3e19a927d8536b11ef9c21b4e454b15ba42" +checksum = "5cc65faf8e7313b4b1fbaa9f7ca917a0eed499a9663be71477f87993604341d8" dependencies = [ "blake2b_simd", "ff", "group", "lazy_static", - "rand 0.8.5", + "rand", "static_assertions", "subtle", ] [[package]] name = "paste" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" - -[[package]] -name = "pbkdf2" -version = "0.8.0" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" -dependencies = [ - "crypto-mac 0.11.1", -] +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "pbkdf2" @@ -3084,7 +2532,7 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271779f35b581956db91a3e55737327a03aa051e90b1c47aeb189508533adfd7" dependencies = [ - "digest 0.10.3", + "digest 0.10.7", ] [[package]] @@ -3093,60 +2541,17 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest 0.10.3", + "digest 0.10.7", "hmac 0.12.1", "password-hash 0.4.2", - "sha2 0.10.2", + "sha2 0.10.7", ] [[package]] name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "pest" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" -dependencies = [ - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pest_meta" -version = "2.1.3" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" -dependencies = [ - "maplit", - "pest", - "sha-1 0.8.2", -] +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pharos" @@ -3158,70 +2563,31 @@ dependencies = [ "rustc_version", ] -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_shared", -] - -[[package]] -name = "phf_codegen" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" -dependencies = [ - "phf_generator", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared", - "rand 0.8.5", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", - "uncased", -] - [[package]] name = "pin-project" -version = "1.0.12" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.12" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.27", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" [[package]] name = "pin-utils" @@ -3245,14 +2611,14 @@ version = "0.2.0" source = "git+https://github.com/scroll-tech/poseidon.git?branch=scroll-dev-0220#2fb4a2385bada39b50dce12fe50cb80d2fd33476" dependencies = [ "group", - "halo2curves 0.3.1 (git+https://github.com/privacy-scaling-explorations//halo2curves.git?rev=9b67e19)", + "halo2curves", "subtle", ] [[package]] name = "poseidon-circuit" version = "0.1.0" -source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=scroll-dev-0215#b5e9b1440de088648a8661ccefbd28f7ebb3f252" +source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=scroll-dev-0619#50015b7cfbd5fe3263ec683cb291396c1b99cd1f" dependencies = [ "bitvec 1.0.1", "halo2_proofs", @@ -3262,9 +2628,9 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "primitive-types" @@ -3275,7 +2641,7 @@ dependencies = [ "fixed-hash 0.7.0", "impl-codec", "impl-rlp", - "impl-serde 0.3.2", + "impl-serde", "uint", ] @@ -3288,21 +2654,28 @@ dependencies = [ "fixed-hash 0.8.0", "impl-codec", "impl-rlp", - "impl-serde 0.4.0", - "scale-info", "uint", ] [[package]] name = "proc-macro-crate" -version = "1.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" dependencies = [ - "thiserror", "toml", ] +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -3312,7 +2685,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -3327,28 +2700,75 @@ dependencies = [ "version_check", ] +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] [[package]] name = "procfs" -version = "0.13.0" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57928c5e4262566636d405e7c6a5a4f59bcb61a04a65dea57cf26b0dc3de6423" +checksum = "2b4030746dfb40582518bebdc6303faef2bedfe787bac3786458bcdcc923b4e8" dependencies = [ - "bitflags", + "bitflags 1.3.2", "byteorder", "chrono", "flate2", "hex", "lazy_static", - "rustix 0.35.7", + "rustix 0.35.14", +] + +[[package]] +name = "prover" +version = "0.4.0" +source = "git+https://github.com/scroll-tech/scroll-prover?rev=260607c#260607c1f883cbe4be7b290860bef5114cbcea61" +dependencies = [ + "aggregator", + "anyhow", + "blake2", + "bus-mapping", + "chrono", + "dotenv", + "eth-types", + "ethers-core", + "git-version", + "glob", + "halo2_proofs", + "hex", + "is-even", + "itertools", + "log", + "log4rs", + "mock", + "mpt-zktrie", + "num-bigint", + "once_cell", + "procfs", + "rand", + "rand_xorshift", + "serde", + "serde_derive", + "serde_json", + "serde_stacker", + "sha2 0.10.7", + "snark-verifier", + "snark-verifier-sdk", + "strum", + "strum_macros", + "types", + "zkevm-circuits", ] [[package]] @@ -3360,11 +2780,31 @@ dependencies = [ "cc", ] +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "quote" -version = "1.0.20" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" dependencies = [ "proc-macro2", ] @@ -3381,19 +2821,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - [[package]] name = "rand" version = "0.8.5" @@ -3401,64 +2828,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.3", + "rand_chacha", + "rand_core", ] [[package]] name = "rand_chacha" -version = "0.2.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.5.1", + "rand_core", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "ppv-lite86", - "rand_core 0.6.3", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" -dependencies = [ - "getrandom 0.2.7", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" -dependencies = [ - "rand_core 0.6.3", + "getrandom", ] [[package]] @@ -3467,26 +2857,24 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" dependencies = [ - "rand_core 0.6.3", + "rand_core", ] [[package]] name = "rayon" -version = "1.5.3" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ - "autocfg", - "crossbeam-deque", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.9.3" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -3496,66 +2884,67 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" -dependencies = [ - "bitflags", -] - -[[package]] -name = "ref-cast" -version = "1.0.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "ref-cast-impl", + "bitflags 1.3.2", ] [[package]] -name = "ref-cast-impl" -version = "1.0.14" +name = "redox_syscall" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "proc-macro2", - "quote", - "syn", + "bitflags 1.3.2", ] [[package]] name = "regex" -version = "1.7.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" dependencies = [ "aho-corasick", "memchr", + "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +checksum = "b7b6d6190b7594385f61bd3911cd1be99dfddcfc365a4160cc2ab5bff4aed294" dependencies = [ + "aho-corasick", + "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" + +[[package]] +name = "rend" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab" +dependencies = [ + "bytecheck", +] [[package]] name = "reqwest" -version = "0.11.15" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ba30cc2c0cd02af1222ed216ba659cdb2f879dfe3181852fe7c50b1d0005949" +checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" dependencies = [ - "base64 0.21.0", + "base64 0.21.2", "bytes", "encoding_rs", "futures-core", @@ -3572,13 +2961,13 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", + "rustls 0.21.5", "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", - "tokio-rustls", + "tokio-rustls 0.24.1", "tower-service", "url", "wasm-bindgen", @@ -3588,11 +2977,84 @@ dependencies = [ "winreg", ] +[[package]] +name = "revm" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73d84c8f9836efb0f5f5f8de4700a953c4e1f3119e5cfcb0aad8e5be73daf991" +dependencies = [ + "arrayref", + "auto_impl", + "bytes", + "hashbrown 0.13.2", + "num_enum", + "primitive-types 0.12.1", + "revm_precompiles", + "rlp", + "sha3 0.10.8", +] + +[[package]] +name = "revm-precompile" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66837781605c6dcb7f07ad87604eeab3119dae9149d69d8839073dd6f188673d" +dependencies = [ + "k256", + "num", + "once_cell", + "revm-primitives", + "ripemd", + "secp256k1 0.26.0", + "sha2 0.10.7", + "sha3 0.10.8", + "substrate-bn", +] + +[[package]] +name = "revm-primitives" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "304d998f466ffef72d76c7f20b05bf08a96801736a6fb1fdef47d49a292618df" +dependencies = [ + "auto_impl", + "bitvec 1.0.1", + "bytes", + "derive_more", + "enumn", + "fixed-hash 0.8.0", + "hashbrown 0.13.2", + "hex", + "hex-literal", + "primitive-types 0.12.1", + "rlp", + "ruint", + "sha3 0.10.8", +] + +[[package]] +name = "revm_precompiles" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0353d456ef3e989dc9190f42c6020f09bc2025930c37895826029304413204b5" +dependencies = [ + "bytes", + "hashbrown 0.13.2", + "num", + "once_cell", + "primitive-types 0.12.1", + "ripemd", + "secp256k1 0.24.3", + "sha2 0.10.7", + "sha3 0.10.8", + "substrate-bn", +] + [[package]] name = "rfc6979" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c86280f057430a52f4861551b092a01b419b8eacefc7c995eacb9dc132fe32" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" dependencies = [ "crypto-bigint", "hmac 0.12.1", @@ -3616,11 +3078,39 @@ dependencies = [ [[package]] name = "ripemd" -version = "0.1.2" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "rkyv" +version = "0.7.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e2ee464e763f6527991a6d532142e3c2016eb9907cc081401c11862c26a840" +checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58" dependencies = [ - "digest 0.10.3", + "bitvec 1.0.1", + "bytecheck", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid 1.4.1", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -3630,7 +3120,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ "bytes", - "rlp-derive", "rustc-hex", ] @@ -3642,25 +3131,49 @@ checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", +] + +[[package]] +name = "ruint" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e1574d439643c8962edf612a888e7cc5581bcdf36cb64e6bc88466b03b2daa" +dependencies = [ + "primitive-types 0.12.1", + "rlp", + "ruint-macro", + "thiserror", ] +[[package]] +name = "ruint-macro" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e666a5496a0b2186dbcd0ff6106e29e093c15591bde62c20d3842007c6978a09" + [[package]] name = "rust_decimal" -version = "1.26.1" +version = "1.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee9164faf726e4f3ece4978b25ca877ddc6802fa77f38cdccb32c7f805ecd70c" +checksum = "4a2ab0025103a60ecaaf3abf24db1db240a4e1c15837090d2c32f625ac98abea" dependencies = [ - "arrayvec 0.7.2", + "arrayvec", + "borsh", + "byteorder", + "bytes", "num-traits", + "rand", + "rkyv", "serde", + "serde_json", ] [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustc-hash" @@ -3685,37 +3198,36 @@ dependencies = [ [[package]] name = "rustix" -version = "0.35.7" +version = "0.35.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51cc38aa10f6bbb377ed28197aa052aa4e2b762c22be9d3153d01822587e787" +checksum = "6380889b07a03b5ecf1d44dc9ede6fd2145d84b502a2a9ca0b03c48e0cc3220f" dependencies = [ - "bitflags", - "errno", - "io-lifetimes 0.7.2", + "bitflags 1.3.2", + "errno 0.2.8", + "io-lifetimes", "libc", "linux-raw-sys 0.0.46", - "windows-sys 0.36.1", + "windows-sys 0.42.0", ] [[package]] name = "rustix" -version = "0.36.7" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03" +checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" dependencies = [ - "bitflags", - "errno", - "io-lifetimes 1.0.4", + "bitflags 2.3.3", + "errno 0.3.1", "libc", - "linux-raw-sys 0.1.4", - "windows-sys 0.42.0", + "linux-raw-sys 0.4.3", + "windows-sys 0.48.0", ] [[package]] name = "rustls" -version = "0.20.6" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" dependencies = [ "log", "ring", @@ -3724,104 +3236,62 @@ dependencies = [ ] [[package]] -name = "rustls-pemfile" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" -dependencies = [ - "base64 0.13.0", -] - -[[package]] -name = "rustversion" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0a5f7c728f5d284929a1cccb5bc19884422bfe6ef4d6c409da2c41838983fcf" - -[[package]] -name = "ryu" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" - -[[package]] -name = "salsa20" -version = "0.9.0" +name = "rustls" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0fbb5f676da676c260ba276a8f43a8dc67cf02d1438423aeb1c677a7212686" +checksum = "79ea77c539259495ce8ca47f53e66ae0330a8819f67e23ac96ca02f50e7b7d36" dependencies = [ - "cipher", + "log", + "ring", + "rustls-webpki", + "sct", ] [[package]] -name = "same-file" -version = "1.0.6" +name = "rustls-pemfile" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "winapi-util", + "base64 0.21.2", ] [[package]] -name = "scale-info" -version = "2.3.1" +name = "rustls-webpki" +version = "0.101.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" +checksum = "513722fd73ad80a71f72b61009ea1b584bcfa1483ca93949c8f290298837fa59" dependencies = [ - "bitvec 1.0.1", - "cfg-if 1.0.0", - "derive_more", - "parity-scale-codec", - "scale-info-derive", - "serde", + "ring", + "untrusted", ] [[package]] -name = "scale-info-derive" -version = "2.3.1" +name = "rustversion" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] -name = "schnellru" -version = "0.2.1" +name = "ryu" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" -dependencies = [ - "ahash 0.8.3", - "cfg-if 1.0.0", - "hashbrown 0.13.2", -] +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] -name = "schnorrkel" -version = "0.9.1" +name = "salsa20" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" +checksum = "0c0fbb5f676da676c260ba276a8f43a8dc67cf02d1438423aeb1c677a7212686" dependencies = [ - "arrayref", - "arrayvec 0.5.2", - "curve25519-dalek 2.1.3", - "getrandom 0.1.16", - "merlin", - "rand 0.7.3", - "rand_core 0.5.1", - "sha2 0.8.2", - "subtle", - "zeroize", + "cipher", ] [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scrypt" @@ -3833,7 +3303,7 @@ dependencies = [ "password-hash 0.3.2", "pbkdf2 0.10.1", "salsa20", - "sha2 0.10.2", + "sha2 0.10.7", ] [[package]] @@ -3846,6 +3316,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + [[package]] name = "sec1" version = "0.3.0" @@ -3854,7 +3330,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct", "der", - "generic-array 0.14.6", + "generic-array 0.14.7", "pkcs8", "subtle", "zeroize", @@ -3862,11 +3338,20 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.24.2" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" +dependencies = [ + "secp256k1-sys 0.6.1", +] + +[[package]] +name = "secp256k1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9512ffd81e3a3503ed401f79c33168b9148c75038956039166cd750eaa037c3" +checksum = "4124a35fe33ae14259c490fd70fa199a32b9ce9502f2ee6bc4f81ec06fa65894" dependencies = [ - "secp256k1-sys", + "secp256k1-sys 0.8.1", ] [[package]] @@ -3879,51 +3364,51 @@ dependencies = [ ] [[package]] -name = "secrecy" -version = "0.8.0" +name = "secp256k1-sys" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" dependencies = [ - "zeroize", + "cc", ] [[package]] name = "semver" -version = "1.0.10" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41d061efea015927ac527063765e73601444cdc344ba855bc7bd44578b25e1c" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" [[package]] name = "send_wrapper" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "930c0acf610d3fdb5e2ab6213019aaa04e227ebe9547b0649ba599b16d788bd7" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.144" +version = "1.0.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" +checksum = "60363bdd39a7be0266a520dab25fdc9241d2f987b08a01e01f0ec6d06a981348" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.144" +version = "1.0.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" +checksum = "f28482318d6641454cb273da158647922d1be6b5a2fcc6165cd89ebdd7ed576b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.27", ] [[package]] name = "serde_json" -version = "1.0.81" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" +checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c" dependencies = [ "itoa", "ryu", @@ -3932,13 +3417,23 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.8" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed" +checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.27", +] + +[[package]] +name = "serde_stacker" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f5321e680f77e7b5cfccc78708ff86a814d39aba030610aee67bd5eaf8a1c30" +dependencies = [ + "serde", + "stacker", ] [[package]] @@ -3972,30 +3467,18 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", -] - -[[package]] -name = "sha-1" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", + "syn 1.0.109", ] [[package]] name = "sha-1" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" +checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "digest 0.10.3", + "digest 0.10.7", ] [[package]] @@ -4025,13 +3508,13 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.2" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "digest 0.10.3", + "digest 0.10.7", ] [[package]] @@ -4060,493 +3543,100 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.1" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881bf8156c87b6301fc5ca6b27f11eeb2761224c7081e69b409d5a1951a70c86" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest 0.10.3", + "digest 0.10.7", "keccak", ] -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - [[package]] name = "signature" -version = "1.6.3" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb766570a2825fa972bceff0d195727876a9cdf2460ab2e52d455dc2de47fd9" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest 0.10.3", - "rand_core 0.6.3", + "digest 0.10.7", + "rand_core", ] [[package]] -name = "siphasher" -version = "0.3.10" +name = "simdutf8" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" [[package]] name = "slab" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" - -[[package]] -name = "slug" -version = "0.1.4" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ - "deunicode", + "autocfg", ] [[package]] name = "smallvec" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "snark-verifier" version = "0.1.0" -source = "git+https://github.com/privacy-scaling-explorations/snark-verifier?tag=v2023_02_02#df03d898b841f71cbc36c2fb9fa07b8196f9623e" +source = "git+https://github.com/scroll-tech/snark-verifier?branch=develop#a530941eb9a6151c46d5546ca818d04bbd286c02" dependencies = [ - "ecc", - "halo2_proofs", - "halo2curves 0.3.1 (git+https://github.com/privacy-scaling-explorations//halo2curves.git?rev=9b67e19)", - "hex", + "bytes", + "ethereum-types 0.14.1", + "halo2-base", + "halo2-ecc", + "hex", "itertools", "lazy_static", "num-bigint", "num-integer", "num-traits", "poseidon", - "rand 0.8.5", -] - -[[package]] -name = "socket2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "sp-api" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "hash-db 0.16.0", - "log", - "parity-scale-codec", - "sp-api-proc-macro", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-trie", - "sp-version", - "thiserror", -] - -[[package]] -name = "sp-api-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "Inflector", - "blake2", - "expander", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-application-crypto" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-std", -] - -[[package]] -name = "sp-arithmetic" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "scale-info", - "serde", - "sp-std", - "static_assertions", -] - -[[package]] -name = "sp-core" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "array-bytes", - "base58 0.2.0", - "bitflags", - "blake2", - "bounded-collections", - "dyn-clonable", - "ed25519-zebra", - "futures", - "hash-db 0.16.0", - "hash256-std-hasher", - "impl-serde 0.4.0", - "lazy_static", - "libsecp256k1", - "log", - "merlin", - "parity-scale-codec", - "parking_lot 0.12.1", - "primitive-types 0.12.1", - "rand 0.8.5", - "regex", - "scale-info", - "schnorrkel", - "secp256k1", - "secrecy", + "rand", + "revm", + "rlp", + "rustc-hash", "serde", - "sp-core-hashing", - "sp-debug-derive", - "sp-externalities", - "sp-runtime-interface", - "sp-std", - "sp-storage", - "ss58-registry", - "substrate-bip39", - "thiserror", - "tiny-bip39", - "zeroize", + "sha3 0.10.8", ] [[package]] -name = "sp-core-hashing" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "blake2b_simd", - "byteorder", - "digest 0.10.3", - "sha2 0.10.2", - "sha3 0.10.1", - "sp-std", - "twox-hash", -] - -[[package]] -name = "sp-core-hashing-proc-macro" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "proc-macro2", - "quote", - "sp-core-hashing", - "syn", -] - -[[package]] -name = "sp-debug-derive" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-externalities" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "environmental", - "parity-scale-codec", - "sp-std", - "sp-storage", -] - -[[package]] -name = "sp-inherents" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "async-trait", - "impl-trait-for-tuples", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", - "thiserror", -] - -[[package]] -name = "sp-io" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "bytes", - "ed25519", - "ed25519-dalek", - "futures", - "libsecp256k1", - "log", - "parity-scale-codec", - "secp256k1", - "sp-core", - "sp-externalities", - "sp-keystore", - "sp-runtime-interface", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-trie", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-keystore" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "futures", - "merlin", - "parity-scale-codec", - "parking_lot 0.12.1", - "schnorrkel", - "sp-core", - "sp-externalities", - "thiserror", -] - -[[package]] -name = "sp-panic-handler" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" +name = "snark-verifier-sdk" +version = "0.0.1" +source = "git+https://github.com/scroll-tech/snark-verifier?branch=develop#a530941eb9a6151c46d5546ca818d04bbd286c02" dependencies = [ - "backtrace", + "bincode", + "env_logger 0.10.0", + "ethereum-types 0.14.1", + "halo2-base", + "hex", + "itertools", "lazy_static", - "regex", -] - -[[package]] -name = "sp-runtime" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "paste", - "rand 0.8.5", - "scale-info", - "serde", - "sp-application-crypto", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-std", - "sp-weights", -] - -[[package]] -name = "sp-runtime-interface" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types 0.12.1", - "sp-externalities", - "sp-runtime-interface-proc-macro", - "sp-std", - "sp-storage", - "sp-tracing", - "sp-wasm-interface", - "static_assertions", -] - -[[package]] -name = "sp-runtime-interface-proc-macro" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "Inflector", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-staking" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-state-machine" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "hash-db 0.16.0", "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "smallvec", - "sp-core", - "sp-externalities", - "sp-panic-handler", - "sp-std", - "sp-trie", - "thiserror", - "tracing", -] - -[[package]] -name = "sp-std" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" - -[[package]] -name = "sp-storage" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "impl-serde 0.4.0", - "parity-scale-codec", - "ref-cast", - "serde", - "sp-debug-derive", - "sp-std", -] - -[[package]] -name = "sp-tracing" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "parity-scale-codec", - "sp-std", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "sp-trie" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "ahash 0.8.3", - "hash-db 0.16.0", - "hashbrown 0.13.2", - "lazy_static", - "memory-db", - "nohash-hasher", - "parity-scale-codec", - "parking_lot 0.12.1", - "scale-info", - "schnellru", - "sp-core", - "sp-std", - "thiserror", - "tracing", - "trie-db", - "trie-root", -] - -[[package]] -name = "sp-version" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "impl-serde 0.4.0", - "parity-scale-codec", - "parity-wasm", - "scale-info", + "num-bigint", + "num-integer", + "num-traits", + "rand", + "rand_chacha", "serde", - "sp-core-hashing-proc-macro", - "sp-runtime", - "sp-std", - "sp-version-proc-macro", - "thiserror", -] - -[[package]] -name = "sp-version-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "parity-scale-codec", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-wasm-interface" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" -dependencies = [ - "anyhow", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "sp-std", - "wasmi", - "wasmtime", + "serde_json", + "snark-verifier", ] [[package]] -name = "sp-weights" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#8f0b0f69e79c0dcf1487b9858792439c35a1d4cd" +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "smallvec", - "sp-arithmetic", - "sp-core", - "sp-debug-derive", - "sp-std", + "libc", + "winapi", ] [[package]] @@ -4566,26 +3656,18 @@ dependencies = [ ] [[package]] -name = "ss58-registry" -version = "1.37.0" +name = "stacker" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d44528162f980c0e03c71e005d334332c8da0aec9f2b0b4bdc557ed4a9f24776" +checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" dependencies = [ - "Inflector", - "num-format", - "proc-macro2", - "quote", - "serde", - "serde_json", - "unicode-xid", + "cc", + "cfg-if 1.0.0", + "libc", + "psm", + "winapi", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - [[package]] name = "static_assertions" version = "1.1.0" @@ -4609,28 +3691,15 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.24.0" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6878079b17446e4d3eba6192bb0a2950d5b14f0ed8424b852310e5a94345d0ef" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck", "proc-macro2", "quote", "rustversion", - "syn", -] - -[[package]] -name = "substrate-bip39" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" -dependencies = [ - "hmac 0.11.0", - "pbkdf2 0.8.0", - "schnorrkel", - "sha2 0.9.9", - "zeroize", + "syn 1.0.109", ] [[package]] @@ -4642,7 +3711,7 @@ dependencies = [ "byteorder", "crunchy", "lazy_static", - "rand 0.8.5", + "rand", "rustc-hex", ] @@ -4654,9 +3723,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.98" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -4664,15 +3733,14 @@ dependencies = [ ] [[package]] -name = "synstructure" -version = "0.12.6" +name = "syn" +version = "2.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" dependencies = [ "proc-macro2", "quote", - "syn", - "unicode-xid", + "unicode-ident", ] [[package]] @@ -4681,108 +3749,57 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" -[[package]] -name = "target-lexicon" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d" - -[[package]] -name = "tera" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c9783d6ff395ae80cf17ed9a25360e7ba37742a79fa8fddabb073c5c7c8856d" -dependencies = [ - "chrono", - "chrono-tz", - "globwalk", - "humansize", - "lazy_static", - "percent-encoding", - "pest", - "pest_derive", - "rand 0.8.5", - "regex", - "serde", - "serde_json", - "slug", - "unic-segment", -] - [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] -[[package]] -name = "textwrap" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" - [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.27", ] [[package]] -name = "thread_local" -version = "1.1.4" +name = "thread-id" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "3ee93aa2b8331c0fec9091548843f2c90019571814057da3b783f9de09349d73" dependencies = [ - "once_cell", + "libc", + "redox_syscall 0.2.16", + "winapi", ] [[package]] name = "time" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", "winapi", ] -[[package]] -name = "tiny-bip39" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" -dependencies = [ - "anyhow", - "hmac 0.12.1", - "once_cell", - "pbkdf2 0.11.0", - "rand 0.8.5", - "rustc-hash", - "sha2 0.10.2", - "thiserror", - "unicode-normalization", - "wasm-bindgen", - "zeroize", -] - [[package]] name = "tiny-keccak" version = "2.0.2" @@ -4803,24 +3820,24 @@ dependencies = [ [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.19.2" +version = "1.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" +checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" dependencies = [ + "autocfg", + "backtrace", "bytes", "libc", - "memchr", "mio", - "once_cell", "pin-project-lite", "socket2", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -4829,11 +3846,21 @@ version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls", + "rustls 0.20.8", "tokio", "webpki", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.5", + "tokio", +] + [[package]] name = "tokio-tungstenite" version = "0.17.2" @@ -4842,9 +3869,9 @@ checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" dependencies = [ "futures-util", "log", - "rustls", + "rustls 0.20.8", "tokio", - "tokio-rustls", + "tokio-rustls 0.23.4", "tungstenite", "webpki", "webpki-roots", @@ -4852,9 +3879,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.3" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", @@ -4866,13 +3893,30 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" + +[[package]] +name = "toml_edit" +version = "0.19.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +dependencies = [ + "indexmap 2.0.0", + "toml_datetime", + "winnow", +] + [[package]] name = "tower-service" version = "0.3.2" @@ -4893,270 +3937,111 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-serde" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" -dependencies = [ - "serde", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "ansi_term", - "chrono", - "lazy_static", - "matchers", - "regex", - "serde", - "serde_json", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", - "tracing-serde", -] - -[[package]] -name = "trie-db" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d75c77ea43f2ad8ea9d9c58de49dfc9c3995bdef32b503df7883ff054e7f1" -dependencies = [ - "hash-db 0.16.0", - "hashbrown 0.13.2", - "log", - "rustc-hex", - "smallvec", -] - -[[package]] -name = "trie-root" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" -dependencies = [ - "hash-db 0.16.0", -] - -[[package]] -name = "triehash" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1631b201eb031b563d2e85ca18ec8092508e262a3196ce9bd10a67ec87b9f5c" -dependencies = [ - "hash-db 0.15.2", - "rlp", -] - -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - -[[package]] -name = "tt-call" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" - -[[package]] -name = "tungstenite" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" -dependencies = [ - "base64 0.13.0", - "byteorder", - "bytes", - "http", - "httparse", - "log", - "rand 0.8.5", - "rustls", - "sha-1 0.10.0", - "thiserror", - "url", - "utf-8", - "webpki", -] - -[[package]] -name = "twox-hash" -version = "1.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if 1.0.0", - "digest 0.10.3", - "rand 0.7.3", - "static_assertions", -] - -[[package]] -name = "typenum" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" - -[[package]] -name = "types" -version = "0.3.0" -source = "git+https://github.com/scroll-tech/scroll-prover?rev=78ab7a7#78ab7a770f7753fa88c8aab4969296f06e1c811a" -dependencies = [ - "base64 0.13.0", - "blake2", - "eth-types", - "ethers-core", - "serde", - "serde_derive", - "serde_json", - "serde_repr", -] - -[[package]] -name = "ucd-trie" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" - -[[package]] -name = "uint" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f03af7ccf01dd611cc450a0d10dbc9b745770d096473e2faf0ca6e2d66d1e0" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - -[[package]] -name = "uncased" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622" -dependencies = [ - "version_check", + "quote", + "syn 2.0.27", ] [[package]] -name = "unic-char-property" -version = "0.9.0" +name = "tracing-core" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ - "unic-char-range", + "once_cell", ] [[package]] -name = "unic-char-range" -version = "0.9.0" +name = "tracing-futures" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] [[package]] -name = "unic-common" -version = "0.9.0" +name = "try-lock" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] -name = "unic-segment" -version = "0.9.0" +name = "tungstenite" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" +checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" dependencies = [ - "unic-ucd-segment", + "base64 0.13.1", + "byteorder", + "bytes", + "http", + "httparse", + "log", + "rand", + "rustls 0.20.8", + "sha-1", + "thiserror", + "url", + "utf-8", + "webpki", ] [[package]] -name = "unic-ucd-segment" -version = "0.9.0" +name = "typenum" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "types" +version = "0.4.0" +source = "git+https://github.com/scroll-tech/scroll-prover?rev=260607c#260607c1f883cbe4be7b290860bef5114cbcea61" dependencies = [ - "unic-char-property", - "unic-char-range", - "unic-ucd-version", + "base64 0.13.1", + "blake2", + "eth-types", + "ethers-core", + "serde", + "serde_derive", + "serde_json", + "serde_repr", ] [[package]] -name = "unic-ucd-version" -version = "0.9.0" +name = "uint" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ - "unic-common", + "byteorder", + "crunchy", + "hex", + "static_assertions", ] [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-normalization" -version = "0.1.19" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] @@ -5175,9 +4060,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" dependencies = [ "form_urlencoded", "idna", @@ -5196,15 +4081,15 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.7", + "getrandom", "serde", ] [[package]] -name = "valuable" -version = "0.1.0" +name = "uuid" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" [[package]] name = "version_check" @@ -5212,33 +4097,15 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.10.0+wasi-snapshot-preview1" @@ -5253,9 +4120,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.81" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -5263,24 +4130,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.81" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.27", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.31" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -5290,9 +4157,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.81" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5300,22 +4167,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.81" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.27", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.81" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "wasm-timer" @@ -5332,186 +4199,11 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmi" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" -dependencies = [ - "parity-wasm", - "wasmi-validation", - "wasmi_core", -] - -[[package]] -name = "wasmi-validation" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b" -dependencies = [ - "parity-wasm", -] - -[[package]] -name = "wasmi_core" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" -dependencies = [ - "downcast-rs", - "libm", - "memory_units", - "num-rational", - "num-traits", -] - -[[package]] -name = "wasmparser" -version = "0.100.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" -dependencies = [ - "indexmap", - "url", -] - -[[package]] -name = "wasmtime" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e89f9819523447330ffd70367ef4a18d8c832e24e8150fe054d1d912841632" -dependencies = [ - "anyhow", - "bincode", - "cfg-if 1.0.0", - "indexmap", - "libc", - "log", - "object 0.29.0", - "once_cell", - "paste", - "psm", - "serde", - "target-lexicon", - "wasmparser", - "wasmtime-environ", - "wasmtime-jit", - "wasmtime-runtime", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasmtime-asm-macros" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd3a5e46c198032da934469f3a6e48649d1f9142438e4fd4617b68a35644b8a" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "wasmtime-environ" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a6db9fc52985ba06ca601f2ff0ff1f526c5d724c7ac267b47326304b0c97883" -dependencies = [ - "anyhow", - "cranelift-entity", - "gimli 0.26.2", - "indexmap", - "log", - "object 0.29.0", - "serde", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-types", -] - -[[package]] -name = "wasmtime-jit" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b77e3a52cd84d0f7f18554afa8060cfe564ccac61e3b0802d3fd4084772fa5f6" -dependencies = [ - "addr2line 0.17.0", - "anyhow", - "bincode", - "cfg-if 1.0.0", - "cpp_demangle", - "gimli 0.26.2", - "log", - "object 0.29.0", - "rustc-demangle", - "serde", - "target-lexicon", - "wasmtime-environ", - "wasmtime-jit-icache-coherence", - "wasmtime-runtime", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasmtime-jit-debug" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" -dependencies = [ - "once_cell", -] - -[[package]] -name = "wasmtime-jit-icache-coherence" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67d412e9340ab1c83867051d8d1d7c90aa8c9afc91da086088068e2734e25064" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasmtime-runtime" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d594e791b5fdd4dbaf8cf7ae62f2e4ff85018ce90f483ca6f42947688e48827d" -dependencies = [ - "anyhow", - "cc", - "cfg-if 1.0.0", - "indexmap", - "libc", - "log", - "mach", - "memfd", - "memoffset", - "paste", - "rand 0.8.5", - "rustix 0.36.7", - "wasmtime-asm-macros", - "wasmtime-environ", - "wasmtime-jit-debug", - "windows-sys 0.42.0", -] - -[[package]] -name = "wasmtime-types" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6688d6f96d4dbc1f89fab626c56c1778936d122b5f4ae7a57c2eb42b8d982e2" -dependencies = [ - "cranelift-entity", - "serde", - "thiserror", - "wasmparser", -] - [[package]] name = "web-sys" -version = "0.3.58" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" dependencies = [ "js-sys", "wasm-bindgen", @@ -5529,9 +4221,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.3" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" dependencies = [ "webpki", ] @@ -5568,16 +4260,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows-sys" -version = "0.36.1" +name = "windows" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", + "windows-targets", ] [[package]] @@ -5586,86 +4274,131 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" [[package]] name = "windows_aarch64_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + +[[package]] +name = "winnow" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "8bd122eb777186e60c3fdf765a58ac76e41c582f1f535fbf3314434c6b58f3f7" +dependencies = [ + "memchr", +] [[package]] name = "winreg" @@ -5678,13 +4411,14 @@ dependencies = [ [[package]] name = "ws_stream_wasm" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47ca1ab42f5afed7fc332b22b6e932ca5414b209465412c8cdf0ad23bc0de645" +checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" dependencies = [ "async_io_stream", "futures", "js-sys", + "log", "pharos", "rustc_version", "send_wrapper", @@ -5696,85 +4430,33 @@ dependencies = [ [[package]] name = "wyz" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b31594f29d27036c383b53b59ed3476874d518f0efb151b27a4c275141390e" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ "tap", ] [[package]] name = "zeroize" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.3.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zkevm" -version = "0.3.0" -source = "git+https://github.com/scroll-tech/scroll-prover?rev=78ab7a7#78ab7a770f7753fa88c8aab4969296f06e1c811a" -dependencies = [ - "anyhow", - "blake2", - "bus-mapping", - "chrono", - "dotenv", - "env_logger", - "eth-types", - "ethers-core", - "halo2-snark-aggregator-api", - "halo2-snark-aggregator-circuit", - "halo2-snark-aggregator-solidity", - "halo2_proofs", - "hex", - "is-even", - "itertools", - "log", - "mpt-zktrie", - "num-bigint", - "once_cell", - "procfs", - "rand 0.8.5", - "rand_xorshift", - "serde", - "serde_derive", - "serde_json", - "sha2 0.10.2", - "strum", - "strum_macros", - "types", - "zkevm-circuits", -] +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" [[package]] name = "zkevm-circuits" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=v0.3#c1c400436fd60b2e80e223e4c10cbff38d41e307" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" dependencies = [ "array-init", "bus-mapping", - "env_logger", + "env_logger 0.9.3", "eth-types", "ethers-core", "ethers-signers", "gadgets", - "halo2_base", - "halo2_ecc", + "halo2-base", + "halo2-ecc", "halo2_proofs", "hex", "itertools", @@ -5788,12 +4470,16 @@ dependencies = [ "num", "num-bigint", "once_cell", - "rand 0.8.5", - "rand_chacha 0.3.1", + "poseidon-circuit", + "rand", + "rand_chacha", "rand_xorshift", "rayon", - "sha3 0.10.1", + "serde", + "serde_json", + "sha3 0.10.8", "snark-verifier", + "snark-verifier-sdk", "strum", "strum_macros", "subtle", @@ -5803,16 +4489,16 @@ dependencies = [ name = "zkp" version = "0.1.0" dependencies = [ - "env_logger", + "env_logger 0.9.3", "halo2_proofs", "libc", "log", "once_cell", + "prover", "serde", "serde_derive", "serde_json", "types", - "zkevm", ] [[package]] @@ -5820,5 +4506,5 @@ name = "zktrie" version = "0.1.2" source = "git+https://github.com/scroll-tech/zktrie.git?branch=scroll-dev-0226#1a5562f663a81ff903383db69dc6c9404b63e69d" dependencies = [ - "gobuild", + "gobuild 0.1.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/common/libzkp/impl/Cargo.toml b/common/libzkp/impl/Cargo.toml index 1019e90867..cd9fc18ac9 100644 --- a/common/libzkp/impl/Cargo.toml +++ b/common/libzkp/impl/Cargo.toml @@ -7,18 +7,20 @@ edition = "2021" [lib] crate-type = ["cdylib"] -# `//` is used to skip https://github.com/rust-lang/cargo/issues/5478#issuecomment-522719793. -[patch."https://github.com/privacy-scaling-explorations/halo2curves.git"] -halo2curves = { git = 'https://github.com/privacy-scaling-explorations//halo2curves.git', rev = "9b67e19" } [patch."https://github.com/privacy-scaling-explorations/halo2.git"] -halo2_proofs = { git = "https://github.com/scroll-tech/halo2.git", branch = "scroll-dev-0220" } +halo2_proofs = { git = "https://github.com/scroll-tech/halo2.git", branch = "develop" } [patch."https://github.com/privacy-scaling-explorations/poseidon.git"] poseidon = { git = "https://github.com/scroll-tech/poseidon.git", branch = "scroll-dev-0220" } +[patch."https://github.com/privacy-scaling-explorations/halo2wrong.git"] +halo2wrong = { git = "https://github.com/scroll-tech/halo2wrong.git", branch = "halo2-ecc-snark-verifier-0323" } +maingate = { git = "https://github.com/scroll-tech/halo2wrong", branch = "halo2-ecc-snark-verifier-0323" } +[patch."https://github.com/privacy-scaling-explorations/halo2curves.git"] +halo2curves = { git = "https://github.com/scroll-tech/halo2curves.git", branch = "0.3.1-derive-serde" } [dependencies] -zkevm = { git = "https://github.com/scroll-tech/scroll-prover", rev="78ab7a7" } -types = { git = "https://github.com/scroll-tech/scroll-prover", rev="78ab7a7" } -halo2_proofs = { git = "https://github.com/privacy-scaling-explorations/halo2.git", tag = "v2022_09_10" } +prover = { git = "https://github.com/scroll-tech/scroll-prover", rev="260607c" } +types = { git = "https://github.com/scroll-tech/scroll-prover", rev="260607c" } +halo2_proofs = { git = "https://github.com/scroll-tech/halo2.git", branch = "develop" } log = "0.4" env_logger = "0.9.0" diff --git a/common/libzkp/impl/rustfmt.toml b/common/libzkp/impl/rustfmt.toml new file mode 100644 index 0000000000..b7a6013264 --- /dev/null +++ b/common/libzkp/impl/rustfmt.toml @@ -0,0 +1,9 @@ +edition = "2021" + +comment_width = 100 +imports_granularity = "Crate" +max_width = 100 +newline_style = "Unix" +# normalize_comments = true +reorder_imports = true +wrap_comments = true diff --git a/common/libzkp/impl/src/batch.rs b/common/libzkp/impl/src/batch.rs new file mode 100644 index 0000000000..4fffdbc697 --- /dev/null +++ b/common/libzkp/impl/src/batch.rs @@ -0,0 +1,88 @@ +use crate::utils::{c_char_to_str, c_char_to_vec, vec_to_c_char, OUTPUT_DIR}; +use libc::c_char; +use prover::{ + aggregator::{Prover, Verifier}, + io::read_all, + utils::{chunk_trace_to_witness_block, init_env_and_log}, + ChunkHash, ChunkProof, Proof, +}; +use std::cell::OnceCell; +use types::eth::BlockTrace; + +static mut PROVER: OnceCell = OnceCell::new(); +static mut VERIFIER: OnceCell = OnceCell::new(); + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn init_batch_prover(params_dir: *const c_char) { + init_env_and_log("ffi_batch_prove"); + + let params_dir = c_char_to_str(params_dir); + let prover = Prover::from_params_dir(params_dir); + + PROVER.set(prover).unwrap(); +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn init_batch_verifier(params_dir: *const c_char, vk_path: *const c_char) { + init_env_and_log("ffi_batch_verify"); + + let params_dir = c_char_to_str(params_dir); + let raw_vk = read_all(c_char_to_str(vk_path)); + let verifier = Verifier::from_params_dir(params_dir, &raw_vk); + + VERIFIER.set(verifier).unwrap(); +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn gen_batch_proof( + chunk_hashes: *const c_char, + chunk_proofs: *const c_char, +) -> *const c_char { + let chunk_hashes = c_char_to_vec(chunk_hashes); + let chunk_proofs = c_char_to_vec(chunk_proofs); + + let chunk_hashes = serde_json::from_slice::>(&chunk_hashes).unwrap(); + let chunk_proofs = serde_json::from_slice::>(&chunk_proofs).unwrap(); + assert_eq!(chunk_hashes.len(), chunk_proofs.len()); + + let chunk_hashes_proofs = chunk_hashes + .into_iter() + .zip(chunk_proofs.into_iter()) + .collect(); + + let proof = PROVER + .get_mut() + .unwrap() + .gen_agg_proof(chunk_hashes_proofs, None, OUTPUT_DIR.as_deref()) + .unwrap(); + + let proof_bytes = serde_json::to_vec(&proof).unwrap(); + vec_to_c_char(proof_bytes) +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn verify_batch_proof(proof: *const c_char) -> c_char { + let proof = c_char_to_vec(proof); + let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); + + let verified = VERIFIER.get().unwrap().verify_agg_proof(proof); + verified as c_char +} + +// This function is only used for debugging on Go side. +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn block_traces_to_chunk_hash(block_traces: *const c_char) -> *const c_char { + let block_traces = c_char_to_vec(block_traces); + let block_traces = serde_json::from_slice::>(&block_traces).unwrap(); + + let witness_block = chunk_trace_to_witness_block(block_traces).unwrap(); + let chunk_hash = ChunkHash::from_witness_block(&witness_block, false); + + let chunk_hash_bytes = serde_json::to_vec(&chunk_hash).unwrap(); + vec_to_c_char(chunk_hash_bytes) +} diff --git a/common/libzkp/impl/src/chunk.rs b/common/libzkp/impl/src/chunk.rs new file mode 100644 index 0000000000..2fd30a775a --- /dev/null +++ b/common/libzkp/impl/src/chunk.rs @@ -0,0 +1,62 @@ +use crate::utils::{c_char_to_str, c_char_to_vec, vec_to_c_char, OUTPUT_DIR}; +use libc::c_char; +use prover::{ + io::read_all, + utils::init_env_and_log, + zkevm::{Prover, Verifier}, + ChunkProof, +}; +use std::cell::OnceCell; +use types::eth::BlockTrace; + +static mut PROVER: OnceCell = OnceCell::new(); +static mut VERIFIER: OnceCell = OnceCell::new(); + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn init_chunk_prover(params_dir: *const c_char) { + init_env_and_log("ffi_chunk_prove"); + + let params_dir = c_char_to_str(params_dir); + let prover = Prover::from_params_dir(params_dir); + + PROVER.set(prover).unwrap(); +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn init_chunk_verifier(params_dir: *const c_char, vk_path: *const c_char) { + init_env_and_log("ffi_chunk_verify"); + + let params_dir = c_char_to_str(params_dir); + let raw_vk = read_all(c_char_to_str(vk_path)); + let verifier = Verifier::from_params_dir(params_dir, &raw_vk); + + VERIFIER.set(verifier).unwrap(); +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn gen_chunk_proof(block_traces: *const c_char) -> *const c_char { + let block_traces = c_char_to_vec(block_traces); + let block_traces = serde_json::from_slice::>(&block_traces).unwrap(); + + let proof = PROVER + .get_mut() + .unwrap() + .gen_chunk_proof(block_traces, None, OUTPUT_DIR.as_deref()) + .unwrap(); + + let proof_bytes = serde_json::to_vec(&proof).unwrap(); + vec_to_c_char(proof_bytes) +} + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn verify_chunk_proof(proof: *const c_char) -> c_char { + let proof = c_char_to_vec(proof); + let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); + + let verified = VERIFIER.get().unwrap().verify_chunk_proof(proof); + verified as c_char +} diff --git a/common/libzkp/impl/src/lib.rs b/common/libzkp/impl/src/lib.rs index 8abc2ec9d6..d60bbd5e18 100644 --- a/common/libzkp/impl/src/lib.rs +++ b/common/libzkp/impl/src/lib.rs @@ -1,23 +1,5 @@ #![feature(once_cell)] -pub mod prove; -pub mod verify; - -pub(crate) mod utils { - use std::ffi::{CStr, CString}; - use std::os::raw::c_char; - - pub(crate) fn c_char_to_str(c: *const c_char) -> &'static str { - let cstr = unsafe { CStr::from_ptr(c) }; - cstr.to_str().unwrap() - } - - pub(crate) fn c_char_to_vec(c: *const c_char) -> Vec { - let cstr = unsafe { CStr::from_ptr(c) }; - cstr.to_bytes().to_vec() - } - - pub(crate) fn vec_to_c_char(bytes: Vec) -> *const c_char { - CString::new(bytes).unwrap().into_raw() - } -} +mod batch; +mod chunk; +mod utils; diff --git a/common/libzkp/impl/src/prove.rs b/common/libzkp/impl/src/prove.rs deleted file mode 100644 index 33255e5450..0000000000 --- a/common/libzkp/impl/src/prove.rs +++ /dev/null @@ -1,58 +0,0 @@ -use crate::utils::{c_char_to_str, c_char_to_vec, vec_to_c_char}; -use halo2_proofs::SerdeFormat; -use libc::c_char; -use std::cell::OnceCell; -use std::panic; -use std::ptr::null; -use types::eth::BlockTrace; -use zkevm::circuit::AGG_DEGREE; -use zkevm::utils::{load_params, load_seed}; -use zkevm::{circuit::DEGREE, prover::Prover}; - -static mut PROVER: OnceCell = OnceCell::new(); - -/// # Safety -#[no_mangle] -pub unsafe extern "C" fn init_prover(params_path: *const c_char, seed_path: *const c_char) { - env_logger::init(); - - let params_path = c_char_to_str(params_path); - let seed_path = c_char_to_str(seed_path); - let params = load_params(params_path, *DEGREE, SerdeFormat::RawBytesUnchecked).unwrap(); - let agg_params = load_params(params_path, *AGG_DEGREE, SerdeFormat::RawBytesUnchecked).unwrap(); - let seed = load_seed(seed_path).unwrap(); - let p = Prover::from_params_and_seed(params, agg_params, seed); - PROVER.set(p).unwrap(); -} - -/// # Safety -#[no_mangle] -pub unsafe extern "C" fn create_agg_proof(trace_char: *const c_char) -> *const c_char { - let trace_vec = c_char_to_vec(trace_char); - let trace = serde_json::from_slice::(&trace_vec).unwrap(); - let proof_result = panic::catch_unwind(|| { - let proof = PROVER - .get_mut() - .unwrap() - .create_agg_circuit_proof(&trace) - .unwrap(); - serde_json::to_vec(&proof).unwrap() - }); - proof_result.map_or(null(), vec_to_c_char) -} - -/// # Safety -#[no_mangle] -pub unsafe extern "C" fn create_agg_proof_multi(trace_char: *const c_char) -> *const c_char { - let trace_vec = c_char_to_vec(trace_char); - let traces = serde_json::from_slice::>(&trace_vec).unwrap(); - let proof_result = panic::catch_unwind(|| { - let proof = PROVER - .get_mut() - .unwrap() - .create_agg_circuit_proof_batch(traces.as_slice()) - .unwrap(); - serde_json::to_vec(&proof).unwrap() - }); - proof_result.map_or(null(), vec_to_c_char) -} diff --git a/common/libzkp/impl/src/utils.rs b/common/libzkp/impl/src/utils.rs new file mode 100644 index 0000000000..2017dd34c1 --- /dev/null +++ b/common/libzkp/impl/src/utils.rs @@ -0,0 +1,24 @@ +use once_cell::sync::Lazy; +use std::{ + env, + ffi::{CStr, CString}, + os::raw::c_char, +}; + +// Only used for debugging. +pub(crate) static OUTPUT_DIR: Lazy> = + Lazy::new(|| env::var("PROVER_OUTPUT_DIR").ok()); + +pub(crate) fn c_char_to_str(c: *const c_char) -> &'static str { + let cstr = unsafe { CStr::from_ptr(c) }; + cstr.to_str().unwrap() +} + +pub(crate) fn c_char_to_vec(c: *const c_char) -> Vec { + let cstr = unsafe { CStr::from_ptr(c) }; + cstr.to_bytes().to_vec() +} + +pub(crate) fn vec_to_c_char(bytes: Vec) -> *const c_char { + CString::new(bytes).unwrap().into_raw() +} diff --git a/common/libzkp/impl/src/verify.rs b/common/libzkp/impl/src/verify.rs deleted file mode 100644 index 79de1c94e8..0000000000 --- a/common/libzkp/impl/src/verify.rs +++ /dev/null @@ -1,44 +0,0 @@ -use crate::utils::{c_char_to_str, c_char_to_vec}; -use halo2_proofs::SerdeFormat; -use libc::c_char; -use std::fs::File; -use std::io::Read; -use std::panic; -use zkevm::circuit::{AGG_DEGREE, DEGREE}; -use zkevm::prover::AggCircuitProof; -use zkevm::utils::load_params; -use zkevm::verifier::Verifier; - -static mut VERIFIER: Option<&Verifier> = None; - -/// # Safety -#[no_mangle] -pub unsafe extern "C" fn init_verifier(params_path: *const c_char, agg_vk_path: *const c_char) { - env_logger::init(); - - let params_path = c_char_to_str(params_path); - let agg_vk_path = c_char_to_str(agg_vk_path); - let mut f = File::open(agg_vk_path).unwrap(); - let mut agg_vk = vec![]; - f.read_to_end(&mut agg_vk).unwrap(); - - let params = load_params(params_path, *DEGREE, SerdeFormat::RawBytesUnchecked).unwrap(); - let agg_params = load_params(params_path, *AGG_DEGREE, SerdeFormat::RawBytesUnchecked).unwrap(); - - let v = Box::new(Verifier::from_params(params, agg_params, Some(agg_vk))); - VERIFIER = Some(Box::leak(v)) -} - -/// # Safety -#[no_mangle] -pub unsafe extern "C" fn verify_agg_proof(proof: *const c_char) -> c_char { - let proof_vec = c_char_to_vec(proof); - let agg_proof = serde_json::from_slice::(proof_vec.as_slice()).unwrap(); - let verified = panic::catch_unwind(|| { - VERIFIER - .unwrap() - .verify_agg_circuit_proof(agg_proof) - .is_ok() - }); - verified.unwrap_or(false) as c_char -} diff --git a/coordinator/internal/logic/verifier/verifier.go b/coordinator/internal/logic/verifier/batch_verifier.go similarity index 100% rename from coordinator/internal/logic/verifier/verifier.go rename to coordinator/internal/logic/verifier/batch_verifier.go diff --git a/coordinator/internal/logic/verifier/verifier_test.go b/coordinator/internal/logic/verifier/batch_verifier_test.go similarity index 100% rename from coordinator/internal/logic/verifier/verifier_test.go rename to coordinator/internal/logic/verifier/batch_verifier_test.go diff --git a/coordinator/internal/logic/verifier/chunk_verifier.go b/coordinator/internal/logic/verifier/chunk_verifier.go new file mode 100644 index 0000000000..8698da7048 --- /dev/null +++ b/coordinator/internal/logic/verifier/chunk_verifier.go @@ -0,0 +1,72 @@ +//go:build !mock_verifier + +package verifier + +/* +#cgo LDFLAGS: -lzkp -lm -ldl -lzktrie -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib +#cgo gpu LDFLAGS: -lzkp -lm -ldl -lgmp -lstdc++ -lprocps -lzktrie -L/usr/local/cuda/lib64/ -lcudart -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib +#include +#include "./lib/libzkp.h" +*/ +import "C" //nolint:typecheck + +import ( + "encoding/json" + "unsafe" + + "github.com/scroll-tech/go-ethereum/log" + + "scroll-tech/coordinator/internal/config" + + "scroll-tech/common/types/message" +) + +// InvalidTestProof invalid proof used in tests +const InvalidTestProof = "this is a invalid proof" + +// Verifier represents a rust ffi to a halo2 verifier. +type Verifier struct { + cfg *config.VerifierConfig +} + +// NewVerifier Sets up a rust ffi to call verify. +func NewVerifier(cfg *config.VerifierConfig) (*Verifier, error) { + if cfg.MockMode { + return &Verifier{cfg: cfg}, nil + } + paramsPathStr := C.CString(cfg.ParamsPath) + aggVkPathStr := C.CString(cfg.AggVkPath) + defer func() { + C.free(unsafe.Pointer(paramsPathStr)) + C.free(unsafe.Pointer(aggVkPathStr)) + }() + + C.init_verifier(paramsPathStr, aggVkPathStr) + + return &Verifier{cfg: cfg}, nil +} + +// VerifyProof Verify a ZkProof by marshaling it and sending it to the Halo2 Verifier. +func (v *Verifier) VerifyProof(proof *message.BatchProof) (bool, error) { + if v.cfg.MockMode { + log.Info("Mock mode, verifier disabled") + if string(proof.Proof) == InvalidTestProof { + return false, nil + } + return true, nil + + } + buf, err := json.Marshal(proof) + if err != nil { + return false, err + } + + proofStr := C.CString(string(buf)) + defer func() { + C.free(unsafe.Pointer(proofStr)) + }() + + log.Info("Start to verify proof ...") + verified := C.verify_agg_proof(proofStr) + return verified != 0, nil +} diff --git a/coordinator/internal/logic/verifier/chunk_verifier_test.go b/coordinator/internal/logic/verifier/chunk_verifier_test.go new file mode 100644 index 0000000000..1ecb9be994 --- /dev/null +++ b/coordinator/internal/logic/verifier/chunk_verifier_test.go @@ -0,0 +1,45 @@ +//go:build ffi + +package verifier + +import ( + "encoding/json" + "flag" + "io" + "os" + "testing" + + "github.com/stretchr/testify/assert" + + "scroll-tech/common/types/message" + + "scroll-tech/coordinator/internal/config" +) + +var ( + paramsPath = flag.String("params", "/assets/test_params", "params dir") + aggVkPath = flag.String("vk", "/assets/agg_vk", "aggregation proof verification key path") + proofPath = flag.String("proof", "/assets/agg_proof", "aggregation proof path") +) + +func TestFFI(t *testing.T) { + as := assert.New(t) + cfg := &config.VerifierConfig{ + MockMode: false, + ParamsPath: *paramsPath, + AggVkPath: *aggVkPath, + } + v, err := NewVerifier(cfg) + as.NoError(err) + + f, err := os.Open(*proofPath) + as.NoError(err) + byt, err := io.ReadAll(f) + as.NoError(err) + proof := &message.BatchProof{} + as.NoError(json.Unmarshal(byt, proof)) + + ok, err := v.VerifyProof(proof) + as.NoError(err) + as.True(ok) +} diff --git a/prover/.gitignore b/prover/.gitignore index 9cedc99e52..f2776ceb41 100644 --- a/prover/.gitignore +++ b/prover/.gitignore @@ -6,9 +6,9 @@ build/bin/ # ignore db file bbolt_db -prover/lib +core/lib params/ seed -keystore \ No newline at end of file +keystore diff --git a/prover/core/prover.go b/prover/core/batch_prover.go similarity index 96% rename from prover/core/prover.go rename to prover/core/batch_prover.go index 08a259110b..ac98f12fcd 100644 --- a/prover/core/prover.go +++ b/prover/core/batch_prover.go @@ -32,10 +32,8 @@ type ProverCore struct { // NewProverCore inits a ProverCore object. func NewProverCore(cfg *config.ProverCoreConfig) (*ProverCore, error) { paramsPathStr := C.CString(cfg.ParamsPath) - seedPathStr := C.CString(cfg.SeedPath) defer func() { C.free(unsafe.Pointer(paramsPathStr)) - C.free(unsafe.Pointer(seedPathStr)) }() C.init_prover(paramsPathStr, seedPathStr) diff --git a/prover/core/prover_test.go b/prover/core/batch_prover_test.go similarity index 87% rename from prover/core/prover_test.go rename to prover/core/batch_prover_test.go index 71ccad86d0..1e3bfcd611 100644 --- a/prover/core/prover_test.go +++ b/prover/core/batch_prover_test.go @@ -19,16 +19,14 @@ import ( var ( paramsPath = flag.String("params", "/assets/test_params", "params dir") - seedPath = flag.String("seed", "/assets/test_seed", "seed path") tracesPath = flag.String("traces", "/assets/traces", "traces dir") - proofDumpPath = flag.String("dump", "/assets/agg_proof", "the path proofs dump to") + proofDumpPath = flag.String("dump", "/assets/proof_data", "the path proofs dump to") ) func TestFFI(t *testing.T) { as := assert.New(t) cfg := &config.ProverCoreConfig{ ParamsPath: *paramsPath, - SeedPath: *seedPath, } proverCore, err := core.NewProverCore(cfg) as.NoError(err) diff --git a/prover/core/chunk_prover.go b/prover/core/chunk_prover.go new file mode 100644 index 0000000000..6586cd5469 --- /dev/null +++ b/prover/core/chunk_prover.go @@ -0,0 +1,102 @@ +//go:build !mock_prover + +package core + +/* +#cgo LDFLAGS: -lzkp -lm -ldl -lzktrie -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib +#cgo gpu LDFLAGS: -lzkp -lm -ldl -lgmp -lstdc++ -lprocps -lzktrie -L/usr/local/cuda/lib64/ -lcudart -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib +#include +#include "./lib/libzkp.h" +*/ +import "C" //nolint:typecheck + +import ( + "encoding/json" + "os" + "path/filepath" + "unsafe" + + "github.com/scroll-tech/go-ethereum/core/types" + "github.com/scroll-tech/go-ethereum/log" + + "scroll-tech/common/types/message" + + "scroll-tech/prover/config" +) + +// ProverCore sends block-traces to rust-prover through ffi and get back the zk-proof. +type ChunkProverCore struct { + cfg *config.ChunkProverCoreConfig +} + +// NewChunkProverCore inits a ChunkProverCore object. +func NewChunkProverCore(cfg *config.ChunkProverCoreConfig) (*ChunkProverCore, error) { + paramsPathStr := C.CString(cfg.ParamsPath) + defer func() { + C.free(unsafe.Pointer(paramsPathStr)) + }() + C.init_chunk_prover(paramsPathStr) + + if cfg.DumpDir != "" { + err := os.MkdirAll(cfg.DumpDir, os.ModePerm) + if err != nil { + return nil, err + } + log.Info("Enabled dump_chunk_proof", "dir", cfg.DumpDir) + } + + return &ChunkProverCore{cfg: cfg}, nil +} + +// Prove call rust ffi to generate chunk proof, if first failed, try again. +func (p *ChunkProverCore) Prove(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { + var proofByt []byte + if p.cfg.ProofType == message.ProofTypeChunk { + tracesByt, err := json.Marshal(traces) + if err != nil { + return nil, err + } + proofByt = p.prove(tracesByt) + } else if p.cfg.ProofType == message.ProofTypeBatch { + // TODO: ProofTypeBatch prove + } + + // dump proof + err := p.dumpProof(taskID, proofByt) + if err != nil { + log.Error("Dump proof failed", "task-id", taskID, "error", err) + } + + zkProof := &message.AggProof{} + return zkProof, json.Unmarshal(proofByt, zkProof) +} + +// Call cgo to generate proof. +func (p *ProverCore) prove(tracesByt []byte) []byte { + tracesStr := C.CString(string(tracesByt)) + + defer func() { + C.free(unsafe.Pointer(tracesStr)) + }() + + log.Info("Start to create agg proof ...") + cProof := C.create_agg_proof_multi(tracesStr) + log.Info("Finish creating agg proof!") + + proof := C.GoString(cProof) + return []byte(proof) +} + +func (p *ProverCore) dumpProof(id string, proofByt []byte) error { + if p.cfg.DumpDir == "" { + return nil + } + path := filepath.Join(p.cfg.DumpDir, id) + f, err := os.Create(path) + if err != nil { + return err + } + log.Info("Saving proof", "task-id", id) + _, err = f.Write(proofByt) + return err +} diff --git a/prover/core/chunk_prover_test.go b/prover/core/chunk_prover_test.go new file mode 100644 index 0000000000..1e3bfcd611 --- /dev/null +++ b/prover/core/chunk_prover_test.go @@ -0,0 +1,63 @@ +//go:build ffi + +package core_test + +import ( + "encoding/json" + "flag" + "io" + "os" + "path/filepath" + "testing" + + "github.com/scroll-tech/go-ethereum/core/types" + "github.com/stretchr/testify/assert" + + "scroll-tech/prover/config" + "scroll-tech/prover/core" +) + +var ( + paramsPath = flag.String("params", "/assets/test_params", "params dir") + tracesPath = flag.String("traces", "/assets/traces", "traces dir") + proofDumpPath = flag.String("dump", "/assets/proof_data", "the path proofs dump to") +) + +func TestFFI(t *testing.T) { + as := assert.New(t) + cfg := &config.ProverCoreConfig{ + ParamsPath: *paramsPath, + } + proverCore, err := core.NewProverCore(cfg) + as.NoError(err) + + files, err := os.ReadDir(*tracesPath) + as.NoError(err) + + traces := make([]*types.BlockTrace, 0) + for _, file := range files { + var ( + f *os.File + byt []byte + ) + f, err = os.Open(filepath.Join(*tracesPath, file.Name())) + as.NoError(err) + byt, err = io.ReadAll(f) + as.NoError(err) + trace := &types.BlockTrace{} + as.NoError(json.Unmarshal(byt, trace)) + traces = append(traces, trace) + } + proof, err := proverCore.Prove("test", traces) + as.NoError(err) + t.Log("prove success") + + // dump the proof + os.RemoveAll(*proofDumpPath) + proofByt, err := json.Marshal(proof) + as.NoError(err) + proofFile, err := os.Create(*proofDumpPath) + as.NoError(err) + _, err = proofFile.Write(proofByt) + as.NoError(err) +} From 7c8d6317b0c4f4dc3948e4be7b77dff9da757548 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Sun, 30 Jul 2023 21:54:43 +0800 Subject: [PATCH 02/39] Add batch and chunk provers and verifiers. --- common/libzkp/interface/libzkp.h | 14 ++-- coordinator/.gitignore | 2 +- .../internal/logic/verifier/batch_verifier.go | 34 +++++----- .../internal/logic/verifier/chunk_verifier.go | 32 ++++----- prover/core/batch_prover.go | 65 ++++++++++--------- prover/core/chunk_prover.go | 37 +++++------ 6 files changed, 96 insertions(+), 88 deletions(-) diff --git a/common/libzkp/interface/libzkp.h b/common/libzkp/interface/libzkp.h index e5e4539f23..4090f0ff8b 100644 --- a/common/libzkp/interface/libzkp.h +++ b/common/libzkp/interface/libzkp.h @@ -1,5 +1,9 @@ -void init_prover(char *params_path, char *seed_path); -char* create_agg_proof(char *trace); -char* create_agg_proof_multi(char *trace); -void init_verifier(char *params_path, char *agg_vk_path); -char verify_agg_proof(char *proof); +void init_batch_prover(char* params_dir); +void init_batch_verifier(char* params_dir, char* vk_path); +char* gen_batch_proof(char* chunk_hashes, char* chunk_proofs); +char verify_batch_proof(char* proof); + +void init_chunk_prover(char* params_dir); +void init_chunk_verifier(char* params_dir, char* vk_path); +char* gen_chunk_proof(char* block_traces); +char verify_chunk_proof(char* proof); diff --git a/coordinator/.gitignore b/coordinator/.gitignore index 6f9b944292..04127ffcce 100644 --- a/coordinator/.gitignore +++ b/coordinator/.gitignore @@ -1,3 +1,3 @@ /build/bin .idea -verifier/lib \ No newline at end of file +internal/logic/verifier/lib diff --git a/coordinator/internal/logic/verifier/batch_verifier.go b/coordinator/internal/logic/verifier/batch_verifier.go index 8698da7048..84889926f5 100644 --- a/coordinator/internal/logic/verifier/batch_verifier.go +++ b/coordinator/internal/logic/verifier/batch_verifier.go @@ -21,36 +21,36 @@ import ( "scroll-tech/common/types/message" ) -// InvalidTestProof invalid proof used in tests -const InvalidTestProof = "this is a invalid proof" +// InvalidTestBatchProof invalid batch proof used in tests +const InvalidTestBatchProof = "this is an invalid batch proof" -// Verifier represents a rust ffi to a halo2 verifier. -type Verifier struct { - cfg *config.VerifierConfig +// BatchVerifier represents a rust ffi to a halo2 verifier. +type BatchVerifier struct { + cfg *config.BatchVerifierConfig } -// NewVerifier Sets up a rust ffi to call verify. -func NewVerifier(cfg *config.VerifierConfig) (*Verifier, error) { +// NewBatchVerifier Sets up a rust ffi to call verify. +func NewBatchVerifier(cfg *config.BatchVerifierConfig) (*BatchVerifier, error) { if cfg.MockMode { - return &Verifier{cfg: cfg}, nil + return &BatchVerifier{cfg: cfg}, nil } paramsPathStr := C.CString(cfg.ParamsPath) - aggVkPathStr := C.CString(cfg.AggVkPath) + vkPathStr := C.CString(cfg.vkPath) defer func() { C.free(unsafe.Pointer(paramsPathStr)) - C.free(unsafe.Pointer(aggVkPathStr)) + C.free(unsafe.Pointer(vkPathStr)) }() - C.init_verifier(paramsPathStr, aggVkPathStr) + C.init_batch_verifier(paramsPathStr, vkPathStr) - return &Verifier{cfg: cfg}, nil + return &BatchVerifier{cfg: cfg}, nil } // VerifyProof Verify a ZkProof by marshaling it and sending it to the Halo2 Verifier. -func (v *Verifier) VerifyProof(proof *message.BatchProof) (bool, error) { +func (v *BatchVerifier) VerifyProof(proof *message.BatchProof) (bool, error) { if v.cfg.MockMode { - log.Info("Mock mode, verifier disabled") - if string(proof.Proof) == InvalidTestProof { + log.Info("Mock mode, batch verifier disabled") + if string(proof.Proof) == InvalidTestBatchProof { return false, nil } return true, nil @@ -66,7 +66,7 @@ func (v *Verifier) VerifyProof(proof *message.BatchProof) (bool, error) { C.free(unsafe.Pointer(proofStr)) }() - log.Info("Start to verify proof ...") - verified := C.verify_agg_proof(proofStr) + log.Info("Start to verify batch proof ...") + verified := C.verify_batch_proof(proofStr) return verified != 0, nil } diff --git a/coordinator/internal/logic/verifier/chunk_verifier.go b/coordinator/internal/logic/verifier/chunk_verifier.go index 8698da7048..7691149e42 100644 --- a/coordinator/internal/logic/verifier/chunk_verifier.go +++ b/coordinator/internal/logic/verifier/chunk_verifier.go @@ -21,36 +21,36 @@ import ( "scroll-tech/common/types/message" ) -// InvalidTestProof invalid proof used in tests -const InvalidTestProof = "this is a invalid proof" +// InvalidTestChunkProof invalid chunk proof used in tests +const InvalidTestChunkProof = "this is an invalid chunk proof" -// Verifier represents a rust ffi to a halo2 verifier. -type Verifier struct { - cfg *config.VerifierConfig +// ChunkVerifier represents a rust ffi to a halo2 verifier. +type ChunkVerifier struct { + cfg *config.ChunkVerifierConfig } -// NewVerifier Sets up a rust ffi to call verify. -func NewVerifier(cfg *config.VerifierConfig) (*Verifier, error) { +// NewChunkVerifier Sets up a rust ffi to call verify. +func NewChunkVerifier(cfg *config.ChunkVerifierConfig) (*ChunkVerifier, error) { if cfg.MockMode { - return &Verifier{cfg: cfg}, nil + return &ChunkVerifier{cfg: cfg}, nil } paramsPathStr := C.CString(cfg.ParamsPath) - aggVkPathStr := C.CString(cfg.AggVkPath) + vkPathStr := C.CString(cfg.vkPath) defer func() { C.free(unsafe.Pointer(paramsPathStr)) - C.free(unsafe.Pointer(aggVkPathStr)) + C.free(unsafe.Pointer(vkPathStr)) }() - C.init_verifier(paramsPathStr, aggVkPathStr) + C.init_chunk_verifier(paramsPathStr, vkPathStr) - return &Verifier{cfg: cfg}, nil + return &ChunkVerifier{cfg: cfg}, nil } // VerifyProof Verify a ZkProof by marshaling it and sending it to the Halo2 Verifier. -func (v *Verifier) VerifyProof(proof *message.BatchProof) (bool, error) { +func (v *ChunkVerifier) VerifyProof(proof *message.ChunkProof) (bool, error) { if v.cfg.MockMode { log.Info("Mock mode, verifier disabled") - if string(proof.Proof) == InvalidTestProof { + if string(proof.Proof) == InvalidTestChunkProof { return false, nil } return true, nil @@ -66,7 +66,7 @@ func (v *Verifier) VerifyProof(proof *message.BatchProof) (bool, error) { C.free(unsafe.Pointer(proofStr)) }() - log.Info("Start to verify proof ...") - verified := C.verify_agg_proof(proofStr) + log.Info("Start to verify chunk proof ...") + verified := C.verify_chunk_proof(proofStr) return verified != 0, nil } diff --git a/prover/core/batch_prover.go b/prover/core/batch_prover.go index ac98f12fcd..7b244ebc4c 100644 --- a/prover/core/batch_prover.go +++ b/prover/core/batch_prover.go @@ -24,70 +24,75 @@ import ( "scroll-tech/prover/config" ) -// ProverCore sends block-traces to rust-prover through ffi and get back the zk-proof. -type ProverCore struct { - cfg *config.ProverCoreConfig +// BatchProverCore sends block-traces to rust-prover through ffi and get back the zk-proof. +type BatchProverCore struct { + cfg *config.BatchProverCoreConfig } -// NewProverCore inits a ProverCore object. -func NewProverCore(cfg *config.ProverCoreConfig) (*ProverCore, error) { +// NewBatchProverCore inits a BatchProverCore object. +func NewBatchProverCore(cfg *config.BatchProverCoreConfig) (*BatchProverCore, error) { paramsPathStr := C.CString(cfg.ParamsPath) defer func() { C.free(unsafe.Pointer(paramsPathStr)) }() - C.init_prover(paramsPathStr, seedPathStr) + C.init_batch_prover(paramsPathStr) if cfg.DumpDir != "" { err := os.MkdirAll(cfg.DumpDir, os.ModePerm) if err != nil { return nil, err } - log.Info("Enabled dump_proof", "dir", cfg.DumpDir) + log.Info("Enabled dump_batch_proof", "dir", cfg.DumpDir) } - return &ProverCore{cfg: cfg}, nil + return &BatchProverCore{cfg: cfg}, nil } -// Prove call rust ffi to generate proof, if first failed, try again. -func (p *ProverCore) Prove(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { - var proofByt []byte - if p.cfg.ProofType == message.ProofTypeChunk { - tracesByt, err := json.Marshal(traces) - if err != nil { - return nil, err - } - proofByt = p.prove(tracesByt) - } else if p.cfg.ProofType == message.ProofTypeBatch { - // TODO: ProofTypeBatch prove +// Prove call rust ffi to generate batch proof, if first failed, try again. +func (p *BatchProverCore) Prove(taskID string, chunkHashes []*types.ChunkHash, chunkProofs []*types.ChunkProof) (*message.BatchProof, error) { + if p.cfg.ProofType != message.ProofTypeBatch { + return nil, errors.New("Wrong proof type in batch-prover: %d", p.cfg.ProofType) + } + + chunkHashesByt, err := json.Marshal(chunkHashes) + if err != nil { + return nil, err + } + chunkProofsByt, err := json.Marshal(chunkProofs) + if err != nil { + return nil, err } + proofByt := p.prove(chunkHashesByt, chunkProofsByt) // dump proof err := p.dumpProof(taskID, proofByt) if err != nil { - log.Error("Dump proof failed", "task-id", taskID, "error", err) + log.Error("Dump batch proof failed", "task-id", taskID, "error", err) } - zkProof := &message.ChunkProof{} + zkProof := &message.BatchProof{} return zkProof, json.Unmarshal(proofByt, zkProof) } -// Call cgo to generate proof. -func (p *ProverCore) prove(tracesByt []byte) []byte { - tracesStr := C.CString(string(tracesByt)) +// Call cgo to generate batch proof. +func (p *BatchProverCore) prove(chunkHashesByt []byte, chunkProofsByt []byte) []byte { + chunkHashesStr := C.CString(string(chunkHashesByt)) + chunkProofsStr := C.CString(string(chunkProofsByt)) defer func() { - C.free(unsafe.Pointer(tracesStr)) + C.free(unsafe.Pointer(chunkHashesStr)) + C.free(unsafe.Pointer(chunkProofsStr)) }() - log.Info("Start to create agg proof ...") - cProof := C.create_agg_proof_multi(tracesStr) - log.Info("Finish creating agg proof!") + log.Info("Start to create batch proof ...") + cProof := C.gen_batch_proof(chunkHashesStr, chunkProofsStr) + log.Info("Finish creating batch proof!") proof := C.GoString(cProof) return []byte(proof) } -func (p *ProverCore) dumpProof(id string, proofByt []byte) error { +func (p *BatchProverCore) dumpProof(id string, proofByt []byte) error { if p.cfg.DumpDir == "" { return nil } @@ -96,7 +101,7 @@ func (p *ProverCore) dumpProof(id string, proofByt []byte) error { if err != nil { return err } - log.Info("Saving proof", "task-id", id) + log.Info("Saving batch proof", "task-id", id) _, err = f.Write(proofByt) return err } diff --git a/prover/core/chunk_prover.go b/prover/core/chunk_prover.go index 6586cd5469..b64837ad98 100644 --- a/prover/core/chunk_prover.go +++ b/prover/core/chunk_prover.go @@ -24,7 +24,7 @@ import ( "scroll-tech/prover/config" ) -// ProverCore sends block-traces to rust-prover through ffi and get back the zk-proof. +// ChunkProverCore sends block-traces to rust-prover through ffi and get back the zk-proof. type ChunkProverCore struct { cfg *config.ChunkProverCoreConfig } @@ -50,44 +50,43 @@ func NewChunkProverCore(cfg *config.ChunkProverCoreConfig) (*ChunkProverCore, er // Prove call rust ffi to generate chunk proof, if first failed, try again. func (p *ChunkProverCore) Prove(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { - var proofByt []byte - if p.cfg.ProofType == message.ProofTypeChunk { - tracesByt, err := json.Marshal(traces) - if err != nil { - return nil, err - } - proofByt = p.prove(tracesByt) - } else if p.cfg.ProofType == message.ProofTypeBatch { - // TODO: ProofTypeBatch prove + if p.cfg.ProofType != message.ProofTypeChunk { + return nil, errors.New("Wrong proof type in chunk-prover: %d", p.cfg.ProofType) + } + + tracesByt, err := json.Marshal(traces) + if err != nil { + return nil, err } + proofByt := p.prove(tracesByt) // dump proof err := p.dumpProof(taskID, proofByt) if err != nil { - log.Error("Dump proof failed", "task-id", taskID, "error", err) + log.Error("Dump chunk proof failed", "task-id", taskID, "error", err) } - zkProof := &message.AggProof{} + zkProof := &message.ChunkProof{} return zkProof, json.Unmarshal(proofByt, zkProof) } -// Call cgo to generate proof. -func (p *ProverCore) prove(tracesByt []byte) []byte { +// Call cgo to generate chunk proof. +func (p *ChunkProverCore) prove(tracesByt []byte) []byte { tracesStr := C.CString(string(tracesByt)) defer func() { C.free(unsafe.Pointer(tracesStr)) }() - log.Info("Start to create agg proof ...") - cProof := C.create_agg_proof_multi(tracesStr) - log.Info("Finish creating agg proof!") + log.Info("Start to create chunk proof ...") + cProof := C.gen_chunk_proof(tracesStr) + log.Info("Finish creating chunk proof!") proof := C.GoString(cProof) return []byte(proof) } -func (p *ProverCore) dumpProof(id string, proofByt []byte) error { +func (p *ChunkProverCore) dumpProof(id string, proofByt []byte) error { if p.cfg.DumpDir == "" { return nil } @@ -96,7 +95,7 @@ func (p *ProverCore) dumpProof(id string, proofByt []byte) error { if err != nil { return err } - log.Info("Saving proof", "task-id", id) + log.Info("Saving chunk proof", "task-id", id) _, err = f.Write(proofByt) return err } From bd43070cd40eb5c258d591e0197c075e70bea1a5 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 10:30:29 +0800 Subject: [PATCH 03/39] Rename `ChunkProverCore` to `ChunkProver` and `BatchProverCore` to `BatchProver`. --- prover/core/batch_prover.go | 18 +++++++++--------- prover/core/chunk_prover.go | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/prover/core/batch_prover.go b/prover/core/batch_prover.go index 7b244ebc4c..e99602e8ff 100644 --- a/prover/core/batch_prover.go +++ b/prover/core/batch_prover.go @@ -24,13 +24,13 @@ import ( "scroll-tech/prover/config" ) -// BatchProverCore sends block-traces to rust-prover through ffi and get back the zk-proof. -type BatchProverCore struct { - cfg *config.BatchProverCoreConfig +// BatchProver sends block-traces to rust-prover through ffi and get back the zk-proof. +type BatchProver struct { + cfg *config.BatchProverConfig } -// NewBatchProverCore inits a BatchProverCore object. -func NewBatchProverCore(cfg *config.BatchProverCoreConfig) (*BatchProverCore, error) { +// NewBatchProver inits a BatchProver object. +func NewBatchProver(cfg *config.BatchProverConfig) (*BatchProver, error) { paramsPathStr := C.CString(cfg.ParamsPath) defer func() { C.free(unsafe.Pointer(paramsPathStr)) @@ -45,11 +45,11 @@ func NewBatchProverCore(cfg *config.BatchProverCoreConfig) (*BatchProverCore, er log.Info("Enabled dump_batch_proof", "dir", cfg.DumpDir) } - return &BatchProverCore{cfg: cfg}, nil + return &BatchProver{cfg: cfg}, nil } // Prove call rust ffi to generate batch proof, if first failed, try again. -func (p *BatchProverCore) Prove(taskID string, chunkHashes []*types.ChunkHash, chunkProofs []*types.ChunkProof) (*message.BatchProof, error) { +func (p *BatchProver) Prove(taskID string, chunkHashes []*types.ChunkHash, chunkProofs []*types.ChunkProof) (*message.BatchProof, error) { if p.cfg.ProofType != message.ProofTypeBatch { return nil, errors.New("Wrong proof type in batch-prover: %d", p.cfg.ProofType) } @@ -75,7 +75,7 @@ func (p *BatchProverCore) Prove(taskID string, chunkHashes []*types.ChunkHash, c } // Call cgo to generate batch proof. -func (p *BatchProverCore) prove(chunkHashesByt []byte, chunkProofsByt []byte) []byte { +func (p *BatchProver) prove(chunkHashesByt []byte, chunkProofsByt []byte) []byte { chunkHashesStr := C.CString(string(chunkHashesByt)) chunkProofsStr := C.CString(string(chunkProofsByt)) @@ -92,7 +92,7 @@ func (p *BatchProverCore) prove(chunkHashesByt []byte, chunkProofsByt []byte) [] return []byte(proof) } -func (p *BatchProverCore) dumpProof(id string, proofByt []byte) error { +func (p *BatchProver) dumpProof(id string, proofByt []byte) error { if p.cfg.DumpDir == "" { return nil } diff --git a/prover/core/chunk_prover.go b/prover/core/chunk_prover.go index b64837ad98..13cf35c91c 100644 --- a/prover/core/chunk_prover.go +++ b/prover/core/chunk_prover.go @@ -24,13 +24,13 @@ import ( "scroll-tech/prover/config" ) -// ChunkProverCore sends block-traces to rust-prover through ffi and get back the zk-proof. -type ChunkProverCore struct { - cfg *config.ChunkProverCoreConfig +// ChunkProver sends block-traces to rust-prover through ffi and get back the zk-proof. +type ChunkProver struct { + cfg *config.ChunkProverConfig } -// NewChunkProverCore inits a ChunkProverCore object. -func NewChunkProverCore(cfg *config.ChunkProverCoreConfig) (*ChunkProverCore, error) { +// NewChunkProver inits a ChunkProver object. +func NewChunkProver(cfg *config.ChunkProverConfig) (*ChunkProver, error) { paramsPathStr := C.CString(cfg.ParamsPath) defer func() { C.free(unsafe.Pointer(paramsPathStr)) @@ -45,11 +45,11 @@ func NewChunkProverCore(cfg *config.ChunkProverCoreConfig) (*ChunkProverCore, er log.Info("Enabled dump_chunk_proof", "dir", cfg.DumpDir) } - return &ChunkProverCore{cfg: cfg}, nil + return &ChunkProver{cfg: cfg}, nil } // Prove call rust ffi to generate chunk proof, if first failed, try again. -func (p *ChunkProverCore) Prove(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { +func (p *ChunkProver) Prove(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { if p.cfg.ProofType != message.ProofTypeChunk { return nil, errors.New("Wrong proof type in chunk-prover: %d", p.cfg.ProofType) } @@ -71,7 +71,7 @@ func (p *ChunkProverCore) Prove(taskID string, traces []*types.BlockTrace) (*mes } // Call cgo to generate chunk proof. -func (p *ChunkProverCore) prove(tracesByt []byte) []byte { +func (p *ChunkProver) prove(tracesByt []byte) []byte { tracesStr := C.CString(string(tracesByt)) defer func() { @@ -86,7 +86,7 @@ func (p *ChunkProverCore) prove(tracesByt []byte) []byte { return []byte(proof) } -func (p *ChunkProverCore) dumpProof(id string, proofByt []byte) error { +func (p *ChunkProver) dumpProof(id string, proofByt []byte) error { if p.cfg.DumpDir == "" { return nil } From 81c8df90a6225601977d32060c9684e036c5c244 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 11:14:33 +0800 Subject: [PATCH 04/39] Update libzkp, and add `BatchProverConfig` and `ChunkProverConfig`. --- common/libzkp/impl/Cargo.lock | 30 ++++++++++++++--------------- common/libzkp/impl/Cargo.toml | 4 ++-- common/libzkp/impl/src/batch.rs | 12 ++++++------ prover/config.json | 7 +++++-- prover/config/config.go | 34 ++++++++++++++++++--------------- 5 files changed, 47 insertions(+), 40 deletions(-) diff --git a/common/libzkp/impl/Cargo.lock b/common/libzkp/impl/Cargo.lock index e0dadf53ea..aaaba67fc7 100644 --- a/common/libzkp/impl/Cargo.lock +++ b/common/libzkp/impl/Cargo.lock @@ -32,7 +32,7 @@ dependencies = [ [[package]] name = "aggregator" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#7bca679c45debd8a033f29888af1293a2dbf4feb" dependencies = [ "ark-std", "env_logger 0.10.0", @@ -379,7 +379,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" dependencies = [ "borsh-derive", - "hashbrown 0.13.2", + "hashbrown 0.12.3", ] [[package]] @@ -432,7 +432,7 @@ checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "bus-mapping" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#7bca679c45debd8a033f29888af1293a2dbf4feb" dependencies = [ "eth-types", "ethers-core", @@ -1045,7 +1045,7 @@ dependencies = [ [[package]] name = "eth-types" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#7bca679c45debd8a033f29888af1293a2dbf4feb" dependencies = [ "ethers-core", "ethers-signers", @@ -1223,7 +1223,7 @@ dependencies = [ [[package]] name = "external-tracer" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#7bca679c45debd8a033f29888af1293a2dbf4feb" dependencies = [ "eth-types", "geth-utils", @@ -1436,7 +1436,7 @@ dependencies = [ [[package]] name = "gadgets" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#7bca679c45debd8a033f29888af1293a2dbf4feb" dependencies = [ "digest 0.7.6", "eth-types", @@ -1476,7 +1476,7 @@ dependencies = [ [[package]] name = "geth-utils" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#7bca679c45debd8a033f29888af1293a2dbf4feb" dependencies = [ "env_logger 0.9.3", "gobuild 0.1.0-alpha.2 (git+https://github.com/scroll-tech/gobuild.git)", @@ -2058,7 +2058,7 @@ dependencies = [ [[package]] name = "keccak256" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#7bca679c45debd8a033f29888af1293a2dbf4feb" dependencies = [ "env_logger 0.9.3", "eth-types", @@ -2245,7 +2245,7 @@ dependencies = [ [[package]] name = "mock" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#7bca679c45debd8a033f29888af1293a2dbf4feb" dependencies = [ "eth-types", "ethers-core", @@ -2260,7 +2260,7 @@ dependencies = [ [[package]] name = "mpt-zktrie" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#7bca679c45debd8a033f29888af1293a2dbf4feb" dependencies = [ "bus-mapping", "eth-types", @@ -2733,7 +2733,7 @@ dependencies = [ [[package]] name = "prover" version = "0.4.0" -source = "git+https://github.com/scroll-tech/scroll-prover?rev=260607c#260607c1f883cbe4be7b290860bef5114cbcea61" +source = "git+https://github.com/scroll-tech/scroll-prover?rev=76ebe3d#76ebe3d345368a91c692ab68d04bd93f3fe59ab2" dependencies = [ "aggregator", "anyhow", @@ -3585,7 +3585,7 @@ checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "snark-verifier" version = "0.1.0" -source = "git+https://github.com/scroll-tech/snark-verifier?branch=develop#a530941eb9a6151c46d5546ca818d04bbd286c02" +source = "git+https://github.com/scroll-tech/snark-verifier?branch=develop#6eeba7783d337e0964d0d89de3d4ee8a7856fde6" dependencies = [ "bytes", "ethereum-types 0.14.1", @@ -3609,7 +3609,7 @@ dependencies = [ [[package]] name = "snark-verifier-sdk" version = "0.0.1" -source = "git+https://github.com/scroll-tech/snark-verifier?branch=develop#a530941eb9a6151c46d5546ca818d04bbd286c02" +source = "git+https://github.com/scroll-tech/snark-verifier?branch=develop#6eeba7783d337e0964d0d89de3d4ee8a7856fde6" dependencies = [ "bincode", "env_logger 0.10.0", @@ -4001,7 +4001,7 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "types" version = "0.4.0" -source = "git+https://github.com/scroll-tech/scroll-prover?rev=260607c#260607c1f883cbe4be7b290860bef5114cbcea61" +source = "git+https://github.com/scroll-tech/scroll-prover?rev=76ebe3d#76ebe3d345368a91c692ab68d04bd93f3fe59ab2" dependencies = [ "base64 0.13.1", "blake2", @@ -4446,7 +4446,7 @@ checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" [[package]] name = "zkevm-circuits" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#60d7a4bde24ce5e9d1260a3d27b5c1b4e153c0bf" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#7bca679c45debd8a033f29888af1293a2dbf4feb" dependencies = [ "array-init", "bus-mapping", diff --git a/common/libzkp/impl/Cargo.toml b/common/libzkp/impl/Cargo.toml index cd9fc18ac9..75831979f3 100644 --- a/common/libzkp/impl/Cargo.toml +++ b/common/libzkp/impl/Cargo.toml @@ -18,8 +18,8 @@ maingate = { git = "https://github.com/scroll-tech/halo2wrong", branch = "halo2- halo2curves = { git = "https://github.com/scroll-tech/halo2curves.git", branch = "0.3.1-derive-serde" } [dependencies] -prover = { git = "https://github.com/scroll-tech/scroll-prover", rev="260607c" } -types = { git = "https://github.com/scroll-tech/scroll-prover", rev="260607c" } +prover = { git = "https://github.com/scroll-tech/scroll-prover", rev="76ebe3d" } +types = { git = "https://github.com/scroll-tech/scroll-prover", rev="76ebe3d" } halo2_proofs = { git = "https://github.com/scroll-tech/halo2.git", branch = "develop" } log = "0.4" diff --git a/common/libzkp/impl/src/batch.rs b/common/libzkp/impl/src/batch.rs index 4fffdbc697..70655f5fe1 100644 --- a/common/libzkp/impl/src/batch.rs +++ b/common/libzkp/impl/src/batch.rs @@ -2,7 +2,6 @@ use crate::utils::{c_char_to_str, c_char_to_vec, vec_to_c_char, OUTPUT_DIR}; use libc::c_char; use prover::{ aggregator::{Prover, Verifier}, - io::read_all, utils::{chunk_trace_to_witness_block, init_env_and_log}, ChunkHash, ChunkProof, Proof, }; @@ -25,12 +24,13 @@ pub unsafe extern "C" fn init_batch_prover(params_dir: *const c_char) { /// # Safety #[no_mangle] -pub unsafe extern "C" fn init_batch_verifier(params_dir: *const c_char, vk_path: *const c_char) { +pub unsafe extern "C" fn init_batch_verifier(params_dir: *const c_char, assets_dir: *const c_char) { init_env_and_log("ffi_batch_verify"); let params_dir = c_char_to_str(params_dir); - let raw_vk = read_all(c_char_to_str(vk_path)); - let verifier = Verifier::from_params_dir(params_dir, &raw_vk); + let assets_dir = c_char_to_str(assets_dir); + + let verifier = Verifier::from_dirs(params_dir, assets_dir); VERIFIER.set(verifier).unwrap(); } @@ -56,7 +56,7 @@ pub unsafe extern "C" fn gen_batch_proof( let proof = PROVER .get_mut() .unwrap() - .gen_agg_proof(chunk_hashes_proofs, None, OUTPUT_DIR.as_deref()) + .gen_agg_evm_proof(chunk_hashes_proofs, None, OUTPUT_DIR.as_deref()) .unwrap(); let proof_bytes = serde_json::to_vec(&proof).unwrap(); @@ -69,7 +69,7 @@ pub unsafe extern "C" fn verify_batch_proof(proof: *const c_char) -> c_char { let proof = c_char_to_vec(proof); let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); - let verified = VERIFIER.get().unwrap().verify_agg_proof(proof); + let verified = VERIFIER.get().unwrap().verify_agg_evm_proof(&proof); verified as c_char } diff --git a/prover/config.json b/prover/config.json index 5b1cbba811..e7e19c5682 100644 --- a/prover/config.json +++ b/prover/config.json @@ -4,8 +4,11 @@ "keystore_password": "prover-pwd", "coordinator_url": "ws://localhost:8391", "db_path": "bbolt_db", - "core": { + "batch_config": { "params_path": "params", - "seed_path": "seed" + "assets_path": "assets" + }, + "chunk_config": { + "params_path": "params" } } diff --git a/prover/config/config.go b/prover/config/config.go index 19774a8969..338f204b67 100644 --- a/prover/config/config.go +++ b/prover/config/config.go @@ -5,28 +5,32 @@ import ( "os" "path/filepath" - "scroll-tech/common/types/message" - "github.com/scroll-tech/go-ethereum/log" ) // Config loads prover configuration items. type Config struct { - ProverName string `json:"prover_name"` - KeystorePath string `json:"keystore_path"` - KeystorePassword string `json:"keystore_password"` - CoordinatorURL string `json:"coordinator_url"` - TraceEndpoint string `json:"trace_endpoint"` - Core *ProverCoreConfig `json:"core"` - DBPath string `json:"db_path"` + ProverName string `json:"prover_name"` + KeystorePath string `json:"keystore_path"` + KeystorePassword string `json:"keystore_password"` + CoordinatorURL string `json:"coordinator_url"` + TraceEndpoint string `json:"trace_endpoint"` + DBPath string `json:"db_path"` + BatchConfig *BatchProverConfig `json:"batch_config"` + ChunkConfig *ChunkProverConfig `json:"chunk_config"` +} + +// BatchProverConfig load batch prover config. +type BatchProverConfig struct { + ParamsPath string `json:"params_path"` + AssetsPath string `json:"assets_path"` + DumpDir string `json:"dump_dir,omitempty"` } -// ProverCoreConfig load zk prover config. -type ProverCoreConfig struct { - ParamsPath string `json:"params_path"` - SeedPath string `json:"seed_path"` - ProofType message.ProofType `json:"prove_type,omitempty"` // 0: chunk prover (default type), 1: batch prover - DumpDir string `json:"dump_dir,omitempty"` +// ChunkProverConfig load chunk prover config. +type ChunkProverConfig struct { + ParamsPath string `json:"params_path"` + DumpDir string `json:"dump_dir,omitempty"` } // NewConfig returns a new instance of Config. From d05e6990e1299b8ef68de96619bf224db8979cc9 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com> Date: Mon, 31 Jul 2023 12:37:18 +0800 Subject: [PATCH 05/39] add chain_id (#690) --- coordinator/cmd/app/mock_app.go | 2 +- coordinator/conf/config.json | 2 +- coordinator/internal/config/config.go | 4 ++-- coordinator/internal/config/config_test.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/coordinator/cmd/app/mock_app.go b/coordinator/cmd/app/mock_app.go index c1ba24099c..7710c4a714 100644 --- a/coordinator/cmd/app/mock_app.go +++ b/coordinator/cmd/app/mock_app.go @@ -87,7 +87,7 @@ func (c *CoordinatorApp) MockConfig(store bool) error { TokenTimeToLive: 1, } cfg.DBConfig.DSN = base.DBImg.Endpoint() - cfg.L2Config.Endpoint = base.L2gethImg.Endpoint() + cfg.L2Config.ChainID = 111 c.Config = cfg if !store { diff --git a/coordinator/conf/config.json b/coordinator/conf/config.json index b4348d03f3..87df8ab265 100644 --- a/coordinator/conf/config.json +++ b/coordinator/conf/config.json @@ -20,6 +20,6 @@ "maxIdleNum": 20 }, "l2_config": { - "endpoint": "/var/lib/jenkins/workspace/SequencerPipeline/MyPrivateNetwork/geth.ipc" + "chain_id": 111 } } \ No newline at end of file diff --git a/coordinator/internal/config/config.go b/coordinator/internal/config/config.go index e158a4d122..abfa05ac81 100644 --- a/coordinator/internal/config/config.go +++ b/coordinator/internal/config/config.go @@ -37,8 +37,8 @@ type ProverManagerConfig struct { // L2Config loads l2geth configuration items. type L2Config struct { - // l2geth node url. - Endpoint string `json:"endpoint"` + // l2geth chain_id. + ChainID uint64 `json:"chain_id"` } // Config load configuration items. diff --git a/coordinator/internal/config/config_test.go b/coordinator/internal/config/config_test.go index 75c691f43e..031e20ac00 100644 --- a/coordinator/internal/config/config_test.go +++ b/coordinator/internal/config/config_test.go @@ -33,7 +33,7 @@ func TestConfig(t *testing.T) { "maxIdleNum": 20 }, "l2_config": { - "endpoint": "/var/lib/jenkins/workspace/SequencerPipeline/MyPrivateNetwork/geth.ipc" + "chain_id": 111 } }` From 4f5eae478b07da9c6b2887ea36e118bf56a1e6d7 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 13:59:36 +0800 Subject: [PATCH 06/39] Update libzkp. --- common/libzkp/impl/Cargo.lock | 4 ++-- common/libzkp/impl/Cargo.toml | 4 ++-- common/libzkp/impl/src/chunk.rs | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/common/libzkp/impl/Cargo.lock b/common/libzkp/impl/Cargo.lock index aaaba67fc7..cb29eb7534 100644 --- a/common/libzkp/impl/Cargo.lock +++ b/common/libzkp/impl/Cargo.lock @@ -2733,7 +2733,7 @@ dependencies = [ [[package]] name = "prover" version = "0.4.0" -source = "git+https://github.com/scroll-tech/scroll-prover?rev=76ebe3d#76ebe3d345368a91c692ab68d04bd93f3fe59ab2" +source = "git+https://github.com/scroll-tech/scroll-prover?rev=fd059f7#fd059f78497a3dca30d3bb43293005cd820e3d65" dependencies = [ "aggregator", "anyhow", @@ -4001,7 +4001,7 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "types" version = "0.4.0" -source = "git+https://github.com/scroll-tech/scroll-prover?rev=76ebe3d#76ebe3d345368a91c692ab68d04bd93f3fe59ab2" +source = "git+https://github.com/scroll-tech/scroll-prover?rev=fd059f7#fd059f78497a3dca30d3bb43293005cd820e3d65" dependencies = [ "base64 0.13.1", "blake2", diff --git a/common/libzkp/impl/Cargo.toml b/common/libzkp/impl/Cargo.toml index 75831979f3..0d45f0e860 100644 --- a/common/libzkp/impl/Cargo.toml +++ b/common/libzkp/impl/Cargo.toml @@ -18,8 +18,8 @@ maingate = { git = "https://github.com/scroll-tech/halo2wrong", branch = "halo2- halo2curves = { git = "https://github.com/scroll-tech/halo2curves.git", branch = "0.3.1-derive-serde" } [dependencies] -prover = { git = "https://github.com/scroll-tech/scroll-prover", rev="76ebe3d" } -types = { git = "https://github.com/scroll-tech/scroll-prover", rev="76ebe3d" } +prover = { git = "https://github.com/scroll-tech/scroll-prover", rev = "fd059f7" } +types = { git = "https://github.com/scroll-tech/scroll-prover", rev = "fd059f7" } halo2_proofs = { git = "https://github.com/scroll-tech/halo2.git", branch = "develop" } log = "0.4" diff --git a/common/libzkp/impl/src/chunk.rs b/common/libzkp/impl/src/chunk.rs index 2fd30a775a..7a449534ee 100644 --- a/common/libzkp/impl/src/chunk.rs +++ b/common/libzkp/impl/src/chunk.rs @@ -1,7 +1,6 @@ use crate::utils::{c_char_to_str, c_char_to_vec, vec_to_c_char, OUTPUT_DIR}; use libc::c_char; use prover::{ - io::read_all, utils::init_env_and_log, zkevm::{Prover, Verifier}, ChunkProof, @@ -25,12 +24,13 @@ pub unsafe extern "C" fn init_chunk_prover(params_dir: *const c_char) { /// # Safety #[no_mangle] -pub unsafe extern "C" fn init_chunk_verifier(params_dir: *const c_char, vk_path: *const c_char) { +pub unsafe extern "C" fn init_chunk_verifier(params_dir: *const c_char, assets_dir: *const c_char) { init_env_and_log("ffi_chunk_verify"); let params_dir = c_char_to_str(params_dir); - let raw_vk = read_all(c_char_to_str(vk_path)); - let verifier = Verifier::from_params_dir(params_dir, &raw_vk); + let assets_dir = c_char_to_str(assets_dir); + + let verifier = Verifier::from_dirs(params_dir, assets_dir); VERIFIER.set(verifier).unwrap(); } From 0faa50d396803fd53191859a157e02c2b28061d4 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 14:18:14 +0800 Subject: [PATCH 07/39] Update ChunkProver and BatchProver. --- common/libzkp/interface/libzkp.h | 4 ++-- common/types/message/message.go | 10 +++------- prover/config.json | 3 ++- prover/config/config.go | 1 + prover/core/batch_prover.go | 6 ++++-- prover/core/chunk_prover.go | 4 +++- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/common/libzkp/interface/libzkp.h b/common/libzkp/interface/libzkp.h index 4090f0ff8b..092a0768ec 100644 --- a/common/libzkp/interface/libzkp.h +++ b/common/libzkp/interface/libzkp.h @@ -1,9 +1,9 @@ void init_batch_prover(char* params_dir); -void init_batch_verifier(char* params_dir, char* vk_path); +void init_batch_verifier(char* params_dir, char* assets_dir); char* gen_batch_proof(char* chunk_hashes, char* chunk_proofs); char verify_batch_proof(char* proof); void init_chunk_prover(char* params_dir); -void init_chunk_verifier(char* params_dir, char* vk_path); +void init_chunk_verifier(char* params_dir, char* assets_dir); char* gen_chunk_proof(char* block_traces); char verify_chunk_proof(char* proof); diff --git a/common/types/message/message.go b/common/types/message/message.go index 0d45d99272..f7191b5247 100644 --- a/common/types/message/message.go +++ b/common/types/message/message.go @@ -238,18 +238,14 @@ type ChunkProof struct { Protocol []byte `json:"protocol"` Proof []byte `json:"proof"` Instance []byte `json:"instance"` - FinalPair []byte `json:"final_pair"` Vk []byte `json:"vk"` - BlockCount uint `json:"block_count"` } // BatchProof includes the proof info that are required for batch verification and rollup. type BatchProof struct { - Proof []byte `json:"proof"` - Instance []byte `json:"instance"` - FinalPair []byte `json:"final_pair"` - Vk []byte `json:"vk"` - BlockCount uint `json:"block_count"` + Proof []byte `json:"proof"` + Instance []byte `json:"instance"` + Vk []byte `json:"vk"` } // SanityCheck checks whether an BatchProof is in a legal format diff --git a/prover/config.json b/prover/config.json index e7e19c5682..2256c061d4 100644 --- a/prover/config.json +++ b/prover/config.json @@ -9,6 +9,7 @@ "assets_path": "assets" }, "chunk_config": { - "params_path": "params" + "params_path": "params", + "assets_path": "assets" } } diff --git a/prover/config/config.go b/prover/config/config.go index 338f204b67..324b3218a0 100644 --- a/prover/config/config.go +++ b/prover/config/config.go @@ -30,6 +30,7 @@ type BatchProverConfig struct { // ChunkProverConfig load chunk prover config. type ChunkProverConfig struct { ParamsPath string `json:"params_path"` + AssetsPath string `json:"assets_path"` DumpDir string `json:"dump_dir,omitempty"` } diff --git a/prover/core/batch_prover.go b/prover/core/batch_prover.go index e99602e8ff..68a59de981 100644 --- a/prover/core/batch_prover.go +++ b/prover/core/batch_prover.go @@ -32,10 +32,12 @@ type BatchProver struct { // NewBatchProver inits a BatchProver object. func NewBatchProver(cfg *config.BatchProverConfig) (*BatchProver, error) { paramsPathStr := C.CString(cfg.ParamsPath) + assetsPathStr := C.CString(cfg.assetsPath) defer func() { C.free(unsafe.Pointer(paramsPathStr)) + C.free(unsafe.Pointer(assetsPathStr)) }() - C.init_batch_prover(paramsPathStr) + C.init_batch_prover(paramsPathStr, assetsPathStr) if cfg.DumpDir != "" { err := os.MkdirAll(cfg.DumpDir, os.ModePerm) @@ -49,7 +51,7 @@ func NewBatchProver(cfg *config.BatchProverConfig) (*BatchProver, error) { } // Prove call rust ffi to generate batch proof, if first failed, try again. -func (p *BatchProver) Prove(taskID string, chunkHashes []*types.ChunkHash, chunkProofs []*types.ChunkProof) (*message.BatchProof, error) { +func (p *BatchProver) Prove(taskID string, chunkHashes []*message.ChunkHash, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { if p.cfg.ProofType != message.ProofTypeBatch { return nil, errors.New("Wrong proof type in batch-prover: %d", p.cfg.ProofType) } diff --git a/prover/core/chunk_prover.go b/prover/core/chunk_prover.go index 13cf35c91c..02598ccca7 100644 --- a/prover/core/chunk_prover.go +++ b/prover/core/chunk_prover.go @@ -32,10 +32,12 @@ type ChunkProver struct { // NewChunkProver inits a ChunkProver object. func NewChunkProver(cfg *config.ChunkProverConfig) (*ChunkProver, error) { paramsPathStr := C.CString(cfg.ParamsPath) + assetsPathStr := C.CString(cfg.AssetsPath) defer func() { C.free(unsafe.Pointer(paramsPathStr)) + C.free(unsafe.Pointer(assetsPathStr)) }() - C.init_chunk_prover(paramsPathStr) + C.init_chunk_prover(paramsPathStr, assetsPathStr) if cfg.DumpDir != "" { err := os.MkdirAll(cfg.DumpDir, os.ModePerm) From d9532e2e9b5101f48fa623c28974b5dfb3f1db16 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 14:34:59 +0800 Subject: [PATCH 08/39] Update verifiers. --- coordinator/conf/config.json | 11 ++++++++--- coordinator/internal/config/config.go | 19 ++++++++++++++----- .../internal/logic/verifier/batch_verifier.go | 6 +++--- .../internal/logic/verifier/chunk_verifier.go | 6 +++--- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/coordinator/conf/config.json b/coordinator/conf/config.json index 87df8ab265..20dd2a26f7 100644 --- a/coordinator/conf/config.json +++ b/coordinator/conf/config.json @@ -5,10 +5,15 @@ "session_attempts": 2, "collection_time": 180, "token_time_to_live": 60, - "verifier": { + "batch_verifier_config": { "mock_mode": true, "params_path": "", - "agg_vk_path": "" + "assets_path": "" + }, + "chunk_verifier_config": { + "mock_mode": true, + "params_path": "", + "assets_path": "" }, "max_verifier_workers": 10, "order_session": "ASC" @@ -22,4 +27,4 @@ "l2_config": { "chain_id": 111 } -} \ No newline at end of file +} diff --git a/coordinator/internal/config/config.go b/coordinator/internal/config/config.go index abfa05ac81..066ea4fca5 100644 --- a/coordinator/internal/config/config.go +++ b/coordinator/internal/config/config.go @@ -25,8 +25,10 @@ type ProverManagerConfig struct { // Number of attempts that a session can be retried if previous attempts failed. // Currently we only consider proving timeout as failure here. SessionAttempts uint8 `json:"session_attempts,omitempty"` - // Zk verifier config. - Verifier *VerifierConfig `json:"verifier,omitempty"` + // Batch verifier config. + BatchVerifierConfig *BatchVerifierConfig `json:"batch_verifier_config,omitempty"` + // Chunk verifier config. + ChunkVerifierConfig *ChunkVerifierConfig `json:"chunk_verifier_config,omitempty"` // Proof collection time (in minutes). CollectionTime int `json:"collection_time"` // Token time to live (in seconds) @@ -48,11 +50,18 @@ type Config struct { L2Config *L2Config `json:"l2_config"` } -// VerifierConfig load zk verifier config. -type VerifierConfig struct { +// BatchVerifierConfig load batch verifier config. +type BatchVerifierConfig struct { MockMode bool `json:"mock_mode"` ParamsPath string `json:"params_path"` - AggVkPath string `json:"agg_vk_path"` + AssetsPath string `json:"assets_path"` +} + +// ChunkVerifierConfig load chunk verifier config. +type ChunkVerifierConfig struct { + MockMode bool `json:"mock_mode"` + ParamsPath string `json:"params_path"` + AssetsPath string `json:"assets_path"` } // NewConfig returns a new instance of Config. diff --git a/coordinator/internal/logic/verifier/batch_verifier.go b/coordinator/internal/logic/verifier/batch_verifier.go index 84889926f5..576f451f81 100644 --- a/coordinator/internal/logic/verifier/batch_verifier.go +++ b/coordinator/internal/logic/verifier/batch_verifier.go @@ -35,13 +35,13 @@ func NewBatchVerifier(cfg *config.BatchVerifierConfig) (*BatchVerifier, error) { return &BatchVerifier{cfg: cfg}, nil } paramsPathStr := C.CString(cfg.ParamsPath) - vkPathStr := C.CString(cfg.vkPath) + assetsPathStr := C.CString(cfg.AssetsPath) defer func() { C.free(unsafe.Pointer(paramsPathStr)) - C.free(unsafe.Pointer(vkPathStr)) + C.free(unsafe.Pointer(assetsPathStr)) }() - C.init_batch_verifier(paramsPathStr, vkPathStr) + C.init_batch_verifier(paramsPathStr, assetsPathStr) return &BatchVerifier{cfg: cfg}, nil } diff --git a/coordinator/internal/logic/verifier/chunk_verifier.go b/coordinator/internal/logic/verifier/chunk_verifier.go index 7691149e42..2150f8b50f 100644 --- a/coordinator/internal/logic/verifier/chunk_verifier.go +++ b/coordinator/internal/logic/verifier/chunk_verifier.go @@ -35,13 +35,13 @@ func NewChunkVerifier(cfg *config.ChunkVerifierConfig) (*ChunkVerifier, error) { return &ChunkVerifier{cfg: cfg}, nil } paramsPathStr := C.CString(cfg.ParamsPath) - vkPathStr := C.CString(cfg.vkPath) + assetsPathStr := C.CString(cfg.assetsPath) defer func() { C.free(unsafe.Pointer(paramsPathStr)) - C.free(unsafe.Pointer(vkPathStr)) + C.free(unsafe.Pointer(assetsPathStr)) }() - C.init_chunk_verifier(paramsPathStr, vkPathStr) + C.init_chunk_verifier(paramsPathStr, assetsPathStr) return &ChunkVerifier{cfg: cfg}, nil } From c6c4607e6d1e0ae0217a0bc258a2fbd5522bdcdc Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 14:39:12 +0800 Subject: [PATCH 09/39] Update prover config. --- prover/config/config.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/prover/config/config.go b/prover/config/config.go index 324b3218a0..c88c7690bf 100644 --- a/prover/config/config.go +++ b/prover/config/config.go @@ -10,14 +10,14 @@ import ( // Config loads prover configuration items. type Config struct { - ProverName string `json:"prover_name"` - KeystorePath string `json:"keystore_path"` - KeystorePassword string `json:"keystore_password"` - CoordinatorURL string `json:"coordinator_url"` - TraceEndpoint string `json:"trace_endpoint"` - DBPath string `json:"db_path"` - BatchConfig *BatchProverConfig `json:"batch_config"` - ChunkConfig *ChunkProverConfig `json:"chunk_config"` + ProverName string `json:"prover_name"` + KeystorePath string `json:"keystore_path"` + KeystorePassword string `json:"keystore_password"` + CoordinatorURL string `json:"coordinator_url"` + TraceEndpoint string `json:"trace_endpoint"` + DBPath string `json:"db_path"` + BatchProverConfig *BatchProverConfig `json:"batch_prover_config"` + ChunkProverConfig *ChunkProverConfig `json:"chunk_prover_config"` } // BatchProverConfig load batch prover config. From 8ed3fe1246c064a79956a39de9ba2596b8fa1e76 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 15:17:21 +0800 Subject: [PATCH 10/39] Revert Verifier, and init both batch-verifier and chunk-verifier. --- coordinator/conf/config.json | 2 +- coordinator/internal/config/config.go | 17 +--- .../internal/logic/verifier/batch_verifier.go | 72 -------------- .../logic/verifier/chunk_verifier_test.go | 45 --------- .../internal/logic/verifier/verifier.go | 98 +++++++++++++++++++ ...atch_verifier_test.go => verifier_test.go} | 0 6 files changed, 103 insertions(+), 131 deletions(-) delete mode 100644 coordinator/internal/logic/verifier/batch_verifier.go delete mode 100644 coordinator/internal/logic/verifier/chunk_verifier_test.go create mode 100644 coordinator/internal/logic/verifier/verifier.go rename coordinator/internal/logic/verifier/{batch_verifier_test.go => verifier_test.go} (100%) diff --git a/coordinator/conf/config.json b/coordinator/conf/config.json index 20dd2a26f7..17976c680a 100644 --- a/coordinator/conf/config.json +++ b/coordinator/conf/config.json @@ -10,7 +10,7 @@ "params_path": "", "assets_path": "" }, - "chunk_verifier_config": { + "verifier": { "mock_mode": true, "params_path": "", "assets_path": "" diff --git a/coordinator/internal/config/config.go b/coordinator/internal/config/config.go index 066ea4fca5..62a33115eb 100644 --- a/coordinator/internal/config/config.go +++ b/coordinator/internal/config/config.go @@ -25,10 +25,8 @@ type ProverManagerConfig struct { // Number of attempts that a session can be retried if previous attempts failed. // Currently we only consider proving timeout as failure here. SessionAttempts uint8 `json:"session_attempts,omitempty"` - // Batch verifier config. - BatchVerifierConfig *BatchVerifierConfig `json:"batch_verifier_config,omitempty"` - // Chunk verifier config. - ChunkVerifierConfig *ChunkVerifierConfig `json:"chunk_verifier_config,omitempty"` + // Zk verifier config. + Verifier *VerifierConfig `json:"verifier,omitempty"` // Proof collection time (in minutes). CollectionTime int `json:"collection_time"` // Token time to live (in seconds) @@ -50,15 +48,8 @@ type Config struct { L2Config *L2Config `json:"l2_config"` } -// BatchVerifierConfig load batch verifier config. -type BatchVerifierConfig struct { - MockMode bool `json:"mock_mode"` - ParamsPath string `json:"params_path"` - AssetsPath string `json:"assets_path"` -} - -// ChunkVerifierConfig load chunk verifier config. -type ChunkVerifierConfig struct { +// VerifierConfig load zk verifier config. +type VerifierConfig struct { MockMode bool `json:"mock_mode"` ParamsPath string `json:"params_path"` AssetsPath string `json:"assets_path"` diff --git a/coordinator/internal/logic/verifier/batch_verifier.go b/coordinator/internal/logic/verifier/batch_verifier.go deleted file mode 100644 index 576f451f81..0000000000 --- a/coordinator/internal/logic/verifier/batch_verifier.go +++ /dev/null @@ -1,72 +0,0 @@ -//go:build !mock_verifier - -package verifier - -/* -#cgo LDFLAGS: -lzkp -lm -ldl -lzktrie -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib -#cgo gpu LDFLAGS: -lzkp -lm -ldl -lgmp -lstdc++ -lprocps -lzktrie -L/usr/local/cuda/lib64/ -lcudart -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib -#include -#include "./lib/libzkp.h" -*/ -import "C" //nolint:typecheck - -import ( - "encoding/json" - "unsafe" - - "github.com/scroll-tech/go-ethereum/log" - - "scroll-tech/coordinator/internal/config" - - "scroll-tech/common/types/message" -) - -// InvalidTestBatchProof invalid batch proof used in tests -const InvalidTestBatchProof = "this is an invalid batch proof" - -// BatchVerifier represents a rust ffi to a halo2 verifier. -type BatchVerifier struct { - cfg *config.BatchVerifierConfig -} - -// NewBatchVerifier Sets up a rust ffi to call verify. -func NewBatchVerifier(cfg *config.BatchVerifierConfig) (*BatchVerifier, error) { - if cfg.MockMode { - return &BatchVerifier{cfg: cfg}, nil - } - paramsPathStr := C.CString(cfg.ParamsPath) - assetsPathStr := C.CString(cfg.AssetsPath) - defer func() { - C.free(unsafe.Pointer(paramsPathStr)) - C.free(unsafe.Pointer(assetsPathStr)) - }() - - C.init_batch_verifier(paramsPathStr, assetsPathStr) - - return &BatchVerifier{cfg: cfg}, nil -} - -// VerifyProof Verify a ZkProof by marshaling it and sending it to the Halo2 Verifier. -func (v *BatchVerifier) VerifyProof(proof *message.BatchProof) (bool, error) { - if v.cfg.MockMode { - log.Info("Mock mode, batch verifier disabled") - if string(proof.Proof) == InvalidTestBatchProof { - return false, nil - } - return true, nil - - } - buf, err := json.Marshal(proof) - if err != nil { - return false, err - } - - proofStr := C.CString(string(buf)) - defer func() { - C.free(unsafe.Pointer(proofStr)) - }() - - log.Info("Start to verify batch proof ...") - verified := C.verify_batch_proof(proofStr) - return verified != 0, nil -} diff --git a/coordinator/internal/logic/verifier/chunk_verifier_test.go b/coordinator/internal/logic/verifier/chunk_verifier_test.go deleted file mode 100644 index 1ecb9be994..0000000000 --- a/coordinator/internal/logic/verifier/chunk_verifier_test.go +++ /dev/null @@ -1,45 +0,0 @@ -//go:build ffi - -package verifier - -import ( - "encoding/json" - "flag" - "io" - "os" - "testing" - - "github.com/stretchr/testify/assert" - - "scroll-tech/common/types/message" - - "scroll-tech/coordinator/internal/config" -) - -var ( - paramsPath = flag.String("params", "/assets/test_params", "params dir") - aggVkPath = flag.String("vk", "/assets/agg_vk", "aggregation proof verification key path") - proofPath = flag.String("proof", "/assets/agg_proof", "aggregation proof path") -) - -func TestFFI(t *testing.T) { - as := assert.New(t) - cfg := &config.VerifierConfig{ - MockMode: false, - ParamsPath: *paramsPath, - AggVkPath: *aggVkPath, - } - v, err := NewVerifier(cfg) - as.NoError(err) - - f, err := os.Open(*proofPath) - as.NoError(err) - byt, err := io.ReadAll(f) - as.NoError(err) - proof := &message.BatchProof{} - as.NoError(json.Unmarshal(byt, proof)) - - ok, err := v.VerifyProof(proof) - as.NoError(err) - as.True(ok) -} diff --git a/coordinator/internal/logic/verifier/verifier.go b/coordinator/internal/logic/verifier/verifier.go new file mode 100644 index 0000000000..7580bb7520 --- /dev/null +++ b/coordinator/internal/logic/verifier/verifier.go @@ -0,0 +1,98 @@ +//go:build !mock_verifier + +package verifier + +/* +#cgo LDFLAGS: -lzkp -lm -ldl -lzktrie -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib +#cgo gpu LDFLAGS: -lzkp -lm -ldl -lgmp -lstdc++ -lprocps -lzktrie -L/usr/local/cuda/lib64/ -lcudart -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib +#include +#include "./lib/libzkp.h" +*/ +import "C" //nolint:typecheck + +import ( + "encoding/json" + "unsafe" + + "github.com/scroll-tech/go-ethereum/log" + + "scroll-tech/coordinator/internal/config" + + "scroll-tech/common/types/message" +) + +// InvalidTestProof invalid proof used in tests +const InvalidTestProof = "this is a invalid proof" + +// Verifier represents a rust ffi to a halo2 verifier. +type Verifier struct { + cfg *config.VerifierConfig +} + +// NewVerifier Sets up a rust ffi to call verify. +func NewVerifier(cfg *config.VerifierConfig) (*Verifier, error) { + if cfg.MockMode { + return &Verifier{cfg: cfg}, nil + } + paramsPathStr := C.CString(cfg.ParamsPath) + assetsPathStr := C.CString(cfg.AssetsPath) + defer func() { + C.free(unsafe.Pointer(paramsPathStr)) + C.free(unsafe.Pointer(assetsPathStr)) + }() + + C.init_batch_verifier(paramsPathStr, assetsPathStr) + C.init_chunk_verifier(paramsPathStr, assetsPathStr) + + return &Verifier{cfg: cfg}, nil +} + +// VerifyBatchProof Verify a ZkProof by marshaling it and sending it to the Halo2 Verifier. +func (v *Verifier) VerifyBatchProof(proof *message.BatchProof) (bool, error) { + if v.cfg.MockMode { + log.Info("Mock mode, batch verifier disabled") + if string(proof.Proof) == InvalidTestProof { + return false, nil + } + return true, nil + + } + buf, err := json.Marshal(proof) + if err != nil { + return false, err + } + + proofStr := C.CString(string(buf)) + defer func() { + C.free(unsafe.Pointer(proofStr)) + }() + + log.Info("Start to verify batch proof ...") + verified := C.verify_batch_proof(proofStr) + return verified != 0, nil +} + +// VerifyChunkProof Verify a ZkProof by marshaling it and sending it to the Halo2 Verifier. +func (v *Verifier) VerifyChunkProof(proof *message.ChunkProof) (bool, error) { + if v.cfg.MockMode { + log.Info("Mock mode, verifier disabled") + if string(proof.Proof) == InvalidTestProof { + return false, nil + } + return true, nil + + } + buf, err := json.Marshal(proof) + if err != nil { + return false, err + } + + proofStr := C.CString(string(buf)) + defer func() { + C.free(unsafe.Pointer(proofStr)) + }() + + log.Info("Start to verify chunk proof ...") + verified := C.verify_chunk_proof(proofStr) + return verified != 0, nil +} diff --git a/coordinator/internal/logic/verifier/batch_verifier_test.go b/coordinator/internal/logic/verifier/verifier_test.go similarity index 100% rename from coordinator/internal/logic/verifier/batch_verifier_test.go rename to coordinator/internal/logic/verifier/verifier_test.go From 00ac11ea636e84b098303f27a383b22b24227d38 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 15:40:09 +0800 Subject: [PATCH 11/39] Revert to ProverCore, and init batch or chunk prover by message proof type. --- coordinator/conf/config.json | 5 - .../internal/logic/verifier/chunk_verifier.go | 72 ------------ prover/config.json | 6 +- prover/config/config.go | 35 +++--- prover/core/chunk_prover.go | 103 ------------------ prover/core/chunk_prover_test.go | 63 ----------- prover/core/{batch_prover.go => prover.go} | 69 +++++++++--- .../{batch_prover_test.go => prover_test.go} | 0 8 files changed, 72 insertions(+), 281 deletions(-) delete mode 100644 coordinator/internal/logic/verifier/chunk_verifier.go delete mode 100644 prover/core/chunk_prover.go delete mode 100644 prover/core/chunk_prover_test.go rename prover/core/{batch_prover.go => prover.go} (53%) rename prover/core/{batch_prover_test.go => prover_test.go} (100%) diff --git a/coordinator/conf/config.json b/coordinator/conf/config.json index 17976c680a..e658560490 100644 --- a/coordinator/conf/config.json +++ b/coordinator/conf/config.json @@ -5,11 +5,6 @@ "session_attempts": 2, "collection_time": 180, "token_time_to_live": 60, - "batch_verifier_config": { - "mock_mode": true, - "params_path": "", - "assets_path": "" - }, "verifier": { "mock_mode": true, "params_path": "", diff --git a/coordinator/internal/logic/verifier/chunk_verifier.go b/coordinator/internal/logic/verifier/chunk_verifier.go deleted file mode 100644 index 2150f8b50f..0000000000 --- a/coordinator/internal/logic/verifier/chunk_verifier.go +++ /dev/null @@ -1,72 +0,0 @@ -//go:build !mock_verifier - -package verifier - -/* -#cgo LDFLAGS: -lzkp -lm -ldl -lzktrie -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib -#cgo gpu LDFLAGS: -lzkp -lm -ldl -lgmp -lstdc++ -lprocps -lzktrie -L/usr/local/cuda/lib64/ -lcudart -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib -#include -#include "./lib/libzkp.h" -*/ -import "C" //nolint:typecheck - -import ( - "encoding/json" - "unsafe" - - "github.com/scroll-tech/go-ethereum/log" - - "scroll-tech/coordinator/internal/config" - - "scroll-tech/common/types/message" -) - -// InvalidTestChunkProof invalid chunk proof used in tests -const InvalidTestChunkProof = "this is an invalid chunk proof" - -// ChunkVerifier represents a rust ffi to a halo2 verifier. -type ChunkVerifier struct { - cfg *config.ChunkVerifierConfig -} - -// NewChunkVerifier Sets up a rust ffi to call verify. -func NewChunkVerifier(cfg *config.ChunkVerifierConfig) (*ChunkVerifier, error) { - if cfg.MockMode { - return &ChunkVerifier{cfg: cfg}, nil - } - paramsPathStr := C.CString(cfg.ParamsPath) - assetsPathStr := C.CString(cfg.assetsPath) - defer func() { - C.free(unsafe.Pointer(paramsPathStr)) - C.free(unsafe.Pointer(assetsPathStr)) - }() - - C.init_chunk_verifier(paramsPathStr, assetsPathStr) - - return &ChunkVerifier{cfg: cfg}, nil -} - -// VerifyProof Verify a ZkProof by marshaling it and sending it to the Halo2 Verifier. -func (v *ChunkVerifier) VerifyProof(proof *message.ChunkProof) (bool, error) { - if v.cfg.MockMode { - log.Info("Mock mode, verifier disabled") - if string(proof.Proof) == InvalidTestChunkProof { - return false, nil - } - return true, nil - - } - buf, err := json.Marshal(proof) - if err != nil { - return false, err - } - - proofStr := C.CString(string(buf)) - defer func() { - C.free(unsafe.Pointer(proofStr)) - }() - - log.Info("Start to verify chunk proof ...") - verified := C.verify_chunk_proof(proofStr) - return verified != 0, nil -} diff --git a/prover/config.json b/prover/config.json index 2256c061d4..cddf20a34d 100644 --- a/prover/config.json +++ b/prover/config.json @@ -4,11 +4,7 @@ "keystore_password": "prover-pwd", "coordinator_url": "ws://localhost:8391", "db_path": "bbolt_db", - "batch_config": { - "params_path": "params", - "assets_path": "assets" - }, - "chunk_config": { + "core": { "params_path": "params", "assets_path": "assets" } diff --git a/prover/config/config.go b/prover/config/config.go index c88c7690bf..a23be7809d 100644 --- a/prover/config/config.go +++ b/prover/config/config.go @@ -5,33 +5,28 @@ import ( "os" "path/filepath" + "scroll-tech/common/types/message" + "github.com/scroll-tech/go-ethereum/log" ) // Config loads prover configuration items. type Config struct { - ProverName string `json:"prover_name"` - KeystorePath string `json:"keystore_path"` - KeystorePassword string `json:"keystore_password"` - CoordinatorURL string `json:"coordinator_url"` - TraceEndpoint string `json:"trace_endpoint"` - DBPath string `json:"db_path"` - BatchProverConfig *BatchProverConfig `json:"batch_prover_config"` - ChunkProverConfig *ChunkProverConfig `json:"chunk_prover_config"` -} - -// BatchProverConfig load batch prover config. -type BatchProverConfig struct { - ParamsPath string `json:"params_path"` - AssetsPath string `json:"assets_path"` - DumpDir string `json:"dump_dir,omitempty"` + ProverName string `json:"prover_name"` + KeystorePath string `json:"keystore_path"` + KeystorePassword string `json:"keystore_password"` + CoordinatorURL string `json:"coordinator_url"` + TraceEndpoint string `json:"trace_endpoint"` + Core *ProverCoreConfig `json:"core"` + DBPath string `json:"db_path"` } -// ChunkProverConfig load chunk prover config. -type ChunkProverConfig struct { - ParamsPath string `json:"params_path"` - AssetsPath string `json:"assets_path"` - DumpDir string `json:"dump_dir,omitempty"` +// ProverCoreConfig load zk prover config. +type ProverCoreConfig struct { + ParamsPath string `json:"params_path"` + AssetsPath string `json:"assets_path"` + ProofType message.ProofType `json:"prove_type,omitempty"` // 0: chunk prover (default type), 1: batch prover + DumpDir string `json:"dump_dir,omitempty"` } // NewConfig returns a new instance of Config. diff --git a/prover/core/chunk_prover.go b/prover/core/chunk_prover.go deleted file mode 100644 index 02598ccca7..0000000000 --- a/prover/core/chunk_prover.go +++ /dev/null @@ -1,103 +0,0 @@ -//go:build !mock_prover - -package core - -/* -#cgo LDFLAGS: -lzkp -lm -ldl -lzktrie -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib -#cgo gpu LDFLAGS: -lzkp -lm -ldl -lgmp -lstdc++ -lprocps -lzktrie -L/usr/local/cuda/lib64/ -lcudart -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib -#include -#include "./lib/libzkp.h" -*/ -import "C" //nolint:typecheck - -import ( - "encoding/json" - "os" - "path/filepath" - "unsafe" - - "github.com/scroll-tech/go-ethereum/core/types" - "github.com/scroll-tech/go-ethereum/log" - - "scroll-tech/common/types/message" - - "scroll-tech/prover/config" -) - -// ChunkProver sends block-traces to rust-prover through ffi and get back the zk-proof. -type ChunkProver struct { - cfg *config.ChunkProverConfig -} - -// NewChunkProver inits a ChunkProver object. -func NewChunkProver(cfg *config.ChunkProverConfig) (*ChunkProver, error) { - paramsPathStr := C.CString(cfg.ParamsPath) - assetsPathStr := C.CString(cfg.AssetsPath) - defer func() { - C.free(unsafe.Pointer(paramsPathStr)) - C.free(unsafe.Pointer(assetsPathStr)) - }() - C.init_chunk_prover(paramsPathStr, assetsPathStr) - - if cfg.DumpDir != "" { - err := os.MkdirAll(cfg.DumpDir, os.ModePerm) - if err != nil { - return nil, err - } - log.Info("Enabled dump_chunk_proof", "dir", cfg.DumpDir) - } - - return &ChunkProver{cfg: cfg}, nil -} - -// Prove call rust ffi to generate chunk proof, if first failed, try again. -func (p *ChunkProver) Prove(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { - if p.cfg.ProofType != message.ProofTypeChunk { - return nil, errors.New("Wrong proof type in chunk-prover: %d", p.cfg.ProofType) - } - - tracesByt, err := json.Marshal(traces) - if err != nil { - return nil, err - } - proofByt := p.prove(tracesByt) - - // dump proof - err := p.dumpProof(taskID, proofByt) - if err != nil { - log.Error("Dump chunk proof failed", "task-id", taskID, "error", err) - } - - zkProof := &message.ChunkProof{} - return zkProof, json.Unmarshal(proofByt, zkProof) -} - -// Call cgo to generate chunk proof. -func (p *ChunkProver) prove(tracesByt []byte) []byte { - tracesStr := C.CString(string(tracesByt)) - - defer func() { - C.free(unsafe.Pointer(tracesStr)) - }() - - log.Info("Start to create chunk proof ...") - cProof := C.gen_chunk_proof(tracesStr) - log.Info("Finish creating chunk proof!") - - proof := C.GoString(cProof) - return []byte(proof) -} - -func (p *ChunkProver) dumpProof(id string, proofByt []byte) error { - if p.cfg.DumpDir == "" { - return nil - } - path := filepath.Join(p.cfg.DumpDir, id) - f, err := os.Create(path) - if err != nil { - return err - } - log.Info("Saving chunk proof", "task-id", id) - _, err = f.Write(proofByt) - return err -} diff --git a/prover/core/chunk_prover_test.go b/prover/core/chunk_prover_test.go deleted file mode 100644 index 1e3bfcd611..0000000000 --- a/prover/core/chunk_prover_test.go +++ /dev/null @@ -1,63 +0,0 @@ -//go:build ffi - -package core_test - -import ( - "encoding/json" - "flag" - "io" - "os" - "path/filepath" - "testing" - - "github.com/scroll-tech/go-ethereum/core/types" - "github.com/stretchr/testify/assert" - - "scroll-tech/prover/config" - "scroll-tech/prover/core" -) - -var ( - paramsPath = flag.String("params", "/assets/test_params", "params dir") - tracesPath = flag.String("traces", "/assets/traces", "traces dir") - proofDumpPath = flag.String("dump", "/assets/proof_data", "the path proofs dump to") -) - -func TestFFI(t *testing.T) { - as := assert.New(t) - cfg := &config.ProverCoreConfig{ - ParamsPath: *paramsPath, - } - proverCore, err := core.NewProverCore(cfg) - as.NoError(err) - - files, err := os.ReadDir(*tracesPath) - as.NoError(err) - - traces := make([]*types.BlockTrace, 0) - for _, file := range files { - var ( - f *os.File - byt []byte - ) - f, err = os.Open(filepath.Join(*tracesPath, file.Name())) - as.NoError(err) - byt, err = io.ReadAll(f) - as.NoError(err) - trace := &types.BlockTrace{} - as.NoError(json.Unmarshal(byt, trace)) - traces = append(traces, trace) - } - proof, err := proverCore.Prove("test", traces) - as.NoError(err) - t.Log("prove success") - - // dump the proof - os.RemoveAll(*proofDumpPath) - proofByt, err := json.Marshal(proof) - as.NoError(err) - proofFile, err := os.Create(*proofDumpPath) - as.NoError(err) - _, err = proofFile.Write(proofByt) - as.NoError(err) -} diff --git a/prover/core/batch_prover.go b/prover/core/prover.go similarity index 53% rename from prover/core/batch_prover.go rename to prover/core/prover.go index 68a59de981..0eb70ffdef 100644 --- a/prover/core/batch_prover.go +++ b/prover/core/prover.go @@ -24,34 +24,39 @@ import ( "scroll-tech/prover/config" ) -// BatchProver sends block-traces to rust-prover through ffi and get back the zk-proof. -type BatchProver struct { - cfg *config.BatchProverConfig +// ProverCore sends block-traces to rust-prover through ffi and get back the zk-proof. +type ProverCore struct { + cfg *config.ProverCoreConfig } -// NewBatchProver inits a BatchProver object. -func NewBatchProver(cfg *config.BatchProverConfig) (*BatchProver, error) { +// NewProverCore inits a ProverCore object. +func NewProverCore(cfg *config.ProverCoreConfig) (*ProverCore, error) { paramsPathStr := C.CString(cfg.ParamsPath) assetsPathStr := C.CString(cfg.assetsPath) defer func() { C.free(unsafe.Pointer(paramsPathStr)) C.free(unsafe.Pointer(assetsPathStr)) }() - C.init_batch_prover(paramsPathStr, assetsPathStr) + + if p.cfg.ProofType == message.ProofTypeBatch { + C.init_batch_prover(paramsPathStr, assetsPathStr) + } else if p.cfg.ProofType == message.ProofTypeChunk { + C.init_chunk_prover(paramsPathStr, assetsPathStr) + } if cfg.DumpDir != "" { err := os.MkdirAll(cfg.DumpDir, os.ModePerm) if err != nil { return nil, err } - log.Info("Enabled dump_batch_proof", "dir", cfg.DumpDir) + log.Info("Enabled dump_proof", "dir", cfg.DumpDir) } - return &BatchProver{cfg: cfg}, nil + return &ProverCore{cfg: cfg}, nil } // Prove call rust ffi to generate batch proof, if first failed, try again. -func (p *BatchProver) Prove(taskID string, chunkHashes []*message.ChunkHash, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { +func (p *Prover) BatchProve(taskID string, chunkHashes []*message.ChunkHash, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { if p.cfg.ProofType != message.ProofTypeBatch { return nil, errors.New("Wrong proof type in batch-prover: %d", p.cfg.ProofType) } @@ -64,7 +69,7 @@ func (p *BatchProver) Prove(taskID string, chunkHashes []*message.ChunkHash, chu if err != nil { return nil, err } - proofByt := p.prove(chunkHashesByt, chunkProofsByt) + proofByt := p.BatchProveInner(chunkHashesByt, chunkProofsByt) // dump proof err := p.dumpProof(taskID, proofByt) @@ -76,8 +81,30 @@ func (p *BatchProver) Prove(taskID string, chunkHashes []*message.ChunkHash, chu return zkProof, json.Unmarshal(proofByt, zkProof) } +// Prove call rust ffi to generate chunk proof, if first failed, try again. +func (p *Prover) ChunkProve(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { + if p.cfg.ProofType != message.ProofTypeChunk { + return nil, errors.New("Wrong proof type in chunk-prover: %d", p.cfg.ProofType) + } + + tracesByt, err := json.Marshal(traces) + if err != nil { + return nil, err + } + proofByt := p.ChunkProveInner(tracesByt) + + // dump proof + err := p.dumpProof(taskID, proofByt) + if err != nil { + log.Error("Dump chunk proof failed", "task-id", taskID, "error", err) + } + + zkProof := &message.ChunkProof{} + return zkProof, json.Unmarshal(proofByt, zkProof) +} + // Call cgo to generate batch proof. -func (p *BatchProver) prove(chunkHashesByt []byte, chunkProofsByt []byte) []byte { +func (p *Prover) BatchProveInner(chunkHashesByt []byte, chunkProofsByt []byte) []byte { chunkHashesStr := C.CString(string(chunkHashesByt)) chunkProofsStr := C.CString(string(chunkProofsByt)) @@ -94,7 +121,23 @@ func (p *BatchProver) prove(chunkHashesByt []byte, chunkProofsByt []byte) []byte return []byte(proof) } -func (p *BatchProver) dumpProof(id string, proofByt []byte) error { +// Call cgo to generate chunk proof. +func (p *Prover) ChunkProveInner(tracesByt []byte) []byte { + tracesStr := C.CString(string(tracesByt)) + + defer func() { + C.free(unsafe.Pointer(tracesStr)) + }() + + log.Info("Start to create chunk proof ...") + cProof := C.gen_chunk_proof(tracesStr) + log.Info("Finish creating chunk proof!") + + proof := C.GoString(cProof) + return []byte(proof) +} + +func (p *Prover) dumpProof(id string, proofByt []byte) error { if p.cfg.DumpDir == "" { return nil } @@ -103,7 +146,7 @@ func (p *BatchProver) dumpProof(id string, proofByt []byte) error { if err != nil { return err } - log.Info("Saving batch proof", "task-id", id) + log.Info("Saving proof", "task-id", id) _, err = f.Write(proofByt) return err } diff --git a/prover/core/batch_prover_test.go b/prover/core/prover_test.go similarity index 100% rename from prover/core/batch_prover_test.go rename to prover/core/prover_test.go From 2c3aa8cdac792aa9aebb8c69aa3fdba4f16eaa5f Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 15:43:36 +0800 Subject: [PATCH 12/39] fix --- prover/core/prover.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/prover/core/prover.go b/prover/core/prover.go index 0eb70ffdef..0731c96e7e 100644 --- a/prover/core/prover.go +++ b/prover/core/prover.go @@ -56,7 +56,7 @@ func NewProverCore(cfg *config.ProverCoreConfig) (*ProverCore, error) { } // Prove call rust ffi to generate batch proof, if first failed, try again. -func (p *Prover) BatchProve(taskID string, chunkHashes []*message.ChunkHash, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { +func (p *ProverCore) BatchProve(taskID string, chunkHashes []*message.ChunkHash, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { if p.cfg.ProofType != message.ProofTypeBatch { return nil, errors.New("Wrong proof type in batch-prover: %d", p.cfg.ProofType) } @@ -82,7 +82,7 @@ func (p *Prover) BatchProve(taskID string, chunkHashes []*message.ChunkHash, chu } // Prove call rust ffi to generate chunk proof, if first failed, try again. -func (p *Prover) ChunkProve(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { +func (p *ProverCore) ChunkProve(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { if p.cfg.ProofType != message.ProofTypeChunk { return nil, errors.New("Wrong proof type in chunk-prover: %d", p.cfg.ProofType) } @@ -104,7 +104,7 @@ func (p *Prover) ChunkProve(taskID string, traces []*types.BlockTrace) (*message } // Call cgo to generate batch proof. -func (p *Prover) BatchProveInner(chunkHashesByt []byte, chunkProofsByt []byte) []byte { +func (p *ProverCore) BatchProveInner(chunkHashesByt []byte, chunkProofsByt []byte) []byte { chunkHashesStr := C.CString(string(chunkHashesByt)) chunkProofsStr := C.CString(string(chunkProofsByt)) @@ -122,7 +122,7 @@ func (p *Prover) BatchProveInner(chunkHashesByt []byte, chunkProofsByt []byte) [ } // Call cgo to generate chunk proof. -func (p *Prover) ChunkProveInner(tracesByt []byte) []byte { +func (p *ProverCore) ChunkProveInner(tracesByt []byte) []byte { tracesStr := C.CString(string(tracesByt)) defer func() { @@ -137,7 +137,7 @@ func (p *Prover) ChunkProveInner(tracesByt []byte) []byte { return []byte(proof) } -func (p *Prover) dumpProof(id string, proofByt []byte) error { +func (p *ProverCore) dumpProof(id string, proofByt []byte) error { if p.cfg.DumpDir == "" { return nil } From ff2495f25d6da3142dd6776866e80d2350f774cc Mon Sep 17 00:00:00 2001 From: xinran chen Date: Mon, 31 Jul 2023 16:00:47 +0800 Subject: [PATCH 13/39] fix test --- common/types/message/message_test.go | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/common/types/message/message_test.go b/common/types/message/message_test.go index 50d77117a6..41aa187090 100644 --- a/common/types/message/message_test.go +++ b/common/types/message/message_test.go @@ -68,11 +68,9 @@ func TestProofMessageSignVerifyPublicKey(t *testing.T) { Type: ProofTypeChunk, Status: StatusOk, ChunkProof: &ChunkProof{ - Proof: []byte("testProof"), - Instance: []byte("testInstance"), - FinalPair: []byte("testFinalPair"), - Vk: []byte("testVk"), - BlockCount: 1, + Proof: []byte("testProof"), + Instance: []byte("testInstance"), + Vk: []byte("testVk"), }, Error: "testError", }, @@ -96,11 +94,9 @@ func TestProofDetailHash(t *testing.T) { Type: ProofTypeChunk, Status: StatusOk, ChunkProof: &ChunkProof{ - Proof: []byte("testProof"), - Instance: []byte("testInstance"), - FinalPair: []byte("testFinalPair"), - Vk: []byte("testVk"), - BlockCount: 1, + Proof: []byte("testProof"), + Instance: []byte("testInstance"), + Vk: []byte("testVk"), }, Error: "testError", } @@ -131,11 +127,9 @@ func TestProofMsgPublicKey(t *testing.T) { Type: ProofTypeChunk, Status: StatusOk, ChunkProof: &ChunkProof{ - Proof: []byte("testProof"), - Instance: []byte("testInstance"), - FinalPair: []byte("testFinalPair"), - Vk: []byte("testVk"), - BlockCount: 1, + Proof: []byte("testProof"), + Instance: []byte("testInstance"), + Vk: []byte("testVk"), }, Error: "testError", }, From 89b84d75d681eb57e9b66fcc50db2c6a8f265fff Mon Sep 17 00:00:00 2001 From: xinran chen Date: Mon, 31 Jul 2023 16:29:47 +0800 Subject: [PATCH 14/39] some fix --- common/types/message/message.go | 6 ------ prover/core/prover.go | 25 ++++++++++++------------- 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/common/types/message/message.go b/common/types/message/message.go index f7191b5247..cea6706518 100644 --- a/common/types/message/message.go +++ b/common/types/message/message.go @@ -258,15 +258,9 @@ func (ap *BatchProof) SanityCheck() error { if len(ap.Proof) == 0 { return errors.New("proof not ready") } - if len(ap.FinalPair) == 0 { - return errors.New("final_pair not ready") - } if len(ap.Proof)%32 != 0 { return fmt.Errorf("proof buffer has wrong length, expected: 32, got: %d", len(ap.Proof)) } - if len(ap.FinalPair)%32 != 0 { - return fmt.Errorf("final_pair buffer has wrong length, expected: 32, got: %d", len(ap.FinalPair)) - } return nil } diff --git a/prover/core/prover.go b/prover/core/prover.go index 0731c96e7e..c404db8321 100644 --- a/prover/core/prover.go +++ b/prover/core/prover.go @@ -12,6 +12,7 @@ import "C" //nolint:typecheck import ( "encoding/json" + "github.com/pkg/errors" "os" "path/filepath" "unsafe" @@ -32,16 +33,14 @@ type ProverCore struct { // NewProverCore inits a ProverCore object. func NewProverCore(cfg *config.ProverCoreConfig) (*ProverCore, error) { paramsPathStr := C.CString(cfg.ParamsPath) - assetsPathStr := C.CString(cfg.assetsPath) defer func() { C.free(unsafe.Pointer(paramsPathStr)) - C.free(unsafe.Pointer(assetsPathStr)) }() - if p.cfg.ProofType == message.ProofTypeBatch { - C.init_batch_prover(paramsPathStr, assetsPathStr) - } else if p.cfg.ProofType == message.ProofTypeChunk { - C.init_chunk_prover(paramsPathStr, assetsPathStr) + if cfg.ProofType == message.ProofTypeBatch { + C.init_batch_prover(paramsPathStr) + } else if cfg.ProofType == message.ProofTypeChunk { + C.init_chunk_prover(paramsPathStr) } if cfg.DumpDir != "" { @@ -55,10 +54,10 @@ func NewProverCore(cfg *config.ProverCoreConfig) (*ProverCore, error) { return &ProverCore{cfg: cfg}, nil } -// Prove call rust ffi to generate batch proof, if first failed, try again. +// BatchProve call rust ffi to generate batch proof, if first failed, try again. func (p *ProverCore) BatchProve(taskID string, chunkHashes []*message.ChunkHash, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { if p.cfg.ProofType != message.ProofTypeBatch { - return nil, errors.New("Wrong proof type in batch-prover: %d", p.cfg.ProofType) + return nil, errors.Errorf("Wrong proof type in batch-prover: %d", p.cfg.ProofType) } chunkHashesByt, err := json.Marshal(chunkHashes) @@ -72,7 +71,7 @@ func (p *ProverCore) BatchProve(taskID string, chunkHashes []*message.ChunkHash, proofByt := p.BatchProveInner(chunkHashesByt, chunkProofsByt) // dump proof - err := p.dumpProof(taskID, proofByt) + err = p.dumpProof(taskID, proofByt) if err != nil { log.Error("Dump batch proof failed", "task-id", taskID, "error", err) } @@ -81,10 +80,10 @@ func (p *ProverCore) BatchProve(taskID string, chunkHashes []*message.ChunkHash, return zkProof, json.Unmarshal(proofByt, zkProof) } -// Prove call rust ffi to generate chunk proof, if first failed, try again. +// ChunkProve call rust ffi to generate chunk proof, if first failed, try again. func (p *ProverCore) ChunkProve(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { if p.cfg.ProofType != message.ProofTypeChunk { - return nil, errors.New("Wrong proof type in chunk-prover: %d", p.cfg.ProofType) + return nil, errors.Errorf("Wrong proof type in chunk-prover: %d", p.cfg.ProofType) } tracesByt, err := json.Marshal(traces) @@ -94,7 +93,7 @@ func (p *ProverCore) ChunkProve(taskID string, traces []*types.BlockTrace) (*mes proofByt := p.ChunkProveInner(tracesByt) // dump proof - err := p.dumpProof(taskID, proofByt) + err = p.dumpProof(taskID, proofByt) if err != nil { log.Error("Dump chunk proof failed", "task-id", taskID, "error", err) } @@ -103,7 +102,7 @@ func (p *ProverCore) ChunkProve(taskID string, traces []*types.BlockTrace) (*mes return zkProof, json.Unmarshal(proofByt, zkProof) } -// Call cgo to generate batch proof. +// BatchProveInner cgo to generate batch proof. func (p *ProverCore) BatchProveInner(chunkHashesByt []byte, chunkProofsByt []byte) []byte { chunkHashesStr := C.CString(string(chunkHashesByt)) chunkProofsStr := C.CString(string(chunkProofsByt)) From 964e5caee2fb1dd11f12391144fd3b281bf073be Mon Sep 17 00:00:00 2001 From: xinran chen Date: Mon, 31 Jul 2023 17:01:14 +0800 Subject: [PATCH 15/39] add chunkHash --- common/types/message/message.go | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/common/types/message/message.go b/common/types/message/message.go index cea6706518..e3d2a6bee7 100644 --- a/common/types/message/message.go +++ b/common/types/message/message.go @@ -232,13 +232,28 @@ func (z *ProofDetail) Hash() ([]byte, error) { return hash[:], nil } +// ChunkHash is for chunk proof +type ChunkHash struct { + ChainID uint64 `json:"chain_id"` + PrevStateRoot common.Hash `json:"prev_state_root"` + PostStateRoot common.Hash `json:"post_state_root"` + WithdrawRoot common.Hash `json:"withdraw_root"` + DataHash common.Hash `json:"data_hash"` + IsPadding bool `json:"is_padding"` +} + // ChunkProof includes the proof info that are required for chunk verification and rollup. type ChunkProof struct { StorageTrace []byte `json:"storage_trace"` Protocol []byte `json:"protocol"` - Proof []byte `json:"proof"` - Instance []byte `json:"instance"` - Vk []byte `json:"vk"` + Proof Proof `json:"proof"` +} + +// Proof is the zk proof detail +type Proof struct { + Proof []byte `json:"proof"` + Instance []byte `json:"instance"` + Vk []byte `json:"vk"` } // BatchProof includes the proof info that are required for batch verification and rollup. From 408267286ca5654c357582815f12da40e170d50e Mon Sep 17 00:00:00 2001 From: xinran chen Date: Mon, 31 Jul 2023 17:05:04 +0800 Subject: [PATCH 16/39] fix func name --- prover/core/prover.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/prover/core/prover.go b/prover/core/prover.go index c404db8321..9638074acf 100644 --- a/prover/core/prover.go +++ b/prover/core/prover.go @@ -68,7 +68,7 @@ func (p *ProverCore) BatchProve(taskID string, chunkHashes []*message.ChunkHash, if err != nil { return nil, err } - proofByt := p.BatchProveInner(chunkHashesByt, chunkProofsByt) + proofByt := p.batchProve(chunkHashesByt, chunkProofsByt) // dump proof err = p.dumpProof(taskID, proofByt) @@ -90,7 +90,7 @@ func (p *ProverCore) ChunkProve(taskID string, traces []*types.BlockTrace) (*mes if err != nil { return nil, err } - proofByt := p.ChunkProveInner(tracesByt) + proofByt := p.chunkProve(tracesByt) // dump proof err = p.dumpProof(taskID, proofByt) @@ -102,8 +102,7 @@ func (p *ProverCore) ChunkProve(taskID string, traces []*types.BlockTrace) (*mes return zkProof, json.Unmarshal(proofByt, zkProof) } -// BatchProveInner cgo to generate batch proof. -func (p *ProverCore) BatchProveInner(chunkHashesByt []byte, chunkProofsByt []byte) []byte { +func (p *ProverCore) batchProve(chunkHashesByt []byte, chunkProofsByt []byte) []byte { chunkHashesStr := C.CString(string(chunkHashesByt)) chunkProofsStr := C.CString(string(chunkProofsByt)) @@ -120,8 +119,7 @@ func (p *ProverCore) BatchProveInner(chunkHashesByt []byte, chunkProofsByt []byt return []byte(proof) } -// Call cgo to generate chunk proof. -func (p *ProverCore) ChunkProveInner(tracesByt []byte) []byte { +func (p *ProverCore) chunkProve(tracesByt []byte) []byte { tracesStr := C.CString(string(tracesByt)) defer func() { From e2b935a43592deb35f3d2888ae23feb5daf63db0 Mon Sep 17 00:00:00 2001 From: xinran chen Date: Mon, 31 Jul 2023 18:15:44 +0800 Subject: [PATCH 17/39] fix prover.go --- common/types/message/message.go | 3 +- prover/prover.go | 89 ++++++++++++++++++--------------- 2 files changed, 51 insertions(+), 41 deletions(-) diff --git a/common/types/message/message.go b/common/types/message/message.go index e3d2a6bee7..1cdd6fded5 100644 --- a/common/types/message/message.go +++ b/common/types/message/message.go @@ -207,7 +207,8 @@ type TaskMsg struct { // For decentralization, basic provers will get block hashes from the coordinator. So that they can refer to the block hashes and fetch traces locally. Only applicable for basic provers. BlockHashes []common.Hash `json:"block_hashes,omitempty"` // Only applicable for aggregator provers. - SubProofs []*ChunkProof `json:"sub_proofs,omitempty"` + ChunkHashes []*ChunkHash `json:"chunk_hashes,omitempty"` + SubProofs []*ChunkProof `json:"sub_proofs,omitempty"` } // ProofDetail is the message received from provers that contains zk proof, the status of diff --git a/prover/prover.go b/prover/prover.go index 3969503f40..da3f55fdc7 100644 --- a/prover/prover.go +++ b/prover/prover.go @@ -221,50 +221,16 @@ func (r *Prover) prove() error { log.Info("start to prove block", "task-id", task.Task.ID) - var traces []*types.BlockTrace - traces, err = r.getSortedTracesByHashes(task.Task.BlockHashes) - if err != nil { - proofMsg = &message.ProofDetail{ - Status: message.StatusProofError, - Error: "get traces failed", - ID: task.Task.ID, - Type: task.Task.Type, - ChunkProof: nil, - } - log.Error("get traces failed!", "task-id", task.Task.ID, "err", err) - } else { - // If FFI panic during Prove, the prover will restart and re-enter prove() function, - // the proof will not be submitted. - var proof *message.ChunkProof - proof, err = r.proverCore.Prove(task.Task.ID, traces) - if err != nil { - proofMsg = &message.ProofDetail{ - Status: message.StatusProofError, - Error: err.Error(), - ID: task.Task.ID, - Type: task.Task.Type, - ChunkProof: nil, - } - log.Error("prove block failed!", "task-id", task.Task.ID) - } else { - proofMsg = &message.ProofDetail{ - Status: message.StatusOk, - ID: task.Task.ID, - Type: task.Task.Type, - ChunkProof: proof, - } - log.Info("prove block successfully!", "task-id", task.Task.ID) - } - } + proofMsg = r.chooseProve(task) + } else { // when the prover has more than 3 times panic, // it will omit to prove the task, submit StatusProofError and then Delete the task. proofMsg = &message.ProofDetail{ - Status: message.StatusProofError, - Error: "zk proving panic", - ID: task.Task.ID, - Type: task.Task.Type, - ChunkProof: nil, + Status: message.StatusProofError, + Error: "zk proving panic", + ID: task.Task.ID, + Type: task.Task.Type, } } @@ -279,6 +245,49 @@ func (r *Prover) prove() error { return nil } +func (r *Prover) chooseProve(task *store.ProvingTask) (detail *message.ProofDetail) { + detail = &message.ProofDetail{ + ID: task.Task.ID, + Type: task.Task.Type, + Status: message.StatusOk, + } + // batch prove + if r.Type() == message.ProofTypeBatch { + proof, err := r.batchProve(task) + if err != nil { + detail.Status = message.StatusProofError + detail.Error = err.Error() + return + } + detail.BatchProof = proof + log.Info("batch prove block successfully!", "task-id", task.Task.ID) + return + } + // chunk prove + proof, err := r.chunkProve(task) + if err != nil { + detail.Status = message.StatusProofError + detail.Error = err.Error() + return + } + detail.ChunkProof = proof + log.Info("chunk prove block successfully!", "task-id", task.Task.ID) + return +} + +func (r *Prover) chunkProve(task *store.ProvingTask) (*message.ChunkProof, error) { + traces, err := r.getSortedTracesByHashes(task.Task.BlockHashes) + if err != nil { + log.Error("get traces failed!", "task-id", task.Task.ID, "err", err) + return nil, errors.New("get traces from eth node failed") + } + return r.proverCore.ChunkProve(task.Task.ID, traces) +} + +func (r *Prover) batchProve(task *store.ProvingTask) (*message.BatchProof, error) { + return r.proverCore.BatchProve(task.Task.ID, task.Task.ChunkHashes, task.Task.SubProofs) +} + func (r *Prover) signAndSubmitProof(msg *message.ProofDetail) { authZkProof := &message.ProofMsg{ProofDetail: msg} if err := authZkProof.Sign(r.priv); err != nil { From 77d78a175f1b6d757ca176034235f40cb793c4cb Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 18:40:26 +0800 Subject: [PATCH 18/39] Update `prover_test`. --- common/libzkp/impl/Cargo.lock | 4 ++-- common/libzkp/impl/Cargo.toml | 4 ++-- common/libzkp/interface/libzkp.h | 2 ++ prover/config.json | 3 +-- prover/config/config.go | 1 - prover/core/prover.go | 25 ++++++++++++++++++++++ prover/core/prover_test.go | 36 +++++++++++++++++++++++++------- 7 files changed, 61 insertions(+), 14 deletions(-) diff --git a/common/libzkp/impl/Cargo.lock b/common/libzkp/impl/Cargo.lock index cb29eb7534..0767c261ec 100644 --- a/common/libzkp/impl/Cargo.lock +++ b/common/libzkp/impl/Cargo.lock @@ -2733,7 +2733,7 @@ dependencies = [ [[package]] name = "prover" version = "0.4.0" -source = "git+https://github.com/scroll-tech/scroll-prover?rev=fd059f7#fd059f78497a3dca30d3bb43293005cd820e3d65" +source = "git+https://github.com/scroll-tech/scroll-prover?rev=b877e67#b877e675e2d8939d03ff8d1f31e567c4f03e6f8d" dependencies = [ "aggregator", "anyhow", @@ -4001,7 +4001,7 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "types" version = "0.4.0" -source = "git+https://github.com/scroll-tech/scroll-prover?rev=fd059f7#fd059f78497a3dca30d3bb43293005cd820e3d65" +source = "git+https://github.com/scroll-tech/scroll-prover?rev=b877e67#b877e675e2d8939d03ff8d1f31e567c4f03e6f8d" dependencies = [ "base64 0.13.1", "blake2", diff --git a/common/libzkp/impl/Cargo.toml b/common/libzkp/impl/Cargo.toml index 0d45f0e860..79dbe59a0c 100644 --- a/common/libzkp/impl/Cargo.toml +++ b/common/libzkp/impl/Cargo.toml @@ -18,8 +18,8 @@ maingate = { git = "https://github.com/scroll-tech/halo2wrong", branch = "halo2- halo2curves = { git = "https://github.com/scroll-tech/halo2curves.git", branch = "0.3.1-derive-serde" } [dependencies] -prover = { git = "https://github.com/scroll-tech/scroll-prover", rev = "fd059f7" } -types = { git = "https://github.com/scroll-tech/scroll-prover", rev = "fd059f7" } +prover = { git = "https://github.com/scroll-tech/scroll-prover", rev = "b877e67" } +types = { git = "https://github.com/scroll-tech/scroll-prover", rev = "b877e67" } halo2_proofs = { git = "https://github.com/scroll-tech/halo2.git", branch = "develop" } log = "0.4" diff --git a/common/libzkp/interface/libzkp.h b/common/libzkp/interface/libzkp.h index 092a0768ec..81a7367f72 100644 --- a/common/libzkp/interface/libzkp.h +++ b/common/libzkp/interface/libzkp.h @@ -7,3 +7,5 @@ void init_chunk_prover(char* params_dir); void init_chunk_verifier(char* params_dir, char* assets_dir); char* gen_chunk_proof(char* block_traces); char verify_chunk_proof(char* proof); + +char* block_traces_to_chunk_hash(char* block_traces); diff --git a/prover/config.json b/prover/config.json index cddf20a34d..3c6ce76277 100644 --- a/prover/config.json +++ b/prover/config.json @@ -5,7 +5,6 @@ "coordinator_url": "ws://localhost:8391", "db_path": "bbolt_db", "core": { - "params_path": "params", - "assets_path": "assets" + "params_path": "params" } } diff --git a/prover/config/config.go b/prover/config/config.go index a23be7809d..f146047131 100644 --- a/prover/config/config.go +++ b/prover/config/config.go @@ -24,7 +24,6 @@ type Config struct { // ProverCoreConfig load zk prover config. type ProverCoreConfig struct { ParamsPath string `json:"params_path"` - AssetsPath string `json:"assets_path"` ProofType message.ProofType `json:"prove_type,omitempty"` // 0: chunk prover (default type), 1: batch prover DumpDir string `json:"dump_dir,omitempty"` } diff --git a/prover/core/prover.go b/prover/core/prover.go index 9638074acf..788d569907 100644 --- a/prover/core/prover.go +++ b/prover/core/prover.go @@ -102,6 +102,18 @@ func (p *ProverCore) ChunkProve(taskID string, traces []*types.BlockTrace) (*mes return zkProof, json.Unmarshal(proofByt, zkProof) } +// TracesToChunkHash convert traces to chunk hash +func (p *ProverCore) TracesToChunkHash(traces []*types.BlockTrace) (*message.ChunkHash, error) { + tracesByt, err := json.Marshal(traces) + if err != nil { + return nil, err + } + chunkHashByt := p.tracesToChunkHash(tracesByt) + + chunkHash := &message.ChunkHash{} + return chunkHash, json.Unmarshal(chunkHashByt, chunkHash) +} + func (p *ProverCore) batchProve(chunkHashesByt []byte, chunkProofsByt []byte) []byte { chunkHashesStr := C.CString(string(chunkHashesByt)) chunkProofsStr := C.CString(string(chunkProofsByt)) @@ -147,3 +159,16 @@ func (p *ProverCore) dumpProof(id string, proofByt []byte) error { _, err = f.Write(proofByt) return err } + +func (p *ProverCore) tracesToChunkHash(tracesByt []byte) []byte { + tracesStr := C.CString(string(tracesByt)) + + defer func() { + C.free(unsafe.Pointer(tracesStr)) + }() + + cChunkHash := C.block_traces_to_chunk_hash(tracesStr) + + chunkHash := C.GoString(cChunkHash) + return []byte(chunkHash) +} diff --git a/prover/core/prover_test.go b/prover/core/prover_test.go index 1e3bfcd611..c2a85fcf3a 100644 --- a/prover/core/prover_test.go +++ b/prover/core/prover_test.go @@ -13,6 +13,8 @@ import ( "github.com/scroll-tech/go-ethereum/core/types" "github.com/stretchr/testify/assert" + "scroll-tech/common/types/message" + "scroll-tech/prover/config" "scroll-tech/prover/core" ) @@ -48,16 +50,36 @@ func TestFFI(t *testing.T) { as.NoError(json.Unmarshal(byt, trace)) traces = append(traces, trace) } - proof, err := proverCore.Prove("test", traces) + + chunkHash, err := proverCore.TracesToChunkHash(traces) + as.NoError(err) + t.Log("Generated chunk hash") + + chunkProof, err := proverCore.ChunkProve("test", traces) + as.NoError(err) + t.Log("Generated chunk proof") + + chunkProofByt, err := json.Marshal(chunkProof) + as.NoError(err) + chunkProofFile, err := os.Create(filepath.Join(*proofDumpPath, "chunk_proof")) + as.NoError(err) + _, err = chunkProofFile.Write(chunkProofByt) + as.NoError(err) + t.Log("Dumped chunk proof") + + chunkHashes := make([]*message.ChunkHash, 0) + chunkHashes = append(chunkHashes, chunkHash) + chunkProofs := make([]*message.ChunkProof, 0) + chunkProofs = append(chunkProofs, proof) + batchProof, err := proverCore.BatchProve("test", chunkHashes, chunkProofs) as.NoError(err) - t.Log("prove success") + t.Log("Generated batch proof") - // dump the proof - os.RemoveAll(*proofDumpPath) - proofByt, err := json.Marshal(proof) + batchProofByt, err := json.Marshal(batchProof) as.NoError(err) - proofFile, err := os.Create(*proofDumpPath) + batchProofFile, err := os.Create(filepath.Join(*proofDumpPath, "batch_proof")) as.NoError(err) - _, err = proofFile.Write(proofByt) + _, err = batchProofFile.Write(batchProofByt) as.NoError(err) + t.Log("Dumped batch proof") } From 631e38677d3dd6942ccc01956d084ef6b536c604 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 18:53:56 +0800 Subject: [PATCH 19/39] Update `verifier_test`. --- .../internal/logic/verifier/verifier_test.go | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/coordinator/internal/logic/verifier/verifier_test.go b/coordinator/internal/logic/verifier/verifier_test.go index 1ecb9be994..1aa1445825 100644 --- a/coordinator/internal/logic/verifier/verifier_test.go +++ b/coordinator/internal/logic/verifier/verifier_test.go @@ -17,9 +17,10 @@ import ( ) var ( - paramsPath = flag.String("params", "/assets/test_params", "params dir") - aggVkPath = flag.String("vk", "/assets/agg_vk", "aggregation proof verification key path") - proofPath = flag.String("proof", "/assets/agg_proof", "aggregation proof path") + paramsPath = flag.String("params", "/assets/test_params", "params dir") + assetsPath = flag.String("assets", "/assets/test_assets", "assets dir") + batchProofPath = flag.String("batch_proof", "/assets/proof_data/batch_proof", "batch proof file path") + chunkProofPath = flag.String("chunk_proof", "/assets/proof_data/chunk_proof", "chunk proof file path") ) func TestFFI(t *testing.T) { @@ -27,19 +28,30 @@ func TestFFI(t *testing.T) { cfg := &config.VerifierConfig{ MockMode: false, ParamsPath: *paramsPath, - AggVkPath: *aggVkPath, + AssetsPath: *assetsPath, } v, err := NewVerifier(cfg) as.NoError(err) - f, err := os.Open(*proofPath) + chunkProofFile, err := os.Open(*chunkProofPath) as.NoError(err) - byt, err := io.ReadAll(f) + chunkProofByt, err := io.ReadAll(chunkProofFile) as.NoError(err) - proof := &message.BatchProof{} - as.NoError(json.Unmarshal(byt, proof)) + chunkProof := &message.ChunkProof{} + as.NoError(json.Unmarshal(chunkProofByt, chunkProof)) - ok, err := v.VerifyProof(proof) + chunkOk, err := v.VerifyChunkProof(chunkProof) as.NoError(err) - as.True(ok) + as.True(chunkOk) + + batchProofFile, err := os.Open(*batchProofPath) + as.NoError(err) + batchProofByt, err := io.ReadAll(batchProofFile) + as.NoError(err) + batchProof := &message.BatchProof{} + as.NoError(json.Unmarshal(batchProofByt, batchProof)) + + batchOk, err := v.VerifyBatchProof(batchProof) + as.NoError(err) + as.True(batchOk) } From 8138a6f7f455c241bb00416a2c8fe3aa9b558c56 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 19:56:09 +0800 Subject: [PATCH 20/39] Update tests. --- coordinator/internal/logic/verifier/verifier.go | 2 +- coordinator/internal/logic/verifier/verifier_test.go | 3 ++- prover/core/prover_test.go | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/coordinator/internal/logic/verifier/verifier.go b/coordinator/internal/logic/verifier/verifier.go index 7580bb7520..ddfac73a93 100644 --- a/coordinator/internal/logic/verifier/verifier.go +++ b/coordinator/internal/logic/verifier/verifier.go @@ -76,7 +76,7 @@ func (v *Verifier) VerifyBatchProof(proof *message.BatchProof) (bool, error) { func (v *Verifier) VerifyChunkProof(proof *message.ChunkProof) (bool, error) { if v.cfg.MockMode { log.Info("Mock mode, verifier disabled") - if string(proof.Proof) == InvalidTestProof { + if string(proof.Proof.Proof) == InvalidTestProof { return false, nil } return true, nil diff --git a/coordinator/internal/logic/verifier/verifier_test.go b/coordinator/internal/logic/verifier/verifier_test.go index 1aa1445825..b1df3bc32f 100644 --- a/coordinator/internal/logic/verifier/verifier_test.go +++ b/coordinator/internal/logic/verifier/verifier_test.go @@ -14,6 +14,7 @@ import ( "scroll-tech/common/types/message" "scroll-tech/coordinator/internal/config" + "scroll-tech/coordinator/internal/logic/verifier" ) var ( @@ -30,7 +31,7 @@ func TestFFI(t *testing.T) { ParamsPath: *paramsPath, AssetsPath: *assetsPath, } - v, err := NewVerifier(cfg) + v, err := verifier.NewVerifier(cfg) as.NoError(err) chunkProofFile, err := os.Open(*chunkProofPath) diff --git a/prover/core/prover_test.go b/prover/core/prover_test.go index c2a85fcf3a..470c8161c3 100644 --- a/prover/core/prover_test.go +++ b/prover/core/prover_test.go @@ -70,7 +70,7 @@ func TestFFI(t *testing.T) { chunkHashes := make([]*message.ChunkHash, 0) chunkHashes = append(chunkHashes, chunkHash) chunkProofs := make([]*message.ChunkProof, 0) - chunkProofs = append(chunkProofs, proof) + chunkProofs = append(chunkProofs, chunkProof) batchProof, err := proverCore.BatchProve("test", chunkHashes, chunkProofs) as.NoError(err) t.Log("Generated batch proof") From 80ab030b3ccbfc11079c9c1a5a9ad3e235b2bd6e Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Mon, 31 Jul 2023 20:53:58 +0800 Subject: [PATCH 21/39] Update --- prover/core/prover_test.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/prover/core/prover_test.go b/prover/core/prover_test.go index 470c8161c3..e4c2f0cace 100644 --- a/prover/core/prover_test.go +++ b/prover/core/prover_test.go @@ -27,10 +27,12 @@ var ( func TestFFI(t *testing.T) { as := assert.New(t) - cfg := &config.ProverCoreConfig{ + + chunkProverConfig := &config.ProverCoreConfig{ ParamsPath: *paramsPath, + ProofType: message.ProofTypeChunk, } - proverCore, err := core.NewProverCore(cfg) + chunkProverCore, err := core.NewProverCore(chunkProverConfig) as.NoError(err) files, err := os.ReadDir(*tracesPath) @@ -51,11 +53,11 @@ func TestFFI(t *testing.T) { traces = append(traces, trace) } - chunkHash, err := proverCore.TracesToChunkHash(traces) + chunkHash, err := chunkProverCore.TracesToChunkHash(traces) as.NoError(err) t.Log("Generated chunk hash") - chunkProof, err := proverCore.ChunkProve("test", traces) + chunkProof, err := chunkProverCore.ChunkProve("test", traces) as.NoError(err) t.Log("Generated chunk proof") @@ -67,11 +69,18 @@ func TestFFI(t *testing.T) { as.NoError(err) t.Log("Dumped chunk proof") + batchProverConfig := &config.ProverCoreConfig{ + ParamsPath: *paramsPath, + ProofType: message.ProofTypeBatch, + } + batchProverCore, err := core.NewProverCore(batchProverConfig) + as.NoError(err) + chunkHashes := make([]*message.ChunkHash, 0) chunkHashes = append(chunkHashes, chunkHash) chunkProofs := make([]*message.ChunkProof, 0) chunkProofs = append(chunkProofs, chunkProof) - batchProof, err := proverCore.BatchProve("test", chunkHashes, chunkProofs) + batchProof, err := batchProverCore.BatchProve("test", chunkHashes, chunkProofs) as.NoError(err) t.Log("Generated batch proof") From 8344dc2e919bee79cb8442e148285bc9a6570277 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Tue, 1 Aug 2023 05:19:06 +0800 Subject: [PATCH 22/39] Update --- common/types/message/message.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/types/message/message.go b/common/types/message/message.go index 1cdd6fded5..ecfbf3f42d 100644 --- a/common/types/message/message.go +++ b/common/types/message/message.go @@ -252,9 +252,9 @@ type ChunkProof struct { // Proof is the zk proof detail type Proof struct { - Proof []byte `json:"proof"` - Instance []byte `json:"instance"` - Vk []byte `json:"vk"` + Proof []byte `json:"proof"` + Instances []byte `json:"instances"` + Vk []byte `json:"vk"` } // BatchProof includes the proof info that are required for batch verification and rollup. From 34e45116b4510f2d57beb6f14311d8235f9f4b19 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Tue, 1 Aug 2023 06:44:11 +0800 Subject: [PATCH 23/39] Disable `debug-assertions`. --- common/libzkp/impl/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/libzkp/impl/Cargo.toml b/common/libzkp/impl/Cargo.toml index 79dbe59a0c..b981728a0f 100644 --- a/common/libzkp/impl/Cargo.toml +++ b/common/libzkp/impl/Cargo.toml @@ -33,8 +33,8 @@ once_cell = "1.8.0" [profile.test] opt-level = 3 -debug-assertions = true +# debug-assertions = true [profile.release] opt-level = 3 -debug-assertions = true +# debug-assertions = true From 476f158fd501032f15953c6b4e02736453d3edae Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Tue, 1 Aug 2023 08:06:25 +0800 Subject: [PATCH 24/39] Fix BatchProof. --- common/types/message/message.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/types/message/message.go b/common/types/message/message.go index ecfbf3f42d..2fb8f613bf 100644 --- a/common/types/message/message.go +++ b/common/types/message/message.go @@ -259,9 +259,9 @@ type Proof struct { // BatchProof includes the proof info that are required for batch verification and rollup. type BatchProof struct { - Proof []byte `json:"proof"` - Instance []byte `json:"instance"` - Vk []byte `json:"vk"` + Proof []byte `json:"proof"` + Instances []byte `json:"instances"` + Vk []byte `json:"vk"` } // SanityCheck checks whether an BatchProof is in a legal format From b22e447e996a05c20e903b3a61acbd96cc7521e8 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com> Date: Tue, 1 Aug 2023 10:27:03 +0800 Subject: [PATCH 25/39] rename (#692) --- prover/Makefile | 2 +- prover/core/mock.go | 20 ++++++++++++++++---- prover/core/prover.go | 22 +++++++++++----------- prover/core/prover_test.go | 4 ++-- prover/prover.go | 12 ++++++------ 5 files changed, 36 insertions(+), 24 deletions(-) diff --git a/prover/Makefile b/prover/Makefile index 4333f3a8ef..ee8c91b48a 100644 --- a/prover/Makefile +++ b/prover/Makefile @@ -1,4 +1,4 @@ -.PHONY: lint docker clean prover mock_prover +.PHONY: lint docker clean prover mock-prover ifeq (4.3,$(firstword $(sort $(MAKE_VERSION) 4.3))) ZKEVM_VERSION=$(shell grep -m 1 "scroll-prover" ../common/libzkp/impl/Cargo.lock | cut -d "#" -f2 | cut -c-7) diff --git a/prover/core/mock.go b/prover/core/mock.go index 655c883523..5c876e99f6 100644 --- a/prover/core/mock.go +++ b/prover/core/mock.go @@ -23,12 +23,24 @@ func NewProverCore(cfg *config.ProverCoreConfig) (*ProverCore, error) { return &ProverCore{cfg: cfg}, nil } -// Prove call rust ffi to generate proof, if first failed, try again. -func (p *ProverCore) Prove(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { +func (p *ProverCore) ProveChunk(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { _empty := common.BigToHash(big.NewInt(0)) return &message.ChunkProof{ + StorageTrace: _empty[:], + Protocol: _empty[:], + Proof: message.Proof{ + Proof: _empty[:], + Instances: _empty[:], + Vk: _empty[:], + }, + }, nil +} + +func (p *ProverCore) ProveBatch(taskID string, chunkHashes []*message.ChunkHash, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { + _empty := common.BigToHash(big.NewInt(0)) + return &message.BatchProof{ Proof: _empty[:], - Instance: _empty[:], - FinalPair: _empty[:], + Instances: _empty[:], + Vk: _empty[:], }, nil } diff --git a/prover/core/prover.go b/prover/core/prover.go index 788d569907..5be20d0875 100644 --- a/prover/core/prover.go +++ b/prover/core/prover.go @@ -12,7 +12,7 @@ import "C" //nolint:typecheck import ( "encoding/json" - "github.com/pkg/errors" + "fmt" "os" "path/filepath" "unsafe" @@ -54,10 +54,10 @@ func NewProverCore(cfg *config.ProverCoreConfig) (*ProverCore, error) { return &ProverCore{cfg: cfg}, nil } -// BatchProve call rust ffi to generate batch proof, if first failed, try again. -func (p *ProverCore) BatchProve(taskID string, chunkHashes []*message.ChunkHash, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { +// ProveBatch call rust ffi to generate batch proof, if first failed, try again. +func (p *ProverCore) ProveBatch(taskID string, chunkHashes []*message.ChunkHash, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { if p.cfg.ProofType != message.ProofTypeBatch { - return nil, errors.Errorf("Wrong proof type in batch-prover: %d", p.cfg.ProofType) + return nil, fmt.Errorf("Wrong proof type in batch-prover: %v", p.cfg.ProofType) } chunkHashesByt, err := json.Marshal(chunkHashes) @@ -68,7 +68,7 @@ func (p *ProverCore) BatchProve(taskID string, chunkHashes []*message.ChunkHash, if err != nil { return nil, err } - proofByt := p.batchProve(chunkHashesByt, chunkProofsByt) + proofByt := p.proveBatch(chunkHashesByt, chunkProofsByt) // dump proof err = p.dumpProof(taskID, proofByt) @@ -80,17 +80,17 @@ func (p *ProverCore) BatchProve(taskID string, chunkHashes []*message.ChunkHash, return zkProof, json.Unmarshal(proofByt, zkProof) } -// ChunkProve call rust ffi to generate chunk proof, if first failed, try again. -func (p *ProverCore) ChunkProve(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { +// ProveChunk call rust ffi to generate chunk proof, if first failed, try again. +func (p *ProverCore) ProveChunk(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { if p.cfg.ProofType != message.ProofTypeChunk { - return nil, errors.Errorf("Wrong proof type in chunk-prover: %d", p.cfg.ProofType) + return nil, fmt.Errorf("Wrong proof type in chunk-prover: %v", p.cfg.ProofType) } tracesByt, err := json.Marshal(traces) if err != nil { return nil, err } - proofByt := p.chunkProve(tracesByt) + proofByt := p.proveChunk(tracesByt) // dump proof err = p.dumpProof(taskID, proofByt) @@ -114,7 +114,7 @@ func (p *ProverCore) TracesToChunkHash(traces []*types.BlockTrace) (*message.Chu return chunkHash, json.Unmarshal(chunkHashByt, chunkHash) } -func (p *ProverCore) batchProve(chunkHashesByt []byte, chunkProofsByt []byte) []byte { +func (p *ProverCore) proveBatch(chunkHashesByt []byte, chunkProofsByt []byte) []byte { chunkHashesStr := C.CString(string(chunkHashesByt)) chunkProofsStr := C.CString(string(chunkProofsByt)) @@ -131,7 +131,7 @@ func (p *ProverCore) batchProve(chunkHashesByt []byte, chunkProofsByt []byte) [] return []byte(proof) } -func (p *ProverCore) chunkProve(tracesByt []byte) []byte { +func (p *ProverCore) proveChunk(tracesByt []byte) []byte { tracesStr := C.CString(string(tracesByt)) defer func() { diff --git a/prover/core/prover_test.go b/prover/core/prover_test.go index e4c2f0cace..95dff99689 100644 --- a/prover/core/prover_test.go +++ b/prover/core/prover_test.go @@ -57,7 +57,7 @@ func TestFFI(t *testing.T) { as.NoError(err) t.Log("Generated chunk hash") - chunkProof, err := chunkProverCore.ChunkProve("test", traces) + chunkProof, err := chunkProverCore.ProveChunk("test", traces) as.NoError(err) t.Log("Generated chunk proof") @@ -80,7 +80,7 @@ func TestFFI(t *testing.T) { chunkHashes = append(chunkHashes, chunkHash) chunkProofs := make([]*message.ChunkProof, 0) chunkProofs = append(chunkProofs, chunkProof) - batchProof, err := batchProverCore.BatchProve("test", chunkHashes, chunkProofs) + batchProof, err := batchProverCore.ProveBatch("test", chunkHashes, chunkProofs) as.NoError(err) t.Log("Generated batch proof") diff --git a/prover/prover.go b/prover/prover.go index da3f55fdc7..c030ddaf81 100644 --- a/prover/prover.go +++ b/prover/prover.go @@ -253,7 +253,7 @@ func (r *Prover) chooseProve(task *store.ProvingTask) (detail *message.ProofDeta } // batch prove if r.Type() == message.ProofTypeBatch { - proof, err := r.batchProve(task) + proof, err := r.proveBatch(task) if err != nil { detail.Status = message.StatusProofError detail.Error = err.Error() @@ -264,7 +264,7 @@ func (r *Prover) chooseProve(task *store.ProvingTask) (detail *message.ProofDeta return } // chunk prove - proof, err := r.chunkProve(task) + proof, err := r.proveChunk(task) if err != nil { detail.Status = message.StatusProofError detail.Error = err.Error() @@ -275,17 +275,17 @@ func (r *Prover) chooseProve(task *store.ProvingTask) (detail *message.ProofDeta return } -func (r *Prover) chunkProve(task *store.ProvingTask) (*message.ChunkProof, error) { +func (r *Prover) proveChunk(task *store.ProvingTask) (*message.ChunkProof, error) { traces, err := r.getSortedTracesByHashes(task.Task.BlockHashes) if err != nil { log.Error("get traces failed!", "task-id", task.Task.ID, "err", err) return nil, errors.New("get traces from eth node failed") } - return r.proverCore.ChunkProve(task.Task.ID, traces) + return r.proverCore.ProveChunk(task.Task.ID, traces) } -func (r *Prover) batchProve(task *store.ProvingTask) (*message.BatchProof, error) { - return r.proverCore.BatchProve(task.Task.ID, task.Task.ChunkHashes, task.Task.SubProofs) +func (r *Prover) proveBatch(task *store.ProvingTask) (*message.BatchProof, error) { + return r.proverCore.ProveBatch(task.Task.ID, task.Task.ChunkHashes, task.Task.SubProofs) } func (r *Prover) signAndSubmitProof(msg *message.ProofDetail) { From 0007babaded2bc19e6650b3bc0d79b81cfc74ccd Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Tue, 1 Aug 2023 11:13:32 +0800 Subject: [PATCH 26/39] some renamings --- prover/prover.go | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/prover/prover.go b/prover/prover.go index c030ddaf81..dc201578f0 100644 --- a/prover/prover.go +++ b/prover/prover.go @@ -194,7 +194,7 @@ func (r *Prover) ProveLoop() { case <-r.stopChan: return default: - if err := r.prove(); err != nil { + if err := r.proveAndSubmit(); err != nil { if errors.Is(err, store.ErrEmpty) { log.Debug("get empty trace", "error", err) time.Sleep(time.Second * 3) @@ -206,7 +206,7 @@ func (r *Prover) ProveLoop() { } } -func (r *Prover) prove() error { +func (r *Prover) proveAndSubmit() error { task, err := r.stack.Peek() if err != nil { return err @@ -219,10 +219,8 @@ func (r *Prover) prove() error { return err } - log.Info("start to prove block", "task-id", task.Task.ID) - - proofMsg = r.chooseProve(task) - + log.Info("start to prove task", "task-type", task.Task.Type, "task-id", task.Task.ID) + proofMsg = r.prove(task) } else { // when the prover has more than 3 times panic, // it will omit to prove the task, submit StatusProofError and then Delete the task. @@ -245,34 +243,36 @@ func (r *Prover) prove() error { return nil } -func (r *Prover) chooseProve(task *store.ProvingTask) (detail *message.ProofDetail) { +func (r *Prover) prove(task *store.ProvingTask) (detail *message.ProofDetail) { detail = &message.ProofDetail{ ID: task.Task.ID, Type: task.Task.Type, Status: message.StatusOk, } - // batch prove - if r.Type() == message.ProofTypeBatch { + + if r.Type() == message.ProofTypeChunk { + proof, err := r.proveChunk(task) + if err != nil { + log.Error("prove chunk failed!", "task-id", task.Task.ID) + detail.Status = message.StatusProofError + detail.Error = err.Error() + return + } + detail.ChunkProof = proof + log.Info("prove chunk successfully!", "task-id", task.Task.ID) + return + } else{ proof, err := r.proveBatch(task) if err != nil { + log.Error("prove batch failed!", "task-id", task.Task.ID) detail.Status = message.StatusProofError detail.Error = err.Error() return } detail.BatchProof = proof - log.Info("batch prove block successfully!", "task-id", task.Task.ID) - return - } - // chunk prove - proof, err := r.proveChunk(task) - if err != nil { - detail.Status = message.StatusProofError - detail.Error = err.Error() + log.Info("prove batch successfully!", "task-id", task.Task.ID) return } - detail.ChunkProof = proof - log.Info("chunk prove block successfully!", "task-id", task.Task.ID) - return } func (r *Prover) proveChunk(task *store.ProvingTask) (*message.ChunkProof, error) { From 52a76c63d4d6c6ad2f3c78dca9477bc8f19f2f54 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Tue, 1 Aug 2023 11:33:40 +0800 Subject: [PATCH 27/39] improve prover/core/prover.go --- prover/core/prover.go | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/prover/core/prover.go b/prover/core/prover.go index 5be20d0875..db6b7d6878 100644 --- a/prover/core/prover.go +++ b/prover/core/prover.go @@ -54,10 +54,10 @@ func NewProverCore(cfg *config.ProverCoreConfig) (*ProverCore, error) { return &ProverCore{cfg: cfg}, nil } -// ProveBatch call rust ffi to generate batch proof, if first failed, try again. +// ProveBatch call rust ffi to generate batch proof. func (p *ProverCore) ProveBatch(taskID string, chunkHashes []*message.ChunkHash, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { if p.cfg.ProofType != message.ProofTypeBatch { - return nil, fmt.Errorf("Wrong proof type in batch-prover: %v", p.cfg.ProofType) + return nil, fmt.Errorf("prover is not a batch-prover (type: %v), but is trying to prove a batch", p.cfg.ProofType) } chunkHashesByt, err := json.Marshal(chunkHashes) @@ -70,8 +70,7 @@ func (p *ProverCore) ProveBatch(taskID string, chunkHashes []*message.ChunkHash, } proofByt := p.proveBatch(chunkHashesByt, chunkProofsByt) - // dump proof - err = p.dumpProof(taskID, proofByt) + err = p.mayDumpProof(taskID, proofByt) if err != nil { log.Error("Dump batch proof failed", "task-id", taskID, "error", err) } @@ -80,10 +79,10 @@ func (p *ProverCore) ProveBatch(taskID string, chunkHashes []*message.ChunkHash, return zkProof, json.Unmarshal(proofByt, zkProof) } -// ProveChunk call rust ffi to generate chunk proof, if first failed, try again. +// ProveChunk call rust ffi to generate chunk proof. func (p *ProverCore) ProveChunk(taskID string, traces []*types.BlockTrace) (*message.ChunkProof, error) { if p.cfg.ProofType != message.ProofTypeChunk { - return nil, fmt.Errorf("Wrong proof type in chunk-prover: %v", p.cfg.ProofType) + return nil, fmt.Errorf("prover is not a chunk-prover (type: %v), but is trying to prove a chunk", p.cfg.ProofType) } tracesByt, err := json.Marshal(traces) @@ -92,8 +91,7 @@ func (p *ProverCore) ProveChunk(taskID string, traces []*types.BlockTrace) (*mes } proofByt := p.proveChunk(tracesByt) - // dump proof - err = p.dumpProof(taskID, proofByt) + err = p.mayDumpProof(taskID, proofByt) if err != nil { log.Error("Dump chunk proof failed", "task-id", taskID, "error", err) } @@ -146,7 +144,7 @@ func (p *ProverCore) proveChunk(tracesByt []byte) []byte { return []byte(proof) } -func (p *ProverCore) dumpProof(id string, proofByt []byte) error { +func (p *ProverCore) mayDumpProof(id string, proofByt []byte) error { if p.cfg.DumpDir == "" { return nil } From b464138e79498cc977e63e14a5a67975f472b3d9 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Tue, 1 Aug 2023 15:27:14 +0800 Subject: [PATCH 28/39] improve coordinator/internal/logic/verifier/verifier_test.go --- coordinator/internal/logic/verifier/verifier_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/coordinator/internal/logic/verifier/verifier_test.go b/coordinator/internal/logic/verifier/verifier_test.go index b1df3bc32f..1aa1445825 100644 --- a/coordinator/internal/logic/verifier/verifier_test.go +++ b/coordinator/internal/logic/verifier/verifier_test.go @@ -14,7 +14,6 @@ import ( "scroll-tech/common/types/message" "scroll-tech/coordinator/internal/config" - "scroll-tech/coordinator/internal/logic/verifier" ) var ( @@ -31,7 +30,7 @@ func TestFFI(t *testing.T) { ParamsPath: *paramsPath, AssetsPath: *assetsPath, } - v, err := verifier.NewVerifier(cfg) + v, err := NewVerifier(cfg) as.NoError(err) chunkProofFile, err := os.Open(*chunkProofPath) From 51d557242050397b7e6adf1a4de1efbbce1bf408 Mon Sep 17 00:00:00 2001 From: xinran chen Date: Tue, 1 Aug 2023 17:07:23 +0800 Subject: [PATCH 29/39] add catchwind --- common/libzkp/impl/src/batch.rs | 22 ++++++++++++---------- common/libzkp/impl/src/chunk.rs | 23 +++++++++++++---------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/common/libzkp/impl/src/batch.rs b/common/libzkp/impl/src/batch.rs index 70655f5fe1..87772151c2 100644 --- a/common/libzkp/impl/src/batch.rs +++ b/common/libzkp/impl/src/batch.rs @@ -53,14 +53,16 @@ pub unsafe extern "C" fn gen_batch_proof( .zip(chunk_proofs.into_iter()) .collect(); - let proof = PROVER - .get_mut() - .unwrap() - .gen_agg_evm_proof(chunk_hashes_proofs, None, OUTPUT_DIR.as_deref()) - .unwrap(); - - let proof_bytes = serde_json::to_vec(&proof).unwrap(); - vec_to_c_char(proof_bytes) + let proof = panic::catch_unwind(|| { + PROVER + .get_mut() + .unwrap() + .gen_agg_evm_proof(chunk_hashes_proofs, None, OUTPUT_DIR.as_deref()) + .unwrap(); + + serde_json::to_vec(&proof).unwrap() + }); + proof.map_or(null(), vec_to_c_char) } /// # Safety @@ -69,8 +71,8 @@ pub unsafe extern "C" fn verify_batch_proof(proof: *const c_char) -> c_char { let proof = c_char_to_vec(proof); let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); - let verified = VERIFIER.get().unwrap().verify_agg_evm_proof(&proof); - verified as c_char + let verified = panic::catch_unwind(|| VERIFIER.get().unwrap().verify_agg_evm_proof(&proof)); + verified.unwrap_or(false) as c_char } // This function is only used for debugging on Go side. diff --git a/common/libzkp/impl/src/chunk.rs b/common/libzkp/impl/src/chunk.rs index 7a449534ee..7c65bfe037 100644 --- a/common/libzkp/impl/src/chunk.rs +++ b/common/libzkp/impl/src/chunk.rs @@ -41,14 +41,17 @@ pub unsafe extern "C" fn gen_chunk_proof(block_traces: *const c_char) -> *const let block_traces = c_char_to_vec(block_traces); let block_traces = serde_json::from_slice::>(&block_traces).unwrap(); - let proof = PROVER - .get_mut() - .unwrap() - .gen_chunk_proof(block_traces, None, OUTPUT_DIR.as_deref()) - .unwrap(); - - let proof_bytes = serde_json::to_vec(&proof).unwrap(); - vec_to_c_char(proof_bytes) + let proof = panic::catch_unwind(|| { + PROVER + .get_mut() + .unwrap() + .gen_chunk_proof(block_traces, None, OUTPUT_DIR.as_deref()) + .unwrap(); + + serde_json::to_vec(&proof).unwrap() + }); + + proof.map_or(null(), vec_to_c_char) } /// # Safety @@ -57,6 +60,6 @@ pub unsafe extern "C" fn verify_chunk_proof(proof: *const c_char) -> c_char { let proof = c_char_to_vec(proof); let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); - let verified = VERIFIER.get().unwrap().verify_chunk_proof(proof); - verified as c_char + let verified = panic::catch_unwind(|| VERIFIER.get().unwrap().verify_chunk_proof(proof)); + verified.unwrap_or(false) as c_char } From 2896ae3b7ebf2a87fc3becb45fd329ec24486067 Mon Sep 17 00:00:00 2001 From: xinran chen Date: Tue, 1 Aug 2023 17:11:03 +0800 Subject: [PATCH 30/39] add imports --- common/libzkp/impl/src/batch.rs | 2 +- common/libzkp/impl/src/chunk.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/libzkp/impl/src/batch.rs b/common/libzkp/impl/src/batch.rs index 87772151c2..38a2897d27 100644 --- a/common/libzkp/impl/src/batch.rs +++ b/common/libzkp/impl/src/batch.rs @@ -5,7 +5,7 @@ use prover::{ utils::{chunk_trace_to_witness_block, init_env_and_log}, ChunkHash, ChunkProof, Proof, }; -use std::cell::OnceCell; +use std::{cell::OnceCell, panic}; use types::eth::BlockTrace; static mut PROVER: OnceCell = OnceCell::new(); diff --git a/common/libzkp/impl/src/chunk.rs b/common/libzkp/impl/src/chunk.rs index 7c65bfe037..0edfeb6917 100644 --- a/common/libzkp/impl/src/chunk.rs +++ b/common/libzkp/impl/src/chunk.rs @@ -5,7 +5,7 @@ use prover::{ zkevm::{Prover, Verifier}, ChunkProof, }; -use std::cell::OnceCell; +use std::{cell::OnceCell, panic}; use types::eth::BlockTrace; static mut PROVER: OnceCell = OnceCell::new(); From a3f40506ac6e8ebeec565dab1606b5da25993944 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com> Date: Tue, 1 Aug 2023 17:11:35 +0800 Subject: [PATCH 31/39] TaskDetail (#695) --- .../controller/relayer/l2_relayer_test.go | 3 +- bridge/tests/rollup_test.go | 3 +- common/types/message/message.go | 34 +++++++++++-------- .../logic/collector/batch_proof_collector.go | 14 +++++--- .../logic/collector/chunk_proof_collector.go | 9 +++-- .../internal/logic/collector/collector.go | 12 ++----- .../internal/logic/verifier/verifier.go | 2 +- coordinator/test/mock_prover.go | 2 +- prover/core/mock.go | 4 +-- prover/core/prover.go | 14 ++++---- prover/prover.go | 17 ++++++---- 11 files changed, 63 insertions(+), 51 deletions(-) diff --git a/bridge/internal/controller/relayer/l2_relayer_test.go b/bridge/internal/controller/relayer/l2_relayer_test.go index 288bed50d9..0ba646c4bd 100644 --- a/bridge/internal/controller/relayer/l2_relayer_test.go +++ b/bridge/internal/controller/relayer/l2_relayer_test.go @@ -95,8 +95,7 @@ func testL2RelayerProcessCommittedBatches(t *testing.T) { err = batchOrm.UpdateRollupStatus(context.Background(), batch.Hash, types.RollupCommitted) assert.NoError(t, err) proof := &message.BatchProof{ - Proof: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, - FinalPair: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, + Proof: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, } err = batchOrm.UpdateProofByHash(context.Background(), batch.Hash, proof, 100) assert.NoError(t, err) diff --git a/bridge/tests/rollup_test.go b/bridge/tests/rollup_test.go index 8b9a0da829..46eecfac62 100644 --- a/bridge/tests/rollup_test.go +++ b/bridge/tests/rollup_test.go @@ -105,8 +105,7 @@ func testCommitBatchAndFinalizeBatch(t *testing.T) { // add dummy proof proof := &message.BatchProof{ - Proof: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, - FinalPair: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, + Proof: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, } err = batchOrm.UpdateProofByHash(context.Background(), batchHash, proof, 100) assert.NoError(t, err) diff --git a/common/types/message/message.go b/common/types/message/message.go index 2fb8f613bf..a80e2ccb53 100644 --- a/common/types/message/message.go +++ b/common/types/message/message.go @@ -202,13 +202,19 @@ func (a *ProofMsg) PublicKey() (string, error) { // TaskMsg is a wrapper type around db ProveTask type. type TaskMsg struct { - ID string `json:"id"` - Type ProofType `json:"type,omitempty"` - // For decentralization, basic provers will get block hashes from the coordinator. So that they can refer to the block hashes and fetch traces locally. Only applicable for basic provers. - BlockHashes []common.Hash `json:"block_hashes,omitempty"` - // Only applicable for aggregator provers. - ChunkHashes []*ChunkHash `json:"chunk_hashes,omitempty"` - SubProofs []*ChunkProof `json:"sub_proofs,omitempty"` + ID string `json:"id"` + Type ProofType `json:"type,omitempty"` + BatchTaskDetail *BatchTaskDetail `json:"batch_task_detail,omitempty"` + ChunkTaskDetail *ChunkTaskDetail `json:"chunk_task_detail,omitempty"` +} + +type ChunkTaskDetail struct { + BlockHashes []common.Hash `json:"block_hashes"` +} + +type BatchTaskDetail struct { + ChunkInfos []*ChunkInfo `json:"chunk_infos"` + SubProofs []*ChunkProof `json:"sub_proofs"` } // ProofDetail is the message received from provers that contains zk proof, the status of @@ -233,8 +239,8 @@ func (z *ProofDetail) Hash() ([]byte, error) { return hash[:], nil } -// ChunkHash is for chunk proof -type ChunkHash struct { +// ChunkInfo is for calculating pi_hash for chunk +type ChunkInfo struct { ChainID uint64 `json:"chain_id"` PrevStateRoot common.Hash `json:"prev_state_root"` PostStateRoot common.Hash `json:"post_state_root"` @@ -245,13 +251,13 @@ type ChunkHash struct { // ChunkProof includes the proof info that are required for chunk verification and rollup. type ChunkProof struct { - StorageTrace []byte `json:"storage_trace"` - Protocol []byte `json:"protocol"` - Proof Proof `json:"proof"` + StorageTrace []byte `json:"storage_trace"` + Protocol []byte `json:"protocol"` + ChunkProofInner ChunkProofInner `json:"proof"` } -// Proof is the zk proof detail -type Proof struct { +// ChunkProofInner is the inner chunk_poof. +type ChunkProofInner struct { Proof []byte `json:"proof"` Instances []byte `json:"instances"` Vk []byte `json:"vk"` diff --git a/coordinator/internal/logic/collector/batch_proof_collector.go b/coordinator/internal/logic/collector/batch_proof_collector.go index 368580e10c..92a0f7b15e 100644 --- a/coordinator/internal/logic/collector/batch_proof_collector.go +++ b/coordinator/internal/logic/collector/batch_proof_collector.go @@ -100,12 +100,18 @@ func (bp *BatchProofCollector) Collect(ctx context.Context) error { return transErr } -func (bp *BatchProofCollector) sendTask(ctx context.Context, taskID string) ([]*coordinatorType.ProverStatus, error) { +func (bp *BatchProofCollector) sendTask(ctx context.Context, hash string) ([]*coordinatorType.ProverStatus, error) { // get chunk proofs from db - chunkProofs, err := bp.chunkOrm.GetProofsByBatchHash(ctx, taskID) + chunkProofs, err := bp.chunkOrm.GetProofsByBatchHash(ctx, hash) if err != nil { - err = fmt.Errorf("failed to get chunk proofs for batch task id:%s err:%w ", taskID, err) + err = fmt.Errorf("failed to get chunk proofs for batch task id:%s err:%w ", hash, err) return nil, err } - return bp.BaseCollector.sendTask(message.ProofTypeBatch, taskID, nil, chunkProofs) + taskMsg := &message.TaskMsg{ + ID: hash, + Type: message.ProofTypeBatch, + ChunkTaskDetail: nil, + BatchTaskDetail: &message.BatchTaskDetail{SubProofs: chunkProofs}, + } + return bp.BaseCollector.sendTask(taskMsg) } diff --git a/coordinator/internal/logic/collector/chunk_proof_collector.go b/coordinator/internal/logic/collector/chunk_proof_collector.go index 100c1190c5..2f337dbfb9 100644 --- a/coordinator/internal/logic/collector/chunk_proof_collector.go +++ b/coordinator/internal/logic/collector/chunk_proof_collector.go @@ -112,6 +112,11 @@ func (cp *ChunkProofCollector) sendTask(ctx context.Context, hash string) ([]*co for i, wrappedBlock := range wrappedBlocks { blockHashes[i] = wrappedBlock.Header.Hash() } - - return cp.BaseCollector.sendTask(message.ProofTypeChunk, hash, blockHashes, nil) + taskMsg := &message.TaskMsg{ + ID: hash, + Type: message.ProofTypeChunk, + ChunkTaskDetail: &message.ChunkTaskDetail{BlockHashes: blockHashes}, + BatchTaskDetail: nil, + } + return cp.BaseCollector.sendTask(taskMsg) } diff --git a/coordinator/internal/logic/collector/collector.go b/coordinator/internal/logic/collector/collector.go index 3ee378f683..4eab8097c1 100644 --- a/coordinator/internal/logic/collector/collector.go +++ b/coordinator/internal/logic/collector/collector.go @@ -3,7 +3,6 @@ package collector import ( "context" - "github.com/scroll-tech/go-ethereum/common" "github.com/scroll-tech/go-ethereum/log" gethMetrics "github.com/scroll-tech/go-ethereum/metrics" "gorm.io/gorm" @@ -91,18 +90,11 @@ func (b *BaseCollector) checkAttemptsExceeded(hash string, taskType message.Proo return true } -func (b *BaseCollector) sendTask(proveType message.ProofType, hash string, blockHashes []common.Hash, subProofs []*message.ChunkProof) ([]*coordinatorType.ProverStatus, error) { - sendMsg := &message.TaskMsg{ - ID: hash, - Type: proveType, - BlockHashes: blockHashes, - SubProofs: subProofs, - } - +func (b *BaseCollector) sendTask(taskMsg *message.TaskMsg) ([]*coordinatorType.ProverStatus, error) { var err error var proverStatusList []*coordinatorType.ProverStatus for i := uint8(0); i < b.cfg.ProverManagerConfig.ProversPerSession; i++ { - proverPubKey, proverName, sendErr := provermanager.Manager.SendTask(proveType, sendMsg) + proverPubKey, proverName, sendErr := provermanager.Manager.SendTask(taskMsg.Type, taskMsg) if sendErr != nil { err = sendErr continue diff --git a/coordinator/internal/logic/verifier/verifier.go b/coordinator/internal/logic/verifier/verifier.go index ddfac73a93..03711f9a3b 100644 --- a/coordinator/internal/logic/verifier/verifier.go +++ b/coordinator/internal/logic/verifier/verifier.go @@ -76,7 +76,7 @@ func (v *Verifier) VerifyBatchProof(proof *message.BatchProof) (bool, error) { func (v *Verifier) VerifyChunkProof(proof *message.ChunkProof) (bool, error) { if v.cfg.MockMode { log.Info("Mock mode, verifier disabled") - if string(proof.Proof.Proof) == InvalidTestProof { + if string(proof.ChunkProofInner.Proof) == InvalidTestProof { return false, nil } return true, nil diff --git a/coordinator/test/mock_prover.go b/coordinator/test/mock_prover.go index 8293819285..40ee835f21 100644 --- a/coordinator/test/mock_prover.go +++ b/coordinator/test/mock_prover.go @@ -141,7 +141,7 @@ func (r *mockProver) loop(t *testing.T, client *client2.Client, proofTime time.D if proofStatus == generatedFailed { proof.Status = message.StatusProofError } else if proofStatus == verifiedFailed { - proof.ProofDetail.ChunkProof.Proof = []byte(verifier.InvalidTestProof) + proof.ProofDetail.ChunkProof.ChunkProofInner.Proof = []byte(verifier.InvalidTestProof) proof.ProofDetail.BatchProof.Proof = []byte(verifier.InvalidTestProof) } assert.NoError(t, proof.Sign(r.privKey)) diff --git a/prover/core/mock.go b/prover/core/mock.go index 5c876e99f6..5ece036b25 100644 --- a/prover/core/mock.go +++ b/prover/core/mock.go @@ -28,7 +28,7 @@ func (p *ProverCore) ProveChunk(taskID string, traces []*types.BlockTrace) (*mes return &message.ChunkProof{ StorageTrace: _empty[:], Protocol: _empty[:], - Proof: message.Proof{ + ChunkProofInner: message.ChunkProofInner{ Proof: _empty[:], Instances: _empty[:], Vk: _empty[:], @@ -36,7 +36,7 @@ func (p *ProverCore) ProveChunk(taskID string, traces []*types.BlockTrace) (*mes }, nil } -func (p *ProverCore) ProveBatch(taskID string, chunkHashes []*message.ChunkHash, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { +func (p *ProverCore) ProveBatch(taskID string, chunkHashes []*message.ChunkInfo, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { _empty := common.BigToHash(big.NewInt(0)) return &message.BatchProof{ Proof: _empty[:], diff --git a/prover/core/prover.go b/prover/core/prover.go index db6b7d6878..a67eb1ee96 100644 --- a/prover/core/prover.go +++ b/prover/core/prover.go @@ -55,12 +55,12 @@ func NewProverCore(cfg *config.ProverCoreConfig) (*ProverCore, error) { } // ProveBatch call rust ffi to generate batch proof. -func (p *ProverCore) ProveBatch(taskID string, chunkHashes []*message.ChunkHash, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { +func (p *ProverCore) ProveBatch(taskID string, chunkInfos []*message.ChunkInfo, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { if p.cfg.ProofType != message.ProofTypeBatch { return nil, fmt.Errorf("prover is not a batch-prover (type: %v), but is trying to prove a batch", p.cfg.ProofType) } - chunkHashesByt, err := json.Marshal(chunkHashes) + chunkInfosByt, err := json.Marshal(chunkInfos) if err != nil { return nil, err } @@ -68,7 +68,7 @@ func (p *ProverCore) ProveBatch(taskID string, chunkHashes []*message.ChunkHash, if err != nil { return nil, err } - proofByt := p.proveBatch(chunkHashesByt, chunkProofsByt) + proofByt := p.proveBatch(chunkInfosByt, chunkProofsByt) err = p.mayDumpProof(taskID, proofByt) if err != nil { @@ -112,17 +112,17 @@ func (p *ProverCore) TracesToChunkHash(traces []*types.BlockTrace) (*message.Chu return chunkHash, json.Unmarshal(chunkHashByt, chunkHash) } -func (p *ProverCore) proveBatch(chunkHashesByt []byte, chunkProofsByt []byte) []byte { - chunkHashesStr := C.CString(string(chunkHashesByt)) +func (p *ProverCore) proveBatch(chunkInfosByt []byte, chunkProofsByt []byte) []byte { + chunkInfosStr := C.CString(string(chunkInfosByt)) chunkProofsStr := C.CString(string(chunkProofsByt)) defer func() { - C.free(unsafe.Pointer(chunkHashesStr)) + C.free(unsafe.Pointer(chunkInfosStr)) C.free(unsafe.Pointer(chunkProofsStr)) }() log.Info("Start to create batch proof ...") - cProof := C.gen_batch_proof(chunkHashesStr, chunkProofsStr) + cProof := C.gen_batch_proof(chunkInfosStr, chunkProofsStr) log.Info("Finish creating batch proof!") proof := C.GoString(cProof) diff --git a/prover/prover.go b/prover/prover.go index dc201578f0..fb0aeb1b58 100644 --- a/prover/prover.go +++ b/prover/prover.go @@ -253,7 +253,7 @@ func (r *Prover) prove(task *store.ProvingTask) (detail *message.ProofDetail) { if r.Type() == message.ProofTypeChunk { proof, err := r.proveChunk(task) if err != nil { - log.Error("prove chunk failed!", "task-id", task.Task.ID) + log.Error("prove chunk failed!", "task-id", task.Task.ID, "err", err) detail.Status = message.StatusProofError detail.Error = err.Error() return @@ -261,10 +261,10 @@ func (r *Prover) prove(task *store.ProvingTask) (detail *message.ProofDetail) { detail.ChunkProof = proof log.Info("prove chunk successfully!", "task-id", task.Task.ID) return - } else{ + } else { proof, err := r.proveBatch(task) if err != nil { - log.Error("prove batch failed!", "task-id", task.Task.ID) + log.Error("prove batch failed!", "task-id", task.Task.ID, "err", err) detail.Status = message.StatusProofError detail.Error = err.Error() return @@ -276,16 +276,21 @@ func (r *Prover) prove(task *store.ProvingTask) (detail *message.ProofDetail) { } func (r *Prover) proveChunk(task *store.ProvingTask) (*message.ChunkProof, error) { - traces, err := r.getSortedTracesByHashes(task.Task.BlockHashes) + if task.Task.ChunkTaskDetail == nil { + return nil, errors.New("ChunkTaskDetail is empty") + } + traces, err := r.getSortedTracesByHashes(task.Task.ChunkTaskDetail.BlockHashes) if err != nil { - log.Error("get traces failed!", "task-id", task.Task.ID, "err", err) return nil, errors.New("get traces from eth node failed") } return r.proverCore.ProveChunk(task.Task.ID, traces) } func (r *Prover) proveBatch(task *store.ProvingTask) (*message.BatchProof, error) { - return r.proverCore.ProveBatch(task.Task.ID, task.Task.ChunkHashes, task.Task.SubProofs) + if task.Task.BatchTaskDetail == nil { + return nil, errors.New("BatchTaskDetail is empty") + } + return r.proverCore.ProveBatch(task.Task.ID, task.Task.BatchTaskDetail.ChunkInfos, task.Task.BatchTaskDetail.SubProofs) } func (r *Prover) signAndSubmitProof(msg *message.ProofDetail) { From 3343d2fb58a560a39720871babfae94d4b530c3b Mon Sep 17 00:00:00 2001 From: xinran chen Date: Tue, 1 Aug 2023 17:15:32 +0800 Subject: [PATCH 32/39] fix rust --- common/libzkp/impl/src/batch.rs | 8 ++++---- common/libzkp/impl/src/chunk.rs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/common/libzkp/impl/src/batch.rs b/common/libzkp/impl/src/batch.rs index 38a2897d27..8f6e3ccd13 100644 --- a/common/libzkp/impl/src/batch.rs +++ b/common/libzkp/impl/src/batch.rs @@ -5,7 +5,7 @@ use prover::{ utils::{chunk_trace_to_witness_block, init_env_and_log}, ChunkHash, ChunkProof, Proof, }; -use std::{cell::OnceCell, panic}; +use std::{cell::OnceCell, panic, ptr::null}; use types::eth::BlockTrace; static mut PROVER: OnceCell = OnceCell::new(); @@ -53,8 +53,8 @@ pub unsafe extern "C" fn gen_batch_proof( .zip(chunk_proofs.into_iter()) .collect(); - let proof = panic::catch_unwind(|| { - PROVER + let proof_result = panic::catch_unwind(|| { + let proof = PROVER .get_mut() .unwrap() .gen_agg_evm_proof(chunk_hashes_proofs, None, OUTPUT_DIR.as_deref()) @@ -62,7 +62,7 @@ pub unsafe extern "C" fn gen_batch_proof( serde_json::to_vec(&proof).unwrap() }); - proof.map_or(null(), vec_to_c_char) + proof_result.map_or(null(), vec_to_c_char) } /// # Safety diff --git a/common/libzkp/impl/src/chunk.rs b/common/libzkp/impl/src/chunk.rs index 0edfeb6917..2d576f19de 100644 --- a/common/libzkp/impl/src/chunk.rs +++ b/common/libzkp/impl/src/chunk.rs @@ -5,7 +5,7 @@ use prover::{ zkevm::{Prover, Verifier}, ChunkProof, }; -use std::{cell::OnceCell, panic}; +use std::{cell::OnceCell, panic, ptr::null}; use types::eth::BlockTrace; static mut PROVER: OnceCell = OnceCell::new(); @@ -41,8 +41,8 @@ pub unsafe extern "C" fn gen_chunk_proof(block_traces: *const c_char) -> *const let block_traces = c_char_to_vec(block_traces); let block_traces = serde_json::from_slice::>(&block_traces).unwrap(); - let proof = panic::catch_unwind(|| { - PROVER + let proof_result = panic::catch_unwind(|| { + let proof = PROVER .get_mut() .unwrap() .gen_chunk_proof(block_traces, None, OUTPUT_DIR.as_deref()) @@ -51,7 +51,7 @@ pub unsafe extern "C" fn gen_chunk_proof(block_traces: *const c_char) -> *const serde_json::to_vec(&proof).unwrap() }); - proof.map_or(null(), vec_to_c_char) + proof_result.map_or(null(), vec_to_c_char) } /// # Safety From d4a89c780abc931ee1ba5994332d0ca2232728a7 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Tue, 1 Aug 2023 17:18:17 +0800 Subject: [PATCH 33/39] Flatten `ChunkProof`. --- common/types/message/message.go | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/common/types/message/message.go b/common/types/message/message.go index a80e2ccb53..2e504b3065 100644 --- a/common/types/message/message.go +++ b/common/types/message/message.go @@ -214,7 +214,7 @@ type ChunkTaskDetail struct { type BatchTaskDetail struct { ChunkInfos []*ChunkInfo `json:"chunk_infos"` - SubProofs []*ChunkProof `json:"sub_proofs"` + SubProofs []*ChunkProof `json:"sub_proofs"` } // ProofDetail is the message received from provers that contains zk proof, the status of @@ -251,16 +251,11 @@ type ChunkInfo struct { // ChunkProof includes the proof info that are required for chunk verification and rollup. type ChunkProof struct { - StorageTrace []byte `json:"storage_trace"` - Protocol []byte `json:"protocol"` - ChunkProofInner ChunkProofInner `json:"proof"` -} - -// ChunkProofInner is the inner chunk_poof. -type ChunkProofInner struct { - Proof []byte `json:"proof"` - Instances []byte `json:"instances"` - Vk []byte `json:"vk"` + StorageTrace []byte `json:"storage_trace"` + Protocol []byte `json:"protocol"` + Proof []byte `json:"proof"` + Instances []byte `json:"instances"` + Vk []byte `json:"vk"` } // BatchProof includes the proof info that are required for batch verification and rollup. From d1397da69824c96efdeb98d03c9fc97a195dba91 Mon Sep 17 00:00:00 2001 From: Steven Gu Date: Tue, 1 Aug 2023 17:58:30 +0800 Subject: [PATCH 34/39] Rename `ChunkHash` to `ChunkInfo`. --- common/libzkp/impl/src/batch.rs | 8 ++++---- common/libzkp/interface/libzkp.h | 2 +- prover/core/mock.go | 2 +- prover/core/prover.go | 18 +++++++++--------- prover/core/prover_test.go | 8 ++++---- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/common/libzkp/impl/src/batch.rs b/common/libzkp/impl/src/batch.rs index 8f6e3ccd13..19470d4bfd 100644 --- a/common/libzkp/impl/src/batch.rs +++ b/common/libzkp/impl/src/batch.rs @@ -78,13 +78,13 @@ pub unsafe extern "C" fn verify_batch_proof(proof: *const c_char) -> c_char { // This function is only used for debugging on Go side. /// # Safety #[no_mangle] -pub unsafe extern "C" fn block_traces_to_chunk_hash(block_traces: *const c_char) -> *const c_char { +pub unsafe extern "C" fn block_traces_to_chunk_info(block_traces: *const c_char) -> *const c_char { let block_traces = c_char_to_vec(block_traces); let block_traces = serde_json::from_slice::>(&block_traces).unwrap(); let witness_block = chunk_trace_to_witness_block(block_traces).unwrap(); - let chunk_hash = ChunkHash::from_witness_block(&witness_block, false); + let chunk_info = ChunkHash::from_witness_block(&witness_block, false); - let chunk_hash_bytes = serde_json::to_vec(&chunk_hash).unwrap(); - vec_to_c_char(chunk_hash_bytes) + let chunk_info_bytes = serde_json::to_vec(&chunk_info).unwrap(); + vec_to_c_char(chunk_info_bytes) } diff --git a/common/libzkp/interface/libzkp.h b/common/libzkp/interface/libzkp.h index 81a7367f72..1e1f4d581f 100644 --- a/common/libzkp/interface/libzkp.h +++ b/common/libzkp/interface/libzkp.h @@ -8,4 +8,4 @@ void init_chunk_verifier(char* params_dir, char* assets_dir); char* gen_chunk_proof(char* block_traces); char verify_chunk_proof(char* proof); -char* block_traces_to_chunk_hash(char* block_traces); +char* block_traces_to_chunk_info(char* block_traces); diff --git a/prover/core/mock.go b/prover/core/mock.go index 5ece036b25..808bd55768 100644 --- a/prover/core/mock.go +++ b/prover/core/mock.go @@ -36,7 +36,7 @@ func (p *ProverCore) ProveChunk(taskID string, traces []*types.BlockTrace) (*mes }, nil } -func (p *ProverCore) ProveBatch(taskID string, chunkHashes []*message.ChunkInfo, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { +func (p *ProverCore) ProveBatch(taskID string, chunkInfos []*message.ChunkInfo, chunkProofs []*message.ChunkProof) (*message.BatchProof, error) { _empty := common.BigToHash(big.NewInt(0)) return &message.BatchProof{ Proof: _empty[:], diff --git a/prover/core/prover.go b/prover/core/prover.go index a67eb1ee96..13882beaed 100644 --- a/prover/core/prover.go +++ b/prover/core/prover.go @@ -100,16 +100,16 @@ func (p *ProverCore) ProveChunk(taskID string, traces []*types.BlockTrace) (*mes return zkProof, json.Unmarshal(proofByt, zkProof) } -// TracesToChunkHash convert traces to chunk hash -func (p *ProverCore) TracesToChunkHash(traces []*types.BlockTrace) (*message.ChunkHash, error) { +// TracesToChunkInfo convert traces to chunk info +func (p *ProverCore) TracesToChunkInfo(traces []*types.BlockTrace) (*message.ChunkInfo, error) { tracesByt, err := json.Marshal(traces) if err != nil { return nil, err } - chunkHashByt := p.tracesToChunkHash(tracesByt) + chunkInfoByt := p.tracesToChunkInfo(tracesByt) - chunkHash := &message.ChunkHash{} - return chunkHash, json.Unmarshal(chunkHashByt, chunkHash) + chunkInfo := &message.ChunkInfo{} + return chunkInfo, json.Unmarshal(chunkInfoByt, chunkInfo) } func (p *ProverCore) proveBatch(chunkInfosByt []byte, chunkProofsByt []byte) []byte { @@ -158,15 +158,15 @@ func (p *ProverCore) mayDumpProof(id string, proofByt []byte) error { return err } -func (p *ProverCore) tracesToChunkHash(tracesByt []byte) []byte { +func (p *ProverCore) tracesToChunkInfo(tracesByt []byte) []byte { tracesStr := C.CString(string(tracesByt)) defer func() { C.free(unsafe.Pointer(tracesStr)) }() - cChunkHash := C.block_traces_to_chunk_hash(tracesStr) + cChunkInfo := C.block_traces_to_chunk_info(tracesStr) - chunkHash := C.GoString(cChunkHash) - return []byte(chunkHash) + chunkInfo := C.GoString(cChunkInfo) + return []byte(chunkInfo) } diff --git a/prover/core/prover_test.go b/prover/core/prover_test.go index 95dff99689..8f80210953 100644 --- a/prover/core/prover_test.go +++ b/prover/core/prover_test.go @@ -53,7 +53,7 @@ func TestFFI(t *testing.T) { traces = append(traces, trace) } - chunkHash, err := chunkProverCore.TracesToChunkHash(traces) + chunkInfo, err := chunkProverCore.TracesToChunkInfo(traces) as.NoError(err) t.Log("Generated chunk hash") @@ -76,11 +76,11 @@ func TestFFI(t *testing.T) { batchProverCore, err := core.NewProverCore(batchProverConfig) as.NoError(err) - chunkHashes := make([]*message.ChunkHash, 0) - chunkHashes = append(chunkHashes, chunkHash) + chunkInfos := make([]*message.ChunkInfo, 0) + chunkInfos = append(chunkInfos, chunkInfo) chunkProofs := make([]*message.ChunkProof, 0) chunkProofs = append(chunkProofs, chunkProof) - batchProof, err := batchProverCore.ProveBatch("test", chunkHashes, chunkProofs) + batchProof, err := batchProverCore.ProveBatch("test", chunkInfos, chunkProofs) as.NoError(err) t.Log("Generated batch proof") From 9ee198bc1dcf3e055f897f859d881998dfbe8215 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com> Date: Tue, 1 Aug 2023 19:51:57 +0800 Subject: [PATCH 35/39] continue to fix (#697) --- prover/core/mock.go | 8 +++----- prover/prover.go | 10 ++++++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/prover/core/mock.go b/prover/core/mock.go index 808bd55768..6fa1240b41 100644 --- a/prover/core/mock.go +++ b/prover/core/mock.go @@ -28,11 +28,9 @@ func (p *ProverCore) ProveChunk(taskID string, traces []*types.BlockTrace) (*mes return &message.ChunkProof{ StorageTrace: _empty[:], Protocol: _empty[:], - ChunkProofInner: message.ChunkProofInner{ - Proof: _empty[:], - Instances: _empty[:], - Vk: _empty[:], - }, + Proof: _empty[:], + Instances: _empty[:], + Vk: _empty[:], }, nil } diff --git a/prover/prover.go b/prover/prover.go index fb0aeb1b58..965a4b72f0 100644 --- a/prover/prover.go +++ b/prover/prover.go @@ -250,7 +250,8 @@ func (r *Prover) prove(task *store.ProvingTask) (detail *message.ProofDetail) { Status: message.StatusOk, } - if r.Type() == message.ProofTypeChunk { + switch r.Type() { + case message.ProofTypeChunk: proof, err := r.proveChunk(task) if err != nil { log.Error("prove chunk failed!", "task-id", task.Task.ID, "err", err) @@ -261,7 +262,8 @@ func (r *Prover) prove(task *store.ProvingTask) (detail *message.ProofDetail) { detail.ChunkProof = proof log.Info("prove chunk successfully!", "task-id", task.Task.ID) return - } else { + + case message.ProofTypeBatch: proof, err := r.proveBatch(task) if err != nil { log.Error("prove batch failed!", "task-id", task.Task.ID, "err", err) @@ -272,6 +274,10 @@ func (r *Prover) prove(task *store.ProvingTask) (detail *message.ProofDetail) { detail.BatchProof = proof log.Info("prove batch successfully!", "task-id", task.Task.ID) return + + default: + log.Error("invalid task type", "task-id", task.Task.ID, "task-type", task.Task.Type) + return } } From 409ff52e1466039c8a58f248261dd6cd8119bbbc Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Tue, 1 Aug 2023 20:02:44 +0800 Subject: [PATCH 36/39] more fix more fix more fix more fix more fix more fix more fix --- common/types/message/message.go | 2 ++ common/types/message/message_test.go | 26 ++++++++++++------- .../internal/controller/api/prover_test.go | 4 +-- .../internal/logic/proof/proof_receiver.go | 10 +++++-- coordinator/internal/logic/verifier/mock.go | 12 +++++++-- .../internal/logic/verifier/verifier.go | 2 +- coordinator/test/mock_prover.go | 2 +- 7 files changed, 40 insertions(+), 18 deletions(-) diff --git a/common/types/message/message.go b/common/types/message/message.go index 2e504b3065..f121c77e50 100644 --- a/common/types/message/message.go +++ b/common/types/message/message.go @@ -208,10 +208,12 @@ type TaskMsg struct { ChunkTaskDetail *ChunkTaskDetail `json:"chunk_task_detail,omitempty"` } +// ChunkTaskDetail is a type containing ChunkTask detail. type ChunkTaskDetail struct { BlockHashes []common.Hash `json:"block_hashes"` } +// BatchTaskDetail is a type containing BatchTask detail. type BatchTaskDetail struct { ChunkInfos []*ChunkInfo `json:"chunk_infos"` SubProofs []*ChunkProof `json:"sub_proofs"` diff --git a/common/types/message/message_test.go b/common/types/message/message_test.go index 41aa187090..8fac73c0fc 100644 --- a/common/types/message/message_test.go +++ b/common/types/message/message_test.go @@ -68,9 +68,11 @@ func TestProofMessageSignVerifyPublicKey(t *testing.T) { Type: ProofTypeChunk, Status: StatusOk, ChunkProof: &ChunkProof{ - Proof: []byte("testProof"), - Instance: []byte("testInstance"), - Vk: []byte("testVk"), + StorageTrace: []byte("testStorageTrace"), + Protocol: []byte("testProtocol"), + Proof: []byte("testProof"), + Instances: []byte("testInstance"), + Vk: []byte("testVk"), }, Error: "testError", }, @@ -94,15 +96,17 @@ func TestProofDetailHash(t *testing.T) { Type: ProofTypeChunk, Status: StatusOk, ChunkProof: &ChunkProof{ - Proof: []byte("testProof"), - Instance: []byte("testInstance"), - Vk: []byte("testVk"), + StorageTrace: []byte("testStorageTrace"), + Protocol: []byte("testProtocol"), + Proof: []byte("testProof"), + Instances: []byte("testInstance"), + Vk: []byte("testVk"), }, Error: "testError", } hash, err := proofDetail.Hash() assert.NoError(t, err) - expectedHash := "f7c02bb8b9ff58a5ba61bb76a8b1fb76a023df9da2982d073d20e67f5e72df47" + expectedHash := "4165f5ab3399001002a5b8e4062914249a2deb72f6133d647b586f53e236802d" assert.Equal(t, expectedHash, hex.EncodeToString(hash)) } @@ -127,9 +131,11 @@ func TestProofMsgPublicKey(t *testing.T) { Type: ProofTypeChunk, Status: StatusOk, ChunkProof: &ChunkProof{ - Proof: []byte("testProof"), - Instance: []byte("testInstance"), - Vk: []byte("testVk"), + StorageTrace: []byte("testStorageTrace"), + Protocol: []byte("testProtocol"), + Proof: []byte("testProof"), + Instances: []byte("testInstance"), + Vk: []byte("testVk"), }, Error: "testError", }, diff --git a/coordinator/internal/controller/api/prover_test.go b/coordinator/internal/controller/api/prover_test.go index 076fa91a8e..65d30d2392 100644 --- a/coordinator/internal/controller/api/prover_test.go +++ b/coordinator/internal/controller/api/prover_test.go @@ -284,14 +284,14 @@ func TestProver_SubmitProof(t *testing.T) { var tmpVerifier *verifier.Verifier convey.Convey("verifier proof failure", t, func() { targetErr := errors.New("verify proof failure") - patchGuard.ApplyMethodFunc(tmpVerifier, "VerifyProof", func(proof *message.BatchProof) (bool, error) { + patchGuard.ApplyMethodFunc(tmpVerifier, "VerifyChunkProof", func(proof *message.ChunkProof) (bool, error) { return false, targetErr }) err1 := proverController.SubmitProof(tmpProof) assert.Nil(t, err1) }) - patchGuard.ApplyMethodFunc(tmpVerifier, "VerifyProof", func(proof *message.BatchProof) (bool, error) { + patchGuard.ApplyMethodFunc(tmpVerifier, "VerifyChunkProof", func(proof *message.ChunkProof) (bool, error) { return true, nil }) diff --git a/coordinator/internal/logic/proof/proof_receiver.go b/coordinator/internal/logic/proof/proof_receiver.go index d05478309d..d62a378b24 100644 --- a/coordinator/internal/logic/proof/proof_receiver.go +++ b/coordinator/internal/logic/proof/proof_receiver.go @@ -122,8 +122,14 @@ func (m *ZKProofReceiver) HandleZkProof(ctx context.Context, proofMsg *message.P coordinatorProofsReceivedTotalCounter.Inc(1) - // TODO: add switch case for ChunkProof & BatchProof - success, verifyErr := m.verifier.VerifyProof(proofMsg.BatchProof) + var success bool + var verifyErr error + if proofMsg.Type == message.ProofTypeChunk { + success, verifyErr = m.verifier.VerifyChunkProof(proofMsg.ChunkProof) + } else if proofMsg.Type == message.ProofTypeBatch { + success, verifyErr = m.verifier.VerifyBatchProof(proofMsg.BatchProof) + } + if verifyErr != nil || !success { if verifyErr != nil { // TODO: this is only a temp workaround for testnet, we should return err in real cases diff --git a/coordinator/internal/logic/verifier/mock.go b/coordinator/internal/logic/verifier/mock.go index c19183bc0e..f3a8eb3f51 100644 --- a/coordinator/internal/logic/verifier/mock.go +++ b/coordinator/internal/logic/verifier/mock.go @@ -18,8 +18,16 @@ func NewVerifier(_ *config.VerifierConfig) (*Verifier, error) { return &Verifier{}, nil } -// VerifyProof always return true -func (v *Verifier) VerifyProof(proof *message.BatchProof) (bool, error) { +// VerifyChunkProof return a mock verification result for a ChunkProof. +func (v *Verifier) VerifyChunkProof(proof *message.ChunkProof) (bool, error) { + if string(proof.Proof) == InvalidTestProof { + return false, nil + } + return true, nil +} + +// VerifyBatchProof return a mock verification result for a BatchProof. +func (v *Verifier) VerifyBatchProof(proof *message.BatchProof) (bool, error) { if string(proof.Proof) == InvalidTestProof { return false, nil } diff --git a/coordinator/internal/logic/verifier/verifier.go b/coordinator/internal/logic/verifier/verifier.go index 03711f9a3b..7580bb7520 100644 --- a/coordinator/internal/logic/verifier/verifier.go +++ b/coordinator/internal/logic/verifier/verifier.go @@ -76,7 +76,7 @@ func (v *Verifier) VerifyBatchProof(proof *message.BatchProof) (bool, error) { func (v *Verifier) VerifyChunkProof(proof *message.ChunkProof) (bool, error) { if v.cfg.MockMode { log.Info("Mock mode, verifier disabled") - if string(proof.ChunkProofInner.Proof) == InvalidTestProof { + if string(proof.Proof) == InvalidTestProof { return false, nil } return true, nil diff --git a/coordinator/test/mock_prover.go b/coordinator/test/mock_prover.go index 40ee835f21..8293819285 100644 --- a/coordinator/test/mock_prover.go +++ b/coordinator/test/mock_prover.go @@ -141,7 +141,7 @@ func (r *mockProver) loop(t *testing.T, client *client2.Client, proofTime time.D if proofStatus == generatedFailed { proof.Status = message.StatusProofError } else if proofStatus == verifiedFailed { - proof.ProofDetail.ChunkProof.ChunkProofInner.Proof = []byte(verifier.InvalidTestProof) + proof.ProofDetail.ChunkProof.Proof = []byte(verifier.InvalidTestProof) proof.ProofDetail.BatchProof.Proof = []byte(verifier.InvalidTestProof) } assert.NoError(t, proof.Sign(r.privKey)) From fea5768edff1ed696a487dbd022307c0f19fbea8 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com> Date: Tue, 1 Aug 2023 21:22:14 +0800 Subject: [PATCH 37/39] Update version.go --- common/version/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/version/version.go b/common/version/version.go index c268c39171..562bfc41b7 100644 --- a/common/version/version.go +++ b/common/version/version.go @@ -5,7 +5,7 @@ import ( "runtime/debug" ) -var tag = "v4.0.34" +var tag = "v4.1.0" var commit = func() string { if info, ok := debug.ReadBuildInfo(); ok { From 0fb3ba820e0c0e1472c0c7d20afd0c914d6e1788 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com> Date: Tue, 1 Aug 2023 21:23:15 +0800 Subject: [PATCH 38/39] Update version.go --- common/version/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/version/version.go b/common/version/version.go index 562bfc41b7..ea1ffd21e2 100644 --- a/common/version/version.go +++ b/common/version/version.go @@ -5,7 +5,7 @@ import ( "runtime/debug" ) -var tag = "v4.1.0" +var tag = "v4.0.35" var commit = func() string { if info, ok := debug.ReadBuildInfo(); ok { From fa899d85403192019fd49c2e4518252dc3a0d643 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com> Date: Tue, 1 Aug 2023 22:17:11 +0800 Subject: [PATCH 39/39] BatchTaskDetail (#699) --- common/types/message/message.go | 4 +-- .../logic/collector/batch_proof_collector.go | 28 +++++++++++++++++-- coordinator/internal/orm/chunk.go | 15 ++++++++++ coordinator/test/api_test.go | 1 + prover/prover.go | 2 +- 5 files changed, 44 insertions(+), 6 deletions(-) diff --git a/common/types/message/message.go b/common/types/message/message.go index f121c77e50..801629978a 100644 --- a/common/types/message/message.go +++ b/common/types/message/message.go @@ -215,8 +215,8 @@ type ChunkTaskDetail struct { // BatchTaskDetail is a type containing BatchTask detail. type BatchTaskDetail struct { - ChunkInfos []*ChunkInfo `json:"chunk_infos"` - SubProofs []*ChunkProof `json:"sub_proofs"` + ChunkInfos []*ChunkInfo `json:"chunk_infos"` + ChunkProofs []*ChunkProof `json:"chunk_proofs"` } // ProofDetail is the message received from provers that contains zk proof, the status of diff --git a/coordinator/internal/logic/collector/batch_proof_collector.go b/coordinator/internal/logic/collector/batch_proof_collector.go index 92a0f7b15e..0cbfaa5eb4 100644 --- a/coordinator/internal/logic/collector/batch_proof_collector.go +++ b/coordinator/internal/logic/collector/batch_proof_collector.go @@ -2,8 +2,10 @@ package collector import ( "context" + "encoding/json" "fmt" + "github.com/scroll-tech/go-ethereum/common" "github.com/scroll-tech/go-ethereum/log" "gorm.io/gorm" @@ -101,17 +103,37 @@ func (bp *BatchProofCollector) Collect(ctx context.Context) error { } func (bp *BatchProofCollector) sendTask(ctx context.Context, hash string) ([]*coordinatorType.ProverStatus, error) { - // get chunk proofs from db - chunkProofs, err := bp.chunkOrm.GetProofsByBatchHash(ctx, hash) + // get chunks from db + chunks, err := bp.chunkOrm.GetChunksByBatchHash(ctx, hash) if err != nil { err = fmt.Errorf("failed to get chunk proofs for batch task id:%s err:%w ", hash, err) return nil, err } + + taskDetail := &message.BatchTaskDetail{} + for _, chunk := range chunks { + chunkInfo := &message.ChunkInfo{ + ChainID: bp.cfg.L2Config.ChainID, + PrevStateRoot: common.HexToHash(chunk.ParentChunkStateRoot), + PostStateRoot: common.HexToHash(chunk.StateRoot), + WithdrawRoot: common.HexToHash(chunk.WithdrawRoot), + DataHash: common.HexToHash(chunk.Hash), + IsPadding: false, + } + taskDetail.ChunkInfos = append(taskDetail.ChunkInfos, chunkInfo) + + chunkProof := &message.ChunkProof{} + if err := json.Unmarshal(chunk.Proof, chunkProof); err != nil { + return nil, fmt.Errorf("json Unmarshal ChunkProof error: %w, chunk hash: %v", err, chunk.Hash) + } + taskDetail.ChunkProofs = append(taskDetail.ChunkProofs, chunkProof) + } + taskMsg := &message.TaskMsg{ ID: hash, Type: message.ProofTypeBatch, ChunkTaskDetail: nil, - BatchTaskDetail: &message.BatchTaskDetail{SubProofs: chunkProofs}, + BatchTaskDetail: taskDetail, } return bp.BaseCollector.sendTask(taskMsg) } diff --git a/coordinator/internal/orm/chunk.go b/coordinator/internal/orm/chunk.go index 45ad4b48cb..660848f5b2 100644 --- a/coordinator/internal/orm/chunk.go +++ b/coordinator/internal/orm/chunk.go @@ -86,6 +86,21 @@ func (o *Chunk) GetUnassignedChunks(ctx context.Context, limit int) ([]*Chunk, e return chunks, nil } +// GetChunksByBatchHash retrieves the chunks associated with a specific batch hash. +// The returned chunks are sorted in ascending order by their associated chunk index. +func (o *Chunk) GetChunksByBatchHash(ctx context.Context, batchHash string) ([]*Chunk, error) { + db := o.db.WithContext(ctx) + db = db.Model(&Chunk{}) + db = db.Where("batch_hash", batchHash) + db = db.Order("index ASC") + + var chunks []*Chunk + if err := db.Find(&chunks).Error; err != nil { + return nil, fmt.Errorf("Chunk.GetChunksByBatchHash error: %w, batch hash: %v", err, batchHash) + } + return chunks, nil +} + // GetProofsByBatchHash retrieves the proofs associated with a specific batch hash. // It returns a slice of decoded proofs (message.ChunkProof) obtained from the database. // The returned proofs are sorted in ascending order by their associated chunk index. diff --git a/coordinator/test/api_test.go b/coordinator/test/api_test.go index 21086c6da9..c18a00ef50 100644 --- a/coordinator/test/api_test.go +++ b/coordinator/test/api_test.go @@ -72,6 +72,7 @@ func setupCoordinator(t *testing.T, proversPerSession uint8, wsURL string, reset } conf := config.Config{ + L2Config: &config.L2Config{ChainID: 111}, ProverManagerConfig: &config.ProverManagerConfig{ ProversPerSession: proversPerSession, Verifier: &config.VerifierConfig{MockMode: true}, diff --git a/prover/prover.go b/prover/prover.go index 965a4b72f0..9935a3f50b 100644 --- a/prover/prover.go +++ b/prover/prover.go @@ -296,7 +296,7 @@ func (r *Prover) proveBatch(task *store.ProvingTask) (*message.BatchProof, error if task.Task.BatchTaskDetail == nil { return nil, errors.New("BatchTaskDetail is empty") } - return r.proverCore.ProveBatch(task.Task.ID, task.Task.BatchTaskDetail.ChunkInfos, task.Task.BatchTaskDetail.SubProofs) + return r.proverCore.ProveBatch(task.Task.ID, task.Task.BatchTaskDetail.ChunkInfos, task.Task.BatchTaskDetail.ChunkProofs) } func (r *Prover) signAndSubmitProof(msg *message.ProofDetail) {