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.
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.
Other chains
The contracts that create a coin's token and open its pool, per chain, from the site's configuration.
Base
chain id 8453BasescanNo Longevity contract address is published for this chain.
- PoolManagerUniswap v4, every Swap
0x498581fF718922c3f8e6A244956aF099B2652b2b
Robinhood Chain
chain id 4663BlockscoutNo Longevity contract address is published for this chain.
- PoolManagerUniswap v4, every Swap
0x8366a39CC670B4001A1121B8F6A443A643e40951
BNB Chain
chain id 56BscScanNo Longevity contract address is published for this chain.
- PoolManagerUniswap v4, every Swap
0x28e2Ea090877bF75740558f6BFB36A5ffeE9e9dF
Hyperliquid
chain id 999HyperEVMScanNo 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.
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.
| Event | topic0 | Use |
|---|---|---|
| TwinOFTFactory.TwinDeployedevent TwinDeployed(address indexed token, bytes32 indexed solanaMint, bytes32 solanaStore, string name, string symbol, uint64 supplyRaw, address caller) | 0x526acdb32d2df5740fc359641571a78159b8dd41ef31c57010c63e9043a6e5ed | the 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).
| Event | topic0 | Use |
|---|---|---|
| AlignedListingFactory.Listedevent Listed(address indexed token, uint256 indexed tokenId, address indexed lister, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 amount, string metadataURI) | 0xad5a4aaa469875ff13658232c22a8ba97398205fa40bdf452cdbd83b1ee2d117 | the 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. |
| Trades | topic0 | Use |
|---|---|---|
| PoolManager (Uniswap v4).Swapevent Swap(bytes32 indexed id, address indexed sender, int128 amount0, int128 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick, uint24 fee) | 0x40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f | every 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.
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.
# 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}'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.
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 }).
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.
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.
/api/launch/list90 requests per minute per IP, then 429.
cache: public, s-maxage=2, stale-while-revalidate=10/api/launch/live120 requests per minute per IP, then 429.
cache: public, s-maxage=2, stale-while-revalidate=10/api/launch/search60 requests per minute per IP, then 429.
cache: public, s-maxage=5, stale-while-revalidate=30/api/launch/candles60 requests per minute per IP, then 429.
cache: public, s-maxage=5, stale-while-revalidate=30/api/launch/feedNo per-IP limit. Cache as the header says.
cache: public, s-maxage=2, stale-while-revalidate=10/api/launch/meta/{token}No per-IP limit. Cache as the header says.
cache: public, max-age=300/api/meta/{mint}No per-IP limit. Cache as the header says.
cache: public, max-age=3600/api/engine/coin/{mint}240 requests per minute per IP, then 429.
cache: no-store/api/stream6 requests per minute per IP, then 429.
cache: no-store (opens per minute; one connection lasts about 290 s)/api/integrate/kit.jsonNo per-IP limit. Cache as the header says.
cache: public, s-maxage=60, stale-while-revalidate=300Unknown 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.
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