Work

What Voyager Verifier submits

Voyager Verifier is a Rust CLI and reusable library for submitting Starknet contract classes to the Voyager block explorer for source verification.

Why contract verification fails on small mismatches

Contract verification workflows are sensitive to compiler versions, package metadata, network selection, and explorer API behavior. Small mismatches can create confusing failures for developers.

Building the verifier and public Rust library

At Nethermind, I authored 27 merged pull requests covering file and source resolution, Scarb.lock support, network selection, API payload migration, config and history, batch verification, status reporting, Dojo support, releases, documentation, and extraction of the public voyager-verifier library.

From Scarb metadata to Voyager submission

  • A Rust workspace separates the standalone voyager CLI from the reusable voyager-verifier crate; the CLI is distributed through asdf and GitHub release artifacts.
  • The verification pipeline resolves Scarb workspace metadata and source files, selects the Starknet network and endpoint, builds the Voyager API payload, submits the job, and exposes status and history commands.
  • Users can run an interactive wizard, pass flags directly, or define multiple contracts in .voyager.toml for batch verification.
Submit one contract class from the command line
voyager verify --network mainnet \
  --class-hash <YOUR_CLASS_HASH> \
  --contract-name <CONTRACT_NAME>

Why the CLI and library share one pipeline

  • The first-run wizard and direct CLI flags share one verification pipeline, while .voyager.toml supports repeatable batch and workspace flows.
  • The verifier logic is available as a public Rust library so Starknet Foundry and other tools can integrate without shelling out to the CLI.
  • Proc-macro source handling was removed for security, and source collection stays explicit enough to explain which files enter a verification request.

Matching Cairo sources to deployed classes

  • Cairo and Scarb releases change compiler output, metadata, lockfile expectations, and workspace layout; verification must match the deployed class without silently accepting the wrong build context.
  • Source collection has to include the contract and required dependencies while handling workspaces, test files, lock files, Dojo layouts, and path-related errors with actionable diagnostics.
  • Moving the Voyager API client from multipart form data to JSON and extracting a public library required compatibility across the CLI, external integrations, releases, and production service behavior.

Explorer dependencies and strict input checks

  • Strict compiler, metadata, and source checks reject mismatched projects earlier but require users to reproduce the original build inputs closely.
  • The CLI targets Voyager's verification API; other explorers need their own adapters even though the source-resolution library is reusable.
  • Verification status depends on an external explorer service, so the CLI can improve diagnostics and history but cannot eliminate remote availability or processing delays.

Voyager Verifier at v2.3.1

The public Nethermind repository's latest tagged release is v2.3.1, published June 30, 2026. The repository contains 27 merged pull requests authored by me, official mdBook documentation, a standalone CLI, and a crates.io library.

Source, release, docs, and merged work

File collection and integration guides

When this verifier evidence was reviewed