Skip to content

Commit b4b7029

Browse files
committed
feat: airbender verifier
1 parent 49c20fd commit b4b7029

File tree

2 files changed

+79
-2
lines changed

2 files changed

+79
-2
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
//! Airbender STARK proof verifier
2+
//!
3+
//! This module implements proof verification for Airbender zkVM.
4+
//! Currently a placeholder implementation - full verification logic will be implemented separately.
5+
6+
use super::{ProofVerifier, VerificationResult};
7+
use tracing::debug;
8+
9+
/// Airbender verifier
10+
///
11+
/// Placeholder implementation for Airbender STARK proof verification.
12+
/// Returns true for any valid proof data.
13+
pub struct AirbenderVerifier;
14+
15+
impl ProofVerifier for AirbenderVerifier {
16+
fn verify(proof_data: &[u8], _vk_data: &[u8]) -> VerificationResult {
17+
debug!(
18+
proof_size = proof_data.len(),
19+
"Starting Airbender verification (placeholder)"
20+
);
21+
22+
// Validate proof data is not empty
23+
if proof_data.is_empty() {
24+
debug!("Invalid input: proof data is empty");
25+
return Ok(false);
26+
}
27+
28+
// Placeholder: always return true for valid proof data
29+
// TODO(ethproofs): Implement full verification logic with execution_utils
30+
debug!("Airbender verification placeholder - returning true");
31+
Ok(true)
32+
}
33+
34+
fn name() -> &'static str {
35+
"airbender"
36+
}
37+
}
38+
39+
#[cfg(test)]
40+
mod tests {
41+
use super::*;
42+
43+
#[test]
44+
fn test_airbender_verifier_name() {
45+
assert_eq!(AirbenderVerifier::name(), "airbender");
46+
}
47+
48+
#[test]
49+
fn test_airbender_empty_proof() {
50+
// Empty proof data should return false
51+
let result = AirbenderVerifier::verify(&[], &[]);
52+
assert!(result.is_ok());
53+
assert!(!result.unwrap());
54+
}
55+
56+
#[test]
57+
fn test_airbender_valid_proof() {
58+
// Valid proof data should return true
59+
let result = AirbenderVerifier::verify(&[1u8; 32], &[]);
60+
assert!(result.is_ok());
61+
assert!(result.unwrap());
62+
}
63+
}

zkvm_execution_layer/src/verifiers/mod.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
//! This module manages different proof verification systems based on prover type.
44
//! Each verifier implements cryptographic proof verification for a specific zkVM or proof system.
55
6+
pub mod airbender;
67
pub mod fallback;
78
pub mod openvm;
89
pub mod pico;
@@ -37,6 +38,9 @@ pub mod ethproofs_ids {
3738
/// Used for dummy proofs when Ethproofs API fails or times out
3839
pub const FALLBACK_UUID: &str = "00000000-0000-0000-0000-000000000000";
3940

41+
/// Airbender verifier UUID (proof_id = 1)
42+
pub const AIRBENDER_UUID: &str = "b18507c4-50f3-4638-854a-ed625c7e685a";
43+
4044
/// OpenVM verifier UUID (proof_id = 2)
4145
pub const OPENVM_UUID: &str = "9b6768c0-831d-488c-ba72-05f93975a3be";
4246

@@ -60,6 +64,11 @@ pub mod ethproofs_ids {
6064
Uuid::parse_str(FALLBACK_UUID).expect("Valid UUID")
6165
}
6266

67+
/// Parse an Airbender UUID
68+
pub fn airbender() -> Uuid {
69+
Uuid::parse_str(AIRBENDER_UUID).expect("Valid UUID")
70+
}
71+
6372
/// Parse an OpenVM UUID
6473
pub fn openvm() -> Uuid {
6574
Uuid::parse_str(OPENVM_UUID).expect("Valid UUID")
@@ -174,7 +183,7 @@ impl VerifierStore {
174183
let id = proof_id.as_u8() as u32;
175184
match id {
176185
0 => Some(ethproofs_ids::fallback()),
177-
1 => None, // Reserved for Airbender
186+
1 => Some(ethproofs_ids::airbender()),
178187
2 => Some(ethproofs_ids::openvm()),
179188
3 => Some(ethproofs_ids::pico()),
180189
4 => Some(ethproofs_ids::sp1_hypercube()),
@@ -198,7 +207,12 @@ impl VerifierStore {
198207
fallback::FallbackVerifier::verify,
199208
);
200209

201-
// proof_id 1 reserved for Airbender
210+
// Register Airbender verifier (proof_id 1)
211+
store.register(
212+
ethproofs_ids::airbender(),
213+
airbender::AirbenderVerifier::name(),
214+
airbender::AirbenderVerifier::verify,
215+
);
202216

203217
// Register OpenVM verifier (proof_id 2)
204218
store.register(

0 commit comments

Comments
 (0)