Skip to content

2026-07-30

Latest

Choose a tag to compare

@github-actions github-actions released this 30 Jul 15:50

EVM: automatic portal/RPC failover

The new @subsquid/squid-sdk umbrella package exposes a fluent fallback data source that fails over between Portal and RPC sources, and run() now registers a source's own Prometheus metrics automatically. EVM ingestion gains configurable debug call-frame validation modes (off / observe / reject), and the TypeORM stack gains a configurable data schema via DB_SCHEMA across config, migrations and the GraphQL server.

@subsquid/evm-data-service 0.1.0

Minor changes

  • add a call-frame validation mode option for EVM data-service ingestion

@subsquid/evm-data-service 0.0.6

Patches

  • Adding support for debug_traceBlockByNumber

@subsquid/evm-dump 0.1.0

Minor changes

  • add a call-frame validation mode option to the EVM archiver CLI

@subsquid/evm-dump 0.0.2

Patches

  • Adding support for debug_traceBlockByNumber

@subsquid/evm-normalization 0.0.6

Patches

  • include transaction and trace-address context in debug call-frame mapping errors

@subsquid/evm-normalization 0.0.3

Patches

  • Release to npm via GitHub Actions trusted publishing (OIDC)

@subsquid/evm-rpc 0.1.0

Minor changes

  • validate debug call-frame mapper safety and add off, observe, and reject modes for semantic consistency checks

Patches

  • encode Stable 0x3f transaction nonceKey as a quantity (uint) instead of a byte string

@subsquid/evm-rpc 0.0.5

Patches

  • fix(data-source): decouple finalization from head ingestion — the finalizer no longer emits the finalized head as its own empty batch (which shared the output queue with head blocks and could stall ingestion). The latest finalized head is now attached to the next head batch instead; deferring it is safe because finality lags the head and the consumer max-guards it. Part of NET-408.

@subsquid/evm-rpc 0.0.4

Patches

  • trace_block: pass block.number instead of block.hash, and fail early if traces are missing for any transaction

@subsquid/evm-rpc 0.0.3

Patches

  • Release to npm via GitHub Actions trusted publishing (OIDC)
  • Add pre-Byzantium post-state root to receipts verification (allows verifying receipts for Ethereum mainnet blocks 0 - 4,369,999)

@subsquid/evm-rpc 0.0.2

Patches

  • The log ordering issue fix + support for debug_traceBlockByNumber

@subsquid/evm-stream 0.1.3

Patches

  • fix(portal): PortalEvmDataSource now honours StreamRequest.to — a bounded getStream/getFinalizedStream call terminates at to instead of ignoring it and following the chain head. This matches the RPC data source, so the two DataSource implementations agree on where a bounded stream ends. The production run() path is unaffected (it bounds via request ranges and never passes to); direct DataSource API consumers passing to were.

@subsquid/evm-stream 0.1.1

Patches

  • remove @subsquid/rpc-client dependency

@subsquid/evm-stream 0.1.0

Minor changes

  • Drop DEFAULT_FIELDS; .setFields() is now the sole source of selected fields

@subsquid/fuel-stream 1.2.0

Minor changes

  • Drop DEFAULT_FIELDS; .setFields() is now the sole source of selected fields

@subsquid/graphql-server 4.12.1

Patches

  • Honor DB_SCHEMA on the TypeORM context path: stop overwriting the connection extra, so the search_path from @subsquid/typeorm-config is preserved

@subsquid/openreader 5.5.1

Patches

  • Truncate generated table names to the PostgreSQL identifier limit (63 bytes) so queries target the same table @subsquid/typeorm-codegen creates for over-long entity names. Previously OpenReader emitted the full untruncated name and relied on the server truncating it to match — which only holds when the server's NAMEDATALEN equals the default. On a build with a larger NAMEDATALEN the reference would miss the (already-pruned) table; it now works regardless of NAMEDATALEN. No effect on entity names within the limit.

@subsquid/hyperliquid-fills-data-service 0.0.3

Patches

  • reopen the gateway subscription when it keeps streaming stale blocks

@subsquid/squid-sdk 0.5.0

Minor changes

  • expose call-frame validation modes and shadow-observe consistency violations in standard EVM network presets

@subsquid/squid-sdk 0.4.0

Minor changes

  • evm/fallback: richer setDownstreamSources docstring (all type variants + a portal/rpc @example) so the empty-array call site is self-documenting. evm/rpc: network is now typed EvmNetwork — the known preset slugs autocomplete while any other slug/chainId is still accepted (KnownNetwork is derived from the shipped presets and test-guarded against drift). Editor discoverability: the build emits a directory redirect per subpath so nested paths like @subsquid/squid-sdk/evm/ autocomplete their children under classic (node10) resolution. The fallback subpath now re-exports only its intended public surface — the supervisor, its options/metrics, the policy, the all-down error, the capability-probe API, and the metrics sink; internal helpers (redactUrl, redactText, classifyError, freshnessFailure, capabilityFailure, resolvePolicy, ResolvedPolicy, Selector, SourceHealth) that were previously reachable through it are no longer exported. New subpaths: evm/objects (@subsquid/evm-objects), processor (@subsquid/batch-processor), and store/typeorm (@subsquid/typeorm-store; needs typeorm/@subsquid/big-decimal peers).
  • feat(fallback): FallbackDataSource now exposes getMetricsSink(), so a fallback source passed to the batch-processor's run() gets its sqd_fallback_* gauges registered on /metrics automatically — no manual addMetricsSink(fallbackMetricsSink(src)) needed. fallbackMetricsSink is now idempotent per registry, so a leftover manual registration alongside the automatic one no longer throws on duplicate gauge names.

@subsquid/squid-sdk 0.3.0

Minor changes

  • evm/fallback: downstream sources are now plain tagged config objects ({type: 'portal'|'rpc'|'custom', name?, ...}) instead of builder classes; the fallback applies the shared field selection + query to every source at build(). The 'custom' escape hatch takes a buildSource(fields, requests) that receives the shared query (nothing is exempt). evm/rpc: add a fluent EvmRpcDataSourceBuilder — the RPC counterpart of evm-stream's DataSourceBuilder (identical query surface, setRpc instead of setPortal) — for standalone single-source use. The low-level evmRpcStream function is no longer part of the public evm/rpc surface (use EvmRpcDataSourceBuilder). BREAKING: removes EvmPortalDataSourceBuilder/EvmRpcDataSourceBuilder/EvmDownstreamSourceBuilder from evm/fallback and evmRpcStream/EvmRpcStreamConfig from evm/rpc; adds EvmFallbackSourceConfig and (in evm/rpc) EvmRpcDataSourceBuilder + EvmRpcOptions. Ergonomics: an RPC source with no matching network preset and no explicit rpc/method overrides now logs a warning that validation is off and Portal parity is unverified (instead of silently disabling validation); and evm/fallback re-exports AllSourcesDownError + FallbackPolicy so consumers can catch/type them without also importing @subsquid/squid-sdk/fallback.

@subsquid/squid-sdk 0.2.0

Minor changes

  • evm/fallback: new fluent EvmFallbackDataSourceBuilder (with EvmPortalDataSourceBuilder / EvmRpcDataSourceBuilder) mirroring @subsquid/evm-stream's DataSourceBuilder. BREAKING: removes the old createEvmFallbackSource / EvmFallbackOptions / EvmFallbackSourceConfig API.

@subsquid/squid-sdk 0.1.1

Patches

  • Release to npm via GitHub Actions trusted publishing (OIDC)

@subsquid/squid-sdk 0.1.0

Minor changes

  • New umbrella package exposing SDK data sources and utilities as subpaths; folds in @subsquid/evm-rpc-stream and @subsquid/evm-fallback-stream (standalone versions removed) and re-exports the core *-stream and util packages.

Patches

  • Drop the starknet subpath: @subsquid/starknet-stream is uninstallable from npm because its @subsquid/starknet-rpc@^0.0.2 dependency is docker-policy and unpublished (only 0.0.1 on npm), which broke npm install @subsquid/squid-sdk.
  • Add the ./package.json subpath export (an exports map is a hard allowlist, so require('@subsquid/squid-sdk/package.json') previously threw ERR_PACKAGE_PATH_NOT_EXPORTED) and an in-package guard test keeping the exports/typesVersions/barrel maps in sync. Internal fallback-supervisor and evm/rpc refactors (shared timeout/iterator-close helpers, a selectActive failover generator, aggregate logs/receipts de-duplication) with no public API change.

@subsquid/batch-processor 1.1.0

Minor changes

  • feat(run): auto-register a data source's own Prometheus metrics. If the source exposes an optional getMetricsSink(): MetricsSink (duck-typed, so the minimal DataSource interface keeps no prom-client dependency), run() adds it to the metrics server alongside the runner metrics — so source-provided gauges (e.g. a fallback source's sqd_fallback_*) appear on /metrics with no manual addMetricsSink wiring.

@subsquid/solana-data-service 0.0.7

Patches

  • Add incActiveWorkers/decActiveWorkers accounting (already present in the EVM/TRON data services) so belowQuery worker threads are released correctly.

@subsquid/solana-stream 1.1.1

Patches

  • remove @subsquid/rpc-client and @subsquid/solana-rpc dependencies

@subsquid/solana-stream 1.1.0

Minor changes

  • Drop DEFAULT_FIELDS; .setFields() is now the sole source of selected fields

@subsquid/starknet-stream 1.2.0

Minor changes

  • Drop DEFAULT_FIELDS; .setFields() is now the sole source of selected fields

@subsquid/tron-data-service 0.0.0

Initial release

@subsquid/typeorm-codegen 2.4.0

Minor changes

  • Generate stable, readable index names of the form idx_<entity>_<fields>_<hash> instead of relying on TypeORM's opaque IDX_<hash> names. The default names are derived from the table name, so they change whenever a table name changes (e.g. when it is pruned to fit the identifier limit), forcing migrations to drop and recreate indexes. The generated names are derived from the entity/field identity and capped at the PostgreSQL identifier limit with a deterministic hash suffix that guarantees uniqueness. NOTE: upgrading an existing squid renames all of its indexes once (a one-time drop/recreate on the next migration), after which migrations stay stable.

@subsquid/typeorm-codegen 2.3.0

Minor changes

  • Prune entity table names that exceed the PostgreSQL identifier length limit (63 bytes) instead of letting Postgres truncate them silently. A warning is emitted for every pruned name and codegen now fails if two entities collide within the limit. This keeps generated schema and TypeORM migrations consistent (previously over-long names broke squid-typeorm-migration generate/apply).

Patches

  • Add a Vitest test suite covering resolveTableNames (identifier-limit truncation, collisions, warnings) and generateOrmModels/generateFtsMigrations across every schema-file feature (scalars, arrays, indexes, relations, @derivedFrom lookups, @query interfaces, typed JSON, unions, fulltext).

@subsquid/typeorm-config 4.2.0

Minor changes

  • Export getDataSchema() — the validated DB_SCHEMA name — so tooling (e.g. migrations) can ensure the data schema exists
  • Add a configurable data schema via the DB_SCHEMA env var, threaded as a connection-level search_path (with an opt-in DB_SCHEMA_INCLUDE_PUBLIC tail)

Patches

  • Double-quote DB_SCHEMA in the search_path so its case is preserved, matching how typeorm-store qualifies stateSchema (lets DB_SCHEMA and stateSchema be the same value)

@subsquid/typeorm-migration 1.4.0

Minor changes

  • apply now creates the data schema (CREATE SCHEMA IF NOT EXISTS) when DB_SCHEMA is set, so migrations and the migrations ledger land in it

Patches

  • Double-quote the schema in apply's CREATE SCHEMA so its case matches the quoted search_path (data and state resolve to the same schema)

@subsquid/typeorm-store 1.9.2

Patches

  • Fix connect() crash-looping on a deep hot window: express the orphan-repair pass as NOT EXISTS anti-joins instead of NOT IN (SELECT ...), which the planner degrades to a per-row rescan once the subquery no longer fits in work_mem

@subsquid/portal-client 0.6.0

Minor changes

  • getHead / getFinalizedHead now retry a transient JSON-null head with a short, finite backoff (configurable via headRetrySchedule), preventing spurious "portal has no finalized head" failures while a dataset's head is being (re)established after a portal store cold-start.

@subsquid/portal-client 0.5.2

Patches

  • Portal client now makes six retry attempts by default

@subsquid/rpc-client 4.16.0

Minor changes

  • redact credentials from RPC endpoint metadata and expose a shared endpoint-redaction helper

@subsquid/rpc-client 4.15.1

Patches

  • Better RPC error propagation for non-matching id values

@subsquid/util-internal-data-service 0.1.1

Patches

  • Prevent worker-thread leaks in belowQuery by closing the upstream iterator when the generator is terminated at its first yield or when .head is never iterated.
  • Terminate /stream response processing as soon as the client disconnects, releasing an abandoned belowQuery backfill (and its worker threads) instead of running it until the 60s duration limit.

@subsquid/util-internal-ingest-tools 1.2.0

Minor changes

  • relax continuity check in hot processor

@subsquid/util-internal-json 1.2.4

Patches

  • Visible Error.cause (PR#492)

@subsquid/util-internal 3.3.1

Patches

  • More structured logs for runProgram (PR#492)

Contributors

@abernatskiy, @belopash, @elina-chertova, @kalabukdima, @karelxfi, @Lezek123, @mo4islona, @tmcgroul

Full Changelog: 2026-05-11...2026-07-30