{
"adversaries": {
"promise": {
"protects": "linkage",
"text": "Hides everything inside the pool, including which shield funds which unshield. Shields and unshields are public."
},
"adversaries": [
{
"id": "publicObserver",
"label": "Public observer",
"description": "Everyone with a block explorer and some basic tools. Sees every public onchain event, but does no correlation beyond following links.",
"examples": "A curious counterparty, an employer, a journalist."
},
{
"id": "chainAnalyst",
"label": "Chain analyst",
"description": "Scrapes all public data and correlates it: timing, amounts, gas and wallet fingerprints, address clusters.",
"examples": "Chain analytics firms, ZachXBT, data brokers."
},
{
"id": "networkObserver",
"label": "Network observer",
"description": "Sits between the user and the chain and sees web2 traffic only: RPC providers, relayers and broadcasters, indexers, ISPs. Learns IP addresses, timing, browser fingerprints, ciphertext and what becomes public. Assumes Tor to send transactions and, where the client has an RPC setting, an own node to read the blockchain.",
"examples": "Infura or Alchemy, a Tornado relayer, a wallet vendor selling telemetry, Google captcha or analytics in the dapp frontend."
},
{
"id": "privilegedInsider",
"label": "Privileged insider",
"description": "Holds a protocol operator role or receives keys or plaintext by design: upgrade admin, sequencer, decryption or view key holder, TEE vendor, association set provider, hosted prover, note registry.",
"examples": "A compliance backdoor key, a DAO with an upgrade key, a KMS committee, an ASP operator."
},
{
"id": "futureAdversary",
"label": "Future adversary",
"description": "Harvest now, decrypt later. Holds every byte ever written onchain plus any retained logs, and future cryptanalysis such as a large quantum computer that breaks elliptic-curve key exchange and pairings, but not hashes, symmetric ciphers or lattices.",
"examples": "First well-funded insiders, then everyone in a potential post-quantum future."
}
],
"fields": [
{
"id": "sender",
"label": "Sender",
"subject": "Sender",
"promiseLabel": "Sender privacy",
"description": "The Ethereum address that funds entered from, or that initiated a transfer."
},
{
"id": "recipient",
"label": "Recipient",
"subject": "Recipient",
"promiseLabel": "Recipient privacy",
"description": "The Ethereum address that funds exit to, or that receives a transfer."
},
{
"id": "amount",
"label": "Amount",
"subject": "Amounts",
"promiseLabel": "Amount privacy",
"description": "The value moved."
},
{
"id": "asset",
"label": "Asset",
"subject": "Asset",
"promiseLabel": "Asset privacy",
"description": "Which token is moved."
},
{
"id": "linkage",
"label": "Link",
"subject": "Link",
"promiseLabel": "Link privacy",
"description": "Whether the entry and exit of the same funds, or sender and recipient of the same transfer, can be tied together."
}
],
"cells": {
"publicObserver": {
"sentiment": "good",
"exposure": "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.",
"interior": {
"sender": "private",
"recipient": "private",
"amount": {
"verdict": "private",
"note": "Leaked for DeFi bundles, which unshield to the adapter in cleartext."
},
"asset": {
"verdict": "private",
"note": "Leaked for DeFi bundles."
},
"linkage": "private"
},
"sources": [
{
"contract": "RailgunSmartWallet"
},
{
"title": "Note ciphertext format",
"url": "https://github.com/Railgun-Community/engine/blob/main/src/note/transact-note.ts"
}
],
"id": "publicObserver",
"value": "Link private",
"alsoExposed": []
},
"chainAnalyst": {
"sentiment": "good",
"exposure": "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.",
"interior": {
"sender": "private",
"recipient": "private",
"amount": "private",
"asset": "private",
"linkage": "private"
},
"sources": [
{
"title": "A Tattered Cloak of Invisibility (arXiv:2606.25926)",
"url": "https://arxiv.org/abs/2606.25926"
},
{
"title": "The Anonymity Gap (arXiv:2608.22987)",
"url": "https://arxiv.org/abs/2608.22987"
}
],
"id": "chainAnalyst",
"value": "Link private",
"alsoExposed": []
},
"networkObserver": {
"sentiment": "good",
"exposure": "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.",
"interior": {
"sender": "private",
"recipient": "private",
"amount": "private",
"asset": "private",
"linkage": "private"
},
"sources": [
{
"title": "Gas estimation with dummy proof",
"url": "https://github.com/Railgun-Community/wallet/blob/main/src/services/transactions/tx-gas-details.ts"
},
{
"title": "Broadcaster decrypts request",
"url": "https://github.com/Railgun-Community/ppoi-safe-broadcaster-example/blob/main/src/server/waku-broadcaster/methods/transact-method.ts"
}
],
"id": "networkObserver",
"value": "Link private",
"alsoExposed": []
},
"privilegedInsider": {
"sentiment": "good",
"exposure": "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.",
"interior": {
"sender": "private",
"recipient": "private",
"amount": "private",
"asset": "private",
"linkage": {
"verdict": "atRisk",
"note": "POI nodes tie a session to a note cluster and its transaction ids."
}
},
"sources": [
{
"section": "permissions",
"title": "Governance roles"
},
{
"title": "POI required lists",
"url": "https://github.com/Railgun-Community/shared-models/blob/main/src/models/poi.ts"
},
{
"title": "POI node interface",
"url": "https://github.com/Railgun-Community/engine/blob/main/src/poi/poi.ts"
}
],
"id": "privilegedInsider",
"value": "Link private",
"alsoExposed": []
},
"futureAdversary": {
"sentiment": "warning",
"exposure": "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.",
"interior": {
"sender": {
"verdict": "atRisk",
"note": "Decrypts for notes touching any shared 0zk address."
},
"recipient": "atRisk",
"amount": "atRisk",
"asset": "atRisk",
"linkage": "atRisk"
},
"sources": [
{
"title": "Shared key derivation (Ed25519 ECDH)",
"url": "https://github.com/Railgun-Community/engine/blob/main/src/utils/keys-utils.ts"
},
{
"title": "AES-GCM note encryption",
"url": "https://github.com/Railgun-Community/engine/blob/main/src/utils/encryption/aes.ts"
}
],
"id": "futureAdversary",
"value": "Link at risk",
"alsoExposed": [
{
"field": "sender",
"exposure": "atRisk"
},
{
"field": "recipient",
"exposure": "atRisk"
},
{
"field": "amount",
"exposure": "atRisk"
},
{
"field": "asset",
"exposure": "atRisk"
}
]
}
}
},
"attributes": [
{
"id": "zk",
"label": "ZK",
"description": "Uses zero-knowledge proofs to prove private actions without revealing private data."
},
{
"id": "transfers",
"label": "Transfers",
"description": "Private transfers within the shielded pool."
},
{
"id": "defi",
"label": "DeFi",
"description": "Interop with DeFi (swaps, vaults) from within the shielded pool."
},
{
"id": "anyAmount",
"label": "Any amount",
"description": "Deposits and withdrawals can have any size."
}
],
"category": {
"id": "shieldedLedger",
"label": "Shielded ledger",
"description": "A pool with transfers or DeFi inside. Hides who pays whom and which deposit funds which withdrawal."
},
"exitWindow": {
"value": "7d",
"sentiment": "warning",
"orderHint": 604800,
"description": "DAO-approved upgrades wait 7d before they can execute, giving users time to unshield funds if they do not approve the change.",
"walkawayTest": {
"passed": true
}
},
"relayerTracking": {
"type": "railgunWaku",
"chainId": 1,
"sinceTimestamp": 1788134400
},
"reproducibility": {
"value": "Reproducible",
"sentiment": "good",
"description": "The contracts, circuits, and supporting software needed to participate in the protocol are publicly available and can be run locally."
},
"riskSummary": "## Funds can be stolen if\n1. the zk proof system is broken, allowing invalid spends or withdrawals.\n2. the [trusted setup](#trusted-setups) is compromised or all ceremony participants collude, allowing invalid spends or withdrawals.\n3. the DAO passes a malicious [upgrade](#upgrades-and-governance) and users do not react before the 7-day execution delay expires.\n \n## Funds can be lost if\n1. a user loses the private keys required to control their private balance.\n \n## Privacy can be lost if\n1. no broadcaster is available and transactions must be sent from a public address that can be linked to the user.",
"tokens": [
{
"token": {
"address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"iconUrl": "https://assets.coingecko.com/coins/images/2518/large/weth.png?1696503332",
"symbol": "WETH",
"decimals": 18,
"priceId": "weth",
"sinceTimestamp": 1573689600
},
"buckets": [
{
"id": "railgun-WETH",
"type": "pool",
"label": "WETH",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"anonymitySet": {
"minimumAmounts": [
"100000000000000000",
"10000000000000000000"
]
},
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
}
}
}
]
},
{
"token": {
"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"iconUrl": "https://assets.coingecko.com/coins/images/325/large/Tether.png?1696501661",
"symbol": "USDT",
"decimals": 6,
"priceId": "tether",
"sinceTimestamp": 1573689600
},
"buckets": [
{
"id": "railgun-USDT",
"type": "pool",
"label": "USDT",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
}
}
}
]
},
{
"token": {
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"iconUrl": "https://assets.coingecko.com/coins/images/6319/large/usdc.png?1696506694",
"symbol": "USDC",
"decimals": 6,
"priceId": "usd-coin",
"sinceTimestamp": 1573689600
},
"buckets": [
{
"id": "railgun-USDC",
"type": "pool",
"label": "USDC",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
}
}
}
]
},
{
"token": {
"address": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"iconUrl": "https://assets.coingecko.com/coins/images/9956/large/Badge_Dai.png?1696509996",
"symbol": "DAI",
"decimals": 18,
"priceId": "dai",
"sinceTimestamp": 1574121600
},
"buckets": [
{
"id": "railgun-DAI",
"type": "pool",
"label": "DAI",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0x6B175474E89094C44Da98b954EedeAC495271d0F"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0x6B175474E89094C44Da98b954EedeAC495271d0F"
}
}
}
]
},
{
"token": {
"address": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
"iconUrl": "https://assets.coingecko.com/coins/images/7598/large/wrapped_bitcoin_wbtc.png?1696507857",
"symbol": "WBTC",
"decimals": 8,
"priceId": "wrapped-bitcoin",
"sinceTimestamp": 1573689600
},
"buckets": [
{
"id": "railgun-WBTC",
"type": "pool",
"label": "WBTC",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"
}
}
}
]
},
{
"token": {
"address": "0x85F17Cf997934a597031b2E18a9aB6ebD4B9f6a4",
"iconUrl": "https://coin-images.coingecko.com/coins/images/71681/large/near.png?1768905174",
"symbol": "NEAR",
"decimals": 24,
"priceId": "rainbow-bridged-near-ethereum",
"sinceTimestamp": 1768867200
},
"buckets": [
{
"id": "railgun-NEAR",
"type": "pool",
"label": "NEAR",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1768867200,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0x85F17Cf997934a597031b2E18a9aB6ebD4B9f6a4"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0x85F17Cf997934a597031b2E18a9aB6ebD4B9f6a4"
}
}
}
]
},
{
"token": {
"address": "0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb",
"iconUrl": "https://coin-images.coingecko.com/coins/images/14688/large/Logo_1_%28brighter%29.png?1734430693",
"symbol": "FLUID",
"decimals": 18,
"priceId": "instadapp",
"sinceTimestamp": 1623801600
},
"buckets": [
{
"id": "railgun-FLUID",
"type": "pool",
"label": "FLUID",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb"
}
}
}
]
},
{
"token": {
"address": "0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D",
"iconUrl": "https://coin-images.coingecko.com/coins/images/16840/large/railgun.jpeg?1696516407",
"symbol": "RAIL",
"decimals": 18,
"priceId": "railgun",
"sinceTimestamp": 1625270400
},
"buckets": [
{
"id": "railgun-RAIL",
"type": "pool",
"label": "RAIL",
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"sinceTimestamp": 1651422389,
"deposit": {
"event": "0x3a5b9dc26075a3801a6ddccf95fec485bb7500a91b44cec1add984c21ee6db3b",
"extractor": "railgunShield",
"params": {
"tokenAddress": "0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D"
}
},
"withdrawal": {
"event": "0xd93cf895c7d5b2cd7dc7a098b678b3089f37d91f48d9b83a0800a91cbdf05284",
"extractor": "railgunUnshield",
"params": {
"tokenAddress": "0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D"
}
}
}
]
}
],
"upgradesAndGovernance": {
"content": "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: ",
"governanceInfo": {
"upgrades": {
"Normal upgrade path": "Create a proposal with an IPFS link and onchain calldata in the [Voting contract](https://etherscan.io/address/0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC) → 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."
},
"tokenGovernance": {
"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.50 M RAIL**, the rest is circulating supply.",
"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](https://etherscan.io/address/0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC) 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 · Permissionless execution through the Delegator.** A passed proposal waits 7d, after which anyone can execute it through the [Delegator contract](https://etherscan.io/address/0xB6d513f6222Ee92Fff975E901bd792E2513fB53B) within 14d."
}
}
}
}
permissions+1-1
{
"ethereum": {
"roles": [],
"actors": [
{
"id": "Voting",
"name": "Voting",
"accounts": [
{
"address": "eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC",
"type": "Contract",
"isVerified": true,
"name": "0xc480…A3CC",
"url": "https://etherscan.io/address/0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC"
}
],
"chain": "ethereum",
"description": "Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator.\n* Can upgrade **with no delay**\n * GovernorRewards [via: Delegator → ProxyAdmin]\n * LegacySweeper [via: Delegator]\n * Treasury [via: Delegator → ProxyAdmin]\n * RailgunSmartWallet [via: Delegator → ProxyAdmin]\n* Can interact with VerificationKeySetter_64DA\n * switch the VKeySetter into COMMITTING so its owner can push stored verification keys to the verifier [via: Delegator]\n* Can interact with VerificationKeySetter_9086\n * switch the VKeySetter into COMMITTING so its owner can push stored verification keys to the verifier [via: Delegator]\n* Can interact with GovernorRewards\n * add or remove allowed reward safety vectors [via: Delegator]\n * add or remove reward tokens from the distribution set [via: Delegator]\n * change the per-interval reward rate [via: Delegator]\n * pause, unpause, transfer proxy ownership, or upgrade the GovernorRewards implementation [via: Delegator → ProxyAdmin]\n* Can interact with LegacySweeper\n * pause, unpause, transfer proxy ownership, or upgrade the legacy Sweeper implementation [via: Delegator]\n* Can interact with Delegator\n * grant or revoke delegated caller permissions and transfer ownership of the Delegator \n* Can interact with Rail Token\n * mint additional RAIL up to the hard cap and transfer token ownership [via: Delegator]\n* Can interact with Treasury\n * grant or revoke treasury roles, including who can move ETH and ERC20s out of the treasury [via: Delegator]\n * pause, unpause, transfer proxy ownership, or upgrade the treasury implementation [via: Delegator → ProxyAdmin]\n * transfer ETH or ERC20s out of the treasury [via: Delegator → ProxyAdmin → GovernorRewards - or Delegator → LegacySweeper - or Delegator]\n* Can interact with RailgunSmartWallet\n * add or remove allowed SNARK safety vectors [via: Delegator]\n * add or remove tokens from the shielding blocklist [via: Delegator]\n * change the shield, unshield, and NFT fee schedule [via: Delegator]\n * change the treasury that receives protocol fees [via: Delegator]\n * pause, unpause, transfer proxy ownership, or upgrade the Railgun smart wallet implementation [via: Delegator → ProxyAdmin]",
"discoveryDrivenData": true
},
{
"id": "EOA-1",
"name": "EOA 1",
"accounts": [
{
"address": "eth:0x76EB574EFF49FB64DE6f7F2854952B05B5E24624",
"type": "EOA",
"isVerified": true,
"name": "0x76EB…4624",
"url": "https://etherscan.io/address/0x76EB574EFF49FB64DE6f7F2854952B05B5E24624",
"displayName": "EOA 1"
}
],
"chain": "ethereum",
"description": "* Can upgrade **with no delay**\n * GovernorRewardsSweeper \n* Can interact with GovernorRewardsSweeper\n * pause, unpause, transfer proxy ownership, or upgrade the Sweeper implementation \n* Can interact with VerificationKeySetter_9086\n * stage replacement verification keys and manage the helper's local SETTING and WAITING states ",
"description": "* Can interact with VerificationKeySetter_9086\n * stage replacement verification keys and manage the helper's local SETTING and WAITING states ",
"discoveryDrivenData": true
},
{
"id": "EOA-2",
"name": "EOA 2",
"accounts": [
{
"address": "eth:0xbbc2fB58643235AFfBF1f0CDd27Bc6E6CFBBa4e2",
"type": "EOA",
"isVerified": true,
"name": "0xbbc2…a4e2",
"url": "https://etherscan.io/address/0xbbc2fB58643235AFfBF1f0CDd27Bc6E6CFBBa4e2",
"displayName": "EOA 2"
}
],
"chain": "ethereum",
"description": "* Can interact with VerificationKeySetter_64DA\n * stage replacement verification keys and manage the helper's local SETTING and WAITING states ",
"discoveryDrivenData": true
}
]
}
}
contracts+0-56
{
"addresses": {
"ethereum": [
{
"name": "Treasury",
"isVerified": true,
"address": "eth:0xE8A8B458BcD1Ececc6b6b58F80929b29cCecFF40",
"upgradeability": {
"proxyType": "Railgun proxy",
"admins": [
"eth:0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8"
],
"implementations": [
"eth:0xA092c7577354EA82a6c7e55B423c3DD80f0dF255"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1657776065,
"transactionHash": "0x271cb0bfab8dfeeda44381b22e6f93adc955002d387a96c0f8cd5719fb6a9504",
"implementations": [
"eth:0xA092c7577354EA82a6c7e55B423c3DD80f0dF255"
]
}
],
"description": "Collects Railgun fees. Managed through access control roles.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Voting\n * **defaultAdminRoleMembers**: Delegator; ultimately Voting\n * **transferRoleMembers**: Delegator, GovernorRewards, IntervalPayouts, LegacySweeper; ultimately Voting",
"upgradableBy": [
{
"name": "Voting",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xE8A8B458BcD1Ececc6b6b58F80929b29cCecFF40#code"
},
{
"name": "RailgunSmartWallet",
"isVerified": true,
"address": "eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9",
"upgradeability": {
"proxyType": "Railgun proxy",
"admins": [
"eth:0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8"
],
"implementations": [
"eth:0xD662C4B1F22AcEb0BEaCdf3A493De6f478686A0C"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1652034772,
"transactionHash": "0x2bd98cd135e2eaf7b7239bb4951a043f655629b5d0f0ca12334ce05718512361",
"implementations": [
"eth:0xBCFA4De73afb071C9FF18a20A22F818e657C541a"
]
},
{
"timestamp": 1669738223,
"transactionHash": "0xab0625746a64ed88fd040a39bdbe9ed930328d9b09245b36cd1d9a64444dad95",
"implementations": [
"eth:0x321617E18bE9EC7CFE5ab8856DE2aAbAA478E13B"
]
},
{
"timestamp": 1678360187,
"transactionHash": "0xe001ac69697083957933db13ff27c56769ce8826d4ab676b3965d7a44b9f0668",
"implementations": [
"eth:0xc0BEF2D373A1EfaDE8B952f33c1370E486f209Cc"
]
},
{
"timestamp": 1753717703,
"transactionHash": "0xfc6cda4a6e9b8e2d055a50212551e6daa8ec180ad7aced11d00ae71e1d0eab6e",
"implementations": [
"eth:0xB4F2d77bD12c6b548Ae398244d7FAD4ABCE4D89b"
]
},
{
"timestamp": 1786715435,
"transactionHash": "0x7ac142845ccd9f156d992099a7ca8d6cb52655f4153cc49c48c38c8966a6b3ad",
"implementations": [
"eth:0xD662C4B1F22AcEb0BEaCdf3A493De6f478686A0C"
]
}
],
"description": "Main system contract and escrow that accepts shielded deposits, verifies private transactions and unshields, and maintains the commitment tree.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Voting\n * **owner**: Delegator; ultimately Voting",
"upgradableBy": [
{
"name": "Voting",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9#code"
},
{
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Admin interface for Railgun's pausable upgradeable proxies. It does not hold funds, but its controller can operate every proxy attached to it.\n* Roles:\n * **owner**: Delegator",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8#code"
},
{
"name": "VerificationKeySetter_64DA",
"isVerified": true,
"address": "eth:0x64DA0892E8E24fECa6Eb5E3D8cbf2D9b6Fbe7598",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n* Roles:\n * **delegator**: Delegator; ultimately Voting\n * **owner**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x64DA0892E8E24fECa6Eb5E3D8cbf2D9b6Fbe7598#code"
},
{
"name": "VerificationKeySetter_9086",
"isVerified": true,
"address": "eth:0x9086aFC6FC88667d4031Cabd556AfDD0E3903B46",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n* Roles:\n * **delegator**: Delegator; ultimately Voting\n * **owner**: EOA 1",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9086aFC6FC88667d4031Cabd556AfDD0E3903B46#code"
},
{
"name": "GovernorRewards",
"isVerified": true,
"address": "eth:0xA02782CE1bF85f56f8cC7C0E66e61299Ac75c86f",
"upgradeability": {
"proxyType": "Railgun proxy",
"admins": [
"eth:0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8"
],
"implementations": [
"eth:0xaC76eB94703b16e704f76ECFFDADF36b6A53ECDB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1674193055,
"transactionHash": "0x2a5967e08e872f7bd998842cbd9224ee81a39ddd16f7f40452fc3ba47c01c783",
"implementations": [
"eth:0xF035cEBa76C0C1f2c15457775745B1F5DC42CA2c"
]
},
{
"timestamp": 1674193247,
"transactionHash": "0x14b883f710dbcdc1be58c03cedc447a7af82c843bfb2259c194eea7aef19d972",
"implementations": [
"eth:0x3db1c53366Fff57001fF6a9DaaCdA1FCFBaB56A9"
]
},
{
"timestamp": 1674194399,
"transactionHash": "0x948534918749a94532adcbc0b5fbf6248e2cdb1ac905c688fc30b8eef649260b",
"implementations": [
"eth:0xaF51CD5f71Ed88D6d1F65b575f1a8Ce3a78eC42b"
]
},
{
"timestamp": 1784398547,
"transactionHash": "0x01b125307242dcb57f77aa1c925ac1b0af56dc29616631336bb15f25fdca1778",
"implementations": [
"eth:0xaC76eB94703b16e704f76ECFFDADF36b6A53ECDB"
]
}
],
"description": "Reward distributor that pulls assets from the Railgun treasury and allocates them to stakers via token voting.\n* Roles:\n * **admin**: ProxyAdmin; ultimately Voting\n * **owner**: Delegator; ultimately Voting",
"upgradableBy": [
{
"name": "Voting",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA02782CE1bF85f56f8cC7C0E66e61299Ac75c86f#code"
},
{
"name": "LegacySweeper",
"isVerified": true,
"address": "eth:0xa353bC0454931Ac46fd90c8EF27f908Ab9E34686",
"upgradeability": {
"proxyType": "Railgun proxy",
"admins": [
"eth:0xB6d513f6222Ee92Fff975E901bd792E2513fB53B"
],
"implementations": [
"eth:0x9b1310BdCC19D172D0092240e33209a9156c8EE2"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1662769920,
"transactionHash": "0x1413ff21c2423fcb8cf10812ada82f33fe76a34f18368277ce5f1cd51e5750a5",
"implementations": [
"eth:0x27d30E803A0EC079DAA3A2e6c3590Cca9f63C9D8"
]
},
{
"timestamp": 1669954175,
"transactionHash": "0xa61b7db4ff3ca6d8a4b44f396b019ee3bea1f9a8616ef8a35d0511bf03c2b7e1",
"implementations": [
"eth:0x9b1310BdCC19D172D0092240e33209a9156c8EE2"
]
}
],
"description": "Older Railgun sweeper generation that still holds Treasury transfer rights. It is upgradeable and forwards balances to an immutable receiver.\n* Roles:\n * **admin**: Delegator; ultimately Voting",
"upgradableBy": [
{
"name": "Voting",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa353bC0454931Ac46fd90c8EF27f908Ab9E34686#code"
},
{
"name": "Delegator",
"isVerified": true,
"address": "eth:0xB6d513f6222Ee92Fff975E901bd792E2513fB53B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Permission router proxy owned by Railgun governance.\n* Roles:\n * **owner**: Voting\n * **verificationKeyDelegates**: VerificationKeySetter_64DA, VerificationKeySetter_9086",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xB6d513f6222Ee92Fff975E901bd792E2513fB53B#code"
},
{
"name": "Rail Token",
"isVerified": true,
"address": "eth:0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "RAIL governance token contract with a capped (100,000,000 RAIL total supply) mint schedule and an early anti-bot transfer override.\n* Roles:\n * **owner**: Delegator; ultimately Voting",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D#code"
},
{
"name": "Staking",
"isVerified": true,
"address": "eth:0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20#code"
},
{
"name": "IntervalPayouts",
"isVerified": true,
"address": "eth:0x29905A43aA3865D0D7F2743dDE63754B4aa9CA11",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x29905A43aA3865D0D7F2743dDE63754B4aa9CA11#code"
},
{
"name": "GovernorRewardsSweeper",
"isVerified": true,
"address": "eth:0x2eCa05b128bF5cbd5A73CC4BB625B51131FF119B",
"upgradeability": {
"proxyType": "Railgun proxy",
"admins": [
"eth:0x76EB574EFF49FB64DE6f7F2854952B05B5E24624"
],
"implementations": [
"eth:0x2ea76A3c4795DD1a5d206B285fD21b2Fb83EAf1a"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1669148051,
"transactionHash": "0x8a7ec325dbefb9e150064f9b94f680f3a96fef73b2f1160c40aa195a88a98ad6",
"implementations": [
"eth:0x7d1C12008d180718938F535eE0dec7ac3473c179"
]
},
{
"timestamp": 1675750487,
"transactionHash": "0x128597009072e4bbc08293c81904d4cf5bb22b9cad1f87bf99a7edaa2878deaf",
"implementations": [
"eth:0x2ea76A3c4795DD1a5d206B285fD21b2Fb83EAf1a"
]
}
],
"description": "Helper that forwards all ETH or ERC20 balances it holds to a fixed receiver.\n* Roles:\n * **admin**: EOA 1",
"upgradableBy": [
{
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2eCa05b128bF5cbd5A73CC4BB625B51131FF119B#code"
},
{
"name": "IntervalPayouts",
"isVerified": true,
"address": "eth:0x7673e2E62435D25EDBcb58fD0d88c4C95806b10F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7673e2E62435D25EDBcb58fD0d88c4C95806b10F#code"
},
{
"name": "IntervalPayouts",
"isVerified": true,
"address": "eth:0x859E0C1790b8a721F4943742603cDB685A73BA5D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x859E0C1790b8a721F4943742603cDB685A73BA5D#code"
},
{
"name": "IntervalPayouts",
"isVerified": true,
"address": "eth:0xa863262Bf5E97e8CFeC47a71402aC360C0983060",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa863262Bf5E97e8CFeC47a71402aC360C0983060#code"
},
{
"name": "IntervalPayouts",
"isVerified": true,
"address": "eth:0xCA9A2894e814305fAfc2BA83a70B34295b1DdE9D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCA9A2894e814305fAfc2BA83a70B34295b1DdE9D#code"
},
{
"name": "Getters",
"isVerified": true,
"address": "eth:0xe90275239D734899e8D94646139213F6F97bEB0E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Read-only helper contract that batches governance snapshot and reward-view calls.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe90275239D734899e8D94646139213F6F97bEB0E#code"
},
{
"name": "IntervalPayouts",
"isVerified": true,
"address": "eth:0xf5F9d74FbFd04801DFf83425ff6C2002f60B921A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xf5F9d74FbFd04801DFf83425ff6C2002f60B921A#code"
},
{
"name": "RelayAdapt",
"isVerified": true,
"address": "eth:0xAc9f360Ae85469B27aEDdEaFC579Ef2d052aD405",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xAc9f360Ae85469B27aEDdEaFC579Ef2d052aD405#code"
}
]
},
"risks": [],
"zkVerifiers": [
"eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9"
]
}