1- use crate :: zkevm:: SubCircuitRowUsage ;
2- use anyhow:: { bail, Result } ;
3- use bus_mapping:: circuit_input_builder:: CircuitInputBuilder ;
1+ use crate :: zkevm:: { ChunkProverError , SubCircuitRowUsage } ;
2+ use bus_mapping:: { circuit_input_builder:: CircuitInputBuilder , Error as CircuitBuilderError } ;
43use eth_types:: { l2_types:: BlockTrace , ToWord } ;
54use itertools:: Itertools ;
65use mpt_zktrie:: state:: ZkTrieHash ;
@@ -12,12 +11,14 @@ use zkevm_circuits::{
1211
1312pub fn calculate_row_usage_of_witness_block (
1413 witness_block : & Block ,
15- ) -> Result < Vec < SubCircuitRowUsage > > {
14+ ) -> Result < Vec < SubCircuitRowUsage > , ChunkProverError > {
1615 let rows = ScrollSuperCircuit :: min_num_rows_block_subcircuits ( witness_block) ;
1716
1817 // Check whether we need to "estimate" poseidon sub circuit row usage
1918 if witness_block. mpt_updates . smt_traces . is_empty ( ) {
20- bail ! ( "light mode no longer supported" ) ;
19+ return Err ( ChunkProverError :: Custom (
20+ "light mode no longer supported" . to_string ( ) ,
21+ ) ) ;
2122 }
2223
2324 let first_block_num = witness_block. first_block_number ( ) ;
@@ -34,58 +35,44 @@ pub fn calculate_row_usage_of_witness_block(
3435 . sum:: <usize >( ) ,
3536 rows,
3637 ) ;
37- let row_usage_details: Vec < SubCircuitRowUsage > = rows
38+
39+ Ok ( rows
3840 . into_iter ( )
3941 . map ( |x| SubCircuitRowUsage {
4042 name : x. name ,
4143 row_number : x. row_num_real ,
4244 } )
43- . collect_vec ( ) ;
44- Ok ( row_usage_details)
45- }
46-
47- pub fn print_chunk_stats ( block_traces : & [ BlockTrace ] ) {
48- let num_blocks = block_traces. len ( ) ;
49- let num_txs = block_traces
50- . iter ( )
51- . map ( |b| b. transactions . len ( ) )
52- . sum :: < usize > ( ) ;
53- let total_tx_len = block_traces
54- . iter ( )
55- . flat_map ( |b| b. transactions . iter ( ) . map ( |t| t. data . len ( ) ) )
56- . sum :: < usize > ( ) ;
57- log:: info!(
58- "check capacity of block traces, num_block {}, num_tx {}, tx total len {}" ,
59- num_blocks,
60- num_txs,
61- total_tx_len
62- ) ;
45+ . collect_vec ( ) )
6346}
6447
65- pub fn dummy_witness_block ( ) -> Result < Block > {
48+ pub fn dummy_witness_block ( ) -> anyhow :: Result < Block > {
6649 log:: debug!( "generate dummy witness block" ) ;
6750 let dummy_chain_id = 0 ;
6851 let witness_block = zkevm_circuits:: witness:: dummy_witness_block ( dummy_chain_id) ;
6952 log:: debug!( "generate dummy witness block done" ) ;
7053 Ok ( witness_block)
7154}
7255
73- pub fn block_traces_to_witness_block ( block_traces : Vec < BlockTrace > ) -> Result < Block > {
56+ pub fn block_traces_to_witness_block (
57+ block_traces : Vec < BlockTrace > ,
58+ ) -> Result < Block , ChunkProverError > {
7459 if block_traces. is_empty ( ) {
75- bail ! ( "use dummy_witness_block instead" ) ;
60+ return Err ( ChunkProverError :: Custom (
61+ "empty block traces! hint: use dummy_witness_block instead" . to_string ( ) ,
62+ ) ) ;
7663 }
7764 let block_num = block_traces. len ( ) ;
7865 let total_tx_num = block_traces
7966 . iter ( )
8067 . map ( |b| b. transactions . len ( ) )
8168 . sum :: < usize > ( ) ;
8269 if total_tx_num > MAX_TXS {
83- bail ! (
70+ return Err ( ChunkProverError :: Custom ( format ! (
8471 "tx num overflow {}, block range {} to {}" ,
8572 total_tx_num,
8673 block_traces[ 0 ] . header. number. unwrap( ) ,
8774 block_traces[ block_num - 1 ] . header. number. unwrap( )
88- ) ;
75+ ) ) ) ;
8976 }
9077 log:: info!(
9178 "block_traces_to_witness_block, block num {}, tx num {}" ,
@@ -116,8 +103,18 @@ pub fn block_traces_to_witness_block(block_traces: Vec<BlockTrace>) -> Result<Bl
116103 Ok ( witness_block)
117104}
118105
106+ pub fn chunk_trace_to_witness_block (
107+ chunk_trace : Vec < BlockTrace > ,
108+ ) -> Result < Block , ChunkProverError > {
109+ if chunk_trace. is_empty ( ) {
110+ return Err ( ChunkProverError :: Custom ( "Empty chunk trace" . to_string ( ) ) ) ;
111+ }
112+ print_chunk_stats ( & chunk_trace) ;
113+ block_traces_to_witness_block ( chunk_trace)
114+ }
115+
119116/// Finalize building and return witness block
120- pub fn finalize_builder ( builder : & mut CircuitInputBuilder ) -> Result < Block > {
117+ pub fn finalize_builder ( builder : & mut CircuitInputBuilder ) -> Result < Block , CircuitBuilderError > {
121118 builder. finalize_building ( ) ?;
122119
123120 log:: debug!( "converting builder.block to witness block" ) ;
@@ -152,3 +149,21 @@ pub fn finalize_builder(builder: &mut CircuitInputBuilder) -> Result<Block> {
152149
153150 Ok ( witness_block)
154151}
152+
153+ fn print_chunk_stats ( block_traces : & [ BlockTrace ] ) {
154+ let num_blocks = block_traces. len ( ) ;
155+ let num_txs = block_traces
156+ . iter ( )
157+ . map ( |b| b. transactions . len ( ) )
158+ . sum :: < usize > ( ) ;
159+ let total_tx_len = block_traces
160+ . iter ( )
161+ . flat_map ( |b| b. transactions . iter ( ) . map ( |t| t. data . len ( ) ) )
162+ . sum :: < usize > ( ) ;
163+ log:: info!(
164+ "check capacity of block traces, num_block {}, num_tx {}, tx total len {}" ,
165+ num_blocks,
166+ num_txs,
167+ total_tx_len
168+ ) ;
169+ }
0 commit comments