Search

Search for projects by name or address

Privacy

Railgun logo
Railgun

About

A shielded ledger on Ethereum for ERC-20 tokens, with private transfers and DeFi calls, run by no operator and governed by RAIL stakers.


  • Total Value Locked
    $109.16 M1.67%
    across 8 assets and 8 buckets
  • TVL
    $109.16 M1.67%
  • Assets tracked
    8
  • Buckets tracked
    8
  • Deposits 7D
    1.02 K1.88%
  • Deposits 30D
    4.11 K
  • Deposits Total
    70.08 K
  • Avg. Relayers 30D
    79

  • Privacy
    Link privacy
  • Trusted setup
  • Exit window
  • Reproducibility

  • Tracked on
    Ethereum logo
  • Attributes
    ZKTransfersDeFiAny amount
  • Public observerChain analystNetwork observerPrivileged insiderFuture adversary

    About

    A shielded ledger on Ethereum for ERC-20 tokens, with private transfers and DeFi calls, run by no operator and governed by RAIL stakers.

    Railgun lets the user shield tokens on Ethereum, send them privately to other Railgun users, use them in DeFi and unshield them to any address. Sender, recipient, token and amount stay hidden inside the pool, including which shield funds which unshield. Shields and unshields are public.

    No operatorAn operator is the entity charged with managing a rollup and progressing its state. A rollup operator can be a centralized sequencer, proposer, prover, challenger, pauser of admin that is able to perform upgrades. holds a key into the pool. RAIL stakers govern the core contract through a DAO, whose upgrades wait 7 days. Leaving is permissionlessAnyone willing should be able to join and leave the network at any time, without causing significant disturbance to the network or being detrimental to the party in question. No single entity should have the power to allowlist or blocklist participants.: the user can submit their own unshield at any time.

    Architecture

    Balances are encrypted notes in a public tree of commitments. Spending a note publishes its nullifier, and a zk-SNARKShort for "succinct non-interactive argument of knowledge", a SNARK is a widely used type of zero-knowledge proof that is short and fast to verify. Different kinds of SNARKs are usually systematized by proof size, verification time, and type of setup. The most famous SNARKs are Groth16, PLONK/Marlin, Bulletproofs, and STARKs. proves the spend without revealing which note it was. Each note is encrypted to the recipient’s 0zk address.

    Flow

    1. Shield. You send tokens to the pool, which creates a note for your 0zk address. Your address, token and amount are public.
    2. Transfer. Your wallet proves the spend locally. A broadcaster, reached over the Waku network, submits it and pays the gasA virtual fuel used to execute smart contracts on a rollup. The EVM (or other VM within the rollup) uses an accounting mechanism to correspond the consumption of gas to the consumption of computing resources, and to limit the consumption of computing resources. for a fee paid in a private note.
    3. DeFi. The RelayAdapt contract unshields tokens, runs the calls and shields the results back in one transaction. Tokens and amounts of the calls are public.
    4. Unshield. The pool pays out to any address. Recipient, token and amount are public.

    Keys

    The user’s wallet derives spending and viewing keys from a recovery phrase. The user can share a read-only viewing key, which discloses all their private transactions.

    App

    Railgun names no reference wallet, so the ratings assume RailOxide. It routes all traffic through built-in Tor and builds Private Proofs of Innocence (PPoI) from a local copy of the lists. Other wallets likely leak significantly more.

    Compliance

    Screening happens offchain. A PPoI proves that a note descends only from shields a list provider accepted. The default list screens shields with Chainalysis’s sanctions API. Broadcasters on Ethereum require a PPoI, and a transaction the user submits directly skips the check.

    Fees

    Shields pay a protocol fee of 0.25% and unshields 0.25%, both to the Railgun Treasury. The NFT fee is 0. Broadcasters charge their own fee per transaction.

    Anonymity setIn privacy protocols, anonymity set denotes all users, to which a particular withdrawal could be plausibly attributed. Anonymity set depends on a particular withdrawal, the size of the anonymity set is a metric for level of user's privacy.

    Each token has its own anonymity set. Private transfers between users mix their notes within it.

    What the protocol promises: Hides everything inside the pool, including which shield funds which unshield. Shields and unshields are public.

    Ethereum is public by default. Each protocol is rated on its main privacy promise, like hiding who paid, who received, how much, or which deposit became which withdrawal. Against each adversary, the colour says whether it holds for a careful user with the app's own settings: green yes, yellow only with significant extra work, red no. Fields marked at risk stay private only under the condition in their note.

    Public observerChain analystNetwork observerPrivileged insiderFuture adversary
    Public observer
    Private

    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 none of the user's wallets pay gas for the receiving address.

    InsideSenderprivateRecipientprivateAmountat riskAssetat riskLinkprivate
    Chain analyst
    Private

    The candidates for an unshield are the shields of the same token. In-pool transfers break a one-to-one match, while timing and exact amounts narrow it.

    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.

    Inside, the same as for a public observer.

    Network observer
    Private

    RailOxide sends all traffic over built-in Tor, broadcaster messages included, and finds the user’s notes by decrypting every note locally. All traffic shares one Tor session, so the public RPCs it picks at random see the user’s public addresses, shields and the gasA virtual fuel used to execute smart contracts on a rollup. The EVM (or other VM within the rollup) uses an accounting mechanism to correspond the consumption of gas to the consumption of computing resources, and to limit the consumption of computing resources. estimate of each private transaction from one exit. The user’s own nodeA software client that participates in the network. as its RPC keeps these from third parties.

    Advice: Use RailOxide, the wallet these ratings assume, and set the user's own node as its Ethereum RPC.

    Compared with a public observer
    InsideLinkat risk
    Privileged insider
    Private

    Only the user holds viewing keys, and DAO upgrades wait 7 days. PPoI list providers can refuse a shield, which leaves a self-broadcast exit. RailOxide builds PPoIs from a local copy of the lists. After each transaction it sends the PPoI nodeA software client that participates in the network. only that transaction’s new notes with their proofs.

    Advice: Watch governance proposals and unshield before an upgrade the user rejects executes.

    Compared with a public observer
    InsideLinkat risk
    Future adversary
    At risk

    Notes are encrypted with elliptic-curve key exchange. Whoever breaks elliptic-curve cryptography decrypts every note sent to a 0zk address that was ever shared, broadcaster fee notes included.

    Advice: Share the user's 0zk address privately, with a fresh one per counterparty where possible.

    Compared with a public observer
    InsideSenderat riskRecipientat riskAmountat riskAssetat riskLinkat risk

    30 day historic anonymity set

    How many unique depositors 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.

    Estimated anonymity set by holding duration

    An estimate of how many unique depositors 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
    WETHWETH
    473
    $3.56 M
    1.95 K
    $14.97 M
    44.94 K
    $1.52 B
    $49.07 M
    USDTUSDT
    380
    $6.27 M
    1.53 K
    $41.86 M
    12.34 K
    $419.43 M
    $30.38 M
    USDCUSDC
    157
    $2.37 M
    542
    $12.26 M
    9.59 K
    $305.37 M
    $16.86 M
    DAIDAI
    11
    $41.28 K
    46
    $1.03 M
    2.17 K
    $197.05 M
    $5.00 M
    NEARNEAR
    0
    $0.00
    0
    $0.00
    0
    $0.00
    $4.40 M
    WBTCWBTC
    3
    $360.69 K
    15
    $410.12 K
    668
    $41.84 M
    $2.69 M
    RAILRAIL
    4
    $382.20
    22
    $5.36 K
    349
    $3.69 M
    $738.43 K
    FLUIDFLUID
    0
    $0.00
    0
    $0.00
    2
    $1.55 M
    $219.82 K
    Total
    1.02 K
    $12.62 M
    4.11 K
    $70.55 M
    70.08 K
    $2.49 B
    $109.38 M

    Current pool goes live on Ethereum

    2022 May 8th

    The proxy that holds today’s pool is unpaused with the RailgunLogic implementation.

    Learn more

    Funds can be stolen if

    1. the zk proof systemThe infrastructure that allows projects to verify their state transitions. It is composed by onchain verifiers and offchain provers. The main two flavors are optimistic and ZK proof systems, but they can be combined in a hybrid model. In general though, if a system is able to accept state roots optimistically, even if it has a ZK component, it is considered an optimistic proof system. is broken, allowing invalid spends or withdrawals.
    2. all trusted setup participants collude or leak their secrets, allowing forged proofs.
    3. the DAO passes a malicious upgrade and users stay in the pool past its 7 days execution delay.

    Funds can be lost if

    1. a user loses the keys of their private balance.

    Privacy can be lost if

    1. a user sends transactions from their own public address (see public observer).
    2. elliptic-curve cryptography is broken, which decrypts every note sent to a 0zk address that was ever shared (see future adversary).

    RAIL stakers govern Railgun through a DAO. It can upgrade the core contract and its circuits, which changes the rules for every shielded token. It can also blockAn ordered list of transactions and chain-related metadata that gets bundled together and published to the L1/DA layer. Nodes execute the transactions contained within blocks to change the rollup chain’s state. Protocol rules dictate what constitutes a valid block, and invalid blocks are skipped over. tokens from new shields, mint RAIL and manage governance rewards. Governance docs.

    Governance profile

    Upgrades

    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 → permissionlessAnyone willing should be able to join and leave the network at any time, without causing significant disturbance to the network or being detrimental to the party in question. No single entity should have the power to allowlist or blocklist participants. 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.

    Token governance

    Governance token

    RAIL 1 token = 1 vote, delegated. Total supply: 60.00 M RAIL, DAO-owned treasury (unavailable for voting): 2.30 M RAIL, staked for voting: 41.61 M RAIL, the rest is circulating supply.

    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 createPropsal() call on the voting contract.

    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 · PermissionlessAnyone willing should be able to join and leave the network at any time, without causing significant disturbance to the network or being detrimental to the party in question. No single entity should have the power to allowlist or blocklist participants. execution through the Delegator. A passed proposal waits 7d, after which anyone can execute it through the Delegator contract within 14d.

    Railgun

    Snarkjs

    Detailed description

    CircuitA program written for the purpose of being proven within a proving system. A circuit is a mathematical representation of the computation to be executed, arithmetic circuits and zkVM execution trace are examples of circuits. Circuits can be written in different languages, ranging from low-level to high-level.-specific Phase 2For Groth16 trusted setup, phase 2 represents circuit-dependent part of the trusted setup. It generates a part of the secret cryptographic data required for Groth16 ZK protocol to work. If the outcome of phase 2 trusted setup ceremony is known, arbitrary proofs could be forged. trusted setupGeneration of a piece of data that must then be used for some cryptographic protocol to run. Generating this data requires some secret information. The "trust" comes from the fact the secret must be destroyed after the ceremony, otherwise cryptographic properties of the protocol could be broken. Once the data is generated, and the secrets are forgotten, no further participation from the creators of the ceremony is required. There are two types of trusted setups for SNARKs: (i) trusted setup per circuit where it is generated from scratch for each circuit, (ii) trusted universal setup per proving system where it can be used for several circuits. for Railgun’s 54 Groth16A zk-SNARK proving system introduced by Groth in 2016 that proves arithmetic circuits and requires a separate trusted setup for each circuit. It allows extremely efficient proof verification. 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 1For Groth16 trusted setup, phase 1 represents circuit-independent part of the trusted setup (e.g. Perpetual Powers of Tau), which could be reused across different circuits. It generates a part of the secret cryptographic data required for Groth16 ZK protocol to work. If the outcome of phase 1 trusted setup ceremony is known, arbitrary proofs could be forged., 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 hashA fixed-length fingerprint of variable-size input, produced by a hash function. 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
    Railgun logo


    Known deployments

    Deployment #1

    Used in:
    Railgun logo

    Verification steps

    Railgun smart contract acts as a verifierAn entity in a ZK-Rollup, often a smart contract, that verifies zero-knowledge proofs submitted by a prover. 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:

    1. Checkout the main branch of the Railgun circuits-v2 repo (commit hashA fixed-length fingerprint of variable-size input, produced by a hash function. 0aa2d13763a9fcfbb7b7ea9c02e004e71f1394bb).
    2. Download Railgun trusted setupGeneration of a piece of data that must then be used for some cryptographic protocol to run. Generating this data requires some secret information. The "trust" comes from the fact the secret must be destroyed after the ceremony, otherwise cryptographic properties of the protocol could be broken. Once the data is generated, and the secrets are forgotten, no further participation from the creators of the ceremony is required. There are two types of trusted setups for SNARKs: (i) trusted setup per circuit where it is generated from scratch for each circuit, (ii) trusted universal setup per proving system where it can be used for several circuits. artifacts, which could be found at IPFS CID QmUsmnK4PFc7zDp2cmC4wBZxYLjNyRgWfs5GNcJJ2uLcpU or on L2BEAT trusted setup hosting. It contains the proving keys for all 91 circuits, which contain circuitA program written for the purpose of being proven within a proving system. A circuit is a mathematical representation of the computation to be executed, arithmetic circuits and zkVM execution trace are examples of circuits. Circuits can be written in different languages, ranging from low-level to high-level. information and Groth16A zk-SNARK proving system introduced by Groth in 2016 that proves arithmetic circuits and requires a separate trusted setup for each circuit. It allows extremely efficient proof verification. phase 2For Groth16 trusted setup, phase 2 represents circuit-dependent part of the trusted setup. It generates a part of the secret cryptographic data required for Groth16 ZK protocol to work. If the outcome of phase 2 trusted setup ceremony is known, arbitrary proofs could be forged. trusted setup information.
    3. Build required version of circom and compile circuit sources into .r1cs binaries.
    4. Download the phase 1For Groth16 trusted setup, phase 1 represents circuit-independent part of the trusted setup (e.g. Perpetual Powers of Tau), which could be reused across different circuits. It generates a part of the secret cryptographic data required for Groth16 ZK protocol to work. If the outcome of phase 1 trusted setup ceremony is known, arbitrary proofs could be forged. trusted setup files and use it to verify that all published proverAn entity that generates the cryptographic proof to convince the verifier that the statement is true. In a ZK-Rollup, the prover generates the ZK (validity) proof to submit to the verifier contract. keys correspond to the compiled circuits. This step will implicitly check the integrity of phase 2 contributions.
    5. Generate all 91 verification keys from all prover keys, and make sure that it is identical to the ones in the onchain smart contract.

    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 circuits-v2 dir checked out on commit 0aa2d13763a9fcfbb7b7ea9c02e004e71f1394bb before the execution.

    Ossification

    Contracts our research team classifies as critical form the project's critical perimeter. Its clock starts at the ossification genesis, and every critical change resets it (changes within 24 hours count as one). The ossification score is the share of recorded code-bug exploits whose exploited code was younger than this perimeter is today. Battle-tested exposure is the value secured, summed over that unchanged period.

    Ossification %
    50since 2026 Sep 09
    TVS & changes (1Y)
    Battle-tested exposure
    $10.21 M·years
    Critical changes / year
    1.0across 8 contracts
    Exit window

    Discovery updates

    2026 September 11, 11:11 UTC
    Critical state change
    2changes

    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
    }
    2026 September 07, 15:06 UTC
    High severity
    1change

    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
    }
    2026 September 01, 12:17 UTC
    High severity
    4changes

    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)

    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
    }
    2026 August 21, 11:18 UTC
    High severity
    1change

    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
    }
    2026 August 19, 10:25 UTC
    High severity
    1change

    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
    }
    A dashboard to explore contracts and permissions
    Go to Disco
    Disco UI Banner

    Ethereum

    Actors:

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

    • Can upgrade with no delay
      • GovernorRewards
      • LegacySweeper
      • Treasury
      • RailgunSmartWallet
    • Can interact with VerificationKeySetter_64DA
      • switch the VKeySetter into COMMITTING so its owner can push stored verification keys to the verifierAn entity in a ZK-Rollup, often a smart contract, that verifies zero-knowledge proofs submitted by a prover.
    • Can interact with VerificationKeySetter_9086
      • switch the VKeySetter into COMMITTING so its owner can push stored verification keys to the verifier
    • Can interact with GovernorRewards
      • add or remove allowed reward safety vectors
      • add or remove reward tokens from the distribution set
      • change the per-interval reward rate
      • pause, unpause, transfer proxy ownership, or upgrade the GovernorRewards implementation
    • Can interact with LegacySweeper
      • pause, unpause, transfer proxy ownership, or upgrade the legacy Sweeper implementation
    • Can interact with Delegator
      • grant or revoke delegated caller permissions and transfer ownership of the Delegator
    • Can interact with Rail Token
      • mint additional RAIL up to the hard cap and transfer token ownership
    • Can interact with Treasury
      • grant or revoke treasury roles, including who can move ETH and ERC20s out of the treasury
      • pause, unpause, transfer proxy ownership, or upgrade the treasury implementation
      • transfer ETH or ERC20s out of the treasury
    • Can interact with RailgunSmartWallet
      • add or remove allowed SNARKShort for "succinct non-interactive argument of knowledge", a SNARK is a widely used type of zero-knowledge proof that is short and fast to verify. Different kinds of SNARKs are usually systematized by proof size, verification time, and type of setup. The most famous SNARKs are Groth16, PLONK/Marlin, Bulletproofs, and STARKs. safety vectors
      • add or remove tokens from the shielding blocklist
      • change the shield, unshield, and NFT fee schedule
      • change the treasury that receives protocol fees
      • pause, unpause, transfer proxy ownership, or upgrade the Railgun smart wallet implementation
    • Can interact with VerificationKeySetter_9086
      • stage replacement verification keys and manage the helper’s local SETTING and WAITING states
    • Can interact with VerificationKeySetter_64DA
      • stage replacement verification keys and manage the helper’s local SETTING and WAITING states
    A dashboard to explore contracts and permissions
    Go to Disco
    Disco UI Banner
    A diagram of the smart contract architecture
    A diagram of the smart contract architecture

    Ethereum

    Collects Railgun fees. Managed through access control roles.

    • Roles:
      • admin: ProxyAdmin; ultimately Voting
      • defaultAdminRoleMembers: Delegator; ultimately Voting
      • transferRoleMembers: Delegator, GovernorRewards, IntervalPayouts, LegacySweeper; ultimately Voting
    Can be upgraded by:

    Main system contract and escrow that accepts shielded deposits, verifies private transactions and unshields, and maintains the commitment tree.

    • Roles:
      • admin: ProxyAdmin; ultimately Voting
      • owner: Delegator; ultimately Voting
    Can be upgraded by:
    ProxyAdmin0x4F8E…65c8

    Admin interface for Railgun’s pausable upgradeable proxies. It does not hold funds, but its controller can operate every proxy attached to it.

    • Roles:
      • owner: Delegator
    VerificationKeySetter_64DA0x64DA…7598

    Auxiliary verifierAn entity in a ZK-Rollup, often a smart contract, that verifies zero-knowledge proofs submitted by a prover.-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.

    • Roles:
      • delegator: Delegator; ultimately Voting
      • owner: EOA 2
    VerificationKeySetter_90860x9086…3B46

    Auxiliary verifierAn entity in a ZK-Rollup, often a smart contract, that verifies zero-knowledge proofs submitted by a prover.-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.

    • Roles:
      • delegator: Delegator; ultimately Voting
      • owner: EOA 1

    Reward distributor that pulls assets from the Railgun treasury and allocates them to stakers via token voting.

    • Roles:
      • admin: ProxyAdmin; ultimately Voting
      • owner: Delegator; ultimately Voting
    Can be upgraded by:

    Older Railgun sweeper generation that still holds Treasury transfer rights. It is upgradeable and forwards balances to an immutable receiver.

    • Roles:
      • admin: Delegator; ultimately Voting
    Can be upgraded by:
    Delegator0xB6d5…B53B

    Permission router proxy owned by Railgun governance.

    • Roles:
      • owner: Voting
      • verificationKeyDelegates: VerificationKeySetter_64DA, VerificationKeySetter_9086
    Rail Token0xe76C…A33D

    RAIL governance token contract with a capped (100,000,000 RAIL total supply) mint schedule and an early anti-bot transfer override.

    • Roles:
      • owner: Delegator; ultimately Voting

    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.

    RelayAdapt0xAc9f…D405

    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.