# Chains, addresses and amounts

> How Arc's native USDC, the zero address and decimals work across the API, and what differs on Robinhood Chain.

Source: https://getchord.xyz/docs/concepts/chains-and-amounts/

## Arc (chain 5042)

Arc is Circle's stablecoin-native chain: **the gas token is USDC**. It has two faces, and the API takes one of them.

| Face | Address | Decimals | Where you see it |
| --- | --- | --- | --- |
| Native USDC | — (balance via `eth_getBalance`) | 18 | wallet balances, `value` on transactions, Uniswap V4 `currency0 = address(0)` pools |
| USDC predeploy | `0x3600000000000000000000000000000000000000` | 6 | the ERC-20 interface of the same balance; every V2 / V3 pool; the API |

They are one balance: `balanceOf(predeploy) == nativeBalance / 1e12`. There is no wrapped-native contract and nothing to wrap. The API therefore treats the zero address as an **alias for the predeploy** on Arc: send either, get the same route, and the transaction always has `value: "0"` because the router pulls the predeploy by `transferFrom`. Approve the router on the predeploy like any ERC-20.

Other anchors: EURC `0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1` (6 decimals, tagged `fx`) and VIRTUAL `0x8c4252c87081c88c6ad57d6dd97e1cafebf842b7` (the quote asset of the Virtuals launcher pools, priced from its own USDC prints). Protocol fee on USDC and EURC is 0 bps.

## Robinhood Chain (chain 4663)

An ordinary EVM chain: native ETH is the zero address, WETH `0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73` wraps it, and the stable anchor is USDG `0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168` (6 decimals). Tokenized stocks are 18-decimal tokens tagged `stock` (NVDA `0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC`, AAPL `0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9`, …). WETH, USDG and every stock are 0 bps.

## Monad, Avalanche, Base, BNB Chain, Arbitrum and Ethereum (143, 43114, 8453, 56, 42161, 1)

Ordinary EVM chains: the zero address is the native coin (MON, AVAX, ETH or BNB), sent as `value`; WMON, WAVAX, WETH and WBNB wrap it, and the router wraps and unwraps for you. The dollar anchors are USDC (and USDT where the chain has it), 6 decimals on Monad, Avalanche, Base, Arbitrum and Ethereum, **18 decimals on BNB Chain**. Ethereum's USDT refuses a new approval while an old one is left: approve 0 first (`approval.resetFirst` on `/v1/meta`). Anchors and contracts per chain: [Networks](/docs/networks/).

## Amounts

Every amount the API takes or returns for a token is a **decimal string in the token's smallest unit**. Never a float, never scientific notation.

```
5 USDC on Arc        → "5000000"            (6 decimals)
0.01 ETH on 4663     → "10000000000000000"  (18 decimals)
0.005 cirBTC         → "500000"             (8 decimals)
```

Read decimals from the token list or the token row. Chord never defaults to 18, and neither should you.

```ts
const { tokens } = await fetch("https://api.getchord.xyz/v1/tokens?chain=5042").then((r) => r.json());
const usdc = tokens.find((t) => t.symbol === "USDC");
const amount = (5n * 10n ** BigInt(usdc.decimals)).toString(); // "5000000"
```

USD figures in read endpoints (`volume24h`, `priceUsd`, `usd`) are plain numbers.

## Addresses

Hex, case-insensitive on input; the API returns Arc addresses lower-cased and Robinhood Chain list addresses checksummed. Compare lower-cased. Pool identities are 20-byte addresses for V2 / V3 pools and **32-byte pool ids** for Uniswap V4 — any `pool` parameter accepts both, and any `pool` field may hold either. Treat a pool as an opaque string; only an explorer link needs to know which it is.

## The `chain` parameter

| Endpoint family | `chain` |
| --- | --- |
| `/quote`, `/swap`, `/swap/calldata`, `/swap/simulate` | `5042`, `4663`, `143`, `43114`, `8453`, `56`, `42161` or `1`. The default is `143`: always pass it. |
| `/tokens` | `5042` or `4663`; omitted, the Monad list. |
| `/tokens/market` | `4663` or `5042`. Omitted, it answers for Monad. |
| `/tokens/board` | `143`. |
| `/tokens/search` | `4663`, `5042`, `43114`, `8453`, `56`, `42161` or `1`. Omitted (or `143`), it is Monad off-list discovery. Arc also has `/arc/tokens/search` with full board rows. |
| `/candles` | `5042`, `4663`, `143`, `43114`, `8453`, `56`, `42161` or `1`. The default is `143`: always pass it. |
| `/chains/{chain}/*` | in the path: `avalanche` or `43114`, `base` or `8453`, `bnb` or `56`, `arbitrum` or `42161`, `ethereum` or `1` (and `solana`). |
| `/tokens/chart`, `/tokens/trades`, `/tokens/stats`, `/logo` | none (address-keyed) — `/logo` takes the chain in the path. |
| `/smart-money/top`, `/portfolio/*`, `/lp/*` | `5042`, `4663` or `143`. |
| `/arc/*` | none; always 5042. |
| `/rh/*` | none; always 4663. |
| `/points/*`, `/ask/*` | none; always 5042. |
