Skip to content

Releases: tempoxyz/tidx

tidx@0.5.5

04 May 01:48
3aadfed

Choose a tag to compare

Patch Changes

  • Harden PostgreSQL SQL validation by fixing CTE scope handling, schema-qualified table checks, recursive depth accounting, LIMIT ALL rejection, and traversal of previously unchecked AST clauses. (by @brendanryan, #179)
  • Validate public ClickHouse queries, block system catalogs and dangerous table functions, enforce ClickHouse request timeouts, and validate view SELECT SQL before execution. (by @brendanryan, #180)
  • Bound PostgreSQL query result processing by streaming rows with a hard request limit and appending automatic LIMIT clauses on a separate line. (by @brendanryan, #181)
  • Hardened view administration by failing closed for trusted CIDR checks, rejecting malformed CIDR configuration, hot-reloading active trusted CIDRs, and requiring an explicit admin mutation header. (by @brendanryan, #182)
What's Changed

New Contributors

Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.5.4...tidx@0.5.5

tidx@0.5.4

27 Apr 21:08
464340e

Choose a tag to compare

Patch Changes

  • Added pgroll support to the tidx binary and Docker image, including bundled (by @o-az, #175)

Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.5.3...tidx@0.5.4

tidx@0.5.3

21 Apr 19:42
e192b3f

Choose a tag to compare

Patch Changes

  • Fixed a migration ordering issue. (by @o-az, #172)

Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.5.2...tidx@0.5.3

tidx@0.5.2

21 Apr 14:53
c74f239

Choose a tag to compare

Patch Changes

Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.5.1...tidx@0.5.2

tidx@0.5.1

24 Mar 19:35
e01d91c

Choose a tag to compare

What's Changed

  • feat: /status endpoint & remove Andantino references by @o-az in #149
  • chore: release tidx@0.5.1 by @github-actions[bot] in #150

Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.5.0...tidx@0.5.1

tidx@0.5.0

24 Mar 02:53
dc12daf

Choose a tag to compare

What's Changed

  • feat: add ClickHouse HTTP basic auth support by @gakonst in #105
  • fix: enable native-tls for ClickHouse HTTPS connections by @gakonst in #106
  • fix: persist CH backfill cursor in PG to prevent gaps after restart by @gakonst in #107
  • Faster clickhouse backfill by @kamsz in #108
  • fix: retry CH backfill on failure instead of giving up by @decofe in #109
  • fix: correct backfill_remaining_blocks metric in gap-fill paths by @kamsz in #110
  • fix: support Basic auth scheme in rate limit bypass by @goksu in #111
  • feat: remove API rate limiting by @goksu in #112
  • feat: where filter pushdown by @gorried in #113
  • fix: populate txs.gas_used by @gorried in #115
  • fix: cap receipt backfill batch range to 10 blocks by @decofe in #116
  • fix: adaptive receipt backfill splits range on RPC response too large by @decofe in #117
  • perf: batch UPDATE txs once per tick instead of per-range in receipt backfill by @decofe in #118
  • feat: add api_pg_url for read replica support by @decofe in #119
  • perf: drop redundant ASC indexes by @decofe in #121
  • perf: move statement_timeout=0 to pool config by @decofe in #123
  • perf: parallelize PG and CH writes in SinkSet by @decofe in #122
  • perf: parallelize block/tx/log/receipt writes within each batch by @decofe in #124
  • perf: increase pool size for parallel write concurrency by @decofe in #130
  • perf: bound gap detection query to avoid full-table scan by @decofe in #127
  • test: add has_gaps integration tests by @decofe in #131
  • fix: restore per-connection statement_timeout for sync writers by @decofe in #132
  • perf: switch write_blocks to COPY BINARY by @decofe in #128
  • perf: replace DELETE+COPY with staging table ON CONFLICT DO NOTHING by @decofe in #129
  • perf: single PG transaction for batch writes by @decofe in #138
  • perf: drop redundant idx_logs_topic1 index by @decofe in #137
  • perf: drop redundant block_num DESC indexes by @decofe in #133
  • perf: use bare CREATE TEMP TABLE instead of LIKE by @decofe in #135
  • perf: use bare CREATE TEMP TABLE in write_batch by @decofe in #143
  • perf: use single transaction for realtime block+tx writes by @decofe in #144
  • fix: make receipt backfill writes atomic by @decofe in #142
  • feat: CLI improvements + agent skills by @jxom in #145
  • fix: fetch receipts+logs inline during realtime sync by @o-az in #141
  • fix: use latest tag for tidx docker image by @jxom in #146
  • chore: add changeset for v0.5.0 by @jxom in #147
  • chore: release tidx@0.5.0 by @github-actions[bot] in #148

New Contributors

Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.4.0...tidx@0.5.0

tidx@0.4.0

25 Feb 08:00
16c6465

Choose a tag to compare

Minor Changes

  • Dual-Sink Architecture & ClickHouse Direct-Write

  • Migrated ClickHouse from MaterializedPostgreSQL replication to a direct-write dual-sink architecture. Data is now written to both PostgreSQL (primary) and ClickHouse (secondary) in parallel using the official clickhouse crate with RowBinary format and LZ4 compression.
    New features:
  • Dual-sink fan-out writer — new SinkSet abstraction writes to PG and optionally CH in sequence. CH failures are fatal and propagate to the caller. Reorg deletes cascade to both sinks. (#89)
  • ClickHouse direct-write sink — replaces reqwest/JSONEachRow with the official clickhouse crate. Uses typed Row-derived wire structs, chunked inserts (2,000 rows/chunk), retry with exponential backoff (3 attempts), and per-chunk send/end timeouts. (#101)
  • Automatic CH backfill from PG — on startup, each table is independently backfilled from its PG high-water mark using block-range pagination (5,000 blocks/batch) with short-lived connections to avoid blocking autovacuum. (#89)
  • ReplacingMergeTree — CH tables use ReplacingMergeTree() for idempotent writes, allowing safe retries without duplicate data after background merges. (#101)
  • Per-sink write rates in status — rolling block/sec rate tracker for each sink, displayed in both CLI and HTTP status endpoints. (#90)
  • Instant status via in-memory watermarks — per-table high-water marks and row counts tracked with atomics, eliminating table scans from status queries. Seeded from DB on startup for immediate accuracy. (#91, #97, #98)
  • Improved status display — blocks show backfill progress as percentage, other tables show row counts, backfill ETA based on sync rate, and gap count. (#93, #94, #99)
    Fixes:
  • Terminate stale PG connections before migrations to prevent DDL lock contention on container restart. (#95)
  • Retry sync engine creation on transient RPC failures with 10s backoff. (#96)
  • Sanitize all format-interpolated SQL identifiers (database names, table names, view order_by columns, engine parameter) against injection. Whitelist known tables, validate identifiers, and restrict engine to allowed MergeTree variants. (#102) (by @jxom, #103)

Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.3.1...tidx@0.4.0

tidx@0.3.1

22 Feb 21:34
3b0dbbd

Choose a tag to compare

Patch Changes

  • Fixed array type parsing in event signatures (uint256[], uint256[N]) which previously returned "Invalid uint size". Added missing SQL functions to query allowlist (date, date_part, to_char, array_agg, string_agg, etc.). Removed references to non-existent token_holders/token_balances tables. (by @jxom, #84)

Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.3.0...tidx@0.3.1

tidx@0.3.0

22 Feb 08:23
33fc131

Choose a tag to compare

Minor Changes

  • Added support for multiple event signatures per query. The HTTP API now accepts repeated signature query params (?signature=Transfer(...)&signature=Approval(...)) and the CLI accepts multiple -s flags. Each signature generates a separate CTE, enabling cross-event queries like SELECT * FROM Transfer UNION ALL SELECT * FROM Approval. (by @jxom, #83)

Patch Changes

  • Hardened SQL query API: replaced string-based injection with AST manipulation, switched from function blocklist to allowlist, added table allowlist, enforced reject-by-default expression validation, capped LIMIT/depth/size, and locked down API role with connection and resource limits. (by @jxom, f9da1eb)

0.2.0 (2026-02-06)

Minor Changes

  • Support PostgreSQL password via environment variable. Add pg_password_env config option to inject the password from an env var into pg_url at runtime, avoiding plaintext passwords in config files. Existing configs without pg_password_env work unchanged. (by @GeorgiosKonstantopoulos, #72)
  • Add ClickHouse failover support for multi-instance per chain. Reads go to the primary instance; connection-level errors (refused/timeout/DNS) trigger automatic failover to the next instance. Each instance runs its own MaterializedPostgreSQL replication. Configure with failover_urls in [chains.clickhouse]. Existing single-URL configs work unchanged. (by @GeorgiosKonstantopoulos, #71)

Patch Changes

  • Handle SIGTERM for graceful container shutdown. Previously only SIGINT (ctrl-c) triggered graceful shutdown; now SIGTERM from Kubernetes/Docker also triggers the same broadcast for clean connection draining. (by @GeorgiosKonstantopoulos, #71)

0.2.0 (2026-02-06)

Minor Changes

  • Add ClickHouse failover support for multi-instance per chain. Reads go to the primary instance; connection-level errors (refused/timeout/DNS) trigger automatic failover to the next instance. Each instance runs its own MaterializedPostgreSQL replication. Configure with failover_urls in [chains.clickhouse]. Existing single-URL configs work unchanged. (by @Tempo-ai, a74f174)

0.1.3 (2026-02-03)

Patch Changes

0.1.2 (2026-02-03)

Patch Changes

  • Fix ClickHouse DDL statement handling. DDL statements like CREATE DATABASE and CREATE TABLE return empty responses, which previously caused JSON parsing errors. Now handles empty responses gracefully. (by @jxom, 09573e1)

0.1.1 (2026-02-03)

Patch Changes

  • Fix ClickHouse hex literal handling for MaterializedPostgreSQL.
    Input: Use concat(char(92), 'x...') instead of '\x...' for WHERE clause comparisons because ClickHouse interprets \x as an escape sequence.
    Output: Convert \x... to 0x... in query results for standard Ethereum hex format, matching PostgreSQL behavior. (by @jxom, e15afa5)

0.1.0 (2026-02-03)

Minor Changes

  • Add predicate pushdown for indexed event parameters.
  • Rewrites SQL filters like "from" = '0x...' to topic1 = '0x000...' to enable index usage
  • Add signature parameter to /views API for automatic CTE generation and decoding
  • Support both PostgreSQL and ClickHouse query engines (by @jxom, 0bca021)

Patch Changes

  • Fix hex literal conversion to preserve 0x prefix in concat expressions.
  • The naive replace("'0x", "'\\x") was incorrectly converting concat('0x', ...) to concat('\x', ...), causing addresses to display as \x... instead of 0x.... Now uses regex to only convert hex literals with 40+ characters. (by @jxom, 0bca021)

0.0.37 (2026-02-03)

Patch Changes

  • Adds columns array to the /views?chainId=... response with column names and types. (by @jxom, c2001e4)

0.0.36 (2026-02-03)

Patch Changes

Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.2.0...tidx@0.3.0

tidx@0.2.0

11 Feb 01:17
1f12ed1

Choose a tag to compare

What's Changed

  • feat: ClickHouse failover support for multi-instance per chain by @gakonst in #70
  • fix: handle SIGTERM for graceful container shutdown by @gakonst in #71
  • feat: support PostgreSQL password via environment variable by @gakonst in #72
  • chore: release tidx@0.2.0 by @github-actions[bot] in #73
  • fix: resolve clippy warnings in tests by @gakonst in #74
  • fix: security hardening for SQL query API by @gakonst in #81

Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.1.3...tidx@0.2.0