639891c3 (main)
and
d6e4d03c (PR)
+62 -24
+1 -0
{
"badges": [],
"description": "A selective-disclosure privacy system for Ethereum that adds compliance-aware association sets.",
"detailedDescription": "Privacy Pools is a non-custodial privacy protocol on Ethereum built around asset-specific pools and private withdrawals, adding compliance by whitelisting all legitimate deposits. A deposit creates a commitment, which is represented by secret and nullifier, and a later withdrawal uses a zero-knowledge proof to spend that commitment, either partially or in full, without revealing the matching deposit. Losing the secret and the nullifier would effectively mean losing deposited tokens.\n\nPrivacy Pools are controlled by a 2/4 multisig, which has authority to stop deposits and manage the deposit whitelist, but users always have an option to publicly withdraw deposited tokens, linking their withdrawal to their deposit.\n\n### Privacy considerations\n\nPrivacy Pools protocol supports [relayed withdrawals](https://etherscan.io/address/0x15e355024de1cdc74addea7ebdf98418ba5b1a2c#code#F1#L133), in which relayer processes withdrawals on user's behalf for a fee, which enables sending funds to fresh addresses.\n\nPractical privacy also depends on the timing and amounts of deposits and withdrawals, underlying network and browser used to interact with Privacy Pools frontend (if used), RPC providers used to send transactions and query public blockchain state. Users are advised to research the best OPSEC practices.\n\n### Compliance\n\nThe main feature of Privacy Pools is compliance, which is enforced through the ASP. Association set is a whitelist of deposits that are allowed to be withdrawn from the protocol. This set is managed in real time by the provider, which is currently a single entity. The full association set is published via IPFS, only its Merkle root is posted onchain. User's deposit could be excluded from the whitelist at any moment, in this case the user can still ragequit, i.e. publicly withdraw deposited funds and link them to their deposit.\n\nASP is designed to vouch that withdrawals from Privacy Pools are not related to any known illegal activity.\n\n### Anonymity set\n\nThe anonymity set consists of all whitelisted deposits of the same token with the value greater than the withdrawal amount. Note that only deposits approved by the ASP add to the anonymity set. To maximize the anonymity set, users are recommended to withdraw smaller amounts and deposit popular tokens.",
"links": {
"websites": [
"https://www.privacypools.com"
]
}
}
+39 -2
{
"riskSummary": "## Funds can be lost if\n1. the zk proof system is broken, allowing invalid withdrawals.\n2. the [trusted setup](#trusted-setups) is compromised or all ceremony participants collude, allowing invalid withdrawals.\n3. a user loses the secret and nullifier required to spend their deposit.\n4. the Entrypoint owner deploys a malicious [upgrade](#upgrades-and-governance) that steals new deposits.\n
\n## Privacy can be lost if\n1. no relayer is available and the withdrawal must be submitted from an address that can be linked to the user.\n2. the ASP manager refuses to whitelist a deposit, forcing the user to either wait or exit publicly through ragequit.",
"attributes": [
{
"id": "immutable",
"label": "Immutable",
"description": "Core smart contract code cannot be changed."
},
{
"id": "enforcedCompliance",
"label": "Enforced compliance",
"description": "ASPs (association set providers) can censor any deposits, excluding them from the anonymity set."
},
{
"id": "anyAmount",
"label": "Any amount",
"description": "Deposits and withdrawals can have any size."
},
{
"id": "openSource",
"label": "Open source",
"description": "There is at least one practical way to use exclusively open source software to interact with this protocol."
}
],
"riskSummary": "## Funds can be stolen if\n1. the zk proof system is broken, allowing invalid withdrawals.\n2. the [trusted setup](#trusted-setups) is compromised or all ceremony participants collude, allowing invalid withdrawals.\n3. the Entrypoint owner deploys a malicious [upgrade](#upgrades-and-governance) that steals new deposits.\n
\n## Funds can be lost if\n1. a user loses the secret and nullifier required to spend their deposit.\n
\n## Privacy can be lost if\n1. no relayer is available and the withdrawal must be submitted from an address that can be linked to the user.\n2. the ASP manager refuses to whitelist a deposit, forcing the user to either wait or exit publicly through ragequit.",
"tokens": [
{
"token": {
"address": "0x6440f144b7e50D6a8439336510312d2F54beB01D",
"iconUrl": "https://coin-images.coingecko.com/coins/images/56069/large/BOLD_logo.png?1748265087",
"symbol": "BOLD",
"decimals": 18,
"priceId": "liquity-bold-2",
"sinceTimestamp": 1770806867
},
"buckets": [
{
"id": "privacy-pools-BOLD",
"type": "pool",
"label": "BOLD pool",
"address": "eth:0xb4b5Fd38Fd4788071d7287e3cB52948e0d10b23E",
"sinceTimestamp": 1770806867,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"iconUrl": "https://assets.coingecko.com/coins/images/9956/large/Badge_Dai.png?1696509996",
"symbol": "DAI",
"decimals": 18,
"priceId": "dai",
"sinceTimestamp": 1752848471
},
"buckets": [
{
"id": "privacy-pools-DAI",
"type": "pool",
"label": "DAI pool",
"address": "eth:0x1c31C03B8CB2EE674D0F11De77135536db828257",
"sinceTimestamp": 1752848471,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
"iconUrl": "https://assets.coingecko.com/coins/images/279/large/ethereum.png?1595348880",
"symbol": "ETH",
"decimals": 18,
"priceId": "ethereum",
"sinceTimestamp": 1743265259
},
"buckets": [
{
"id": "privacy-pools-ETH",
"type": "pool",
"label": "ETH pool",
"address": "eth:0xF241d57C6DebAe225c0F2e6eA1529373C9A9C9fB",
"sinceTimestamp": 1743265259,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xCAcd6fd266aF91b8AeD52aCCc382b4e165586E29",
"iconUrl": "https://coin-images.coingecko.com/coins/images/53963/large/frxUSD.png?1737792154",
"symbol": "frxUSD",
"decimals": 18,
"priceId": "frax-usd",
"sinceTimestamp": 1754583623
},
"buckets": [
{
"id": "privacy-pools-frxUSD",
"type": "pool",
"label": "frxUSD pool",
"address": "eth:0xC6C769fac7AABEadd31a03fAe5Ca0Ec5B4C50f84",
"sinceTimestamp": 1754583623,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0x085780639CC2cACd35E474e71f4d000e2405d8f6",
"iconUrl": "https://coin-images.coingecko.com/coins/images/36202/large/fxUSD.jpg?1710833113",
"symbol": "fxUSD",
"decimals": 18,
"priceId": "f-x-protocol-fxusd",
"sinceTimestamp": 1765446455
},
"buckets": [
{
"id": "privacy-pools-fxUSD",
"type": "pool",
"label": "fxUSD pool",
"address": "eth:0xD14F4B36E1D1D98c218db782c49149876042BC56",
"sinceTimestamp": 1765446455,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD",
"iconUrl": "https://coin-images.coingecko.com/coins/images/52721/large/sUSDS_Coin.png?1734086971",
"symbol": "sUSDS",
"decimals": 18,
"priceId": "susds",
"sinceTimestamp": 1752782999
},
"buckets": [
{
"id": "privacy-pools-sUSDS",
"type": "pool",
"label": "sUSDS pool",
"address": "eth:0xBBdA2173CDFEA1c3bD7F2908798F1265301d750c",
"sinceTimestamp": 1752782999,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0x8d0D000Ee44948FC98c9B98A4FA4921476f08B0d",
"iconUrl": "https://coin-images.coingecko.com/coins/images/54977/large/USD1_1000x1000_transparent.png?1749297002",
"symbol": "USD1",
"decimals": 18,
"priceId": "usd1-wlfi",
"sinceTimestamp": 1754583179
},
"buckets": [
{
"id": "privacy-pools-USD1",
"type": "pool",
"label": "USD1 pool",
"address": "eth:0xc0A8Bc0F4F982b4d4f1fFae8F4FCCb58c9B29c98",
"sinceTimestamp": 1754583179,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"iconUrl": "https://assets.coingecko.com/coins/images/6319/large/usdc.png?1696506694",
"symbol": "USDC",
"decimals": 6,
"priceId": "usd-coin",
"sinceTimestamp": 1753353035
},
"buckets": [
{
"id": "privacy-pools-USDC",
"type": "pool",
"label": "USDC pool",
"address": "eth:0xb419c2867aB3CBc78921660cB95150d95A94ce86",
"sinceTimestamp": 1753353035,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0x4c9EDD5852cd905f086C759E8383e09bff1E68B3",
"iconUrl": "https://assets.coingecko.com/coins/images/33613/large/3466ef_3c088c66c7d941e8856339d0bddf33cc_mv2.png?1702514458",
"symbol": "USDe",
"decimals": 18,
"priceId": "ethena-usde",
"sinceTimestamp": 1754583083
},
"buckets": [
{
"id": "privacy-pools-USDe",
"type": "pool",
"label": "USDe pool",
"address": "eth:0xe6D36B33b00A7C0cB0C2a8d39D07e7dB0c526Abc",
"sinceTimestamp": 1754583083,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xdC035D45d973E3EC169d2276DDab16f1e407384F",
"iconUrl": "https://coin-images.coingecko.com/coins/images/39926/large/usds.webp?1726666683",
"symbol": "USDS",
"decimals": 18,
"priceId": "usds",
"sinceTimestamp": 1752503003
},
"buckets": [
{
"id": "privacy-pools-USDS",
"type": "pool",
"label": "USDS pool",
"address": "eth:0x05e4DBD71B56861eeD2Aaa12d00A797F04B5D3c0",
"sinceTimestamp": 1752503003,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"iconUrl": "https://assets.coingecko.com/coins/images/325/large/Tether.png?1696501661",
"symbol": "USDT",
"decimals": 6,
"priceId": "tether",
"sinceTimestamp": 1753352915
},
"buckets": [
{
"id": "privacy-pools-USDT",
"type": "pool",
"label": "USDT pool",
"address": "eth:0xe859C0bD25f260BaEE534Fb52e307D3b64D24572",
"sinceTimestamp": 1753352915,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"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": 1753975703
},
"buckets": [
{
"id": "privacy-pools-WBTC",
"type": "pool",
"label": "WBTC pool",
"address": "eth:0xF973f4B180A568157Cd7A0E6006449139E6Bfc32",
"sinceTimestamp": 1753975703,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0xDcEe70654261AF21C44c093C300eD3Bb97b78192",
"iconUrl": "https://coin-images.coingecko.com/coins/images/29734/large/woeth-200x200.png?1714796686",
"symbol": "wOETH",
"decimals": 18,
"priceId": "wrapped-oeth",
"sinceTimestamp": 1756377743
},
"buckets": [
{
"id": "privacy-pools-wOETH",
"type": "pool",
"label": "wOETH pool",
"address": "eth:0x7d2959bCFb936a84531518e8391DdBa844e03ebE",
"sinceTimestamp": 1756377743,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
},
{
"token": {
"address": "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0",
"iconUrl": "https://assets.coingecko.com/coins/images/18834/large/wstETH.png?1696518295",
"symbol": "wstETH",
"decimals": 18,
"priceId": "wrapped-steth",
"sinceTimestamp": 1753975583
},
"buckets": [
{
"id": "privacy-pools-wstETH",
"type": "pool",
"label": "wstETH pool",
"address": "eth:0x1A604E9DFa0EFDC7FFda378AF16Cb81243b61633",
"sinceTimestamp": 1753975583,
"deposit": {
"event": "0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549",
"extractor": "privacyPoolsValue",
"params": {}
},
"withdrawal": {
"event": "0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21",
"extractor": "privacyPoolsValue",
"params": {}
}
}
]
}
],
"trustedSetup": {
"id": "PrivacyPools",
"name": "Privacy Pools",
"risk": "green",
"participantCount": 513,
"shortDescription": "Trusted setup for two Groth16 Privacy Pools circuits, with 514 and 513 participants.",
"longDescription": "\n Trusted setup for two Groth16 Privacy Pools circuits: the Exit circuit and the Private Withdrawal circuit.\n The ceremony was publicly announced, open to anonymous and identified participants, and concluded in March 2025.\n The finalized zKeys were published for independent verification, and the ceremony code and UI were open-sourced.\n\n - Ceremony completion announcement: [https://0xbow.io/blog/celebrating-the-conclusion-of-the-trusted-setup-ceremony](https://0xbow.io/blog/celebrating-the-conclusion-of-the-trusted-setup-ceremony)\n - Ceremony page with finalized zKeys: [https://ceremony.pse.dev/projects/Privacy%20Pools%20Ceremony](https://ceremony.pse.dev/projects/Privacy%20Pools%20Ceremony)\n - Initial ceremony announcement: [https://0xbow.io/blog/privacy-pools-trusted-setup-ceremony-join-us-in-strengthening-privacy](https://0xbow.io/blog/privacy-pools-trusted-setup-ceremony-join-us-in-strengthening-privacy)\n - Privacy Pools repository: [https://github.com/0xbow-io/privacy-pools-core](https://github.com/0xbow-io/privacy-pools-core)\n "
},
"upgradesAndGovernance": "Privacy pools Entrypoint contract is owned by a 2/4 Multisig ([0xAd7f9A19E2598b6eFE0A25C84FB1c87F81eB7159](https://etherscan.io/address/0xAd7f9A19E2598b6eFE0A25C84FB1c87F81eB7159)). \n \n It is a powerful role that has the authority to upgrade the Entrypoint contract, through which all deposits go. It can also manage minimum deposit amount, deposit fee, disable deposits on pools and manage ASP postman address that manages whitelisted privacy pools deposits.\n \n Entrypoint owner cannot prevent private or public withdrawals from the pools."
"upgradesAndGovernance": "The 2/4 Privacy Pools Multisig can instantly change the system’s critical configs, including the Entrypoint implementation and ASP root used for private withdrawals. The ASP postman (EOA) can also remove any deposit from the whitelist at any time, forcing a public rage-quit if the affected party wishes to withdraw. The guaranteed immutable escape hatch is pool-level ragequit (public withdrawal) to the original depositor address, because that logic lives in the immutable pool contracts and does not depend on the Entrypoint registry and config. This means the system is permissioned in its deposit logic and deposit privacy, but non-custodial for deposited assets. Past, successful (non-ragequit) withdrawals can not be deanonymized by the protocol."
}
+4 -4
{
"ethereum": {
"roles": [],
"actors": [
{
"id": "PrivacyPoolsAdminSafe",
"name": "PrivacyPoolsAdminSafe",
"id": "Privacy Pools Multisig",
"name": "Privacy Pools Multisig",
"description": "A Multisig with 2/4 threshold. \n* Can interact with PrivacyPoolsEntrypoint\n * authorize UUPS upgrades to the Entrypoint implementation \n * grant and revoke OWNER_ROLE and ASP_POSTMAN \n * publish new association-set roots and IPFS CIDs used by withdrawals \n * register and remove pools, update per-asset minimum deposits and fee caps, and wind down pools \n * withdraw fees held in the Entrypoint ",
"accounts": [
{
"address": "eth:0xAd7f9A19E2598b6eFE0A25C84FB1c87F81eB7159",
"type": "Contract",
"isVerified": true,
"name": "0xAd7f…7159",
"url": "https://etherscan.io/address/0xAd7f9A19E2598b6eFE0A25C84FB1c87F81eB7159"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0xd76eEb2A6fcf55dc80D046FFbc96D1A2B45AB52E",
"type": "EOA",
"isVerified": true,
"name": "0xd76e…B52E",
"url": "https://etherscan.io/address/0xd76eEb2A6fcf55dc80D046FFbc96D1A2B45AB52E"
},
{
"address": "eth:0xb1A1D5b0f3d4E8e89E55daBFEb0B96118cbc16fc",
"type": "EOA",
"isVerified": true,
"name": "0xb1A1…16fc",
"url": "https://etherscan.io/address/0xb1A1D5b0f3d4E8e89E55daBFEb0B96118cbc16fc"
},
{
"address": "eth:0x554c5aF96E9e3c05AEC01ce18221d0DD25975aB4",
"type": "EOA",
"isVerified": true,
"name": "0x554c…5aB4",
"url": "https://etherscan.io/address/0x554c5aF96E9e3c05AEC01ce18221d0DD25975aB4"
},
{
"address": "eth:0x42FEdcd80C8C9694DBc3b2ff0fD48BB8651dfC62",
"type": "EOA",
"isVerified": true,
"name": "0x42FE…fC62",
"url": "https://etherscan.io/address/0x42FEdcd80C8C9694DBc3b2ff0fD48BB8651dfC62"
}
],
"discoveryDrivenData": true
},
{
"id": "PrivacyPoolsASPPostman",
"name": "PrivacyPoolsASPPostman",
"id": "EOA-1",
"name": "EOA 1",
"accounts": [
{
"address": "eth:0x1f4Fe25Cf802a0605229e0Dc497aAf653E86E187",
"type": "EOA",
"isVerified": true,
"name": "0x1f4F…E187",
"url": "https://etherscan.io/address/0x1f4Fe25Cf802a0605229e0Dc497aAf653E86E187"
}
],
"chain": "ethereum",
"description": "* Can interact with PrivacyPoolsEntrypoint\n * publish new association-set roots and IPFS CIDs used by withdrawals ",
"discoveryDrivenData": true
}
]
}
}
+17 -17
{
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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": "UUPS-upgradeable hub for Privacy Pools. It accepts deposits, relays withdrawals, tracks association-set roots published by the ASP, and maps each supported asset and scope to a pool. Trusting this contract means trusting OWNER_ROLE holders to upgrade it, manage pools and fees, and withdraw fees, and trusting ASP_POSTMAN holders to publish the latest association-set root used by withdrawals.\n* Roles:\n * **aspPostmen**: PrivacyPoolsASPPostman, PrivacyPoolsAdminSafe\n * **ownerRoleMembers**: PrivacyPoolsAdminSafe",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. Only the Entrypoint can create deposits or wind the pool down. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.\n",
"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. The verification key is hardcoded in the contract and there are no privileged roles or mutable configuration.\n",
"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. The verification key is hardcoded in the contract and there are no privileged roles or mutable configuration.\n",
"description": "Stateless Groth16 verifier used by Privacy Pool contracts to verify ragequit proofs.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa45ACa8604a73D80C551fAad6355A5c3A5565eC6#code"
}
]
},
"risks": []
}
+1 -1
{
"baseTimestamp": 1777567242,
"baseTimestamp": 1779457786,
"contractsDiscoDriven": false,
"hasDiscoUi": false,
"isDiscoDriven": false,
"permissionsDiscoDriven": false
}
+139 -97
+1 -0
{
"badges": [],
"description": "An onchain privacy system for Ethereum based on encrypted UTXO-style private balances and zk-proven DeFi interactions.",
"detailedDescription": "Railgun is a non-custodial privacy protocol on Ethereum built around encrypted UTXO-style private balances rather than fixed-denomination pools. This design enables in-protocol transfers of shielded tokens and interactions with DeFi smart contracts on L1.\n\nA shield transaction moves assets from a public address on Ethereum into the Railgun contract and creates encrypted commitments in a Merkle-tree state. Later private transfers or unshields use zk-SNARK proofs to spend those commitments without revealing the sender, recipient, token type, or amount. Notes created by deposits and private transactions represents ownership of tokens in Railgun, users must keep them secret and make sure the notes are not lost.\n\nRailgun supports private transfers and cross-contract interactions without fragmenting liquidity across denominations. External DeFi calls are executed through the Relay Adapt flow, which temporarily unshields tokens into an adapter contract, performs a sequence of contract calls, and shields the resulting assets back into a private balance in a single transaction.\n\nRailgun has a DAO governed by holders of the RAIL token. The DAO has the authority to arbitrarily change the logic of the protocol and its shielded tokens.\n\n### Privacy considerations\n\nRailgun protocol supports [relayed withdrawals](https://docs.railgun.org/developer-guide/wallet/transactions/unshielding), in which a relayer processes withdrawals on the user's behalf for a fee, which enables sending funds to fresh addresses. Transactions from private addresses can be sent through broadcasters over the [Waku network](https://blog.waku.org/2024-04-26-railgun-case-study/), which increases network-level privacy. Railgun allows interactions between shielded tokens and DeFi, which allows depositing and withdrawing different tokens.\n\nPractical privacy also depends on the timing and amounts of deposits and withdrawals, as well as RPC providers used to send transactions and query the public blockchain state. Syncing a railgun wallet requires a user to make heavy rpc queries because they need to scan all deposits to the protocol to track their own balance. Running a full node or trusted rpc is recommended. Users are advised to research the best OPSEC practices. Users are advised to research the best OPSEC practices.\n\n### Compliance\n\nRailgun protocol does not enforce any compliance measures. However it allows using [Private Proof of Innocence](https://docs.railgun.org/wiki/assurance/private-proofs-of-innocence), which can attest to the origin and history of shielded tokens. Practically, broadcasters and some wallets only process transactions with a valid PPoI.\n\nAdditionally, Railgun users can share a read-only viewing key to expose all sent and received private transactions, if required by a regulator or enforcer. \n### Anonymity set\n\nBecause Railgun allows private transfers and interactions with DeFi, its anonymity set is not well defined. A withdrawal from Railgun could be connected with a deposit of another token, or could even not correspond to any deposit if a user received a private transfer from another user. The anonymity set roughly corresponds to the set of all Railgun users.",
"links": {
"websites": [
"https://railgun.org"
]
}
}
+43 -2
{
"riskSummary": "## Funds can be lost 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. a user loses the private keys required to control their private balance.\n4. the DAO passes a malicious [upgrade](#upgrades-and-governance) and users do not react before the 7-day execution delay expires.\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.",
"attributes": [
{
"id": "upgradeable",
"label": "Upgradeable",
"description": "DAO can vote on upgrades that are executable with a 7d delay."
},
{
"id": "optCompliance",
"label": "Opt compliance",
"description": "Optional 'proofs of innocence' (POIs), can disassociate the deposit from a list of flagged addresses."
},
{
"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."
},
{
"id": "openSource",
"label": "Open source",
"description": "There is at least one practical way to use exclusively open source software to interact with this protocol."
}
],
"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,
"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"
}
}
}
]
}
],
"trustedSetup": {
"id": "Railgun",
"name": "Railgun",
"risk": "green",
"participantCount": 304,
"shortDescription": "Circuit-specific trusted setup for 54 Groth16 Railgun circuits over BN254, publicly announced and completed in December 2022 with 328 named contributors (304 contributions on the 1x1 circuit).",
"longDescription": "\n Circuit-specific Phase 2 trusted setup for Railgun's 54 Groth16 circuits (parameterised by\n transaction input/output counts) over the BN254 curve. It builds on the\n [Perpetual Powers of Tau ceremony](https://github.com/privacy-scaling-explorations/perpetualpowersoftau)\n as Phase 1 and was run as a separate Phase 2 per circuit. The ceremony was publicly announced,\n open to anonymous and identified participants, and wrapped up in late December 2022.\n\n Verified against the ceremony artifact IPFS hash\n `QmWAySHYhaZqioKi1ufrPJC1n1ZVtHP2w4hLA9XqqJCFne`: the\n `/contributors` directory contains 328 sequentially-numbered attestation files with\n GitHub or Twitter handles, and the `/zkeys` directory contains 54 final zkey files (one\n per circuit). Parsing the final zkey binary for the 1x1 circuit shows 304 Phase 2\n contributions on that circuit.\n\n - Ceremony artifacts on IPFS: [https://ipfs.io/ipfs/QmWAySHYhaZqioKi1ufrPJC1n1ZVtHP2w4hLA9XqqJCFne](https://ipfs.io/ipfs/QmWAySHYhaZqioKi1ufrPJC1n1ZVtHP2w4hLA9XqqJCFne)\n - Ceremony announcement: [https://medium.com/@Railgun_Project/railgun-project-begins-setup-ceremony-with-an-emphasis-on-security-d1c63117c312](https://medium.com/@Railgun_Project/railgun-project-begins-setup-ceremony-with-an-emphasis-on-security-d1c63117c312)\n - Advanced Circuit ceremony user guide: [https://medium.com/@Railgun_Project/railgun-advanced-circuit-setup-ceremony-user-guide-32361c54242](https://medium.com/@Railgun_Project/railgun-advanced-circuit-setup-ceremony-user-guide-32361c54242)\n - Docs overview of the trusted setup: [https://docs.railgun.org/wiki/learn/privacy-system/trusted-setup-ceremony](https://docs.railgun.org/wiki/learn/privacy-system/trusted-setup-ceremony)\n - Railgun circuits repository with ceremony scripts: [https://github.com/Railgun-Privacy/circuits-v2](https://github.com/Railgun-Privacy/circuits-v2)\n "
},
"upgradesAndGovernance": "Railgun features an omnipotent DAO governed by the stakers of RAIL token. DAO has the authority to change ZK circuit logic on the core Railgun contract, effectively arbitrarily changing the rules for shielded tokens; as well as manage blacklisted tokens, mint RAIL tokens and manage governance rewards. See docs here: \n\n## Governance flow\n\n1. Users stake RAIL token in the Staking contract ([0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20](https://etherscan.io/address/0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20)). Voting power is proportional to the staked amount and could be delegated to another address. Unstaking has 1mo delay.\n2. Anyone can create a new proposal with an IPFS link and onchain calldata on the Voting contract ([0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC](https://etherscan.io/address/0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC)). It enters Sponsorship stage of 1mo, where it has to be supported by 500 K RAIL stake.\n3. After a 2d delay, actual vote starts. \"Yay\" votes need to be cast within 5d, \"Nay\" have 6d. Proposal needs to reach the quorum of 2.00 M RAIL.\n4. A passed proposal (simple majority) waits for 7d before execution and then must be executed within 14d by anyone. Execution goes via the Delegator smart contract ([0xB6d513f6222Ee92Fff975E901bd792E2513fB53B](https://etherscan.io/address/0xB6d513f6222Ee92Fff975E901bd792E2513fB53B)), which actually has permissions to modify the Railgun protocol values."
"upgradesAndGovernance": "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: \n\n## Governance flow\n\n1. Users stake RAIL token in the Staking contract ([0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20](https://etherscan.io/address/0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20)). Voting power is proportional to the staked amount and can be delegated to another address. Unstaking has 1mo delay.\n2. Anyone can create a new proposal with an IPFS link and onchain calldata on the Voting contract ([0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC](https://etherscan.io/address/0xc480F68A3dcC3EdD82134FAB45C14A0FcF1dA3CC)). It enters a Sponsorship stage of 1mo, where it has to be supported by 500 K RAIL stake.\n3. After a 2d delay, the actual voting starts. \"Yay\" votes need to be cast within 5d, \"Nay\" have 6d. Proposal needs to reach the quorum of 2.00 M RAIL.\n4. A passed proposal (simple majority) waits for 7d before execution and then must be executed within 14d by anyone. Execution goes via the Delegator smart contract ([0xB6d513f6222Ee92Fff975E901bd792E2513fB53B](https://etherscan.io/address/0xB6d513f6222Ee92Fff975E901bd792E2513fB53B)), which actually has permissions to modify the Railgun protocol values."
}
+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; if you trust this contract, you trust RAIL voting power governed by these rules to change connected Railgun components.\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]",
"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"
}
],
"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 ",
"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"
}
],
"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
}
]
}
}
+93 -93
{
"addresses": {
"ethereum": [
{
"name": "Treasury",
"isVerified": true,
"address": "eth:0xE8A8B458BcD1Ececc6b6b58F80929b29cCecFF40",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8"
],
"implementations": [
"eth:0xA092c7577354EA82a6c7e55B423c3DD80f0dF255"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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* Roles:\n * **admin**: ProxyAdmin; ultimately Voting\n * **defaultAdminRoleMembers**: Delegator; ultimately Voting\n * **transferRoleMembers**: Delegator, GovernorRewards, IntervalPayouts, LegacySweeper; ultimately Voting",
"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": "EIP1967 proxy",
"admins": [
"eth:0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8"
],
"implementations": [
"eth:0xB4F2d77bD12c6b548Ae398244d7FAD4ABCE4D89b"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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* Roles:\n * **admin**: ProxyAdmin; ultimately Voting\n * **owner**: Delegator; ultimately Voting",
"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": "Getters",
"name": "ProxyAdmin",
"isVerified": true,
"address": "eth:0xe90275239D734899e8D94646139213F6F97bEB0E",
"address": "eth:0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Read-only helper contract that batches governance snapshot and reward-view calls. It does not custody funds or hold privileged roles.\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* Roles:\n * **owner**: Delegator",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xe90275239D734899e8D94646139213F6F97bEB0E#code"
"url": "https://etherscan.io/address/0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8#code"
},
{
"name": "IntervalPayouts",
"name": "VerificationKeySetter_64DA",
"isVerified": true,
"address": "eth:0x29905A43aA3865D0D7F2743dDE63754B4aa9CA11",
"address": "eth:0x64DA0892E8E24fECa6Eb5E3D8cbf2D9b6Fbe7598",
"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. It has no admin, but the treasury's TRANSFER_ROLE assignment allows it to execute the programmed payout schedule.\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* Roles:\n * **delegator**: Delegator; ultimately Voting\n * **owner**: EOA 2",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x29905A43aA3865D0D7F2743dDE63754B4aa9CA11#code"
"url": "https://etherscan.io/address/0x64DA0892E8E24fECa6Eb5E3D8cbf2D9b6Fbe7598#code"
},
{
"name": "GovernorRewardsSweeper",
"name": "VerificationKeySetter_9086",
"isVerified": true,
"address": "eth:0x2eCa05b128bF5cbd5A73CC4BB625B51131FF119B",
"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": "EIP1967 proxy",
"admins": [
"eth:0x76EB574EFF49FB64DE6f7F2854952B05B5E24624"
"eth:0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8"
],
"implementations": [
"eth:0x2ea76A3c4795DD1a5d206B285fD21b2Fb83EAf1a"
"eth:0xaF51CD5f71Ed88D6d1F65b575f1a8Ce3a78eC42b"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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* Roles:\n * **admin**: EOA 1",
"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": [
{
"id": "EOA-1",
"name": "EOA 1",
"name": "Voting",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2eCa05b128bF5cbd5A73CC4BB625B51131FF119B#code"
"url": "https://etherscan.io/address/0xA02782CE1bF85f56f8cC7C0E66e61299Ac75c86f#code"
},
{
"name": "ProxyAdmin",
"name": "LegacySweeper",
"isVerified": true,
"address": "eth:0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8",
"address": "eth:0xa353bC0454931Ac46fd90c8EF27f908Ab9E34686",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB6d513f6222Ee92Fff975E901bd792E2513fB53B"
],
"implementations": [
"eth:0x9b1310BdCC19D172D0092240e33209a9156c8EE2"
]
},
"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",
"pastUpgrades": [],
"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/0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8#code"
"url": "https://etherscan.io/address/0xa353bC0454931Ac46fd90c8EF27f908Ab9E34686#code"
},
{
"name": "VerificationKeySetter_64DA",
"name": "Delegator",
"isVerified": true,
"address": "eth:0x64DA0892E8E24fECa6Eb5E3D8cbf2D9b6Fbe7598",
"address": "eth:0xB6d513f6222Ee92Fff975E901bd792E2513fB53B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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* Roles:\n * **delegator**: Delegator; ultimately Voting\n * **owner**: EOA 2",
"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/0x64DA0892E8E24fECa6Eb5E3D8cbf2D9b6Fbe7598#code"
"url": "https://etherscan.io/address/0xB6d513f6222Ee92Fff975E901bd792E2513fB53B#code"
},
{
"name": "IntervalPayouts",
"name": "Rail Token",
"isVerified": true,
"address": "eth:0x7673e2E62435D25EDBcb58fD0d88c4C95806b10F",
"address": "eth:0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D",
"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. It has no admin, but the treasury's TRANSFER_ROLE assignment allows it to execute the programmed payout schedule.\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* Roles:\n * **owner**: Delegator; ultimately Voting",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7673e2E62435D25EDBcb58fD0d88c4C95806b10F#code"
"url": "https://etherscan.io/address/0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D#code"
},
{
"name": "IntervalPayouts",
"name": "Staking",
"isVerified": true,
"address": "eth:0x859E0C1790b8a721F4943742603cDB685A73BA5D",
"address": "eth:0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20",
"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. It has no admin, but the treasury's TRANSFER_ROLE assignment allows it to execute the programmed payout schedule.\n",
"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/0x859E0C1790b8a721F4943742603cDB685A73BA5D#code"
"url": "https://etherscan.io/address/0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20#code"
},
{
"name": "VerificationKeySetter_9086",
"name": "IntervalPayouts",
"isVerified": true,
"address": "eth:0x9086aFC6FC88667d4031Cabd556AfDD0E3903B46",
"address": "eth:0x29905A43aA3865D0D7F2743dDE63754B4aa9CA11",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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* Roles:\n * **delegator**: Delegator; ultimately Voting\n * **owner**: EOA 1",
"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/0x9086aFC6FC88667d4031Cabd556AfDD0E3903B46#code"
"url": "https://etherscan.io/address/0x29905A43aA3865D0D7F2743dDE63754B4aa9CA11#code"
},
{
"name": "GovernorRewards",
"name": "GovernorRewardsSweeper",
"isVerified": true,
"address": "eth:0xA02782CE1bF85f56f8cC7C0E66e61299Ac75c86f",
"address": "eth:0x2eCa05b128bF5cbd5A73CC4BB625B51131FF119B",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x4F8E20f55f879beE7Bc010Bd6bD2138B34aC65c8"
"eth:0x76EB574EFF49FB64DE6f7F2854952B05B5E24624"
],
"implementations": [
"eth:0xaF51CD5f71Ed88D6d1F65b575f1a8Ce3a78eC42b"
"eth:0x2ea76A3c4795DD1a5d206B285fD21b2Fb83EAf1a"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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* Roles:\n * **admin**: ProxyAdmin; ultimately Voting\n * **owner**: Delegator; ultimately Voting",
"description": "Helper that forwards all ETH or ERC20 balances it holds to a fixed receiver.\n* Roles:\n * **admin**: EOA 1",
"upgradableBy": [
{
"name": "Voting",
"id": "EOA-1",
"name": "EOA 1",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xA02782CE1bF85f56f8cC7C0E66e61299Ac75c86f#code"
"url": "https://etherscan.io/address/0x2eCa05b128bF5cbd5A73CC4BB625B51131FF119B#code"
},
{
"name": "LegacySweeper",
"isVerified": true,
"address": "eth:0xa353bC0454931Ac46fd90c8EF27f908Ab9E34686",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0xB6d513f6222Ee92Fff975E901bd792E2513fB53B"
],
"implementations": [
"eth:0x9b1310BdCC19D172D0092240e33209a9156c8EE2"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"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* Roles:\n * **admin**: Delegator; ultimately Voting",
"upgradableBy": [
{
"name": "Voting",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa353bC0454931Ac46fd90c8EF27f908Ab9E34686#code"
},
{
"name": "IntervalPayouts",
"isVerified": true,
"address": "eth:0xa863262Bf5E97e8CFeC47a71402aC360C0983060",
"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. It has no admin, but the treasury's TRANSFER_ROLE assignment allows it to execute the programmed payout schedule.\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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xa863262Bf5E97e8CFeC47a71402aC360C0983060#code"
"url": "https://etherscan.io/address/0x7673e2E62435D25EDBcb58fD0d88c4C95806b10F#code"
},
{
"name": "Delegator",
"name": "IntervalPayouts",
"isVerified": true,
"address": "eth:0xB6d513f6222Ee92Fff975E901bd792E2513fB53B",
"address": "eth:0x859E0C1790b8a721F4943742603cDB685A73BA5D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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* Roles:\n * **owner**: Voting\n * **verificationKeyDelegates**: VerificationKeySetter_64DA, VerificationKeySetter_9086",
"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/0xB6d513f6222Ee92Fff975E901bd792E2513fB53B#code"
"url": "https://etherscan.io/address/0x859E0C1790b8a721F4943742603cDB685A73BA5D#code"
},
{
"name": "IntervalPayouts",
"isVerified": true,
"address": "eth:0xCA9A2894e814305fAfc2BA83a70B34295b1DdE9D",
"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. It has no admin, but the treasury's TRANSFER_ROLE assignment allows it to execute the programmed payout schedule.\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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xCA9A2894e814305fAfc2BA83a70B34295b1DdE9D#code"
"url": "https://etherscan.io/address/0xa863262Bf5E97e8CFeC47a71402aC360C0983060#code"
},
{
"name": "Rail Token",
"name": "IntervalPayouts",
"isVerified": true,
"address": "eth:0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D",
"address": "eth:0xCA9A2894e814305fAfc2BA83a70B34295b1DdE9D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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* Roles:\n * **owner**: Delegator; ultimately Voting",
"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/0xe76C6c83af64e4C60245D8C7dE953DF673a7A33D#code"
"url": "https://etherscan.io/address/0xCA9A2894e814305fAfc2BA83a70B34295b1DdE9D#code"
},
{
"name": "Staking",
"name": "Getters",
"isVerified": true,
"address": "eth:0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20",
"address": "eth:0xe90275239D734899e8D94646139213F6F97bEB0E",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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",
"description": "Read-only helper contract that batches governance snapshot and reward-view calls.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xEE6A649Aa3766bD117e12C161726b693A1B2Ee20#code"
"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. It has no admin, but the treasury's TRANSFER_ROLE assignment allows it to execute the programmed payout schedule.\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.\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": []
}
+1 -1
{
"baseTimestamp": 1779378858,
"baseTimestamp": 1779461009,
"contractsDiscoDriven": false,
"hasDiscoUi": false,
"isDiscoDriven": false,
"permissionsDiscoDriven": false
}
+199 -188
+3 -3
{
"unverifiedContracts": [
"eth:0x6234c4C2734D2B246AE074492F402D8f58ff3226",
"eth:0x83584f83f26aF4eDDA9CBe8C730bc87C364b28fe",
"eth:0xbFA347D89Ac54F7C2De2433458cb98A85fc03CEd",
"eth:0xD82ed8786D7c69DC7e052F7A542AB047971E73d2"
"eth:0xD82ed8786D7c69DC7e052F7A542AB047971E73d2",
"eth:0x6234c4C2734D2B246AE074492F402D8f58ff3226",
"eth:0xbFA347D89Ac54F7C2De2433458cb98A85fc03CEd"
]
}
+2 -5
{
"badges": [],
"description": "A classic Ethereum mixer design based on fixed-denomination pools and zk withdrawals.",
"links": {
"websites": [
"https://tornadocash.network"
]
}
"detailedDescription": "Tornado Cash is a non-custodial mixer on Ethereum built around separate fixed-denomination pools, which prevents linking deposits and withdrawals via the amount. A deposit publishes a commitment into a Merkle tree producing a secret note, and a later withdrawal uses a zk-SNARK proof and the note to send the same denomination to a different address, breaking the deposit-withdrawal link. The note represents ownership of tokens in a Tornado cash pool, and losing it will effectively mean losing the tokens.\n\nThe core mixer contracts are immutable and have no admin, pause, or upgrade path, so funds can only move out with a valid proof. However Tornado cash features TORN token governance, which controls peripheral smart contracts: official pool registry, relayer registration requirement and TORN tokenomics.\n\n### Privacy considerations\n\nTornado cash introduces a permissionless relayer network, which is essential for practical privacy. Relayers process withdrawals from Tornado cash pools on user's behalf for a fee, which enables withdrawals to fresh addresses without funding them before the withdrawal. Without an active relayer network, practical privacy of Tornado cash deteriorates significantly.\n\nPractical privacy also depends on the timing of deposits and withdrawals, underlying network and browser used to interact with Tornado cash frontend (if used), RPC providers used to send transactions and query public blockchain state. Users are advised to research the best OPSEC practices.\n\n### Compliance\n\nTornado cash does not have any protocol-level compliance features. However, it provides an optional [Compliance Tool](https://docs.tornado.cash/tornado-cash-classic/compliance-tool), which allows users to generate a proof linking a withdrawal to a specific deposit without revealing this information publicly onchain. This enables users to selectively disclose the origin of funds to third parties, such as exchanges or regulators.\n\nProtocol pools were [sanctioned by OFAC in August 2022](https://home.treasury.gov/news/press-releases/jy0916), flagging funds moved through these smart contracts as illicit and forcing Tornado Cash transaction censorship. Sanctions were lifted on March 21, 2025.\n\n### Anonymity set\n\nUser's anonymity set consists of all previous deposits into the same bucket (i.e. deposits of the same token and amount). Deposits could be mixed only with other deposits of the same token and denomination. To maximize the anonymity set, users are advised to deposit into the buckets with most usage.\n\n### Secure frontend\n\nFor average users, the Tornado Cash frontend must be recognized as a critical part of the privacy protocol. If compromised, it can steal user assets and violate user privacy, which [was exploited in 2024](https://www.coindesk.com/business/2024/02/26/tornado-cash-reportedly-suffers-backend-exploit-user-deposits-at-risk).\n\nThe frontend's root of trust is the IPFS content hash registered for [tornadocash.eth](https://app.ens.domains/tornadocash.eth?tab=records) in the ENS smart contract on Ethereum. \nThe latest hash can be fetched from a trusted ethereum node (e.g. your own node or a light node). \nThere were incidents of malicious frontend hash updates passing onchain governance proposals before, so using a publicly audited or self-audited IPFS hash is advised. \nAn example of audit process with useful links could be found [here](https://gist.github.com/pcaversaccio/ea7f62fd21b6e22f301980007f7c767e) or [here](https://notes.ethereum.org/@GW1ZUbNKR5iRjjKYx6_dJQ/Bk8zsJ9xj).\nThe frontend can then be accessed by running a local IPFS node that automatically fetches the verified frontend hash (e.g. in style of [dapp3.eth](https://github.com/apoorvlathey/dapp3)) and serves it in the browser locally.\n",
"links": {}
}
+31 -2
{
"riskSummary": "## Funds can be lost if\n1. the zk proof system is broken, allowing invalid withdrawals.\n2. the [trusted setup](#trusted-setups) is compromised or all ceremony participants collude, allowing invalid withdrawals.\n3. a user loses the note secrets required to withdraw. \n
\n## Privacy can be lost if\n1. no relayer is available and the withdrawal must be submitted from an address that can be linked to the user.",
"attributes": [
{
"id": "immutable",
"label": "Immutable",
"description": "Core smart contract code cannot be changed."
},
{
"id": "uncensorable",
"label": "Uncensorable",
"description": "Deposits and withdrawals cannot be censored."
},
{
"id": "fixedAmounts",
"label": "Fixed amounts",
"description": "Pre-defined transfer amounts use distinct buckets (anonymity sets)."
},
{
"id": "openSource",
"label": "Open source",
"description": "There is at least one practical way to use exclusively open source software to interact with this protocol."
}
],
"riskSummary": "## Funds can be stolen if\n1. the zk proof system is broken, allowing invalid withdrawals.\n2. the [trusted setup](#trusted-setups) is compromised or all ceremony participants collude, allowing invalid withdrawals.\n
\n## Funds can be lost if\n1. a user loses the note secrets required to withdraw. \n
\n## Privacy can be lost if\n1. no relayer is available and the withdrawal must be submitted from an address that can be linked to the user (see [best practices page](/privacy/best-practices) for more info).",
"tokens": [
{
"token": {
"address": "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643",
"iconUrl": "https://assets.coingecko.com/coins/images/9281/large/cDAI.png?1696509390",
"symbol": "cDAI",
"decimals": 8,
"priceId": "cdai",
"sinceTimestamp": 1577297782
},
"buckets": [
{
"id": "tornado-cDAI-5000",
"type": "denomination",
"label": "cDAI 5000",
"address": "eth:0x22aaA7720ddd5388A3c0A3333430953C68f1849b",
"sinceTimestamp": 1577297782,
"denomination": "5000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "500000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "500000000000"
}
}
},
{
"id": "tornado-cDAI-50000",
"type": "denomination",
"label": "cDAI 50000",
"address": "eth:0x03893a7c7463AE47D46bc7f091665f1893656003",
"sinceTimestamp": 1616155055,
"denomination": "50000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "5000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "5000000000000"
}
}
},
{
"id": "tornado-cDAI-500000",
"type": "denomination",
"label": "cDAI 500000",
"address": "eth:0x2717c5e28cf931547B621a5dddb772Ab6A35B701",
"sinceTimestamp": 1616135923,
"denomination": "500000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "50000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "50000000000000"
}
}
},
{
"id": "tornado-cDAI-5000000",
"type": "denomination",
"label": "cDAI 5000000",
"address": "eth:0xD21be7248e0197Ee08E0c20D4a96DEBdaC3D20Af",
"sinceTimestamp": 1616115450,
"denomination": "5000000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "500000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "500000000000000"
}
}
}
]
},
{
"token": {
"address": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"iconUrl": "https://assets.coingecko.com/coins/images/9956/large/Badge_Dai.png?1696509996",
"symbol": "DAI",
"decimals": 18,
"priceId": "dai",
"sinceTimestamp": 1576534688
},
"buckets": [
{
"id": "tornado-DAI-100",
"type": "denomination",
"label": "DAI 100",
"address": "eth:0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3",
"sinceTimestamp": 1576534688,
"denomination": "100",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000"
}
}
},
{
"id": "tornado-DAI-1000",
"type": "denomination",
"label": "DAI 1000",
"address": "eth:0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144",
"sinceTimestamp": 1577297383,
"denomination": "1000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000000000000000"
}
}
},
{
"id": "tornado-DAI-10000",
"type": "denomination",
"label": "DAI 10000",
"address": "eth:0x07687e702b410Fa43f4cB4Af7FA097918ffD2730",
"sinceTimestamp": 1616114822,
"denomination": "10000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "10000000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "10000000000000000000000"
}
}
},
{
"id": "tornado-DAI-100000",
"type": "denomination",
"label": "DAI 100000",
"address": "eth:0x23773E65ed146A459791799d01336DB287f25334",
"sinceTimestamp": 1616115387,
"denomination": "100000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000000"
}
}
}
]
},
{
"token": {
"address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
"iconUrl": "https://assets.coingecko.com/coins/images/279/large/ethereum.png?1595348880",
"symbol": "ETH",
"decimals": 18,
"priceId": "ethereum",
"sinceTimestamp": 1576523323
},
"buckets": [
{
"id": "tornado-ETH-0.1",
"type": "denomination",
"label": "ETH 0.1",
"address": "eth:0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc",
"sinceTimestamp": 1576523323,
"denomination": "0.1",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000"
}
}
},
{
"id": "tornado-ETH-1",
"type": "denomination",
"label": "ETH 1",
"address": "eth:0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936",
"sinceTimestamp": 1576534673,
"denomination": "1",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000000000000"
}
}
},
{
"id": "tornado-ETH-10",
"type": "denomination",
"label": "ETH 10",
"address": "eth:0x910Cbd523D972eb0a6f4cAe4618aD62622b39DbF",
"sinceTimestamp": 1576536415,
"denomination": "10",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "10000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "10000000000000000000"
}
}
},
{
"id": "tornado-ETH-100",
"type": "denomination",
"label": "ETH 100",
"address": "eth:0xA160cdAB225685dA1d56aa342Ad8841c3b53f291",
"sinceTimestamp": 1577296976,
"denomination": "100",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000000000000000"
}
}
}
]
},
{
"token": {
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"iconUrl": "https://assets.coingecko.com/coins/images/6319/large/usdc.png?1696506694",
"symbol": "USDC",
"decimals": 6,
"priceId": "usd-coin",
"sinceTimestamp": 1577298068
},
"buckets": [
{
"id": "tornado-USDC-100",
"type": "denomination",
"label": "USDC 100",
"address": "eth:0xd96f2B1c14Db8458374d9Aca76E26c3D18364307",
"sinceTimestamp": 1577298068,
"denomination": "100",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
}
},
{
"id": "tornado-USDC-1000",
"type": "denomination",
"label": "USDC 1000",
"address": "eth:0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D",
"sinceTimestamp": 1577298155,
"denomination": "1000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
}
}
]
},
{
"token": {
"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"iconUrl": "https://assets.coingecko.com/coins/images/325/large/Tether.png?1696501661",
"symbol": "USDT",
"decimals": 6,
"priceId": "tether",
"sinceTimestamp": 1577298900
},
"buckets": [
{
"id": "tornado-USDT-100",
"type": "denomination",
"label": "USDT 100",
"address": "eth:0x169AD27A470D064DEDE56a2D3ff727986b15D52B",
"sinceTimestamp": 1577298900,
"denomination": "100",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
}
},
{
"id": "tornado-USDT-1000",
"type": "denomination",
"label": "USDT 1000",
"address": "eth:0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f",
"sinceTimestamp": 1577298985,
"denomination": "1000",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
}
}
]
},
{
"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": 1616123193
},
"buckets": [
{
"id": "tornado-WBTC-0.1",
"type": "denomination",
"label": "WBTC 0.1",
"address": "eth:0x178169B423a011fff22B9e3F3abeA13414dDD0F1",
"sinceTimestamp": 1616134868,
"denomination": "0.1",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "10000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "10000000"
}
}
},
{
"id": "tornado-WBTC-1",
"type": "denomination",
"label": "WBTC 1",
"address": "eth:0x610B717796ad172B316836AC95a2ffad065CeaB4",
"sinceTimestamp": 1616123193,
"denomination": "1",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "100000000"
}
}
},
{
"id": "tornado-WBTC-10",
"type": "denomination",
"label": "WBTC 10",
"address": "eth:0xbB93e510BbCD0B7beb5A853875f9eC60275CF498",
"sinceTimestamp": 1616135758,
"denomination": "10",
"deposit": {
"event": "0xa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
},
"withdrawal": {
"event": "0xe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931",
"extractor": "fixedAmount",
"params": {
"amount": "1000000000"
}
}
}
]
}
],
"trustedSetup": {
"id": "TornadoCash",
"name": "Tornado Cash",
"risk": "green",
"participantCount": 1114,
"shortDescription": "Circuit-specific trusted setup for Groth16 Tornado Cash circuits, contains 1114 contributions.",
"longDescription": "\n Circuit-specific trusted setup for Groth16 Tornado Cash circuits. It was publicly announced as a Phase 2 ceremony\n built on top of the 30th contribution to the Perpetual Powers of Tau ceremony, and completed in May 2020. It\n collected 1114 contributions over 10 days, with 450 identified contributors and 664 anonymous ones. Tornado Cash\n published the participant list, archive of contributions and artifacts, and the generated verifier contract.\n\n - Ceremony completion announcement: [https://tornado-cash.medium.com/the-biggest-trusted-setup-ceremony-in-the-world-3c6ab9c8fffa](https://tornado-cash.medium.com/the-biggest-trusted-setup-ceremony-in-the-world-3c6ab9c8fffa)\n - Ceremony page with participant list and archive download: [https://ceremony.tornado.cash/](https://ceremony.tornado.cash/)\n - Initial ceremony announcement: [https://tornado-cash.medium.com/tornado-cash-trusted-setup-ceremony-b846e1e00be1](https://tornado-cash.medium.com/tornado-cash-trusted-setup-ceremony-b846e1e00be1)\n - Ceremony code repository: [https://github.com/tornadocash/phase2-bn254](https://github.com/tornadocash/phase2-bn254)\n "
},
"upgradesAndGovernance": "Tornado cash has a TORN DAO, however it does not have the authority to upgrade or modify existing pools in any way. It can only add new pools to the onchain setup and the official UI, manage relayer-relevant parameters and govern the TORN token."
"upgradesAndGovernance": "\nTornado cash has a TORN DAO, which does not have the authority to upgrade or modify existing pools in any way. However it controls a significant portion of the Tornado cash protocol and periphery, including:\n\n1. **Default router for deposits and withdrawals and the official registry of supported pools**. Malicious upgrades of these components could lead to users losing deposited tokens. \n2. **Standard UI IPFS hash registered on ENS** ([link](https://app.ens.domains/tornadocash.eth)). Malicious upgrades of these components could lead to users losing deposited tokens. \n3. **TORN token itself**. Malicious upgrades of the token could lead to token transfers being frozen. \n4. **Registered relayers**. Malicious upgrades of these components could remove all registered relayers, disrupting user-relayer coordination and complicating private withdrawals.\n\n### **Governance flow**\n\n1. Users lock TORN token in the Governance contract ([0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce](https://etherscan.io/address/0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce)). After voting or proposing, staked tokens are locked for 5d 6h after proposal ends, preventing governance hopping. The stake can be delegated to another address. \n2. Anyone with at least 1.00 K TORN can create a proposal. The proposal spends 1m 15s in the Pending state, where voting is still disabled, followed by 5d of Active state, when votes are cast. If the vote outcome changes in the last 1h, the voting period is extended by another 6h. \n3. Proposal is accepted by the simple majority with a required quorum of 100 K TORN. Once accepted, 2d of Timelocked state allow exiting the protocol to everyone who disagrees with the proposal. Afterwards, the proposal can be permissionlessly executed within 3d. \n "
}
+162 -177
{
"addresses": {
"ethereum": [
{
"name": "cTornado",
"name": "Pool_50K_cDAI",
"isVerified": true,
"address": "eth:0x03893a7c7463AE47D46bc7f091665f1893656003",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination cToken-based mixer pool. Anyone can sweep accrued COMP rewards, but the claimed COMP is always sent to the governance address.\n",
"description": "Fixed-denomination Tornado Cash pool for 50K cDAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x03893a7c7463AE47D46bc7f091665f1893656003#code"
},
{
"name": "ERC20Tornado",
"name": "Pool_10K_DAI",
"isVerified": true,
"address": "eth:0x07687e702b410Fa43f4cB4Af7FA097918ffD2730",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination ERC20 mixer pool from the newer Tornado Cash pool generation. Funds are governed by the withdrawal verifier and the immutable verifier/hasher pair configured at deployment.\n",
"description": "Fixed-denomination Tornado Cash pool for 10K DAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x07687e702b410Fa43f4cB4Af7FA097918ffD2730#code"
},
{
"name": "TornadoCash_erc20",
"name": "Pool_1000_USDT",
"isVerified": true,
"address": "eth:0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n",
"description": "Fixed-denomination Tornado Cash pool for 1000 USDT deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f#code"
},
{
"name": "TornadoCash_Eth_01",
"name": "Pool_0.1_ETH",
"isVerified": true,
"address": "eth:0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Legacy fixed-denomination ETH mixer for 0.1 ETH deposits. This older pool generation keeps an operator role that can replace the withdrawal verifier and, for this instance, perform a one-time state migration.\n",
"description": "Fixed-denomination Tornado Cash pool for 0.1 ETH deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc#code"
},
{
"name": "TornadoCash_erc20",
"name": "Pool_100_USDT",
"isVerified": true,
"address": "eth:0x169AD27A470D064DEDE56a2D3ff727986b15D52B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n",
"description": "Fixed-denomination Tornado Cash pool for 100 USDT deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x169AD27A470D064DEDE56a2D3ff727986b15D52B#code"
},
{
"name": "ERC20Tornado",
"name": "Pool_0.1_WBTC",
"isVerified": true,
"address": "eth:0x178169B423a011fff22B9e3F3abeA13414dDD0F1",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination ERC20 mixer pool from the newer Tornado Cash pool generation. Funds are governed by the withdrawal verifier and the immutable verifier/hasher pair configured at deployment.\n",
"description": "Fixed-denomination Tornado Cash pool for 0.1 WBTC deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x178169B423a011fff22B9e3F3abeA13414dDD0F1#code"
},
{
"name": "TornadoCash_erc20",
"name": "Pool_5K_cDAI",
"isVerified": true,
"address": "eth:0x22aaA7720ddd5388A3c0A3333430953C68f1849b",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n",
"description": "Fixed-denomination Tornado Cash pool for 5K cDAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x22aaA7720ddd5388A3c0A3333430953C68f1849b#code"
},
{
"name": "ERC20Tornado",
"name": "Pool_100K_DAI",
"isVerified": true,
"address": "eth:0x23773E65ed146A459791799d01336DB287f25334",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination ERC20 mixer pool from the newer Tornado Cash pool generation. Funds are governed by the withdrawal verifier and the immutable verifier/hasher pair configured at deployment.\n",
"description": "Fixed-denomination Tornado Cash pool for 100K DAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x23773E65ed146A459791799d01336DB287f25334#code"
},
{
"name": "cTornado",
"name": "Pool_500K_cDAI",
"isVerified": true,
"address": "eth:0x2717c5e28cf931547B621a5dddb772Ab6A35B701",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination cToken-based mixer pool. Anyone can sweep accrued COMP rewards, but the claimed COMP is always sent to the governance address.\n",
"description": "Fixed-denomination Tornado Cash pool for 500K cDAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x2717c5e28cf931547B621a5dddb772Ab6A35B701#code"
},
{
"name": "TornadoTreesV1",
"name": "Pool_1000_USDC",
"isVerified": true,
"address": "eth:0x43a3bE4Ae954d9869836702AFd10393D3a7Ea417",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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": "TornadoCash_erc20",
"isVerified": true,
"address": "eth:0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n",
"description": "Fixed-denomination Tornado Cash pool for 1000 USDC deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D#code"
},
{
"name": "TornadoCash_eth",
"name": "Pool_1_ETH",
"isVerified": true,
"address": "eth:0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Legacy fixed-denomination ETH mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n",
"description": "Fixed-denomination Tornado Cash pool for 1 ETH deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936#code"
},
{
"name": "TornadoTreesV2",
"isVerified": true,
"address": "eth:0x527653eA119F3E6a1F5BD18fbF4714081D7B31ce",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce"
],
"implementations": [
"eth:0x200a79068d8141924B511bC78CB55Dca89cF5C2E"
]
},
"chain": "ethereum",
"pastUpgrades": [],
"description": "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": "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.\n* Roles:\n * **admin**: GovernanceProposalStateUpgrade\n * **governance**: GovernanceProposalStateUpgrade",
"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": "RewardSwap",
"isVerified": true,
"address": "eth:0x5cab7692D4E94096462119ab7bF57319726Eed2A",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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": "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": "ERC20Tornado",
"name": "Pool_1_WBTC",
"isVerified": true,
"address": "eth:0x610B717796ad172B316836AC95a2ffad065CeaB4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination ERC20 mixer pool from the newer Tornado Cash pool generation. Funds are governed by the withdrawal verifier and the immutable verifier/hasher pair configured at deployment.\n",
"description": "Fixed-denomination Tornado Cash pool for 1 WBTC deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x610B717796ad172B316836AC95a2ffad065CeaB4#code"
},
{
"name": "TornadoProxyV2",
"isVerified": true,
"address": "eth:0x722122dF12D4e14e13Ac3b6895a86e84145b6967",
"name": "MiMCHasher",
"isVerified": false,
"address": "eth:0x83584f83f26aF4eDDA9CBe8C730bc87C364b28fe",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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",
"description": "Unverified MiMC hasher used by newer Tornado pool generations for commitment-tree operations. If this contract were malicious or had a backdoor, all pools using it would be compromised.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x722122dF12D4e14e13Ac3b6895a86e84145b6967#code"
"url": "https://etherscan.io/address/0x83584f83f26aF4eDDA9CBe8C730bc87C364b28fe#code"
},
{
"name": "Miner",
"name": "Pool_10_ETH",
"isVerified": true,
"address": "eth:0x746Aebc06D2aE31B71ac51429A19D54E797878E9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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": "TornadoProxyV1",
"isVerified": true,
"address": "eth:0x905b63Fff465B9fFBF41DeA908CEb12478ec7601",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "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": "TornadoCash_eth",
"isVerified": true,
"address": "eth:0x910Cbd523D972eb0a6f4cAe4618aD62622b39DbF",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Legacy fixed-denomination ETH mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n",
"description": "Fixed-denomination Tornado Cash pool for 10 ETH deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x910Cbd523D972eb0a6f4cAe4618aD62622b39DbF#code"
},
{
"name": "TornadoCash_eth",
"name": "Pool_100_ETH",
"isVerified": true,
"address": "eth:0xA160cdAB225685dA1d56aa342Ad8841c3b53f291",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Legacy fixed-denomination ETH mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n",
"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": "ERC20Tornado",
"name": "Pool_10_WBTC",
"isVerified": true,
"address": "eth:0xbB93e510BbCD0B7beb5A853875f9eC60275CF498",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination ERC20 mixer pool from the newer Tornado Cash pool generation. Funds are governed by the withdrawal verifier and the immutable verifier/hasher pair configured at deployment.\n",
"description": "Fixed-denomination Tornado Cash pool for 10 WBTC deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbB93e510BbCD0B7beb5A853875f9eC60275CF498#code"
},
{
"name": "cTornado",
"name": "Pool_5M_cDAI",
"isVerified": true,
"address": "eth:0xD21be7248e0197Ee08E0c20D4a96DEBdaC3D20Af",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Fixed-denomination cToken-based mixer pool. Anyone can sweep accrued COMP rewards, but the claimed COMP is always sent to the governance address.\n",
"description": "Fixed-denomination Tornado Cash pool for 5M cDAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xD21be7248e0197Ee08E0c20D4a96DEBdaC3D20Af#code"
},
{
"name": "TornadoCash_erc20",
"name": "Pool_100_DAI",
"isVerified": true,
"address": "eth:0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n",
"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 burns relayer stake through the relayer registry during withdrawals.\n* Roles:\n * **governance**: GovernanceProposalStateUpgrade",
"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": "TornadoCash_erc20",
"name": "Pool_100_USDC",
"isVerified": true,
"address": "eth:0xd96f2B1c14Db8458374d9Aca76E26c3D18364307",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n",
"description": "Fixed-denomination Tornado Cash pool for 100 USDC deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xd96f2B1c14Db8458374d9Aca76E26c3D18364307#code"
},
{
"name": "TornadoCash_erc20",
"name": "Pool_1000_DAI",
"isVerified": true,
"address": "eth:0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Legacy fixed-denomination ERC20 mixer from the original Tornado Cash pool generation. It retains an operator role that can replace the withdrawal verifier until renounced.\n",
"description": "Fixed-denomination Tornado Cash pool for 1000 DAI deposits.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144#code"
},
{
"name": "Proposal",
"isVerified": true,
"address": "eth:0x4B6C07B8940a7602fE4332AFa915b366e56eAce5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "One-off governance proposal payload that deployed the newer Tornado Trees and proxy wiring, migrated legacy tree state, and disabled old mineable instances on the legacy proxy.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x4B6C07B8940a7602fE4332AFa915b366e56eAce5#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": "Upgradeable staking rewards contract that holds relayer stake, distributes burn-derived rewards to locked TORN holders, and lets governance recover TORN from the contract.\n* Roles:\n * **admin**: GovernanceProposalStateUpgrade\n * **governance**: GovernanceProposalStateUpgrade",
"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": "Verifier contract for Tornado anonymity-mining withdrawal proofs.\n",
"description": "Anonymity Mining - Verifier contract for Tornado anonymity-mining withdrawal proofs.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x09193888b3f38C82dEdfda55259A82C0E7De875E#code"
},
{
"name": "TornadoVault",
"name": "TornadoTreesV1",
"isVerified": true,
"address": "eth:0x2F50508a8a3D323B91336FA3eA6ae50E55f32185",
"address": "eth:0x43a3bE4Ae954d9869836702AFd10393D3a7Ea417",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Vault that escrows locked TORN on behalf of governance users and serves withdrawals initiated by the governance contract.\n",
"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/0x2F50508a8a3D323B91336FA3eA6ae50E55f32185#code"
"url": "https://etherscan.io/address/0x43a3bE4Ae954d9869836702AFd10393D3a7Ea417#code"
},
{
"name": "DepositTree",
"isVerified": false,
"address": "eth:0x6234c4C2734D2B246AE074492F402D8f58ff3226",
"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": "Unverified merkle tree instance that stores legacy Tornado deposit leaves for TornadoTreesV1.\n",
"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/0x6234c4C2734D2B246AE074492F402D8f58ff3226#code"
"url": "https://etherscan.io/address/0x5cab7692D4E94096462119ab7bF57319726Eed2A#code"
},
{
"name": "TreeUpdateVerifier",
"isVerified": true,
"address": "eth:0x653477c392c16b0765603074f157314Cc4f40c32",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for Tornado mining account-tree update proofs.\n",
"description": "Anonymity Mining - Verifier contract for Tornado mining account-tree update proofs.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x653477c392c16b0765603074f157314Cc4f40c32#code"
},
{
"name": "MiMCHasher",
"isVerified": false,
"address": "eth:0x83584f83f26aF4eDDA9CBe8C730bc87C364b28fe",
"name": "TornadoProxyV2",
"isVerified": true,
"address": "eth:0x722122dF12D4e14e13Ac3b6895a86e84145b6967",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Unverified MiMC hasher used by newer Tornado pool generations for commitment-tree operations.\n",
"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/0x83584f83f26aF4eDDA9CBe8C730bc87C364b28fe#code"
"url": "https://etherscan.io/address/0x722122dF12D4e14e13Ac3b6895a86e84145b6967#code"
},
{
"name": "RewardVerifier",
"name": "Miner",
"isVerified": true,
"address": "eth:0x88fd245fEdeC4A936e700f9173454D1931B4C307",
"address": "eth:0x746Aebc06D2aE31B71ac51429A19D54E797878E9",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for Tornado anonymity-mining reward proofs.\n",
"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/0x88fd245fEdeC4A936e700f9173454D1931B4C307#code"
"url": "https://etherscan.io/address/0x746Aebc06D2aE31B71ac51429A19D54E797878E9#code"
},
{
"name": "WithdrawalTree",
"isVerified": false,
"address": "eth:0xbFA347D89Ac54F7C2De2433458cb98A85fc03CEd",
"name": "RewardVerifier",
"isVerified": true,
"address": "eth:0x88fd245fEdeC4A936e700f9173454D1931B4C307",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Unverified merkle tree instance that stores legacy Tornado withdrawal leaves for TornadoTreesV1.\n",
"description": "Anonymity Mining - Verifier contract for Tornado anonymity-mining reward proofs.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xbFA347D89Ac54F7C2De2433458cb98A85fc03CEd#code"
"url": "https://etherscan.io/address/0x88fd245fEdeC4A936e700f9173454D1931B4C307#code"
},
{
"name": "Verifier",
"name": "TornadoProxyV1",
"isVerified": true,
"address": "eth:0xce172ce1F20EC0B3728c9965470eaf994A03557A",
"address": "eth:0x905b63Fff465B9fFBF41DeA908CEb12478ec7601",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Groth16 verifier contract used by Tornado Cash pool withdrawal proofs.\n",
"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/0xce172ce1F20EC0B3728c9965470eaf994A03557A#code"
"url": "https://etherscan.io/address/0x905b63Fff465B9fFBF41DeA908CEb12478ec7601#code"
},
{
"name": "PoseidonHasher",
"isVerified": false,
"address": "eth:0xD82ed8786D7c69DC7e052F7A542AB047971E73d2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Unverified Poseidon hasher used by the legacy Tornado Trees merkle trees.\n",
"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": "Verifier contract for batched Tornado Trees root updates.\n",
"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
}
]
}
+1 -1
{
"baseTimestamp": 1779099959,
"baseTimestamp": 1779439938,
"contractsDiscoDriven": false,
"hasDiscoUi": false,
"isDiscoDriven": false,
"permissionsDiscoDriven": false
}