Skip to content

Commit 088e142

Browse files
Add option to disable prover input run, for block reexecutor
1 parent 8d03aee commit 088e142

File tree

3 files changed

+68
-50
lines changed

3 files changed

+68
-50
lines changed

tests/block_reexecutor/src/main.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ fn run(block_args: BlockArgs, tx_source: TxSource) -> Result<()> {
233233
witness_output_file: None,
234234
app: None,
235235
do_riscv_run: false,
236+
do_prover_input_run: false,
236237
update_state_after_block_execution: false,
237238
check_revm_consistency: false,
238239
check_storage_diff_hashes: false,
@@ -241,7 +242,7 @@ fn run(block_args: BlockArgs, tx_source: TxSource) -> Result<()> {
241242
let mut tracer = CallTracer::default();
242243
let mut validator = NopTxValidator;
243244

244-
let (block_output, _block_extra_stats, _proof_input) = chain
245+
let (block_output, _block_extra_stats, _proof_input, _pubdata) = chain
245246
.run_block_with_extra_stats_with_oracle_factory(
246247
transactions,
247248
Some(block_context.clone()),

tests/block_reexecutor/src/rpc_oracle.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ impl TestingOracleFactory<false> for RpcValueOracleFactory {
261261
proof_data: Option<ProofData<FlatStorageCommitment<{ TREE_HEIGHT }>>>,
262262
da_commitment_scheme: Option<DACommitmentScheme>,
263263
_add_uart: bool,
264+
_use_native_callable_oracles: bool,
264265
) -> ZkEENonDeterminismSource<DummyMemorySource> {
265266
let block_metadata_responder = BlockMetadataResponder { block_metadata };
266267
let tx_data_responder = TxDataResponder {
@@ -302,6 +303,7 @@ impl TestingOracleFactory<false> for RpcValueOracleFactory {
302303
_proof_data: Option<ProofData<FlatStorageCommitment<{ TREE_HEIGHT }>>>,
303304
_da_commitment_scheme: Option<DACommitmentScheme>,
304305
_add_uart: bool,
306+
_use_native_callable_oracles: bool,
305307
) -> ZkEENonDeterminismSource<VectorMemoryImpl> {
306308
// Note: block reexecutor does not use proof oracle
307309
ZkEENonDeterminismSource::default()

tests/rig/src/chain.rs

Lines changed: 64 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ pub struct RunConfig {
197197
pub app: Option<String>,
198198
// Run RISC-V simulation
199199
pub do_riscv_run: bool,
200+
// Run the prover input generation stop. Must be enabled if [do_riscv_run] is enabled.
201+
pub do_prover_input_run: bool,
200202
// Whether to check that storage diff hashes from forward and proof runs match
201203
// Only to be used when state-diffs-pi feature is enabled in the binary and
202204
// do_riscv_run is true
@@ -223,6 +225,7 @@ impl Default for RunConfig {
223225
RunConfig {
224226
app: Some("for_tests".to_string()),
225227
do_riscv_run,
228+
do_prover_input_run: true,
226229
check_storage_diff_hashes: do_riscv_run, // Enable storage diff hash checks when doing RISC-V run
227230
check_revm_consistency,
228231
profiler_config: None,
@@ -781,6 +784,7 @@ impl<const RANDOMIZED_TREE: bool> Chain<RANDOMIZED_TREE> {
781784
witness_output_file,
782785
app,
783786
do_riscv_run,
787+
do_prover_input_run,
784788
check_storage_diff_hashes,
785789
check_revm_consistency: _,
786790
update_state_after_block_execution,
@@ -837,17 +841,6 @@ impl<const RANDOMIZED_TREE: bool> Chain<RANDOMIZED_TREE> {
837841
false,
838842
);
839843

840-
let prover_input_oracle = oracle_factory.create_forward_oracle(
841-
block_metadata,
842-
self.state_tree.clone(),
843-
self.preimage_source.clone(),
844-
tx_source.clone(),
845-
Some(proof_data),
846-
Some(da_commitment_scheme),
847-
false,
848-
true,
849-
);
850-
851844
#[cfg(feature = "simulate_witness_gen")]
852845
let source_for_witness_bench = {
853846
oracle_factory.create_proof_oracle(
@@ -874,50 +867,72 @@ impl<const RANDOMIZED_TREE: bool> Chain<RANDOMIZED_TREE> {
874867
validator,
875868
)?;
876869

877-
let mut result_keeper_prover_input = ProverInputResultKeeper::new(NoopTxCallback);
878-
879-
let copy_source = ReadWitnessSource::new(prover_input_oracle);
880-
let mut tracer = NopTracer::default();
881-
let mut validator = NopTxValidator;
882-
let prover_input_forward = {
883-
// Avoid capturing markers from the second run, as it would duplicate them.
884-
#[cfg(feature = "cycle_marker")]
885-
let snapshot = cycle_marker::snapshot();
886-
let result = run_prover_input_no_panic::<BasicBootloaderProvingExecutionConfig>(
887-
copy_source,
888-
&mut result_keeper_prover_input,
889-
&mut tracer,
890-
&mut validator,
870+
let block_output: BlockOutput = result_keeper.into();
871+
872+
let (prover_input_forward, pubdata, has_filtered_by_validator) = if do_prover_input_run {
873+
let mut result_keeper_prover_input = ProverInputResultKeeper::new(NoopTxCallback);
874+
875+
let prover_input_oracle = oracle_factory.create_forward_oracle(
876+
block_metadata,
877+
self.state_tree.clone(),
878+
self.preimage_source.clone(),
879+
tx_source.clone(),
880+
Some(proof_data),
881+
Some(da_commitment_scheme),
882+
false,
883+
true,
891884
);
892-
#[cfg(feature = "cycle_marker")]
893-
cycle_marker::revert(snapshot);
894-
result?
895-
};
885+
let copy_source = ReadWitnessSource::new(prover_input_oracle);
886+
let mut tracer = NopTracer::default();
887+
let mut validator = NopTxValidator;
888+
let prover_input_forward = {
889+
// Avoid capturing markers from the second run, as it would duplicate them.
890+
#[cfg(feature = "cycle_marker")]
891+
let snapshot = cycle_marker::snapshot();
892+
let result = run_prover_input_no_panic::<BasicBootloaderProvingExecutionConfig>(
893+
copy_source,
894+
&mut result_keeper_prover_input,
895+
&mut tracer,
896+
&mut validator,
897+
);
898+
#[cfg(feature = "cycle_marker")]
899+
cycle_marker::revert(snapshot);
900+
result?
901+
};
896902

897-
if let Some(path) = witness_output_file {
898-
let mut file = File::create(&path).expect("should create file");
899-
let witness: Vec<u8> = prover_input_forward
900-
.iter()
901-
.flat_map(|x| x.to_be_bytes())
902-
.collect();
903-
let hex = hex::encode(witness);
904-
file.write_all(hex.as_bytes())
905-
.expect("should write to file");
906-
}
903+
if let Some(path) = witness_output_file {
904+
let mut file = File::create(&path).expect("should create file");
905+
let witness: Vec<u8> = prover_input_forward
906+
.iter()
907+
.flat_map(|x| x.to_be_bytes())
908+
.collect();
909+
let hex = hex::encode(witness);
910+
file.write_all(hex.as_bytes())
911+
.expect("should write to file");
912+
}
907913

908-
let block_output: BlockOutput = result_keeper.into();
909-
let pubdata = result_keeper_prover_input.pubdata.clone();
910-
let prover_input_block_output: BlockOutput = result_keeper_prover_input.into();
911-
let has_filtered_by_validator = has_validator_filtered_tx(&block_output);
912-
if has_filtered_by_validator {
913-
warn!(
914-
"Skipping forward/prover-input output equivalence checks because the custom \
914+
let pubdata = result_keeper_prover_input.pubdata.clone();
915+
let prover_input_block_output: BlockOutput = result_keeper_prover_input.into();
916+
let has_filtered_by_validator = has_validator_filtered_tx(&block_output);
917+
if has_filtered_by_validator {
918+
warn!(
919+
"Skipping forward/prover-input output equivalence checks because the custom \
915920
validator filtered at least one transaction, and prover-input replay uses \
916921
NopTxValidator"
917-
);
922+
);
923+
} else {
924+
assert_block_outputs_match(&block_output, &prover_input_block_output);
925+
}
926+
(prover_input_forward, pubdata, has_filtered_by_validator)
918927
} else {
919-
assert_block_outputs_match(&block_output, &prover_input_block_output);
920-
}
928+
// We use the forward prover input run outputs to validate the risc-v run,
929+
// so we check consistency in config
930+
assert!(
931+
!do_riscv_run,
932+
"Native prover input run should be performed if risc v run is enabled"
933+
);
934+
(vec![], vec![], false)
935+
};
921936

922937
trace!(
923938
"{}Block output:{} \n{:#?}",

0 commit comments

Comments
 (0)