Skip to content

Audit scope + production readiness of the ZK-optimized Solidity Honk verifier (honk_zk_optimized_contract.hpp) #24997

Description

@pycckuu

Hi — question about which Solidity verifier variant is considered production-ready, and whether the audit scope
document is current.

We run Noir circuits with a ZK UltraHonk EVM verifier (bb write_solidity_verifier -t evm). We measured --optimized across our stack and it is a 71.5% verify-gas cut (23.9M → 6.8M total, flat across circuits from 12.5k to 42.5k gates), with identical VK hashes and smaller deployed bytecode. We would like to adopt it, and the only thing stopping us is audit provenance.

What we found:

  • barretenberg/cpp/scripts/audit/audit_scopes/honk_solidity_verifier_audit_scope.md lists honk_contract.hpp,
    honk_optimized_contract.hpp and honk_zk_contract.hpp — but not honk_zk_optimized_contract.hpp.
  • That scope doc was last updated 2026-03-26, and honk_zk_optimized_contract.hpp first landed 2026-04-10, so
    the omission may simply be that the doc predates the file rather than a deliberate exclusion.
  • chore: honk verifier opt + fix review #20547 mentions the optimized verifier had "been submitted for audit already", with the ZK verifier being read through afterwards.
  • noir-projects/noir-protocol-circuits/bootstrap.sh uses --disable_zk --optimized, i.e. the non-ZK optimized file.

Questions:

  1. Is honk_zk_optimized_contract.hpp in scope for the Honk Solidity verifier audit — either already submitted, or
    planned? Is the scope document current, or does it predate the ZK-optimized work?
  2. Is -t evm --optimized (ZK flavor) considered production-ready, or is the non-ZK optimized path the only one
    you'd recommend deploying today?
  3. Is anyone deploying the ZK-optimized verifier on mainnet? Any known users would be useful evidence.
  4. Do the barretenberg differential / malformed-proof tests cover the ZK-optimized generator specifically, or only
    the non-ZK optimized one?

What we can contribute back: we built a differential-equivalence suite that treats the currently-deployed template
as a reference oracle and requires the two implementations to agree on every input — per relation: every 32-byte proof
word bit-flipped, every public-input word mutated, truncation, all-zero, wrong arity, cross-relation proofs, plus
fuzzed corruption. 56 tests across ten real circuits, and the harness is mutation-verified (injecting a deliberately
unsound verifier fails 10 of 11 checks). We found zero disagreements between the default-ZK and ZK-optimized
templates.
Happy to share it if useful.

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions