Midnight Indexer
The Midnight Indexer is a set of components designed to optimize the flow of blockchain data from a Midnight node to end-user applications. It retrieves history of blocks, processes them, stores indexed data efficiently, and provides a GraphQL API for queries and subscriptions.
9 May 2025
Midnight Indexer 2.0.0 Release Notes
Stable Release
- Version: 2.0.0
- Audience: Node operators, developers integrating with the Midnight ecosystem
- Environment: Production-ready
This release (2.0.0) is considered stable and production-ready. It can safely be deployed in public and production environments.
Key Changes & Highlights
This release requires wallet-sdk v5.0.0+ (compatible with Lace Wallet v3.0.0 or higher).
This 2.0.0 release of the Midnight Indexer accompanies the 0.12.0 release of the Midnight Node and the 4.0.0 release of the Midnight Ledger. This release also marks the end of life of the previous Scala based Indexer.
This release also introduces breaking changes to the GraphQL API v1, mainly related to consistent and meaningful naming but also to the GraphQL subscription for wallet events.
Changelog
Features
- Redesign wallet subscription
ProgressUpdates(indexer-api) - Add tracing to API (indexer-api)
- Add counters for all GraphQL operations (indexer-api)
- Clean naming and inputs (indexer-api)
- Only support bech32m encoded keys/addresses
- Rename contract query and subscription
contract_action(indexer-api)
Bug Fixes
- Add missing logging for wallet subscription (indexer-api)
- Skip collapsed update for failed transactions (indexer-api)
- Add transaction to
ContractCallOrDeploy(indexer-api) - Add
deploytoContractCall(indexer-api) - Silence harmless database error in
active_wallets(wallet-indexer)
Refactor
- Use
log,logforthandfastracefor telemetry - Replace bytes attribute with byte newtypes
- Pass
SessionId(Copy) by value - Move
main/runintomain.rs - Pass block and tx hashes (arrays) by value (indexer-api)
- Lazy resolving of transactions and contract actions (indexer-api)
Miscellaneous
- Apply consistent error handling (indexer-api)
- More debug logging (indexer-api)
Breaking Changes
Migration from Scala-based to Rust-based indexer
Impact: API endpoints are similar, but internal implementation and performance characteristics differ Action Required:
- Test integrations against the new Rust-based indexer at:
https://indexer-rs.testnet-02.midnight.network/api/v1/graphql - Begin migration from the old endpoint (
indexer.testnet-02...) - Verify that your system meets the necessary dependencies for PostgreSQL and NATS (cloud) or SQLite (standalone).
- Ensure network access to a running Midnight Node.
- Notice that the Midnight Node 0.12.0 required a chain-reset and hence the storage (PostgreSQL/SQLite and NATS) need to be reset.
Known Issues
- macOS Compatibility: Limited testing on macOS. Users may experience issues with native SQLite integration.
- Windows Support: Functional but not officially supported. Linux is the recommended environment.
Compatibility
- Midnight Ecosystem: Fully compatible with Midnight Node 0.12 and related infrastructure.
- Operating Systems: Fully tested on Linux, with limited support for Windows and macOS.
Additional Resources
- Community Support: Join the discussion on Discord
Upgrade/Migration Guide
Prerequisites
- PostgreSQL installed and configured (for production)
- Network access to a Midnight node
Installation & Migration:
- Deploy new indexer binary
- Connect to appropriate backend (SQLite or PostgreSQL)
- Point your API integration to the new endpoint
Post-Upgrade Checks
- Confirm GraphQL queries resolve as expected
- Monitor logs for error-free startup