Hi everyone
,
As on-chain AI and verifiable compute continue to gain traction, we are hitting a massive interoperability wall. We have an incredible Cambrian explosion of verification networks on one side (zkML, opML, TEEs, etc.), and a growing list of agentic/AI-focused ERCs on the other.
However, right now, these two sides speak completely different languages.
TL;DR: We are facing an N Γ M integration nightmare for on-chain AI. Every dApp or protocol that wants to consume verified AI inference currently has to write custom, vendor-specific adapters for each proof system. This draft ERC proposes a unified, standard verifier registry and interface that sits exactly in the middleβallowing verification projects to plug in once, and consumer ERCs to query a single standard interface.
Would love to get the communityβs feedback on this architecture, especially from authors of the related ERCs and teams building inference networks.
Here is the breakdown of the problem and the proposed standard:
Motivation
Verification infrastructure already exists, but it is highly fragmented.
Verification Projects: On-chain AI verification is already live across five paradigms:
| Paradigm | Representative Projects |
|---|---|
| zkML | RISC Zero, SP1, EZKL |
| opML | ORA Protocol |
| TEE | Automata DCAP, Marlin Oyster |
| Oracle | Chainlink Functions, Band Protocol |
| Multisig / AVS | EigenLayer AVS, Lit Protocol |
ERCs: A growing set of ERCs explicitly need on-chain inference verification, but none define a common interface for it:
- ERC-8183 (Agentic Commerce) β evaluator βmay verify a ZK proofβ before releasing payment, but no verifier interface is defined
- ERC-8004 (Trustless Agents) β Validation Registry lists zkML/TEE verifiers as examples, but specifies no contract interface
- ERC-7992 (Verifiable ML) β defines a registry for ZK proofs only, leaving opML, TEE, Oracle, and Multisig uncovered
- ERC-7007 (Verifiable AIGC Token) β accepts opaque
bytes proofwith no model identifier or proof-system identifier - ERC-8001 (Agent Coordination, Final) β routes multi-agent task results through opaque
executionDatabytes with no inference verification module
The problem: these two sides cannot talk to each other. Every protocol that needs verified AI inference today must write a separate adapter per proof system β resulting in vendor lock-in and NΓM integration complexity. Whatβs missing is a standard verifier registry that sits in the middle. This ERC provides exactly that:
Verification Projects This ERC ERCs
zkML (RISC Zero, SP1β¦) ββ ββββββββββββββββββββ ββ ERC-8183 (Agentic Commerce)
opML (ORA Protocol) ββ€ β AI Inference β ββ ERC-8004 (Trustless Agents)
TEE (Automata, Marlin)ββΌββΊβ Verifier ββββΌβ ERC-7992 (Verifiable ML)
Oracle (Chainlinkβ¦) ββ€ β Registry β ββ ERC-7007 (AIGC Token)
Multisig (EigenLayerβ¦) ββ ββββββββββββββββββββ ββ ERC-8001 (Agent Coordination)
Proposal
This ERC defines two interfaces β one for each side of the registry:
For Verification Projects (left side) β implement IProofVerifier:
Wrap your existing verifier logic behind this single method. The registry dispatches to it when a consumer requests your methodId.
interface IProofVerifier {
function verify(
bytes32 modelHash,
bytes32 inputHash,
bytes32 outputHash,
bytes calldata proof // your existing proof format, unchanged
) external view returns (bool valid);
}
- zkML: wrap your existing
verify/verifyProofcall - opML: adapter handles the async request/callback pattern
- TEE: wrap the attestation verification call
- Oracle & Multisig: wrap threshold signature or BLS aggregate check
For ERCs (right side) β call IVerificationMethod:
Call one function. The registry routes to the registered verifier automatically.
interface IVerificationMethod is IERC165 {
function verifyInference(
bytes32 methodId, // e.g. keccak256("zkml.ezkl.halo2")
bytes32 modelHash,
bytes32 inputHash,
bytes32 outputHash,
bytes calldata proof
) external returns (bool valid);
function registerVerifier(bytes32 methodId, address verifier) external;
function getVerifier(bytes32 methodId) external view returns (address);
event InferenceVerified(bytes32 indexed methodId, bytes32 indexed modelHash,
bytes32 outputHash, bool valid);
}
- ERC-8183: call
verifyInference()beforecomplete() - ERC-8004: deploy as a validation method;
InferenceVerifiedevents feed the Reputation Registry - ERC-7992: existing verifiers register as
IProofVerifieradapters under"zkml" - ERC-7007: replace opaque
bytes proofwithIProofVerifier
Open Questions
-
Compatibility β Should this ERC extend ERC-7992βs
proofSystemIddispatch model, or treat zkML as a peer category alongside opML/TEE/Oracle/Multisig? -
Challenge Period Handling β During an opML challenge window, should
verifyInferencereturnfalse, or expose a distinct pending state so callers can differentiate βinvalidβ from βnot yet finalizedβ? -
Model Versioning β
modelHashchanges after every fine-tune. Should this ERC define a versioning convention, delegate to a companion model registry, or treat version management as out of scope? -
Naming Governance β Is self-assigned
<category>.<implementer>sufficient to prevent method ID collisions in practice, or does the ecosystem need a lightweight off-chain name registry?