Skip to content
This repository was archived by the owner on Jul 5, 2024. It is now read-only.

Commit ab43142

Browse files
committed
rewrite logic to support both chronological/by address rw_table padding
1 parent 31bf030 commit ab43142

File tree

22 files changed

+238
-153
lines changed

22 files changed

+238
-153
lines changed

bus-mapping/src/circuit_input_builder/chunk.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ pub struct ChunkContext {
2525
/// Index of current chunk, start from 0
2626
pub idx: usize,
2727
/// Used to track the inner chunk counter in every operation in the chunk.
28+
/// it will be reset for every new chunk.
2829
/// Contains the next available value.
2930
pub rwc: RWCounter,
3031
/// Number of chunks
@@ -41,7 +42,7 @@ pub struct ChunkContext {
4142
pub initial_copy_index: usize,
4243
///
4344
pub end_copy_index: usize,
44-
/// Druing dry run, chuncking is desabled
45+
/// Druing dry run, chuncking is disabled
4546
pub enable: bool,
4647
}
4748

circuit-benchmarks/src/copy_circuit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ mod tests {
156156
.handle_block(&block.eth_block, &block.geth_traces)
157157
.unwrap();
158158
let block = block_convert(&builder).unwrap();
159-
let chunk = chunk_convert(&builder, 0).unwrap();
159+
let chunk = chunk_convert(&block, &builder).unwrap().remove(0);
160160
assert_eq!(block.copy_events.len(), copy_event_num);
161161
(block, chunk)
162162
}

circuit-benchmarks/src/evm_circuit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ mod evm_circ_benches {
5454
.unwrap();
5555

5656
let block = block_convert(&builder).unwrap();
57-
let chunk = chunk_convert(&builder, 0).unwrap();
57+
let chunk = chunk_convert(&block, &builder).unwrap().remove(0);
5858

5959
let circuit = TestEvmCircuit::<Fr>::new(block, chunk);
6060
let mut rng = XorShiftRng::from_seed([

circuit-benchmarks/src/exp_circuit.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,8 @@ mod tests {
149149
.new_circuit_input_builder()
150150
.handle_block(&block.eth_block, &block.geth_traces)
151151
.unwrap();
152-
(
153-
block_convert(&builder).unwrap(),
154-
chunk_convert(&builder, 0).unwrap(),
155-
)
152+
let block = block_convert(&builder).unwrap();
153+
let chunk = chunk_convert(&block, &builder).unwrap().remove(0);
154+
(block, chunk)
156155
}
157156
}

integration-tests/src/integration_test_circuits.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ impl<C: SubCircuit<Fr> + Circuit<Fr>> IntegrationTest<C> {
424424
block_tag,
425425
);
426426
let mut block = block_convert(&builder).unwrap();
427-
let chunk = chunk_convert(&builder, 0).unwrap();
427+
let chunk = chunk_convert(&block, &builder).unwrap().remove(0);
428428
block.randomness = Fr::from(TEST_MOCK_RANDOMNESS);
429429
let circuit = C::new_from_block(&block, &chunk);
430430
let instance = circuit.instance();
@@ -441,7 +441,7 @@ impl<C: SubCircuit<Fr> + Circuit<Fr>> IntegrationTest<C> {
441441
);
442442

443443
// get chronological_rwtable and byaddr_rwtable columns index
444-
let mut cs = ConstraintSystem::<<Bn256 as Engine>::Scalar>::default();
444+
let mut cs = ConstraintSystem::<<Bn256 as Engine>::Fr>::default();
445445
let config = SuperCircuit::configure(&mut cs);
446446
let rwtable_columns = config.get_rwtable_columns();
447447

@@ -515,10 +515,9 @@ fn new_empty_block_chunk() -> (Block<Fr>, Chunk<Fr>) {
515515
.new_circuit_input_builder()
516516
.handle_block(&block.eth_block, &block.geth_traces)
517517
.unwrap();
518-
(
519-
block_convert(&builder).unwrap(),
520-
chunk_convert(&builder, 0).unwrap(),
521-
)
518+
let block = block_convert(&builder).unwrap();
519+
let chunk = chunk_convert(&block, &builder).unwrap().remove(0);
520+
(block, chunk)
522521
}
523522

524523
fn get_general_params(degree: u32) -> ParamsKZG<Bn256> {

testool/src/statetest/executor.rs

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,8 @@ use std::{collections::HashMap, str::FromStr};
1616
use thiserror::Error;
1717
use zkevm_circuits::{
1818
super_circuit::SuperCircuit,
19-
<<<<<<< HEAD
20-
test_util::CircuitTestBuilder,
21-
witness::{Block, Chunk},
22-
=======
2319
test_util::{CircuitTestBuilder, CircuitTestError},
24-
witness::Block,
25-
>>>>>>> main
20+
witness::{Block, Chunk},
2621
};
2722

2823
#[derive(PartialEq, Eq, Error, Debug)]
@@ -354,12 +349,11 @@ pub fn run_test(
354349
let block: Block<Fr> =
355350
zkevm_circuits::evm_circuit::witness::block_convert(&builder).unwrap();
356351
let chunk: Chunk<Fr> =
357-
zkevm_circuits::evm_circuit::witness::chunk_convert(&builder, 0).unwrap();
352+
zkevm_circuits::evm_circuit::witness::chunk_convert(&block, &builder)
353+
.unwrap()
354+
.remove(0);
358355

359-
<<<<<<< HEAD
360-
CircuitTestBuilder::<1, 1>::new_from_block(block, chunk).run();
361-
=======
362-
CircuitTestBuilder::<1, 1>::new_from_block(block)
356+
CircuitTestBuilder::<1, 1>::new_from_block(block, chunk)
363357
.run_with_result()
364358
.map_err(|err| match err {
365359
CircuitTestError::VerificationFailed { reasons, .. } => {
@@ -373,7 +367,6 @@ pub fn run_test(
373367
found: err.to_string(),
374368
},
375369
})?;
376-
>>>>>>> main
377370
} else {
378371
geth_data.sign(&wallets);
379372

zkevm-circuits/src/copy_circuit.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -859,8 +859,8 @@ impl<F: Field> SubCircuit<F> for CopyCircuit<F> {
859859
max_calldata: chunk.fixed_param.max_calldata,
860860
txs: block.txs.clone(),
861861
max_rws: chunk.fixed_param.max_rws,
862-
rws: chunk.rws.clone(),
863-
prev_chunk_last_rw: chunk.prev_chunk_last_rw,
862+
rws: chunk.chrono_rws.clone(),
863+
prev_chunk_last_rw: chunk.prev_chunk_last_chrono_rw,
864864
bytecodes: block.bytecodes.clone(),
865865
},
866866
)

zkevm-circuits/src/copy_circuit/test.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ pub fn test_copy_circuit_from_block<F: Field>(
5858
max_calldata: chunk.fixed_param.max_calldata,
5959
txs: block.txs,
6060
max_rws: chunk.fixed_param.max_rws,
61-
rws: chunk.rws,
62-
prev_chunk_last_rw: chunk.prev_chunk_last_rw,
61+
rws: chunk.chrono_rws,
62+
prev_chunk_last_rw: chunk.prev_chunk_last_chrono_rw,
6363
bytecodes: block.bytecodes,
6464
},
6565
)
@@ -180,39 +180,39 @@ fn gen_tx_log_data() -> CircuitInputBuilder<FixedCParams> {
180180
fn copy_circuit_valid_calldatacopy() {
181181
let builder = gen_calldatacopy_data();
182182
let block = block_convert::<Fr>(&builder).unwrap();
183-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
183+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
184184
assert_eq!(test_copy_circuit_from_block(14, block, chunk), Ok(()));
185185
}
186186

187187
#[test]
188188
fn copy_circuit_valid_codecopy() {
189189
let builder = gen_codecopy_data();
190190
let block = block_convert::<Fr>(&builder).unwrap();
191-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
191+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
192192
assert_eq!(test_copy_circuit_from_block(10, block, chunk), Ok(()));
193193
}
194194

195195
#[test]
196196
fn copy_circuit_valid_extcodecopy() {
197197
let builder = gen_extcodecopy_data();
198198
let block = block_convert::<Fr>(&builder).unwrap();
199-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
199+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
200200
assert_eq!(test_copy_circuit_from_block(14, block, chunk), Ok(()));
201201
}
202202

203203
#[test]
204204
fn copy_circuit_valid_sha3() {
205205
let builder = gen_sha3_data();
206206
let block = block_convert::<Fr>(&builder).unwrap();
207-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
207+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
208208
assert_eq!(test_copy_circuit_from_block(14, block, chunk), Ok(()));
209209
}
210210

211211
#[test]
212212
fn copy_circuit_valid_tx_log() {
213213
let builder = gen_tx_log_data();
214214
let block = block_convert::<Fr>(&builder).unwrap();
215-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
215+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
216216
assert_eq!(test_copy_circuit_from_block(10, block, chunk), Ok(()));
217217
}
218218

@@ -225,7 +225,7 @@ fn copy_circuit_invalid_calldatacopy() {
225225
builder.block.copy_events[0].bytes[0].0.wrapping_add(1);
226226

227227
let block = block_convert::<Fr>(&builder).unwrap();
228-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
228+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
229229

230230
assert_error_matches(
231231
test_copy_circuit_from_block(14, block, chunk),
@@ -242,7 +242,7 @@ fn copy_circuit_invalid_codecopy() {
242242
builder.block.copy_events[0].bytes[0].0.wrapping_add(1);
243243

244244
let block = block_convert::<Fr>(&builder).unwrap();
245-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
245+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
246246

247247
assert_error_matches(
248248
test_copy_circuit_from_block(10, block, chunk),
@@ -259,7 +259,7 @@ fn copy_circuit_invalid_extcodecopy() {
259259
builder.block.copy_events[0].bytes[0].0.wrapping_add(1);
260260

261261
let block = block_convert::<Fr>(&builder).unwrap();
262-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
262+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
263263

264264
assert_error_matches(
265265
test_copy_circuit_from_block(14, block, chunk),
@@ -276,7 +276,7 @@ fn copy_circuit_invalid_sha3() {
276276
builder.block.copy_events[0].bytes[0].0.wrapping_add(1);
277277

278278
let block = block_convert::<Fr>(&builder).unwrap();
279-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
279+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
280280

281281
assert_error_matches(
282282
test_copy_circuit_from_block(14, block, chunk),
@@ -293,7 +293,7 @@ fn copy_circuit_invalid_tx_log() {
293293
builder.block.copy_events[0].bytes[0].0.wrapping_add(1);
294294

295295
let block = block_convert::<Fr>(&builder).unwrap();
296-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
296+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
297297

298298
assert_error_matches(
299299
test_copy_circuit_from_block(10, block, chunk),

zkevm-circuits/src/evm_circuit.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -334,9 +334,9 @@ impl<F: Field> SubCircuit<F> for EvmCircuit<F> {
334334
.assign_block(layouter, block, chunk, challenges)?;
335335

336336
let (rw_rows_padding, _) = RwMap::table_assignments_padding(
337-
&chunk.rws.table_assignments(true),
337+
&chunk.chrono_rws.table_assignments(true),
338338
chunk.fixed_param.max_rws,
339-
chunk.prev_chunk_last_rw,
339+
chunk.prev_chunk_last_chrono_rw,
340340
);
341341
let (
342342
alpha_cell,
@@ -353,10 +353,10 @@ impl<F: Field> SubCircuit<F> for EvmCircuit<F> {
353353
&mut region,
354354
// pass non-padding rws to `load_with_region` since it will be padding
355355
// inside
356-
&chunk.rws.table_assignments(true),
356+
&chunk.chrono_rws.table_assignments(true),
357357
// align with state circuit to padding to same max_rws
358358
chunk.fixed_param.max_rws,
359-
chunk.prev_chunk_last_rw,
359+
chunk.prev_chunk_last_chrono_rw,
360360
)?;
361361
let permutation_cells = config.rw_permutation_config.assign(
362362
&mut region,
@@ -565,7 +565,7 @@ impl<F: Field> Circuit<F> for EvmCircuit<F> {
565565
chunk.fixed_param.max_txs,
566566
chunk.fixed_param.max_calldata,
567567
)?;
568-
chunk.rws.check_rw_counter_sanity();
568+
chunk.chrono_rws.check_rw_counter_sanity();
569569
config
570570
.bytecode_table
571571
.load(&mut layouter, block.bytecodes.clone())?;
@@ -698,7 +698,7 @@ mod evm_circuit_stats {
698698
.handle_block(&block.eth_block, &block.geth_traces)
699699
.unwrap();
700700
let block = block_convert::<Fr>(&builder).unwrap();
701-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
701+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
702702
let k = block.get_test_degree(&chunk);
703703
let circuit = EvmCircuit::<Fr>::get_test_circuit_from_block(block, chunk);
704704
let instance = circuit.instance_extend_chunk_ctx();
@@ -723,7 +723,7 @@ mod evm_circuit_stats {
723723
.handle_block(&block.eth_block, &block.geth_traces)
724724
.unwrap();
725725
let block = block_convert::<Fr>(&builder).unwrap();
726-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
726+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
727727
let k = block.get_test_degree(&chunk);
728728

729729
let circuit = EvmCircuit::<Fr>::get_test_circuit_from_block(block, chunk);
@@ -746,7 +746,7 @@ mod evm_circuit_stats {
746746
.handle_block(&block.eth_block, &block.geth_traces)
747747
.unwrap();
748748
let block = block_convert::<Fr>(&builder).unwrap();
749-
let chunk = chunk_convert::<Fr>(&builder, 0).unwrap();
749+
let chunk = chunk_convert::<Fr>(&block, &builder).unwrap().remove(0);
750750
let k = block.get_test_degree(&chunk);
751751
let circuit = EvmCircuit::<Fr>::get_test_circuit_from_block(block, chunk);
752752
let instance = circuit.instance_extend_chunk_ctx();

zkevm-circuits/src/evm_circuit/execution/end_chunk.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ impl<F: Field> ExecutionGadget<F> for EndChunkGadget<F> {
2929
const EXECUTION_STATE: ExecutionState = ExecutionState::EndChunk;
3030

3131
fn configure(cb: &mut EVMConstraintBuilder<F>) -> Self {
32-
// State transition
32+
// State transition on non-last evm step
33+
// TODO/FIXME make EndChunk must be in last evm step and remove below constraint
3334
cb.not_step_last(|cb| {
3435
// Propagate all the way down.
3536
cb.require_step_state_transition(StepStateTransition::same());
@@ -102,7 +103,7 @@ mod test {
102103
// }
103104
println!(
104105
"=> FIXME is fixed? {:?}",
105-
chunk.rws.0.get_mut(&Target::Start)
106+
chunk.chrono_rws.0.get_mut(&Target::Start)
106107
);
107108
}))
108109
.run_dynamic_chunk(4, 2);

0 commit comments

Comments
 (0)