use super::*;
#[test]
#[should_panic]
fn test_wrapper_prover() {
let mut prover = allocate_default_prover();
let wrapper_config = zkevm_test_harness::proof_wrapper_utils::DEFAULT_WRAPPER_CONFIG;
let scheduler_vk = get_scheduler_vk_from_local_source();
let scheduler_proof = get_scheduler_proof_from_local_source();
let bad_scheduler_vk = get_bad_scheduler_vk();
let bad_scheduler_proof = get_bad_scheduler_proof();
prover
.generate_setup_data(scheduler_vk.into_inner())
.unwrap();
prover
.generate_proofs(scheduler_proof.clone().into_inner())
.unwrap();
let snark_vk = prover.get_wrapper_vk().unwrap();
let snark_proof = prover.get_wrapper_proof().unwrap();
let inner_source = prover.source();
let wrapper_type = wrapper_config.get_wrapper_type();
let _compression_for_wrapper_vk = inner_source
.get_compression_for_wrapper_vk(wrapper_type)
.unwrap();
let is_valid =
verify::<_, _, RollingKeccakTranscript<Fr>>(&snark_vk, &snark_proof, None).unwrap();
assert!(is_valid);
prover
.generate_proofs(scheduler_proof.clone().into_inner())
.unwrap();
let result = prover.generate_proofs(bad_scheduler_proof.into_inner());
assert!(result.is_err());
let result = prover.generate_setup_data(bad_scheduler_vk.into_inner());
assert!(result.is_err());
assert!(!prover.setup_is_ready());
prover
.generate_proofs(scheduler_proof.into_inner())
.unwrap();
}
#[test]
fn test_vk_generation() {
let mut prover = allocate_default_prover();
let scheduler_vk = get_scheduler_vk_from_local_source();
prover
.generate_setup_data(scheduler_vk.into_inner())
.unwrap();
let scheduler_vk = get_scheduler_vk_from_local_source();
use zkevm_test_harness::proof_wrapper_utils::get_wrapper_setup_and_vk_from_scheduler_vk;
let wrapper_config = zkevm_test_harness::proof_wrapper_utils::DEFAULT_WRAPPER_CONFIG;
let snark_vk_from_prover = prover.get_wrapper_vk();
let (_, snark_vk) = get_wrapper_setup_and_vk_from_scheduler_vk(scheduler_vk, wrapper_config);
dbg!(snark_vk.into_inner(), snark_vk_from_prover);
}
fn allocate_default_prover() -> WrapperProver<GPUWrapperConfigs> {
let crs = get_trusted_setup();
let wrapper_config = zkevm_test_harness::proof_wrapper_utils::DEFAULT_WRAPPER_CONFIG;
WrapperProver::<GPUWrapperConfigs>::new(&crs, wrapper_config).unwrap()
}
fn get_scheduler_vk_from_local_source() -> ZkSyncRecursionLayerVerificationKey {
let source = LocalFileDataSource::default();
source
.get_recursion_layer_vk(ZkSyncRecursionLayerStorageType::SchedulerCircuit as u8)
.expect("There should be scheduler vk in local storage")
}
fn get_bad_scheduler_vk() -> ZkSyncRecursionLayerVerificationKey {
let mut bad_scheduler_vk = get_scheduler_vk_from_local_source().into_inner();
bad_scheduler_vk.setup_merkle_tree_cap.pop();
ZkSyncRecursionLayerStorage::SchedulerCircuit(bad_scheduler_vk)
}
fn get_scheduler_proof_from_local_source() -> ZkSyncRecursionLayerProof {
let source = LocalFileDataSource::default();
source
.get_scheduler_proof()
.expect("There should be scheduler proof in local storage")
}
fn get_bad_scheduler_proof() -> ZkSyncRecursionLayerProof {
let mut bad_scheduler_proof = get_scheduler_proof_from_local_source().into_inner();
bad_scheduler_proof.stage_2_oracle_cap.pop();
ZkSyncRecursionLayerStorage::SchedulerCircuit(bad_scheduler_proof)
}