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
- Node: 1.0.0 (supports 0.22.x as well)
- Ledger: 8.1.0
- Bundle tracking issue: Midnight Release 1.1
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.3midnightntwrk/indexer-api:4.3.3midnightntwrk/wallet-indexer:4.3.3midnightntwrk/indexer-standalone:4.3.3midnightntwrk/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/shieldedNullifierTransactionssubscriptions. - 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.nullifier→nullifierLeBytesDustNullifierTransaction.commitment→commitmentLeBytesdustNullifierTransactions(...)subscription argumentnullifierPrefixes→nullifierLeBytesPrefixes
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
- Full changelog: CHANGELOG.md
- GitHub release: https://github.com/midnightntwrk/midnight-indexer/releases/tag/v4.3.3
- GraphQL schema: schema-v4.graphql
- QA test evidence: qa/tests/evidence/4.3.3/README.md
- Bundle tracking issue: Midnight Release 1.1
(Per-PR links are embedded in the What Changed, New Features, Breaking Changes, and Fixed Defects sections above.)