Discussion topic for ERC-8084
Original PR
Update Log
- 2025-11-10: initial draft
External Reviews
None as of 2025-11-10.
Outstanding Issues
None as of 2025-11-10.
Summary
ZKMeta proposes a minimal, universal metadata interface for any Ethereum contract that verifies or consumes zero-knowledge proofs. Rather than standardizing proof formats, it standardizes the accompanying metadata required by tooling, wallets, explorers, relayers, and cross-chain systems to correctly interpret and validate proofs.
ZKMeta exposes the following components:
- proof system identifier (Groth16, Plonk, Halo2, zkVM, etc.)
- circuit identifier (content-addressed hash of the circuit artifact)
- circuit version (semver-encoded uint64)
- public-inputs schema hash
- public-inputs schema URI (content-addressed or hash-suffixed HTTPS)
- verification-key URI (content-addressed or hash-suffixed HTTPS)
This creates a foundation for a standardized “ZK ABI” layer that is needed across the ecosystem.
Purpose of This Standard
ZK integration today is fragmented:
- No standard way to identify proof systems
- No versioning convention for circuits
- No uniform public-input schema format
- No deterministic way to fetch verification keys
- Each project reinvents metadata formats and tooling
- Indexers and explorers lack a clean update signal
ZKMeta addresses these gaps without constraining proving systems or proof structures.
Specification Summary
The core interface:
interface IZKMetadata {
event CircuitMetadataUpdated(bytes32 circuitId, uint64 circuitVersion, bytes4 proofSystem);
function circuitId() external view returns (bytes32);
function circuitVersion() external view returns (uint64);
function publicInputsSchemaHash() external view returns (bytes32);
function publicInputsSchemaURI() external view returns (string memory);
function verificationKeyURI() external view returns (string memory);
function proofSystem() external view returns (bytes4);
}