bolt Batched on-chain reads

Batched on-chain reads.
Without the compromise.

domino solves the N×M RPC problem. Sequential, self-triggering on-chain reads — resolved in M multicalls, not N×M individual calls.

data_object 2.1KB gzipped (viem)
code 2.4KB gzipped (ethers-v5)
check_circle 53 tests passing
hub viem ^2 · ethers ^5/^6
gavel MIT License

Stop making N×M calls

close The problem
for (const vault of vaults) {
  // Call 1: get user's vault shares
  const shares = await vault.balanceOf(user);
  
  // Call 2: convert to assets (depends on Call 1 output)
  const assets = await vault.convertToAssets(shares);
  
  // Call 3: get underlying asset
  const token = await vault.asset();
}
check The solution
// 1 single batched multicall
const results = await resolver.resolveBatch(
  vaults.map(v => ({ 
    vault: v, 
    owner: user 
  }))
);
account_tree

FSM executor

Results from step N flow automatically into step N+1. Build complex read pipelines.

extension

Framework agnostic

First-class support for viem, ethers v6, and ethers v5. Fully tree-shaken.

speed

Zero dependencies

Relies only on Multicall3 on-chain. Incredibly lightweight footprint.

Interactive Demo

rocket_launch LIVE ON-CHAIN

Quick Start

import { createResolver } from "@halaprix/domino/viem";

const resolver = createResolver(client);
const vault = await resolver.resolveErc4626({ 
  vault: "0x...", 
  owner: "0x..." 
});