From b824509773529c9586a43199f043b0bfa623015f Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 13 Jun 2024 18:00:26 +0800 Subject: [PATCH] chore(libzkp): upgrade to v0.11.1 (#1350) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: colinlyguo Co-authored-by: colin <102356659+colinlyguo@users.noreply.github.com> Co-authored-by: Péter Garamvölgyi Co-authored-by: georgehao Co-authored-by: colinlyguo Co-authored-by: Mengran Lan --- .gitignore | 2 + build/dockerfiles/coordinator-api.Dockerfile | 2 - common/libzkp/.gitignore | 4 + common/libzkp/e2e-test.sh | 44 ++ common/libzkp/impl/Cargo.lock | 503 ++++++++---------- common/libzkp/impl/Cargo.toml | 2 +- common/libzkp/impl/Makefile | 3 + common/libzkp/impl/src/batch.rs | 34 +- common/libzkp/impl/src/chunk.rs | 5 +- .../libzkp/impl/src/evm_verifier_fork_1.bin | Bin 18047 -> 0 bytes .../libzkp/impl/src/plonk_verifier_0.10.3.bin | Bin 0 -> 17126 bytes common/version/version.go | 2 +- coordinator/Makefile | 1 - .../internal/logic/verifier/verifier.go | 4 +- .../internal/logic/verifier/verifier_test.go | 2 +- prover/Cargo.lock | 21 +- prover/Cargo.toml | 2 +- 17 files changed, 316 insertions(+), 315 deletions(-) create mode 100644 common/libzkp/.gitignore create mode 100644 common/libzkp/e2e-test.sh delete mode 100644 common/libzkp/impl/src/evm_verifier_fork_1.bin create mode 100644 common/libzkp/impl/src/plonk_verifier_0.10.3.bin diff --git a/.gitignore b/.gitignore index 468aebac0..7c1a5849e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ assets/seed # Built binaries build/bin +verifier.test +core.test coverage.txt *.integration.txt diff --git a/build/dockerfiles/coordinator-api.Dockerfile b/build/dockerfiles/coordinator-api.Dockerfile index 743113cb1..2bf830d4b 100644 --- a/build/dockerfiles/coordinator-api.Dockerfile +++ b/build/dockerfiles/coordinator-api.Dockerfile @@ -13,7 +13,6 @@ RUN cargo chef cook --release --recipe-path recipe.json COPY ./common/libzkp/impl . RUN cargo build --release -RUN find ./ | grep libzktrie.so | xargs -I{} cp {} /app/target/release/ # Download Go dependencies @@ -35,7 +34,6 @@ FROM base as builder COPY . . RUN cp -r ./common/libzkp/interface ./coordinator/internal/logic/verifier/lib COPY --from=zkp-builder /app/target/release/libzkp.so ./coordinator/internal/logic/verifier/lib/ -COPY --from=zkp-builder /app/target/release/libzktrie.so ./coordinator/internal/logic/verifier/lib/ RUN cd ./coordinator && make coordinator_api_skip_libzkp && mv ./build/bin/coordinator_api /bin/coordinator_api && mv internal/logic/verifier/lib /bin/ # Pull coordinator into a second stage deploy alpine container diff --git a/common/libzkp/.gitignore b/common/libzkp/.gitignore new file mode 100644 index 000000000..a315159f5 --- /dev/null +++ b/common/libzkp/.gitignore @@ -0,0 +1,4 @@ +outputs +libzkp.so +test_zkp_test/ +*log diff --git a/common/libzkp/e2e-test.sh b/common/libzkp/e2e-test.sh new file mode 100644 index 000000000..c4dbe9c1f --- /dev/null +++ b/common/libzkp/e2e-test.sh @@ -0,0 +1,44 @@ +set -xeu +set -o pipefail + +export CHAIN_ID=534352 +export RUST_BACKTRACE=full +export RUST_LOG=debug +export RUST_MIN_STACK=100000000 +export PROVER_OUTPUT_DIR=test_zkp_test +#export LD_LIBRARY_PATH=/:/usr/local/cuda/lib64 + +mkdir -p $PROVER_OUTPUT_DIR + +REPO=$(realpath ../..) + +function build_test_bins() { + cd impl + cargo build --release + ln -f -s $(realpath target/release/libzkp.so) $REPO/prover/core/lib + ln -f -s $(realpath target/release/libzkp.so) $REPO/coordinator/internal/logic/verifier/lib + cd $REPO/prover + go test -tags="gpu ffi" -timeout 0 -c core/prover_test.go + cd $REPO/coordinator + go test -tags="gpu ffi" -timeout 0 -c ./internal/logic/verifier + cd $REPO/common/libzkp +} + +function build_test_bins_old() { + cd $REPO + cd prover + make libzkp + go test -tags="gpu ffi" -timeout 0 -c core/prover_test.go + cd .. + cd coordinator + make libzkp + go test -tags="gpu ffi" -timeout 0 -c ./internal/logic/verifier + cd .. + cd common/libzkp +} + +build_test_bins +#rm -rf test_zkp_test/* +#rm -rf prover.log verifier.log +#$REPO/prover/core.test -test.v 2>&1 | tee prover.log +$REPO/coordinator/verifier.test -test.v 2>&1 | tee verifier.log diff --git a/common/libzkp/impl/Cargo.lock b/common/libzkp/impl/Cargo.lock index 0fbeddd53..35b3714ab 100644 --- a/common/libzkp/impl/Cargo.lock +++ b/common/libzkp/impl/Cargo.lock @@ -30,14 +30,18 @@ dependencies = [ [[package]] name = "aggregator" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.10.3#5776400eca902bf9a69306a07ea62ca6300dff76" +version = "0.11.0" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "ark-std 0.3.0", + "bitstream-io", "c-kzg", + "ctor", + "encoder", "env_logger 0.10.0", "eth-types", "ethers-core", + "gadgets", "halo2-base", "halo2-ecc", "halo2_proofs", @@ -48,11 +52,13 @@ dependencies = [ "once_cell", "rand", "revm-precompile", - "revm-primitives 3.1.0", + "revm-primitives", "serde", "serde_json", "snark-verifier", "snark-verifier-sdk", + "strum 0.25.0", + "strum_macros 0.25.3", "zkevm-circuits", ] @@ -84,18 +90,18 @@ checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" [[package]] name = "alloy-primitives" -version = "0.6.4" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "600d34d8de81e23b6d909c094e23b3d357e01ca36b78a8c5424c501eedbe86f0" +checksum = "db8aa973e647ec336810a9356af8aea787249c9d00b1525359f3db29a68d231b" dependencies = [ "alloy-rlp", "bytes", "cfg-if 1.0.0", "const-hex", "derive_more", - "hex-literal 0.4.1", + "hex-literal", "itoa", - "k256 0.13.1", + "k256", "keccak-asm", "proptest", "rand", @@ -316,6 +322,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "aurora-engine-modexp" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aef7712851e524f35fbbb74fa6599c5cd8692056a1c36f9ca0d2001b670e7e5" +dependencies = [ + "hex", + "num", +] + [[package]] name = "auto_impl" version = "1.2.0" @@ -348,12 +364,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - [[package]] name = "base16ct" version = "0.2.0" @@ -420,6 +430,12 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +[[package]] +name = "bitstream-io" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c12d1856e42f0d817a835fe55853957c85c8c8a470114029143d3f12671446e" + [[package]] name = "bitvec" version = "1.0.1" @@ -482,8 +498,8 @@ name = "bls12_381" version = "0.8.0" source = "git+https://github.com/scroll-tech/bls12_381?branch=feat/impl_scalar_field#2c515f73a2462fef8681c8e884edf1710f52b22a" dependencies = [ - "ff 0.13.0", - "group 0.13.0", + "ff", + "group", "pairing", "pasta_curves", "rand_core", @@ -520,13 +536,14 @@ checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "bus-mapping" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.10.3#5776400eca902bf9a69306a07ea62ca6300dff76" +version = "0.11.0" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "eth-types", "ethers-core", "ethers-providers", "ethers-signers", + "external-tracer", "gadgets", "halo2_proofs", "hex", @@ -535,7 +552,7 @@ dependencies = [ "mock", "mpt-zktrie", "num", - "poseidon-circuit 0.1.0 (git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main)", + "poseidon-circuit", "rand", "revm-precompile", "serde", @@ -567,9 +584,9 @@ dependencies = [ [[package]] name = "c-kzg" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3130f3d8717cc02e668a896af24984d5d5d4e8bf12e278e982e0f1bd88a0f9af" +checksum = "cdf100c4cea8f207e883ff91ca886d621d8a166cb04971dfaa9bb8fd99ed95df" dependencies = [ "blst", "cc", @@ -584,6 +601,10 @@ name = "cc" version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" +dependencies = [ + "jobserver", + "libc", +] [[package]] name = "cfg-if" @@ -632,7 +653,7 @@ dependencies = [ "coins-core", "digest 0.10.7", "hmac", - "k256 0.13.1", + "k256", "serde", "sha2", "thiserror", @@ -793,18 +814,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" -[[package]] -name = "crypto-bigint" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" -dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", -] - [[package]] name = "crypto-bigint" version = "0.5.3" @@ -827,6 +836,16 @@ dependencies = [ "typenum", ] +[[package]] +name = "ctor" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ctr" version = "0.9.2" @@ -877,15 +896,6 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" -[[package]] -name = "der" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" -dependencies = [ - "const-oid", -] - [[package]] name = "der" version = "0.7.8" @@ -953,29 +963,17 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" -[[package]] -name = "ecdsa" -version = "0.14.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" -dependencies = [ - "der 0.6.1", - "elliptic-curve 0.12.3", - "rfc6979 0.3.1", - "signature 1.6.4", -] - [[package]] name = "ecdsa" version = "0.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" dependencies = [ - "der 0.7.8", + "der", "digest 0.10.7", - "elliptic-curve 0.13.5", - "rfc6979 0.4.0", - "signature 2.1.0", + "elliptic-curve", + "rfc6979", + "signature", "spki", ] @@ -987,40 +985,29 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" -version = "0.12.3" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ - "base16ct 0.1.1", - "crypto-bigint 0.4.9", - "der 0.6.1", + "base16ct", + "crypto-bigint", "digest 0.10.7", - "ff 0.12.1", + "ff", "generic-array", - "group 0.12.1", + "group", + "pkcs8", "rand_core", - "sec1 0.3.0", + "sec1", "subtle", "zeroize", ] [[package]] -name = "elliptic-curve" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" +name = "encoder" +version = "0.1.0" +source = "git+https://github.com/scroll-tech/da-codec.git?tag=v0.1.0#5a28b752d4504bf0966734fe4a6a5433981c74c2" dependencies = [ - "base16ct 0.2.0", - "crypto-bigint 0.5.3", - "digest 0.10.7", - "ff 0.13.0", - "generic-array", - "group 0.13.0", - "pkcs8", - "rand_core", - "sec1 0.7.3", - "subtle", - "zeroize", + "zstd", ] [[package]] @@ -1041,7 +1028,7 @@ dependencies = [ "base64 0.13.1", "bytes", "hex", - "k256 0.13.1", + "k256", "log", "rand", "rlp", @@ -1138,22 +1125,25 @@ dependencies = [ [[package]] name = "eth-types" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.10.3#5776400eca902bf9a69306a07ea62ca6300dff76" +version = "0.11.0" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "base64 0.13.1", "ethers-core", "ethers-signers", - "halo2-base", - "halo2_proofs", + "halo2curves", "hex", "itertools 0.11.0", + "log", "num", "num-bigint", - "poseidon-circuit 0.1.0 (git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main)", + "poseidon-base", "regex", + "revm-precompile", + "revm-primitives", "serde", "serde_json", + "serde_stacker", "serde_with", "sha3 0.10.8", "strum 0.25.0", @@ -1218,11 +1208,11 @@ dependencies = [ "arrayvec", "bytes", "chrono", - "elliptic-curve 0.13.5", + "elliptic-curve", "ethabi", "generic-array", "hex", - "k256 0.13.1", + "k256", "num_enum 0.6.1", "open-fastrlp", "rand", @@ -1280,7 +1270,7 @@ dependencies = [ "async-trait", "coins-bip32", "coins-bip39", - "elliptic-curve 0.13.5", + "elliptic-curve", "eth-keystore", "ethers-core", "hex", @@ -1292,8 +1282,8 @@ dependencies = [ [[package]] name = "external-tracer" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.10.3#5776400eca902bf9a69306a07ea62ca6300dff76" +version = "0.11.0" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "eth-types", "geth-utils", @@ -1320,16 +1310,6 @@ dependencies = [ "bytes", ] -[[package]] -name = "ff" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" -dependencies = [ - "rand_core", - "subtle", -] - [[package]] name = "ff" version = "0.13.0" @@ -1484,11 +1464,12 @@ dependencies = [ [[package]] name = "gadgets" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.10.3#5776400eca902bf9a69306a07ea62ca6300dff76" +version = "0.11.0" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "eth-types", "halo2_proofs", + "poseidon-base", "sha3 0.10.8", "strum 0.25.0", ] @@ -1506,8 +1487,8 @@ dependencies = [ [[package]] name = "geth-utils" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.10.3#5776400eca902bf9a69306a07ea62ca6300dff76" +version = "0.11.0" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "env_logger 0.10.0", "gobuild", @@ -1579,24 +1560,13 @@ dependencies = [ "cc", ] -[[package]] -name = "group" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" -dependencies = [ - "ff 0.12.1", - "rand_core", - "subtle", -] - [[package]] name = "group" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "ff 0.13.0", + "ff", "rand_core", "subtle", ] @@ -1625,7 +1595,7 @@ name = "halo2-base" version = "0.2.2" source = "git+https://github.com/scroll-tech/halo2-lib?branch=develop#817cace374a9f4b2eca682b1cc36f143255ea25f" dependencies = [ - "ff 0.13.0", + "ff", "halo2_proofs", "itertools 0.10.5", "num-bigint", @@ -1640,8 +1610,8 @@ name = "halo2-ecc" version = "0.2.2" source = "git+https://github.com/scroll-tech/halo2-lib?branch=develop#817cace374a9f4b2eca682b1cc36f143255ea25f" dependencies = [ - "ff 0.13.0", - "group 0.13.0", + "ff", + "group", "halo2-base", "itertools 0.10.5", "num-bigint", @@ -1673,9 +1643,8 @@ dependencies = [ [[package]] name = "halo2-mpt-circuits" version = "0.1.0" -source = "git+https://github.com/scroll-tech/mpt-circuit.git?branch=v0.7#db07d50418d681893ac6b1ed1b1f9237d3b9fd15" +source = "git+https://github.com/scroll-tech/mpt-circuit.git?branch=v0.7#daa3a06e2e96d00337188280ac43fa879e722804" dependencies = [ - "env_logger 0.10.0", "ethers-core", "halo2_proofs", "hex", @@ -1684,7 +1653,7 @@ dependencies = [ "log", "num-bigint", "num-traits", - "poseidon-circuit 0.1.0 (git+https://github.com/scroll-tech/poseidon-circuit.git?branch=scroll-dev-1201)", + "poseidon-circuit", "rand", "rand_chacha", "serde", @@ -1697,12 +1666,12 @@ dependencies = [ [[package]] name = "halo2_gadgets" version = "1.1.0" -source = "git+https://github.com/scroll-tech/halo2.git?branch=v1.1#7179a60e4b4b1dafff084deac7b4bea235eecf5f" +source = "git+https://github.com/scroll-tech/halo2.git?branch=v1.1#e5ddf67e5ae16be38d6368ed355c7c41906272ab" dependencies = [ "arrayvec", "bitvec", - "ff 0.13.0", - "group 0.13.0", + "ff", + "group", "halo2_proofs", "halo2curves", "lazy_static", @@ -1714,14 +1683,14 @@ dependencies = [ [[package]] name = "halo2_proofs" version = "1.1.0" -source = "git+https://github.com/scroll-tech/halo2.git?branch=v1.1#7179a60e4b4b1dafff084deac7b4bea235eecf5f" +source = "git+https://github.com/scroll-tech/halo2.git?branch=v1.1#e5ddf67e5ae16be38d6368ed355c7c41906272ab" dependencies = [ "ark-std 0.3.0", "blake2b_simd", "cfg-if 0.1.10", "crossbeam", - "ff 0.13.0", - "group 0.13.0", + "ff", + "group", "halo2curves", "log", "maybe-rayon", @@ -1743,8 +1712,8 @@ source = "git+https://github.com/scroll-tech/halo2curves?branch=v0.1.0#112f5b9bf dependencies = [ "blake2b_simd", "bls12_381", - "ff 0.13.0", - "group 0.13.0", + "ff", + "group", "lazy_static", "maybe-rayon", "num-bigint", @@ -1820,12 +1789,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hex-literal" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" - [[package]] name = "hex-literal" version = "0.4.1" @@ -2084,6 +2047,15 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.64" @@ -2095,29 +2067,16 @@ dependencies = [ [[package]] name = "k256" -version = "0.11.6" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if 1.0.0", - "ecdsa 0.14.8", - "elliptic-curve 0.12.3", - "sha2", - "sha3 0.10.8", -] - -[[package]] -name = "k256" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" -dependencies = [ - "cfg-if 1.0.0", - "ecdsa 0.16.8", - "elliptic-curve 0.13.5", + "ecdsa", + "elliptic-curve", "once_cell", "sha2", - "signature 2.1.0", + "signature", ] [[package]] @@ -2139,20 +2098,6 @@ dependencies = [ "sha3-asm", ] -[[package]] -name = "keccak256" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.10.3#5776400eca902bf9a69306a07ea62ca6300dff76" -dependencies = [ - "env_logger 0.10.0", - "eth-types", - "halo2_proofs", - "itertools 0.11.0", - "log", - "num-bigint", - "num-traits", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -2291,8 +2236,8 @@ dependencies = [ [[package]] name = "mock" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.10.3#5776400eca902bf9a69306a07ea62ca6300dff76" +version = "0.11.0" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "eth-types", "ethers-core", @@ -2306,16 +2251,15 @@ dependencies = [ [[package]] name = "mpt-zktrie" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.10.3#5776400eca902bf9a69306a07ea62ca6300dff76" +version = "0.11.0" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "eth-types", - "halo2-mpt-circuits", - "halo2_proofs", + "halo2curves", "hex", "log", "num-bigint", - "poseidon-circuit 0.1.0 (git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main)", + "poseidon-base", "zktrie", ] @@ -2354,6 +2298,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -2501,7 +2456,7 @@ version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" dependencies = [ - "group 0.13.0", + "group", ] [[package]] @@ -2560,8 +2515,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095" dependencies = [ "blake2b_simd", - "ff 0.13.0", - "group 0.13.0", + "ff", + "group", "lazy_static", "rand", "static_assertions", @@ -2658,10 +2613,16 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.8", + "der", "spki", ] +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + [[package]] name = "poseidon" version = "0.2.0" @@ -2672,30 +2633,24 @@ dependencies = [ ] [[package]] -name = "poseidon-circuit" +name = "poseidon-base" version = "0.1.0" -source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main#babf5f6a69bec40b2e6523df317c073dcd0b1f97" +source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main#7b96835c6201afdbfaf3d13d641efbaaf5db2d20" dependencies = [ "bitvec", - "ff 0.13.0", - "halo2_proofs", + "halo2curves", "lazy_static", - "log", - "rand", - "rand_xorshift", - "thiserror", ] [[package]] name = "poseidon-circuit" version = "0.1.0" -source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=scroll-dev-1201#c6f058bcf3bb0c7933d1979563c414f5cc480f25" +source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main#7b96835c6201afdbfaf3d13d641efbaaf5db2d20" dependencies = [ - "bitvec", - "ff 0.13.0", + "ff", "halo2_proofs", - "lazy_static", "log", + "poseidon-base", "rand", "rand_xorshift", "thiserror", @@ -2768,8 +2723,8 @@ dependencies = [ [[package]] name = "prover" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.10.3#5776400eca902bf9a69306a07ea62ca6300dff76" +version = "0.11.0" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "aggregator", "anyhow", @@ -3002,43 +2957,24 @@ dependencies = [ [[package]] name = "revm-precompile" -version = "2.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=scroll-fix#aebf2e591e622e6bcce2c5d4bf3336935a68cf11" +version = "7.0.0" +source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v36#8543dd627348907773d8057807b6a310b276bb30" dependencies = [ - "k256 0.11.6", - "num", + "aurora-engine-modexp", + "c-kzg", + "k256", "once_cell", - "revm-primitives 1.0.0", + "revm-primitives", "ripemd", - "secp256k1 0.26.0", + "secp256k1 0.29.0", "sha2", - "sha3 0.10.8", "substrate-bn", ] [[package]] name = "revm-primitives" -version = "1.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=scroll-fix#aebf2e591e622e6bcce2c5d4bf3336935a68cf11" -dependencies = [ - "auto_impl", - "bytes", - "derive_more", - "enumn", - "fixed-hash", - "hashbrown 0.13.2", - "hex", - "hex-literal 0.3.4", - "rlp", - "ruint", - "sha3 0.10.8", -] - -[[package]] -name = "revm-primitives" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "323ad597cf75ac9cb1d161be29fcc3562426f0278a1d04741697fca556e1ceea" +version = "4.0.0" +source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v36#8543dd627348907773d8057807b6a310b276bb30" dependencies = [ "alloy-primitives", "auto_impl", @@ -3049,9 +2985,11 @@ dependencies = [ "derive_more", "dyn-clone", "enumn", + "halo2curves", "hashbrown 0.14.0", "hex", "once_cell", + "poseidon-base", "serde", ] @@ -3073,17 +3011,6 @@ dependencies = [ "substrate-bn", ] -[[package]] -name = "rfc6979" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" -dependencies = [ - "crypto-bigint 0.4.9", - "hmac", - "zeroize", -] - [[package]] name = "rfc6979" version = "0.4.0" @@ -3345,27 +3272,14 @@ dependencies = [ "untrusted", ] -[[package]] -name = "sec1" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" -dependencies = [ - "base16ct 0.1.1", - "der 0.6.1", - "generic-array", - "subtle", - "zeroize", -] - [[package]] name = "sec1" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ - "base16ct 0.2.0", - "der 0.7.8", + "base16ct", + "der", "generic-array", "pkcs8", "subtle", @@ -3383,11 +3297,12 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.26.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4124a35fe33ae14259c490fd70fa199a32b9ce9502f2ee6bc4f81ec06fa65894" +checksum = "0e0cc0f1cf93f4969faf3ea1c7d8a9faed25918d96affa959720823dfe86d4f3" dependencies = [ - "secp256k1-sys 0.8.1", + "rand", + "secp256k1-sys 0.10.0", ] [[package]] @@ -3401,9 +3316,9 @@ dependencies = [ [[package]] name = "secp256k1-sys" -version = "0.8.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" +checksum = "1433bd67156263443f14d603720b082dd3121779323fce20cba2aa07b874bc1b" dependencies = [ "cc", ] @@ -3582,16 +3497,6 @@ dependencies = [ "cfg-if 1.0.0", ] -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -dependencies = [ - "digest 0.10.7", - "rand_core", -] - [[package]] name = "signature" version = "2.1.0" @@ -3620,7 +3525,7 @@ checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "snark-verifier" version = "0.1.0" -source = "git+https://github.com/scroll-tech/snark-verifier?branch=develop#114cea6cd025f7daf66b8f0038126a796653e207" +source = "git+https://github.com/scroll-tech/snark-verifier?branch=develop#fe1f8906041ad323034881fbd808908250d44829" dependencies = [ "bytes", "ethereum-types", @@ -3643,11 +3548,11 @@ dependencies = [ [[package]] name = "snark-verifier-sdk" version = "0.0.1" -source = "git+https://github.com/scroll-tech/snark-verifier?branch=develop#114cea6cd025f7daf66b8f0038126a796653e207" +source = "git+https://github.com/scroll-tech/snark-verifier?branch=develop#fe1f8906041ad323034881fbd808908250d44829" dependencies = [ "bincode", "ethereum-types", - "ff 0.13.0", + "ff", "halo2-base", "hex", "itertools 0.12.1", @@ -3685,7 +3590,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" dependencies = [ "base64ct", - "der 0.7.8", + "der", ] [[package]] @@ -3769,9 +3674,9 @@ dependencies = [ [[package]] name = "subtle" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "syn" @@ -4435,9 +4340,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] @@ -4455,8 +4360,8 @@ dependencies = [ [[package]] name = "zkevm-circuits" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.10.3#5776400eca902bf9a69306a07ea62ca6300dff76" +version = "0.11.0" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "array-init", "bus-mapping", @@ -4465,22 +4370,22 @@ dependencies = [ "eth-types", "ethers-core", "ethers-signers", - "ff 0.13.0", + "ff", "gadgets", "halo2-base", "halo2-ecc", + "halo2-mpt-circuits", "halo2_gadgets", "halo2_proofs", "hex", "itertools 0.11.0", - "keccak256", "log", "misc-precompiled-circuit", "mock", "mpt-zktrie", "num", "num-bigint", - "poseidon-circuit 0.1.0 (git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main)", + "poseidon-circuit", "rand", "rand_chacha", "rand_xorshift", @@ -4514,8 +4419,48 @@ dependencies = [ [[package]] name = "zktrie" -version = "0.2.0" -source = "git+https://github.com/scroll-tech/zktrie.git?tag=v0.7.1#a12f2f262ad3e82301e39ecdf9bfe235befc7074" +version = "0.3.0" +source = "git+https://github.com/scroll-tech/zktrie.git?branch=main#23181f209e94137f74337b150179aeb80c72e7c8" dependencies = [ "gobuild", + "zktrie_rust", +] + +[[package]] +name = "zktrie_rust" +version = "0.3.0" +source = "git+https://github.com/scroll-tech/zktrie.git?branch=main#23181f209e94137f74337b150179aeb80c72e7c8" +dependencies = [ + "hex", + "lazy_static", + "num", + "num-derive", + "num-traits", + "strum 0.24.1", + "strum_macros 0.24.3", +] + +[[package]] +name = "zstd" +version = "0.13.0" +source = "git+https://github.com/scroll-tech/zstd-rs?branch=hack/mul-block#5c0892b6567dab31394d701477183ce9d6a32aca" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.0.0" +source = "git+https://github.com/scroll-tech/zstd-rs?branch=hack/mul-block#5c0892b6567dab31394d701477183ce9d6a32aca" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.9+zstd.1.5.5" +source = "git+https://github.com/scroll-tech/zstd-rs?branch=hack/mul-block#5c0892b6567dab31394d701477183ce9d6a32aca" +dependencies = [ + "cc", + "pkg-config", ] diff --git a/common/libzkp/impl/Cargo.toml b/common/libzkp/impl/Cargo.toml index 50c05ac99..4be6a26a3 100644 --- a/common/libzkp/impl/Cargo.toml +++ b/common/libzkp/impl/Cargo.toml @@ -25,7 +25,7 @@ bls12_381 = { git = "https://github.com/scroll-tech/bls12_381", branch = "feat/i [dependencies] halo2_proofs = { git = "https://github.com/scroll-tech/halo2.git", branch = "v1.1" } snark-verifier-sdk = { git = "https://github.com/scroll-tech/snark-verifier", branch = "develop", default-features = false, features = ["loader_halo2", "loader_evm", "halo2-pse"] } -prover = { git = "https://github.com/scroll-tech/zkevm-circuits.git", tag = "v0.10.3", default-features = false, features = ["parallel_syn", "scroll", "shanghai"] } +prover = { git = "https://github.com/scroll-tech/zkevm-circuits.git", tag = "v0.11.1", default-features = false, features = ["parallel_syn", "scroll"] } base64 = "0.13.0" env_logger = "0.9.0" diff --git a/common/libzkp/impl/Makefile b/common/libzkp/impl/Makefile index 7705e3962..e7432282e 100644 --- a/common/libzkp/impl/Makefile +++ b/common/libzkp/impl/Makefile @@ -1,5 +1,8 @@ .PHONY: help fmt clippy test test-ci test-all +build: + @cargo build --release + fmt: @cargo fmt --all -- --check diff --git a/common/libzkp/impl/src/batch.rs b/common/libzkp/impl/src/batch.rs index 15307fb86..9d6a8a119 100644 --- a/common/libzkp/impl/src/batch.rs +++ b/common/libzkp/impl/src/batch.rs @@ -8,9 +8,10 @@ use crate::{ use libc::c_char; use prover::{ aggregator::{Prover, Verifier}, + check_chunk_hashes, consts::AGG_VK_FILENAME, utils::{chunk_trace_to_witness_block, init_env_and_log}, - BatchProof, BlockTrace, ChunkHash, ChunkProof, + BatchProof, BatchProvingTask, BlockTrace, ChunkInfo, ChunkProof, }; use snark_verifier_sdk::verify_evm_calldata; use std::{cell::OnceCell, env, ptr::null}; @@ -79,7 +80,7 @@ pub unsafe extern "C" fn check_chunk_proofs(chunk_proofs: *const c_char) -> *con let prover_ref = PROVER.get().expect("failed to get reference to PROVER."); - let valid = prover_ref.check_chunk_proofs(&chunk_proofs); + let valid = prover_ref.check_protocol_of_chunks(&chunk_proofs); Ok(valid) }) .unwrap_or_else(|e| Err(format!("unwind error: {e:?}"))); @@ -108,7 +109,7 @@ pub unsafe extern "C" fn gen_batch_proof( 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) + let chunk_hashes = serde_json::from_slice::>(&chunk_hashes) .map_err(|e| format!("failed to deserialize chunk hashes: {e:?}"))?; let chunk_proofs = serde_json::from_slice::>(&chunk_proofs) .map_err(|e| format!("failed to deserialize chunk proofs: {e:?}"))?; @@ -118,15 +119,19 @@ pub unsafe extern "C" fn gen_batch_proof( chunk_hashes.len(), chunk_proofs.len())); } - let chunk_hashes_proofs = chunk_hashes + let chunk_hashes_proofs: Vec<(_,_)> = chunk_hashes .into_iter() - .zip(chunk_proofs) + .zip(chunk_proofs.clone()) .collect(); + check_chunk_hashes("", &chunk_hashes_proofs).map_err(|e| format!("failed to check chunk info: {e:?}"))?; + let batch = BatchProvingTask { + chunk_proofs + }; let proof = PROVER .get_mut() .expect("failed to get mutable reference to PROVER.") - .gen_agg_evm_proof(chunk_hashes_proofs, None, OUTPUT_DIR.as_deref()) + .gen_agg_evm_proof(batch, None, OUTPUT_DIR.as_deref()) .map_err(|e| format!("failed to generate proof: {e:?}"))?; serde_json::to_vec(&proof).map_err(|e| format!("failed to serialize the proof: {e:?}")) @@ -157,19 +162,18 @@ pub unsafe extern "C" fn verify_batch_proof( let proof = serde_json::from_slice::(proof.as_slice()).unwrap(); let fork_name_str = c_char_to_str(fork_name); let fork_id = match fork_name_str { - "" => 0, - "shanghai" => 0, - "bernoulli" => 1, + "bernoulli" => 2, + "curie" => 3, _ => { - log::warn!("unexpected fork_name {fork_name_str}, treated as bernoulli"); - 1 + log::warn!("unexpected fork_name {fork_name_str}, treated as curie"); + 3 } }; let verified = panic_catch(|| { - if fork_id == 0 { - // before upgrade#2(EIP4844) + if fork_id == 2 { + // before upgrade#3(DA Compression) verify_evm_calldata( - include_bytes!("evm_verifier_fork_1.bin").to_vec(), + include_bytes!("plonk_verifier_0.10.3.bin").to_vec(), proof.calldata(), ) } else { @@ -187,7 +191,7 @@ pub unsafe extern "C" fn block_traces_to_chunk_info(block_traces: *const c_char) let block_traces = serde_json::from_slice::>(&block_traces).unwrap(); let witness_block = chunk_trace_to_witness_block(block_traces).unwrap(); - let chunk_info = ChunkHash::from_witness_block(&witness_block, false); + let chunk_info = ChunkInfo::from_witness_block(&witness_block, false); let chunk_info_bytes = serde_json::to_vec(&chunk_info).unwrap(); vec_to_c_char(chunk_info_bytes) diff --git a/common/libzkp/impl/src/chunk.rs b/common/libzkp/impl/src/chunk.rs index c55f98bb7..bbd24341d 100644 --- a/common/libzkp/impl/src/chunk.rs +++ b/common/libzkp/impl/src/chunk.rs @@ -10,7 +10,7 @@ use prover::{ consts::CHUNK_VK_FILENAME, utils::init_env_and_log, zkevm::{Prover, Verifier}, - BlockTrace, ChunkProof, + BlockTrace, ChunkProof, ChunkProvingTask, }; use std::{cell::OnceCell, env, ptr::null}; @@ -71,11 +71,12 @@ 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) .map_err(|e| format!("failed to deserialize block traces: {e:?}"))?; + let chunk = ChunkProvingTask::from(block_traces); let proof = PROVER .get_mut() .expect("failed to get mutable reference to PROVER.") - .gen_chunk_proof(block_traces, None, None, OUTPUT_DIR.as_deref()) + .gen_chunk_proof(chunk, None, None, OUTPUT_DIR.as_deref()) .map_err(|e| format!("failed to generate proof: {e:?}"))?; serde_json::to_vec(&proof).map_err(|e| format!("failed to serialize the proof: {e:?}")) diff --git a/common/libzkp/impl/src/evm_verifier_fork_1.bin b/common/libzkp/impl/src/evm_verifier_fork_1.bin deleted file mode 100644 index 6b38f5da83da78e9c2c522986b97e0e3e43093f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18047 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 F{|~v;GHL(- literal 0 HcmV?d00001 diff --git a/common/version/version.go b/common/version/version.go index 47e602ab0..01ed88660 100644 --- a/common/version/version.go +++ b/common/version/version.go @@ -5,7 +5,7 @@ import ( "runtime/debug" ) -var tag = "v4.4.16" +var tag = "v4.4.17" var commit = func() string { if info, ok := debug.ReadBuildInfo(); ok { diff --git a/coordinator/Makefile b/coordinator/Makefile index 893c51aef..5f7cde3d7 100644 --- a/coordinator/Makefile +++ b/coordinator/Makefile @@ -19,7 +19,6 @@ test: libzkp: cd ../common/libzkp/impl && cargo clean && cargo build --release && cp ./target/release/libzkp.so ../interface/ rm -rf ./internal/logic/verifier/lib && cp -r ../common/libzkp/interface ./internal/logic/verifier/lib - find ../common | grep libzktrie.so | xargs -I{} cp {} ./internal/logic/verifier/lib coordinator_api: libzkp ## Builds the Coordinator api instance. go build -ldflags "-X scroll-tech/common/version.ZkVersion=${ZK_VERSION}" -o $(PWD)/build/bin/coordinator_api ./cmd/api diff --git a/coordinator/internal/logic/verifier/verifier.go b/coordinator/internal/logic/verifier/verifier.go index c9e13a2e6..36a3d47c4 100644 --- a/coordinator/internal/logic/verifier/verifier.go +++ b/coordinator/internal/logic/verifier/verifier.go @@ -3,8 +3,8 @@ 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 +#cgo LDFLAGS: -lzkp -lm -ldl -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib +#cgo gpu LDFLAGS: -lzkp -lm -ldl -lgmp -lstdc++ -lprocps -L/usr/local/cuda/lib64/ -lcudart -L${SRCDIR}/lib/ -Wl,-rpath=${SRCDIR}/lib #include #include "./lib/libzkp.h" */ diff --git a/coordinator/internal/logic/verifier/verifier_test.go b/coordinator/internal/logic/verifier/verifier_test.go index a4e807123..0e79b9c4b 100644 --- a/coordinator/internal/logic/verifier/verifier_test.go +++ b/coordinator/internal/logic/verifier/verifier_test.go @@ -49,7 +49,7 @@ func TestFFI(t *testing.T) { t.Log("Verified chunk proof 2") batchProof := readBatchProof(*batchProofPath, as) - batchOk, err := v.VerifyBatchProof(batchProof, "bernoulli") + batchOk, err := v.VerifyBatchProof(batchProof, "curie") as.NoError(err) as.True(batchOk) t.Log("Verified batch proof") diff --git a/prover/Cargo.lock b/prover/Cargo.lock index aa6889b43..5e25b95c6 100644 --- a/prover/Cargo.lock +++ b/prover/Cargo.lock @@ -59,7 +59,7 @@ dependencies = [ [[package]] name = "aggregator" version = "0.11.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.0#6c9401171c82a01a78814e97f2c89e176ac16d52" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "ark-std 0.3.0", "bitstream-io", @@ -661,7 +661,7 @@ dependencies = [ [[package]] name = "bus-mapping" version = "0.11.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.0#6c9401171c82a01a78814e97f2c89e176ac16d52" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "eth-types 0.11.0", "ethers-core 2.0.7 (git+https://github.com/scroll-tech/ethers-rs.git?branch=v2.0.7)", @@ -1381,7 +1381,7 @@ dependencies = [ [[package]] name = "eth-types" version = "0.11.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.0#6c9401171c82a01a78814e97f2c89e176ac16d52" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "base64 0.13.1", "ethers-core 2.0.7 (git+https://github.com/scroll-tech/ethers-rs.git?branch=v2.0.7)", @@ -1615,7 +1615,7 @@ dependencies = [ [[package]] name = "external-tracer" version = "0.11.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.0#6c9401171c82a01a78814e97f2c89e176ac16d52" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "eth-types 0.11.0", "geth-utils 0.11.0", @@ -1853,10 +1853,11 @@ dependencies = [ [[package]] name = "gadgets" version = "0.11.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.0#6c9401171c82a01a78814e97f2c89e176ac16d52" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "eth-types 0.11.0", "halo2_proofs", + "poseidon-base", "sha3 0.10.8", "strum 0.25.0", ] @@ -1885,7 +1886,7 @@ dependencies = [ [[package]] name = "geth-utils" version = "0.11.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.0#6c9401171c82a01a78814e97f2c89e176ac16d52" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "env_logger 0.10.2", "gobuild", @@ -2784,7 +2785,7 @@ dependencies = [ [[package]] name = "mock" version = "0.11.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.0#6c9401171c82a01a78814e97f2c89e176ac16d52" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "eth-types 0.11.0", "ethers-core 2.0.7 (git+https://github.com/scroll-tech/ethers-rs.git?branch=v2.0.7)", @@ -2814,7 +2815,7 @@ dependencies = [ [[package]] name = "mpt-zktrie" version = "0.11.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.0#6c9401171c82a01a78814e97f2c89e176ac16d52" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "eth-types 0.11.0", "halo2curves", @@ -3439,7 +3440,7 @@ dependencies = [ [[package]] name = "prover" version = "0.11.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.0#6c9401171c82a01a78814e97f2c89e176ac16d52" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "aggregator 0.11.0", "anyhow", @@ -5583,7 +5584,7 @@ dependencies = [ [[package]] name = "zkevm-circuits" version = "0.11.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.0#6c9401171c82a01a78814e97f2c89e176ac16d52" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?tag=v0.11.1#512996f1bac1218c93d9d3de49d7b86f52726c27" dependencies = [ "array-init", "bus-mapping 0.11.0", diff --git a/prover/Cargo.toml b/prover/Cargo.toml index 530d3635c..d681d0dbd 100644 --- a/prover/Cargo.toml +++ b/prover/Cargo.toml @@ -30,7 +30,7 @@ ethers-providers = { git = "https://github.com/scroll-tech/ethers-rs.git", branc halo2_proofs = { git = "https://github.com/scroll-tech/halo2.git", branch = "v1.1" } snark-verifier-sdk = { git = "https://github.com/scroll-tech/snark-verifier", branch = "develop", default-features = false, features = ["loader_halo2", "loader_evm", "halo2-pse"] } prover = { git = "https://github.com/scroll-tech/zkevm-circuits.git", branch = "v0.10", default-features = false, features = ["parallel_syn", "scroll", "shanghai"] } -prover_next = { git = "https://github.com/scroll-tech/zkevm-circuits.git", tag = "v0.11.0", package = "prover", default-features = false, features = ["parallel_syn", "scroll"] } +prover_next = { git = "https://github.com/scroll-tech/zkevm-circuits.git", tag = "v0.11.1", package = "prover", default-features = false, features = ["parallel_syn", "scroll"] } base64 = "0.13.1" reqwest = { version = "0.12.4", features = ["gzip"] } reqwest-middleware = "0.3"