Your bags are nobody’s business.
Veil Layer is a privacy Layer 2 on Solana. Send $VEYL or SOL with the amount, token and recipient hidden.
Solana, with a private side.
Veil Layer runs next to Solana and settles back to it. Same programs, same tools, plus a pool where transfers stay private.
-
Real Solana VM
Agave’s solana-svm, embedded in the node. Your Solana programs run as is.
-
A private pool
A zero-knowledge pool for $VEYL and SOL. Amount, token and recipient stay hidden.
-
Gas in $VEYL
$VEYL is the native unit on Veil Layer. Every fee is paid in it.
-
Settles to Solana
State roots and batch data will be posted to Solana mainnet.
In, across, out.
Three moves. Only the middle one is private, and that’s where your payments happen.
Shield
Move $VEYL or SOL from your account into the private pool. Alice puts in 250 VEYL, and going in is public.
Send privately
Pay anyone in the pool. Alice spends two notes, the new 250 and a 50 already in the pool, and makes two new ones: 180 for Bob, 120 back to her. A zero-knowledge proof shows the math adds up, and nothing more.
Unshield
Take funds out to any public account, whenever you like. Bob takes his 180 out, readable again.
- shield7Hc4…k2Pq → pool · 250 VEYL · $VEYL
- transferproof · 2 nullifiers · 2 commitments
- fee payer7Hc4…k2Pq, public in v1 until the relayer ships
- unshieldpool → 9mWe…Lr2c · 180 VEYL · $VEYL
Privacy needs a crowd. While the pool is small, timing and matching amounts, like 250 in and 250 out, can link an exit to a deposit.
Under the hood
- A note is asset, amount, owner key and a random blinding. The chain stores only its Poseidon hash, the commitment.
- Each private transfer is a 2-in, 2-out join-split proof: Merkle inclusion, ownership, correct nullifiers, value in equals value out.
- Spending a note reveals its nullifier, so the same note can never be spent twice.
- Notes are encrypted to the recipient. Wallets find theirs by trial decryption. Proofs are verified natively in the node.
Nothing minted. Nothing lost.
The bridge is the only thing that converts between 6 and 9 decimals, and it always rounds in the protocol’s favor.
-
1Deposit: ×1,000
12.345678 SPL $VEYL arrives as 12.345678000 native $VEYL. Three places added, nothing invented.
12,345,678 × 1,000 = 12,345,678,000 base units
-
2Hold: all nine places
On Veil Layer every amount carries 9 decimals. Say your balance is now 12.345678912.
12,345,678,912 base units
-
3Exit: ÷1,000, rounded down
Only whole 1,000s of base units cross. 12.345678 goes back to Solana. The last 0.000000912 stays on Veil Layer, still yours.
⌊ 12,345,678,912 ÷ 1,000 ⌋ = 12,345,678 · 912 stay
Try any amount.
Same integer math as the bridge, done exactly in your browser.
Exits move whole multiples of 1,000 base units. The rest stays yours.
⌊ 12,345,678,912 ÷ 1,000 ⌋ = 12,345,678 SPL base units · remainder 912
Escape hatch. If the operator stops or censors you, withdraw on Solana against the last valid root, under the same whole-unit rule.
SOL moves 1:1 with 9 decimals on both sides, and arrives on Veil Layer as wrapped SOL.
Calculator only. No funds move. The bridge opens to real value after the security gate, under deposit caps.
Run a full deposit and exit in the app$VEYL. One token, two homes.
Trade it on Solana. Use it on Veil Layer. Same token, different decimals, converted only by the bridge.
6 decimals
On Solana
The SPL token. Tradeable, pump.fun-compatible, and what you bridge.
1 $VEYL = 1,000,000 base units
9 decimals
On Veil Layer
Native. Pays every fee, holds your balance, moves in the private pool.
1 $VEYL = 1,000,000,000 base units
Contract address
Announced at launch
Only trust the address posted through the official links on this site.
Buy $VEYLYour Solana code runs as is.
Veil Layer embeds Agave’s solana-svm and speaks the Solana JSON-RPC. web3.js, wallet-adapter and the solana CLI work unchanged.
Sample session. # sample session: point the standard solana CLI at Veil Layer $ solana config set --url $VEIL_RPC_URL Config File: ~/.config/solana/cli/config.yml RPC URL: $VEIL_RPC_URL Keypair Path: ~/.config/solana/id.json Commitment: confirmed $ solana balance 12.345678912 SOL # same CLI, so it says SOL. Here that unit is native $VEYL. $ solana program deploy target/deploy/counter.so Program Id: Cnt7r9QvZkW3pXh2MbYsL5aEdF8uGjN4oTqR1cVwKxBe # fees and rent are paid in $VEYL $ npx tsx balance.ts 12345678912 # base units: 12.345678912 $VEYL, 9 decimals
import { Connection, PublicKey } from "@solana/web3.js";
// Same Solana JSON-RPC. Set VEIL_RPC_URL once it is published.
const veil = new Connection(VEIL_RPC_URL, "confirmed");
// native $VEYL balance, 9 decimals
const owner = new PublicKey(YOUR_ADDRESS);
const balance = await veil.getBalance(owner);
console.log(balance); // base units
Runs unchanged
- solana CLIPoint it at the Veil Layer RPC URL.
- Your BPF programsDeploy them with the same command.
- web3.jsSame JSON-RPC over HTTP and WebSocket.
- wallet-adapterYour dapp connects as it does on Solana.
- Preloaded programsSystem, SPL Token, Token-2022, ATA, Memo, Compute Budget.
Program state is public, like on Solana. The public RPC endpoint is published in Stage 9. The session above is a sample.
Try the JSON-RPC playgroundKnow exactly what you trust.
v1 is a Stage-0 rollup with a single operator. Here is what that means today, and what removes each trust.
What you trust today
- One sequencer
- Orders transactions and can censor or reorder them.
- What fixes it: Escape hatch from day one. A sequencer set in Stage 10.
- Alarm, not veto
- Anyone can recompute the data and raise an alarm. Invalid roots aren’t rejected on-chain yet.
- What fixes it: Enforced fraud proofs in Stage 10.
- Visible fee payer
- The public fee path can link whoever pays the fee to a private transfer.
- What fixes it: The relayer, built in Stage 7.
Real value waits for all four.
- 01Escape hatch tested end to end
- 02Deposit caps in place
- 03Sound proof setup published
- 04External audit of the bridge and the private pool
Checked at the Stage 8 security gate. Until then, the bridge and the pool take no real value.
Ten stages. Real value comes last.
A sequence, not a schedule. Every stage is built to production grade.
- Stage 1
Prove Solana programs run
Show the Solana VM running inside Veil Layer.
- solana-svm on pinned Agave crates
- A System transfer, proven in a test
- Stage 2
A real chain
Blocks, state and a Solana-compatible RPC.
- Mempool and block production
- Solana JSON-RPC over HTTP and WebSocket
- Standard programs preloaded
- Stage 3
Lock it down
Protect the keys and keep the single sequencer healthy.
- Sequencer key in an HSM
- Rate limits and DDoS protection
- Monitoring and a failover plan
- Stage 4
See every block
Index the chain and make it browsable in an explorer.
- Indexer from slot 0
- Explorer with live updates
- Stage 5
Anchor to Solana
Write Veil Layer’s record onto Solana mainnet.
- Settlement program on Solana
- State roots and batch data posted
- Rollup status in the explorer
- Stage 6
Bridge and exit door
Move SOL and $VEYL between chains, with a forced exit built in. No real value yet.
- Deposits, withdrawals and claims
- 6 to 9 decimal scaling
- Escape hatch, deposit caps kept closed
- Stage 7
Turn on the veil
The private pool, the client that finds your notes, and the relayer.
- Circuits and the proof system
- Shielded pool inside the node
- Shielded client and relayer
- Stage 8
Prove it’s safe first
Audit, publish the proof setup, test the escape hatch.
- Internal review, then an external audit
- Proof setup published
- Escape hatch tested end to end
Security gate Real value opens only after this point.
- Stage 9
Open the doors, carefully
Real value goes in, slowly and under caps.
- Bridge opens under conservative caps
- Private pool: $VEYL first, then wSOL
- Public RPC and explorer published
- Stage 10
Harden and decentralize
Remove trust from the operator and widen what the bridge carries.
- Relayer for everyone, encrypted mempool
- Enforced fraud proofs, then a sequencer set
- More assets over the bridge
Straight answers.
Something missing? Ask on Telegram
Is Veil Layer trustless?
Not in v1, and we say so up front. It starts as a Stage-0 rollup: one sequencer that can censor or reorder, and a challenge window where anyone can raise an alarm but bad roots aren’t rejected on-chain yet. The escape hatch lets you exit on Solana if the sequencer fails you.
Do I need SOL for gas?
Not on Veil Layer. Every fee there is paid in $VEYL, and SOL only exists on the L2 as bridged wrapped SOL. Deposits and withdrawal claims happen on Solana, so those transactions pay Solana’s own fees in SOL.
Does Phantom work?
On Solana, yes: SPL $VEYL is a standard SPL token. On Veil Layer, the RPC is built so wallet-adapter works unchanged, and a wallet can connect if it lets you set a custom network. Private notes need a shielded client, like the one in the Veil Layer SDK.
What if the sequencer goes offline or blocks me?
Use the escape hatch: a forced-withdrawal path on Solana that pays out against the last valid posted root, with the same whole-unit rule as a normal exit. It must pass an end-to-end test at the security gate before any real value goes in.
Is it audited?
Not yet. Stage 8 runs an internal review, then an external audit of the bridge and the private pool. Neither opens to real value before that.
When is mainnet?
There’s no date. Veil Layer follows a sequence of stages, and the bridge and private pool open to real value only after the Stage 8 security gate. The contract address will be announced at launch through the official links on this site.
Watch it get built. Stage by stage.
Contract address: announced at launch