Skip to content

Add staged consensus-native UltraHonk verifier profile support #5034

Description

@beddows

Problem

ZKA bridge validity predicates need a consensus-native way to verify the exact UltraHonk/BN254/Keccak proofs produced by their pinned Noir/Barretenberg pipeline. Namada currently has no corresponding verifier host import, authenticated verifier-profile registry, deterministic resource schedule, or activation lifecycle, so the production path must remain fail-closed.

ZKA ADR-0009 specifies the intended trust boundary and wire formats. Its reserved zka-ultrahonk-bn254-keccak-zk-bb5-v1 feasibility profile is permanently non-admissible because the production trusted-setup artifacts and review dispositions were never assigned. Current export and transfer artifacts also produce 7,616-byte proofs, above ABI v1's fixed 7,232-byte ceiling, so they require a separately versioned successor ABI/profile rather than changing v1 in place.

Reference: https://github.com/pyramidal-io/ZKA.dev/blob/main/docs/adr/0009-namada-consensus-native-ultrahonk-verification-bou.md

Proposed staged work

  1. Add total, bounded codecs for the ADR-0009 profile-binding, three-row allowlist, trusted-setup provenance, and inactive-selection records. This stage is deliberately non-activating and retains v1's exact 7,232-byte ceiling.
  2. Extract and audit a verifier-only UltraHonk BN254/Keccak core with a panic-free canonical parser and reproducible dependency/source lock.
  3. Add the root-frame-authenticated VP host ABI and bind calls to host-derived chain, VP code, protocol-version, and statement-domain context.
  4. Add an immutable governance registry and fail-closed activation/rotation lifecycle over complete, profile-selected rows and inline authenticated verifier CRS bytes.
  5. Prove deterministic gas and native memory bounds, then publish cross-tool positive and adversarial KATs across pinned bb -t evm, the Rust host verifier, and generated Solidity verifiers.
  6. Wire the real ZKA bridge VP path, remove the transfer fallback only after all positive paths are real, and use a two-phase protocol activation.

Each stage should be an atomic, reviewable PR. The first implementation stage is ready locally with an authoritative byte-for-byte ADR golden vector, exhaustive truncation/trailing/mutation coverage, fixed allocation, and no storage, governance, verifier, or activation API.

Security invariants

  • The reserved v1 profile remains inactive and non-admissible.
  • No caller bytes, local file, cache, download, implementation default, or ambient network source may substitute for protocol-published, authenticated verifier artifacts.
  • A selected profile binds complete circuit rows, exact lengths/encodings, all artifact and schema digests, inline canonical G2 CRS bytes, named provenance, and resource/gas versions.
  • Caller proof/input parse failures and false equations are transaction-invalid; malformed referenced authenticated verifier state is validator-fatal before vote or commit.
  • Parsing, allocation, gas, and results are deterministic across supported architectures.
  • Activation occurs only after exact-artifact cryptographic, trusted-setup, codec, runtime, gas, governance, and state-machine reviews.

Maintainer input requested

  • Is crates/parameters the preferred home for the non-activating wire codecs and inactive protocol selection record?
  • Which future Namada protocol version/release should own the successor host ABI and activation gate?
  • Should the verifier core live in-tree or as a separately audited, pinned crate?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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