中文 | English | Website | Telegram | Discord
| Language | Repository |
|---|---|
| Rust | sol-parser-sdk |
| Node.js | sol-parser-sdk-nodejs |
| Python | sol-parser-sdk-python |
| Go | sol-parser-sdk-golang |
sol-parser-sdk is the TypeScript/Node.js implementation of the FnZero Solana DEX parser SDK. The GitHub repository is named sol-parser-sdk-nodejs to distinguish it from the Rust/Python/Go repositories. It is built for bots, indexers, copy-trading services, sniper pipelines, and backend systems that need typed DEX events from Yellowstone gRPC, Jito ShredStream, RPC transactions, or protocol account data.
| Area | Coverage |
|---|---|
| Parser inputs | Yellowstone gRPC, ShredStream, RPC transactions, encoded transactions, protocol account data |
| DEX protocols | PumpFun, PumpSwap, Pump Fees, Raydium LaunchLab, Raydium CPMM, Raydium CLMM, Raydium AMM V4, Meteora DAMM v2, Meteora DLMM, Meteora DBC, Orca Whirlpool |
| Use cases | Real-time DEX event parsing, token launch monitoring, copy trading, sniper bots, account filling, JSON event pipelines |
| Runtime | Node.js 18+, TypeScript, npm/yarn/pnpm projects |
- Syncs parser parity with the Rust SDK event model and program routing.
- Keeps PumpFun create instruction names and ShredStream quote-mint handling aligned across language SDKs.
- Maintains low-latency gRPC/RPC/ShredStream parsing paths for supported DEX protocols.
- Adds Meteora DBC log parsing with program-context routing and filter parity.
- Adds Raydium CLMM/CPMM and Orca account parsers and exports.
- Preserves RPC block transaction indexes and active program context for log parsing.
- Skips ShredStream instruction parsing early for account-only or empty include-only filters.
- Tightens ShredStream/RPC filter behavior to match Rust/Python/Go low-latency paths.
- Aligns ShredStream parsing with Rust/Python/Go for low-latency static-account paths.
- Uses default pubkey placeholders for V0 ALT-loaded instruction accounts instead of dropping the instruction.
- Adds discriminator fallback when the ShredStream outer program id is ALT-loaded.
- Improves Pump.fun v2 short-account parsing, create/create_v2 handling, and event-type filter parity.
- Refreshes multi-protocol routing for Pump.fun, PumpSwap, Pump Fees, Raydium, Orca, and Meteora paths.
From npm
npm install sol-parser-sdk@0.5.9From source (folder may be named sol-parser-sdk-ts in a monorepo)
git clone https://github.com/0xfnzero/sol-parser-sdk-nodejs
cd sol-parser-sdk-nodejs
npm install
# npm run build # only if you import from dist/ instead of examples/tsx → srcAt the package root (next to package.json):
cp .env.example .env
# Set GRPC_URL and GRPC_TOKENRun examples from that directory so .env is picked up.
npx tsx scripts/test-grpc-ts.tsRequires GRPC_URL and GRPC_TOKEN. See .env.example for optional vars (MAX_EVENTS, TIMEOUT_MS, etc.).
import {
YellowstoneGrpc,
parseDexEventsFromGrpcTransactionInfo,
dexEventToJsonString,
} from "sol-parser-sdk";
const ENDPOINT = process.env.GRPC_URL?.trim() ?? "";
const X_TOKEN = process.env.GRPC_TOKEN?.trim() ?? "";
if (!ENDPOINT || !X_TOKEN) throw new Error("GRPC_URL and GRPC_TOKEN are required");
const client = new YellowstoneGrpc(ENDPOINT, X_TOKEN);
const filter = {
account_include: [
"6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P", // PumpFun
"pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA", // PumpSwap
],
account_exclude: [],
account_required: [],
vote: false,
failed: false,
};
const sub = await client.subscribeTransactions(filter, {
onUpdate: (update) => {
const txInfo = update.transaction?.transaction;
if (!txInfo?.transactionRaw || !txInfo.metaRaw) return;
const slot = update.transaction!.slot;
const events = parseDexEventsFromGrpcTransactionInfo(txInfo, slot, undefined);
for (const ev of events) console.log(dexEventToJsonString(ev, 2));
},
onError: (err) => console.error(err.message),
onEnd: () => {},
});
console.log("subscribed", sub.id);Lighter path: parseLogsOnly(logs, signature, slot, …) — no transactionRaw; use applyAccountFillsToLogEvents if you need filled accounts without full gRPC meta.
Uses SHREDSTREAM_URL or SHRED_URL (default http://127.0.0.1:10800), or CLI --url. Not GRPC_URL.
The client decodes gRPC entries bytes in TypeScript (same layout as the Go shredstream/entries_decode path) and deserializes wire transactions with @solana/web3.js — no WebAssembly or wasm-pack build.
npx tsx examples/shredstream_example.ts -- --url=http://127.0.0.1:10800Without RPC, V0 ALT-loaded account indexes are represented with default pubkey placeholders and parsed best-effort. shredstream_pumpfun_json.ts can also use Solana RPC_URL (or --rpc) to expand ALTs when exact loaded-account fields are required.
From the package root after npm install. Examples use npx tsx and load src/ directly — no npm run build required for examples. Source is one file per row (click to open on GitHub or npm).
| Description | Run command | Source |
|---|---|---|
| Scripts | ||
gRPC integration test (PumpFun + PumpSwap, account-filled DexEvent) |
npx tsx scripts/test-grpc-ts.ts |
test-grpc-ts.ts |
Debug: print metaRaw / log structure |
npx tsx scripts/debug-grpc-ts.ts |
debug-grpc-ts.ts |
| PumpFun | ||
Pretty-print full JSON DexEvent over gRPC |
npx tsx examples/pumpfun_grpc_json.ts |
pumpfun_grpc_json.ts |
| PumpFun events + metrics | npx tsx examples/pumpfun_with_metrics.ts |
pumpfun_with_metrics.ts |
| PumpFun trade filter | npx tsx examples/pumpfun_trade_filter.ts |
pumpfun_trade_filter.ts |
| Quick PumpFun connection test | npx tsx examples/pumpfun_quick_test.ts |
pumpfun_quick_test.ts |
| PumpSwap | ||
Pretty-print full JSON DexEvent over gRPC |
npx tsx examples/pumpswap_grpc_json.ts |
pumpswap_grpc_json.ts |
| PumpSwap events + metrics | npx tsx examples/pumpswap_with_metrics.ts |
pumpswap_with_metrics.ts |
| PumpSwap ultra-low latency | npx tsx examples/pumpswap_low_latency.ts |
pumpswap_low_latency.ts |
| Meteora DAMM | ||
| Meteora DAMM V2 events | npx tsx examples/meteora_damm_grpc.ts |
meteora_damm_grpc.ts |
| ShredStream (HTTP, not Yellowstone gRPC; see step 5 above) | ||
Ultra-low-latency subscribe + queue / latency stats. URL: --url / SHREDSTREAM_URL / .env (default http://127.0.0.1:10800). |
npx tsx examples/shredstream_example.ts |
shredstream_example.ts |
PumpFun DexEvent JSON from ShredStream; static ALT fallback works without RPC, and Solana RPC (RPC_URL or --rpc) expands full ALT accounts when needed. |
npx tsx examples/shredstream_pumpfun_json.ts |
shredstream_pumpfun_json.ts |
| Multi-protocol | ||
| Subscribe to all DEX protocols | npx tsx examples/multi_protocol_grpc.ts |
multi_protocol_grpc.ts |
| Utility | ||
Verify onUpdate sync errors do not kill the gRPC stream |
npx tsx examples/grpc_onupdate_error_test.ts |
grpc_onupdate_error_test.ts |
Parse tx by signature (parseTransactionFromRpc; not gRPC). Set TX_SIGNATURE in .env or env. |
npx tsx examples/parse_tx_by_signature.ts |
parse_tx_by_signature.ts |
npm run aliases (same source files as the ShredStream rows above):
npm run example:shredstream→ shredstream_example.tsnpm run example:shredstream:subscribe→ shredstream_example.tsnpm run example:shredstream:pumpfun-json→ shredstream_pumpfun_json.ts
Env: gRPC examples need GRPC_URL + GRPC_TOKEN. ShredStream uses SHREDSTREAM_URL / SHRED_URL or --url; shredstream_pumpfun_json also needs RPC_URL / --rpc. See .env.example.
PumpFun, PumpSwap, Raydium AMM V4 / CLMM / CPMM, Orca Whirlpool, Meteora DAMM V2 / DLMM, Raydium LaunchLab (see src/instr/).
parseDexEventsFromGrpcTransactionInfo— needstransactionRaw+metaRaw(Rust gRPC parity).parseRpcTransaction/parseTransactionFromRpc— HTTP RPC path.dexEventToJsonString— BigInt-safe JSON.
npm run build
npm run check:migration # parity checks; needs build