Releases: tempoxyz/tidx
tidx@0.5.5
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
- ci: strengthen cargo verification by @brendanjryan in #183
- fix: bound postgres query results by @brendanjryan in #181
- fix: harden sql validator traversal by @brendanjryan in #179
- fix: harden admin view access by @brendanjryan in #182
- fix: validate clickhouse queries by @brendanjryan in #180
- chore: release
tidx@0.5.5by @github-actions[bot] in #184
New Contributors
- @brendanjryan made their first contribution in #183
Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.5.4...tidx@0.5.5
tidx@0.5.4
Patch Changes
Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.5.3...tidx@0.5.4
tidx@0.5.3
Patch Changes
Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.5.2...tidx@0.5.3
tidx@0.5.2
Patch Changes
- Added support for virtual address detection (by @o-az, @0xrusowsky, @malleshpai #170)
Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.5.1...tidx@0.5.2
tidx@0.5.1
What's Changed
- feat:
/statusendpoint & remove Andantino references by @o-az in #149 - chore: release
tidx@0.5.1by @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
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.0by @github-actions[bot] in #148
New Contributors
- @kamsz made their first contribution in #108
- @decofe made their first contribution in #109
- @goksu made their first contribution in #111
- @gorried made their first contribution in #113
- @o-az made their first contribution in #141
Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.4.0...tidx@0.5.0
tidx@0.4.0
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
clickhousecrate with RowBinary format and LZ4 compression.
New features: - Dual-sink fan-out writer — new
SinkSetabstraction 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
clickhousecrate. Uses typedRow-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
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-existenttoken_holders/token_balancestables. (by @jxom, #84)
Full Changelog: https://github.com/tempoxyz/tidx/compare/tidx@0.3.0...tidx@0.3.1
tidx@0.3.0
Minor Changes
- Added support for multiple event signatures per query. The HTTP API now accepts repeated
signaturequery params (?signature=Transfer(...)&signature=Approval(...)) and the CLI accepts multiple-sflags. Each signature generates a separate CTE, enabling cross-event queries likeSELECT * 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_envconfig option to inject the password from an env var intopg_urlat runtime, avoiding plaintext passwords in config files. Existing configs withoutpg_password_envwork 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_urlsin[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_urlsin[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 DATABASEandCREATE TABLEreturn 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: Useconcat(char(92), 'x...')instead of'\x...'for WHERE clause comparisons because ClickHouse interprets\xas an escape sequence.
Output: Convert\x...to0x...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...'totopic1 = '0x000...'to enable index usage - Add
signatureparameter to/viewsAPI for automatic CTE generation and decoding - Support both PostgreSQL and ClickHouse query engines (by @jxom, 0bca021)
Patch Changes
- Fix hex literal conversion to preserve
0xprefix in concat expressions. - The naive
replace("'0x", "'\\x")was incorrectly convertingconcat('0x', ...)toconcat('\x', ...), causing addresses to display as\x...instead of0x.... 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
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.0by @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