# ABI

Every ABI below is emitted straight from the compiler by
`foci/backend/ops/scripts/emit-ui-docs.ts`, so it matches the deployed bytecode on
**arc-mainnet** (chain `5042`). Each file is the bare ABI array — exactly what
viem, ethers, wagmi and `cast` expect.

## Everything at once

**[foci.json](/abi/foci.json)** — every contract with its address, the chain id, the factory's
start block and the third-party addresses (Uniswap, Permit2, USDC) you need alongside them. One
download is enough to build a client.

```bash
curl -O https://foci.family/abi/foci.json
```

```ts
import foci from "./foci.json";

const factory = foci.contracts.find((c) => c.name === "FociLaunchFactory")!;
await client.readContract({
  address: factory.address as `0x${string}`,
  abi: factory.abi,
  functionName: "launchFee",
});
```

## Individual contracts

| File | Surface | Address |
| --- | --- | --- |
| [`FociLaunchFactory.json`](/abi/FociLaunchFactory.json) | 54 fn · 22 ev · 49 err | `0xa392D6eca5242715517eeCd43406aeD19424FAC0` |
| [`FociBondingCurve.json`](/abi/FociBondingCurve.json) | 39 fn · 11 ev · 20 err | per launch — no fixed address |
| [`FociLauncherToken.json`](/abi/FociLauncherToken.json) | 18 fn · 2 ev · 7 err | per launch — no fixed address |
| [`FociLaunchAndBuy.json`](/abi/FociLaunchAndBuy.json) | 8 fn · 4 ev · 9 err | `0x5C5c202271E1300bD5Ce43A4F5C1cEA8efd57B63` |
| [`FociMemeHook.json`](/abi/FociMemeHook.json) | 47 fn · 19 ev · 22 err | `0xF847790B6fA5DA300BB3f56f10d743e71E98e044` |
| [`FociFeeEscrow.json`](/abi/FociFeeEscrow.json) | 8 fn · 4 ev · 6 err | `0x5a76a44B49ca0f7c4dB181f289C1eCA91d928406` |
| [`FociReferralRegistry.json`](/abi/FociReferralRegistry.json) | 5 fn · 1 ev · 5 err | `0xe047D0F0ce0dD600732793762B1f1929Adc5015d` |
| [`FociLaunchLocker.json`](/abi/FociLaunchLocker.json) | 14 fn · 5 ev · 10 err | `0x539fD9e6a6316B65bEd9dDb9A570959e0bc8C31A` |
| [`FociLaunchDeployer.json`](/abi/FociLaunchDeployer.json) | 4 fn · 0 ev · 6 err | `0xa93f9CeFD92A77e1EAffa3246B6F4DB91a5c5659` |
| [`FociGraduationExecutor.json`](/abi/FociGraduationExecutor.json) | 5 fn · 2 ev · 6 err | `0xEB286974C35d2741B0fe9b2a1Cd41E53d06aE406` |
| [`FociRewardsDistributorFactory.json`](/abi/FociRewardsDistributorFactory.json) | 8 fn · 1 ev · 8 err | `0xdac447110867954F00638125bbd5c66D8E0a7195` |
| [`FociRewardsDistributor.json`](/abi/FociRewardsDistributor.json) | 22 fn · 7 ev · 18 err | per launch — no fixed address |

> [!NOTE]
> `FociBondingCurve` and `FociLauncherToken` are deployed **once per launch**, so they
> have no fixed address. Read the pair from the factory with `getLaunchedToken(token)` — see
> [Addresses](/documentation/addresses).

## Using one file

```bash
curl -O https://foci.family/abi/FociLaunchFactory.json
```

```ts
import factoryAbi from "./FociLaunchFactory.json";
```

The JSON is the array itself, not an object wrapping one, so it drops straight into
`abi:` with no unwrapping.
