中文 | 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 |
From npm
npm install sol-parser-sdk-nodejsFrom 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-nodejs";
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:10800shredstream_pumpfun_json.ts also needs a Solana RPC_URL (or --rpc) for ALTs.
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; needs Solana RPC for ALTs (RPC_URL or --rpc). |
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, Bonk Launchpad (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