7986b483 (main)
and
797c2c68 (PR)
+5 -1
+5 -1
{
"addresses": {
"ethereum": [
{
"name": "PrivacyPoolUSDS",
"isVerified": true,
"address": "eth:0x05e4DBD71B56861eeD2Aaa12d00A797F04B5D3c0",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x05e4DBD71B56861eeD2Aaa12d00A797F04B5D3c0#code"
},
{
"name": "PrivacyPoolWstETH",
"isVerified": true,
"address": "eth:0x1A604E9DFa0EFDC7FFda378AF16Cb81243b61633",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1A604E9DFa0EFDC7FFda378AF16Cb81243b61633#code"
},
{
"name": "PrivacyPoolDAI",
"isVerified": true,
"address": "eth:0x1c31C03B8CB2EE674D0F11De77135536db828257",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1c31C03B8CB2EE674D0F11De77135536db828257#code"
},
{
"name": "PrivacyPoolsEntrypoint",
"isVerified": true,
"address": "eth:0x6818809EefCe719E480a7526D76bD3e561526b46",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x15e355024de1CDc74ADdea7EBDf98418Ba5B1a2c"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1743265247,
"transactionHash": "0x4987385c58c49c9e3117244180094c5b7c5a0566c8547d13880df5e19076776c",
"implementations": [
"eth:0xdD8aA0560a08E39C0b3A84BBa356Bc025AfbD4C1"
]
},
{
"timestamp": 1747945823,
"transactionHash": "0xde1c41f546e3b6064433e0db1309d8ca5a3ac78a8fc626f934b13d05ee67578f",
"implementations": [
"eth:0x15e355024de1CDc74ADdea7EBDf98418Ba5B1a2c"
]
}
],
"description": "Main hub for Privacy Pools. Entrypoint for deposits, relayed withdrawals, pool registry/configuration, ASP root updates, fee withdrawal, and wind-down management.\n* Roles:\n * **aspPostmen**: EOA 1, Privacy Pools Multisig\n * **ownerRoleMembers**: Privacy Pools Multisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6818809EefCe719E480a7526D76bD3e561526b46#code"
},
{
"name": "PrivacyPoolWOETH",
"isVerified": true,
"address": "eth:0x7d2959bCFb936a84531518e8391DdBa844e03ebE",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7d2959bCFb936a84531518e8391DdBa844e03ebE#code"
},
{
"name": "PrivacyPoolUSDC",
"isVerified": true,
"address": "eth:0xb419c2867aB3CBc78921660cB95150d95A94ce86",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb419c2867aB3CBc78921660cB95150d95A94ce86#code"
},
{
"name": "PrivacyPoolBOLD",
"isVerified": true,
"address": "eth:0xb4b5Fd38Fd4788071d7287e3cB52948e0d10b23E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb4b5Fd38Fd4788071d7287e3cB52948e0d10b23E#code"
},
{
"name": "PrivacyPoolSUSDS",
"isVerified": true,
"address": "eth:0xBBdA2173CDFEA1c3bD7F2908798F1265301d750c",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xBBdA2173CDFEA1c3bD7F2908798F1265301d750c#code"
},
{
"name": "PrivacyPoolUSD1",
"isVerified": true,
"address": "eth:0xc0A8Bc0F4F982b4d4f1fFae8F4FCCb58c9B29c98",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xc0A8Bc0F4F982b4d4f1fFae8F4FCCb58c9B29c98#code"
},
{
"name": "PrivacyPoolFrxUSD",
"isVerified": true,
"address": "eth:0xC6C769fac7AABEadd31a03fAe5Ca0Ec5B4C50f84",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xC6C769fac7AABEadd31a03fAe5Ca0Ec5B4C50f84#code"
},
{
"name": "PrivacyPoolFxUSD",
"isVerified": true,
"address": "eth:0xD14F4B36E1D1D98c218db782c49149876042BC56",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD14F4B36E1D1D98c218db782c49149876042BC56#code"
},
{
"name": "PrivacyPoolUSDe",
"isVerified": true,
"address": "eth:0xe6D36B33b00A7C0cB0C2a8d39D07e7dB0c526Abc",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe6D36B33b00A7C0cB0C2a8d39D07e7dB0c526Abc#code"
},
{
"name": "PrivacyPoolUSDT",
"isVerified": true,
"address": "eth:0xe859C0bD25f260BaEE534Fb52e307D3b64D24572",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe859C0bD25f260BaEE534Fb52e307D3b64D24572#code"
},
{
"name": "PrivacyPoolETH",
"isVerified": true,
"address": "eth:0xF241d57C6DebAe225c0F2e6eA1529373C9A9C9fB",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Native-asset Privacy Pool that escrows ETH commitments for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF241d57C6DebAe225c0F2e6eA1529373C9A9C9fB#code"
},
{
"name": "PrivacyPoolWBTC",
"isVerified": true,
"address": "eth:0xF973f4B180A568157Cd7A0E6006449139E6Bfc32",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF973f4B180A568157Cd7A0E6006449139E6Bfc32#code"
},
{
"name": "WithdrawalVerifier",
"isVerified": true,
"address": "eth:0x022891F938Ae7fDC8Ab9Ead0FBf50aBA8C897D6d",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Stateless Groth16 verifier used by Privacy Pool contracts to verify withdrawal proofs.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x022891F938Ae7fDC8Ab9Ead0FBf50aBA8C897D6d#code"
},
{
"name": "RagequitVerifier",
"isVerified": true,
"address": "eth:0xa45ACa8604a73D80C551fAad6355A5c3A5565eC6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Stateless Groth16 verifier used by Privacy Pool contracts to verify ragequit proofs.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa45ACa8604a73D80C551fAad6355A5c3A5565eC6#code"
}
]
},
"risks": []
"risks": [],
"zkVerifiers": [
"eth:0x022891F938Ae7fDC8Ab9Ead0FBf50aBA8C897D6d",
"eth:0xa45ACa8604a73D80C551fAad6355A5c3A5565eC6"
]
}
+20 -3
+1 -1
{
"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."
}
],
"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
}
},
"noteDiscovery": {
"description": "To find incoming transfers and rebuild the balance, a wallet downloads every new commitment emitted by the Railgun contract and tries to decrypt each one locally with the user's viewing key; successful decryptions are saved as the user's notes. Because every commitment is requested, the RPC provider does not learn which notes belong to the user from the queries alone."
},
"privacy": {
"value": "Optional compliance",
"sentiment": "good",
"description": "Compliance is optional at the core protocol level: users can create proofs of innocence to disassociate deposits from flagged addresses, and relayers can choose to require them."
},
"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.40 M RAIL**, staked for voting: **41.35 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.50 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."
}
}
}
}
+4 -1
{
"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": []
"risks": [],
"zkVerifiers": [
"eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9"
]
}
+1 -1
{
"baseTimestamp": 1788793617,
"baseTimestamp": 1789125106,
"contractsDiscoDriven": false,
"hasDiscoUi": false,
"isDiscoDriven": false,
"permissionsDiscoDriven": false
}
+14 -0
[
{
"id": "d347632e",
"date": "Fri, 11 Sep 2026 11:12:51 GMT",
"timestamp": 1789125106,
"description": "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.",
"isHighSeverity": true,
"changeCount": 2,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract VerificationKeySetter_64DA (eth:0x64DA0892E8E24fECa6Eb5E3D8cbf2D9b6Fbe7598) [railgun/VKeySetter] {\n +++ 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+++ description: Current workflow phase: SETTING, WAITING, or COMMITTING. Only COMMITTING allows the owner to forward staged verification keys to the verifier.\n+++ severity: HIGH\n values.state:\n- 2\n+ 0\n }\n```\n\n```diff\n contract VerificationKeySetter_9086 (eth:0x9086aFC6FC88667d4031Cabd556AfDD0E3903B46) [railgun/VKeySetter] {\n +++ 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+++ description: Current workflow phase: SETTING, WAITING, or COMMITTING. Only COMMITTING allows the owner to forward staged verification keys to the verifier.\n+++ severity: HIGH\n values.state:\n- 2\n+ 0\n }\n```"
}
]
},
{
"id": "b279d5f0",
"date": "Mon, 07 Sep 2026 15:08:09 GMT",
"timestamp": 1788793617,
"description": "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.\n\nGovernance UI: https://governance.railgun.org/proposals/v2/32 (proposal document on IPFS: bafkreia5rfx3x4phxl3tyscjc55eaac5sd7dnfjpsk4nywlgq55viy4e5e).",
"isHighSeverity": true,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Voting (eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC) [railgun/Voting] {\n +++ description: Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator.\n+++ severity: HIGH\n values.proposalCount:\n- 29\n+ 33\n }\n```"
}
]
},
{
"id": "dd91f337",
"date": "Tue, 01 Sep 2026 12:18:47 GMT",
"timestamp": 1788265057,
"description": "Swap USDC to DAI proposal: https://tools.l2beat.com/decoder-new/?hash=0x83963ddea866aa6d77200fd5f6633d59aa6d4dc9a807496277f6910cc76a0369&data=AwA\n\nActions:\n\n1. Treasury → Delegator: 15109.211424 USDC\n2. Delegator: USDC.approve(Curve3pool, 15109.211424)\n3. Curve3pool: exchange USDC→DAI (min_dy = 15031.466111962828487747 DAI, 0.5% slippage)\n4. Delegator → Treasury: 15031.466111962828487747 DAI (floor)\n5. Delegator → Treasury: 75.535005587752906974 DAI (expected bonus)",
"isHighSeverity": true,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n EOA (eth:0x5a02474A3083Bc969f20F92E7a8bd3824EC607f0) {\n +++ description: None\n proxyType:\n- \"EOA\"\n+ \"EIP7702 EOA\"\n sourceHashes:\n+ [\"0xd9649be084919b1ae25d4d396555667632253f10ddb6a9bddc939db45f797b10\"]\n values:\n+ {\"$implementation\":\"eth:0x5A7FC11397E9a8AD41BF10bf13F22B0a63f96f6d\",\"nonce\":0}\n }\n```\n\n```diff\n contract Voting (eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC) [railgun/Voting] {\n +++ description: Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator.\n+++ severity: HIGH\n values.proposalCount:\n- 28\n+ 29\n }\n```"
}
]
},
{
"id": "29efff9d",
"date": "Fri, 21 Aug 2026 11:19:42 GMT",
"timestamp": 1787311119,
"description": "New proposal on Railgun DAO: \"Base deployment of RAILGUN Privacy System\". \n\nOnchain 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`).\n\nRailgun smart contracts on Base are already deployed, with bytecode matching the deployment on Ethereum.\n\nThe proposal doesn't look malicious.",
"isHighSeverity": true,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Voting (eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC) [railgun/Voting] {\n +++ description: Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator.\n+++ severity: HIGH\n values.proposalCount:\n- 27\n+ 28\n }\n```"
}
]
},
{
"id": "a6a902c5",
"date": "Wed, 19 Aug 2026 10:26:56 GMT",
"timestamp": 1787135135,
"description": "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.\n\nIPFS-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.\"\n\nLooks legit.",
"isHighSeverity": true,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Voting (eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC) [railgun/Voting] {\n +++ description: Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator.\n+++ severity: HIGH\n values.proposalCount:\n- 26\n+ 27\n }\n```"
}
]
},
{
"id": "8df35f53",
"date": "Mon, 17 Aug 2026 10:15:56 GMT",
"timestamp": 1786961539,
"description": "The RailgunSmartWallet implementation upgrade proposed and reviewed in the entry below (2026-07-30) has now been executed by governance. The new implementation (https://disco.l2beat.com/diff/eth:0xB4F2d77bD12c6b548Ae398244d7FAD4ABCE4D89b/eth:0xd662c4b1f22aceb0beacdf3a493de6f478686a0c):\n\n- adds an `Action` event (caller + per-transaction nullifier/commitment counts, unshield flag, and boundParamsHash) emitted in `shield()` and `transact()` as an anchoring point for wallets/indexers to decode batched and nested Railgun transactions,\n- changes `Verifier.verify()` and `validateTransaction()` return signatures to also return the boundParamsHash for the new event (validation logic unchanged),\n- moves the token blocklist check from `validateCommitmentPreimage()` (now pure) directly into `shield()` (same effective behavior: blocked tokens still cannot be shielded).\n\nNo permission, fee, or escrow logic changes.",
"isHighSeverity": true,
"changeCount": 4,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract RailgunSmartWallet (eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9) [railgun/RailgunSmartWallet] {\n +++ description: Main system contract and escrow that accepts shielded deposits, verifies private transactions and unshields, and maintains the commitment tree.\n sourceHashes.1:\n- \"0x0ad85e59396caf20dd30307894a735a097dbd0d914bc1851af97c04cc874ad3b\"\n+ \"0xb6d8961a0f486e51d0c52fe1292f627928dba2087f6e643379207033c0966965\"\n+++ description: Current Railgun smart wallet implementation.\n+++ severity: HIGH\n values.$implementation:\n- \"eth:0xB4F2d77bD12c6b548Ae398244d7FAD4ABCE4D89b\"\n+ \"eth:0xD662C4B1F22AcEb0BEaCdf3A493De6f478686A0C\"\n implementationNames.eth:0xB4F2d77bD12c6b548Ae398244d7FAD4ABCE4D89b:\n- \"RailgunSmartWallet\"\n implementationNames.eth:0xD662C4B1F22AcEb0BEaCdf3A493De6f478686A0C:\n+ \"RailgunSmartWallet\"\n }\n```"
}
]
},
{
"id": "7975e1ca",
"date": "Thu, 30 Jul 2026 10:47:38 GMT",
"timestamp": 1785404669,
"description": "New railgun proposal created. It is evaluated as not malicious. The trx: https://tools.l2beat.com/decoder-new/?hash=0x818c219e6081d0b650f6be93fb19e1829c154c299f2dae0c7e2f6a6dcd3f2a71&data=AwA.\nProposed upgrade of the main Railgun contract: https://disco.l2beat.com/diff/eth:0xB4F2d77bD12c6b548Ae398244d7FAD4ABCE4D89b/eth:0xd662c4b1f22aceb0beacdf3a493de6f478686a0c.\n\nChanges:\n- Added Action event that has overview of trxs in the action. This event is now emitted in transact()\n- verify() and validateTransaction() now also return hashBoundParams to be included in the new event\n- minor refactoring.\n\nProposal also executes task 6 on Arbitrum Executor, which is this one: https://tools.l2beat.com/decoder-new/?hash=0xa2403ae37d69e9b92b5934bfb13779176d8484402b211ed8f55cd3d415ef0d66&data=AwA. It makes the same railgun contract upgrade on Arbitrum.\n\nThe newly deployed railgun contracts have poseidon hash libraries not verified, it is confirmed that the EVM byte code of these libraries is equivalent to the previous deployment (no vulnerabilities introduced) on Ethereum and Arbitrum.",
"isHighSeverity": true,
"changeCount": 1,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract Voting (eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC) [railgun/Voting] {\n +++ description: Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator.\n+++ severity: HIGH\n values.proposalCount:\n- 25\n+ 26\n }\n```"
}
]
},
{
"id": "3ce399b7",
"date": "Mon, 20 Jul 2026 10:53:56 GMT",
"timestamp": 1784543269,
"description": "Executed a railgun proposal. It:\n\n- Upgraded Governor rewards (https://disco.l2beat.com/diff/eth:0xaF51CD5f71Ed88D6d1F65b575f1a8Ce3a78eC42b/eth:0xaC76eB94703b16e704f76ECFFDADF36b6A53ECDB). Diff mostly a solidity & lib version upgrades + minimal refactoring around changing interval BP parameter.\n- Minted 2.5M RAIL (currently ~$4M) for Treasury (staker rewards).\n- Increased staker rewards from 200 bp of treasury per 2 weeks to 420 bp of treasury (4.2%).",
"isHighSeverity": true,
"changeCount": 7,
"sections": [
{
"kind": "watched-changes",
"body": "```diff\n contract GovernorRewards (eth:0xA02782CE1bF85f56f8cC7C0E66e61299Ac75c86f) [railgun/GovernorRewards] {\n +++ description: Reward distributor that pulls assets from the Railgun treasury and allocates them to stakers via token voting.\n sourceHashes.1:\n- \"0x9bf4e7d842e397338e0191cf08fc9478cf3988db823baa64976da77c103fab0d\"\n+ \"0xfe182358adbab091fd4af273d3cd98fe8b507eeb8a230e1b538a26a612d68ee9\"\n+++ description: Current GovernorRewards implementation.\n+++ severity: HIGH\n values.$implementation:\n- \"eth:0xaF51CD5f71Ed88D6d1F65b575f1a8Ce3a78eC42b\"\n+ \"eth:0xaC76eB94703b16e704f76ECFFDADF36b6A53ECDB\"\n+++ description: Basis points of treasury balance earmarked for rewards on each distribution interval.\n+++ severity: HIGH\n values.intervalBP:\n- 200\n+ 420\n implementationNames.eth:0xaF51CD5f71Ed88D6d1F65b575f1a8Ce3a78eC42b:\n- \"GovernorRewards\"\n implementationNames.eth:0xaC76eB94703b16e704f76ECFFDADF36b6A53ECDB:\n+ \"GovernorRewards\"\n }\n```\n\n```diff\n contract Voting (eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC) [railgun/Voting] {\n +++ description: Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator.\n+++ severity: HIGH\n values.proposalCount:\n- 23\n+ 25\n }\n```\n\n```diff\n contract Rail Token (eth:0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D) [railgun/RailToken] {\n +++ description: RAIL governance token contract with a capped (100,000,000 RAIL total supply) mint schedule and an early anti-bot transfer override.\n+++ description: Current minted RAIL supply.\n values.totalSupply:\n- \"57500000000000000000000000\"\n+ \"60000000000000000000000000\"\n }\n```"
}
]
},
{
"id": "86454de9",
"date": "Thu, 21 May 2026 16:01:07 GMT",
"timestamp": 1779378858,
"description": "Added Relay adapter to discovery.",
"isHighSeverity": false,
"changeCount": 1,
"sections": [
{
"kind": "config-related-changes",
"body": "```diff\n+ Status: CREATED\n contract RelayAdapt (eth:0xAc9f360Ae85469B27aEDdEaFC579Ef2d052aD405) [railgun/RelayAdapt]\n +++ 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```"
}
]
},
{
"id": "bdf21018",
"date": "Wed, 06 May 2026 10:38:21 GMT",
"timestamp": 1777550988,
"description": "Discovery rerun on the same block number with only config-related changes.",
"isHighSeverity": false,
"changeCount": 19,
"sections": [
{
"kind": "initial-discovery",
"body": "```diff\n+ Status: CREATED\n contract Ae8AStreamPayout (eth:0x29905A43aA3865D0D7F2743dDE63754B4aa9CA11)\n +++ 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. It has no admin, but the treasury's TRANSFER_ROLE assignment allows it to execute the programmed payout schedule.\n```\n\n```diff\n+ Status: CREATED\n contract GovernorRewardsSweeper (eth:0x2eCa05b128bF5cbd5A73CC4BB625B51131FF119B)\n +++ description: Upgradeable helper that forwards all ETH or ERC20 balances it holds to a fixed receiver. If you trust this contract, you trust its proxy admin to upgrade, pause, or retarget the sweep behavior.\n```\n\n```diff\n+ Status: CREATED\n contract ProxyAdmin (eth:0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8)\n +++ 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```\n\n```diff\n+ Status: CREATED\n contract VerificationKeySetter_64DA (eth:0x64DA0892E8E24fECa6Eb5E3D8cbf2D9b6Fbe7598)\n +++ description: Auxiliary verifier-key staging contract. Its owner stores replacement verification keys locally and, once Railgun governance switches the contract into COMMITTING state, can forward those keys to the Railgun smart wallet verifier through the Delegator. If you trust this contract, you trust its owner to stage and commit verifier-key changes and Railgun governance to authorize the commit phase.\n```\n\n```diff\n+ Status: CREATED\n contract Beneficiary5a02OneOffPayout (eth:0x7673e2E62435D25EDBcb58fD0d88c4C95806b10F)\n +++ 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. It has no admin, but the treasury's TRANSFER_ROLE assignment allows it to execute the programmed payout schedule.\n```\n\n```diff\n+ Status: CREATED\n contract Ae8AOneOffPayout (eth:0x859E0C1790b8a721F4943742603cDB685A73BA5D)\n +++ 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. It has no admin, but the treasury's TRANSFER_ROLE assignment allows it to execute the programmed payout schedule.\n```\n\n```diff\n+ Status: CREATED\n contract VerificationKeySetter_9086 (eth:0x9086aFC6FC88667d4031Cabd556AfDD0E3903B46)\n +++ description: Auxiliary verifier-key staging contract. Its owner stores replacement verification keys locally and, once Railgun governance switches the contract into COMMITTING state, can forward those keys to the Railgun smart wallet verifier through the Delegator. If you trust this contract, you trust its owner to stage and commit verifier-key changes and Railgun governance to authorize the commit phase.\n```\n\n```diff\n+ Status: CREATED\n contract GovernorRewards (eth:0xA02782CE1bF85f56f8cC7C0E66e61299Ac75c86f)\n +++ description: Upgradeable reward distributor that pulls assets from the Railgun treasury and allocates them to stakers using snapshot voting power. If you trust this contract, you trust its owner to set reward parameters and tracked assets, and its proxy admin to pause or upgrade the logic.\n```\n\n```diff\n+ Status: CREATED\n contract LegacySweeper (eth:0xa353bC0454931Ac46fd90c8EF27f908Ab9E34686)\n +++ description: Older Railgun sweeper generation that still holds Treasury transfer rights. It is upgradeable and forwards balances to an immutable receiver, but this specific deployment does not expose the receiver getter cleanly through discovery.\n```\n\n```diff\n+ Status: CREATED\n contract A4f2OneOffPayout (eth:0xa863262Bf5E97e8CFeC47a71402aC360C0983060)\n +++ 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. It has no admin, but the treasury's TRANSFER_ROLE assignment allows it to execute the programmed payout schedule.\n```\n\n```diff\n+ Status: CREATED\n contract Delegator (eth:0xB6d513f6222Ee92Fff975E901bd792E2513fB53B)\n +++ description: Permission router owned by Railgun governance. If you trust this contract, you trust its owner and any currently delegated callers to execute privileged calls through it on connected Railgun components.\n```\n\n```diff\n+ Status: CREATED\n contract Voting (eth:0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC)\n +++ description: Token-weighted Railgun governance contract. Proposals must be sponsored, voted through quorum, and then executed through the Delegator; if you trust this contract, you trust RAIL voting power governed by these rules to change connected Railgun components.\n```\n\n```diff\n+ Status: CREATED\n contract A4f2StreamPayout (eth:0xCA9A2894e814305fAfc2BA83a70B34295b1DdE9D)\n +++ 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. It has no admin, but the treasury's TRANSFER_ROLE assignment allows it to execute the programmed payout schedule.\n```\n\n```diff\n+ Status: CREATED\n contract RailToken (eth:0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D)\n +++ description: RAIL governance token contract with a capped mint schedule and an early anti-bot transfer override. If you trust this contract, you trust its owner to mint additional RAIL up to the hard cap.\n```\n\n```diff\n+ Status: CREATED\n contract Treasury (eth:0xE8A8B458BcD1Ececc6b6b58F80929b29cCecFF40)\n +++ description: Upgradeable treasury that collects Railgun fees, and can release ETH or ERC20s only to current TRANSFER_ROLE members. If you trust this contract, you trust its role admins to decide who can move treasury assets and its proxy admin to change the treasury logic.\n```\n\n```diff\n+ Status: CREATED\n contract Getters (eth:0xe90275239D734899e8D94646139213F6F97bEB0E)\n +++ description: Read-only helper contract that batches governance snapshot and reward-view calls. It does not custody funds or hold privileged roles.\n```\n\n```diff\n+ Status: CREATED\n contract Staking (eth:0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20)\n +++ description: Immutable RAIL staking contract that tracks delegated voting power, enforces a 30-day unstake delay, and snapshots balances for governance. It has no admin, but its parameters define the governance system's voting power.\n```\n\n```diff\n+ Status: CREATED\n contract Beneficiary5a02StreamPayout (eth:0xf5F9d74FbFd04801DFf83425ff6C2002f60B921A)\n +++ 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. It has no admin, but the treasury's TRANSFER_ROLE assignment allows it to execute the programmed payout schedule.\n```\n\n```diff\n+ Status: CREATED\n contract RailgunSmartWallet (eth:0xFA7093CDD9EE6932B4eb2c9e1cde7CE00B1FA4b9)\n +++ description: Upgradeable privacy pool contract that accepts shielded deposits, verifies private transactions and unshields, and maintains the commitment tree. If you trust this contract, you trust its owner to change fees, treasury routing, token compatibility, and SNARK safety vectors, and its proxy admin to pause or upgrade the logic.\n```"
}
]
}
]
+7 -0
+7 -0
{
"addresses": {
"ethereum": [
{
"name": "Pool_50K_cDAI",
"isVerified": true,
"address": "eth:0x03893a7c7463AE47D46bc7f091665f1893656003",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 50K cDAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x03893a7c7463AE47D46bc7f091665f1893656003#code"
},
{
"name": "Pool_10K_DAI",
"isVerified": true,
"address": "eth:0x07687e702b410Fa43f4cB4Af7FA097918ffD2730",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 10K DAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x07687e702b410Fa43f4cB4Af7FA097918ffD2730#code"
},
{
"name": "Pool_1000_USDT",
"isVerified": true,
"address": "eth:0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 1000 USDT deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f#code"
},
{
"name": "Pool_0.1_ETH",
"isVerified": true,
"address": "eth:0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 0.1 ETH deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc#code"
},
{
"name": "Pool_100_USDT",
"isVerified": true,
"address": "eth:0x169AD27A470D064DEDE56a2D3ff727986b15D52B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 100 USDT deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x169AD27A470D064DEDE56a2D3ff727986b15D52B#code"
},
{
"name": "Pool_0.1_WBTC",
"isVerified": true,
"address": "eth:0x178169B423a011fff22B9e3F3abeA13414dDD0F1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 0.1 WBTC deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x178169B423a011fff22B9e3F3abeA13414dDD0F1#code"
},
{
"name": "Pool_5K_cDAI",
"isVerified": true,
"address": "eth:0x22aaA7720ddd5388A3c0A3333430953C68f1849b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 5K cDAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x22aaA7720ddd5388A3c0A3333430953C68f1849b#code"
},
{
"name": "Pool_100K_DAI",
"isVerified": true,
"address": "eth:0x23773E65ed146A459791799d01336DB287f25334",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 100K DAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x23773E65ed146A459791799d01336DB287f25334#code"
},
{
"name": "Pool_500K_cDAI",
"isVerified": true,
"address": "eth:0x2717c5e28cf931547B621a5dddb772Ab6A35B701",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 500K cDAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2717c5e28cf931547B621a5dddb772Ab6A35B701#code"
},
{
"name": "Pool_1000_USDC",
"isVerified": true,
"address": "eth:0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 1000 USDC deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D#code"
},
{
"name": "Pool_1_ETH",
"isVerified": true,
"address": "eth:0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 1 ETH deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936#code"
},
{
"name": "RelayerRegistry",
"isVerified": true,
"address": "eth:0x58E8dCC13BE9780fC42E8723D8EaD4CF46943dF2",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce"
],
"implementations": [
"eth:0x84b0c75c1F6211450FEC7289c32D717AdaDD702A"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1685886611,
"transactionHash": "0x98125b78ef0dc7fd040764f37ee24e40ae5352b8551ba671aa7bd8e8320dcef9",
"implementations": [
"eth:0xe27B91724C55E950F68b394f33FA3B86693179C0"
]
},
{
"timestamp": 1698933491,
"transactionHash": "0x3d11319e48b756e50c873bebe3a34d2e8f536436d70f99bfd6da03e4ea5642e4",
"implementations": [
"eth:0xA3b821A2C6C9a52533178a1f2B9Ff4AedbA880e6"
]
},
{
"timestamp": 1700316599,
"transactionHash": "0x9b8cc0ca7bf2019b408eead6d2db8046957134183dd882007be41822082ab319",
"implementations": [
"eth:0x84b0c75c1F6211450FEC7289c32D717AdaDD702A"
]
}
],
"description": "Upgradeable registry that tracks registered relayers, their worker addresses, and their staked TORN balances used to service withdrawals. Relayers registered here could be queried by a tornadocash frontend to facilitate discovery for users, but users are free to use any (unregistered) relayer at withdrawal time.\n* Roles:\n * **admin**: GovernanceProposalStateUpgrade\n * **governance**: GovernanceProposalStateUpgrade",
"upgradableBy": [
{
"name": "GovernanceProposalStateUpgrade",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x58E8dCC13BE9780fC42E8723D8EaD4CF46943dF2#code"
},
{
"name": "FeeManager",
"isVerified": true,
"address": "eth:0x5f6c97C6AD7bdd0AE7E0Dd4ca33A4ED3fDabD4D7",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce"
],
"implementations": [
"eth:0xf4B067dD14e95Bab89Be928c07Cb22E3c94E0DAA"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "Upgradeable fee manager that derives relayer burn fees for each Tornado instance from registry settings and Uniswap TWAP data.\n* Roles:\n * **admin**: GovernanceProposalStateUpgrade\n * **governance**: GovernanceProposalStateUpgrade",
"upgradableBy": [
{
"name": "GovernanceProposalStateUpgrade",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5f6c97C6AD7bdd0AE7E0Dd4ca33A4ED3fDabD4D7#code"
},
{
"name": "Pool_1_WBTC",
"isVerified": true,
"address": "eth:0x610B717796ad172B316836AC95a2ffad065CeaB4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 1 WBTC deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x610B717796ad172B316836AC95a2ffad065CeaB4#code"
},
{
"name": "MiMCHasher",
"isVerified": true,
"address": "eth:0x83584f83f26aF4eDDA9CBe8C730bc87C364b28fe",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"references": [
{
"title": "Tornado Cash hasher build script",
"url": "https://github.com/tornadocash/tornado-core/blob/master/scripts/compileHasher.js"
},
{
"title": "Source Code",
"url": "https://github.com/tornadocash/circomlib/blob/c372f14d324d57339c88451834bf2824e73bbdbc/src/mimcsponge_gencontract.js"
}
],
"description": "MiMC hasher used by newer Tornado pool generations for commitment-tree operations, manually verified against the pinned Tornado circomlib generator.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x83584f83f26aF4eDDA9CBe8C730bc87C364b28fe#code"
},
{
"name": "Pool_10_ETH",
"isVerified": true,
"address": "eth:0x910Cbd523D972eb0a6f4cAe4618aD62622b39DbF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 10 ETH deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x910Cbd523D972eb0a6f4cAe4618aD62622b39DbF#code"
},
{
"name": "Pool_100_ETH",
"isVerified": true,
"address": "eth:0xA160cdAB225685dA1d56aa342Ad8841c3b53f291",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 100 ETH deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA160cdAB225685dA1d56aa342Ad8841c3b53f291#code"
},
{
"name": "InstanceRegistry",
"isVerified": true,
"address": "eth:0xB20c66C4DE72433F3cE747b58B86830c459CA911",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce"
],
"implementations": [
"eth:0x2573BAc39EBe2901B4389CD468F2872cF7767FAF"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "Upgradeable registry of supported Tornado Cash pool instances and their mutable per-instance fee and routing configuration.\n* Roles:\n * **admin**: GovernanceProposalStateUpgrade\n * **governance**: GovernanceProposalStateUpgrade",
"upgradableBy": [
{
"name": "GovernanceProposalStateUpgrade",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xB20c66C4DE72433F3cE747b58B86830c459CA911#code"
},
{
"name": "Pool_10_WBTC",
"isVerified": true,
"address": "eth:0xbB93e510BbCD0B7beb5A853875f9eC60275CF498",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 10 WBTC deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbB93e510BbCD0B7beb5A853875f9eC60275CF498#code"
},
{
"name": "Pool_5M_cDAI",
"isVerified": true,
"address": "eth:0xD21be7248e0197Ee08E0c20D4a96DEBdaC3D20Af",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 5M cDAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD21be7248e0197Ee08E0c20D4a96DEBdaC3D20Af#code"
},
{
"name": "Pool_100_DAI",
"isVerified": true,
"address": "eth:0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 100 DAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3#code"
},
{
"name": "TornadoRouter",
"isVerified": true,
"address": "eth:0xd90e2f925DA726b50C4Ed8D0Fb90Ad053324F31b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Router contract that validates supported instances, forwards deposits and withdrawals, and subtracts from relayer stake through the relayer registry during withdrawals.\n* Roles:\n * **governance**: GovernanceProposalStateUpgrade",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd90e2f925DA726b50C4Ed8D0Fb90Ad053324F31b#code"
},
{
"name": "Pool_100_USDC",
"isVerified": true,
"address": "eth:0xd96f2B1c14Db8458374d9Aca76E26c3D18364307",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 100 USDC deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd96f2B1c14Db8458374d9Aca76E26c3D18364307#code"
},
{
"name": "Pool_1000_DAI",
"isVerified": true,
"address": "eth:0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination Tornado Cash pool for 1000 DAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144#code"
},
{
"name": "TornadoStakingRewards",
"isVerified": true,
"address": "eth:0x5B3f656C80E8ddb9ec01Dd9018815576E9238c29",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce"
],
"implementations": [
"eth:0x9c97be37840f0e754bb7aDB1b16fD0954A2BA248"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1687570343,
"transactionHash": "0xf89acb4c80df2c46d8907bcd4152fb044ae0ffb398fc13a6213b49b3135047eb",
"implementations": [
"eth:0x9c97be37840f0e754bb7aDB1b16fD0954A2BA248"
]
}
],
"description": "Staking contract that escrows TORN staked by relayers. With time, their stake is subtracted from for being officially registered as relayers and receiving fees from each withdrawal, and is redirected as TORN rewards for governance participants who are locking their TORN for voting/staking.\n* Roles:\n * **admin**: GovernanceProposalStateUpgrade\n * **governance**: GovernanceProposalStateUpgrade",
"upgradableBy": [
{
"name": "GovernanceProposalStateUpgrade",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5B3f656C80E8ddb9ec01Dd9018815576E9238c29#code"
},
{
"name": "TORN",
"isVerified": true,
"address": "eth:0x77777FeDdddFfC19Ff86DB637967013e6C6A116C",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "TORN governance token contract. Transfers start paused and can later be toggled by governance, which also controls the paused-transfer allowlist and token rescue functions.\n* Roles:\n * **governance**: GovernanceProposalStateUpgrade",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x77777FeDdddFfC19Ff86DB637967013e6C6A116C#code"
},
{
"name": "WithdrawVerifier",
"isVerified": true,
"address": "eth:0x09193888b3f38C82dEdfda55259A82C0E7De875E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Anonymity Mining - Verifier contract for Tornado anonymity-mining withdrawal proofs.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x09193888b3f38C82dEdfda55259A82C0E7De875E#code"
},
{
"name": "TornadoTreesV1",
"isVerified": true,
"address": "eth:0x43a3bE4Ae954d9869836702AFd10393D3a7Ea417",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Anonymity Mining - Legacy Tornado Trees contract that records deposit and withdrawal leaves from TornadoProxyV1 and maintains the roots later consumed by migration and mining logic.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x43a3bE4Ae954d9869836702AFd10393D3a7Ea417#code"
},
{
"name": "TornadoTreesV2",
"isVerified": true,
"address": "eth:0x527653eA119F3E6a1F5BD18fbF4714081D7B31ce",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce"
],
"implementations": [
"eth:0x200a79068d8141924B511bC78CB55Dca89cF5C2E"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "Anonymity Mining - Upgradeable batch-based Tornado Trees contract that reuses legacy tree state, queues new leaves from the newer proxy, and accepts batched root updates proven by a verifier.\n* Roles:\n * **admin**: GovernanceProposalStateUpgrade\n * **governance**: GovernanceProposalStateUpgrade",
"upgradableBy": [
{
"name": "GovernanceProposalStateUpgrade",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x527653eA119F3E6a1F5BD18fbF4714081D7B31ce#code"
},
{
"name": "RewardSwap",
"isVerified": true,
"address": "eth:0x5cab7692D4E94096462119ab7bF57319726Eed2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Anonymity Mining - Liquidity schedule that pays out TORN rewards for anonymity mining. Only the Miner contract can draw from it or adjust the reward weight.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x5cab7692D4E94096462119ab7bF57319726Eed2A#code"
},
{
"name": "TreeUpdateVerifier",
"isVerified": true,
"address": "eth:0x653477c392c16b0765603074f157314Cc4f40c32",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Anonymity Mining - Verifier contract for Tornado mining account-tree update proofs.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x653477c392c16b0765603074f157314Cc4f40c32#code"
},
{
"name": "TornadoProxyV2",
"isVerified": true,
"address": "eth:0x722122dF12D4e14e13Ac3b6895a86e84145b6967",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Anonymity Mining - Newer immutable Tornado proxy that routes deposits and withdrawals to supported pool instances and records them in the upgraded Tornado Trees contract.\n* Roles:\n * **governance**: GovernanceProposalStateUpgrade",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x722122dF12D4e14e13Ac3b6895a86e84145b6967#code"
},
{
"name": "Miner",
"isVerified": true,
"address": "eth:0x746Aebc06D2aE31B71ac51429A19D54E797878E9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Anonymity Mining - Mining and reward-distribution contract for Tornado anonymity mining. It verifies reward and withdrawal proofs, maintains account roots, and routes TORN rewards through the swap contract.\n* Roles:\n * **governance**: GovernanceProposalStateUpgrade",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x746Aebc06D2aE31B71ac51429A19D54E797878E9#code"
},
{
"name": "RewardVerifier",
"isVerified": true,
"address": "eth:0x88fd245fEdeC4A936e700f9173454D1931B4C307",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Anonymity Mining - Verifier contract for Tornado anonymity-mining reward proofs.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x88fd245fEdeC4A936e700f9173454D1931B4C307#code"
},
{
"name": "TornadoProxyV1",
"isVerified": true,
"address": "eth:0x905b63Fff465B9fFBF41DeA908CEb12478ec7601",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Anonymity Mining - Legacy immutable Tornado proxy that routes deposits and withdrawals to pool instances and records them in the legacy Tornado Trees contract.\n* Roles:\n * **governance**: GovernanceProposalStateUpgrade",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x905b63Fff465B9fFBF41DeA908CEb12478ec7601#code"
},
{
"name": "PoseidonHasher",
"isVerified": false,
"address": "eth:0xD82ed8786D7c69DC7e052F7A542AB047971E73d2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Anonymity Mining - Unverified Poseidon hasher used by the legacy Tornado Trees merkle trees.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD82ed8786D7c69DC7e052F7A542AB047971E73d2#code"
},
{
"name": "BatchTreeUpdateVerifier",
"isVerified": true,
"address": "eth:0xEd3B00B651c4c7AF77c2fDdce4a388de84b507C6",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Anonymity Mining - Verifier contract for batched Tornado Trees root updates.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEd3B00B651c4c7AF77c2fDdce4a388de84b507C6#code"
},
{
"name": "TornadoVault",
"isVerified": true,
"address": "eth:0x2F50508a8a3D323B91336FA3eA6ae50E55f32185",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Vault that escrows locked TORN of governance participants who wish to receive voting rights.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2F50508a8a3D323B91336FA3eA6ae50E55f32185#code"
},
{
"name": "DepositTree",
"isVerified": false,
"address": "eth:0x6234c4C2734D2B246AE074492F402D8f58ff3226",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Unverified merkle tree instance that stores legacy Tornado deposit leaves for TornadoTreesV1.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x6234c4C2734D2B246AE074492F402D8f58ff3226#code"
},
{
"name": "WithdrawalTree",
"isVerified": false,
"address": "eth:0xbFA347D89Ac54F7C2De2433458cb98A85fc03CEd",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Unverified merkle tree instance that stores legacy Tornado withdrawal leaves for TornadoTreesV1.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbFA347D89Ac54F7C2De2433458cb98A85fc03CEd#code"
},
{
"name": "Verifier",
"isVerified": true,
"address": "eth:0xce172ce1F20EC0B3728c9965470eaf994A03557A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Groth16 verifier contract used by Tornado Cash pool withdrawal proofs.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xce172ce1F20EC0B3728c9965470eaf994A03557A#code"
},
{
"name": "GasCompensationVault",
"isVerified": true,
"address": "eth:0xFA4C1f3f7D5dd7c12a9Adb82Cd7dDA542E3d59ef",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Vault that escrows ETH for governance gas-compensation payouts and can return unused funds to governance.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFA4C1f3f7D5dd7c12a9Adb82Cd7dDA542E3d59ef#code"
}
]
},
"risks": [
{
"category": "Funds can be stolen if",
"text": "the source code of unverified contracts contains malicious code.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0xce172ce1F20EC0B3728c9965470eaf994A03557A",
"eth:0xEd3B00B651c4c7AF77c2fDdce4a388de84b507C6",
"eth:0x653477c392c16b0765603074f157314Cc4f40c32",
"eth:0x88fd245fEdeC4A936e700f9173454D1931B4C307",
"eth:0x09193888b3f38C82dEdfda55259A82C0E7De875E"
]
}