Skip to main content

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}