Build a Self-Hosted Blockchain State Service
Point at a Bitcoin or EVM node. Get live, always-current on-chain state running on your own server.
Every block updates your state automatically. Reorgs handled. Query via HTTP or WebSocket.
Your data, your server, no subscription fees.
import { bootstrap } from '@easylayer/bitcoin-crawler';export const AddressUtxoWatcherModel = {modelId: 'wallet-utxo-watcher',state: { wallets: new Set(['1A1zP1...Na']), utxos: new Map() },sources: {async vout(ctx) { return { a: ctx.vout.scriptPubKey.addresses?.[0], k: ctx.tx.txid + ':' + ctx.vout.n, v: ctx.vout.value }; },async vin(ctx) { return { k: ctx.vin.txid + ':' + ctx.vin.vout }; },async block(ctx) { ctx.applyEvent('Deposit', ctx.block.height, { o: ctx.locals.vout, i: ctx.locals.vin }); },},reducers: {Deposit(s, e) {for (const x of e.payload.o || []) (s.utxos.get(x.a) || s.utxos.set(x.a, new Map()).get(x.a)).set(x.k, x.v);for (const y of e.payload.i || []) for (const [a, bag] of s.utxos) if (bag.delete(y.k) && !bag.size) s.utxos.delete(a);},},};
- Custom Data Models
Tell the framework what on-chain state to track: wallet balances, contract events, UTXOs, anything your app needs. It reads every block, updates your state in real time, and handles chain reorgs automatically. You control the data structure and the server.
Learn more- Network Providers
Connect Bitcoin or EVM nodes via JSON-RPC, WebSocket, P2P, or ZMQ. Use QuickNode, Alchemy, or your own node. Just 2 RPC calls per Bitcoin block. Automatic failover between providers. Historical sync + real-time mode.
Learn more- Mempool Monitoring
Track unconfirmed transactions in real time before they hit blocks. Optional for Bitcoin and EVM crawlers. Essential for payment processors, wallets, and fee market analysis.
Learn more- API & Transports
Five built-in transports: HTTP, WebSocket, IPC (parent/child), Electron, and Browser. Real-time event streams and requestβresponse queries. Use @easylayer/transport-sdk for a unified client API across all of them.
Learn more- Event Store & Databases
Event Sourcing out of the box: every state change is an immutable event. Query model state at any block height. Choose SQLite (dev/desktop), PostgreSQL (production), or IndexedDB (browser). Schema managed automatically.
Learn more- System Models
Built-in chain validation and mempool models work out of the box β subscribe to their events immediately. Automatic reorg detection and rollback regardless of reorg length. Network integrity checks configurable per deployment.
Learn more
How does it work? π§
Install the crawler package for your chain. Define what on-chain data your app needs to track. Point at a node or external provider. Run it.
The framework reads blocks from any height, keeps your state current on every new block, recovers from chain reorgs automatically, and serves your data over HTTP, WebSocket, or IPC. Everything runs on your server. Your data never leaves your infrastructure.

Not sure where to begin?
Browse our examples to see EasyLayer in action and gather ideas for your next project.
System Examples β Getting Started π
Learn how to connect Bitcoin Crawler in different modes: HTTP RPC, P2P, ZMQ subscriptions, and various configurations.
easylayerBasic Wallet Watcher π
Track wallet balances β when funds arrive and when they leave. Simple UTXO monitoring for payment processors and wallets.
easylayerAdvanced Wallet Watcher π
Full wallet monitoring with mempool tracking β detect deposits, pending transactions, double-spend attempts.
easylayerStay up to date π¬
Subscribe to get timely updates on new releases, bug fixes, and all the latest EasyLayer news.
β‘ Roadmap β‘
From Idea and Concept to Implementation and Expansion
- @easylayer/bitcoin-crawler β Bitcoin and Bitcoin-like networks (BTC, BCH, LTC, DOGE)
- @easylayer/evm-crawler β EVM-compatible networks (Ethereum, BSC, Polygon, L2)
- @easylayer/transport-sdk β multi-transport client SDK
- Performance improvements for Bitcoin and EVM crawlers
- Developer onboarding: collecting feedback, helping teams test and configure
- Expanding documentation and examples
- @easylayer/solana-crawler
- @easylayer/ton-crawler
- @easylayer/tron-crawler
Frequently asked questions
For anything not covered here, join our Forum!