# Addresses

Everything below is **Arc testnet**, chain `5042002`. 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.

## Per-launch contracts have no fixed address

Two of the contracts in the reference are deployed **once per launch** by the factory:

- `FociV2BondingCurve`
- `FociV2LauncherToken`

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-testnet**, chain `5042002`. Explorer: https://testnet.arcscan.app
Indexing starts at block `61068004`.

| Contract | Address | Kind |
|---|---|---|
| FociV2LaunchFactory | `0xa93f9CeFD92A77e1EAffa3246B6F4DB91a5c5659` | singleton |
| FociV2LaunchAndBuy | `0xE4A165a52A6033ee0C1b3B6dA83f72AbA1707349` | singleton |
| FociV2MemeHook | `0x527129aB10Fa3163629A32c4E3Ab7a98ba28e044` | singleton |
| FociV2FeeEscrow | `0xcecCFebAcaDCd9404Ae70b160305Af07D9760A46` | singleton |
| FociV2ReferralRegistry | `0xEB286974C35d2741B0fe9b2a1Cd41E53d06aE406` | singleton |
| FociV2LaunchLocker | `0xe047D0F0ce0dD600732793762B1f1929Adc5015d` | singleton |
| FociV2LaunchDeployer | `0x5C5c202271E1300bD5Ce43A4F5C1cEA8efd57B63` | singleton |
| FociV2GraduationExecutor | `0x02e7d818080bf85EEB7191536A768B0CFdB38D5D` | singleton |
| FociV2BondingCurve | — | per launch, read from the launch record |
| FociV2LauncherToken | — | per launch, read from the launch record |

## External contracts

| Key | Address | Purpose |
|---|---|---|
| poolManager | `0xa4aD72b5C7F72528Ce0baE359A13BD5A93a4574F` | Uniswap V4 PoolManager |
| positionManager | `0x0f42e91f2cd13E6f03CC7650e72ceBed6031A125` | Uniswap V4 PositionManager |
| universalRouter | `0x52EF879333a56E94d62113cC7a9440d0550f8d32` | Uniswap UniversalRouter — pool swaps |
| v4Quoter | `0x719A77E47B14F262143399Cbdc49D1510087A148` | Uniswap V4 Quoter — pool-phase estimates |
| stateView | `0x270CE77c308C181018F1168903739F400bF9B4FA` | Uniswap V4 StateView — pool state reads |
| permit2 | `0x000000000022D473030F116dDEE9F6B43aC78BA3` | Permit2 — required for UniversalRouter |
| usdc | `0x3600000000000000000000000000000000000000` | Quote asset (6 decimals) |
