ART-348 · zkML Guest Pilot

What This Proof Actually Attests

ART-348 runs a fixed, int8-quantized credit-scoring model as a pure integer kernel and wraps its execution in a groth16 proof. This guide explains exactly what that proof covers, what it deliberately leaves out, and how to check both for yourself.

credit_assessment groth16-bn254 Proof verified
🔒 The demo runs entirely in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only.

Two different claims, easy to conflate

A zero-knowledge proof over an inference kernel is a statement about execution, not about the model behind it. ART-348 keeps those two claims visibly separate rather than letting the proof badge imply more than it covers.

Proven
  • This exact quantized model, with these exact int8 weights and fixed-point bias, produced this exact score from these exact inputs.
  • The computation was pure integer arithmetic end to end — no floating-point step, no rounding-mode ambiguity, byte-identical across compute surfaces.
  • The execution_hash anchors the policy_parameters and output_payload pair; any change to either invalidates it.
Not proven
  • Fairness of the underlying model across any protected class or population.
  • Accuracy or quality of the model as a predictor of real credit risk.
  • Fitness for an actual regulatory credit decision. The model is a synthetic, offline demand-test artifact.

Where the float-to-integer gap is disclosed

Turning a floating-point model into an integer kernel introduces small scoring differences at the margin. ART-348 discloses that gap directly on the artifact instead of hiding it: the quantization_parity block below is additive to the receipt and records the measured agreement between the original float model and the quantized integer kernel over a held-out test set.

{
  "quant_method": "static-linear",
  "bits": 8,
  "granularity": "per-tensor",
  "n_vectors": 1000,
  "agreement": { "metric": "top1-match", "value": 0.998 }
}

0.998 top1-match over 1,000 held-out vectors means the quantized kernel reached the same decision as the float reference model on 998 of them. That gap is the cost of moving to pure integer math; the field exists so it never has to be taken on faith.

Run the demo, read the receipt, check the hash

Score a set of inputs. Open the live tool and enter ten pre-normalized fixed-point feature values (or leave them at zero). The kernel runs client-side and returns a decision plus the accumulator value that produced it.
Read the receipt. The result panel shows the quantization_parity figures alongside the decision, and the Policy Mandate export includes the full OpenChainGraph artifact: policy_parameters, output_payload, compliance_flags, and execution_hash.
Verify the hash independently. Paste the exported artifact's policy_parameters and output_payload into the OpenChainGraph Sandbox playground to recompute the canonical preimage and confirm the execution_hash matches. A mismatch means the artifact was altered after it was generated.