Search for projects by name or address
An onchain privacy system for Ethereum based on encrypted UTXO-style private balances and zk-proven DeFi interactions.
An onchain privacy system for Ethereum based on encrypted UTXO-style private balances and zk-proven DeFi interactions.
Railgun is a non-custodial privacy protocol on Ethereum built around encrypted UTXO-style private balances rather than fixed-denomination pools. This design enables in-protocol transfers of shielded tokens and interactions with DeFi smart contracts on L1.
A shield transaction moves assets from a public address on Ethereum into the Railgun contract and creates encrypted commitments in a Merkle-tree state. Later private transfers or unshields use zk-SNARK proofs to spend those commitments without revealing the sender, recipient, token type, or amount. Notes created by deposits and private transactions represents ownership of tokens in Railgun, users must keep them secret and make sure the notes are not lost.
Railgun supports private transfers and cross-contract interactions without fragmenting liquidity across denominations. DeFi calls can be executed through the RelayAdapt contract, which temporarily unshields tokens to Ethereum L1, performs a sequence of contract calls, and shields the resulting assets back into Railgun in a single transaction (facilitated by a relayer).
Railgun has a DAO governed by holders of the RAIL token. The DAO has the authority to arbitrarily change the logic of the protocol and its shielded tokens.
Railgun protocol supports relayed withdrawals, in which a relayer (called a broadcaster in Railgun ecosystem) processes withdrawals on the user’s behalf for a fee, which enables sending funds to fresh addresses. Transactions from private addresses can be sent through relayers over the Waku network, which increases network-level privacy. Railgun allows interactions between shielded tokens and DeFi, which allows depositing and withdrawing different tokens.
Practical privacy also depends on the timing and amounts of deposits and withdrawals. Users are advised to research OPSEC best practice.
There are mandatory onchain protocol fees of 0.25% for shields and 0.25% for unshields. The NFT fee field is currently set to 0. Shield and unshield fees are sent to the Railgun Treasury.
Relayers can charge additional offchain fees for submitting transactions on a user’s behalf. These relayer fees are not set by the core protocol contracts.
Railgun protocol does not enforce any compliance measures. However it allows using Private Proof of Innocence(PPoI), which can attest to the origin and history of shielded tokens. Relayers and some wallets require a valid PPoI for their services, but they are not generally enforced.
Additionally, Railgun users can share a read-only viewing key to expose all sent and received private transactions, if required by a regulator or enforcer.
Because Railgun allows private transfers, optional PPoIs that can be enforced by relayers, and interactions with DeFi, its anonymity set depends on many details. A withdrawal from Railgun could be connected with a deposit of another token, or could not correspond to any deposit if a user received a private transfer from another user. The anonymity set, in the best case, corresponds to the set of all Railgun users.
What the protocol promises: Hides everything inside the pool, including which shield funds which unshield. Shields and unshields are public.
On public blockchains like Ethereum, all actions transparent by default. A privacy protocol can at best cut the link between addresses or offer privacy while deposited. The colour says whether a careful user can keep the link, amount or recipient private against that adversary: green yes, yellow only outside supported options or by accepting another leak, red no. Fields marked at risk stay private only under the condition in their note.
Everything inside the pool is hidden, including which shield funds which unshield. Shields and unshields show address, token and amount. DeFi bundles unshield to the adapter in cleartext.
Advice: Exit through a broadcaster, so no wallet of yours pays gas for the receiving address.
The candidates for an unshield are the shields of the same token. In-pool transfers break the one-to-one match of a mixer, but timing and exact or round amounts narrow the set. Paying gas from your own wallet instead of a broadcaster exposes that wallet's fingerprint, its account implementation and fee habits, even from a fresh address.
Advice: Withdraw common amounts rather than everything at once. Wait before exiting and pick a different time of day than the deposit. Exit to a fresh address every time and spend from it with a different wallet than the one that deposited.
The wallet finds its notes by trial-decrypting every note locally, so nodes learn nothing about which are yours. By default it sends the pending unshield to the configured node for a gas estimate, which reveals the destination early.
Advice: Read the chain from your own node, send through a public RPC over Tor, and use a popular broadcaster. If you settle for a VPN instead of Tor, pick one you trust: it hides your IP from the broadcaster but sees it itself.
There is no view key, so nobody can read past activity. The DAO can upgrade the contracts after a seven-day delay. The proof-of-innocence list provider can refuse to list a shield, leaving only a self-broadcast exit.
Advice: Watch governance proposals. You have seven days to unshield before an upgrade takes effect. Be ready to self-broadcast if the list provider censors you.
Notes are encrypted with elliptic-curve key exchange. A quantum computer decrypts every note sent to a 0zk address that was ever shared, including broadcaster fee notes: amounts, tokens and counterparties.
Advice: Treat your 0zk address as a secret: share it privately, and use a fresh one per counterparty where you can.
How many unique addresses you could have blended in with if you withdrew on a particular day after depositing during the previous 30 days. This metric is a proxy for the historic anonymity set and shows how it developed over time.
The metric looks backwards: it counts deposits that already happened, including from addresses that have since withdrawn. Your real anonymity also depends on deposits made after yours, which cannot be known in advance.
An estimate of how many unique addresses you blend in with, depending on how long you leave your deposit in the pool. It is based on historic data of past deposits: each point counts depositors from the preceding period, so holding for up to 30 days effectively means blending in with everyone who deposited during the last 30 days.
Asset | Deposits 7D | Deposits 30D | Deposits Total | Value Locked |
|---|---|---|---|---|
WETH | 450 $3.18 M | 1.97 K $21.34 M | 43.55 K $1.51 B | $54.73 M |
USDC | 132 $4.48 M | 541 $13.95 M | 9.21 K $297.93 M | $16.76 M |
USDT | 291 $4.54 M | 1.19 K $22.14 M | 11.16 K $383.30 M | $9.07 M |
DAI | 16 $84.99 K | 75 $7.21 M | 2.15 K $196.25 M | $6.05 M |
NEAR | 0 $0.00 | 0 $0.00 | 0 $0.00 | $3.88 M |
WBTC | 3 $11.28 K | 14 $74.97 K | 656 $41.44 M | $2.53 M |
RAIL | 3 $162.88 | 13 $13.51 K | 331 $3.69 M | $805.73 K |
FLUID | 0 $0.00 | 0 $0.00 | 2 $1.55 M | $219.39 K |
| Total | 895 $12.31 M | 3.81 K $64.74 M | 67.08 K $2.44 B | $94.07 M |
Railgun features an omnipotent DAO governed by the stakers of the RAIL token. The DAO has the authority to change ZK circuit logic on the core Railgun contract, which can arbitrarily change the rules for shielded tokens; as well as manage blacklisted tokens, mint RAIL tokens and manage governance rewards. See docs here: https://docs.railgun.org/wiki/rail-token/protocol-governance
| Normal upgrade path | Create a proposal with an IPFS link and onchain calldata in the Voting contract → collect 500.00 K RAIL sponsorship within 1mo → wait 2d → cast Yay votes within 5d and Nay votes within 6d → pass with a simple majority and 2.00 M RAIL quorum → wait 7d → permissionless execution through the Delegator within 14d. |
|---|---|
| Exit window | 7d — a passed proposal must wait this long before it can be executed, giving users time to unshield funds. |
| Governance token |
|
|---|---|
| Stake lock | Unstaking has 1mo delay. |
| Voting venue | Voting contract on Ethereum. Proposal text is distributed over IPFS, its CID is available as a parameter of |
| Proposal threshold | No threshold to create a proposal. A proposal must receive sponsorship from 500.00 K RAIL stake within 1mo. |
| Quorum | 2.00 M RAIL, with a simple majority required for acceptance. |
| Execution model | Onchain calldata · Permissionless execution through the Delegator. A passed proposal waits 7d, after which anyone can execute it through the Delegator contract within 14d. |
Circuit-specific Phase 2 trusted setup for Railgun’s 54 Groth16 circuits (parameterised by transaction input/output counts) over the BN254 curve. It builds on the Polygon zkEVM ceremony https://github.com/iden3/snarkjs/tree/master?tab=readme-ov-file as phase 1, which contains 55 participants.
A separate Phase 2 ceremony was publicly announced, open to anonymous and identified participants, and wrapped up in late December 2022.
Verified against the ceremony artifact IPFS hash
QmWAySHYhaZqioKi1ufrPJC1n1ZVtHP2w4hLA9XqqJCFne: the
/contributors directory contains 328 sequentially-numbered attestation files with
GitHub or Twitter handles, and the /zkeys directory contains 54 final zkey files (one
per circuit). Parsing the final zkey binary for the 1x1 circuit shows 304 Phase 2
contributions on that circuit.
Verifier | Verification | Used in | Known deployments | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Railgun verifier | by | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Verifier ID: Railgun 91 circuit verifier 03.07.2026Known deployments Verification steps Railgun smart contract acts as a verifier for ZK proofs for all 91 Railgun circuits. 91 different verification keys for these circuits are stored onchain in the verifier smart contract. This regeneration attests that the verification keys stored onchain correspond to circuits published in Railgun repo. Generally, to regenerate all Railgun verification keys, the following has to be done:
Helper scripts that implement the flow above and more detailed explanations could be found in this script .zip archive. This .zip must be extracted in | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Both VerificationKeySetters were moved into SETTING state by their EOA owners, thus preventing the possibility of changing Railgun contract verification keys to an older version by a single EOA without DAO participation.
Both VerificationKeySetters were moved into SETTING state by their EOA owners, thus preventing the possibility of changing Railgun contract verification keys to an older version by a single EOA without DAO participation.
| contract VerificationKeySetter_64DA (eth:0x64DA0892E8E24fECa6Eb5E3D8cbf2D9b6Fbe7598) [railgun/VKeySetter] { | |
| +++ description: Auxiliary verifier-key staging contract. Its owner stores replacement verification keys locally and, if Railgun governance switches the contract into COMMITTING state, can register the new keys in the Railgun smart wallet verifier. | |
| +++ description: Current workflow phase: SETTING, WAITING, or COMMITTING. Only COMMITTING allows the owner to forward staged verification keys to the verifier. | |
| +++ severity: HIGH | |
| values.state: | |
| - | 2 |
| + | 0 |
| } | |
| contract VerificationKeySetter_9086 (eth:0x9086aFC6FC88667d4031Cabd556AfDD0E3903B46) [railgun/VKeySetter] { | |
| +++ description: Auxiliary verifier-key staging contract. Its owner stores replacement verification keys locally and, if Railgun governance switches the contract into COMMITTING state, can register the new keys in the Railgun smart wallet verifier. | |
| +++ description: Current workflow phase: SETTING, WAITING, or COMMITTING. Only COMMITTING allows the owner to forward staged verification keys to the verifier. | |
| +++ severity: HIGH | |
| values.state: | |
| - | 2 |
| + | 0 |
| } | |
Four new proposals (IDs 29-32) created 2026-09-06 by the same proposer (0x5964ed1e...), all byte-identical, so effectively one proposal submitted four times. Title: "Add USDC and USDT to AGR Rewards". Single action: Delegator calls addTokens([USDT, USDC]) on GovernorRewards, adding both stablecoins to the Active Governor Rewards distribution set (4.2% of Treasury balance per 2-week interval streamed to stakers). No other parameter changes. Only ID 32 has sponsorship (~90.7k of the 500k RAIL threshold), 29-31 have none. None has gone to vote or been executed. Proposal 28 (swap ~15.1k Treasury USDC to DAI via Curve 3pool, all DAI returned to Treasury) is still open with zero sponsorship. Governance UI: https://governance.railgun.org/proposals/v2/32 (proposal document on IPFS: bafkreia5rfx3x4phxl3tyscjc55eaac5sd7dnfjpsk4nywlgq55viy4e5e).
Four new proposals (IDs 29-32) created 2026-09-06 by the same proposer (0x5964ed1e…), all byte-identical, so effectively one proposal submitted four times. Title: “Add USDC and USDT to AGR Rewards”. Single action: Delegator calls addTokens([USDT, USDC]) on GovernorRewards, adding both stablecoins to the Active Governor Rewards distribution set (4.2% of Treasury balance per 2-week interval streamed to stakers). No other parameter changes. Only ID 32 has sponsorship (~90.7k of the 500k RAIL threshold), 29-31 have none. None has gone to vote or been executed. Proposal 28 (swap ~15.1k Treasury USDC to DAI via Curve 3pool, all DAI returned to Treasury) is still open with zero sponsorship.
Governance UI: https://governance.railgun.org/proposals/v2/32 (proposal document on IPFS: bafkreia5rfx3x4phxl3tyscjc55eaac5sd7dnfjpsk4nywlgq55viy4e5e).
| contract Voting (eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC) [railgun/Voting] { | |
| +++ description: Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator. | |
| +++ severity: HIGH | |
| values.proposalCount: | |
| - | 29 |
| + | 33 |
| } | |
Swap USDC to DAI proposal: https://tools.l2beat.com/decoder-new/?hash=0x83963ddea866aa6d77200fd5f6633d59aa6d4dc9a807496277f6910cc76a0369&data=AwA Actions: 1. Treasury → Delegator: 15109.211424 USDC 2. Delegator: USDC.approve(Curve3pool, 15109.211424) 3. Curve3pool: exchange USDC→DAI (min dy = 15031.466111962828487747 DAI, 0.5% slippage) 4. Delegator → Treasury: 15031.466111962828487747 DAI (floor) 5. Delegator → Treasury: 75.535005587752906974 DAI (expected bonus)
Swap USDC to DAI proposal: https://tools.l2beat.com/decoder-new/?hash=0x83963ddea866aa6d77200fd5f6633d59aa6d4dc9a807496277f6910cc76a0369&data=AwA
Actions:
| EOA (eth:0x5a02474A3083Bc969f20F92E7a8bd3824EC607f0) { | |
| +++ description: None | |
| proxyType: | |
| - | "EOA" |
| + | "EIP7702 EOA" |
| sourceHashes: | |
| + | ["0xd9649be084919b1ae25d4d396555667632253f10ddb6a9bddc939db45f797b10"] |
| values: | |
| + | {"$implementation":"eth:0x5A7FC11397E9a8AD41BF10bf13F22B0a63f96f6d","nonce":0} |
| } | |
| contract Voting (eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC) [railgun/Voting] { | |
| +++ description: Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator. | |
| +++ severity: HIGH | |
| values.proposalCount: | |
| - | 28 |
| + | 29 |
| } | |
New proposal on Railgun DAO: "Base deployment of RAILGUN Privacy System". Onchain execution of this proposal sends tasks to OPStackSender contract: https://tools.l2beat.com/decoder-new/?hash=0xfd5860b22fad6d5bf81cd4e9c809b2016ed08971b0fbf96aaf033fdbf87b52ec&data=AwA. These tasks initialize verification keys for all railgun circuits on the main Railgun contract on Base ( base:0x0047d1F97674614189E80566575FB615788AcF25 ). Railgun smart contracts on Base are already deployed, with bytecode matching the deployment on Ethereum. The proposal doesn't look malicious.
New proposal on Railgun DAO: “Base deployment of RAILGUN Privacy System”.
Onchain execution of this proposal sends tasks to OPStackSender contract: https://tools.l2beat.com/decoder-new/?hash=0xfd5860b22fad6d5bf81cd4e9c809b2016ed08971b0fbf96aaf033fdbf87b52ec&data=AwA. These tasks initialize verification keys for all railgun circuits on the main Railgun contract on Base (base:0x0047d1F97674614189E80566575FB615788AcF25).
Railgun smart contracts on Base are already deployed, with bytecode matching the deployment on Ethereum.
The proposal doesn’t look malicious.
| contract Voting (eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC) [railgun/Voting] { | |
| +++ description: Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator. | |
| +++ severity: HIGH | |
| values.proposalCount: | |
| - | 27 |
| + | 28 |
| } | |
New railgun proposal created: https://tools.l2beat.com/decoder-new/?hash=0xb0f02fe28a805756fbd58c90a0704c26be69882460b1bd8885ca9fe93dd77718&data=AwA. It sweeps most tokens from railgun treasury (excluding WETH, RAIL which have most value) to 0xA4f2eA0a81179362558eBC1d2Bc817c9a0134ee3. Also triggers an action on arbitrum deployment. IPFS-published proposal description: "This proposal will gather tokens that are not part of the biweekly security staker rewards and use them to issue a research grant. The previous research funding ended earlier this year, so this would be a new and separate funding. All slightly significant tokens on Arbitrum will be collected. Most tokens not related to RAIL Security Rewards on Ethereum treasury will be collected.\n\nThe sum for this will be to fund the further development on the following (but not limited to): \n\n- RAILGUN-reloaded SDK, \n- RAILGUN v3,\n- Hardware Support \n- Post-Quantum Research \n- Multisig Support \n- and incentivise researchers and ecosystem.\n\nPlease do your own security review & vote YES to support this grant." Looks legit.
New railgun proposal created: https://tools.l2beat.com/decoder-new/?hash=0xb0f02fe28a805756fbd58c90a0704c26be69882460b1bd8885ca9fe93dd77718&data=AwA. It sweeps most tokens from railgun treasury (excluding WETH, RAIL which have most value) to 0xA4f2eA0a81179362558eBC1d2Bc817c9a0134ee3. Also triggers an action on arbitrum deployment.
IPFS-published proposal description: “This proposal will gather tokens that are not part of the biweekly security staker rewards and use them to issue a research grant. The previous research funding ended earlier this year, so this would be a new and separate funding. All slightly significant tokens on Arbitrum will be collected. Most tokens not related to RAIL Security Rewards on Ethereum treasury will be collected.\n\nThe sum for this will be to fund the further development on the following (but not limited to): \n\n- RAILGUN-reloaded SDK, \n- RAILGUN v3,\n- Hardware Support \n- Post-Quantum Research \n- Multisig Support \n- and incentivise researchers and ecosystem.\n\nPlease do your own security review & vote YES to support this grant.”
Looks legit.
| contract Voting (eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC) [railgun/Voting] { | |
| +++ description: Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator. | |
| +++ severity: HIGH | |
| values.proposalCount: | |
| - | 26 |
| + | 27 |
| } | |

Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator.


Collects Railgun fees. Managed through access control roles.
Main system contract and escrow that accepts shielded deposits, verifies private transactions and unshields, and maintains the commitment tree.
Admin interface for Railgun’s pausable upgradeable proxies. It does not hold funds, but its controller can operate every proxy attached to it.
Reward distributor that pulls assets from the Railgun treasury and allocates them to stakers via token voting.
Older Railgun sweeper generation that still holds Treasury transfer rights. It is upgradeable and forwards balances to an immutable receiver.
Permission router proxy owned by Railgun governance.
RAIL governance token contract with a capped (100,000,000 RAIL total supply) mint schedule and an early anti-bot transfer override.
RAIL staking contract that tracks delegated voting power, enforces a 1mo unstake delay, and snapshots staking balances for governance every 1d. Its parameters define the governance voting system.
Immutable payout stream that can pull a fixed amount of a configured asset from the Railgun treasury to a fixed beneficiary whenever the next interval is due.
Execution adapter contract for Railgun. To interact with public contracts from shielded pools, tokens are unshielded to RelayAdapter, which performs specified calls and shields tokens back to the same user.