For trading terminals and screeners

Indexing Longevity launches

For trading terminals and screeners that tag launchpads: how a longevity.trading coin is created on Solana and how to recognise one, where its token and pool appear on the other chains, the events to watch and how to place a coin in your columns. Addresses on this page are read from the site's live configuration. Machine-readable: indexing in /api/integrate/kit.json.

Every coin starts on Solana.Recognise it by its config there, then follow its token and pool on the chains it picked.

Jump to the columns
01

Index launches

Identify by chain and token, never by name or pool alone.

A longevity.trading coin is launched on Solana and identified there by its mint. A coin that picked other chains at launch also has one token on each of them, so key your row by (chain, token) and join the rows of one coin by its Solana mint. Store the source event (emitter, transaction hash, log index, block hash) beside the normalised row: it lets you prove where a row came from and repair it after a reorg. Display data (name, logo, links) is off-chain metadata; fetch it separately and cache it.

One launch, on Solana

Nothing is launched on an EVM chain and no chain has a launch form of its own. The launcher picks chains on the Solana launch form. The coin's token on a picked chain is created by the TwinOFTFactory, and its pool there opens when the coin graduates on Solana.

Creator and launcher

The pool's creator field is Longevity's deployer wallet, and so is the fee payer of the launch transaction: the engine launches every coin, so neither names the launcher. The launcher's wallet is coin.launcher in GET /api/engine/coin/<mint> on this site. Show the launcher, not the pool's creator field.

02

Other chains

The contracts that create a coin's token and open its pool, per chain, from the site's configuration.

Base

chain id 8453Basescan

No Longevity contract address is published for this chain.

PoolManagerUniswap v4, every Swap
0x498581fF718922c3f8e6A244956aF099B2652b2b

Robinhood Chain

chain id 4663Blockscout

No Longevity contract address is published for this chain.

PoolManagerUniswap v4, every Swap
0x8366a39CC670B4001A1121B8F6A443A643e40951

BNB Chain

chain id 56BscScan

No Longevity contract address is published for this chain.

PoolManagerUniswap v4, every Swap
0x28e2Ea090877bF75740558f6BFB36A5ffeE9e9dF

Hyperliquid

chain id 999HyperEVMScan

No Longevity contract address is published for this chain.

PoolManagerUniswap v4, every Swap
0x12D4Fd9C5DeDd00ab8a0bCe2CF0167bbf94b6B1F

A Longevity address appears here only for a chain whose status is live. Nothing on this page is a placeholder. Read a pool's real key from the factory's poolKeyOf(token) instead of rebuilding it.

03

Events and pools

Signatures and topic0 computed from the contract's own declaration.

Filter logs by the addresses above, then follow the pool ids they announce on the PoolManager. Every pool id is the Uniswap v4 id of the PoolKey (keccak256(abi.encode(key))); the Listed event carries it, so you rarely need to compute it.

TwinOFTFactory. Creates the token of a coin that picked this chain. The address is the same on every chain. No pool exists yet at this point.

Eventtopic0Use
TwinOFTFactory.TwinDeployedevent TwinDeployed(address indexed token, bytes32 indexed solanaMint, bytes32 solanaStore, string name, string symbol, uint64 supplyRaw, address caller)0x526acdb32d2df5740fc359641571a78159b8dd41ef31c57010c63e9043a6e5edthe coin's token on this chain and the Solana mint it belongs to (solanaMint is the mint's 32 bytes). Use it to join the token to the Solana coin.

AlignedListingFactory (kind listing). Opens the coin's Uniswap v4 pool on this chain when the coin graduates on Solana. The AlignedPoolSeeder calls it with the coin's slice and the Solana price. One pool per coin per chain.

PoolKey: currency0 = quote, currency1 = token, fee = 0x800000 (the v4 dynamic-fee flag), tickSpacing = 200, hooks = the chain's FeeStyleHook. The quote is the chain's native coin (the zero address) or, for a paired coin, its parent coin's token on this chain. Read the key with alignedFactory.poolKeyOf(token); the fee a swap pays now is feeStyleHook.quoteFee(key, params).

Eventtopic0Use
AlignedListingFactory.Listedevent Listed(address indexed token, uint256 indexed tokenId, address indexed lister, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 amount, string metadataURI)0xad5a4aaa469875ff13658232c22a8ba97398205fa40bdf452cdbd83b1ee2d117the coin's pool opened: token, tokenId (the liquidity position, kept by alignedFactory.locker()), lister, quote, poolId, startTick, lpFee, amount, metadataURI. The metadataURI is a fixed marker, not a URL: read the coin's metadata from its Solana mint.
Tradestopic0Use
PoolManager (Uniswap v4).Swapevent Swap(bytes32 indexed id, address indexed sender, int128 amount0, int128 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick, uint24 fee)0x40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112fevery trade on a coin's pool (topic1 = poolId). The quote is currency0, so amount0 is the quote leg and amount1 the coin leg.

Quote asset: the quote field of Listed; the zero address is the chain's native coin. Amounts are raw integers in the quote's decimals; the coin's token has 18 on an EVM chain and 6 on Solana. The same catalogue, with the price maths, is on the Integration kit.

04

Terminal columns

New, Almost bonded, Completed. The curve is on Solana, and so is the graduation.

Solana

New the moment the engine creates the coin. Almost bonded once progress reaches 80% (our suggestion; pick your own), where progress = the pool account's quoteReserve over its config's migrationQuoteThreshold. Completed when the DBC pool migrates to DAMM v2. Details in section 06.

Other chains

A coin's pool on an EVM chain opens at graduation, at the Solana price. A coin you first see there is already Completed. Before graduation the token exists on that chain and has no pool.

Paired coins

A coin can be quoted in another Longevity coin instead of SOL. The curve, the threshold and the columns work the same way, counted in the parent coin. Convert through the parent's price to show a value in SOL or dollars.

One coin from the engineShell, curl
# what the engine knows about one coin: the launcher, the fee choice, the pair, the chains it picked
curl -s "https://longevity.trading/api/engine/coin/<mint>" \
  | jq '{launcher: .coin.launcher, launch: .launch, pair: .pair, chains: .xchain.chains}'

05

Fees and liquidity

Facts a terminal can show in a launch badge.

Trading fee

On Solana the trading fee is 1% or 3%, the launcher's choice, written in the coin's config. Every trade pays the coin's trading fee, set at launch and written in its config. From it come the creator trading fees, which build up from the first trade and are paid on the schedule on /fees, and the rewards paid to the coin's holders. This kit does not publish how the fee is divided. On an EVM chain the fee a swap pays is set by the pool's FeeStyleHook; read it with quoteFee(key, params).

Liquidity

On Solana the config fixes how the migrated liquidity is divided and which part is locked for good: read the config's liquidity percentages and do not assume a full lock. On an EVM chain the pool's liquidity position (Listed.tokenId) is kept by the factory's own locker, locker() on the AlignedListingFactory.

06

Solana

Meteora Dynamic Bonding Curve (DBC), under a Longevity config, launched by the engine.

DBC programwhere every coin is created
dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN
DAMM v2 programwhere a curve migrates
cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG
Partner walletfeeClaimer on every Longevity config
5sT9hg8BarehzhJo813wDJ2dAf84ycEcfgiQG2UAwfta
Deployerfee payer and pool creator of every launch
7h4efJqbi9pDuDdzjPxUdsjUXiVWUpmgkk68H6jtb6fj

Standard configs

SOL, 1% trading feewith the opening fee
2u8jc9PEY91MzyF5py1YaAypKzwqYPmNRcsBygYz9Tf7
SOL, 3% trading feewith the opening fee
N88JJBVL7iYRqQDFmy1nt7Jb2BLRyncVeLshPxEbXkv
SOL, 1% trading feewithout the opening fee
BSfxrCqGQQY4M9ZoXhA3cHKw5Rj44nwrjehpSWBLk7zn
SOL, 3% trading feewithout the opening fee
C5shbPrZt5T4vC6PwFSAJPJg3ZqUtJHN3sSzkQG3gPNe

Recognise a launch. A DBC pool is a longevity.trading coin when its config account names the partner wallet as feeClaimer. Match on the config's feeClaimer, not on a list of configs: a coin paired with another coin, and a coin that picked other chains, each get a config of their own with the same feeClaimer. Any config printed under configs is one of the engine's standard SOL configs.

Launcher. The launcher is coin.launcher in GET /api/engine/coin/<mint>, which also carries the coin's fee choice, its pair and the chains it picked.

Pairs. A coin can be quoted in another Longevity coin instead of SOL (pair.parent, pair.depth, at most two deep, the chain ending in SOL). Price it against its parent and convert; a trade on it is routed through the parent in one transaction.

Graduation. When a curve reaches its migration threshold the pool migrates to a Meteora DAMM v2 pool (the config's migration option is MET_DAMM_V2). Progress = the pool account's quoteReserve over its config's migrationQuoteThreshold. A coin that picked other chains opens its pool on each of them at this moment, at the Solana price.

Metadata. The mint's Metaplex uri points at /api/meta/<mint> on this site (name, symbol, description, image, external_url, extensions { website, twitter, telegram }).

07

Finality and reorgs

What the site itself does, so your numbers can match ours.

EVM

The site's own indexer stays 10 blocks behind the head (never fewer than 3) and re-checks the block hashes it has stored; a block whose hash changed is dropped and its rows rebuilt from the canonical chain. Show head-of-chain pools if you want speed, but key them by (chain, token) and be ready to drop them when their block is replaced.

Solana

The site's Solana reader (solana/trades.mjs) reads signatures and transactions at finalized, about 13 s behind confirmed, because a confirmed trade can later be forked out. Use confirmed for a fast first display if you like, and finalized for anything that ranks, pays or is stored for good. A signature missing from finalized history (getSignatureStatuses with searchTransactionHistory) is dropped.

08

Metadata and public APIs

Off-chain, on this domain, no API key.

The uri in the mint's Metaplex metadata is https://longevity.trading/api/meta/<mint>. It answers name, symbol, description, image, external_url and the coin's links under extensions. The metadataURI in Listed is a fixed marker, not a URL: on an EVM chain, join the token to its Solana mint through TwinDeployed.solanaMint and read the same JSON. Logos uploaded here are 512 x 512 WebP files at an immutable URL. Cache metadata for minutes, not forever.

Public reads a terminal can pollPer-IP limit
GET
/api/launch/list

90 requests per minute per IP, then 429.

cache: public, s-maxage=2, stale-while-revalidate=10
GET
/api/launch/live

120 requests per minute per IP, then 429.

cache: public, s-maxage=2, stale-while-revalidate=10
GET
/api/launch/search

60 requests per minute per IP, then 429.

cache: public, s-maxage=5, stale-while-revalidate=30
GET
/api/launch/candles

60 requests per minute per IP, then 429.

cache: public, s-maxage=5, stale-while-revalidate=30
GET
/api/launch/feed

No per-IP limit. Cache as the header says.

cache: public, s-maxage=2, stale-while-revalidate=10
GET
/api/launch/meta/{token}

No per-IP limit. Cache as the header says.

cache: public, max-age=300
GET
/api/meta/{mint}

No per-IP limit. Cache as the header says.

cache: public, max-age=3600
GET
/api/engine/coin/{mint}

240 requests per minute per IP, then 429.

cache: no-store
GET
/api/stream

6 requests per minute per IP, then 429.

cache: no-store (opens per minute; one connection lasts about 290 s)
GET
/api/integrate/kit.json

No per-IP limit. Cache as the header says.

cache: public, s-maxage=60, stale-while-revalidate=300

Unknown query parameters on the cached endpoints are refused with 400. When the database is busy a read answers 503 with retry-after: keep your last data and retry. For anything real-time use the stream instead of polling. Every endpoint, with parameters: /api/openapi.json.

09

Tag us

A request, if your terminal shows launchpads.

If you label launches by launchpad, we would ask that coins recognised by the rule above show longevity.trading, with our logo (/brand/mark-512.png, or /brand/mark.svg) and a link to https://longevity.trading. If you show a one-line description, ours is "The cross-chain launchpad and OTC desk". More logo sizes are on the Integration kit.

Questions, corrections or a missing field: tell us.@Longevitylaunch on X