Cross-chainConcept

Brave Browser

ZK proofs as a browser-native primitive.

Brave already ships privacy-first defaults, a multi-chain wallet across Solana and EVM, and prior ZK research around login and age verification. zkRune fits as a browser-native ZK primitive: Brave Wallet proves balance, NFT, or membership claims without exposing addresses, and a 'Zero-Knowledge Browsing' mode delivers proofs to verification prompts instead of personal data.

Three layers of integration

Each layer is shippable independently. The first layer already works — Brave Wallet implements the Solana wallet adapter zkRune consumes, so the existing balance-proof primitive runs against a Brave Wallet without any code change on either side. The next two layers are the actual proposal.

01 · TodayLive today

Already works through the wallet adapter

Connect Brave Wallet to zkRune's existing balance-proof template and prove an SPL token balance ≥ X without exposing the address. No Brave-side integration required — it works because Brave Wallet ships the standard adapter.

Try it today
02 · TomorrowReference design

Native Prove action inside Brave Wallet

Each token row exposes a one-click Prove button. The SDK reads the wallet provider already in scope, runs the circuit locally, and returns a shareable proof URL. Same primitive for NFT ownership and membership proofs.

03 · FutureVision

Zero-Knowledge Browsing autopilot

Brave detects verification prompts on the open web — age gates, KYC checkpoints, eligibility forms. Instead of asking the user for raw data, the browser delivers a zkRune proof. Same primitive across the consumer web.

Why a browser-native ZK primitive?

The privacy story has been one-sided for fifteen years: block trackers, block ads, block fingerprinting. Verification prompts — age, balance, license, jurisdiction — still demand raw data because the browser has nothing better to offer. zkRune is the missing response.

What the browser does today

  • Block, but never substitute. Brave already blocks third-party trackers and fingerprinting. Forms still demand raw data — there is no positive primitive to hand back.
  • Wallet exposes the address by default. A balance check leaks the entire on-chain history of the wallet. There is no native way to prove a threshold without revealing the source.
  • Extensions are the workaround. Reclaim, zkPass, and others ship as third-party extensions. Privacy-conscious users install them; the long tail does not.
  • Age and jurisdiction prompts route to ID upload. Centralized KYC vendors get the data. Operator gets the liability. User gets the friction.

With zkRune as a native primitive

  • Positive answer, not just refusal. When a site asks for a fact, the browser hands back a proof of the fact — not the underlying data, and not nothing.
  • Wallet UX without address leakage. Prove a token balance threshold, NFT ownership, or membership without disclosing the address. The wallet stays private by default.
  • Default for everyone, not just opt-in users. Built into the browser path means the long tail is covered — not only the 5% who installed an extension.
  • On-chain audit trail by design. Every match leaves a cryptographic record on Solana, Sui, or Base. Operators get a regulator-shaped log without retaining PII.

Architecture — Layer 2 in detail

Layer 1 is already live. Layer 3 is the long-horizon vision. This diagram zooms into Layer 2 — the native Prove action inside Brave Wallet — because that is the concrete proposal that lands first.

01Simulated

Wallet UI surfaces a Prove action

Each token row in Brave Wallet exposes a Prove button. zkRune SDK consumes the wallet provider already in scope — no new key plumbing.

02Simulated

Circuit runs locally against wallet state

Balance proof, NFT ownership, or membership proof — pick the circuit, set the threshold, snarkjs runs in the wallet process.

03Live

On-chain verifier check

Solana verifier 9apA…X7ad, Base verifier 0xa03A…9E849EA, or Sui verifier 0x2783…d4c5 — same proof, picked by chain context.

04Simulated

Shareable proof artifact

Proof URL plus on-chain attestation hash. Paste anywhere — websites verify against the on-chain record without contacting Brave.

Integration sketch

// Inside Brave Wallet UI — token row "Prove balance" action
import { zkRune } from "@brave/zkrune";

const proof = await zkRune.proveBalance({
  token: selectedToken.mint,    // e.g. "SPL:51mxznNW..." or "native:SOL"
  threshold: 1000,              // in token units, never the actual balance
  // wallet provider already in scope inside Brave Wallet
});

// proof.shareableUrl  → paste anywhere; the verifier is on-chain
// proof.proofHash     → 0x... collision-resistant identifier
// proof.publicSignals → [mint, threshold, attested] — never the balance

Why Brave specifically

Privacy posture is genuine

Defaults already block trackers, ads, and fingerprinting. ZK proofs extend the same product DNA upward — the missing positive primitive after fifteen years of refusal.

Multi-chain wallet, multi-chain verifiers

Brave Wallet handles Solana and EVM. zkRune's on-chain verifiers live on Solana, Base, and Sui. Zero new plumbing — the wallet adapter is already shared.

Prior ZK posture, no native ZK primitive yet

Brave shipped zkSENSE for ad fraud, partnered on Sui zkLogin, and explored age verification. The interest is documented; the user-facing primitive is not yet built.

Build this with the Brave team

This is a community-built reference design, not an official partnership. Layer 1 is shippable today. Layer 2 is a 6–12 week engineering scope on the Brave Wallet UI. If you are on the Brave team — or building toward a browser-native ZK primitive elsewhere — let's talk.