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,
});
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
| Feature | Pipes SDK | Squid SDK |
|---|
| API | Streaming pipes | Batch processor |
| Database | Any (DIY) | TypeORM |
| GraphQL | Manual | Auto-generated |
| Flexibility | Maximum | Structured |
| Setup | Minimal | Full stack |