Skip to content

Commit bb1d05a

Browse files
shamatarrobik75
authored andcommitted
reduce number of verifier binaries
1 parent 361e73f commit bb1d05a

23 files changed

+752
-917
lines changed

execution_utils/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ clap = { workspace = true }
2020
serde = { workspace = true }
2121
sha3 = { workspace = true }
2222
serde_json = "*"
23-
full_statement_verifier = { path = "../full_statement_verifier", optional = true }
23+
full_statement_verifier = { path = "../full_statement_verifier", default-features = false }
2424
prover_examples = { path = "../circuit_defs/prover_examples", optional = true }
2525

2626
[dev-dependencies]
@@ -29,8 +29,8 @@ prover_examples = { path = "../circuit_defs/prover_examples" }
2929
full_statement_verifier = { path = "../full_statement_verifier" }
3030

3131
[features]
32-
verifier_80 = ["full_statement_verifier", "full_statement_verifier/security_80", "full_statement_verifier/replace_csr"]
33-
verifier_100 = ["full_statement_verifier", "full_statement_verifier/security_100", "full_statement_verifier/replace_csr"]
32+
verifier_80 = ["full_statement_verifier/verifiers", "full_statement_verifier/security_80", "full_statement_verifier/replace_csr"]
33+
verifier_100 = ["full_statement_verifier/verifiers", "full_statement_verifier/security_100", "full_statement_verifier/replace_csr"]
3434
prover = ["prover_examples"]
3535
verifier_binaries = []
3636
# Will evaluate quotient on main domain for debug

execution_utils/src/unified_circuit.rs

Lines changed: 35 additions & 180 deletions
Original file line numberDiff line numberDiff line change
@@ -60,196 +60,54 @@ pub fn compute_unified_setup_for_machine_configuration<C: MachineConfig>(
6060
)
6161
}
6262

63-
// #[cfg(any(feature = "verifier_80", feature = "verifier_100"))]
64-
// pub fn verify_unrolled_base_layer_for_machine_configuration<C: MachineConfig>(
65-
// proof: &UnrolledProgramProof,
66-
// setup: &UnrolledProgramSetup,
67-
// ) -> Result<[u32; 16], ()> {
68-
// for (k, v) in proof.circuit_families_proofs.iter() {
69-
// println!("{} proofs for family {}", v.len(), k);
70-
// }
71-
72-
// let responses = proof.flatten_into_responses(C::ALLOWED_DELEGATION_CSRS);
73-
74-
// let params = if setups::is_default_machine_configuration::<C>() {
75-
// full_statement_verifier::unrolled_proof_statement::FULL_MACHINE_UNROLLED_CIRCUITS_VERIFICATION_PARAMETERS
76-
// } else if setups::is_machine_without_signed_mul_div_configuration::<C>() {
77-
// full_statement_verifier::unrolled_proof_statement::FULL_UNSIGNED_MACHINE_UNROLLED_CIRCUITS_VERIFICATION_PARAMETERS
78-
// } else if setups::is_reduced_machine_configuration::<C>() {
79-
// full_statement_verifier::unrolled_proof_statement::RECURSION_WORD_ONLY_UNSIGNED_MACHINE_UNROLLED_CIRCUITS_VERIFICATION_PARAMETERS
80-
// } else {
81-
// panic!("Unknown configuration {:?}", std::any::type_name::<C>());
82-
// };
83-
84-
// println!("Running the verifier");
85-
86-
// let families_setups: Vec<_> = setup
87-
// .circuit_families_setups
88-
// .iter()
89-
// .map(|el| *el.1)
90-
// .collect();
91-
// let inits_and_teardowns_setup = setup.inits_and_teardowns_setup;
92-
93-
// let result = std::thread::Builder::new()
94-
// .name("verifier thread".to_string())
95-
// .stack_size(1 << 27)
96-
// .spawn(move || {
97-
98-
// let families_setups_refs: Vec<_> = families_setups.iter().map(|el| el).collect();
99-
// let it = responses.into_iter();
100-
// prover::nd_source_std::set_iterator(it);
101-
102-
// #[allow(invalid_value)]
103-
// let regs = unsafe {
104-
// full_statement_verifier::unrolled_proof_statement::verify_full_statement_for_unrolled_circuits::<true, { setups::inits_and_teardowns::NUM_INIT_AND_TEARDOWN_SETS }>(
105-
// &families_setups_refs,
106-
// params,
107-
// (&inits_and_teardowns_setup, full_statement_verifier::unrolled_proof_statement::INITS_AND_TEARDOWNS_VERIFIER_PTR),
108-
// full_statement_verifier::BASE_LAYER_DELEGATION_CIRCUITS_VERIFICATION_PARAMETERS,
109-
// )
110-
// };
111-
112-
// regs
113-
// })
114-
// .expect("must spawn verifier thread").join();
115-
116-
// result.map_err(|_| ())
117-
// }
118-
119-
// #[cfg(any(feature = "verifier_80", feature = "verifier_100"))]
120-
// pub fn verify_unrolled_base_layer_via_full_statement_verifier(
121-
// proof: &UnrolledProgramProof,
122-
// setup: &UnrolledProgramSetup,
123-
// ) -> Result<[u32; 16], ()> {
124-
// for (k, v) in proof.circuit_families_proofs.iter() {
125-
// println!("{} proofs for family {}", v.len(), k);
126-
// }
127-
128-
// let mut responses = setup.flatten_for_recursion();
129-
// responses.extend(proof.flatten_into_responses(&[
130-
// common_constants::delegation_types::blake2s_with_control::BLAKE2S_DELEGATION_CSR_REGISTER,
131-
// common_constants::delegation_types::bigint_with_control::BIGINT_OPS_WITH_CONTROL_CSR_REGISTER,
132-
// common_constants::delegation_types::keccak_special5::KECCAK_SPECIAL5_CSR_REGISTER,
133-
// ]));
134-
135-
// println!("Running the verifier");
136-
137-
// let result = std::thread::Builder::new()
138-
// .name("verifier thread".to_string())
139-
// .stack_size(1 << 27)
140-
// .spawn(move || {
141-
// let it = responses.into_iter();
142-
// prover::nd_source_std::set_iterator(it);
143-
144-
// #[allow(invalid_value)]
145-
// let regs = unsafe {
146-
// full_statement_verifier::unrolled_proof_statement::verify_unrolled_base_layer()
147-
// };
148-
149-
// regs
150-
// })
151-
// .expect("must spawn verifier thread")
152-
// .join();
153-
154-
// result.map_err(|_| ())
155-
// }
156-
157-
#[cfg(any(feature = "verifier_80", feature = "verifier_100"))]
158-
pub fn verify_unified_recursion_layer_for_machine_configuration<C: MachineConfig>(
63+
pub fn flatten_proof_into_responses_for_unified_recursion(
15964
proof: &UnrolledProgramProof,
16065
setup: &UnrolledProgramSetup,
16166
compiled_layouts: &CompiledCircuitsSet,
162-
) -> Result<[u32; 16], ()> {
163-
use crate::unified_circuit::common_constants::REDUCED_MACHINE_CIRCUIT_FAMILY_IDX;
164-
assert_eq!(setup.circuit_families_setups.len(), 1);
165-
assert!(setup
166-
.circuit_families_setups
167-
.contains_key(&REDUCED_MACHINE_CIRCUIT_FAMILY_IDX));
168-
169-
assert_eq!(proof.circuit_families_proofs.len(), 1);
170-
assert!(proof.inits_and_teardowns_proofs.is_empty());
171-
assert!(proof.circuit_families_proofs[&REDUCED_MACHINE_CIRCUIT_FAMILY_IDX].len() > 0);
172-
173-
for (k, v) in proof.circuit_families_proofs.iter() {
174-
println!("{} proofs for family {}", v.len(), k);
175-
}
176-
177-
let responses = proof.flatten_into_responses(C::ALLOWED_DELEGATION_CSRS, compiled_layouts);
178-
179-
// let params = if setups::is_default_machine_configuration::<C>() {
180-
// panic!(
181-
// "Trying to use configuration {:?} at recursion layer",
182-
// std::any::type_name::<C>()
183-
// );
184-
// } else if setups::is_machine_without_signed_mul_div_configuration::<C>() {
185-
// panic!(
186-
// "Trying to use configuration {:?} at recursion layer",
187-
// std::any::type_name::<C>()
188-
// );
189-
// } else if setups::is_reduced_machine_configuration::<C>() {
190-
// full_statement_verifier::unrolled_proof_statement::RECURSION_WORD_ONLY_UNSIGNED_MACHINE_UNROLLED_CIRCUITS_VERIFICATION_PARAMETERS
191-
// } else {
192-
// panic!("Unknown configuration {:?}", std::any::type_name::<C>());
193-
// };
194-
195-
println!("Running the verifier");
196-
197-
let families_setups: Vec<_> = setup
198-
.circuit_families_setups
199-
.iter()
200-
.map(|el| *el.1)
201-
.collect();
202-
203-
let result = std::thread::Builder::new()
204-
.name("verifier thread".to_string())
205-
.stack_size(1 << 27)
206-
.spawn(move || {
67+
input_is_unrolled: bool,
68+
) -> Vec<u32> {
69+
let mut responses = vec![];
70+
let op = if input_is_unrolled {
71+
full_statement_verifier::definitions::OP_VERIFY_UNROLLED_RECURSION_LAYER_IN_UNIFIED_CIRCUIT
72+
} else {
73+
use crate::unified_circuit::common_constants::REDUCED_MACHINE_CIRCUIT_FAMILY_IDX;
74+
assert_eq!(setup.circuit_families_setups.len(), 1);
75+
assert!(setup
76+
.circuit_families_setups
77+
.contains_key(&REDUCED_MACHINE_CIRCUIT_FAMILY_IDX));
78+
79+
assert_eq!(proof.circuit_families_proofs.len(), 1);
80+
assert!(proof.inits_and_teardowns_proofs.is_empty());
81+
assert!(proof.circuit_families_proofs[&REDUCED_MACHINE_CIRCUIT_FAMILY_IDX].len() > 0);
82+
83+
full_statement_verifier::definitions::OP_VERIFY_UNIFIED_RECURSION_LAYER_IN_UNIFIED_CIRCUIT
84+
};
85+
responses.push(op);
86+
responses.extend(setup.flatten_for_recursion());
87+
responses.extend(proof.flatten_into_responses(&[
88+
common_constants::delegation_types::blake2s_with_control::BLAKE2S_DELEGATION_CSR_REGISTER,
89+
], compiled_layouts));
20790

208-
let families_setups_refs: Vec<_> = families_setups.iter().map(|el| el).collect();
209-
let it = responses.into_iter();
210-
prover::nd_source_std::set_iterator(it);
211-
212-
#[allow(invalid_value)]
213-
let regs = unsafe {
214-
full_statement_verifier::unified_circuit_statement::verify_unified_circuit_statement::<false>(
215-
&families_setups_refs[0],
216-
full_statement_verifier::unified_circuit_statement::REDUCED_UNIFIED_CIRCUIT_CAPACITY,
217-
full_statement_verifier::unified_circuit_statement::REDUCED_UNIFIED_CIRCUIT_VERIFIER_PTR,
218-
full_statement_verifier::BASE_LAYER_DELEGATION_CIRCUITS_VERIFICATION_PARAMETERS,
219-
)
220-
};
221-
222-
regs
223-
})
224-
.expect("must spawn verifier thread").join();
225-
226-
result.map_err(|_| ())
91+
responses
22792
}
22893

22994
#[cfg(any(feature = "verifier_80", feature = "verifier_100"))]
230-
pub fn verify_unrolled_recursion_layer_via_full_statement_verifier(
95+
pub fn verify_proof_in_unified_layer(
23196
proof: &UnrolledProgramProof,
23297
setup: &UnrolledProgramSetup,
23398
compiled_layouts: &CompiledCircuitsSet,
99+
input_is_unrolled: bool,
234100
) -> Result<[u32; 16], ()> {
235-
use crate::unified_circuit::common_constants::REDUCED_MACHINE_CIRCUIT_FAMILY_IDX;
236-
assert_eq!(setup.circuit_families_setups.len(), 1);
237-
assert!(setup
238-
.circuit_families_setups
239-
.contains_key(&REDUCED_MACHINE_CIRCUIT_FAMILY_IDX));
240-
241-
assert_eq!(proof.circuit_families_proofs.len(), 1);
242-
assert!(proof.inits_and_teardowns_proofs.is_empty());
243-
assert!(proof.circuit_families_proofs[&REDUCED_MACHINE_CIRCUIT_FAMILY_IDX].len() > 0);
244-
245101
for (k, v) in proof.circuit_families_proofs.iter() {
246102
println!("{} proofs for family {}", v.len(), k);
247103
}
248104

249-
let mut responses = setup.flatten_unified_for_recursion();
250-
responses.extend(proof.flatten_into_responses(&[
251-
common_constants::delegation_types::blake2s_with_control::BLAKE2S_DELEGATION_CSR_REGISTER,
252-
], compiled_layouts));
105+
let mut responses = flatten_proof_into_responses_for_unified_recursion(
106+
proof,
107+
setup,
108+
compiled_layouts,
109+
input_is_unrolled,
110+
);
253111

254112
println!("Running the verifier");
255113

@@ -259,10 +117,7 @@ pub fn verify_unrolled_recursion_layer_via_full_statement_verifier(
259117
let it = responses.into_iter();
260118
prover::nd_source_std::set_iterator(it);
261119

262-
#[allow(invalid_value)]
263-
let regs = unsafe {
264-
full_statement_verifier::unified_circuit_statement::verify_unified_circuit_recursion_layer()
265-
};
120+
let regs = full_statement_verifier::unified_circuit_statement::verify_unrolled_or_unified_circuit_recursion_layer();
266121

267122
regs
268123
}).map_err(|_| ());
@@ -279,7 +134,7 @@ pub fn verify_unrolled_recursion_layer_via_full_statement_verifier(
279134
let it = responses.into_iter();
280135
prover::nd_source_std::set_iterator(it);
281136

282-
let regs = full_statement_verifier::unified_circuit_statement::verify_unified_circuit_recursion_layer();
137+
let regs = full_statement_verifier::unified_circuit_statement::verify_unrolled_or_unified_circuit_recursion_layer();
283138

284139
regs
285140
})

0 commit comments

Comments
 (0)