Skip to main content

What is Pipes SDK

TypeScript library for building data pipes. Stream blockchain data from Portal API, transform it, and persist to any target.

Architecture

Core Components

Query Builder

Build queries using EvmQueryBuilder. Add fields, filters, and ranges.
const query = new EvmQueryBuilder()
  .addFields({ block: { number: true, hash: true } })
  .addLog({ request: { address: ["0x..."] }, range: { from: 20_000_000 } });

Source

Stream data from Portal API.
const source = evmPortalSource({
  portal: "https://portal.sqd.dev/datasets/ethereum-mainnet",
  query,
});

Transformer

Transform data in pipes.
const transformer = createTransformer({
  transform: async (data) => data.blocks.map((b) => b.logs),
});

Decoder

Decode smart contract events.
const decoder = evmDecoder({
  range: { from: 20_000_000 },
  contracts: ["0x..."],
  events: { transfer: commonAbis.erc20.events.Transfer },
});
You don’t need a query builder when using evmDecoder or solanaInstructionDecoder - these decoders automatically build the necessary queries for you. However, you always need a portal source.

Target

Persist data to any destination.
const target = createTarget({
  write: async ({ ctx, read }) => {
    for await (const { data } of read()) {
      await database.save(data);
    }
  },
});
Use finalized blocks or implement the onRollback handler to handle blockchain reorgs.

Pipes vs Squid SDK

FeaturePipes SDKSquid SDK
APIStreaming pipesBatch processor
DatabaseAny (DIY)TypeORM
GraphQLManualAuto-generated
FlexibilityMaximumStructured
SetupMinimalFull stack