The Privacy Pipeline

A detailed walkthrough of each step in the private sending process, from sign-in to delivery.

Step 1Sign In

When you first use Private Send, you sign a message with your wallet. This is not a transaction — it costs no gas and sends nothing on-chain. The signature is used to deterministically derive a private RAILGUN spending key.

This spending key is what lets you control tokens inside the shielded pool. It is generated entirely in your browser and never transmitted anywhere. The same wallet and signature will always produce the same key, which is why you can recover your shielded balances even after clearing your browser data — just sign in again.

You must sign in each session because the derived key is held in memory, not persisted to disk. This is an intentional security measure.

Step 2Shield Tokens

Shielding deposits your tokens into the RAILGUN smart contract — the "shielded pool." Once inside, your tokens exist as encrypted UTXOs (unspent transaction outputs) in a merkle tree. They are no longer visible in your public wallet balance.

If you are sending a native gas token like ETH, it must first be wrapped into an ERC-20 (WETH). RAILGUN only works with ERC-20 tokens. The app handles this wrapping automatically.

You may see up to three wallet prompts during shielding:

  • Wrap converts native ETH to WETH (only for native tokens)
  • Approve grants the RAILGUN contract permission to transfer your tokens
  • Shield the actual deposit into the shielded pool

After the shield transaction confirms on-chain, your tokens are in the pool. Your public wallet balance decreases, and your shielded balance increases — though it will show as "pending" until the next step completes.

Step 3PPOI Clearance

Private Proof of Innocence (PPOI) is a decentralized compliance layer built into the RAILGUN protocol. It is not KYC — no identity information is collected or required.

After you shield tokens, the protocol checks that your deposit is not associated with known illicit activity. This is done through zero-knowledge proofs that verify compliance without revealing who you are or what you deposited.

During this clearance period, your shielded balance shows as "pending." Once PPOI clears, the balance becomes "spendable" and can be used for private transactions.

Timing varies by network. Testnets typically clear in ~5 minutes. Mainnet clearance takes approximately 60 minutes. Your tokens are safe in the shielded pool during this entire wait.

You can safely close the page during PPOI clearance. The app saves your operation state and will offer to resume when you return.

Step 4Unshield to Recipient

Once your shielded balance is spendable, the app generates a zero-knowledge proof. This proof mathematically demonstrates that you own tokens in the pool and have the right to withdraw them, without revealing which specific deposit is yours. Proof generation takes approximately 20-30 seconds and happens entirely in your browser.

Broadcaster mode (recommended)

A third-party relayer submits the unshield transaction on your behalf via the Waku peer-to-peer network. Your public address never appears on the unshield transaction. The broadcaster takes a small fee, deducted from your shielded balance. This provides the strongest privacy — the recipient receives tokens with no link to your public wallet.

Direct mode

You submit the unshield transaction yourself from your public wallet. This is cheaper (no broadcaster fee, just gas) but your public address is visible on the unshield transaction. The shield-to-pool link is still broken, but the pool-to-recipient link reveals your address.

Once the unshield transaction confirms, tokens arrive in the recipient's public wallet. If the original token was a native gas token (e.g., ETH), the app automatically unwraps WETH back to ETH.