> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cryptocheckout.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Deployments

> Where contracts actually live. Testnet only — mainnet is empty by design.

`contracts/deployments.json` is the single source of truth and is read at runtime by the shared contracts module and by the `/verify` page.

<Warning>
  Never hardcode a chain list for verify-side rendering. `/verify` derives its chains from this file. `api/attestations.ts` also has a `VALID_CHAIN_IDS` list that must include any chain deployed to.
</Warning>

## Mainnet

```json theme={null}
"mainnet": {}
```

Empty by design. No contract is deployed to any mainnet. Each chain requires explicit human GO, gated on audit, bug bounty, MiCA counsel, and founder sign-off.

The seven launch mainnets when that gate clears: Ethereum (1), Base (8453), Arbitrum (42161), Optimism (10), Polygon (137), BNB Chain (56), Avalanche (43114).

## EVM testnets

`MerchantRegistry` is at the same address on every chain — `0x42eB264955fC0eE4A9Bd74AEf98DA9b01a142f21` — which is the CREATE2 property working as intended.

| Chain            | Chain ID | RouterFee                                    |
| ---------------- | -------- | -------------------------------------------- |
| Base Sepolia     | 84532    | `0x5a33988f19b4476c53634ffb08017d175f994e28` |
| Ethereum Sepolia | 11155111 | `0x87e5ADA3DA0fD9FE574158DD57Ad5C19E569d6ec` |
| Arbitrum Sepolia | 421614   | `0xa0d9e6576C211585D21260d42312C5c2cD96beB7` |
| Optimism Sepolia | 11155420 | registry only                                |
| Polygon Amoy     | 80002    | registry only                                |
| Avalanche Fuji   | 43113    | registry only                                |
| BNB testnet      | 97       | registry only                                |

<Info>
  "Registry only" means `RouterFee` was not deployed because it needs Uniswap infrastructure absent from that testnet. It is a **Phase-2 opt-in swap path**, so its absence does not affect the pool rails — those need only the registry and the canonical CREATE2 factory, both of which are present.
</Info>

## TRON Nile

| Item             | Value                                |
| ---------------- | ------------------------------------ |
| Chain ID         | 3448148188                           |
| MerchantRegistry | `TPbogVQgwcmb9rVm3LjZsT9whdjJnGVu8A` |
| RouterFeeTron    | `TEHCQWmhkyhsX1ytxY8izs11k8RgAZZcgF` |
| Pool factory     | `TGRSwCV6jJSTCrUCvx9dik8gXmymZZs2gL` |
| USDT             | `TXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf` |
| Treasury         | `TCJcRGCGhZbmGufKpf38W94s67jQ5xJWHj` |
| Explorer         | `https://nile.tronscan.org`          |

<Check>
  **Pool gate verified.** `0x41` CREATE2 predicted equals deployed, proven on Nile for `MerchantPoolTron` and `InvoiceForwarderTron`, with a full pay → sweep → distribute → claim cycle netting 99% through `Create2FactoryTron`. Verified 2026-06-19.
</Check>

That proof is bound to the **current init code**. Any bytecode change requires re-running it before an address is shown as a QR.

## End-to-end verification

The v3 pool rail was proven on all six EVM testnets via a Foundry script running the full flow live per chain: deploy pool and forwarder via CREATE2, customer pays 1 USDC, forwarder sweeps 100% into the pool, permissionless distribute, pull claim.

Each chain was RPC-verified. The merchant netted **985,050 base units of 1,000,000** — 98.505%, with the distributor reward carved from the merchant share exactly as the contract specifies.

## Working with the file

<Danger>
  `forge test` **rewrites** `contracts/deployments.json` because `Deploy.t.sol` writes fixtures into it. Always run `git checkout -- contracts/deployments.json` afterwards. CI fails if it is dirty. A polluted copy breaks the shared contracts module and `/verify` at runtime.
</Danger>

The per-chain directory under `contracts/deployments/` is gitignored; the merged top-level file is not. Reset before every broadcast.

## Verification and explorers

The same Etherscan v2 multichain API key works for Etherscan, Basescan, Polygonscan, Arbiscan, and the rest.

`/verify` renders the deployed contracts so a customer or operator can independently confirm what they are paying into. It should render the pool and forwarder CREATE2 model alongside the atomic-rail deployments.

<Warning>
  `VITE_CONTRACTS_REPO_URL` is unset, so source links are disabled. The previously marketed repository URL returned 404 and the audit PDF was being served as the SPA fallback HTML. Both dead trust links were removed.
</Warning>
