Skip to main content

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

note

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 deploy to ContractCall (indexer-api)
  • Silence harmless database error in active_wallets (wallet-indexer)

Refactor

  • Use log, logforth and fastrace for telemetry
  • Replace bytes attribute with byte newtypes
  • Pass SessionId (Copy) by value
  • Move main/run into main.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