ValonmainnetOpen app →
Security

Built to be verified, not trusted

Valon never holds your keys, and its program won't move funds without a valid proof from them. Here is how it's tested, where review stands, and what you can check on-chain yourself, right now.

522 checks passing27 attack scenarios rejected on-chainAudited by ContractWolfNon-custodial
366automated checks
67on-chain scenario steps
19attack scenarios rejected
21,838circuit constraints proven per action

Assurance roadmap

What's done, and what happens before deposit caps are lifted.

✓
Internal adversarial review (before launch)

Program, circuit and relayer, reviewed by people other than their authors. Every finding was fixed before launch and has a regression test.

Complete
✓
Pre-audit internal review (October 2026)

Program, circuit, app and servers. All fixes are live; the program fixes were reviewed in the external audit and deployed through the multisig on October 6, 2026.

Complete
✓
Automated test suite

522 checks across 6 suites, including real zero-knowledge proofs replayed against the on-chain program.

Passing
✓
Mainnet-fork testing

End-to-end runs against a copy of mainnet with the real Jupiter and Jupiter Lend programs: shield, private swap, private lending, exit.

Complete
✓
External audit · ContractWolf

Scope: On-chain program (programs/veil-core). · Read the report

Complete
✓
Mainnet launch

Live since October 4, 2026, with a 2-of-2 multisig as admin and upgrade authority and a preflight that refused launch until every check passed. The launch's per-token caps were lifted after the audit. · Launch post

Live

Test coverage

Every suite runs on each release; tap one to see what it covers. Last run Oct 6, 2026 · build f8fa5c9.

Protections, verified on-chain

Each guarantee is exercised against the real program with hostile inputs that must be refused. We publish what is guaranteed, not how anyone might try to break it.

✓Every note spends once

A note leaves a one-time marker on-chain when spent; any second attempt is refused by the program.

2 scenarios verified
✓Only valid proofs move funds

Every public detail of a transaction is recomputed by the program and bound into the proof. Change anything and it no longer verifies.

2 scenarios verified
✓Funds go where you said

Recipients and relayer fees are fixed by your proof. Nobody in between can redirect them.

1 scenario verified
✓Trades and lending are ring-fenced

Each trade or lending position gets its own escrow and signer and must pay out at least the minimum you approved (the app checks the quote against the market price first), or your input comes back as a private note.

7 scenarios verified
✓Simple, fixed fees

Valon’s fee is 0.3% when you shield, trade or withdraw. Private sends between Valon users have no Valon fee. Fees are kept apart from user funds and can only go to Valon’s treasury.

3 scenarios verified
✓Limited, two-step governance

Admin powers are narrow, can’t move user funds, and change hands only when the new holder accepts.

7 scenarios verified
✓Risky tokens are refused

Tokens with features that could endanger a shared vault are rejected when a vault is opened.

1 scenario verified
✓Spam and capacity limits

Empty transactions are refused and each token’s vault has a cap.

2 scenarios verified
✓No blocking by third parties

Outsiders can’t stop your spends or withdrawals by tampering with addresses ahead of time.

2 scenarios verified

By design

Your keys stay with you

Generated and encrypted in your browser; proofs are built there too. Relayers and indexers never get your keys or learn which notes are yours. Like any server they see your IP address, and the relayer sees the transactions it submits for you, which are public on-chain anyway.

No custodial path

The admin can pause and set limits, but no instruction lets anyone move notes without the owner's proof.

Isolated integrations

Swaps and lending run only through allowlisted programs, each confined to its own escrow.

Open and replaceable

Anyone can run a relayer or an indexer. The app checks the indexer's data against the Merkle root the Valon program itself records on-chain, so it can't be shown a balance that isn't there.

Verify it yourself live from mainnet

Read straight from the Solana RPC in your browser, not from our servers.

Program

Program idFmsM…q9DP
Upgrades controlled by—
Admin—
StatusUnavailable
Valon fee (shield · withdraw · trade)—
Allowlisted programsNone

Proving keys

CircuitGroth16 · BN254 · 4 in, 3 out · 31,137 constraints · tree depth 26
Proving key SHA-25694d6c1f143d8fb74798fe6f85ac9cd67a37cfa2cd6e18f59d9115cbf42200cea
Verification key SHA-256998d369d6fb9e5dda5f695b3a79d4ef6851d0566c620dcdfeab6b5d1adc07f7e

Responsible disclosure

Found something? Please report it privately before telling anyone else, so users stay safe while it's fixed. Write to info@valon.xyz.