πŸš€ EVM Crawler is live! Track Ethereum, BSC, Polygon and any EVM chain

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.

Works on/with
NodejsTypeScriptRustBitcoinEthereumBNB ChainPolygonArbitrumOptimismDogecoinLitecoinBitcoin Cash
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.

EasyLayer architecture diagram

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 fits

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.

easylayer profileeasylayer

Basic Wallet Watcher πŸ‘›

Track wallet balances β€” when funds arrive and when they leave. Simple UTXO monitoring for payment processors and wallets.

easylayer profileeasylayer

Advanced Wallet Watcher πŸ’Ž

Full wallet monitoring with mempool tracking β€” detect deposits, pending transactions, double-spend attempts.

easylayer profileeasylayer

Stay 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

βœ… Released
  • @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
🚧 In Progress
  • Performance improvements for Bitcoin and EVM crawlers
  • Developer onboarding: collecting feedback, helping teams test and configure
  • Expanding documentation and examples
⏳ Coming Soon
  • @easylayer/solana-crawler
  • @easylayer/ton-crawler
  • @easylayer/tron-crawler

Frequently asked questions

For anything not covered here, join our Forum!

For teams

Need custom deployment help?

If your team needs a custom state model, self-hosted deployment support, or architecture help, describe the use case and we will review whether EasyLayer fits.