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

# Functions and events

> Public functions, important reads, and events for the current o1 Launchpad contracts.

This developer reference summarizes the public contract surface. Use the verified explorer ABI for exact transaction encoding.

## Launch factories

Base, Robinhood, BSC and X Layer each use one current launch factory for both crypto-paired and stock-paired creation. The current and historical addresses are linked from [Production contracts](/launchpad/reference/production-contracts), and the complete topology is available in [`launch-contract-suites.json`](/launchpad/reference/launch-contract-suites.json). Event consumers must retain historical factories and use the ABI matching each suite's `contractVersion`.

### Active production factories

| Surface                       | Important members                                                                                                                                                           |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Create                        | `createLaunch(LaunchParams)` creates and seeds a launch; `createLaunchAndBuy(LaunchParams, LaunchBuyParams)` also executes one protected buy through the configured adapter |
| Core configuration            | `configVersion`, `launchSupply`, `tickSpacing`, `bandTemplate`, `nativeLaunchFee`, `announcementRegistry`, and `launchBuyAdapter`                                           |
| Fee configuration             | `baseFeeBps`, `antiSnipeStartTotalBps`, `antiSnipeWindowSeconds`, `feeComponentCount`, indexed `feeComponents(index)`, and `platformFeeRecipient`                           |
| Quote state                   | `quoteConfig(quote)` and `quoteRevision(quote)`                                                                                                                             |
| Creation state                | `launchCreationEnabled`, `priceUpdater`, and `TOKEN_ADDRESS_SUFFIX`                                                                                                         |
| Transaction safety            | `isLaunchSaltUsed(scopedSalt)` plus the fresh `configVersion` supplied in `LaunchParams`                                                                                    |
| Quote management              | `registerQuote`, `setQuoteStartTick`, and `unregisterQuote`, plus their bounded batch forms with at most 64 entries                                                         |
| Creator-rights reads          | `creatorRights(token)` and `currentCreatorOf(token)`                                                                                                                        |
| Creator self-service          | `proposeCreatorRightsTransfer`, `acceptCreatorRightsTransfer`, `cancelCreatorRightsTransfer`, `safeTransferCreatorRights`, and `setCreatorFeeRecipient`                     |
| Creator-rights administration | `creatorAdmin`, `pendingCreatorAdmin`, `adminReassignCreatorRights`, `transferCreatorAdmin`, `acceptCreatorAdmin`, `cancelCreatorAdminTransfer`, and `revokeCreatorAdmin`   |
| Token metadata                | `updateTokenName`, `updateTokenSymbol`, `updateTokenContractURI`, and `updateTokenExtraMetadata` for launches that enabled editing                                          |

The current Base, Robinhood, Monad, Arc, BSC and X Layer factories do not expose the older `feeDefaults()` aggregate read. Read the named fee getters and enumerate `feeComponents(0..feeComponentCount-1)`. They also replace the older `quotes()` tuple with `quoteConfig()`, use one global `nativeLaunchFee()` for every quote, and use `bandTemplate()` instead of `bands()`.

The current fee component rows on all six chains are `CREATOR` at 50 bps, `PLATFORM` at 30 bps, and `REFERRER` at 20 bps. Their sum is the 100 bps base fee. Component bps are direct shares of the trade amount, not percentages that need to be applied to `baseFeeBps` again.

### Chain-specific token deployment

Base creates and validates native B20 tokens. Robinhood, Monad, Arc, BSC and X Layer call their dedicated `LaunchTokenDeployer` to create immutable ERC-20 tokens. Robinhood, Monad, Arc, BSC and X Layer integrations can read `launchTokenBytecodeHash(LaunchParams)` and `TOKEN_ADDRESS_SUFFIX` to prepare a deterministic token address ending in `01` before signing.

### Launch events

| Event                                                                                           | Meaning                                                                                                |
| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| `Launched`                                                                                      | Token, pool ID, creator, quote, supply, and liquidity spacing                                          |
| `NativeLaunchFeePaid`                                                                           | Creation-fee payer, configured recipient, and native amount                                            |
| `LaunchBuyExecuted`                                                                             | Token, pool, creator, funding token, input amount, output amount, and adapter for an atomic launch-buy |
| `QuoteRegistered` / `QuoteUnregistered`                                                         | Supported quote changes                                                                                |
| `QuoteStartTickUpdated`                                                                         | Revision-aware future opening-frame update                                                             |
| `BandTemplateUpdated`                                                                           | Future liquidity-range change                                                                          |
| `FeeConfigurationUpdated` / `FeeComponentConfigured`                                            | Future base fee, anti-snipe, and component configuration                                               |
| `LaunchSupplyUpdated` / `TickSpacingUpdated`                                                    | Future supply or range-alignment change                                                                |
| `NativeLaunchFeeUpdated` / `LaunchBuyAdapterUpdated`                                            | Future global launch-fee or atomic adapter change                                                      |
| `ConfigVersionUpdated` / `AnnouncementRegistrySet`                                              | Future launch configuration version or announcement-registry change                                    |
| `CreatorRightsTransferProposed` / `CreatorRightsTransferCancelled` / `CreatorRightsTransferred` | Two-step creator-rights transfer history                                                               |
| `CreatorRightsReassigned` / creator-admin transfer events                                       | Administrative creator-rights reassignment or creator-admin authority changes                          |
| `CreatorFeeRecipientUpdated`                                                                    | Future creator-fee routing                                                                             |
| `OwnershipTransferStarted` / `OwnershipTransferred`                                             | Governance ownership change                                                                            |

All current minimal factories additionally emit `PriceUpdaterUpdated` and `LaunchCreationEnabledUpdated`. Historical factories retain their original event names; use the ABI for the exact contract that produced the event.

## LaunchHook

The hook exposes `poolConfig(poolId)` and `poolFeeComponents(poolId)` for each launch pool. These reads return the pool's frozen fee and anti-snipe configuration plus its current creator and creator fee recipient. The factory registers and seeds a pool; ordinary trading then occurs through Uniswap v4.

| Event                  | Meaning                                                                                                                  |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| `PoolRegistered`       | The pool's immutable original creator, initial creator fee recipient, and base fee                                       |
| `CreatorRightsUpdated` | Current creator and creator fee-recipient changes                                                                        |
| `FeeComponentCredited` | Per-component fee credit, recipient, currency, and amount                                                                |
| `Seeded`               | Token amount placed into the permanent position                                                                          |
| `Trade`                | Executor, referrer, fee currency, fee amount, and optional comment; swap direction comes from the matching Uniswap event |

`Trade.executor` is the router or callback sender and is not guaranteed to be the trader's wallet. Indexers should derive direction and trader attribution from the complete transaction receipt, including the matching Uniswap swap and router execution context.

## FeeEscrow

| Function                         | Who can call  | Result                                                                      |
| -------------------------------- | ------------- | --------------------------------------------------------------------------- |
| `owed(recipient, currency)`      | Anyone        | Returns the raw claimable fee balance                                       |
| `claimFor(recipient, currency)`  | Anyone        | Pays the full balance to the recorded recipient on the current fee contract |
| `claimTo(currency, destination)` | Balance owner | Pays the caller's balance to a chosen address                               |

Events: `Credited` and `Claimed`.

Earlier launch contracts use their original claim function names. Resolve the fee contract recorded for the launch before encoding a claim.

## AnnouncementRegistry

| Function                                        | Who can call             | Result                                                    |
| ----------------------------------------------- | ------------------------ | --------------------------------------------------------- |
| `isTokenRegistered(token)`                      | Anyone                   | Checks whether the active registry knows the launch token |
| `isAnnouncementIdUsed(token, id)`               | Anyone                   | Checks whether an announcement ID was used                |
| `postAnnouncement(token, id, description, uri)` | Current recorded creator | Publishes a unique announcement                           |

Events: `TokenRegistered` and `AnnouncementPosted`.

Earlier launch contracts retain their original `creatorOf`, `usedId`, `post`, `CreatorRegistered`, and `Announcement` surface.

<span id="robinhood-launch-tokens" />

<span id="robinhood-and-monad-launch-tokens" />

<span id="robinhood-monad-arc-and-bsc-launch-tokens" />

## Robinhood, Monad, Arc, BSC and X Layer launch tokens

Robinhood, Monad, Arc, BSC and X Layer tokens expose standard ERC-20 reads and transfers. When profile editing was enabled at launch, the metadata authority can call `updateName`, `updateSymbol`, `updateContractURI`, and `updateExtraMetadata`. No mint, burn, pause, owner, upgrade, or recovery function exists.

Current Robinhood/BSC crypto-paired and stock-paired tokens and Monad/Arc/X Layer crypto-paired tokens use the same `LaunchToken` implementation, are created through their chain-specific current factory, and must end in `01`.

## Staking contract

One staking contract serves every vault on its chain. The vault creator and complete immutable configuration determine the `vaultId`.

| Function                                        | Who can call   | Result                                                                                                       |
| ----------------------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------ |
| `createVault(params, expectedFeeConfigVersion)` | Anyone         | Creates and completely funds an immutable vault plus its one-time protocol fee                               |
| `deposit(vaultId, amount)`                      | Token holder   | Transfers staking tokens into a new deposit lot                                                              |
| `withdraw(vaultId, lotId, amount, to)`          | Lot owner      | Withdraws one lot amount under the vault's early-exit and forfeiture rules                                   |
| `withdrawLots(vaultId, lotIds, amounts, to)`    | Lot owner      | Atomically withdraws ordered amounts from several lots                                                       |
| `claim(vaultId, epochs, to)`                    | Participant    | Claims the caller's rewards from ordered completed epochs                                                    |
| `previewWithdraw` / `previewClaim`              | Anyone         | Previews one withdrawal or an ordered claim batch                                                            |
| `deriveVaultId`                                 | Anyone         | Derives the vault ID from its creator and complete configuration                                             |
| `getVault`                                      | Anyone         | Returns immutable configuration, creator, end time, total staked, reward remaining, and deposit-opening time |
| `getUserState` / `getLot` / `getUserLots`       | Anyone         | Returns aggregate principal and paginated deposit-lot state                                                  |
| `isClaimed` / `epochBounds`                     | Anyone         | Returns claim status and epoch timing                                                                        |
| `feeConfig`                                     | Anyone         | Returns the current creation-fee rate, recipient, and change counter                                         |
| `setFeeConfig`                                  | Contract owner | Updates only the fee used by future vault creation                                                           |

| Event                | Meaning                                                                                        |
| -------------------- | ---------------------------------------------------------------------------------------------- |
| `VaultCreated`       | Vault ID, creator, assets, schedule, reward budget, exit policy, and fee snapshot              |
| `Deposited`          | Participant, deposit lot, amount, deposit time, and unlock time                                |
| `Withdrawn`          | Lot amount, recipient, remaining principal, penalty result, and current-epoch forfeited weight |
| `EpochRewardClaimed` | Participant reward paid for one completed epoch                                                |
| `FeeConfigUpdated`   | New fee rate, recipient, and change counter for later vault creation                           |

Use the verified explorer ABI for exact types and encoding. See the [staking guide](/launchpad/staking/overview) for the reward, withdrawal, and claim rules.

## Common launch errors

| Error                                                       | Meaning                                                                  |
| ----------------------------------------------------------- | ------------------------------------------------------------------------ |
| `StaleConfig`                                               | Refresh the current factory settings and rebuild the transaction         |
| `LaunchExpired`                                             | Use a fresh deadline                                                     |
| `QuoteNotRegistered`                                        | The selected quote is unavailable                                        |
| `LaunchCreationDisabled`                                    | New launches through the selected factory are currently switched off     |
| `StaleQuoteRevision`                                        | A paired-asset opening-price update used an outdated quote revision      |
| `InvalidTokenAddressSuffix`                                 | The prepared token address does not meet that factory's `01` suffix rule |
| `LaunchSaltUsed`                                            | Use a new launch identifier                                              |
| `InvalidNativeLaunchFeePayment` / `InvalidLaunchBuyPayment` | The native creation fee or combined launch-buy payment was not exact     |
| `OutOfBounds` / `InvalidConfig`                             | A hard limit or related-field rule failed                                |
| `NotImmutable`                                              | The created token failed its fixed-authority checks                      |
| `NotSingleSided`                                            | Opening liquidity would require the paired asset                         |
| `LiquidityLocked`                                           | The requested liquidity change is not allowed                            |
| `ExactOutputDisabledDuringAntiSnipe`                        | Use an input-amount trade or wait until the normal fee begins            |
| `PartialFillUnsupported`                                    | The requested quote-specified amount could not be filled completely      |
