zkVerify as verification layer
zkVerify serves as a public verification and aggregation network for the proofs generated by our stack.
High-level flow
Proof generation happens client-side or in a dedicated ZK service using the WalletOwnership circuit.
The client submits (proof, publicSignals, walletAddress, unifiedId) to a Glyph Relayer microservice.
The Relayer microservice interacts with the Horizen Labs zkVerify Relayer REST API to:
Register the verification key (once, cached).
Submit proofs for verification.
Poll and normalize the job result into a stable response shape.
Relayer responsibilities
Role: Hardened gateway between UnifiedID clients and the zkVerify network.
Input handling
Accepts proof bundle over POST /api/submit-proof:
proof, publicSignals
walletAddress, unifiedId
Performs:
Structural validation of proof and public signals
Wallet address format validation
UnifiedID format validation
Optional additional policy checks
Verification key management
Loads Groth16 VK from config/verification_key.json
Registers VK with zkVerify via POST /register-vk/{apiKey}
Caches returned vkHash in config/vk-cache.json for reuse
Integrating with zkVerify Relayer
Submit verification job.
Poll job status.
Stop when job reaches Finalized or times out.
The microservice normalizes job results to a stable, zkverifyjs-compatible shape.
Consumers can treat this as if it came from a direct zkVerify RPC client, without needing to manage VKs, polling, or zkVerify credentials themselves.
Last updated