Self-hosted blockchain state services
Build custom blockchain state without writing indexing infrastructure from scratch
EasyLayer helps TypeScript developers persist blockchain events, build custom state models, handle reorg-aware workflows, and expose data through HTTP, WebSocket, IPC, desktop, or browser transports.
Start with proof, quickstart, and code you can inspect.
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);},},};
Core capabilities
Infrastructure pieces you would otherwise build yourself
- Custom state models
Define the state your application needs: wallet balances, UTXOs, contract events, fee statistics, or another model. EasyLayer feeds blockchain data into your model and stores state changes as events.
Learn more- Node and provider input
Connect to your own node or supported external providers. The crawler packages separate chain-specific data loading from your application state logic.
Learn more- Optional mempool workflows
Use mempool monitoring when your application needs pending transaction awareness. Keep it disabled when confirmed-block state is enough.
Learn more- API and transports
Expose query and event flows through HTTP, WebSocket, IPC, Electron IPC, or browser/shared-worker transports, then consume them through @easylayer/transport-sdk.
Learn more- EventStore and historical reads
Persist model changes as ordered events and restore state at previous heights. SQLite, PostgreSQL, and browser storage paths are documented separately by runtime.
Learn more- Reorg-aware architecture
The core architecture is built around persisted events, rollback, and state restoration so application models do not need ad-hoc reorg handling code.
Learn more
Proof-first evaluation
Start with a narrow state model, not a broad platform promise
EasyLayer makes the most sense when your app needs to own a specific slice of blockchain state. Validate one model, one storage path, and one transport before expanding the architecture.
Custom state models
Model the state your product needs: contract activity, wallet balances, UTXOs, fees, or another focused view.
Focused storage
Persist model events and state instead of storing unrelated chain data in your application database.
Reorg-aware architecture
Event persistence, rollback, and state restoration are part of the framework architecture, not left as ad-hoc app code.
Multiple transports
Integrate the same state service through HTTP, WebSocket, IPC, Electron IPC, or browser/shared-worker paths.
How does it work? π§
Choose the crawler package for your chain, define the state model your application needs, point the runtime at a node or provider, and run it as a self-hosted service.
The framework turns chain data into persisted events, restores state through the EventStore, and exposes query/stream access through supported transports. Reorg-aware behavior is part of the architecture, but each deployment should still be validated against its chain, provider, and workload.

Good fit
Use EasyLayer when your app needs focused blockchain state
EasyLayer is a fit when you need to monitor a contract, wallet set, UTXO view, or protocol-specific state and you want to store only the state changes your product actually needs.
If you only need a generic hosted lookup today, a managed API may be faster. EasyLayer is strongest when the state model, integration path, and self-hosted control matter.
See when it fitsNot 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!