Skip to content

Releases: subsquid/pipes-sdk

@subsquid/pipes v1.0.0-beta.2

Choose a tag to compare

PubSub changelog target

This release adds a Google PubSub target that turns a pipe into a durable, sequenced changelog feed for downstream consumers, makes finalized-only targets pin the finalized stream so they can never hold back an uncommitted tail, and fixes fork detection when the portal answers 409 without a fork context.

Highlights

  • New target: Google PubSub (@subsquid/pipes/targets/pubsub) — pubsubTarget publishes the decoded stream to PubSub topics as a sequenced changelog. Delivery is durable: a SQLite-backed outbox survives crashes and resumes without gaps or duplicates, and chain reorgs are compensated with rollback messages instead of silent rewrites. Topic routing, delivery profiles, optional topic validation, and windowTopic for windowed views are included; target errors carry the new E24xx band. See the example.

Core

  • Finalized-only targets now pin the finalized stream. Parquet and the memory target declare requiresFinalizedStream, and the source reads /finalized-stream regardless of portal options (warning when it overrides them). The finalization buffer is gone — every delivered block is final, so a bounded range ending above the finalized head can no longer leave an uncommitted tail behind a successfully resolved pipeTo(), and the Parquet cursor no longer lags when finality advances inside one response.

Portal client

  • A 409 without previousBlocks is no longer misread as a fork. The portal may answer 409 with the error envelope alone; the client used to crash inside the fork handler and bury the original response. The 409 now reaches the caller intact.

Full Changelog: pipes-v1.0.0-beta.1...pipes-v1.0.0-beta.2

@subsquid/pipes-cli v1.0.0-beta.2

Pre-release

Choose a tag to compare

@github-actions github-actions released this 31 Jul 20:27
2776e61

What's Changed

Full Changelog: pipes-cli-v1.0.0-beta.1...pipes-cli-v1.0.0-beta.2

@subsquid/pipes v1.0.0-beta.1

Choose a tag to compare

TRON: tolerate the full int64 range on transaction fields

Synchronizes the TRON portal client validation (portal-client/query/tron.ts) with the Rust query API and the java-tron wire types. Two decoders were stricter than what the portal actually serves, so valid blocks halted the stream mid-batch:

Fields Codec (Rust) Proto type Before After
tx expiration, tx timestamp, block timestamp TimestampMillisecond (JSON number) int64 NAT (safe-int only) TIMESTAMP_MS (any integer number)
fee, withdrawAmount, unfreezeAmount, withdrawExpireAmount, energyFee, energyUsage, energyUsageTotal, netUsage, netFee, originEnergyUsage, energyPenaltyTotal BigNum (decimal string) int64 BIG_NAT (unsigned) BIG_INT (signed)

feeLimit was already signed (#137); this generalizes that fix to every int64 amount field, since they share the same BigNum codec and can all be negative. No public types change: timestamp fields stay number, amount fields stay bigint.

Full Changelog: pipes-v1.0.0-alpha.21...pipes-v1.0.0-beta.1

@subsquid/pipes-ui v1.0.0-beta.1

Pre-release

Choose a tag to compare

@subsquid/pipes-cli v1.0.0-beta.1

Pre-release

Choose a tag to compare

@subsquid/pipes v1.0.0-alpha.21

Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Jul 12:23
706307d

@subsquid/pipes-ui v1.0.0-alpha.8

Pre-release

Choose a tag to compare

Fleet overview and a command palette

The dashboard now opens on a fleet-wide view — every configured server at a glance — and a cmd/ctrl+K palette lets you jump anywhere without reaching for the mouse.

Dashboard

  • Fleet overview is the landing view — per-pipe cards with live stats polled across all configured servers, so you see the whole fleet before drilling into a single pipe.
  • Atomic multi-param navigation — server, pipe, and tab selection move together in one URL update, with hardened numeric param parsing so deep links and refreshes land exactly where you expect.

Command palette

  • cmd/ctrl+K opens a command palette built on dialog/command primitives with a tested command registry. Pipes rank first, and per-pipe shortcuts jump straight to that pipe's Profiler, Data samples, or Query tab.

Full Changelog: 6279b63...pipes-ui-v1.0.0-alpha.8

Resume no longer takes a false fork on multi-range queries

Choose a tag to compare

Resume no longer takes a false fork on multi-range queries

Core

  • Resuming a query with disjoint ranges no longer forks spuriously — the recovered cursor's hash was sent as the parent-linkage anchor for every configured range. For a later, disjoint range the cursor is not the predecessor of that range's first block, so the portal answered a linkage mismatch and the run took a false fork. The anchor is now carried only on the range that continues directly from the cursor; later ranges start unanchored and re-establish the anchor from their own first block.
  • A cyclic or deeply nested payload no longer crash-loops the pipe — the metrics preview packer recursed with no depth or cycle guard and overflowed the stack. It now truncates beyond depth 8.

Chains (EVM)

  • Pre-London and pre-Cancun blocks decode againbaseFeePerGas, blobGasUsed and excessBlobGas are absent on older blocks and on some chains, but the header codec required them and rejected otherwise valid headers. All three are optional now, and tolerate an explicitly null value.
  • Per-transaction blobGasUsed and blobGasPrice (EIP-4844) can be selected and decoded — the portal served them, the transaction shape omitted them.

Targets

  • The Parquet target reports profiler spans — the user onData handler, the finalized-row flush, and each checkpoint's publish and cursor write now appear in the flame chart, the /profiler endpoint and OTEL, as they already did for the ClickHouse, BigQuery and Postgres targets.

Full Changelog: pipes-v1.0.0-alpha.19...pipes-v1.0.0-alpha.20

@subsquid/pipes v1.0.0-alpha.19

Pre-release

Choose a tag to compare

Prerelease. Install with npm i @subsquid/pipes@alpha.

EVM

  • Portal trace results accept null gasUsed on failed/reverted CREATE and CALL frames. Such a frame carries a result envelope with no gas attributed to it, so gasUsed legitimately comes through null — the same family as the reverted-CREATE null address relaxed in alpha.18. The strict validator previously rejected these real mainnet traces; TraceCreateResult.gasUsed / TraceCallResult.gasUsed are now nullable. Block- and transaction-level gasUsed are unchanged (always present).

ClickHouse

  • A missing class-A repair hook is now surfaced as an error instead of letting the target diverge silently.

What to test

Any EVM traces pipeline that touches reverted/failed CREATE or CALL frames (previously a validation throw on null gasUsed).

@subsquid/pipes v1.0.0-alpha.18

Pre-release

Choose a tag to compare

Prerelease. Install with npm i @subsquid/pipes@alpha.

Parquet target

  • Pluggable segment-writer engine (#124). settings.engine on parquetTarget now accepts any ParquetEngine implementation; the SDK ships parquetjsEngine as the built-in, zero-config default. The target owns staging, coverage-window naming, output verification, publication and crash recovery; an engine owns only the rows→Parquet-file step, so alternative encoders (e.g. a DuckDB-backed engine) can plug in without touching durability or recovery.
  • Encoding options moved to the engine factory. settings.rowGroupSize and settings.compression are removed — pass them to the engine instead: parquetjsEngine({ rowGroupSize, compression }). Zero-config behaviour is unchanged (same 100k / SNAPPY defaults).
  • Files are named for the block window they cover (#123), <from>-<to>.parquet, not for the min/max block of the rows inside them. A range absent from a table's filenames now means "not indexed" rather than "indexed, no data". Locate a block's rows via the row-group footer statistics, not the filename. This changes on-disk layout; existing datasets are read back correctly, but contiguity begins from the upgrade point.

EVM

  • Portal trace shapes accept nulls that occur on-chain: a reverted CREATE whose result.address is null, and suicide traces carrying a null address / balance. Previously these made trace validation throw.

Solana

  • A decoder now covers exactly one program/ABI, making multi-program decode wiring explicit.

Decoding (EVM + Solana)

  • Unified decode-error hook policy across EVM and Solana, so both surface decode failures through the same mechanism.

Breaking changes

  • parquetTarget: settings.rowGroupSize / settings.compression removed — use the engine factory. The exported ParquetStore constructor now takes an engine.
  • Parquet on-disk file naming changed to coverage windows (see above).

What to test

Parquet backfills end to end — file naming, rollover, and crash-recovery — plus any EVM traces pipeline that touches reverted CREATE / self-destruct traces.