BlindSpotBlindSpotmainnetOpen app →
BlindSpot documentation

A privacy layer for everything you do on Solana

BlindSpot gives your wallet a private balance. Shield any token into it, then send, trade, lend and withdraw without the chain linking any of it back to you. Your keys never leave your browser.

0.3%to shield
0%BlindSpot fee on private transfers
0.3%to withdraw
—notes in the pool
Audited. BlindSpot's on-chain program was audited by ContractWolf (95/100). After the audit the launch's deposit limits were lifted: no token has a per-deposit limit or a vault cap. A vault opened later for a new token starts with default limits until the multisig lifts them. See Security.

How it works

Value enters through a public shield, lives as sealed notes, and leaves through a public exit. Everything in between is proven, not revealed. Tap a stage.

Visible on Solana

Phantom, Solflare or Backpack stays your public identity. It signs exactly one thing in BlindSpot: a shield. BlindSpot never holds or sees its private key.

The three pieces

Notes

Each note commits to a token, an amount and its owner. Only your viewing key can open it; only your spending key can spend it.

Proofs

Groth16 zero-knowledge proofs, built in your browser, convince the BlindSpot program that balances add up and you own what you spend.

Relayers

A relayer submits your proof and pays the network fee. It can't change where funds go: the recipient and its fee are bound into the proof.

Quick start

Connect your walletPhantom, Solflare or Backpack. It stays your public entry and exit.
Create your vault and save the recovery keyA random key generated in your browser, encrypted with your passphrase. Write the recovery key down: it is the only way back if this browser is lost.
Shield a tokenOne wallet signature moves it behind the privacy wall.
Use it privatelySend to a veil2… address, trade, or lend. No wallet signatures, no public link.
WithdrawTo any address, by default a fresh one-time address only your vault controls.

Shield

Moves any registered SPL or Token-2022 token from your wallet into BlindSpot. SOL is wrapped and unwrapped automatically. Your wallet pays the amount plus the 0.3% BlindSpot fee and signs once; the note is sealed in your browser.

Any token can get a BlindSpot vault: if it doesn't have one yet, anyone can open it for about 0.004 SOL of rent. Tokens with features that could put a shared vault at risk (permanent delegates, transfer hooks, pausable mints) are refused on-chain.

Crowd size matters. A token few people use is easier to trace from entry to exit. The app shows each token's crowd and warns when it's small.

Send privately

Pay any BlindSpot address (veil2…; its last characters are a checksum, so a typo is caught) in any token. There's no wallet signature and no BlindSpot fee, only the relayer's network fee. When you hold private SOL, BlindSpot pays that fee in SOL, and the transaction doesn't name the token you sent.

The recipient's app finds the payment by trying to open every new note with its viewing key, so nobody (not even the indexer) learns which notes are whose.

Trade

Swap inside your private balance through Jupiter. On-chain, BlindSpot's vault is the trader. You set a minimum output; if the market can't meet it, nothing is traded and your input returns to your private balance automatically.

Each trade runs in two steps: your proof sets aside the input in an escrow of its own, then the route runs. The program checks the escrow paid out exactly the input and the vault received at least the minimum you approved. The quote and that minimum come from the relayer, so the app compares them with the market price before you approve.

Earn

Lend from your private balance through Jupiter Lend. Your position is a private note of the market's share token (for example jlUSDC), and it grows as the share price rises with interest. Withdraw turns it back into the underlying token, privately.

Lending has its own risks: smart contracts, borrowers, and withdrawal limits when a market is busy. BlindSpot hides who lends; it doesn't insure the market.

Withdraw & one-time addresses

Withdraw sends funds to any Solana address. By default it creates a one-time address derived from your vault, so nothing ties it to your wallet. Your recovery key restores every one of them.

Receive works the other way: give a payer a one-time address instead of your wallet. When funds land, shield them back with one tap. It's gasless: the relayer pays the network fee and takes its fee from the deposit, so even a token-only address works.

Invite & earn

Every vault can create an invite link. Friends who shield through it get 50% of BlindSpot's shield fee back for their first 30 days, and you earn 20% of the shield fees they pay for 12 months. Open Invite in the app.

Create your linkIts code is a one-time address from your vault, never your wallet.
Share itveilit.xyz/r/<code> opens the app with your invite attached; it is remembered in your friend's browser.
Friends shieldEach of their shields carries a small public tag with your code. Only shields count: what happens after that is private, even from you.
Get paid weeklyEvery Monday the treasury pays your share to your invite address and their rebate to the wallet they shielded from. One tap moves yours into your private balance.
What is public. The tag links your invite address to your friend's shield, which is a public deposit anyway. Payouts are ordinary transfers from the treasury to your invite address. Neither touches your wallet or anything inside BlindSpot.

What is public, what is private

Pick an action to see exactly what the chain records and what stays sealed.

What Solana sees
  • That a private transfer happened
  • The relayer fee (in SOL when you hold private SOL)
  • How many notes were spent (1–4)
What stays private
  • Sender
  • Recipient
  • Amount
  • Which token, when the fee is paid in SOL
With no private SOL, the relayer is paid in the token itself, so that transfer shows which token moved. The app tells you before you confirm.

Good habits

  • Don't withdraw the exact amount you shielded to the same wallet right away.
  • Keep a little private SOL so transfers can hide their token.
  • Prefer tokens with a big crowd; wait a while between shielding and withdrawing.
  • Reach the relayer through a network-level privacy tool if your IP address matters to you.

Fees

BlindSpot's fee is 0.3% each time value crosses the privacy wall: when you shield, trade or withdraw. Private sends between BlindSpot users have no BlindSpot fee. The program enforces the rates; here they are, read live from the chain:

ActionBlindSpot feeRelayer fee
Shield0.3%, on topNone (your wallet pays the network fee)
SendNoneNetwork fee + rent for each note spent
Trade / Earn0.3% of the inputNetwork fee + rent
Withdraw0.3% of what you withdrawNetwork fee + rent (+ opening the recipient's token account if needed)

20% of BlindSpot's fee revenue goes back to $VEIL: it buys $VEIL on the market and burns it. See $VEIL token.

Try it

Action
Amount (any token)
BlindSpot fee0.3% · 0.3
ResultYour wallet pays 100.3; 100 lands privately.
Official platform token

$VEIL token

$VEIL is the official token of the BlindSpot platform. 20% of everything BlindSpot earns in fees buys $VEIL on the market and burns it, so the token grows with every private shield, trade and withdrawal.

Price—USD, live market price
Market cap · FDV—Price × total supply
Supply—Tokens in existence
Freeze authority—Read from the mint
Loading live numbers…Solana mainnet · BlindSpot indexer
Official contract · Solana
HgTGdc29D5bDMrDvsCLnorxz899VyDj7ZN7FPa6vpump
Ticker$VEIL
NetworkSolana mainnet
StandardToken-2022
ExplorerView on Solscan

20% of revenue: buyback and burn

FeesShielding, trading and withdrawing each pay a small protocol fee
TreasuryCollected on-chain into BlindSpot’s Squads multisig
Buyback20% buys $VEIL on the open market
BurnThose tokens are destroyed for good

20% of BlindSpot’s revenue (all of its protocol fees on shielding, trading and withdrawing) is used to buy $VEIL on the open market and burn it. Burned tokens are gone for good, so every buyback permanently shrinks the supply. As more value moves through BlindSpot, more $VEIL is bought back.

Every step is an ordinary on-chain transaction: the fees reach the treasury through the program’s collect_fees instruction, and the buybacks and burns appear on any Solana explorer. The numbers above are read live from the chain and BlindSpot’s indexer.

Getting $VEIL

Privately, in BlindSpotOpen Trade and swap into $VEIL from your private balance. It lands in your private balance like any other token, and the chain never links it to your wallet.
Anywhere elseAny Solana exchange or wallet that trades it. Always check the contract address above: copies with the same name are not $VEIL. In the app, only the real $VEIL carries the lilac Official platform token check, because the app recognises it by its contract, never by its name.
Good to know. You don’t need $VEIL to use BlindSpot: fees are paid in the token you move. Like any token, its price can fall as well as rise. Nothing here is financial advice. More answers in the FAQ.

Keys & recovery

Your vault holds one random 32-byte root. From it your browser derives a spending key (to spend notes), a viewing key (to find and open them) and every one-time address. It's encrypted with your passphrase (PBKDF2, 600,000 rounds → AES-GCM) and stored only in this browser.

  • The recovery key (shown once at creation) restores everything on any device. Anyone who has it can spend your private balance.
  • It is not derived from your wallet, so a wallet compromise doesn't expose your BlindSpot balance, and vice versa.
  • Lose both this browser and the recovery key and the funds are unrecoverable. Nobody, including BlindSpot, can restore them.

Security model

  • Non-custodial: only proofs from your keys move your notes. The admin can pause, set fees, caps and allowlisted programs, but cannot move anyone's funds.
  • Bound to the proof: recipient, fees and swap terms are hashed into the proof by the program itself; a relayer that changes anything gets an invalid proof.
  • Isolated swaps: each trade or lend has its own escrow and signer; an allowlisted protocol can only touch that one.
  • Multisig admin: a 2-of-2 multisig, handed over in two steps; it can pause, never move funds.

Testing, review status and live on-chain checks are on the Security page.

Limits & risks

  • Anonymity set: privacy grows with the number of people using BlindSpot, and per token for shields and exits.
  • Freezable tokens (like USDC) can have their vault frozen by the issuer. The app labels them.
  • Emergency pause: the multisig can pause deposits, transfers and swaps; withdrawals stay open. In an incident it can also pause everything leaving the pool for at most about 3 days (it ends by itself, and a new one can start only 7 days after the last).

SDK

@veil/sdk does everything the app does: keys, sync, proofs, and talking to the relayer. Proofs are generated client-side; nothing secret is ever sent.

import { VeilClient } from '@veil/sdk'
import { deriveKeys, rand } from '@veil/crypto'

const veil = new VeilClient({
  connection, programId,
  indexerUrl: 'https://indexer.example', relayerUrl: 'https://relayer.example',
  circuit: { wasm: '/circuits/transaction.wasm', zkey: '/circuits/transaction.zkey' }
})
veil.unlock(deriveKeys(rand(32)))   // keep the 32-byte root safe: it is the vault
await veil.sync()                      // download notes, find yours by trial decryption
console.log(veil.rootStatus)           // 'ok': checked against the program's own root on-chain

// tokens are named by mint (a token's own symbol is never trusted)
const SOL_MINT = 'So11111111111111111111111111111111111111112'
const USDC_MINT = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'
for (const m of [SOL_MINT, USDC_MINT]) await veil.resolveAsset(m)   // reads each token's BlindSpot config from chain

Relayer & indexer API

Both are plain HTTP and keep no logs of who asked what. Anyone can run their own. Which addresses the app may connect to, checked live in your browser: API.

EndpointWhat it does
GET /v1/infoRelayer key, allowlisted swap and lending programs, protocol fee rates
GET /v1/fee?mint&inputsRelayer fee for a token and number of notes spent, and the account it's paid to
POST /v1/relaySubmit a proof (transfer, withdrawal, trade, lend); the relayer pays the network fee
POST /v1/sponsorGasless shield: co-sign a deposit as fee payer after a strict check
GET /v1/quoteSwap or lending quote, after the BlindSpot fee
GET /v1/positionsLending markets, rates and share prices
GET /v1/commitmentsIndexer: every note commitment and ciphertext, in order (everyone downloads all)
GET /v1/nullifiers · /v1/rootIndexer: spent markers and the current Merkle root

On-chain program

Program id · mainnet
FmsMbXrQXr1mARn45Cm52sdrwAWHDxqF8473t6woq9DP
InstructionPurpose
transactShield, private transfer or withdrawal, with a Groth16 proof (up to 4 notes in, 3 out)
swap_prepare · swap_execute · swap_refundTwo-step private trade or lending position through an allowlisted program
register_assetOpen a vault for a token (anyone; screened on-chain)
collect_feesSweep protocol fees to the treasury (anyone; treasury only)
set_* · accept_adminMultisig governance: fees, caps, pause, allowlist, two-step admin handover

Circuit: Transaction(26, 4, 3), Groth16 over BN254, 13 public inputs, verified with Solana's alt_bn128 syscalls. Notes live in a Poseidon Merkle tree of 226 leaves.

Questions & answers

FAQ

Everything people ask about using BlindSpot and about $VEIL. Tap a question to open it.

Using BlindSpot
What is BlindSpot?

BlindSpot gives you a private balance on Solana. Shield any supported token into it, then send, trade, earn and withdraw without linking any of it back to your public wallet. It runs on zero-knowledge proofs, so the chain checks every move without learning who made it.

How does BlindSpot keep my activity private?

Your private balance is made of sealed notes. To spend one, your browser builds a proof that you own a valid note without saying which one. The relayer submits that proof for you, so your wallet never appears in the transaction, and observers only see that someone in the pool acted.

Does BlindSpot ever hold my keys?

No. Your vault is generated and encrypted in your browser, and proofs are built there too. The relayer and indexer never get your keys. They see your IP address, and the relayer sees the transactions it submits for you, which are public on-chain anyway.

Can the BlindSpot team freeze or take my funds?

No. The program has no path for anyone to move notes without the owner’s proof. The multisig can pause deposits, transfers and swaps in an emergency (withdrawals stay open), pause everything leaving the pool for at most about 3 days with 7 days between two such pauses, and set limits (disabling a token stops new deposits into it, never its withdrawals). It is also the upgrade authority, so it could change the program itself; upgrades are announced in advance.

Has BlindSpot been audited?

Yes. ContractWolf audited BlindSpot’s on-chain program and scored it 95/100, and every finding was resolved. The full report is public at contractwolf.io/projects/veil. Program upgrades need both signatures of a 2-of-2 Squads multisig.

What can I do with my private balance?

Hold it, send it privately to any BlindSpot address, trade it into another token, earn yield through Jupiter Lend, and withdraw to any Solana address whenever you like. The chain never links any of it to your wallet.

What does it cost?

Shielding, trading and withdrawing each carry a small protocol fee, and private sends carry none. You see the exact amount before you confirm. Once your funds are shielded, the relayer pays the network fees for you. Current rates and a calculator are under Fees.

Is BlindSpot anonymous?

BlindSpot breaks the on-chain link between your wallet and your private activity. Your privacy grows with the crowd: the more people use a pool, the harder any one move is to trace. Your habits matter too (amounts, timing, tokens). No tool makes anyone 100% anonymous, and we won’t claim one does.

How do I get the most privacy?

Let some time pass between shielding and withdrawing, avoid unique amounts (round numbers blend in), withdraw to a fresh one-time address (the default), and keep a little private SOL so sends never have to name the token.

Which tokens work?

Any SPL or Token-2022 token without features that are unsafe in a shared vault. Anyone can open a vault for a new token right from the app.

Is there a browser extension?

Yes. BlindSpot for Chrome is on the Chrome Web Store. It keeps your private balance one click away, holds several wallets under one password, and works alongside wallets like Phantom without getting in their way. Your recovery key works in the extension and on app.veilit.xyz alike.

What if the relayer goes down?

Your notes stay in the pool, untouched: try again when it is back. The relayer only submits proofs and pays network fees, and it can’t change what your proof allows. Anyone can run one, but each proof pays one specific relayer, and this app uses BlindSpot’s.

I lost my recovery key and browser data.

Then nobody can recover the funds, because nobody else ever had your keys. Write your recovery key down when you create your vault and keep it offline and private.

Why does a send sometimes show the token?

When you have no private SOL, the relayer is paid in the token you’re sending, which names it. Shield a little SOL to keep sends fully hidden.

$VEIL token
What is $VEIL?

The official token of the BlindSpot platform. 20% of BlindSpot’s revenue goes to buying $VEIL on the market and burning it, so the token is tied directly to how much the platform is used. Official contract: HgTGdc29D5bDMrDvsCLnorxz899VyDj7ZN7FPa6vpump.

How does the buyback and burn work?

20% of the protocol fees BlindSpot earns buys $VEIL on the open market, and those tokens are burned for good. More activity on BlindSpot means more buybacks. The fee collection and every burn are public on-chain transactions that anyone can check, and the $VEIL token page shows the running totals live.

Can more $VEIL ever be created?

No. The mint authority is disabled, so no one, the BlindSpot team included, can create new $VEIL. The freeze authority is disabled too, so no one can freeze anyone’s $VEIL. Burns only ever shrink the supply.

How do I know I have the real $VEIL?

Check the contract address: HgTGdc29D5bDMrDvsCLnorxz899VyDj7ZN7FPa6vpump. In the app, the real $VEIL carries the lilac Official platform token check. The app recognises it by its contract, never by its name, so copies with the same name never get the check.

Can I buy and hold $VEIL privately?

Yes. Open Trade and swap into $VEIL from your private balance. It lands in your private balance like any other token, with no link to your public wallet.

Do I need $VEIL to use BlindSpot?

No. Fees are paid in the token you move, and every feature works without holding $VEIL. Like any token, its price can fall as well as rise, and nothing here is financial advice.

Glossary

NoteA sealed record of a token amount you own. Your private balance is your notes.
CommitmentThe public fingerprint of a note, added to the Merkle tree. Reveals nothing about the note.
NullifierPublished when a note is spent, so it can't be spent twice. Unlinkable to the note's commitment.
RelayerA server that submits proofs and pays network fees. It can't alter what the proof allows.
Anonymity setThe crowd your activity blends into: other users of the same pool and token.
One-time addressA fresh Solana address derived from your vault, used once for an exit or a payment.