Skip to main content
This page provides a quick reference to all Solana Pipes SDK exports. For detailed documentation, see the linked pages.

Main Exports

Import from @subsquid/pipes/solana:
import {
  solanaPortalSource,
  SolanaQueryBuilder,
  solanaInstructionDecoder,
  solanaRpcLatencyWatcher,
} from '@subsquid/pipes/solana'

Functions

FunctionDescriptionReference
solanaPortalSource()Creates a data source connected to Subsquid PortalSources
solanaInstructionDecoder()Decodes program instructions using ABIsInstruction Decoder
solanaRpcLatencyWatcher()Monitors RPC latency for performance trackingRPC Latency Watcher

Classes

ClassDescriptionReference
SolanaQueryBuilderBuilds queries for the Portal APIQuery Builder

Core Functions (from @subsquid/pipes)

FunctionDescriptionReference
createTransformer()Creates a data transformerTransformers
createTarget()Creates a custom data targetTargets

Types

TypeDescription
SolanaPortalData<F>Data returned from Portal source ({ blocks: Block<F>[] })
SolanaTransformer<In, Out>Transformer type for Solana pipelines
DecodedInstruction<D>Decoded instruction structure with metadata
AbiDecodeInstruction<T>Type helper for extracting decoded instruction type
EventResponse<T>Response type from instruction decoder
InstructionsType for instruction ABI configuration

Discriminator Helpers

Low-level functions for extracting instruction discriminators:
FunctionReturnsDescription
getInstructionD1(instruction)4 hex charsExtract 2-byte discriminator
getInstructionD2(instruction)8 hex charsExtract 4-byte discriminator
getInstructionD4(instruction)14 hex charsExtract 7-byte discriminator
getInstructionD8(instruction)18 hex charsExtract 9-byte discriminator
Symbols: D0_SYM, D1_SYM, D2_SYM, D4_SYM

Quick Examples

Basic Pipeline

import { createTarget } from '@subsquid/pipes'
import { solanaPortalSource, SolanaQueryBuilder } from '@subsquid/pipes/solana'

const source = solanaPortalSource({
  portal: 'https://portal.sqd.dev/datasets/solana-mainnet',
  query: new SolanaQueryBuilder()
    .addFields({ block: { slot: true, hash: true } })
    .addInstruction({
      request: { programId: ['...'] },
      range: { from: 200000000 },
    }),
})

await source.pipeTo(createTarget({
  write: async ({ read }) => {
    for await (const { data } of read()) {
      console.log(data)
    }
  },
}))

With Instruction Decoder

import { solanaPortalSource, solanaInstructionDecoder } from '@subsquid/pipes/solana'
import * as orcaWhirlpool from './abi/orca_whirlpool/index.js'

const source = solanaPortalSource({
  portal: 'https://portal.sqd.dev/datasets/solana-mainnet',
})

const decoder = solanaInstructionDecoder({
  programId: orcaWhirlpool.programId,
  instructions: { swap: orcaWhirlpool.instructions.swap },
  range: { from: 200000000 },
})

for await (const { data } of source.pipe(decoder)) {
  console.log(data.swap)
}

Composite Pipeline

const pipeline = source.pipeComposite({
  orca: solanaInstructionDecoder({ ... }),
  raydium: solanaInstructionDecoder({ ... }),
})

for await (const { data } of pipeline) {
  console.log(data.orca, data.raydium)
}

Available Networks

NetworkPortal URL
Solana Mainnethttps://portal.sqd.dev/datasets/solana-mainnet
Solana Devnethttps://portal.sqd.dev/datasets/solana-devnet

Package Versions

Ensure you’re using compatible package versions:
{
  "dependencies": {
    "@subsquid/pipes": "latest"
  },
  "devDependencies": {
    "@subsquid/solana-typegen": "latest"
  }
}