From 45a4103d7aee44651c10fd22193fc0d9b89f3b3e Mon Sep 17 00:00:00 2001 From: Velaciela Date: Fri, 26 May 2023 14:10:45 +0000 Subject: [PATCH 1/9] bk --- Cargo.lock | 157 ++++++++----------- Cargo.toml | 4 +- zkevm-circuits/src/tx_circuit/sign_verify.rs | 52 +++++- zkevm-circuits/src/tx_circuit/test.rs | 2 +- 4 files changed, 121 insertions(+), 94 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 081f43dc03..1e6288515f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,7 +14,7 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cipher", "cpufeatures", "opaque-debug 0.3.0", @@ -37,7 +37,7 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "once_cell", "version_check", ] @@ -402,7 +402,7 @@ dependencies = [ "ethers-providers", "ethers-signers", "gadgets", - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_02_02)", "hex", "itertools", "keccak256", @@ -495,12 +495,6 @@ version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.0" @@ -541,7 +535,7 @@ dependencies = [ "eth-types", "ethers", "ethers-signers", - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_02_02)", "itertools", "keccak256", "log", @@ -818,7 +812,7 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -857,27 +851,13 @@ dependencies = [ "itertools", ] -[[package]] -name = "crossbeam" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -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.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", ] @@ -887,7 +867,7 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] @@ -899,29 +879,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" dependencies = [ "autocfg", - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", "memoffset", "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.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -1214,7 +1184,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "dirs-sys-next", ] @@ -1315,7 +1285,7 @@ version = "0.8.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -1329,19 +1299,6 @@ dependencies = [ "syn 2.0.11", ] -[[package]] -name = "env_logger" -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" @@ -1417,7 +1374,7 @@ version = "0.1.0" dependencies = [ "ethers-core", "ethers-signers", - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_02_02)", "hex", "itertools", "lazy_static", @@ -1681,7 +1638,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebe5db405d0e584aa8dae154ffebb90f2305cae588fd11d9f6b857ebe3a79294" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "colored", "dunce", "ethers-core", @@ -2008,7 +1965,7 @@ version = "0.1.0" dependencies = [ "digest 0.7.6", "eth-types", - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_02_02)", "rand", "rand_xorshift", "sha3 0.7.3", @@ -2058,7 +2015,7 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", @@ -2132,7 +2089,7 @@ version = "0.2.2" source = "git+https://github.com/scroll-tech/halo2-lib?branch=halo2-ecc-snark-verifier-0323#d24871338ade7dd56362de517b718ba14f3e7b90" dependencies = [ "ff", - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_01_20)", "itertools", "num-bigint", "num-integer", @@ -2165,7 +2122,7 @@ name = "halo2-mpt-circuits" version = "0.1.0" source = "git+https://github.com/scroll-tech/mpt-circuit.git?branch=scroll-dev-0411#da63fcc93077a43f44eadb2e1eff20d66b693d8c" dependencies = [ - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2022_09_10)", "hex", "lazy_static", "num-bigint", @@ -2179,29 +2136,49 @@ dependencies = [ [[package]] name = "halo2_proofs" version = "0.2.0" -source = "git+https://github.com/scroll-tech/halo2.git?branch=v0.4#3d40ae4968759ac4516c5f9c45ad20140e2d35d5" +source = "git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2022_09_10#a9e99a72a65d7c98e8a4258c2c94269c834d1c10" dependencies = [ - "ark-std", "blake2b_simd", - "cfg-if 0.1.10", - "crossbeam", - "env_logger 0.8.4", "ff", "group", "halo2curves", - "log", - "num-bigint", - "num-integer", "plotters", - "poseidon", "rand_core", "rayon", - "sha3 0.9.1", - "subtle", "tabbycat", "tracing", ] +[[package]] +name = "halo2_proofs" +version = "0.2.0" +source = "git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_01_20#c7e42e41f8141745ba0b90213438f240d55cb347" +dependencies = [ + "blake2b_simd", + "ff", + "group", + "halo2curves", + "rand_core", + "rayon", + "sha3 0.9.1", + "tracing", +] + +[[package]] +name = "halo2_proofs" +version = "0.2.0" +source = "git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_02_02#0a8646b78286a13d320759b1c585262d6536dce4" +dependencies = [ + "blake2b_simd", + "ff", + "group", + "halo2curves", + "rand_core", + "rayon", + "sha3 0.9.1", + "tracing", +] + [[package]] name = "halo2curves" version = "0.3.1" @@ -2227,7 +2204,7 @@ version = "0.1.0" source = "git+https://github.com/scroll-tech/halo2wrong?branch=halo2-ecc-snark-verifier-0323#939d679cb16abf0e820bd606248661e400328afa" dependencies = [ "group", - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_02_02)", "num-bigint", "num-integer", "num-traits", @@ -2541,7 +2518,7 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "wasm-bindgen", "web-sys", @@ -2555,7 +2532,7 @@ dependencies = [ "env_logger 0.9.3", "eth-types", "ethers", - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_02_02)", "hex", "lazy_static", "log", @@ -2638,7 +2615,7 @@ version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "ecdsa", "elliptic-curve", "sha2 0.10.6", @@ -2660,7 +2637,7 @@ version = "0.1.0" dependencies = [ "env_logger 0.9.3", "eth-types", - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2022_09_10)", "itertools", "lazy_static", "log", @@ -2724,7 +2701,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "winapi", ] @@ -2813,7 +2790,7 @@ version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -2903,7 +2880,7 @@ dependencies = [ "env_logger 0.9.3", "eth-types", "halo2-mpt-circuits", - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_02_02)", "hex", "lazy_static", "log", @@ -3119,7 +3096,7 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "instant", "libc", "redox_syscall", @@ -3133,7 +3110,7 @@ version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "redox_syscall", "smallvec", @@ -3471,7 +3448,7 @@ version = "0.1.0" source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=scroll-dev-0408#89e9c0456f0fa00d49cd7920c6b437c66b48db17" dependencies = [ "bitvec 1.0.1", - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2022_09_10)", "lazy_static", "thiserror", ] @@ -4286,7 +4263,7 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.10.6", ] @@ -4310,7 +4287,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", @@ -4322,7 +4299,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.10.6", ] @@ -4629,7 +4606,7 @@ dependencies = [ "ethers-signers", "external-tracer", "glob", - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_02_02)", "handlebars", "hex", "keccak256", @@ -4839,7 +4816,7 @@ version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5048,7 +5025,7 @@ version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "wasm-bindgen-macro", ] @@ -5073,7 +5050,7 @@ version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "wasm-bindgen", "web-sys", @@ -5368,7 +5345,7 @@ dependencies = [ "gadgets", "halo2-base", "halo2-ecc", - "halo2_proofs", + "halo2_proofs 0.2.0 (git+https://github.com/privacy-scaling-explorations/halo2.git?tag=v2023_02_02)", "hex", "itertools", "keccak256", diff --git a/Cargo.toml b/Cargo.toml index 1919a64045..91bf259466 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,8 +14,8 @@ members = [ "testool" ] -[patch."https://github.com/privacy-scaling-explorations/halo2.git"] -halo2_proofs = { git = "https://github.com/scroll-tech/halo2.git", branch = "v0.4" } +#[patch."https://github.com/privacy-scaling-explorations/halo2.git"] +#halo2_proofs = { git = "https://github.com/scroll-tech/halo2.git", branch = "v0.4" } [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/halo2curves.git"] diff --git a/zkevm-circuits/src/tx_circuit/sign_verify.rs b/zkevm-circuits/src/tx_circuit/sign_verify.rs index 8abff4c9c9..99ba815774 100644 --- a/zkevm-circuits/src/tx_circuit/sign_verify.rs +++ b/zkevm-circuits/src/tx_circuit/sign_verify.rs @@ -725,7 +725,17 @@ impl SignVerifyChip { } let mut ctx = ecdsa_chip.new_context(region); - + // println!("region = {:?}", region.clone()); + println!("ctx.region = {:?}", ctx.region); + println!("ctx.max_rows = {:?}", ctx.max_rows); + println!("ctx.total_advice = {}", ctx.total_advice); + println!("ctx.fixed_col = {}", ctx.fixed_col); + println!("ctx.fixed_offset = {}", ctx.fixed_offset); + println!("ctx.cells_to_lookup.len() = {}", ctx.cells_to_lookup.len()); + println!("ctx.current_phase = {}", ctx.current_phase); + + + // ================================================ // step 1: assert the signature is valid in circuit // ================================================ @@ -742,6 +752,14 @@ impl SignVerifyChip { assigned_ecdsas.push(assigned_ecdsa); } + println!("ctx.region = {:?}", ctx.region); + println!("ctx.max_rows = {:?}", ctx.max_rows); + println!("ctx.total_advice = {}", ctx.total_advice); + println!("ctx.fixed_col = {}", ctx.fixed_col); + println!("ctx.fixed_offset = {}", ctx.fixed_offset); + println!("ctx.cells_to_lookup.len() = {}", ctx.cells_to_lookup.len()); + println!("ctx.current_phase = {}", ctx.current_phase); + // ================================================ // step 2: decompose the keys and messages // ================================================ @@ -753,6 +771,14 @@ impl SignVerifyChip { sign_data_decomposed_vec.push(sign_data_decomposed); } + println!("ctx.region = {:?}", ctx.region); + println!("ctx.max_rows = {:?}", ctx.max_rows); + println!("ctx.total_advice = {}", ctx.total_advice); + println!("ctx.fixed_col = {}", ctx.fixed_col); + println!("ctx.fixed_offset = {}", ctx.fixed_offset); + println!("ctx.cells_to_lookup.len() = {}", ctx.cells_to_lookup.len()); + println!("ctx.current_phase = {}", ctx.current_phase); + // IMPORTANT: Move to Phase2 before RLC log::info!("before proceeding to the next phase"); ctx.print_stats(&["Range"]); @@ -784,6 +810,14 @@ impl SignVerifyChip { deferred_keccak_check.push(to_be_keccak_checked); } + println!("ctx.region = {:?}", ctx.region); + println!("ctx.max_rows = {:?}", ctx.max_rows); + println!("ctx.total_advice = {}", ctx.total_advice); + println!("ctx.fixed_col = {}", ctx.fixed_col); + println!("ctx.fixed_offset = {}", ctx.fixed_offset); + println!("ctx.cells_to_lookup.len() = {}", ctx.cells_to_lookup.len()); + println!("ctx.current_phase = {}", ctx.current_phase); + // ================================================ // step 4: deferred keccak checks // ================================================ @@ -800,6 +834,14 @@ impl SignVerifyChip { )?; } + println!("ctx.region = {:?}", ctx.region); + println!("ctx.max_rows = {:?}", ctx.max_rows); + println!("ctx.total_advice = {}", ctx.total_advice); + println!("ctx.fixed_col = {}", ctx.fixed_col); + println!("ctx.fixed_offset = {}", ctx.fixed_offset); + println!("ctx.cells_to_lookup.len() = {}", ctx.cells_to_lookup.len()); + println!("ctx.current_phase = {}", ctx.current_phase); + // IMPORTANT: this assigns all constants to the fixed columns // IMPORTANT: this copies cells to the lookup advice column to perform range // check lookups @@ -807,6 +849,14 @@ impl SignVerifyChip { let lookup_cells = ecdsa_chip.finalize(&mut ctx); log::info!("total number of lookup cells: {}", lookup_cells); + println!("ctx.region = {:?}", ctx.region); + println!("ctx.max_rows = {:?}", ctx.max_rows); + println!("ctx.total_advice = {}", ctx.total_advice); + println!("ctx.fixed_col = {}", ctx.fixed_col); + println!("ctx.fixed_offset = {}", ctx.fixed_offset); + println!("ctx.cells_to_lookup.len() = {}", ctx.cells_to_lookup.len()); + println!("ctx.current_phase = {}", ctx.current_phase); + ctx.print_stats(&["Range"]); Ok(assigned_sig_verifs) }, diff --git a/zkevm-circuits/src/tx_circuit/test.rs b/zkevm-circuits/src/tx_circuit/test.rs index 8617e0de51..31ae4d728a 100644 --- a/zkevm-circuits/src/tx_circuit/test.rs +++ b/zkevm-circuits/src/tx_circuit/test.rs @@ -77,7 +77,7 @@ fn tx_circuit_0tx_1max_tx() { #[test] fn tx_circuit_1tx_1max_tx() { - const MAX_TXS: usize = 1; + const MAX_TXS: usize = 2; const MAX_CALLDATA: usize = 32; let chain_id: u64 = mock::MOCK_CHAIN_ID.as_u64(); From 656748a0d98922c5dca8251ee3274ad79c30f4af Mon Sep 17 00:00:00 2001 From: Velaciela Date: Tue, 30 May 2023 10:05:52 +0000 Subject: [PATCH 2/9] bk --- zkevm-circuits/src/tx_circuit/sign_verify.rs | 4 +++- zkevm-circuits/src/tx_circuit/test.rs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/zkevm-circuits/src/tx_circuit/sign_verify.rs b/zkevm-circuits/src/tx_circuit/sign_verify.rs index 99ba815774..b2ff2f6756 100644 --- a/zkevm-circuits/src/tx_circuit/sign_verify.rs +++ b/zkevm-circuits/src/tx_circuit/sign_verify.rs @@ -734,7 +734,7 @@ impl SignVerifyChip { println!("ctx.cells_to_lookup.len() = {}", ctx.cells_to_lookup.len()); println!("ctx.current_phase = {}", ctx.current_phase); - + ctx.print_stats(&["Range"]); // ================================================ // step 1: assert the signature is valid in circuit @@ -749,6 +749,8 @@ impl SignVerifyChip { SignData::default() }; let assigned_ecdsa = self.assign_ecdsa(&mut ctx, ecdsa_chip, &signature)?; + println!("ctx.total_advice[{}] = {}", i, ctx.total_advice); + ctx.print_stats(&["Range"]); assigned_ecdsas.push(assigned_ecdsa); } diff --git a/zkevm-circuits/src/tx_circuit/test.rs b/zkevm-circuits/src/tx_circuit/test.rs index 31ae4d728a..4ed30e250f 100644 --- a/zkevm-circuits/src/tx_circuit/test.rs +++ b/zkevm-circuits/src/tx_circuit/test.rs @@ -77,7 +77,7 @@ fn tx_circuit_0tx_1max_tx() { #[test] fn tx_circuit_1tx_1max_tx() { - const MAX_TXS: usize = 2; + const MAX_TXS: usize = 32; const MAX_CALLDATA: usize = 32; let chain_id: u64 = mock::MOCK_CHAIN_ID.as_u64(); From 65bc86b3bd401244d9d5dbd26d28ed6074cebaf3 Mon Sep 17 00:00:00 2001 From: Velaciela Date: Fri, 2 Jun 2023 03:52:27 +0000 Subject: [PATCH 3/9] bk --- zkevm-circuits/src/tx_circuit.rs | 1 + zkevm-circuits/src/tx_circuit/dev.rs | 11 ++++++----- zkevm-circuits/src/tx_circuit/sign_verify.rs | 1 + zkevm-circuits/src/tx_circuit/test.rs | 1 + 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/zkevm-circuits/src/tx_circuit.rs b/zkevm-circuits/src/tx_circuit.rs index 337fcb737f..9c88fa0684 100644 --- a/zkevm-circuits/src/tx_circuit.rs +++ b/zkevm-circuits/src/tx_circuit.rs @@ -1311,6 +1311,7 @@ impl TxCircuit { let min_rows = std::cmp::max(tx_table_len, SignVerifyChip::::min_num_rows(txs_len)); #[cfg(not(feature = "enable-sign-verify"))] let min_rows = tx_table_len; + println!("TxCircuit min_num_rows = {}", min_rows); min_rows } diff --git a/zkevm-circuits/src/tx_circuit/dev.rs b/zkevm-circuits/src/tx_circuit/dev.rs index 9640ebded4..a407beb53c 100644 --- a/zkevm-circuits/src/tx_circuit/dev.rs +++ b/zkevm-circuits/src/tx_circuit/dev.rs @@ -20,11 +20,11 @@ impl Circuit for TxCircuit { } fn configure(meta: &mut ConstraintSystem) -> Self::Config { - let block_table = BlockTable::construct(meta); - let tx_table = TxTable::construct(meta); - let keccak_table = KeccakTable::construct(meta); - let rlp_table = RlpTable::construct(meta); - let challenges = Challenges::construct(meta); + let block_table = BlockTable::construct(meta); println!("block_table.num_advice_columns: {}", meta.num_advice_columns); + let tx_table = TxTable::construct(meta); println!("tx_table.num_advice_columns: {}", meta.num_advice_columns); + let keccak_table = KeccakTable::construct(meta); println!("keccak_table.num_advice_columns: {}", meta.num_advice_columns); + let rlp_table = RlpTable::construct(meta); println!("rlp_table.num_advice_columns: {}", meta.num_advice_columns); + let challenges = Challenges::construct(meta); println!("challenges.num_advice_columns: {}", meta.num_advice_columns); let config = { let challenges = challenges.exprs(meta); @@ -39,6 +39,7 @@ impl Circuit for TxCircuit { }, ) }; + println!("TxCircuitConfig.num_advice_columns: {}", meta.num_advice_columns); (config, challenges) } diff --git a/zkevm-circuits/src/tx_circuit/sign_verify.rs b/zkevm-circuits/src/tx_circuit/sign_verify.rs index b2ff2f6756..46cc322bdc 100644 --- a/zkevm-circuits/src/tx_circuit/sign_verify.rs +++ b/zkevm-circuits/src/tx_circuit/sign_verify.rs @@ -750,6 +750,7 @@ impl SignVerifyChip { }; let assigned_ecdsa = self.assign_ecdsa(&mut ctx, ecdsa_chip, &signature)?; println!("ctx.total_advice[{}] = {}", i, ctx.total_advice); + println!("ctx.cells_to_lookup.len() = {}", ctx.cells_to_lookup.len()); ctx.print_stats(&["Range"]); assigned_ecdsas.push(assigned_ecdsa); } diff --git a/zkevm-circuits/src/tx_circuit/test.rs b/zkevm-circuits/src/tx_circuit/test.rs index 4ed30e250f..74e206d964 100644 --- a/zkevm-circuits/src/tx_circuit/test.rs +++ b/zkevm-circuits/src/tx_circuit/test.rs @@ -27,6 +27,7 @@ fn run( 19, log2_ceil(TxCircuit::::min_num_rows(max_txs, max_calldata)), ); + println!("k = {}", k); // SignVerifyChip -> ECDSAChip -> MainGate instance column let circuit = TxCircuit::::new(max_txs, max_calldata, chain_id, txs); From 0188d829517829533da4786e6f99eae95df943e0 Mon Sep 17 00:00:00 2001 From: Velaciela Date: Sat, 3 Jun 2023 04:22:13 +0000 Subject: [PATCH 4/9] x --- zkevm-circuits/src/tx_circuit/sign_verify.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/zkevm-circuits/src/tx_circuit/sign_verify.rs b/zkevm-circuits/src/tx_circuit/sign_verify.rs index 46cc322bdc..b6c747f37b 100644 --- a/zkevm-circuits/src/tx_circuit/sign_verify.rs +++ b/zkevm-circuits/src/tx_circuit/sign_verify.rs @@ -721,6 +721,7 @@ impl SignVerifyChip { |region| { if first_pass { first_pass = false; + println!("first_pass return!"); return Ok(vec![]); } From 54ed59ec40fee3ffecd7e87c9a9fc1fb8c4b41e2 Mon Sep 17 00:00:00 2001 From: Velaciela Date: Sat, 3 Jun 2023 04:58:30 +0000 Subject: [PATCH 5/9] bk --- zkevm-circuits/src/tx_circuit/sign_verify.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zkevm-circuits/src/tx_circuit/sign_verify.rs b/zkevm-circuits/src/tx_circuit/sign_verify.rs index b6c747f37b..2f7d9935c3 100644 --- a/zkevm-circuits/src/tx_circuit/sign_verify.rs +++ b/zkevm-circuits/src/tx_circuit/sign_verify.rs @@ -719,11 +719,11 @@ impl SignVerifyChip { let assigned_sig_verifs = layouter.assign_region( || "ecdsa chip verification", |region| { - if first_pass { - first_pass = false; - println!("first_pass return!"); - return Ok(vec![]); - } + // if first_pass { + // first_pass = false; + // println!("first_pass return!"); + // return Ok(vec![]); + // } let mut ctx = ecdsa_chip.new_context(region); // println!("region = {:?}", region.clone()); From 1125e7f1d7293dd21cb8240eab3359de7e3a50c0 Mon Sep 17 00:00:00 2001 From: Velaciela Date: Mon, 5 Jun 2023 12:59:38 +0000 Subject: [PATCH 6/9] prover equal --- circuit-benchmarks/src/tx_circuit.rs | 2 +- zkevm-circuits/src/tx_circuit.rs | 14 ++++++++++---- zkevm-circuits/src/tx_circuit/dev.rs | 2 ++ zkevm-circuits/src/tx_circuit/sign_verify.rs | 6 ++++++ zkevm-circuits/src/tx_circuit/test.rs | 17 ++++++++++++++--- 5 files changed, 33 insertions(+), 8 deletions(-) diff --git a/circuit-benchmarks/src/tx_circuit.rs b/circuit-benchmarks/src/tx_circuit.rs index 53a21d2bb0..309e217865 100644 --- a/circuit-benchmarks/src/tx_circuit.rs +++ b/circuit-benchmarks/src/tx_circuit.rs @@ -81,7 +81,7 @@ mod tests { let chain_id: u64 = mock::MOCK_CHAIN_ID.low_u64(); let txs = vec![mock::CORRECT_MOCK_TXS[0].clone().into()]; - let circuit = TxCircuit::::new(max_txs, MAX_CALLDATA, chain_id, txs); + let circuit = TxCircuit::::new(max_txs, MAX_CALLDATA, chain_id, txs, false); (degree as usize, circuit) } diff --git a/zkevm-circuits/src/tx_circuit.rs b/zkevm-circuits/src/tx_circuit.rs index 9c88fa0684..f35fcabde7 100644 --- a/zkevm-circuits/src/tx_circuit.rs +++ b/zkevm-circuits/src/tx_circuit.rs @@ -1234,16 +1234,19 @@ pub struct TxCircuit { pub chain_id: u64, /// Size pub size: usize, + /// Parellel Synthesis + pub parallel_syn: bool, } impl TxCircuit { /// Return a new TxCircuit - pub fn new(max_txs: usize, max_calldata: usize, chain_id: u64, txs: Vec) -> Self { + pub fn new(max_txs: usize, max_calldata: usize, chain_id: u64, txs: Vec, parallel_syn: bool) -> Self { log::info!( - "TxCircuit::new(max_txs = {}, max_calldata = {}, chain_id = {})", + "TxCircuit::new(max_txs = {}, max_calldata = {}, chain_id = {}, parallel_syn = {})", max_txs, max_calldata, - chain_id + chain_id, + parallel_syn ); debug_assert!(txs.len() <= max_txs); @@ -1254,6 +1257,7 @@ impl TxCircuit { txs, size: Self::min_num_rows(max_txs, max_calldata), chain_id, + parallel_syn, } } @@ -1737,6 +1741,7 @@ impl SubCircuit for TxCircuit { block.circuits_params.max_calldata, block.chain_id.as_u64(), block.txs.clone(), + false // TODO ) } @@ -1816,7 +1821,8 @@ impl SubCircuit for TxCircuit { { let assigned_sig_verifs = self.sign_verify - .assign(&config.sign_verify, layouter, &sign_datas, challenges)?; + .assign(&config.sign_verify, layouter, &sign_datas, challenges, + self.parallel_syn)?; // TODO self.sign_verify.assert_sig_is_valid( &config.sign_verify, layouter, diff --git a/zkevm-circuits/src/tx_circuit/dev.rs b/zkevm-circuits/src/tx_circuit/dev.rs index a407beb53c..09bb1e8a8f 100644 --- a/zkevm-circuits/src/tx_circuit/dev.rs +++ b/zkevm-circuits/src/tx_circuit/dev.rs @@ -50,6 +50,7 @@ impl Circuit for TxCircuit { mut layouter: impl Layouter, ) -> Result<(), Error> { let challenges = challenges.values(&layouter); + println!("tx circuit dev synthesize"); let padding_txs = (self.txs.len()..self.max_txs) .into_iter() @@ -81,6 +82,7 @@ impl Circuit for TxCircuit { &challenges, )?; self.assign_dev_block_table(config.clone(), &mut layouter)?; + println!("tx circuit synthesize_sub begin"); self.synthesize_sub(&config, &challenges, &mut layouter) } } diff --git a/zkevm-circuits/src/tx_circuit/sign_verify.rs b/zkevm-circuits/src/tx_circuit/sign_verify.rs index 2f7d9935c3..3286fe18fa 100644 --- a/zkevm-circuits/src/tx_circuit/sign_verify.rs +++ b/zkevm-circuits/src/tx_circuit/sign_verify.rs @@ -704,7 +704,9 @@ impl SignVerifyChip { layouter: &mut impl Layouter, signatures: &[SignData], challenges: &Challenges>, + parallel_syn: bool, ) -> Result>, Error> { + println!("parallel_syn = {}", parallel_syn); if signatures.len() > self.max_verif { error!( "signatures.len() = {} > max_verif = {}", @@ -1060,6 +1062,7 @@ mod sign_verify_tests { struct TestCircuitSignVerify { sign_verify: SignVerifyChip, signatures: Vec, + parallel_syn: bool, } impl Circuit for TestCircuitSignVerify { @@ -1079,6 +1082,7 @@ mod sign_verify_tests { config: Self::Config, mut layouter: impl Layouter, ) -> Result<(), Error> { + println!("synthesizing circuit, self.parallel_syn = {}", self.parallel_syn); let challenges = config.challenges.values(&layouter); config.sign_verify.load_range(&mut layouter)?; let assigned_sig_verifs = self.sign_verify.assign( @@ -1086,6 +1090,7 @@ mod sign_verify_tests { &mut layouter, &self.signatures, &challenges, + self.parallel_syn, // TODO )?; config.sign_verify.keccak_table.dev_load( &mut layouter, @@ -1110,6 +1115,7 @@ mod sign_verify_tests { _marker: PhantomData, }, signatures, + parallel_syn: true, }; let prover = match MockProver::run(k, &circuit, vec![vec![]]) { diff --git a/zkevm-circuits/src/tx_circuit/test.rs b/zkevm-circuits/src/tx_circuit/test.rs index 74e206d964..ae8e696e17 100644 --- a/zkevm-circuits/src/tx_circuit/test.rs +++ b/zkevm-circuits/src/tx_circuit/test.rs @@ -29,12 +29,23 @@ fn run( ); println!("k = {}", k); // SignVerifyChip -> ECDSAChip -> MainGate instance column - let circuit = TxCircuit::::new(max_txs, max_calldata, chain_id, txs); - + let circuit = TxCircuit::::new(max_txs, max_calldata, chain_id, txs.clone(), false); let prover = match MockProver::run(k, &circuit, vec![vec![]]) { Ok(prover) => prover, Err(e) => panic!("{:#?}", e), }; + + // if parallel synthesis is enabled, compare the results of the two circuits + { + let circuit_para_syn = TxCircuit::::new(max_txs, max_calldata, chain_id, txs, true); + let prover_to_compare = match MockProver::run(k, &circuit_para_syn, vec![vec![]]) { + Ok(prover) => prover, + Err(e) => panic!("{:#?}", e), + }; + let eqq = prover.is_mock_prover_equal(&prover_to_compare); + println!("eqq = {}", eqq); + } + prover.verify() } @@ -78,7 +89,7 @@ fn tx_circuit_0tx_1max_tx() { #[test] fn tx_circuit_1tx_1max_tx() { - const MAX_TXS: usize = 32; + const MAX_TXS: usize = 8; const MAX_CALLDATA: usize = 32; let chain_id: u64 = mock::MOCK_CHAIN_ID.as_u64(); From 312184e1f3c8e6f5f11f54e00a49f7898dcf6771 Mon Sep 17 00:00:00 2001 From: Velaciela Date: Mon, 5 Jun 2023 13:01:43 +0000 Subject: [PATCH 7/9] m --- zkevm-circuits/src/tx_circuit/sign_verify.rs | 172 ++++++++++++++++++- 1 file changed, 171 insertions(+), 1 deletion(-) diff --git a/zkevm-circuits/src/tx_circuit/sign_verify.rs b/zkevm-circuits/src/tx_circuit/sign_verify.rs index 3286fe18fa..9a26ce7d53 100644 --- a/zkevm-circuits/src/tx_circuit/sign_verify.rs +++ b/zkevm-circuits/src/tx_circuit/sign_verify.rs @@ -47,7 +47,7 @@ use itertools::Itertools; use keccak256::plain::Keccak; use log::error; use std::{iter, marker::PhantomData}; - +use std::Instant; // Hard coded parameters. // FIXME: allow for a configurable param. const MAX_NUM_SIG: usize = 32; @@ -871,6 +871,176 @@ impl SignVerifyChip { Ok(assigned_sig_verifs) } + pub(crate) fn assign_parallel( + &self, + config: &SignVerifyConfig, + layouter: &mut impl Layouter, + signatures: &[SignData], + challenges: &Challenges>, + ) -> Result>, Error> { + if signatures.len() > self.max_verif { + error!( + "signatures.len() = {} > max_verif = {}", + signatures.len(), + self.max_verif + ); + return Err(Error::Synthesis); + } + println!("signatures.len() = {}", signatures.len()); + println!("self.max_verif = {}", self.max_verif); + // let mut first_pass = SKIP_FIRST_PASS; + let ecdsa_chip = &config.ecdsa_config; + + let assigned_sig_verifs_timer = Instant::now(); + let mut first_pass_vec = vec![true; self.max_verif]; + let assigned_sig_verifs = layouter.assign_regions( + || "ecdsa chip verification", + (0..self.max_verif) + .into_iter() + .zip(first_pass_vec.iter_mut()) + .map(|(i, first_pass)| { + move |region: Region<'_, F>| { + let first_pass_flag = *first_pass; + let mut ctx = ecdsa_chip.new_context(region); + ctx.print_stats(&["Range"]); + println!("sig idx = [{}]", i); + + // ================================================ + // step 1: assert the signature is valid in circuit + // ================================================ + let step_1_timer = Instant::now(); + + let signature = if i < signatures.len() { + signatures[i].clone() + } else { + // padding (enabled when address == 0) + SignData::default() + }; + let assigned_ecdsa = self.assign_ecdsa(&mut ctx, ecdsa_chip, &signature)?; + + println!("step_1_timer: {:?}", step_1_timer.elapsed()); + + println!("ctx.region = {:?}", ctx.region); + println!("ctx.max_rows = {:?}", ctx.max_rows); + println!("ctx.total_advice = {}", ctx.total_advice); + println!("ctx.fixed_col = {}", ctx.fixed_col); + println!("ctx.fixed_offset = {}", ctx.fixed_offset); + println!("ctx.cells_to_lookup.len() = {}", ctx.cells_to_lookup.len()); + println!("ctx.current_phase = {}", ctx.current_phase); + + // ================================================ + // step 2: decompose the keys and messages + // ================================================ + let step_2_timer = Instant::now(); + let sign_data = signatures.get(i); // None when padding (enabled when address == 0) + let sign_data_decomposed = + self.sign_data_decomposition(&mut ctx, ecdsa_chip, sign_data)?; + + // IMPORTANT: Move to Phase2 before RLC + log::info!("before proceeding to the next phase"); + ctx.print_stats(&["Range"]); + + #[cfg(not(feature = "onephase"))] + { + println!("onephase"); + // finalize the current lookup table before moving to next phase + ecdsa_chip.finalize(&mut ctx); + ctx.next_phase(); + } + + println!("step_2_timer: {:?}", step_2_timer.elapsed()); + + println!("ctx.region = {:?}", ctx.region); + println!("ctx.max_rows = {:?}", ctx.max_rows); + println!("ctx.total_advice = {}", ctx.total_advice); + println!("ctx.fixed_col = {}", ctx.fixed_col); + println!("ctx.fixed_offset = {}", ctx.fixed_offset); + println!("ctx.cells_to_lookup.len() = {}", ctx.cells_to_lookup.len()); + println!("ctx.current_phase = {}", ctx.current_phase); + + + // ================================================ + // step 3: compute RLC of keys and messages + // ================================================ + let step_3_timer = Instant::now(); + let sign_data = signatures.get(i); // None when padding (enabled when address == 0) + let sign_data_decomposed = &sign_data_decomposed; + let (to_be_keccak_checked, assigned_sig_verif) = self.assign_sig_verify( + &mut ctx, + &ecdsa_chip.range, + sign_data, + sign_data_decomposed, + challenges, + &assigned_ecdsa.sig_is_valid, + )?; + + // if first_pass_flag { + // *first_pass = false; + // return Ok(assigned_sig_verif); + // } + + println!("step_3_timer: {:?}", step_3_timer.elapsed()); + + println!("ctx.region = {:?}", ctx.region); + println!("ctx.max_rows = {:?}", ctx.max_rows); + println!("ctx.total_advice = {}", ctx.total_advice); + println!("ctx.fixed_col = {}", ctx.fixed_col); + println!("ctx.fixed_offset = {}", ctx.fixed_offset); + println!("ctx.cells_to_lookup.len() = {}", ctx.cells_to_lookup.len()); + println!("ctx.current_phase = {}", ctx.current_phase); + + // ================================================ + // step 4: deferred keccak checks + // ================================================ + let step_4_timer = Instant::now(); + let mut offset = 0; + let [is_address_zero, pk_rlc, pk_hash_rlc] = to_be_keccak_checked; + self.enable_keccak_lookup( + config, + &mut ctx, + &mut offset, + &is_address_zero, + &pk_rlc, + &pk_hash_rlc, + )?; + println!("step_4_timer: {:?}", step_4_timer.elapsed()); + + // IMPORTANT: this assigns all constants to the fixed columns + // IMPORTANT: this copies cells to the lookup advice column to perform range + // check lookups + // This is not optional. + let final_timer = Instant::now(); + // let mut lookup_cells: usize = 0; + // if first_pass_flag { + // *first_pass = false; + // } + // else { + // lookup_cells = ecdsa_chip.finalize(&mut ctx); + // println!("first_pass_flag: {}", first_pass_flag); + // println!("lookup_cells: {}", lookup_cells); + // } + + let lookup_cells = ecdsa_chip.finalize(&mut ctx); + + log::info!("total number of lookup cells: {}", lookup_cells); + + println!("final_timer: {:?}", final_timer.elapsed()); + + ctx.print_stats(&["Range"]); + Ok(assigned_sig_verif) + } + }) + .collect_vec() + )?; + + println!( + "assigned_sig_verifs_timer: {:?}", + assigned_sig_verifs_timer.elapsed() + ); + + Ok(assigned_sig_verifs) + } + /// Assert an CRTInteger's byte representation is correct. /// inputs /// - crt_int with 3 limbs [88, 88, 80] From 1ed02daa8e59bd1ff6fe68dc006fca9d42230ad6 Mon Sep 17 00:00:00 2001 From: Velaciela Date: Mon, 5 Jun 2023 13:03:56 +0000 Subject: [PATCH 8/9] m --- zkevm-circuits/src/tx_circuit.rs | 9 +++++++-- zkevm-circuits/src/tx_circuit/sign_verify.rs | 4 +++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/zkevm-circuits/src/tx_circuit.rs b/zkevm-circuits/src/tx_circuit.rs index f35fcabde7..3d748a938d 100644 --- a/zkevm-circuits/src/tx_circuit.rs +++ b/zkevm-circuits/src/tx_circuit.rs @@ -1819,10 +1819,15 @@ impl SubCircuit for TxCircuit { #[cfg(feature = "enable-sign-verify")] { - let assigned_sig_verifs = + let assigned_sig_verifs = if self.parallel_syn { self.sign_verify .assign(&config.sign_verify, layouter, &sign_datas, challenges, - self.parallel_syn)?; // TODO + self.parallel_syn)?; + } else { + self.sign_verify + .assign_parallel(&config.sign_verify, layouter, &sign_datas, challenges, + self.parallel_syn)?; + }; self.sign_verify.assert_sig_is_valid( &config.sign_verify, layouter, diff --git a/zkevm-circuits/src/tx_circuit/sign_verify.rs b/zkevm-circuits/src/tx_circuit/sign_verify.rs index 9a26ce7d53..4ea6bd7a18 100644 --- a/zkevm-circuits/src/tx_circuit/sign_verify.rs +++ b/zkevm-circuits/src/tx_circuit/sign_verify.rs @@ -47,7 +47,7 @@ use itertools::Itertools; use keccak256::plain::Keccak; use log::error; use std::{iter, marker::PhantomData}; -use std::Instant; +use std::time::Instant; // Hard coded parameters. // FIXME: allow for a configurable param. const MAX_NUM_SIG: usize = 32; @@ -877,7 +877,9 @@ impl SignVerifyChip { layouter: &mut impl Layouter, signatures: &[SignData], challenges: &Challenges>, + parallel_syn: bool, ) -> Result>, Error> { + println!("parallel_syn = {}", parallel_syn); if signatures.len() > self.max_verif { error!( "signatures.len() = {} > max_verif = {}", From 58b68e6a5173eb80fc57c4de8c1c2ffed76ace78 Mon Sep 17 00:00:00 2001 From: Velaciela Date: Tue, 6 Jun 2023 00:51:25 +0000 Subject: [PATCH 9/9] bk --- Cargo.toml | 4 +- zkevm-circuits/src/tx_circuit.rs | 19 +++--- zkevm-circuits/src/tx_circuit/sign_verify.rs | 61 +++++++++++++++++++- zkevm-circuits/src/tx_circuit/test.rs | 5 +- 4 files changed, 75 insertions(+), 14 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 91bf259466..990bc6d51d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,8 +14,8 @@ members = [ "testool" ] -#[patch."https://github.com/privacy-scaling-explorations/halo2.git"] -#halo2_proofs = { git = "https://github.com/scroll-tech/halo2.git", branch = "v0.4" } +[patch."https://github.com/privacy-scaling-explorations/halo2.git"] +halo2_proofs = { git = "https://github.com/scroll-tech/halo2.git", branch = "mock_prover_eq" } [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/halo2curves.git"] diff --git a/zkevm-circuits/src/tx_circuit.rs b/zkevm-circuits/src/tx_circuit.rs index 3d748a938d..639e6786d7 100644 --- a/zkevm-circuits/src/tx_circuit.rs +++ b/zkevm-circuits/src/tx_circuit.rs @@ -1819,15 +1819,20 @@ impl SubCircuit for TxCircuit { #[cfg(feature = "enable-sign-verify")] { - let assigned_sig_verifs = if self.parallel_syn { - self.sign_verify - .assign(&config.sign_verify, layouter, &sign_datas, challenges, - self.parallel_syn)?; - } else { - self.sign_verify + // let assigned_sig_verifs = self.sign_verify + // .assign(&config.sign_verify, layouter, &sign_datas, challenges, + // self.parallel_syn)?; + let assigned_sig_verifs: Vec>; + if self.parallel_syn { + assigned_sig_verifs = self.sign_verify .assign_parallel(&config.sign_verify, layouter, &sign_datas, challenges, self.parallel_syn)?; - }; + } + else { + assigned_sig_verifs = self.sign_verify + .assign(&config.sign_verify, layouter, &sign_datas, challenges, + self.parallel_syn)?; + } self.sign_verify.assert_sig_is_valid( &config.sign_verify, layouter, diff --git a/zkevm-circuits/src/tx_circuit/sign_verify.rs b/zkevm-circuits/src/tx_circuit/sign_verify.rs index 4ea6bd7a18..b310465a12 100644 --- a/zkevm-circuits/src/tx_circuit/sign_verify.rs +++ b/zkevm-circuits/src/tx_circuit/sign_verify.rs @@ -39,9 +39,11 @@ use halo2_proofs::plonk::SecondPhase; use halo2_proofs::{ circuit::{Cell, Layouter, Value}, halo2curves::secp256k1::{Fp, Fq, Secp256k1Affine}, - plonk::{Advice, Column, ConstraintSystem, Error, Fixed, Selector}, + plonk::{Advice, Column, ConstraintSystem, Error, Any, Fixed, Selector}, poly::Rotation, }; +use halo2_proofs::circuit::RegionIndex; +use halo2_proofs::circuit::Region; use itertools::Itertools; use keccak256::plain::Keccak; @@ -55,7 +57,7 @@ const MAX_NUM_SIG: usize = 32; // We set CELLS_PER_SIG = 535000 to allows for a few buffer const CELLS_PER_SIG: usize = 535000; // Total number of rows allocated for ecdsa chip -const TOTAL_NUM_ROWS: usize = 19; +const TOTAL_NUM_ROWS: usize = 21; fn calc_required_advices(num_verif: usize) -> usize { let mut num_adv = 1; @@ -291,6 +293,25 @@ pub(crate) struct AssignedValueNoTimer { pub context_id: usize, } +impl Default for AssignedValueNoTimer { + fn default() -> Self { + let tmp: Column = Column { + index: 0, + column_type: Fixed, + }; + Self { + cell: Cell { + region_index: RegionIndex(0), + row_offset: 0, + column: tmp.into(), + }, + value: Value::default(), + row_offset: 0, + context_id: 0, + } + } +} + impl<'v, F: Field> From> for AssignedValueNoTimer { fn from(input: AssignedValue<'v, F>) -> Self { Self { @@ -335,6 +356,18 @@ pub(crate) struct AssignedSignatureVerify { pub(crate) sig_is_valid: AssignedValueNoTimer, } +impl Default for AssignedSignatureVerify { + fn default() -> Self { + Self { + address: AssignedValueNoTimer::default(), + msg_len: 0, + msg_rlc: Value::default(), + msg_hash_rlc: AssignedValueNoTimer::default(), + sig_is_valid: AssignedValueNoTimer::default(), + } + } +} + struct SignDataDecomposed<'a: 'v, 'v, F: Field> { pk_hash_cells: Vec>, msg_hash_cells: Vec>, @@ -707,6 +740,7 @@ impl SignVerifyChip { parallel_syn: bool, ) -> Result>, Error> { println!("parallel_syn = {}", parallel_syn); + println!("self.max_verif = {}", self.max_verif); if signatures.len() > self.max_verif { error!( "signatures.len() = {} > max_verif = {}", @@ -880,6 +914,7 @@ impl SignVerifyChip { parallel_syn: bool, ) -> Result>, Error> { println!("parallel_syn = {}", parallel_syn); + println!("self.max_verif = {}", self.max_verif); if signatures.len() > self.max_verif { error!( "signatures.len() = {} > max_verif = {}", @@ -902,9 +937,29 @@ impl SignVerifyChip { .zip(first_pass_vec.iter_mut()) .map(|(i, first_pass)| { move |region: Region<'_, F>| { - let first_pass_flag = *first_pass; + // let first_pass_flag = *first_pass; + // println!("first_pass_flag[{}] = {}", i, first_pass_flag); + // if first_pass_flag { + // *first_pass = false; + // return Ok(AssignedSignatureVerify::default()); + // } let mut ctx = ecdsa_chip.new_context(region); ctx.print_stats(&["Range"]); + + // let first_pass_flag = *first_pass; + // println!("first_pass_flag[{}] = {}", i, first_pass_flag); + // if first_pass_flag { + // *first_pass = false; + // let column = ecdsa_chip.range.lookup_advice[ctx.current_phase][0].clone(); + // ctx.region.assign_advice(|| "dummy", + // column, + // 1<<17,//524279,//1<<19, + // || Value::known(F::zero()), + // )?; + // ctx.print_stats(&["Range"]); + // return Ok(AssignedSignatureVerify::default()); + // } + println!("sig idx = [{}]", i); // ================================================ diff --git a/zkevm-circuits/src/tx_circuit/test.rs b/zkevm-circuits/src/tx_circuit/test.rs index ae8e696e17..a91d0a40fd 100644 --- a/zkevm-circuits/src/tx_circuit/test.rs +++ b/zkevm-circuits/src/tx_circuit/test.rs @@ -24,7 +24,7 @@ fn run( max_calldata: usize, ) -> Result<(), Vec> { let k = max( - 19, + 21, log2_ceil(TxCircuit::::min_num_rows(max_txs, max_calldata)), ); println!("k = {}", k); @@ -44,6 +44,7 @@ fn run( }; let eqq = prover.is_mock_prover_equal(&prover_to_compare); println!("eqq = {}", eqq); + prover_to_compare.verify()?; } prover.verify() @@ -89,7 +90,7 @@ fn tx_circuit_0tx_1max_tx() { #[test] fn tx_circuit_1tx_1max_tx() { - const MAX_TXS: usize = 8; + const MAX_TXS: usize = 2; const MAX_CALLDATA: usize = 32; let chain_id: u64 = mock::MOCK_CHAIN_ID.as_u64();