Ethereum mainnet
Ethereum mainnet (chainId 1) is a production deployment of Privacy Pools v2, served by the production ASP and relayer. The core contracts went live on 2026-09-01 (Keystore at block 25884228; the ASP indexes the pool from block 25893288). It is one of three production chains deployed deterministically, so the core addresses below are identical on BNB Chain and Citrea.
Contract addresses
MAX_BATCH() answers 10 and ANNOUNCER() is the canonical ERC-5564 announcer, so relayBatch, relayAndAnnounce, and registerAndRelay are all available.approvedZapList() holds the three yield zaps below, so yield-share notes can be spent through executeUnwrapped.transact_1x1 at 0x1C838Ca4BB05838907E99A3e328e14d87a6859c1 through transact_5x5 at 0x20D183F61B7a0A0c502d136149a827C811750272; (6,6) is unregistered). Read any cell with PoolVault.verifiers(keccak256(abi.encode(n, m))).Compatibility: SDK, circuits, deployed verifiers, and deployment addresses must all match. Mixing sets produces invalid proofs.
Parameters
rootHistorySize 16 state roots in the buffer, which is what bounds MAX_BATCH at 10.maxStateTreeSize 4,194,304 (2^22).keystoreRootLiveness 1200 seconds. A superseded keystore root stays valid for twenty minutes; see the threat model.maxKeystoreTreeSize 262,144 (2^18) registrations.How each path resolves
The SDK's default DEPLOYMENTS table still carries Sepolia only. To target mainnet, pass the addresses above as config.deployment, point aspUrl at the production ASP, and supply matching circuit artifacts. Relayer, processor, and yield-router addresses come from the production relayer's /v1/details, which lists this chain as mainnet with the contracts and yield deployments below. The 0xbow frontend pins the same set and cross-checks the relayer's published RelaySwaps against its pin before quoting a swap.
Tokens
Read the live configuration with Entrypoint.assets(asset) before quoting; the values below were read on 2026-09-22. The vetting fee is 0 bps on every enabled asset.
minAmount 0.004 ETH; maxRelayFee 0.5 ETH.minAmount 10 shares; maxRelayFee 1200 shares (18-decimal share units, roughly the dollar figures of plain USDC).minAmount 10 shares; maxRelayFee 1200 shares.minAmount 0.004 shares; maxRelayFee 0.5 shares.enabled: false). On mainnet, stablecoins and WETH enter the pool only as the yield shares above, through PPRouter; the relayer lists them as swap inputs and outputs, not as depositable assets.Yield deployments
Three Aave v3 positions are live, each a PPYieldToken wrapper with its zap and router. All three wrappers charge feeBps 2000 (the 20% cap, on yield only) and share the admin 0x12Dbd6335d7f529F8922420Ba9c15c9E7A324c92. The routers are the relayer's allowed_processors.
NATIVE_MODE() answers true, so users deposit and receive ETH) · zap 0x33c1eEf370bBb447414156CFc4fDABD434776EAf · underlying WETH, 18 decimalsThe ppUSDC and ppUSDT routers are the earlier ERC-20-only router build and do not expose NATIVE_MODE(); the ppETH router is the merged build that does. Both shapes serve withdrawToUnderlying with the same ABI, so the relayer drives all three through configuration alone.
ASP
/public-key. This differs from the dev ASP's key used on Sepolia; encrypting a label to the wrong one makes the deposit unattestable.latestASPRoot() and latestIPFSCID() both answer), so attested notes are spendable.Relayer configuration
/v1/details lists chains 1, 4114, and 56)swapsSupported: true)processors and yield[]/v1/quote signs.These relayer and processor addresses are what the production relayer publishes on 2026-09-22 and are not part of the SDK deployment table. They can change when the relayer redeploys; read /v1/details at runtime.
Governance
Roles live on the AccessRouter above. Read its RoleGranted and RoleRevoked events (from block 25884228) to see who currently holds DEFAULT_ADMIN_ROLE, UPGRADER_ROLE, and the operational roles; the deployment is not recorded in the monorepo's ChainDeploymentRegistry, so the registry cannot be used as a source for this chain.
Source: read live from chain and from the production ASP and relayer on 2026-09-22; the same set is pinned in the 0xbow frontend's config/prod-deployments.ts.