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 that are easy to conflate

A zero-knowledge proof over an inference kernel states what one execution did rather than what the model behind it is worth. ART-348 keeps those two claims visibly separate rather than letting the proof badge imply more than it covers.

What the ART-348 proof coversTwo panels side by side. On the left, what the proof covers: this exact quantized model with these int8 weights and fixed-point bias produced this score from these inputs, the arithmetic was pure integer end to end, and the execution hash anchors the policy parameters and output payload together. On the right, what it leaves out: fairness across any population, accuracy as a predictor of real credit risk, and fitness for an actual regulatory credit decision. Below, the quantization parity figure: 0.998 top1-match over 1000 held-out vectors, meaning 998 matched the float reference model. Covered by the proof Left to other evidence these int8 weights and this biasproduced this score from these inputs pure integer arithmetic end to endno floating-point step and no rounding-mode ambiguity execution_hashanchors the parameter and output pair fairness across any populationthe proof says nothing about it accuracy as a credit predictormeasured against outcomes and not by a proof fitness for a real credit decisionthe model is a synthetic demand-test artifact quantization_paritytop1-match over 1000 held-out vectors0.998
The left panel is what a verifier can settle with the receipt alone. The right panel needs evidence of a different kind, which is why the parity figure below the panels is published on the artifact instead of being folded into the proof badge.
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, with no floating-point step and no rounding-mode ambiguity, so it is 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 and check the hash yourself

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.