| // prover/latency.js | |
| // Computes detection latency statistics for ProofBridge Liner. | |
| // | |
| // Assumes periodic polling with interval Δ. | |
| // Tampering events occur uniformly within interval. | |
| // Detection latency T ~ Uniform(0, Δ) | |
| // | |
| // Hazard function: λ(t) = 1/(Δ - t) | |
| // Expected value: E[T] = Δ/2 + t_overhead | |
| // 95th percentile: t_0.95 = 0.95 Δ | |
| const POLL_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes | |
| const OVERHEAD_MS = 2000; // Estimated gateway latency + aggregation | |
| /** | |
| * Computes expected detection latency. | |
| * @returns {number} Expected latency in milliseconds | |
| */ | |
| function expectedLatency() { | |
| return POLL_INTERVAL_MS / 2 + OVERHEAD_MS; | |
| } | |
| /** | |
| * Computes 95th percentile detection latency. | |
| * @returns {number} 95th percentile in milliseconds | |
| */ | |
| function percentile95Latency() { | |
| return 0.95 * POLL_INTERVAL_MS; | |
| } | |
| /** | |
| * Hazard function value at time t. | |
| * @param {number} t - Time in milliseconds from tampering event | |
| * @returns {number} Hazard rate (instantaneous detection probability per ms) | |
| */ | |
| function hazardFunction(t) { | |
| if (t >= POLL_INTERVAL_MS) return 0; // No detection after interval | |
| return 1 / (POLL_INTERVAL_MS - t); | |
| } | |
| /** | |
| * Generates latency statistics for dashboard or reports. | |
| * @returns {Object} Latency stats | |
| */ | |
| function getLatencyStats() { | |
| return { | |
| pollIntervalMs: POLL_INTERVAL_MS, | |
| overheadMs: OVERHEAD_MS, | |
| expectedMs: expectedLatency(), | |
| percentile95Ms: percentile95Latency(), | |
| expectedMinutes: (expectedLatency() / 60000).toFixed(2), | |
| percentile95Minutes: (percentile95Latency() / 60000).toFixed(2) | |
| }; | |
| } | |
| module.exports = { | |
| POLL_INTERVAL_MS, | |
| OVERHEAD_MS, | |
| expectedLatency, | |
| percentile95Latency, | |
| hazardFunction, | |
| getLatencyStats | |
| }; |