vyre_reference/dual.rs
1//! Dual-dispatch resolver for the parity engine.
2//!
3//! Every operation that claims conformance must produce byte-identical output on
4//! two independently-written CPU references. The dual-reference registry picks
5//! which pair runs for a given op ID, and the conform gate rejects any backend
6//! that diverges from either reference on any witnessed input.
7
8/// CPU reference function type used by the dual-reference registry.
9pub type ReferenceFn = fn(&[u8]) -> Vec<u8>;
10
11/// Two independently-written CPU references for one operation.
12///
13/// # Examples
14///
15/// ```rust,ignore
16/// struct MyDual;
17/// impl DualReference for MyDual {
18/// fn reference_a(input: &[u8]) -> Vec<u8> { /* first impl */ vec![] }
19/// fn reference_b(input: &[u8]) -> Vec<u8> { /* second impl */ vec![] }
20/// }
21/// ```
22pub trait DualReference {
23 /// First independently-written reference implementation.
24 fn reference_a(input: &[u8]) -> Vec<u8>;
25
26 /// Second independently-written reference implementation.
27 fn reference_b(input: &[u8]) -> Vec<u8>;
28}