Sepolia (testnet)
Sepolia testnet is the canonical development environment for Privacy Pools v2 (chainId 11155111). The 0xbow frontend, the SDK's default deployment table, and the latest on-chain registry currently all resolve to the same V9 contract set below. They are configured independently, so confirm they still agree before relying on one, and keep your SDK, circuits, verifiers, and addresses on a single matching set.
Contract addresses (Sepolia V9)
The PrivacyPoolRelay processor address is app-configured rather than part of the SDK deployment table, so it lives in Relayer configuration below.
Compatibility: SDK, circuits, deployed verifiers, and deployment addresses must all match. Mixing sets produces invalid proofs.
How each path resolves
The frontend pins the pool and keystore directly and resolves the entrypoint at runtime from the ASP /global/public/entrypoints feed, matching the entry whose poolVault equals the pinned pool. It can switch the active pool from that feed, while environment overrides pin a specific deployment when they are set.
The SDK resolves these addresses through DEPLOYMENTS[11155111] when no deployment is supplied in config. That table carries only the four contract addresses above, not relayer or processor routing. To target a different pool, override config.deployment explicitly and supply matching circuits.
The on-chain registry holds the newest published set, which currently matches both.
Frontend configuration
An integrating app supplies the rest of its configuration through environment variables: the ASP base URL, the RPC or provider endpoint, optional pool, keystore, and entrypoint overrides, the relayer settings, and optionally the ASP public key (otherwise fetched from the provider on first use). The v2 frontend is an Expo app, so it reads these through EXPO_PUBLIC_* names, for example EXPO_PUBLIC_SEPOLIA_POOL_ADDRESS and EXPO_PUBLIC_SEPOLIA_KEYSTORE_ADDRESS to override the pinned pool and keystore. Those prefixed names are the v2 frontend's convention rather than a protocol requirement, so a non-Expo integration uses its own variable names for the same values.
Tokens
Asset configuration (enabled flag, min amount, vetting fee BPS, max relay fee) is set per-asset on the Entrypoint. Read it live rather than hardcoding values: call Entrypoint.assets(asset), which returns AssetConfig{ enabled, minAmount, vettingFeeBPS, maxRelayFee }, and quote fees and minimums from those fields per deposit.
ASP
Relayer configuration
/v1/quote/evm/11155111/transfer, /v1/relay/evm/11155111/transfer. Withdrawals: /v1/quote/evm/11155111/receive (quote) and /v1/relay/evm/11155111/withdrawal (relay).processor to the PrivacyPoolRelay contract for both transfers and withdrawals, because the deployed relayer posts both routes through relay(). See PrivacyPoolRelay. This is the V9 relay (deployed 2026-05-27) and it exposes relay() only: relayBatch, relayAndAnnounce, registerAndRelay, and MAX_BATCH() were added to the contract afterwards, so batch and stealth withdrawal are not available against this address until the relay is redeployed.No yield router or RelaySwaps processor is registered for Sepolia in the monorepo's ChainDeploymentRegistry; a relayer that supports them publishes their addresses in /v1/details (processors, yield[], contracts.relaySwaps).
These relayer/processor addresses are app-configured (current 0xbow website values shown) and are not part of the SDK deployment table. They can change when the pool changes.
Sepolia ETH + tokens
- Sepolia ETH faucet: any community faucet (Alchemy, QuickNode, Sepoliafaucet).
- Sepolia USDC: Circle faucet or DEX swap.
- Sepolia USDT: community faucets or DEX.