Skip to main content

Crate evidence_chain

Crate evidence_chain 

Source
Expand description

Builder for explainable evidence chains.

An EvidenceChain is an ordered list of EvidenceLinks — each link records one verifiable observation, an optional metric, and whether that observation met its threshold. Calling EvidenceChain::finalize computes an aggregate EvidenceStrength (pass ratio) across all links.

The design is domain-agnostic: the same types work for fraud detection, trading signals, compliance checks, on-chain analysis, or any system where decisions must be auditable and explainable.

§Quick start

use evidence_chain::{EvidenceChain, EvidenceLink, EvidenceCategory};

let mut chain = EvidenceChain::new("fraud-detector", "1.0.0");

chain.add_link(
    EvidenceLink::new(EvidenceCategory::Value, "Transaction above limit", "tx:8f3a")
        .with_metric(15_000.0, "USD")
        .with_threshold(10_000.0, true),
);
chain.add_link(
    EvidenceLink::new(EvidenceCategory::Behavioral, "New device fingerprint", "device:c91b")
        .with_threshold(1.0, true),
);
chain.add_link(
    EvidenceLink::new(EvidenceCategory::Temporal, "Outside normal hours", "2024-03-15T03:42Z")
        .with_threshold(1.0, false), // did not meet threshold
);

chain.finalize();

assert_eq!(chain.strength.total_checks, 3);
assert_eq!(chain.strength.passed_checks, 2);
assert!((chain.strength.ratio - 2.0 / 3.0).abs() < 1e-9);

§Serialization

All types implement serde::Serialize and serde::Deserialize, so chains can be stored as JSON, embedded in database columns, or sent over the wire.

use evidence_chain::{EvidenceChain, EvidenceLink, EvidenceCategory};

let mut chain = EvidenceChain::new("signal-v1", "2.0.0");
chain.add_link(EvidenceLink::new(EvidenceCategory::Structural, "Pattern matched", "ref:001"));
chain.finalize();

let json = serde_json::to_string(&chain).unwrap();
let decoded: EvidenceChain = serde_json::from_str(&json).unwrap();
assert_eq!(decoded.rule_id, "signal-v1");

Structs§

EvidenceChain
An ordered chain of evidence links for a single decision.
EvidenceLink
A single verifiable observation in an EvidenceChain.
EvidenceStrength
Aggregate pass/fail ratio across all links in an EvidenceChain.

Enums§

EvidenceCategory
Broad category of an evidence observation.