TL;DR:
We’re building a Stylus-compatible UltraHonk verifier to bring Noir’s zero-knowledge proof system to Arbitrum Stylus. This bridges a critical gap for zk-dApps, enabling high-performance, WASM-based proof verification inside Stylus smart contracts.
Bridging Noir and Stylus
Our goal is to unlock native proof verification in Arbitrum Stylus for circuits built in Noir using Aztec’s Barretenberg backend.
Today, Stylus lacks native support for verifying UltraHonk zk proofs, which are commonly used in Noir-based circuits. At the moment, there are no Stylus-compatible implementations of the Barretenberg UltraHonk verifier backend that can take full advantage of Stylus’s performance and flexibility.
That being said, we did find a great Rust implementation by the Taceo team that mirrors the original C++ Barretenberg verifier almost 1:1, developed for their MPC use cases. Building on that, we set out to bring it to Stylus, making it WASM-compatible by removing std dependencies, isolating only the core verification logic, optimizing for size, and structuring it as a set of Stylus contracts that fully leverage Ethereum precompiles.
Milestone 1 & 2: Adapter Pattern + Stylus Compatibility, completed.
We’ve completed the first two phases of the project:
Milestone 1 focused on laying the groundwork.
Starting from Taceo Labs’ UltraHonk verifier (originally built for MPC scenarios), we removed all non-essential components and restructured the codebase around a clean adapter pattern. This pattern abstracts elliptic curve operations (add, mul, pairing) and hashing, letting us use Arkworks for local testing while preparing for Stylus integration.
We also set up a full repo environment with CI pipelines, covering linting, formatting, Stylus-specific checks, and tests execution on Nitro devnode.
Milestone 2 brought full Stylus compatibility.
We eliminated all remaining std dependencies and rewrote memory and error handling using core and alloc. The elliptic curve backend was implemented using Stylus-native precompiles (ecAdd, ecMul, ecPairing), ensuring correctness and on-chain efficiency.
We built and tested Stylus-compatible variants of the verifier (UltrahonkKeccak and ZkUltrahonkKeccak flavors) across three modular contracts to stay within WASM size limits. An integration test suite and GitHub Actions workflows were also added.
To tie it all together, we included a minimal “Hello World” demo project and documentation, readying the codebase for external audit.
Source code available here: github.com/wakeuplabs-io/noir-stylus-verifier
What’s Coming Next
With the foundation in place, we’re now focused on next steps:
Phase 3: Security Audit
We’ll bring in an external auditor to review the final codebase and suggest improvements, ensuring production-readiness and trust.
Phase 4: CLI Tooling
We’re building a CLI tool to help developers go from a Noir circuit to a Stylus-compatible verifier. The tool will support compiling circuits, generating wrapper contracts, and testing deployments.
Phase 5: Docs & Examples
We’ll publish clear documentation, practical examples, and tutorials, including real-world apps, such as voting and gaming, built entirely using Noir and Stylus to demonstrate end-to-end integration.
Why This Matters for the Arbitrum Ecosystem
This work brings Noir-based ZK circuits to Stylus. It enables on-chain proof verification using the most performant zero-knowledge backend available today (UltraHonk), expanding the range of apps that can be built on Arbitrum.
By ensuring compatibility and ease of use through CLI tooling and documentation, we’re making Stylus a go-to environment for zk developers.
We’ll be sharing updates and progress reports directly in the Arbitrum DAO Forum.
If you’re a developer working with Noir, zk circuits, or Stylus, we’d love your feedback as we build.
Thanks for following along!
Don’t forget to connect with us on X (Twitter) and LinkedIn for the latest updates.