Skip to main content

Citrea

Citrea mainnet (chainId 4114) is a production deployment of Privacy Pools v2, served by the production ASP and relayer. The core contracts went live on 2026-09-01 (the ASP indexes the pool from block 12093842). The core addresses are identical to Ethereum mainnet and BNB Chain, because the three were deployed deterministically. Citrea's native coin is cBTC (18 decimals).

Contract addresses

PoolVault 0x0Eb42804BF897662aF851370eaeAdcDBEC1b97ed (UUPS proxy; implementation 0x5f89cd5c3610c2ad870b1b33126d209fecdb69c7)
Entrypoint 0xca1e072236D231130059eeA6Bfceb7F4e9a1F0C3
Keystore 0x6E463391c79b7e1A88eF26E0B023f9A6C9938a71
ASPRegistry 0x259C0BEa1d783c202509BD3b2688d23b8AEf58B0
AccessRouter 0x40a6bC296D87f71Ab31Ca3Bfb50513441fBD5160
PrivacyPoolRelay 0x01a8Fa4dbb60187aD8d3c3d08E7Fb8C14198A461. The full relay (MAX_BATCH() 10, canonical ANNOUNCER()), so batch, stealth, and register-and-relay withdrawals are available.
RelaySwaps Not deployed. The address used on the other two chains has no code on Citrea, and the relayer reports swapsSupported: false. Citrea is not a LiFi network, so withdraw-and-swap and reshield are unavailable here.
Deposit verifier 0x49Ab3f48Ff9fa603EE81E5f28eB4214798E29862
Ragequit verifier 0x687059Fc9C2488f333e06aa72CBea7E4b1D05B57
Transact verifiers The 5×5 grid is registered (transact_1x1 0x1C838Ca4BB05838907E99A3e328e14d87a6859c1 through transact_5x5 0x20D183F61B7a0A0c502d136149a827C811750272), the same verifier addresses as mainnet.

Compatibility: SDK, circuits, deployed verifiers, and deployment addresses must all match. Mixing sets produces invalid proofs.

Parameters

Identical to mainnet: rootHistorySize 16, maxStateTreeSize 2^22, keystoreRootLiveness 1200 seconds, maxKeystoreTreeSize 2^18. Not paused at the time of writing.

How each path resolves

Pass the addresses above as config.deployment (the SDK's default table carries Sepolia only), point aspUrl at the production ASP, and take relayer and processor addresses from the production relayer's /v1/details, which lists this chain as citrea with no relaySwaps, no processors, and no yield.

RPC https://rpc.mainnet.citrea.xyz (the public endpoint; Citrea is not an Alchemy network). Keep eth_getLogs ranges at 1000 blocks or fewer.

Tokens

Read the live configuration with Entrypoint.assets(asset) before quoting; the values below were read on 2026-09-22.

Native cBTC (placeholder) 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee. Enabled; minAmount 0.0001 cBTC; vetting fee 0 bps; maxRelayFee 0.015 cBTC. The only depositable asset on Citrea today.
USDT.e, USDC.e, ctUSD 0x9f3096Bac87e7F03DC09b0B416eB0DF837304dc4, 0xE045e6c36cF77FAA2CfB54466D71A3aEF7bbE839, 0x8D82c4E3c936C7B5724A382a9c5a4E6Eb7aB6d5D (6 decimals each). The relayer lists all three with fee terms, but the Entrypoint has them not enabled (enabled: false, no configuration), so deposits in them revert with Entrypoint_AssetNotEnabled until they are configured.

No yield deployments exist on Citrea.

ASP

ASP public key (X25519) 0x3f651e2321b9b78c3690064b025b610942cbf755e28d44726378cf853cfd8f34, served at /public-key (the same production key as mainnet and BNB Chain).
Attestation state No association-set root had been published as of 2026-09-22: ASPRegistry.latestASPRoot() reverts ASPRegistry_EmptyAssociationSet. Deposits succeed and are recorded, but every transact (transfer or withdrawal) reverts until the ASP posts its first root, because the vault requires the proof's root to equal latestASPRoot(). Ragequit does not check the ASP root and works regardless.

Relayer configuration

Relayer signer EOA 0x9e2f1B234953F46c6091636290E9035618EA3C07
Processor for transfers and withdrawals PrivacyPoolRelay 0x01a8Fa4dbb60187aD8d3c3d08E7Fb8C14198A461
Fee shape The relayer publishes a fixed component of 21000 plus 10 bps on every listed asset.

Read /v1/details at runtime; these values are what the production relayer published on 2026-09-22.

Governance

Roles live on the AccessRouter above; read its RoleGranted and RoleRevoked events from block 12093842 for the current holders. This deployment is not recorded in the monorepo's ChainDeploymentRegistry.

Source: read live from chain and from the production ASP and relayer on 2026-09-22; pinned in the 0xbow frontend's config/prod-deployments.ts.