# Addresses

Everything below is **Arc mainnet**, chain `5042`. The live table on this page is read
from the API at request time, so it reflects what is actually deployed rather than what was
true when this page was written.

Arc testnet (chain `5042002`) still carries an older deployment. None of its addresses are
listed here, and they are not interchangeable with the mainnet ones.

## Per-launch contracts have no fixed address

Three of the contracts in the reference are deployed **once per launch**:

- `FociBondingCurve` — by the factory
- `FociLauncherToken` — by the factory
- `FociRewardsDistributor` — by the rewards factory, only for launches that chose
  **Fees go to: Holders**; read it with `rewardsFactory.distributorOf(token)` (zero otherwise)

There is no address to configure. Read them from the launch record:

```ts
const launch = await client.readContract({
  address: FACTORY, abi: factoryAbi, functionName: "getLaunchedToken", args: [token],
});
launch.curve;   // the bonding curve for this launch
launch.exists;  // false for an unknown token — check this first
```

`getLaunchedToken` returns a **zeroed struct** rather than reverting for an address it does
not know, so an unchecked read makes an unknown token look like a live curve at phase 0.

## Indexing

`FACTORY_START_BLOCK` is the block of the deploy broadcast — there is nothing to index
before it.

Note that the public Arc RPC and a dedicated provider disagree on `eth_getLogs` limits: the
public node allows a 25,000-block span, QuickNode caps it at 10,000. Pin your range to your
provider, and re-measure it if you switch — a range above the cap fails every request rather
than degrading.

## Deployed contracts

Network **arc-mainnet**, chain `5042`. Explorer: https://explorer.arc.io
Indexing starts at block `20883999`.

| Contract | Address | Kind |
|---|---|---|
| FociLaunchFactory | `0xa392D6eca5242715517eeCd43406aeD19424FAC0` | singleton |
| FociLaunchAndBuy | `0x5C5c202271E1300bD5Ce43A4F5C1cEA8efd57B63` | singleton |
| FociMemeHook | `0xF847790B6fA5DA300BB3f56f10d743e71E98e044` | singleton |
| FociFeeEscrow | `0x5a76a44B49ca0f7c4dB181f289C1eCA91d928406` | singleton |
| FociReferralRegistry | `0xe047D0F0ce0dD600732793762B1f1929Adc5015d` | singleton |
| FociLaunchLocker | `0x539fD9e6a6316B65bEd9dDb9A570959e0bc8C31A` | singleton |
| FociLaunchDeployer | `0xa93f9CeFD92A77e1EAffa3246B6F4DB91a5c5659` | singleton |
| FociGraduationExecutor | `0xEB286974C35d2741B0fe9b2a1Cd41E53d06aE406` | singleton |
| FociRewardsDistributorFactory | `0xdac447110867954F00638125bbd5c66D8E0a7195` | singleton |
| FociBondingCurve | — | per launch, read from the launch record |
| FociLauncherToken | — | per launch, read from the launch record |
| FociRewardsDistributor | — | per launch, read from the launch record |

## External contracts

| Key | Address | Purpose |
|---|---|---|
| poolManager | `0x8366a39CC670B4001A1121B8F6A443A643e40951` | Uniswap V4 PoolManager |
| positionManager | `0x6049c9a0e26405c0985f9e3685c87d0ae917f82b` | Uniswap V4 PositionManager |
| universalRouter | `0x4fcA4a51Ab4F23A7447b3284fBd7D73289A89Fb1` | Uniswap UniversalRouter — pool swaps |
| v4Quoter | `0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94` | Uniswap V4 Quoter — pool-phase estimates |
| stateView | `0xF3334192D15450CdD385c8B70e03f9A6bD9E673b` | Uniswap V4 StateView — pool state reads |
| permit2 | `0x000000000022D473030F116dDEE9F6B43aC78BA3` | Permit2 — required for UniversalRouter |
| usdc | `0x3600000000000000000000000000000000000000` | Quote asset (6 decimals) |
