change l2geth config to option

This commit is contained in:
Mengran Lan
2024-05-21 12:06:55 +08:00
parent 2d0c36eb5a
commit 49166ec8d0
3 changed files with 42 additions and 37 deletions

View File

@@ -46,7 +46,7 @@ pub struct Config {
pub db_path: String,
pub core: ProverCoreConfig,
pub coordinator: CoordinatorConfig,
pub l2geth: L2GethConfig,
pub l2geth: Option<L2GethConfig>,
}
impl Config {

View File

@@ -27,7 +27,7 @@ pub struct Prover<'a> {
key_signer: Rc<KeySigner>,
circuits_handler_provider: CircuitsHandlerProvider,
coordinator_client: RefCell<CoordinatorClient>,
geth_client: RefCell<GethClient>,
geth_client: Option<RefCell<GethClient>>,
}
// a u64 is positive when it's 63th index bit not set
@@ -53,14 +53,18 @@ impl<'a> Prover<'a> {
let key_signer = Rc::new(KeySigner::new(&keystore_path, &keystore_password)?);
let coordinator_client = CoordinatorClient::new(coordinator_config, Rc::clone(&key_signer))?;
let prover = Prover {
let mut prover = Prover {
config,
key_signer: Rc::clone(&key_signer),
circuits_handler_provider: CircuitsHandlerProvider::new(proof_type, params_path, assets_path)?,
coordinator_client: RefCell::new(coordinator_client),
geth_client: RefCell::new(GethClient::new("test", &config.l2geth.endpoint)?),
geth_client: None,
};
if config.core.proof_type == ProofType::ProofTypeChunk {
prover.geth_client = Some(RefCell::new(GethClient::new("test", &config.l2geth.as_ref().unwrap().endpoint)?));
}
Ok(prover)
}
@@ -83,7 +87,7 @@ impl<'a> Prover<'a> {
};
if self.get_proof_type() == ProofType::ProofTypeChunk {
let latest_block_number = self.get_configured_block_number_value()?;
let latest_block_number = self.get_latest_block_number_value()?;
if let Some(v) = latest_block_number {
if v.as_u64() == 0 {
bail!("omit to prove task of the genesis block")
@@ -179,30 +183,35 @@ impl<'a> Prover<'a> {
Ok(())
}
fn get_configured_block_number_value(&self) -> Result<Option<U64>> {
self.get_block_number_value(&self.config.l2geth.confirmations)
fn get_latest_block_number_value(&self) -> Result<Option<U64>> {
let number = self.geth_client.as_ref().unwrap().borrow_mut().block_number()?;
Ok(number.as_number())
}
fn get_block_number_value(&self, block_number: &BlockNumber) -> Result<Option<U64>> {
match block_number {
BlockNumber::Safe | BlockNumber::Finalized => {
let header = self.geth_client.borrow_mut().header_by_number(block_number)?;
Ok(header.get_number())
},
BlockNumber::Latest => {
let number = self.geth_client.borrow_mut().block_number()?;
Ok(number.as_number())
},
BlockNumber::Number(n) if is_positive(n) => {
let number = self.geth_client.borrow_mut().block_number()?;
let diff = number.as_number()
.filter(|m| m.as_u64() >= n.as_u64())
.map(|m| U64::from(m.as_u64() - n.as_u64()));
Ok(diff)
},
_ => bail!("unknown confirmation type"),
}
}
// fn get_configured_block_number_value(&self) -> Result<Option<U64>> {
// self.get_block_number_value(&self.config.l2geth.as_ref().unwrap().confirmations)
// }
// fn get_block_number_value(&self, block_number: &BlockNumber) -> Result<Option<U64>> {
// match block_number {
// BlockNumber::Safe | BlockNumber::Finalized => {
// let header = self.geth_client.as_ref().unwrap().borrow_mut().header_by_number(block_number)?;
// Ok(header.get_number())
// },
// BlockNumber::Latest => {
// let number = self.geth_client.as_ref().unwrap().borrow_mut().block_number()?;
// Ok(number.as_number())
// },
// BlockNumber::Number(n) if is_positive(n) => {
// let number = self.geth_client.as_ref().unwrap().borrow_mut().block_number()?;
// let diff = number.as_number()
// .filter(|m| m.as_u64() >= n.as_u64())
// .map(|m| U64::from(m.as_u64() - n.as_u64()));
// Ok(diff)
// },
// _ => bail!("unknown confirmation type"),
// }
// }
fn get_output_dir(&self) -> Option<&str> {
OUTPUT_DIR.as_deref()
@@ -231,7 +240,7 @@ impl<'a> Prover<'a> {
let mut block_traces = Vec::new();
for (_, hash) in block_hashes.into_iter().enumerate() {
let trace = self.geth_client.borrow_mut().get_block_trace_by_hash(hash)?;
let trace = self.geth_client.as_ref().unwrap().borrow_mut().get_block_trace_by_hash(hash)?;
block_traces.push(trace.block_trace);
}

View File

@@ -1,5 +1,5 @@
use anyhow::{Ok, Result};
use anyhow::{bail, Ok, Result};
use crate::types::ProofType;
use super::CircuitsHandler;
use super::types::{ChunkProof, BatchProof, BlockTrace, ChunkHash};
@@ -27,8 +27,7 @@ impl BaseCircuitsHandler {
batch_prover: Some(RefCell::new(BatchProver::from_dirs(params_dir, assets_dir))),
..Default::default()
}),
// TODO: add custom error system and change unreachable to error
_ => unreachable!()
_ => bail!("proof type invalid")
}
}
}
@@ -47,8 +46,7 @@ impl CircuitsHandler for BaseCircuitsHandler {
if let Some(prover) = self.chunk_prover.as_ref() {
return prover.borrow_mut().gen_chunk_proof(chunk_trace, name, inner_id, output_dir)
}
// TODO: add custom error system and change unreachable to error
unreachable!()
unreachable!("please check errors in proof_type logic")
}
// api of aggregator::Prover
@@ -63,15 +61,13 @@ impl CircuitsHandler for BaseCircuitsHandler {
if let Some(prover) = self.batch_prover.as_ref() {
return prover.borrow_mut().gen_agg_evm_proof(chunk_hashes_proofs, name, output_dir)
}
// TODO: add custom error system and change unreachable to error
unreachable!()
unreachable!("please check errors in proof_type logic")
}
fn aggregator_check_chunk_proofs(&self, chunk_proofs: &[ChunkProof]) -> bool {
if let Some(prover) = self.batch_prover.as_ref() {
return prover.borrow_mut().check_chunk_proofs(chunk_proofs)
}
// TODO: add custom error system and change unreachable to error
unreachable!()
unreachable!("please check errors in proof_type logic")
}
}