Technical Info

You don't need to understand how the internals work to use this tech. Most details on this page are for those seeking deeper knowledge. However, be sure to read the Fees section at the bottom.

How PrivacySend Works

We give your regular wallets like MetaMask a RAILGUN private address. As a result, you can send / receive crypto privately. Most users use their private address to unlink their crypto from their identity before moving the funds to a fresh public address.

Sending to a Private Address

When you send funds to your Private Address, they are securely transferred into the RAILGUN Relay Adapt contract. Behind the scenes, this contract functions as an encrypted private ledger structured as a Merkle Tree, which subdivides and isolates all zero-knowledge addresses, including yours, into their respective private balances.

This ledger ensures that every token you deposit is individually accounted for using the UTXO (Unspent Transaction Output) model, preventing any commingling of tokens.

RAILGUN's Merkle Tree is fully anonymised and implemented within the smart contract. For more details about RAILGUN and its contracts, please visit the RAILGUN Documentation.

Sending from a Private Address

Prerequisite: On EVM compatible networks like Polygon, Ethereum, and Arbitrum, every transaction incurs a fee known as a gas fee. This transaction fee is required for any change made to the blockchain and must be initiated by a wallet.

When withdrawing from your private address, the first step is estimating the gas fee required to submit the transaction on-chain.

Next, we utilise zero-knowledge proof technology, specifically the Groth16 Prover. This cryptographic technique generates a proof that verifies the funds you are sending belong to you without exposing sensitive details to the blockchain. The proof is then embedded in an encrypted transaction for submission.

Your wallet signs and submits the transaction directly. Because the ZK proof hides all internal details, on-chain observers only see the final withdrawal — not the sender, amount, or history.

How Your Private Address is Generated

There are 2 methods to derive a private address. (A) uses a signature for deterministic recovery, (B) uses random entropy. Both methods create a mnemonic which gets passed into createRailgunWallet from @railgun-community/wallet. Only the private address features of the RAILGUN wallet are used.

Method (A) — Deterministic from Signature

  • 1.The wallet entropy is derived deterministically from the raw signature produced by signing a project-specific message with the user's private key.
  • 2.The signature bytes are hashed using keccak256, and the resulting hash is truncated to the desired entropy length (128 bits for 12-word, 256 bits for 24-word mnemonics).
  • 3.The truncated hash is converted to a Buffer and passed to entropyToMnemonic (BIP39), producing a mnemonic that fully determines the wallet.
  • 4.Both the exact signed message and the resulting signature are required; altering either produces a completely different mnemonic and wallet.

Method (B) — Random Entropy

  • 1.We generate a random 128-bit entropy using randomBytes(16) from ethers.
  • 2.This entropy is converted into a BIP39 mnemonic with Mnemonic.fromEntropy().
  • 3.The resulting mnemonic is fed into createRailgunWallet to deterministically create the wallet.

Fees

Shielding (deposit)

Public → Private balance

0.25%

Unshielding (withdraw)

Private → Public address

0.25% + gas

The 0.25% fee is a protocol-level RAILGUN fee taken from the shielded/unshielded amount. Gas fees are the standard network transaction costs and vary by chain congestion.

What's Visible On-Chain?

On-chain observers can only see where tokens entered the RAILGUN contract (shield) and where they exited (unshield). Everything between — transfers, balances, the connection between sender and receiver — is encrypted and invisible. The Merkle Tree ledger within the smart contract ensures complete privacy for all intermediate activity.

Supported Networks

Ethereum
Polygon
Arbitrum
BNB Chain