Skip to content

Releases: enviodev/hyperindex

v3.2.1

16 Jun 13:56
8e78d11

Choose a tag to compare

What's Changed

  • Improve envio init UX for agents and non-interactive mode by @DZakh in #1323
  • Validate ClickHouse nullable array fields during schema parsing by @DZakh in #1325
  • Handle non-entity table loads in TestIndexer by @DZakh in #1324
  • Remove deprecated subgraph migration feature by @DZakh in #1326
  • Improve indexing performance with topic filtering by addresses by @DZakh in #1329

Full Changelog: v3.2.0...v3.2.1

v3.2.0

11 Jun 16:45
4db81a3

Choose a tag to compare

What's Changed

Filter by multiple fields with getWhere 🔭

await context.Account.getWhere({
  id: {
    _eq: "0x123...",
  },
  balance: {
    _gte: 1_000_000n,
    _lte: 10_000_000n,
  },
});

Additionally, we noticeably improved the performance of getWhere with a single _eq or _in filter by optimizing the number of round trips to the database.

By @DZakh in #1303, #1306, #1310, #1313, #1316, #1315, #1318, #1317, #1320

Multi-storage improvements 🫙

Now it's possible to mark storages as default to automatically assign an entity to the storage. It allows you not to set @storage attribute for every entity in schema.graphql and only use it as a default overwrite.

storage:
  postgres:
    default: true
  clickhouse:
    default: true

By @DZakh in #1297

Column Name Format 💄

Configure automatic conversion for column names in your database to snake_case. It only affects the underlying database, so GraphQL and handler types will preserve the original names derived from schema.graphql.

storage:
  postgres:
    column_name_format: snake_case

By @DZakh in #1300

More Experimental Solana Features 🤐

We added support for HyperSync-powered instruction handlers. Reach out to us if you're interested in becoming an early tester.

By @JasoonS and @DZakh in #1287, #1301, #1307, #1309, #1314

Critical Bug Fixes 🚨

  • Fix critical bugs causing an indexer crash introduced by v3.1
    • Flush in-flight batch writes before computing rollback diffs by @DZakh in #1305
    • Duplicate history rows from concurrent batch writes by @DZakh in #1312
  • Handle missing transaction data as retryable RPC errors - previously it would incorrectly disable the source by @DZakh in #1304
  • Make config path root-relative in start command by @DZakh in #1296
  • Validate duplicate addresses in config at parse time by @DZakh in #1311

Internal Work 🧹

Full Changelog: v3.1.2...v3.2.0

v3.1.2

08 Jun 12:35
c59ef13

Choose a tag to compare

What's Changed

  • Fix event decoding for renamed events by @DZakh in #1288
  • Fix onBlock handlers without event handlers by @DZakh in #1289

Full Changelog: v3.1.1...v3.1.2

v3.1.1

05 Jun 15:18
ea4e258

Choose a tag to compare

What's Changed

  • Fix effect cache returning nested-option sentinel for None by @DZakh in #1284
  • Fix same-signature event decoding across contracts with different param names by @DZakh in #1286

Full Changelog: v3.1.0...v3.1.1

v3.1.0

04 Jun 12:16
8b446eb

Choose a tag to compare

What's Changed

2x Cheaper And 2.5x Faster 📈

We are yet to reach our full potential. And the new HyperIndex release comes with a nice improvement: it requires up to 2x fewer HyperSync queries for backfill and is 2.5x faster in many indexing cases.

By @DZakh in #1212, #1235, #1244, #1247, #1246, #1243, #1248, #1250, #1256, #1258, #1263, #1264, #1265, #1266, #1267, #1269

Descriptions On Entities, Fields, And Relationships 📝

Describe your entities, fields, and relationships in the schema.graphql file, so that they are exposed in the GraphQL API.

# Hash comments are ignored by the GraphQL parser and should NOT appear
# in introspection. Only string descriptions ("""...""" or "...") are exposed.

"An on-chain account participating in transfers"
type Account {
  "The account's Ethereum address"
  id: ID!
  "All transfers sent from this account"
  outgoing: [Transfer!]! @derivedFrom(field: "from")
}

By @DZakh in #1181

Improve Agentic Indexer Development Experience 🤖

  • Add envio tools search-docs <query> subcommand by @DZakh in #1237
  • Add envio tools fetch-docs <url> subcommand by @DZakh in #1237
  • Add envio metrics runtime subcommand by @DZakh in #1281
  • Clean up skills provided by envio init and envio skills update by @DZakh in #1234

Rate-Limit Info In TUI And Logs ℹ️

Improve HyperSync rate-limit handling by showing rate-limit information in TUI and logs.

By @DZakh in #1268

Skip Chains From Indexing ⏭️

Excludes the chain from indexing and migrations by adding the skip field to the chain in the config.yaml file.

🚧 This is an advanced feature. For testing, prefer a test framework instead.

chains:
  - id: 1
    skip: true

By @DZakh in #1232

Fix Indexer Startup With 4.5M+ Contracts ⛰️

By @DZakh in #1259

Other Fixes And Improvements 🔧

  • Remove unnecessary height polling when buffer reached the head, but events are still unprocessed by @DZakh in #1230
  • Remove cargo-cache action from publishing workflow to avoid potential exploitation by @DZakh in #1231
  • Remove ordered multichain internal implementation by @DZakh in #1233
  • Remove HyperSync chain tier tracking by @DZakh in #1236
  • Improve HyperIndex contributing experience by @DZakh in #1251, #1253
  • Simplify ERC20 template by removing unnecessary toString() calls by @DZakh in #1252
  • Persist all entity history changes to ClickHouse (note: this is internal implementation details and will change in the future) by @DZakh in #1257
  • Fix DDOS from height polling triggered by stale SSE connections by @JonoPrest in #1271, #1272

Full Changelog: v3.0.2...v3.1.0

v3.1.0-rc.2

03 Jun 15:12
eceab32

Choose a tag to compare

v3.1.0-rc.2 Pre-release
Pre-release

What's Changed

  • Fire batch writes concurrently instead of blocking by @DZakh in #1269

Full Changelog: v3.1.0-rc.1...v3.1.0-rc.2

v3.1.0-rc.1

02 Jun 15:12
67fbdbb

Choose a tag to compare

v3.1.0-rc.1 Pre-release
Pre-release

What's Changed

  • Handle memory limit exceeded by dropping batch writes by @DZakh in #1267
  • Handle HyperSync rate limits in SourceManager with no internal sleep by @DZakh in #1268
  • Fix stale SSE heights spawning concurrent /height polls by @JonoPrest in #1271
  • Move HyperSync getHeight to the Rust hypersync client by @DZakh in #1272

Full Changelog: v3.1.0-rc.0...v3.1.0-rc.1

v3.1.0-rc.0

01 Jun 15:25
7dc0024

Choose a tag to compare

v3.1.0-rc.0 Pre-release
Pre-release

What's Changed

  • Embed HyperSync client into envio NAPI addon by @DZakh in #1212
  • Fix polling stall when buffer is at head but events unprocessed by @DZakh in #1230
  • Remove cargo-cache action from build-platforms workflow by @DZakh in #1231
  • Add support for descriptions on entities, fields, and relationships by @DZakh in #1181
  • Add skip field to exclude chains from indexing by @DZakh in #1232
  • Remove ordered multichain mode support by @DZakh in #1233
  • Remove migrate-from-subgraph skill; add indexer-troubleshooting by @DZakh in #1234
  • Remove chain tier tracking from network validation by @DZakh in #1236
  • Add tools command for searching and fetching Envio docs by @DZakh in #1237
  • Refactor event decoding to use native Rust decoder with param metadata by @DZakh in #1235
  • Make InMemoryStore a per-indexer singleton by @DZakh in #1244
  • Move writeBatch/prepareRollbackDiff onto InMemoryStore by @DZakh in #1247
  • Move event decoding into HyperSync client initialization by @DZakh in #1246
  • Refactor reorg detection to accept block hashes dict instead of structured guard by @DZakh in #1243
  • Remove generic type parameters from Entity and related types by @DZakh in #1248
  • Refactor InMemoryTable to use dict instead of custom table type by @DZakh in #1250
  • Remove helpers package and inline ChainMocking into test_codegen by @DZakh in #1251
  • Relax ReScript compiler warnings and remove unused variable by @DZakh in #1253
  • Simplify ERC20 template by removing unnecessary toString() calls by @DZakh in #1252
  • Refactor rollback handling to track both target and diff checkpoints by @DZakh in #1256
  • Persist all entity history changes to ClickHouse by @DZakh in #1257
  • Fix indexer startup failure with large dynamic contract sets by @DZakh in #1259
  • Refactor InMemoryTable entity storage to track changes by @DZakh in #1258
  • Preserve committed entities across batches without rewriting history by @DZakh in #1263
  • Move committedCheckpointId from ChainManager to InMemoryStore by @DZakh in #1264
  • Simplify InMemoryTable by removing generic wrapper by @DZakh in #1265
  • Track entity changes count to size in-memory store without scanning by @DZakh in #1266

Full Changelog: v3.0.2...v3.1.0-rc.0

v3.0.2

22 May 14:59
6bb0f3d

Choose a tag to compare

What's Changed

Agentic mode in envio init with AI-readable prompts

We fixed envio init to better work for agents. Now it'll produce a guiding output instead of a TTY error and a need to perform a web search for Envio docs.

Now running envio init by your agent will greet you with:

Welcome to Envio Indexer! Let's set up an indexer that will become a reliable blockchain backend you trust, love, and own.

Leave the rest to your favorite agent:

  1. Prompt the user for the project intent if it is missing from context (what should the indexer track and surface?).
  2. Determine the chain, contract, and addresses needed to produce that result. Use web search or block-explorer tool calls when the user hasn't supplied them.
  3. To continue, call:

       pnpx envio init contract-import explorer \
         -n ${indexer-name} \
         -c ${address} \
         -b ${chainId} \
         --single-contract \
         --all-events \
         -d ${directory}

Then `cd ${directory}` and run `pnpm test`. Don't hand the project off yet — keep iterating on the indexer with a TDD loop (extend tests, run them, fix handlers) until the user's goal is met.

By @DZakh in #1228

Other Fixes

  • Fix raw_events write for indexers with a tuple param in an event signature by @DZakh in #1220
  • Add Etherlink, Katana, and Tempo chains to the supported chains list by @nikbhintade in #1219
  • Fix health check when HyperSync API has chains missing from the supported chains list by @nikbhintade in #1223
  • Add ON CLUSTER clause to ClickHouse DDL for replicated databases by @DZakh in #1227

Full Changelog: v3.0.1...v3.0.2

v3.0.1

15 May 15:29
1acbd05

Choose a tag to compare

What's Changed

  • Fix crash when setting entity with omitted nullable FK after getWhere by @DZakh in #1208
  • Fix named tuple components support in config.yaml event signatures by @DZakh in #1211
  • Improve config incompatibility messaging with tiered diffs and recommendation options by @DZakh in #1210

Full Changelog: v3.0.0...v3.0.1