> ## Documentation Index
> Fetch the complete documentation index at: https://docs.filter.fun/llms.txt
> Use this file to discover all available pages before exploring further.

# Launch a token

> 12 slots, FCFS, dynamic cost, one launch per wallet per week

## launch-a-token — structured facts

| Field                                         | Value                                                                            |
| --------------------------------------------- | -------------------------------------------------------------------------------- |
| launch\_window\_hours                         | 48                                                                               |
| launch\_window\_open\_utc                     | Mon 00:00 (anchored weekly)                                                      |
| max\_tokens\_per\_season                      | 12                                                                               |
| min\_tokens\_to\_activate                     | 4                                                                                |
| max\_launches\_per\_wallet\_per\_week         | 1                                                                                |
| ticker\_unique\_per\_season                   | true                                                                             |
| metadata\_required\_fields                    | name, ticker, description, image                                                 |
| metadata\_optional\_fields                    | website, x, farcaster                                                            |
| metadata\_storage                             | IPFS (URI stored on-chain as opaque string)                                      |
| canonical\_pitch\_required\_in\_form          | "I understand most tokens get filtered ▼"                                        |
| trading\_starts\_at                           | activation (4th reservation lands) for slots 1–4; tx confirmation for slots 5–12 |
| season\_aborts\_below\_min\_at\_window\_close | true                                                                             |
| abort\_refund\_mode                           | automatic; full launchCost + refundableStake                                     |

### Cost formula

```text theme={null}
BASE_LAUNCH_COST = 0.01 ETH
launchCost = BASE_LAUNCH_COST × (1 + (slotIndex / 12)²)
```

| slotIndex | multiplier\_vs\_base | example\_eth |
| --------: | -------------------: | -----------: |
|         0 |                 1.00 |       0.0100 |
|         5 |                 1.17 |       0.0117 |
|        11 |                 1.84 |       0.0184 |

### Refundable stake

| Field               | Value                                               |
| ------------------- | --------------------------------------------------- |
| stake\_amount       | equal to launchCost                                 |
| stake\_mode\_toggle | `FilterLauncher.refundableStakeEnabled()`           |
| outcome\_top\_6     | refunded to creator                                 |
| outcome\_filtered   | forfeited to `forfeitRecipient` (default: treasury) |

### Contract entrypoint

| Function    | Signature                                                                            |
| ----------- | ------------------------------------------------------------------------------------ |
| Launch      | `FilterLauncher.launchToken(string name, string symbol, string metadataURI) payable` |
| `msg.value` | `launchCost + refundableStake`                                                       |

### Errors

| Error                 | Cause                                               |
| --------------------- | --------------------------------------------------- |
| `LaunchCapReached`    | wallet already launched this season                 |
| `InsufficientPayment` | `msg.value` below `launchCost + refundableStake`    |
| `DuplicateSymbol`     | ticker already used this season                     |
| `WindowClosed`        | launch window expired or season not in launch phase |

### Mutable post-launch (admin-gated)

| Field                 | Setter                                              |
| --------------------- | --------------------------------------------------- |
| `metadataURI`         | `CreatorRegistry.setMetadataURI(token, uri)`        |
| creator-fee recipient | `CreatorRegistry.setCreatorRecipient(token, addr)`  |
| admin (two-step)      | `nominateAdmin(token, addr)` → `acceptAdmin(token)` |

### Immutable post-launch

`name`, `symbol`, total supply, V4 pool key, fee tier, and the
creator-of-record (per `CreatorRegistry.creatorOf`). Bag-lock keys off
the creator-of-record, never off the admin.
