# BNB Chain

> BNB Chain (chainId 56) 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 119401440; the ASP indexes the pool from block 119614738). The core addresses are identical to [Ethereum mainnet](/deployments/mainnet) and [Citrea](/deployments/citrea), because the three were deployed deterministically.

BNB Chain (chainId 56) 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 119401440; the ASP indexes the pool from block 119614738). The core addresses are identical to [Ethereum mainnet](/deployments/mainnet) and [Citrea](/deployments/citrea), because the three were deployed deterministically.

## 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 0xd0395c08DD8eA7671a7A65bDca8E473e8E8260a8 (owner 0x0967755AfA2016866D12EefB820705026842dCe8). `approvedZapList()` holds the ppUSDT zap below.

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, processor, and yield addresses from the production relayer's `/v1/details`, which lists this chain as `bsc`.

The public BNB Chain RPC (`bsc-dataseed.binance.org`) serves calls but not `eth_getLogs` at any range, so note discovery on this chain needs an archive-capable provider; the 0xbow frontend treats an Alchemy key as effectively required here.

## 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. Stablecoins on BNB Chain have 18 decimals.

Native BNB (placeholder) 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee. Enabled; `minAmount` 0.02 BNB; `maxRelayFee` 2 BNB.
ppUSDT (yield share) 0x6C17bE9c864254CA4b2d36223f31AdE94B4d64c2. Enabled; `minAmount` 10 shares; `maxRelayFee` 1200 shares.
FDUSD 0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409. Enabled on the Entrypoint (`minAmount` 10 FDUSD; `maxRelayFee` 1200 FDUSD) but **not listed by the production relayer**, so it can be deposited and self-relayed today but not quoted or relayed through the relayer.
USDT 0x55d398326f99059fF775485246999027B3197955. **Not enabled** as a plain pool asset; it enters the pool as ppUSDT through [PPRouter](/protocol/contracts/pp-router). The relayer lists it as a swap input and output.

## Yield deployments

ppUSDT share 0x6C17bE9c864254CA4b2d36223f31AdE94B4d64c2 over Aave v3 aBnbUSDT 0xa9251ca9DE909CB71783723713B21E4233fbf1B1 · router 0x9929Ad2Edc2E0B5D59C3f5b2910812D0c8b84E16 (ERC-20 mode) · zap 0xc0FBB5D5936a6f089C1B30Ff0Fd0BEAd27b9F766 · underlying USDT, 18 decimals · `feeBps` 2000

The router is the relayer's only `allowed_processors` entry on this chain.

## ASP

ASP base URL https://api-v2.0xbow.io
ASP public key (X25519) 0x3f651e2321b9b78c3690064b025b610942cbf755e28d44726378cf853cfd8f34, served at `/public-key` (the same production key as mainnet and Citrea).
Attestation state An association-set root is published (`latestASPRoot()` and `latestIPFSCID()` both answer), so attested notes are spendable.

## Relayer configuration

Base URL https://relayer-v2-prod-149184580131.us-east1.run.app
Relayer signer EOA 0x9e2f1B234953F46c6091636290E9035618EA3C07
Processor for transfers and withdrawals PrivacyPoolRelay 0x01a8Fa4dbb60187aD8d3c3d08E7Fb8C14198A461
Processor for swaps and reshields RelaySwaps 0xd0395c08DD8eA7671a7A65bDca8E473e8E8260a8 (`swapsSupported: true`)
Processor for yield withdrawals PPRouter 0x9929Ad2Edc2E0B5D59C3f5b2910812D0c8b84E16
Fee shape The relayer publishes a fixed component of 21000 plus 10 bps on BNB and USDT, and the fixed component alone on ppUSDT.

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 119401440 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`.
