Skip to main content
Shielded Send on EVM uses RAILGUN, a zero-knowledge proof protocol that lets you hold a private balance on any supported EVM chain. Funds you shield are locked in an on-chain RAILGUN contract. You control them using cryptographic keys derived from your wallet — no one else can see your balance or spending history. When you unshield or send, a Groth16 ZK proof generated that proves you have the right to spend, without revealing your identity or balance.

Supported chains and tokens

ChainNetwork NameSupported assets
EthereumEthereumETH and ERC-20 tokens
ArbitrumArbitrumETH and ERC-20 tokens
PolygonPolygonMATIC and ERC-20 tokens
BNB ChainBNBChainBNB and BEP-20 tokens
The specific ERC-20 tokens available depend on which tokens have been added to RAILGUN’s allowlist. Tokens that have not been allowlisted cannot be shielded.

How it works

1

Connect your EVM wallet

Click Connect wallet in the Shielded Send panel. Any EVM browser wallet (MetaMask, Rabby, etc.) works. Select the chain you want to use.On first connect, your wallet signs two messages to derive your RAILGUN keys — a viewing key and a spending key. These signatures never leave your browser and cost no gas.
2

Wait for engine bootstrap

RAILGUN’s ZK engine loads once per session. It scans the blockchain for your private balances using your viewing key. This typically takes 15–60 seconds on first load. Subsequent sessions are faster.
Do not close the tab during the initial sync. If you do, the next session will re-scan from the last checkpoint.
3

Review your balances

Once synced, the panel shows two balances:
  • Public balance — the tokens in your connected wallet address
  • RAILGUN private balance — your shielded tokens, broken down by token
A Pending sub-balance may appear while shielded deposits are waiting for additional confirmations.
4

Shield funds

To move tokens into your private balance, click Shield. Enter the amount and token, then confirm the transaction in your wallet. This submits a public transaction to the RAILGUN contract depositing your tokens.After the transaction confirms on-chain, the RAILGUN engine scans the new block and credits your private balance. Depending on network congestion, this may show as Pending for a few minutes.
Shielding is a public on-chain transaction. The fact that you shielded tokens — and the amount — is visible on-chain. Only subsequent transfers within RAILGUN are private.
5

Send privately or unshield

With a private balance, you can:
  • Private send — transfer tokens to any recipient address privately. RAILGUN generates a ZK proof, then submits the proof transaction. The recipient receives tokens with no on-chain link to your wallet.
  • Unshield — withdraw tokens from your private balance back to a public address. This is also a ZK-proven transaction.
Enter the recipient address and amount, then click Send or Unshield. ZK proof generation runs may take 10–30 seconds. Do not close or refresh the tab while the proof is generating.

Private Proof of Innocence (POI)

RAILGUN includes a Private Proof of Innocence (POI) system that lets you prove your shielded funds did not originate from sanctioned addresses — without revealing anything else about your transaction history. If POI is required for your balance, the panel shows a POI status indicator. A Valid status means your balance is fully spendable. A Pending status means POI aggregators are still processing your transactions; spending may be restricted until POI resolves. You can open the POI diagnostics panel to inspect POI status per transaction and manually trigger a POI refresh.

Advanced tools

Triggers an incremental re-scan of RAILGUN transactions from the last checkpoint. Use this if your balance appears out of date after a recent shield or receive.
Clears the local scan checkpoint and re-scans all RAILGUN transactions from genesis. This is slower (several minutes) but resolves any persistent balance discrepancies. Your keys and private balance are not affected.
If your browser’s IndexedDB state was corrupted or cleared, the anchor-TX recovery tool lets you re-import a specific transaction hash as a sync anchor so RAILGUN does not need to scan from block 0.
If standard ZK proof generation fails, the emergency unshield tool bypasses normal proof generation and attempts a direct contract call to recover funds. Use only as a last resort.
Clears all RAILGUN engine state from IndexedDB. After a reset, the engine re-bootstraps from scratch on next open. Your on-chain shielded funds are unaffected.

Frequently asked questions

Generating a Groth16 ZK proof involves heavy cryptographic computation. On most modern laptops, this takes 10–30 seconds. Mobiles may be slower.
RAILGUN key derivation requires signing specific messages from your wallet. Most hardware wallet integrations (Ledger via MetaMask) support this, but some signing flows may require additional confirmation steps on the device.