From ae8c858a071c84647f921d91aa8fdee320f6c433 Mon Sep 17 00:00:00 2001 From: Mengran Lan Date: Thu, 29 Aug 2024 10:01:44 +0800 Subject: [PATCH] fix(prover): fix degrees logic in prover new (#1512) --- prover/src/zk_circuits_handler/common.rs | 16 ++++++- prover/src/zk_circuits_handler/darwin.rs | 46 ++++++++++----------- prover/src/zk_circuits_handler/darwin_v2.rs | 46 ++++++++++----------- 3 files changed, 57 insertions(+), 51 deletions(-) diff --git a/prover/src/zk_circuits_handler/common.rs b/prover/src/zk_circuits_handler/common.rs index 8bd192e8c..e88628ad6 100644 --- a/prover/src/zk_circuits_handler/common.rs +++ b/prover/src/zk_circuits_handler/common.rs @@ -1,12 +1,14 @@ use std::{collections::BTreeMap, rc::Rc}; +use crate::types::ProverType; + use once_cell::sync::OnceCell; use halo2_proofs::{halo2curves::bn256::Bn256, poly::kzg::commitment::ParamsKZG}; static mut PARAMS_MAP: OnceCell>>> = OnceCell::new(); -pub fn get_params_map<'a, F>(load_params_func: F) -> &'a BTreeMap> +pub fn get_params_map_instance<'a, F>(load_params_func: F) -> &'a BTreeMap> where F: FnOnce() -> BTreeMap>, { @@ -17,3 +19,15 @@ where }) } } + +pub fn get_degrees(prover_types: &std::collections::HashSet, f: F) -> Vec +where + F: FnMut(&ProverType) -> Vec, +{ + prover_types + .iter() + .flat_map(f) + .collect::>() + .into_iter() + .collect() +} diff --git a/prover/src/zk_circuits_handler/darwin.rs b/prover/src/zk_circuits_handler/darwin.rs index dd452eff1..96618f950 100644 --- a/prover/src/zk_circuits_handler/darwin.rs +++ b/prover/src/zk_circuits_handler/darwin.rs @@ -1,4 +1,4 @@ -use super::CircuitsHandler; +use super::{common::*, CircuitsHandler}; use crate::{ geth_client::GethClient, types::{ProverType, TaskType}, @@ -11,9 +11,13 @@ use crate::types::{CommonHash, Task}; use std::{cell::RefCell, cmp::Ordering, env, rc::Rc}; use prover_darwin::{ - aggregator::Prover as BatchProver, check_chunk_hashes, common::Prover as CommonProver, - zkevm::Prover as ChunkProver, BatchProof, BatchProvingTask, BlockTrace, BundleProof, - BundleProvingTask, ChunkInfo, ChunkProof, ChunkProvingTask, + aggregator::Prover as BatchProver, + check_chunk_hashes, + common::Prover as CommonProver, + config::{AGG_DEGREES, ZKEVM_DEGREES}, + zkevm::Prover as ChunkProver, + BatchProof, BatchProvingTask, BlockTrace, BundleProof, BundleProvingTask, ChunkInfo, + ChunkProof, ChunkProvingTask, }; // Only used for debugging. @@ -61,35 +65,27 @@ impl DarwinHandler { chunk_prover: None, geth_client, }; + let degrees: Vec = get_degrees(&prover_types_set, |prover_type| match prover_type { + ProverType::Chunk => ZKEVM_DEGREES.clone(), + ProverType::Batch => AGG_DEGREES.clone(), + }); + let params_map = get_params_map_instance(|| { + log::info!( + "calling get_params_map from {}, prover_types: {:?}, degrees: {:?}", + class_name, + prover_types_set, + degrees + ); + CommonProver::load_params_map(params_dir, °rees) + }); for prover_type in prover_types_set { match prover_type { ProverType::Chunk => { - let degrees = prover_darwin::config::ZKEVM_DEGREES.clone(); - let params_map = super::common::get_params_map(|| { - log::info!( - "calling get_params_map from {}, prover_type: {:?}, degrees: {:?}", - class_name, - prover_type, - degrees - ); - CommonProver::load_params_map(params_dir, °rees) - }); handler.chunk_prover = Some(RefCell::new(ChunkProver::from_params_and_assets( params_map, assets_dir, ))); } - ProverType::Batch => { - let degrees = prover_darwin::config::AGG_DEGREES.clone(); - let params_map = super::common::get_params_map(|| { - log::info!( - "calling get_params_map from {}, prover_type: {:?}, degrees: {:?}", - class_name, - prover_type, - degrees - ); - CommonProver::load_params_map(params_dir, °rees) - }); handler.batch_prover = Some(RefCell::new(BatchProver::from_params_and_assets( params_map, assets_dir, ))) diff --git a/prover/src/zk_circuits_handler/darwin_v2.rs b/prover/src/zk_circuits_handler/darwin_v2.rs index 7f1bb38d9..fce3871d0 100644 --- a/prover/src/zk_circuits_handler/darwin_v2.rs +++ b/prover/src/zk_circuits_handler/darwin_v2.rs @@ -1,4 +1,4 @@ -use super::CircuitsHandler; +use super::{common::*, CircuitsHandler}; use crate::{ geth_client::GethClient, types::{ProverType, TaskType}, @@ -11,9 +11,13 @@ use crate::types::{CommonHash, Task}; use std::{cell::RefCell, cmp::Ordering, env, rc::Rc}; use prover_darwin_v2::{ - aggregator::Prover as BatchProver, check_chunk_hashes, common::Prover as CommonProver, - zkevm::Prover as ChunkProver, BatchProof, BatchProvingTask, BlockTrace, BundleProof, - BundleProvingTask, ChunkInfo, ChunkProof, ChunkProvingTask, + aggregator::Prover as BatchProver, + check_chunk_hashes, + common::Prover as CommonProver, + config::{AGG_DEGREES, ZKEVM_DEGREES}, + zkevm::Prover as ChunkProver, + BatchProof, BatchProvingTask, BlockTrace, BundleProof, BundleProvingTask, ChunkInfo, + ChunkProof, ChunkProvingTask, }; // Only used for debugging. @@ -61,35 +65,27 @@ impl DarwinV2Handler { chunk_prover: None, geth_client, }; + let degrees: Vec = get_degrees(&prover_types_set, |prover_type| match prover_type { + ProverType::Chunk => ZKEVM_DEGREES.clone(), + ProverType::Batch => AGG_DEGREES.clone(), + }); + let params_map = get_params_map_instance(|| { + log::info!( + "calling get_params_map from {}, prover_types: {:?}, degrees: {:?}", + class_name, + prover_types_set, + degrees + ); + CommonProver::load_params_map(params_dir, °rees) + }); for prover_type in prover_types_set { match prover_type { ProverType::Chunk => { - let degrees = prover_darwin::config::ZKEVM_DEGREES.clone(); - let params_map = super::common::get_params_map(|| { - log::info!( - "calling get_params_map from {}, prover_type: {:?}, degrees: {:?}", - class_name, - prover_type, - degrees - ); - CommonProver::load_params_map(params_dir, °rees) - }); handler.chunk_prover = Some(RefCell::new(ChunkProver::from_params_and_assets( params_map, assets_dir, ))); } - ProverType::Batch => { - let degrees = prover_darwin::config::AGG_DEGREES.clone(); - let params_map = super::common::get_params_map(|| { - log::info!( - "calling get_params_map from {}, prover_type: {:?}, degrees: {:?}", - class_name, - prover_type, - degrees - ); - CommonProver::load_params_map(params_dir, °rees) - }); handler.batch_prover = Some(RefCell::new(BatchProver::from_params_and_assets( params_map, assets_dir, )))