From 0ca571054df28b97aa7688ffcd1d524aac2597dc Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Tue, 27 Jun 2023 21:54:45 +0800 Subject: [PATCH] switch to latest develop + new mpt circuit (#151) * build but fail to mock prove * upgrade traces * update * upgrade snark verifier * it works * update deps * misc fix --- Cargo.lock | 72 +++++++++++------------- Cargo.toml | 3 - prover/.gitignore | 2 +- prover/Cargo.toml | 6 +- prover/src/test_util.rs | 16 +++--- prover/src/zkevm/circuit/builder.rs | 5 +- prover/src/zkevm/prover/evm.rs | 4 +- prover/src/zkevm/prover/inner_circuit.rs | 2 +- prover/src/zkevm/prover/outer_circuit.rs | 4 +- prover/src/zkevm/verifier.rs | 6 +- prover/tests/aggregation_tests.rs | 2 +- prover/tests/snark_verifier_api.rs | 6 +- prover/tests/traces | 2 +- types/src/eth.rs | 6 +- 14 files changed, 63 insertions(+), 73 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3c81d00bf..0e09daba8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -398,7 +398,7 @@ checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "bus-mapping" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#6c9df1a7ecc80bd8eb71f2a182d59012c44b89b3" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#236931675f3879ca3ec87ebc421ca9bc4674cca9" dependencies = [ "eth-types", "ethers-core 0.17.0", @@ -1098,7 +1098,7 @@ dependencies = [ [[package]] name = "eth-types" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#6c9df1a7ecc80bd8eb71f2a182d59012c44b89b3" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#236931675f3879ca3ec87ebc421ca9bc4674cca9" dependencies = [ "ethers-core 0.17.0", "ethers-signers", @@ -1364,7 +1364,7 @@ dependencies = [ [[package]] name = "external-tracer" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#6c9df1a7ecc80bd8eb71f2a182d59012c44b89b3" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#236931675f3879ca3ec87ebc421ca9bc4674cca9" dependencies = [ "eth-types", "geth-utils", @@ -1593,7 +1593,7 @@ dependencies = [ [[package]] name = "gadgets" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#6c9df1a7ecc80bd8eb71f2a182d59012c44b89b3" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#236931675f3879ca3ec87ebc421ca9bc4674cca9" dependencies = [ "digest 0.7.6", "eth-types", @@ -1633,10 +1633,10 @@ dependencies = [ [[package]] name = "geth-utils" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#6c9df1a7ecc80bd8eb71f2a182d59012c44b89b3" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#236931675f3879ca3ec87ebc421ca9bc4674cca9" dependencies = [ "env_logger 0.9.3", - "gobuild", + "gobuild 0.1.0-alpha.2 (git+https://github.com/scroll-tech/gobuild.git)", "log", ] @@ -1690,6 +1690,14 @@ 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.1" @@ -1723,12 +1731,11 @@ dependencies = [ [[package]] name = "halo2-base" version = "0.2.2" -source = "git+https://github.com/scroll-tech/halo2-lib?branch=halo2-ecc-snark-verifier-0323#d24871338ade7dd56362de517b718ba14f3e7b90" +source = "git+https://github.com/scroll-tech/halo2-lib?branch=develop#c2ea19569db5fedd85a7465ee3841f23be8e7b22" dependencies = [ "ff", "halo2_proofs", "itertools", - "jemallocator", "num-bigint", "num-integer", "num-traits", @@ -1739,7 +1746,7 @@ dependencies = [ [[package]] name = "halo2-ecc" version = "0.2.2" -source = "git+https://github.com/scroll-tech/halo2-lib?branch=halo2-ecc-snark-verifier-0323#d24871338ade7dd56362de517b718ba14f3e7b90" +source = "git+https://github.com/scroll-tech/halo2-lib?branch=develop#c2ea19569db5fedd85a7465ee3841f23be8e7b22" dependencies = [ "ff", "group", @@ -1758,16 +1765,22 @@ dependencies = [ [[package]] name = "halo2-mpt-circuits" version = "0.1.0" -source = "git+https://github.com/scroll-tech/mpt-circuit.git?branch=scroll-dev-0411#ea87f9542097f03773a3a63f7b793141689afe41" +source = "git+https://github.com/scroll-tech/mpt-circuit.git?branch=v0.4#85f6f96d1da2ddff5fb2d7cf4852b9f356b326a7" dependencies = [ + "ethers-core 0.17.0", "halo2_proofs", "hex", + "itertools", "lazy_static", + "log", "num-bigint", + "num-traits", "poseidon-circuit", "rand", "serde", "serde_json", + "strum", + "strum_macros", "thiserror", ] @@ -2176,26 +2189,6 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" -[[package]] -name = "jemalloc-sys" -version = "0.5.3+5.3.0-patched" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9bd5d616ea7ed58b571b2e209a65759664d7fb021a0819d7a790afc67e47ca1" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "jemallocator" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c2514137880c52b0b4822b563fadd38257c1f380858addb74a400889696ea6" -dependencies = [ - "jemalloc-sys", - "libc", -] - [[package]] name = "js-sys" version = "0.3.61" @@ -2230,7 +2223,7 @@ dependencies = [ [[package]] name = "keccak256" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#6c9df1a7ecc80bd8eb71f2a182d59012c44b89b3" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#236931675f3879ca3ec87ebc421ca9bc4674cca9" dependencies = [ "env_logger 0.9.3", "eth-types", @@ -2430,7 +2423,7 @@ dependencies = [ [[package]] name = "mock" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#6c9df1a7ecc80bd8eb71f2a182d59012c44b89b3" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#236931675f3879ca3ec87ebc421ca9bc4674cca9" dependencies = [ "eth-types", "ethers-core 0.17.0", @@ -2445,7 +2438,7 @@ dependencies = [ [[package]] name = "mpt-zktrie" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#6c9df1a7ecc80bd8eb71f2a182d59012c44b89b3" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#236931675f3879ca3ec87ebc421ca9bc4674cca9" dependencies = [ "bus-mapping", "eth-types", @@ -2455,6 +2448,7 @@ dependencies = [ "lazy_static", "log", "num-bigint", + "poseidon-circuit", "zktrie", ] @@ -2824,7 +2818,7 @@ dependencies = [ [[package]] name = "poseidon-circuit" version = "0.1.0" -source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=scroll-dev-0408#89e9c0456f0fa00d49cd7920c6b437c66b48db17" +source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=scroll-dev-0619#50015b7cfbd5fe3263ec683cb291396c1b99cd1f" dependencies = [ "bitvec 1.0.1", "halo2_proofs", @@ -3782,7 +3776,7 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "snark-verifier" version = "0.1.0" -source = "git+https://github.com/scroll-tech/snark-verifier?branch=halo2-ecc-snark-verifier-0323#a3d0a5ab48522bc533686da3ea8400282c91f536" +source = "git+https://github.com/scroll-tech/snark-verifier?branch=develop#a530941eb9a6151c46d5546ca818d04bbd286c02" dependencies = [ "bytes", "ethereum-types 0.14.1", @@ -3806,7 +3800,7 @@ dependencies = [ [[package]] name = "snark-verifier-sdk" version = "0.0.1" -source = "git+https://github.com/scroll-tech/snark-verifier?branch=halo2-ecc-snark-verifier-0323#a3d0a5ab48522bc533686da3ea8400282c91f536" +source = "git+https://github.com/scroll-tech/snark-verifier?branch=develop#a530941eb9a6151c46d5546ca818d04bbd286c02" dependencies = [ "bincode", "env_logger 0.10.0", @@ -4668,7 +4662,7 @@ checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" [[package]] name = "zkevm-circuits" version = "0.1.0" -source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#6c9df1a7ecc80bd8eb71f2a182d59012c44b89b3" +source = "git+https://github.com/scroll-tech/zkevm-circuits.git?branch=develop#236931675f3879ca3ec87ebc421ca9bc4674cca9" dependencies = [ "array-init", "bus-mapping", @@ -4692,10 +4686,12 @@ dependencies = [ "num", "num-bigint", "once_cell", + "poseidon-circuit", "rand", "rand_chacha", "rand_xorshift", "rayon", + "serde_json", "sha3 0.10.6", "snark-verifier", "snark-verifier-sdk", @@ -4709,5 +4705,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/Cargo.toml b/Cargo.toml index 83b21507c..d14d3648a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,9 +13,6 @@ poseidon = { git = "https://github.com/scroll-tech/poseidon.git", branch = "scro [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/axiom-crypto/halo2-lib.git"] -halo2-base = { git = "https://github.com/scroll-tech/halo2-lib", branch = "halo2-ecc-snark-verifier-0323" } -halo2-ecc = { git = "https://github.com/scroll-tech/halo2-lib", 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" } diff --git a/prover/.gitignore b/prover/.gitignore index ec021cfee..7c09c1409 100644 --- a/prover/.gitignore +++ b/prover/.gitignore @@ -15,4 +15,4 @@ Cargo.lock test_params* test_seed -output_* +*output_* diff --git a/prover/Cargo.toml b/prover/Cargo.toml index dd7d81a23..1891b1959 100644 --- a/prover/Cargo.toml +++ b/prover/Cargo.toml @@ -10,12 +10,12 @@ halo2_proofs = { git = "https://github.com/privacy-scaling-explorations/halo2.gi bus-mapping = { git = "https://github.com/scroll-tech/zkevm-circuits.git", branch = "develop" } eth-types = { git = "https://github.com/scroll-tech/zkevm-circuits.git", branch = "develop" } -zkevm-circuits = { git = "https://github.com/scroll-tech/zkevm-circuits.git", branch = "develop", default-features = false, features = ["test","scroll","poseidon-codehash-lookup"] } +zkevm-circuits = { git = "https://github.com/scroll-tech/zkevm-circuits.git", branch = "develop", default-features = false, features = ["test","scroll","scroll-trace"] } mpt-zktrie = { git = "https://github.com/scroll-tech/zkevm-circuits.git", branch = "develop" } mock = { git = "https://github.com/scroll-tech/zkevm-circuits", branch = "develop" } -snark-verifier = { git = "https://github.com/scroll-tech/snark-verifier", branch = "halo2-ecc-snark-verifier-0323" } -snark-verifier-sdk = { git = "https://github.com/scroll-tech/snark-verifier", branch = "halo2-ecc-snark-verifier-0323" } +snark-verifier = { git = "https://github.com/scroll-tech/snark-verifier", branch = "develop" } +snark-verifier-sdk = { git = "https://github.com/scroll-tech/snark-verifier", branch = "develop" } rand = "0.8" rand_xorshift = "0.3" diff --git a/prover/src/test_util.rs b/prover/src/test_util.rs index c4e47b29c..bbc59828b 100644 --- a/prover/src/test_util.rs +++ b/prover/src/test_util.rs @@ -38,14 +38,14 @@ pub fn load_batch_traces(batch_dir: &str) -> (Vec, Vec &'static str { let trace_path = match mode { "empty" => "./tests/traces/empty.json", - "greeter" => "./tests/traces/greeter_setValue.json", - "single" => "./tests/traces/erc20/erc20_1_transfer.json", - "multiple" => "./tests/traces/erc20/erc20_10_transfer.json", - "native" => "./tests/traces/native_transfer.json", - "dao" => "./tests/traces/dao/dao_dao-Propose.json", - "nft" => "./tests/traces/nft/nft_mint.json", - "sushi" => "./tests/traces/sushi/sushi_chef-withdraw.json", - _ => "./tests/traces/erc20/erc20_10_transfer.json", + "greeter" => "./tests/traces/greeter/setValue.json", + "single" => "./tests/traces/erc20/1_transfer.json", + "multiple" => "./tests/traces/erc20/10_transfer.json", + "native" => "./tests/traces/native/transfer.json", + "dao" => "./tests/traces/dao/dao-propose.json", + "nft" => "./tests/traces/nft/mint.json", + "sushi" => "./tests/traces/sushi/chef-withdraw.json", + _ => "./tests/traces/erc20/10_transfer.json", }; log::info!("using mode {:?}, testing with {:?}", mode, trace_path); trace_path diff --git a/prover/src/zkevm/circuit/builder.rs b/prover/src/zkevm/circuit/builder.rs index 8e51ece6c..3cc03d12c 100644 --- a/prover/src/zkevm/circuit/builder.rs +++ b/prover/src/zkevm/circuit/builder.rs @@ -214,9 +214,10 @@ pub fn block_traces_to_witness_block_with_updated_state( max_keccak_rows: MAX_KECCAK_ROWS, max_exp_steps: MAX_EXP_STEPS, max_mpt_rows: MAX_MPT_ROWS, + max_rlp_rows: MAX_CALLDATA, }; let mut builder_block = circuit_input_builder::Block::from_headers(&[], circuit_params); - builder_block.chain_id = chain_id; + builder_block.chain_id = chain_id.as_u64(); builder_block.prev_state_root = U256::from(zktrie_state.root()); let mut builder = CircuitInputBuilder::new(state_db.clone(), code_db, &builder_block); for (idx, block_trace) in block_traces.iter().enumerate() { @@ -228,7 +229,7 @@ pub fn block_traces_to_witness_block_with_updated_state( geth_trace.push(result.into()); } // TODO: Get the history_hashes. - let mut header = BlockHead::new(chain_id, Vec::new(), ð_block)?; + let mut header = BlockHead::new(chain_id.as_u64(), Vec::new(), ð_block)?; // override zeroed minder field with additional "coinbase" field in blocktrace if let Some(address) = block_trace.coinbase.address { header.coinbase = address; diff --git a/prover/src/zkevm/prover/evm.rs b/prover/src/zkevm/prover/evm.rs index 710871b9d..c2820855c 100644 --- a/prover/src/zkevm/prover/evm.rs +++ b/prover/src/zkevm/prover/evm.rs @@ -1,9 +1,7 @@ use super::Prover; use halo2_proofs::halo2curves::bn256::G1Affine; use halo2_proofs::plonk::VerifyingKey; -use snark_verifier_sdk::evm::gen_evm_verifier_shplonk; -use snark_verifier_sdk::halo2::aggregation::AggregationCircuit; -use snark_verifier_sdk::CircuitExt; +use snark_verifier_sdk::{gen_evm_verifier_shplonk, AggregationCircuit, CircuitExt}; use std::path::Path; impl Prover { diff --git a/prover/src/zkevm/prover/inner_circuit.rs b/prover/src/zkevm/prover/inner_circuit.rs index c87d56cc9..d61ab5d67 100644 --- a/prover/src/zkevm/prover/inner_circuit.rs +++ b/prover/src/zkevm/prover/inner_circuit.rs @@ -12,7 +12,7 @@ use halo2_proofs::halo2curves::bn256::Fr; use log::info; use rand::{Rng, SeedableRng}; use rand_xorshift::XorShiftRng; -use snark_verifier_sdk::halo2::gen_snark_shplonk; +use snark_verifier_sdk::gen_snark_shplonk; use types::eth::BlockTrace; impl Prover { diff --git a/prover/src/zkevm/prover/outer_circuit.rs b/prover/src/zkevm/prover/outer_circuit.rs index 1a2a96b01..7a86a909f 100644 --- a/prover/src/zkevm/prover/outer_circuit.rs +++ b/prover/src/zkevm/prover/outer_circuit.rs @@ -5,9 +5,7 @@ use super::{AggCircuitProof, Prover, TargetCircuitProof}; use crate::io::{serialize_fr_tensor, serialize_vk}; use rand::SeedableRng; use rand_xorshift::XorShiftRng; -use snark_verifier_sdk::evm::gen_evm_proof_shplonk; -use snark_verifier_sdk::halo2::aggregation::AggregationCircuit; -use snark_verifier_sdk::{gen_pk, CircuitExt}; +use snark_verifier_sdk::{gen_evm_proof_shplonk, gen_pk, AggregationCircuit, CircuitExt}; use types::eth::BlockTrace; impl Prover { diff --git a/prover/src/zkevm/verifier.rs b/prover/src/zkevm/verifier.rs index c9519e78e..2415ea34e 100644 --- a/prover/src/zkevm/verifier.rs +++ b/prover/src/zkevm/verifier.rs @@ -16,9 +16,9 @@ use halo2_proofs::poly::kzg::strategy::AccumulatorStrategy; use halo2_proofs::poly::VerificationStrategy; use halo2_proofs::transcript::TranscriptReadBuffer; use snark_verifier::system::halo2::transcript::evm::EvmTranscript; -use snark_verifier_sdk::evm::evm_verify; -use snark_verifier_sdk::halo2::aggregation::AggregationCircuit; -use snark_verifier_sdk::halo2::verify_snark_shplonk; +use snark_verifier_sdk::evm_verify; +use snark_verifier_sdk::verify_snark_shplonk; +use snark_verifier_sdk::AggregationCircuit; pub struct Verifier { params: ParamsKZG, diff --git a/prover/tests/aggregation_tests.rs b/prover/tests/aggregation_tests.rs index 371884e1f..9967ab4a9 100644 --- a/prover/tests/aggregation_tests.rs +++ b/prover/tests/aggregation_tests.rs @@ -5,7 +5,7 @@ use prover::zkevm::circuit::{SuperCircuit, TargetCircuit, AGG_DEGREE}; use prover::zkevm::{EvmVerifier, Prover, TargetCircuitProof}; use rand::SeedableRng; use rand_xorshift::XorShiftRng; -use snark_verifier_sdk::halo2::aggregation::AggregationCircuit; +use snark_verifier_sdk::AggregationCircuit; use snark_verifier_sdk::CircuitExt; use std::path::{Path, PathBuf}; use std::str::FromStr; diff --git a/prover/tests/snark_verifier_api.rs b/prover/tests/snark_verifier_api.rs index 2021e0765..91ae92b0b 100644 --- a/prover/tests/snark_verifier_api.rs +++ b/prover/tests/snark_verifier_api.rs @@ -6,10 +6,10 @@ use prover::utils::init_env_and_log; use prover::zkevm::{EvmVerifier, Prover, Verifier}; use rand::SeedableRng; use rand_xorshift::XorShiftRng; -use snark_verifier_sdk::evm::{evm_verify, gen_evm_proof_shplonk, gen_evm_verifier_shplonk}; -use snark_verifier_sdk::halo2::aggregation::AggregationCircuit; +use snark_verifier_sdk::AggregationCircuit; use snark_verifier_sdk::CircuitExt; -use snark_verifier_sdk::{gen_pk, halo2::gen_snark_shplonk}; +use snark_verifier_sdk::{evm_verify, gen_evm_proof_shplonk, gen_evm_verifier_shplonk}; +use snark_verifier_sdk::{gen_pk, gen_snark_shplonk}; use test_util::mock_plonk; // This is essentially a same test as snark-verifier/evm-verifier diff --git a/prover/tests/traces b/prover/tests/traces index 6764f7897..4d0450612 160000 --- a/prover/tests/traces +++ b/prover/tests/traces @@ -1 +1 @@ -Subproject commit 6764f7897b8d761deedb45708b4802e0c04f14da +Subproject commit 4d04506120511c34151e60717ef72ce1b77229b3 diff --git a/types/src/eth.rs b/types/src/eth.rs index 1c9534bc9..210e5bd33 100644 --- a/types/src/eth.rs +++ b/types/src/eth.rs @@ -126,8 +126,8 @@ pub type EthBlock = Block; #[derive(Deserialize, Serialize, Debug, Clone)] pub struct ExecutionResult { - #[serde(rename = "l1Fee", default)] - pub l1_fee: u64, + #[serde(rename = "l1DataFee", default)] + pub l1_fee: U256, pub gas: u64, pub failed: bool, #[serde(rename = "returnValue", default)] @@ -154,7 +154,7 @@ impl From<&ExecutionResult> for GethExecTrace { struct_logs.push(step) } GethExecTrace { - l1_fee: e.l1_fee, + l1_fee: e.l1_fee.as_u64(), gas: Gas(e.gas), failed: e.failed, return_value: e.return_value.clone(),