MTC-ZK defines an optional, fixed Groth16-style ABI (proveMetric) to verify predicates only (e.g., score ≥ threshold) against MTC Core (ERC-8035) anchors—without revealing raw values.
Problem & motivation
dApps often need threshold checks while preserving privacy and supporting revocation at scale. MTC-ZK provides a stable verifier ABI and binding rules so wallets/dApps can verify the same predicate the same way.
Scope
proveMetric(a,b,c,publicSignals) with fixed order [mode, root, nullifier, addr, threshold, leaf]
Feedback
As this is our initial draft, we’d greatly appreciate broad feedback—on terminology, spec clarity, and interop. Suggestions and alternatives are welcome.
Based on the discussion, the draft now formally includes an additive ZK presentation extension while keeping the original fixed Groth16 interface intact.
Introduced an additive interface (IMultiTrustCredentialZKEx) for richer predicates.
Formally defined RANGE and DELTA (epoch-based) predicate semantics as OPTIONAL extensions.
Clarified that the original fixed ABI remains the stable baseline (v1), preserving backward compatibility.
Unified binding rules (anchor binding, address binding, comparison mask enforcement, and domain separation) across both the base and extended interfaces.
Clarified mode semantics as a bitmask (GT/LT/EQ), with mode == 0 allowed only for KYC-only proofs.
Many thanks to allfinan for the thoughtful feedback and suggestions around range predicates, delta constraints, and epoch-based freshness.
The intent remains to keep MTC Core minimal, while allowing credit- and risk-oriented logic to evolve cleanly at the presentation layer.
Feedback on the extended predicate model and interface shape is very welcome.