Skip to content

Midnight Indexer 4.3.3

Latest

Choose a tag to compare

@cosmir17 cosmir17 released this 04 Jun 17:09
· 6 commits to main since this release
v4.3.3
a89e1d3

Midnight Indexer 4.3.3 Release Notes

Release date: 2026-06-04

Release type: Patch release (4.3.2 → 4.3.3), Midnight 1.1 indexer line

Git tag: v4.3.3

Tree hash: 1d8a93ff2cd9b5ef9573a42dc8bf9e31b18fe4c3

Environment: All public networks (mainnet, preprod, preview, devnet, qanet)

Note: this release pairs with node 1.0.0 and ledger 8.1.0 and is part of the Midnight 1.1 indexer line. Refer to MNF advisories for current deployment recommendations.

Summary

Final 4.3.3, consolidating the rc.2/rc.3/rc.4 changes. It adds GraphQL WebSocket subscription quotas (#1104), the '@beta' directive for in-flight API fields (#1186), per-tree end indexes on Block (#1197), and a lazy transaction reference on the nullifier event types (#1208), tightens shielded nullifier input validation (#1126), and fixes fresh dustGenerations subscriptions to deliver dtime updates (#1166). It renames the dust nullifier byte fields with a LeBytes suffix (#1199), a breaking change confined to '@beta' (in-flight) fields. 4.3.3 is a patch release on top of 4.3.2: the only breaking change is on '@beta' surface, so there is no stable-API break.

Dependencies

Both dependency bumps in this release are non-functional for the indexer: midnight-ledger 8.1.0 (#1141) is a version bump only from 8.1.0-rc.1, and node 1.0.0 (#1204) regenerated test data against the 1.0.0 release tag (previously 1.0.0-rc.3).

Upgrade from 4.3.2

A patch upgrade: bump the image tag and rolling-restart. It applies one additive migration (Postgres 003_block_tree_end_indexes / SQLite 004_block_tree_end_indexes), which backfills the new Block end-index columns, forward-only, no chain reset. The ledger and node deps were finalised from release candidates (ledger 8.1.0-rc.1 to 8.1.0, node 1.0.0-rc.3 to 1.0.0), non-functional for the indexer.

Docker Images

  • midnightntwrk/chain-indexer:4.3.3
  • midnightntwrk/indexer-api:4.3.3
  • midnightntwrk/wallet-indexer:4.3.3
  • midnightntwrk/indexer-standalone:4.3.3
  • midnightntwrk/spo-indexer:4.3.3

Audience

  • Operators running an indexer on public networks (paired with node 1.0.0).
  • Testnet and devnet administrators.
  • DApp and wallet developers integrating against the indexer GraphQL API, in particular consumers of the dust subscriptions and the dustNullifierTransactions / shieldedNullifierTransactions subscriptions.
  • QA and release managers.

What Changed

Change Type PR
Add subscription quotas to the GraphQL WebSocket New feature #1104
Tighten shielded nullifier transactions input validation New feature #1126
Introduce '@beta' GraphQL directive for in-flight API fields New feature #1186
Add per-tree end indexes to Block New feature (dust end indexes '@beta') #1197
Rename DustNullifier byte fields with LeBytes suffix Breaking ('@beta') #1199
Add transaction reference to nullifier event types New feature ('@beta') #1208
Deliver DustGenerationDtimeUpdate items on fresh dustGenerations subscriptions Fixed defect #1166

New Features

Subscription quotas on the GraphQL WebSocket (#1104)

Adds per-connection and per-client subscription limits to the GraphQL WebSocket, so a single connection (or client) can no longer open an unbounded number of concurrent subscriptions. This is the indexer-side guardrail for the unbounded-subscription finding (pen-test HAL-02), bounding the database load a single client can drive.

Tighter shielded nullifier transactions input validation (#1126)

Hardens input validation on the shielded nullifier transactions surface so malformed or out-of-range arguments are rejected at the API boundary rather than propagating into query execution.

'@beta' GraphQL directive for in-flight API fields (#1186)

Introduces a '@beta' schema directive (applicable to FIELD_DEFINITION and OBJECT) to mark API surface that is still in flight and carries no stability guarantee. Several dust and nullifier fields shipped in this line are annotated '@beta'; consumers should treat those as subject to change without a major version bump.

Per-tree end indexes on Block (#1197)

Adds zswapEndIndex and the '@beta' dustCommitmentEndIndex / dustGenerationEndIndex fields to Block. Each is the chain's first_free (exclusive, "next free index") for that tree as of the block, written after all transactions — including system transactions — are applied, and is monotonic non-decreasing across the chain. Lets clients track per-tree growth directly from a block without a separate query.

Transaction reference on nullifier event types (#1208)

Adds a transaction: Transaction! field ('@beta') to DustNullifierTransaction and ShieldedNullifierTransaction, resolved lazily via the existing transaction DataLoader so it is fetched only when selected, with no payload cost for consumers that don't request it. This lets wallet sync pull the full transaction inline from a nullifier match instead of gathering hashes and querying separately. transactionId and transactionHash are retained as the resumption cursor and sequencing key.

Breaking Changes or Required Actions

Dust nullifier byte fields renamed with a LeBytes suffix (#1199)

Confined to '@beta' (in-flight) fields, so there is no impact on stable-API consumers. These fields are new in the 4.3.x API line and are not present in the 4.0.x production line, so production deployments are unaffected. Consumers of the beta dust nullifier API must update field and argument names:

  • DustNullifierTransaction.nullifiernullifierLeBytes
  • DustNullifierTransaction.commitmentcommitmentLeBytes
  • dustNullifierTransactions(...) subscription argument nullifierPrefixesnullifierLeBytesPrefixes

The shielded nullifier types are unchanged. The rename makes the little-endian byte encoding explicit in the field name.

Known Issues

To confirm before publishing: run gh issue list --repo midnightntwrk/midnight-indexer --label "priority:critical,priority:high" --state open and list any open critical/high issues not fixed in this release (Description / Issue link / Workaround). None known to be blocking at the time of writing.

Fixed Defects

Defect / PR Description
#1166 Fresh dustGenerations subscriptions (startIndex 0, no prior cutoff) now deliver their DustGenerationDtimeUpdate items instead of short-circuiting the dtime drain, so a freshly connected wallet receives dtime updates for the historical range.

Links and References

(Per-PR links are embedded in the What Changed, New Features, Breaking Changes, and Fixed Defects sections above.)