MCPcopy Create free account
hub / github.com/ProvableHQ/sdk / snark_verify_batch

Function snark_verify_batch

wasm/src/programs/execution.rs:248–281  ·  view source on GitHub ↗
(verifying_keys: Array, inputs: Array, proof: &Proof)

Source from the content-addressed store, hash-verified

246/// @returns {boolean} True if the batch proof is valid, false otherwise
247#[wasm_bindgen(js_name = "snarkVerifyBatch")]
248pub fn snark_verify_batch(verifying_keys: Array, inputs: Array, proof: &Proof) -> Result<bool, String> {
249 if verifying_keys.length() != inputs.length() {
250 return Err(format!(
251 "Mismatch: {} verifying keys but {} input groups provided. # of input groups must match # of verifying keys.",
252 verifying_keys.length(),
253 inputs.length()
254 ));
255 }
256
257 let mut vks_with_inputs = Vec::with_capacity(verifying_keys.length() as usize);
258
259 for i in 0..verifying_keys.length() {
260 let vk_str =
261 verifying_keys.get(i).as_string().ok_or_else(|| format!("Expected verifying key string at index {i}"))?;
262 let vk_native = VerifyingKeyNative::from_str(&vk_str)
263 .map_err(|e| format!("Failed to parse verifying key at index {i}: {e}"))?;
264
265 let instances_js = Array::try_from(inputs.get(i))
266 .map_err(|_| format!("Expected array of instances for verifying key at index {i}"))?;
267 let mut instances = Vec::with_capacity(instances_js.length() as usize);
268
269 for j in 0..instances_js.length() {
270 let instance_js = Array::try_from(instances_js.get(j))
271 .map_err(|_| format!("Expected array of field element strings at indices ({i}, {j})"))?;
272 let fields = parse_field_inputs(&instance_js)?;
273 instances.push(fields);
274 }
275
276 vks_with_inputs.push((vk_native, instances));
277 }
278
279 VerifyingKeyNative::verify_batch("snark_verify_batch", VarunaVersion::V2, vks_with_inputs, proof)
280 .map_or(Ok(false), |_| Ok(true))
281}
282
283/// Parse an Array of field element strings into a Vec of raw N::Field elements.
284pub(crate) fn parse_field_inputs(inputs: &Array) -> Result<Vec<<CurrentNetwork as Environment>::Field>, String> {

Callers 1

verify_batch_staticMethod · 0.85

Calls 1

parse_field_inputsFunction · 0.85

Tested by

no test coverage detected