BitVMX's Open Source Journey Continues: Bitcoin Monitoring, Coordination and Indexing components now available

We’re excited to continue expanding BitVMX’s open source stack with three new components that are core to how we track, coordinate, and interact with the Bitcoin blockchain.
These libraries have matured alongside our protocol infrastructure and are now available for public use under the MIT license. They include:
- BitVMX Transaction Monitor – real-time tracking and news generation for transaction confirmations
- Bitcoin Coordinator – orchestrates transaction dispatching, monitoring, and CPFP/RBF-based speedups
- Bitcoin Indexer – blockchain indexer that stores block and tx data for analysis and monitoring
Each component has been designed with modularity, persistence, and scalability in mind—enabling robust interaction with the Bitcoin network across a wide variety of applications.
BitVMX Transaction Monitor
Real-Time Monitoring of Bitcoin Transactions
The Transaction Monitor connects to an Indexer and persistently tracks UTXOs,, and blocks. It emits “news” updates when transactions reach confirmation thresholds or statuses change.
Key Features
- 📡 Transaction confirmation tracking
- 🔄 Regular sync with the Bitcoin blockchain
- 💾 Persistent monitoring state across restarts
🛠 Basic Usage
let monitor = Monitor::new(indexer, bitvmx_store, settings)?;
// Check readiness
if monitor.is_ready()? {
println!("Monitor is fully synchronized.");
}
// Sync with latest blocks
monitor.tick()?;
// Start monitoring a tx or event
monitor.monitor(TypesToMonitor::Transactions(vec![txid], "ctx".to_string()))?;
// Acknowledge processed news
monitor.ack_news(AckMonitorNews::Transaction(txid))?;
// Stop monitoring
monitor.cancel(TypesToMonitor::Transactions(vec![txid], "ctx".to_string()))?;
// Get monitoring updates
let news = monitor.get_news()?;
// Query monitor state
let status = monitor.get_tx_status(&txid)?;
let height = monitor.get_monitor_height()?;
This component is used across BitVMX for reactive protocol logic tied to Bitcoin on-chain activity.
Bitcoin Coordinator
Orchestrating, Monitoring, and Speeding Up Bitcoin Transactions
The Bitcoin Coordinator serves as the central brain of Bitcoin-side transaction management. It dispatches transactions, tracks confirmations, and applies CPFP or RBF-based speedups when needed.
Key Features
- 🕵️ Built-in monitoring (via Transaction Monitor)
- 🚀 Speedup support via CPFP or RBF
- 🔑 Integrated with Key Manager for signing
- 💾 Persistent state via BitVMX Storage
🛠 Basic Usage
let coordinator = BitcoinCoordinator::new_with_paths(
&config_bitcoin_client,
storage.clone(),
key_manager.clone(),
None,
);
// Sync with blockchain
coordinator.tick()?;
// Monitor a transaction
let txid = ...;
let ctx = "My tx".to_string();
coordinator.monitor(TypesToMonitor::Transactions(vec![txid], ctx.clone()))?;
// Dispatch with optional speedup
coordinator.dispatch(transaction, Some(speedup_data), ctx.clone(), None)?;
// Add UTXO funding for future CPFP
coordinator.add_funding(utxo)?;
// Query transaction status
let status = coordinator.get_transaction(txid)?;
// Handle news
let news = coordinator.get_news()?;
coordinator.ack_news(AckNews::Monitor(AckMonitorNews::Transaction(txid)))?;
This library is essential for dynamic protocol execution and timeout-sensitive on-chain actions.
Bitcoin Indexer
Fast, Persistent Indexing of Bitcoin Blocks and Transactions
The Bitcoin Indexer connects to Bitcoin Core and stores block and tx IDs into RocksDB for efficient access. It operates in a controlled, tick-based sync model, ensuring deterministic indexing state.
Key Features
- 🏷️ Block and tx ID extraction from Bitcoin Core
- 📏 Configurable start height for partial syncs
- 💾 RocksDB-backed state persistence
- ⏱️ Deterministic, block-by-block processing
🛠 Basic Usage
let config = ...;
let bitcoin_client = BitcoinClient::new_from_config(&config.bitcoin)?;
let store = Rc::new(IndexerStore::new(&config.storage)?);
let indexer = Indexer::new(bitcoin_client, store.clone(), config.settings)?;
// Check readiness
if indexer.is_ready()? {
println!("Indexer is at tip.");
}
// Process the next block
indexer.tick()?;
// Query current state
let best_block = indexer.get_best_block()?;
let best_height = indexer.get_best_height()?;
let chain_tip = indexer.get_blockchain_best_height()?;
let to_sync = indexer.get_height_to_sync()?;
// Retrieve tx info
let tx_info = indexer.get_tx(&txid.parse()?)?;
This module is the foundation for any component needing structured access to blockchain history.
Why We’re Open-Sourcing These Tools
We believe that open infrastructure benefits the entire ecosystem. By sharing the tools we’ve built internally, we aim to:
- Lower the barrier to experimentation
- Enable others to build composable Bitcoin-native systems
- Support collaboration and research on secure, scalable protocols
These components are still under development, not yet audited, and subject to change—but we’re committed to maintaining and improving them in the open.
Community & Contributions
All three libraries are licensed under MIT and hosted on GitHub. We welcome contributions, forks, and feedback of all kinds. Let’s build modular, secure, and decentralized Bitcoin infrastructure—together.
Repositories
GitHub FairgateLabs |