🎵 ₿ from hash to harmony: an orchestrated Bitcoin indexing suite ₿ 🎵
Maestro Symphony
Overview
Maestro Symphony is a fast, mempool-aware, and extensible Bitcoin indexer and API server. It provides a framework for indexing UTXOs, metaprotocols, and any other onchain activity.
Core Features
- mainnet
- testnet4
- regtest
- Runes
- Transaction count by address
- UTXOs by address
Endpoints: OpenAPI
Mempool Awareness: Query any endpoint with ?mempool=true to include pending transactions.
Rollback Handling: Always maintains an index of the longest chain.
Prerequisites
- Bitcoin Core (22+) with RPC and P2P access
- Rust (stable)
Optional Tools
Deployment Requirements
- Disk: 1 GB
- CPU: 2 cores
- RAM: 4 GB
- Sync time: ~6 hours
- Disk: 24 GB
- CPU: 4 cores
- RAM: 16 GB
- Sync time: ~4 days
NOTE: Deployment requirements are subject to change with new indexers and API endpoints.
Configuration
Below is a table describing the main configuration options for maestro-symphony. See the example configuration for context.
| Section | Key/Field | Description | Example Value |
|---|---|---|---|
| root | db_path |
Path to the database directory | "tmp/symphony" |
[sync.node] |
p2p_address |
Host/IP and port for P2P connection to Bitcoin node | "localhost:8333" |
rpc_address |
URL of your Bitcoin node's RPC endpoint | "http://localhost:8332" |
|
rpc_user |
RPC username for your Bitcoin node | "bitcoin" |
|
rpc_pass |
RPC password for your Bitcoin node | "password" |
|
[sync] |
network |
Bitcoin network to connect to (mainnet, testnet4) |
"mainnet" |
safe_mode |
Enable safe mode for sync (recommended) | true |
|
max_rollback |
Maximum blocks to roll back on reorg | 32 |
|
mempool |
Enable mempool awareness | true |
|
[sync.indexers] |
transaction_indexers |
List of enabled indexers and their options | See example below |
[server] |
address |
Address and port for API server to listen on | "0.0.0.0:8080" |
See examples to quickly get started.
Running Locally
Optionally, use mise to easily set up your environment:
Build
Sync & Serve
Sync Only
Serve Only
Generate OpenAPI
Running with Docker
Start
Stop
Endpoint Examples
Rune UTXOs by Address
|
Rune Info (Batch)
|
Mempool-Aware Rune UTXOs by Address
|
Rune Balance Changes in a Transaction
|
Contributing
Pull requests and issues are welcome! See the Kanban board for project status and tasks.
Feature Checklist
- Base Indexer
- Addresses
- Runes by address
- Runes by address and rune ID
- Runes by address and transaction ID
- Rune UTXOs by address
- Rune UTXOs by address and rune ID
- UTXOs by address
- Satoshi balance by address
- BRC20 by address
- Inscriptions by address
- Transactions by address
- Runes
- Rune info by rune ID
- Rune balance by rune ID and UTXO
- List runes
- Holders by rune
- UTXOs by rune
- Addresses
- Wallet activity
- Addresses
- Satoshi activity by address
- Metaprotocol activity by address
- Historical satoshi balance by address
- Inscription activity by address
- Address statistics
- Addresses
- Alkanes
- Webhook Notifications
License
This project is licensed under the Apache 2.0 License.