# Signal v4 pools

Signal v4 is the launch every new token on Signal uses today. One transaction creates the token, opens its pool on the canonical **Uniswap v4 PoolManager** on **HyperEVM (chain 999)**, places the whole supply in that pool and makes the launcher's optional first buy. Every swap in the pool runs through **Signal's hook**, which holds the launch's rules.

This section is for trading terminals, wallets, aggregators and indexers. It describes release **4.2**, the factory open for new launches as observed on **12 October 2026**, and the two earlier releases whose pools still trade. It does not imply a completed partnership or integration with any named product.

## What is the same on every Signal v4 pool

| Property | Value |
| --- | --- |
| Pool | A Uniswap v4 pool. The pool has an id (`bytes32`), not an address |
| Pool key | `currency0` and `currency1` are the launched token and its pair asset in address order, `fee = 0`, `tickSpacing = 200`, `hooks` = the release's hook |
| Pair asset | An ERC-20 the factory admits. A HYPE pair uses WHYPE `0x5555555555555555555555555555555555555555` |
| Token | 1,000,000,000 supply, 18 decimals, minted once. No owner, no mint, no pause, no transfer tax |
| Liquidity | The whole supply is placed at launch, one-sided, in bands above the start price. No outside party can add, remove or donate liquidity afterwards. The hook itself adds fee-funded bids, and nothing removes any |
| Fee | The pool's own LP fee is 0. The hook charges the fee in the **pair asset** on every swap |
| Terms | Read from the hook: `terms(poolId)`. Rates and rules are fixed at launch |

## How the hook charges a swap

- **A buy** (pair asset in, token out) pays its fee from the input, before the pool trades the rest.
- **A sale** (token in, pair asset out) pays its fee from the output, after the pool has traded.
- The fee stays in the PoolManager as the hook's claim. Anyone can call `flush(poolId)` to divide what has collected among the recipients the launch named.
- Wallet-to-wallet transfers of the token are never charged.

The rate a swap pays is not one number. It is the pool fee, plus that side's tax, plus an opening fee while the launch's opening window runs, plus a size extra and a deviation extra where the launch switched them on. See [fees and rules](v4-fees.md).

## Eight things an integration must respect

1. **Exact input only.** The hook refuses exact-output swaps (`ExactOutputUnsupported`).
2. **A buy fills whole or reverts.** A buy stopped early by a price limit or the end of the book reverts with `PartialFill`. Protect a buy with a minimum output, not with a price limit.
3. **Opening rules can refuse a buy.** While a launch's own windows run, a buy can revert: `Gated` (it did not come through a router the factory approved), `WhaleCap` (its recipient would end above the wallet cap, or it came through a router that is not approved and so named no recipient), or `OverBudget` (this block's token budget is spent; this applies to every router, Signal's included). **A sale is never gated, capped or budgeted.**
4. **The opening fee applies to sales too.** A launch can open at up to 99% and fall in a straight line to its base rate over up to 90 minutes. Show the current rate before a user buys or sells inside that window.
5. **Read the rate at the moment of the trade.** Use `feeRates`, `sizeRate` and `devRate`, or simulate the exact call. A stored rate goes stale in seconds during an opening.
6. **Key a token by its address.** On releases 4.1 and 4.2 the launcher can change the token's name and ticker (see [identity](v4-discovery.md#names-can-change)). The address and the pool id never change.
7. **Some pair assets tax their own transfers.** A pool paired with such an asset trades through Signal's taxed-pair router. See [quote and trade](v4-trading.md#pair-assets-that-tax-their-own-transfers).
8. **A pot is won only through an approved router.** Where a launch has a pot, the Nth buy wins it only if it came through a router the factory approved. A buy through any other router takes the number and wins nothing.

## Reading path

| Task | Page |
| --- | --- |
| Contract identities and ABIs | [v4 deployments](v4-deployments.md) |
| Find pools and confirm they are Signal's | [Discover v4 pools](v4-discovery.md) |
| What a trade pays, and when a buy is refused | [Fees and rules](v4-fees.md) |
| Quote, build and send a trade | [Quote and trade](v4-trading.md) |
| Index trades, fees and payouts | [Events and accounting](v4-events.md) |
| Run a read against the chain | [v4 read-only example](v4-example.md) |
| Indexed context and a ready-made event feed | [Public data API](api.md) and [DexScreener adapter](dexscreener-adapter.md) |
| Who can change what | [Security and permissions](../reference/security.md) |

Signal's earlier launch types (bonding curves and Classic pools) are documented in the pages that follow these. They use different contracts and a different ABI.
