# Discover tokens

Use the factory's identity and birth events to establish a token's origin. A symbol, image, API search hit or pool containing that symbol is insufficient.

## Standard factory event

```solidity
event CurveLaunch(
    address indexed token,
    address indexed curve,
    address indexed processor,
    address pair,
    address quote
);
```

Scan logs only from reviewed factory addresses, starting at their configured `start_block`. Use bounded block ranges, persist a cursor and backfill missed ranges. Retain block hashes and handle chain reorganizations; subscriptions alone are not durable discovery.

At a consistent block, confirm:

1. The factory's `born(token)` is true and the token's `factory()` matches.
2. The token's `pad()` is the discovered curve.
3. The curve's `token()` and `factory()` link back to the token and factory.
4. The curve's `quote()` matches the token's `payoutAsset()` and the reviewed quote asset.
5. The token's `pool()` matches the curve's `pair()`.
6. The selected Pair Router admits the factory, and the deployed code matches the reviewed implementation or runtime identity.

For a strategy companion deployment, also verify its companion, ledger, collateral, market and profile bindings. Those deployments are outside the standard spot example.

## API-assisted discovery

`/api/config` supplies deployment rows; `/api/token/<address>` gives indexed token context; `/api/born` gives a bounded recent-launch view. None is a complete historical event archive. Token metadata remains untrusted display content and must not choose a spender, RPC host or transaction recipient.

Do not assume a row index is a persistent identifier, or that a disabled launch admission makes historical tokens invalid.
