Frequently Asked Questions
Common questions about ZKA, Noir circuits, Aztec deployment, and privacy-preserving agent coordination.
Why Privacy?
Why do agents need private transactions?
In a world of autonomous agents, every transaction reveals strategy.
Consider a competitive scenario: Agent A needs market research from Agent B. Without privacy:
- Agent B sees how much A is willing to pay (pricing intelligence)
- Observers see that A is researching this market (competitive intelligence)
- A's transaction history reveals business priorities
ZKA lets agents transact, prove capabilities, and build reputation without revealing sensitive information to counterparties or observers.
Isn't this just for cryptocurrency use cases?
No. ZKA uses zero-knowledge proofs for three distinct purposes:
- Private payments (ZKA/Pay): Value transfer with hidden amounts and parties — settlement is pluggable across Aztec, EVM chains, and more.
- Coordination proofs (ZKA/Coord): Prove that a multi-agent workflow was executed correctly without revealing the intermediate steps or methodology.
- Capability attestation (ZKA/Attest): Prove you have a certification without revealing which specific credentials you hold.
Privacy-preserving computation is valuable even without cryptocurrency.
What about regulatory compliance and auditing?
ZKA supports progressive disclosure and integrates with ZKC (Zero-Knowledge Credentials) for user-controlled compliance. Privacy is the default, but agents can selectively reveal information when needed:
- Viewing keys: Grant auditors read access to specific transactions
- Balance proofs: Prove a payment was within compliance limits without revealing the exact amount (Noir circuit)
- Credential binding: Prove regulatory credentials are held without revealing identity (ZKC integration)
This is "privacy by default, transparency when required" — not "secrecy at all costs."
Technical Design
Why Noir?
Noir is a domain-specific language for writing zero-knowledge circuits, developed by Aztec Labs. ZKA chose Noir for several key properties:
| Property | Benefit for ZKA |
|---|---|
| Backend-agnostic (ACIR) | Write circuits once, compile to UltraHonk, Halo 2, Groth16, or Plonky2 |
| PLONKish arithmetization | Direct match with ZKA's circuit constraint design |
| Recursive composition | Goblin Plonk enables ZKA/Coord coordination chains |
| Aztec-native | Private composability via kernel circuits — no manual recursion |
| Solidity verifier auto-generation | nargo codegen-verifier produces EVM verifier contracts |
| Browser proving (NoirJS) | Client-side proof generation via Barretenberg WASM |
ZKA was originally designed for Halo 2 (Pallas/Vesta, no trusted setup). Noir's ACIR abstraction means the Halo 2 backend can be added later when it matures — circuits don't change, only the backend.
Why Aztec as the primary deployment target?
Aztec is the only L2 with native private composability — which is exactly what ZKA/Coord needs. Specific advantages:
- Kernel circuits: Automatically handle recursive proof composition for ZKA/Coord steps
- Note/nullifier model: Aztec's indexed Merkle tree is a direct match (and upgrade) of ZKA's design
- Key hierarchy: Aztec's keys are a superset of ZKA's, with app-siloed key isolation as a bonus
- Ethereum settlement: Largest ecosystem, already integrated
- Client-side proving: Efficient on consumer hardware via Honk + Goblin Plonk
ZKA is not Aztec-exclusive — the Solidity verifier works on any EVM chain, and Noir's backend portability enables future targets — but Aztec is the primary deployment for its unique private composability.
What happened to the trusted-setup-free property?
ZKA's original Halo 2 design used Pallas/Vesta curves with IPA commitments — no trusted setup required. The move to Noir/Barretenberg (UltraHonk) uses BN254/Grumpkin with KZG commitments, which requires a universal trusted setup (SRS).
This is a deliberate trade-off:
- Gained: Largest ecosystem (EVM-native), Aztec composability, faster verification, smaller proofs
- Lost: Setup-free property
- Mitigated: Universal SRS (one ceremony for all circuits), well-established BN254 ceremonies
- Future: When the Halo 2 backend for Noir matures, ZKA circuits can target it without changes — restoring setup-free deployment
Where can ZKA proofs be verified?
Thanks to Noir's ACIR compilation, ZKA proofs can be verified on multiple targets:
- Aztec L2 (primary): Native private execution with kernel circuits
- Any EVM chain: Auto-generated Solidity verifier — Ethereum, Arbitrum, Base, Optimism, etc.
- Starknet: Via Garaga SDK → Cairo verifier
- zkVerify: Native UltraHonk verification pallet
- Cosmos/IBC: Feasible via CosmWasm verifier
- Solana: Feasible via BPF verifier program
Protocol Family
What protocols are in the ZKA family?
| Protocol | Purpose | Status |
|---|---|---|
| ZKA/Pay | Privacy-preserving agent payments (Noir transfer circuit) | Implemented |
| ZKA/Coord | Recursive coordination proofs via Goblin Plonk / Aztec kernel | Implemented |
| ZKA/Compute | Verifiable private computation without revealing models or methodology | Future |
| ZKA/Attest | Anonymous credentials via ZKC integration | Future |
| ZKA/Reputation | Privacy-preserving reputation scores without transaction history exposure | Future |
How does ZKA/Coord work?
ZKA/Coord uses recursive proof composition to verify multi-agent workflows:
- Agent A completes step 1, generates Noir proof P1
- Agent B completes step 2, generates proof P2 that recursively verifies P1
- Agent C completes step 3, generates proof P3 that recursively verifies P2
- Final verifier checks P3 — confirms entire chain without seeing intermediate steps
On Aztec, this is even simpler: each coordination step is a private function call. Aztec's kernel circuit handles all recursive verification automatically via Goblin Plonk.
Gas target: <500k gas for final coordination proof verification, regardless of recursion depth.
Implementation
What's the circuit architecture?
ZKA is structured as a Noir workspace with modular circuit packages:
noir/
├── zka_lib/ # Shared primitives (Poseidon2, keys, Merkle)
├── zka_transfer/ # Transfer circuit (ZKA/Pay)
├── zka_withdrawal/ # Withdrawal circuit
├── zka_balance/ # Balance proof circuit
├── zka_coordination/ # Coordination circuit (ZKA/Coord)
├── zka_credential/ # ZKC credential binding
├── zka_bridge_namada_*/ # Namada import/export
└── zka_bridge_penumbra_*/# Penumbra import/export
How fast are ZKA proofs?
| Circuit | Proving Time | Proof Size | EVM Verification Gas |
|---|---|---|---|
| Transfer | ~1-2s (consumer hardware) | ~2-4 KB | <300k |
| Coordination (recursive) | ~2-5s (depends on depth) | ~4-8 KB | <500k (constant) |
| Balance proof | ~1s | ~2 KB | <200k |
Browser-based proving via NoirJS + Barretenberg WASM is also supported, enabling client-side proof generation without a server.
Who maintains ZKA?
ZKA is developed by Pyramidal as part of the Pyramidal ZK protocol family. The specification is open (Apache 2.0), and all circuits are open-source Noir code.