Home / Solutions / Memecoins & Token Launches
Memecoins & Token Launches

Token launch data: deployments, liquidity, and the first trades

Onchain, a token launch is three records: a CREATE trace, an LP creation event, and the first wave of trades. On launchpads it is one instruction stream, keyed by program ID and discriminator. SQD serves both shapes from one endpoint across 225+ networks, with history back to genesis, so a screening pipeline reads a launch as the chain recorded it.

225+ Networks
CREATE Deployment traces
d8 Discriminator filters
Genesis Full history
The problem

A token launch is an onchain record before it is a score, and screening reads the record

On EVM chains that record is spread across three types: a create trace for the deployment, a PairCreated or PoolCreated log for the liquidity, and the token's first Transfer logs. On a launchpad it collapses into one instruction stream, keyed by a program ID and an 8-byte discriminator: the token name and creator wallet decode from each create instruction's data, and the same filter with the buy and sell discriminators returns its trades. Read the naive way, each piece comes from a different tool, and eth_getLogs never sees a CREATE at all. It is all onchain already; the work is in reading both shapes through one query.

Launchpad streams

The launch feed is one filter: program ID plus discriminator

On a launchpad, a new token is not an event log; it is an instruction sent to the launchpad's program. pump.fun (6EF8…F6P) is an Anchor program, so the first 8 bytes of each instruction's data name the call. Filter the solana-mainnet instruction stream by the program ID and the launch discriminator, and every new token streams back. Two hundred pinned slots, about 80 seconds of chain time, return 11 launches:

create_v2, slots 431,950,000-431,950,199 mint
Real, from slots 431,950,000 to 431,950,199 (2026-07-10, last three slot digits shown). Name is a borsh string decoded from each instruction's data; the mint is the first entry in its accounts list. Three rows share one name that attacks a named individual: the query returns it, we do not reprint it, and the linked mints resolve it.

The decoded creator field is where screening starts. The three withheld rows above carry one identical name, launched within three slots of each other, and all three decode to the same creator wallet, CuHY…W3wG: one wallet stamping out three copies of one name, visible in the raw feed with no enrichment.

Ten of the 11 committed. The one that did not (slot 431,950,036) came back with error: null and isCommitted: false: the create itself did not fault, its transaction failed elsewhere and rolled it back. The two flags are independent, and a feed that drops uncommitted rows undercounts launch attempts.

The query is a program ID, a discriminator, and a slot window. No IDL registration, no deployed indexer:

your terminal
curl -s -X POST https://portal.sqd.dev/datasets/solana-mainnet/stream \
-H 'content-type: application/json' \
-d '{
"type": "solana",
"fromBlock": 431950000, "toBlock": 431950199,
"instructions": [{
"programId": ["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"],
"d8": ["0xd6904cec5f8b31b4"],
"transaction": true
}],
"fields": {
"instruction": { "accounts": true, "data": true, "error": true,
"isCommitted": true, "instructionAddress": true, "transactionIndex": true },
"transaction": { "transactionIndex": true, "signatures": true },
"block": { "number": true, "timestamp": true }
}
}'

Trades are the same filter with the buy and sell discriminators, pinned to one mint by its account position ("a2"). For the first launch above (2nZS…pump), the first 200 slots return 239 trade instructions: 132 buys and 107 sells, with committed buys from 92 distinct wallets and 19 attempts uncommitted. The creation transaction itself (2zup…XmxY) carries the creator's own first buy, the create at instruction address [2] and the buy at [4], and the next three transactions in the same slot are three more wallets buying. On a launchpad, deployment and first trade are one transaction; join on the transaction, not on time.

One gotcha: the discriminator older walkthroughs compute returns nothing. sha256("global:create"), 0x181ec828051c0777, matched zero instructions over 2,000 slots of this window; launches now arrive as create_v2, 0xd6904cec5f8b31b4. A discriminator filter is an exact byte match, so verify it against the live stream, not against a cached IDL or a tutorial.

EVM forensics

EVM launch forensics: the token, the pool, and the deployer's past

On EVM chains a launch is spread across three record types the Portal serves side by side: a create trace, an LP creation log, and the token's first transfers. At Ethereum block 25,495,121 (2026-07-09), wallet 0x2b6a…3bfb sent three consecutive transactions: the first deployed token 0x93b1…375f, and the third, a call into the new token, created its Uniswap V2 pair, logged by the factory as PairCreated number 515,228. The surrounding 5,000 blocks, roughly 17 hours, carry 11 PairCreated logs from that factory, each one a new pool. The deployment record of any token is one trace filter:

your terminal
curl -s -X POST https://portal.sqd.dev/datasets/ethereum-mainnet/stream \
-H 'content-type: application/json' \
-d '{
"type": "evm",
"fromBlock": 25495121, "toBlock": 25495121,
"traces": [{
"type": ["create"],
"createResultAddress": ["0x93b16ff2c5ce3e43d503bb24d1fcd8128257375f"],
"transaction": true
}],
"fields": {
"trace": { "type": true, "transactionIndex": true,
"createFrom": true, "createResultAddress": true },
"transaction": { "hash": true, "from": true },
"block": { "number": true, "timestamp": true }
}
}'
the line it returns
{
"header": { "number": 25495121, "timestamp": 1783601267 },
"transactions": [{
"hash": "0x3766b98c30944cbf738cb32337b932dfa7238d84f1223d363262b0fa5b73147c",
"from": "0x2b6a0e031cacfaf1183be66c9e460a1168b33bfb"
}],
"traces": [{
"transactionIndex": 1,
"type": "create",
"action": { "from": "0x2b6a0e031cacfaf1183be66c9e460a1168b33bfb" },
"result": { "address": "0x93b16ff2c5ce3e43d503bb24d1fcd8128257375f" }
}]
}

The request filters with flat names, the response nests: createFrom arrives as action.from, createResultAddress as result.address. A trace also carries no transaction hash of its own; "transaction": true joins the parent transaction, whose from is the wallet that signed. The distinction matters on launchpads: for a factory-deployed token, action.from is the factory contract and transaction.from is the person. Flip the filter to createFrom and the same stream is the deployer's history: scanned across the million blocks up to the chain head, this wallet has exactly two deployments, this token and a second one (0xfb1c…d679) 1,023 blocks later, also paired against WETH in its own deployment block. A fresh wallet repeating one launch pattern twice in an afternoon is exactly the record a screening model runs on, and it took two queries to establish.

Early-holder concentration is a fold over the token's first Transfer logs. The deployment block alone has 16 of them, and they reconcile exactly: one mint of the full amount to the deployer, 92% of it moved into the token contract, 69% seeded into the pair, then six wallets bought 8.82% back out of the pool before the block ended, with another 2.94% flowing from the pool back to the token contract along the way. The ledger at the end of the block:

Holdings at the end of block 25,495,121 share of mint
Folded from the 16 Transfer logs in block 25,495,121; the six buyers held 1.42% to 1.49% each, and the four lines sum to 100.00%. The first 300 blocks add up to 111 transfers across 66 transactions, 39 distinct recipients, and 93 Swap events on the pair from 33 wallets.

Getting the same picture from raw RPC means three different node facilities at once: trace_block or debug_traceBlock on an archive node for the deployment (standard eth_getLogs cannot see a CREATE), log pagination for the transfers, and a per-launch loop over both. Here the three record types answer the same declarative query shape on one endpoint, across 225+ networks, with history back to genesis, so the deployer scan above did not need its own infrastructure.

Where the data stops: SQD serves the record, not the verdict. Deployments, LP events, transfers, and launchpad instructions arrive with block and transaction evidence; rug and scam scoring, wallet attribution, and market-cap or price data are built downstream on those rows. There is no reconstructed state: holder balances are a fold over transfer history, metadata lives at the URI the contract points to, and the only prices are the amounts swap events themselves carry.

Playground

Try the Portal API

Live queries against real blockchain data. Pick a network, choose a query, hit run.

The public endpoint is free for development. See plans for dedicated portals and higher limits.

Network+200 more
Query
curl --compressed -X POST \
'https://portal.sqd.dev/datasets/solana-mainnet/stream' \
-H 'Content-Type: application/json' \
-d '{
"type": "solana",
"fromBlock": 300000000,
"toBlock": 300000100,
"fields": {
"block": {"number":true,"timestamp":true},
"instruction": {"programId":true}
},
"instructions": [
{
"programId": [
"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"
]
}
]
}'
Solanasolana-mainnet/stream
Raydium V4 pool activity
Capabilities

Built for Memecoins & Token Launches at scale

Launchpad instruction streams

Filter Solana instructions by the launchpad's program ID and an 8-byte discriminator and every launch streams back: name, symbol, metadata URI, and creator wallet are borsh fields in each create instruction's data. The same filter with the buy and sell discriminators, pinned to a mint by account position, is that token's trade stream.

Deployments from CREATE traces

On EVM chains every deployment is a create trace carrying the deployer and the new contract address, including factory and CREATE2 deployments a transaction list never surfaces. Filter by createResultAddress to find the trace that deployed a given token, or by createFrom to list everything an address ever deployed.

LP creation and first-trade flow

A PairCreated or PoolCreated log on the DEX factory marks the liquidity moment, and the new pool's Swap events are queryable from the block it appeared. Both are ordinary log filters, factory address plus topic0, so a launch monitor is two filters on one stream rather than a per-venue integration.

The raw record for screening

Deployments, LP events, first transfers, and launchpad instructions arrive as decoded rows with block and transaction evidence, the inputs a screening model runs on. SQD serves that record; rug and scam scoring, wallet attribution, and price data are built downstream in your stack.

Why SQD

What you would build yourself

The deployment, the pool, and the first trades are all public onchain; the work a provider saves is in reading records that live in different places the same way.

  • Launchpad feed
    Yourself Register the program's IDL and run an Anchor-aware indexer, then rebuild it when launches move to create_v2 and the old create discriminator matches nothing.
    With SQD The feed is a program ID, an 8-byte discriminator, and a slot window on the instruction stream; the buy and sell discriminators on the same filter are that token's trades.
  • New deployments
    Yourself eth_getLogs cannot see a CREATE, so deployments come from trace_block or debug_traceBlock on an archive node, and factory or CREATE2 deploys never show up in a transaction list.
    With SQD Filter the trace stream by type create and each match carries the deployer and the new contract address; the deployment record of any token is one trace filter.
  • Deployer history
    Yourself A transaction list does not reveal which contracts an address deployed, so a wallet's launch history is not readable from transactions alone.
    With SQD createFrom lists every contract a wallet deployed, so the deployer scan is one more filter on the same trace stream, with history back to genesis.
  • Early holders
    Yourself Page through the token's first Transfer logs and repeat the loop for every launch, on a separate call path from the deployment trace.
    With SQD Early-holder concentration folds over the token's first Transfer logs in the same query shape as the trace and the LP event, on one endpoint.

See this on your own contracts

Tell us the chains and contracts you care about, and we will show you the query that returns them.

Use cases

What teams build with SQD

  • New-token deployment feeds from CREATE traces
  • Launchpad launch and trade streams by discriminator
  • LP creation alerts from factory events
  • First-blocks trade flow and early-buyer analysis
  • Deployer history screening from trace queries
  • Early-holder concentration from first transfers

Frequently asked questions

How do I get pump.fun data from an API?
Query the Portal's solana-mainnet dataset with the pump.fun program ID (6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P) and an instruction discriminator: launches match create_v2 (0xd6904cec5f8b31b4), whose data field decodes to the token's name, symbol, metadata URI, and creator wallet; trades match the buy and sell discriminators, pinned to one mint with an account-position filter. Each returned instruction carries its accounts, its data, an error field, and an isCommitted flag, so failed and uncommitted attempts are visible too. Keep slot windows small, the program is high-volume. The query shape is walked through in the declarative Solana decoding guide.
How do I track new token deployments on EVM chains?
Filter the trace stream by type create: each match carries the deployer and the new contract address, including factory and CREATE2 deployments a transaction list never surfaces as deployments. Two filters matter for screening: createResultAddress finds the trace that deployed a given token, and createFrom lists the contracts an address deployed. The liquidity moment is a separate log, PairCreated or PoolCreated on the DEX factory, and the new pool's Swap events are queryable from the block it appeared. Traces are explained in the internal transactions guide.
Does SQD score tokens for rugs or scams?
No. SQD serves the raw onchain record a screening model runs on: deployment traces, LP creation events, transfers, and launchpad instructions, each with block and transaction evidence. Scoring, attribution, and risk models are built downstream on those rows. The Portal also serves no reconstructed contract state: holder balances are a fold you run over transfer history, token metadata lives at the URI the contract points to, and the only price information is the amounts swap events themselves carry.
Get started

Your blockchain data infrastructure, handled.

Private Portal. Dedicated. Validated. Managed. Tell us what you're building, we'll show you what it looks like on SQD.