<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Envio Blog</title>
        <link>https://docs.envio.dev/blog</link>
        <description>Envio Blog</description>
        <lastBuildDate>Wed, 25 Mar 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[How Envio Indexed 4 Billion Polymarket Events]]></title>
            <link>https://docs.envio.dev/blog/polymarket-hyperindex-case-study</link>
            <guid>https://docs.envio.dev/blog/polymarket-hyperindex-case-study</guid>
            <pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[How Envio HyperIndex consolidated 8 Polymarket subgraphs into one TypeScript blockchain indexer on Polygon, syncing over 4 billion events in 6 days. Open source reference included.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/polymarket-hyperindex-case-study.png" alt="Indexing 4 Billion Polymarket Events Using Envio HyperIndex" width="100%">
<p><a href="https://polymarket.com/" target="_blank" rel="noopener noreferrer">Polymarket</a> is one of the most data-intensive protocols in Web3. Every trade, position, fee, liquidity event, and oracle resolution across its entire prediction market ecosystem lives onchain on Polygon. Querying any of it meaningfully requires a serious blockchain indexer.</p>
<p>For years, Polymarket's data infrastructure relied on 8 independent subgraphs on <a href="https://thegraph.com/" target="_blank" rel="noopener noreferrer">The Graph</a>, each written in AssemblyScript, each tracking a separate domain, all running since 2021. This post documents how all 8 were replaced with a single Envio HyperIndex indexer, syncing over 4,000,000,000 events in 6 days on Polygon Mainnet.</p>
<p>The indexer is fully open source: <a href="https://github.com/enviodev/polymarket-indexer" target="_blank" rel="noopener noreferrer">github.com/enviodev/polymarket-indexer</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-hyperindex-the-fastest-blockchain-indexer-available">Envio HyperIndex: The Fastest Blockchain Indexer Available<a class="hash-link" aria-label="Direct link to Envio HyperIndex: The Fastest Blockchain Indexer Available" title="Direct link to Envio HyperIndex: The Fastest Blockchain Indexer Available" href="https://docs.envio.dev/blog/polymarket-hyperindex-case-study#envio-hyperindex-the-fastest-blockchain-indexer-available">​</a></h2>
<p>Envio is a real-time multichain blockchain indexing framework for EVM chains. Developers write event handlers in TypeScript and deploy a single indexer that covers multiple contracts, chains, and domains simultaneously.</p>
<p>HyperIndex is independently benchmarked as the fastest blockchain indexer available. In the Uniswap V2 Factory <a href="https://github.com/enviodev/open-indexer-benchmark" target="_blank" rel="noopener noreferrer">benchmark run by Sentio</a> in May 2025, HyperIndex completed in 1 minute, 143x faster than The Graph and 15x faster than the nearest competitor. In the LBTC benchmark (April 2025), HyperIndex completed in 3 minutes versus 3 hours 9 minutes for The Graph.</p>
<p>This performance comes from <a href="https://docs.envio.dev/docs/HyperSync/overview" target="_blank" rel="noopener noreferrer">HyperSync</a>, Envio's proprietary data engine. Instead of querying RPC endpoints block by block, HyperSync fetches filtered event data in bulk directly from a purpose-built data lake, delivering up to 2,000x faster data access than standard RPC. Polygon is one of 70+ EVM chains supported with native HyperSync coverage.</p>
<p>See full list of HyperSync supported networks here: <a href="https://docs.envio.dev/docs/HyperSync/hypersync-supported-networks" target="_blank" rel="noopener noreferrer">https://docs.envio.dev/docs/HyperSync/hypersync-supported-networks</a></p>
<table><thead><tr><th>Indexer</th><th>Time (Uniswap V2 Factory benchmark, Sentio May 2025)</th><th>vs HyperIndex</th></tr></thead><tbody><tr><td>Envio HyperIndex</td><td>1 minute</td><td>baseline</td></tr><tr><td>Subsquid (SQD)</td><td>~15 minutes</td><td>15x slower</td></tr><tr><td>The Graph</td><td>~143 minutes</td><td>143x slower</td></tr><tr><td>Ponder</td><td>~158 minutes</td><td>158x slower</td></tr></tbody></table>
<p>For a full breakdown of how HyperIndex compares across all major blockchain indexers, see the <a href="https://docs.envio.dev/docs/HyperIndex/benchmarks" target="_blank" rel="noopener noreferrer">complete benchmark comparison</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-problem-8-subgraphs-one-protocol-4-years-of-fragmentation">The Problem: 8 Subgraphs, One Protocol, 4 Years of Fragmentation<a class="hash-link" aria-label="Direct link to The Problem: 8 Subgraphs, One Protocol, 4 Years of Fragmentation" title="Direct link to The Problem: 8 Subgraphs, One Protocol, 4 Years of Fragmentation" href="https://docs.envio.dev/blog/polymarket-hyperindex-case-study#the-problem-8-subgraphs-one-protocol-4-years-of-fragmentation">​</a></h2>
<p>Polymarket's indexing infrastructure grew organically alongside the protocol. By the time the architecture was fully established, 8 independent subgraphs were running in parallel on The Graph:</p>
<table><thead><tr><th>Subgraph</th><th>Domain</th></tr></thead><tbody><tr><td>fee-module</td><td>Fee refunds from FeeModule and NegRiskFeeModule</td></tr><tr><td>sports-oracle</td><td>UMA sports oracle games, markets, and scores</td></tr><tr><td>wallet</td><td>Wallet creation (Gnosis Safe proxies) and USDC balances</td></tr><tr><td>orderbook</td><td>Exchange order fills, matches, per-token and global volume</td></tr><tr><td>open-interest</td><td>Global and per-market open interest via splits, merges, and redemptions</td></tr><tr><td>activity</td><td>Splits, merges, redemptions, and neg-risk conversions</td></tr><tr><td>pnl</td><td>User positions, weighted average cost basis, and realized PnL</td></tr><tr><td>fpmm</td><td>Fixed Product Market Maker analytics: AMM pools, liquidity, and pricing</td></tr></tbody></table>
<p>The core problem with this setup is shared contracts. A single <code>ConditionalTokens</code> event was being listened for and processed independently across 3 or 4 separate subgraphs. Every shared event meant redundant processing, redundant infrastructure, and fragmented data that required joining across multiple APIs at query time. Handlers were written in AssemblyScript, a stricter WebAssembly-compiled subset of TypeScript, adding tooling overhead and limiting what logic could run inside a handler.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-solution-one-hyperindex-indexer-on-polygon">The Solution: One HyperIndex Indexer on Polygon<a class="hash-link" aria-label="Direct link to The Solution: One HyperIndex Indexer on Polygon" title="Direct link to The Solution: One HyperIndex Indexer on Polygon" href="https://docs.envio.dev/blog/polymarket-hyperindex-case-study#the-solution-one-hyperindex-indexer-on-polygon">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="handler-merging">Handler Merging<a class="hash-link" aria-label="Direct link to Handler Merging" title="Direct link to Handler Merging" href="https://docs.envio.dev/blog/polymarket-hyperindex-case-study#handler-merging">​</a></h3>
<p>The defining architectural decision in this indexer is handler merging. Rather than running separate listeners per domain for the same contract event, a single handler fires and updates all relevant entities simultaneously.</p>
<p>A <code>ConditionalTokens.PositionSplit</code> event previously triggered separate processing across the open-interest, activity, and pnl subgraphs. In the unified HyperIndex indexer, one handler fires once and simultaneously updates open interest, records the split activity, and adjusts user PnL positions. The event is processed once. That's it.</p>
<p>The full handler structure:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">src/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  handlers/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ConditionalTokens.ts       # Open interest + activity + PnL (merged from 4 subgraphs)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    Exchange.ts                # Orderbook + PnL</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    NegRiskAdapter.ts          # Open interest + activity + PnL</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    FixedProductMarketMaker.ts # FPMM analytics + PnL + LP tracking</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    FPMMFactory.ts             # Dynamic contract registration</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    FeeModule.ts               # Fee refund tracking</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    UmaSportsOracle.ts         # Sports oracle</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    Wallet.ts                  # Wallet creation + USDC balances</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="contracts-indexed">Contracts Indexed<a class="hash-link" aria-label="Direct link to Contracts Indexed" title="Direct link to Contracts Indexed" href="https://docs.envio.dev/blog/polymarket-hyperindex-case-study#contracts-indexed">​</a></h3>
<p>The indexer covers the full surface area of Polymarket's onchain contracts on Polygon:</p>
<ul>
<li><strong>Exchange + NegRiskExchange</strong>: OrderFilled, OrdersMatched, TokenRegistered</li>
<li><strong>ConditionalTokens</strong>: ConditionPreparation, ConditionResolution, PositionSplit, PositionsMerge, PayoutRedemption</li>
<li><strong>NegRiskAdapter</strong>: MarketPrepared, QuestionPrepared, PositionSplit, PositionsMerge, PayoutRedemption, PositionsConverted</li>
<li><strong>FPMMFactory</strong>: FixedProductMarketMakerCreation, with dynamic contract registration for all FPMM instances</li>
<li><strong>FixedProductMarketMaker (dynamic)</strong>: FPMMBuy, FPMMSell, FPMMFundingAdded, FPMMFundingRemoved, Transfer</li>
<li><strong>FeeModule + NegRiskFeeModule</strong>: FeeRefunded</li>
<li><strong>UmaSportsOracle</strong>: GameCreated, GameSettled, MarketCreated, MarketResolved, and more</li>
<li><strong>USDC / RelayHub / SafeProxyFactory</strong>: Transfer, TransactionRelayed, ProxyCreation</li>
</ul>
<p>Dynamic contract registration is handled through <code>FPMMFactory</code>. As new Fixed Product Market Maker instances are created onchain, the indexer registers them automatically without a redeployment.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="schema-25-entity-types-across-all-domains">Schema: 25+ Entity Types Across All Domains<a class="hash-link" aria-label="Direct link to Schema: 25+ Entity Types Across All Domains" title="Direct link to Schema: 25+ Entity Types Across All Domains" href="https://docs.envio.dev/blog/polymarket-hyperindex-case-study#schema-25-entity-types-across-all-domains">​</a></h3>
<p>The schema covers every domain previously spread across 8 separate subgraphs, all queryable from a single GraphQL endpoint:</p>
<ul>
<li><strong>Orderbook</strong>: <code>OrderFilledEvent</code>, <code>OrdersMatchedEvent</code>, <code>Orderbook</code>, <code>OrdersMatchedGlobal</code>, <code>MarketData</code></li>
<li><strong>Open Interest</strong>: <code>Condition</code>, <code>MarketOpenInterest</code>, <code>GlobalOpenInterest</code>, <code>NegRiskEvent</code></li>
<li><strong>Activity</strong>: <code>Split</code>, <code>Merge</code>, <code>Redemption</code>, <code>NegRiskConversion</code>, <code>Position</code></li>
<li><strong>PnL</strong>: <code>UserPosition</code>, tracking amount, average price, realized PnL, and total bought per user per token</li>
<li><strong>FPMM</strong>: <code>FixedProductMarketMaker</code>, <code>FpmmTransaction</code>, <code>FpmmFundingAddition</code>, <code>FpmmFundingRemoval</code>, <code>FpmmPoolMembership</code>, <code>Collateral</code></li>
<li><strong>Wallet</strong>: <code>Wallet</code>, <code>GlobalUSDCBalance</code></li>
<li><strong>Fee Module</strong>: <code>FeeRefunded</code></li>
<li><strong>Sports Oracle</strong>: <code>Game</code>, <code>Market</code></li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-hyperindex-vs-the-graph-before-and-after">Envio HyperIndex vs The Graph: Before and After<a class="hash-link" aria-label="Direct link to Envio HyperIndex vs The Graph: Before and After" title="Direct link to Envio HyperIndex vs The Graph: Before and After" href="https://docs.envio.dev/blog/polymarket-hyperindex-case-study#envio-hyperindex-vs-the-graph-before-and-after">​</a></h2>
<table><thead><tr><th></th><th>The Graph (8 subgraphs)</th><th>Envio HyperIndex (1 indexer)</th></tr></thead><tbody><tr><td>Language</td><td>AssemblyScript</td><td>TypeScript</td></tr><tr><td>Subgraphs / indexers</td><td>8</td><td>1</td></tr><tr><td>Event processing</td><td>Redundant across subgraphs</td><td>Once per event, merged handlers</td></tr><tr><td>Cross-domain queries</td><td>Requires joining multiple APIs</td><td>Single GraphQL endpoint</td></tr><tr><td>Deployments to maintain</td><td>8</td><td>1</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-results">The Results<a class="hash-link" aria-label="Direct link to The Results" title="Direct link to The Results" href="https://docs.envio.dev/blog/polymarket-hyperindex-case-study#the-results">​</a></h2>
<p>The indexer synced Polymarket's full onchain history on Polygon from block 3,764,531 to 100% sync in 6 days, processing over 4,000,000,000 events. The repo includes 29 tests covering all handler phases, including a HyperSync integration test.</p>
<p>Run it locally with <code>pnpm dev</code> and compare the data with data from Polymarket subgraphs.</p>
<img src="https://docs.envio.dev/blog-assets/polymarket-hyperindex-case-study-1.png" alt="Polymarket indexer sync results" width="100%">
<p>Live deployment: <a href="https://envio.dev/app/moose-code/polymarket-indexer/7cad3ad" target="_blank" rel="noopener noreferrer">https://envio.dev/app/moose-code/polymarket-indexer/7cad3ad</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-teams-migrate-to-hyperindex-from-the-graph">Why Teams Migrate to HyperIndex from The Graph<a class="hash-link" aria-label="Direct link to Why Teams Migrate to HyperIndex from The Graph" title="Direct link to Why Teams Migrate to HyperIndex from The Graph" href="https://docs.envio.dev/blog/polymarket-hyperindex-case-study#why-teams-migrate-to-hyperindex-from-the-graph">​</a></h2>
<p>Polymarket's setup before this migration is a pattern that shows up across the ecosystem: multiple subgraphs, shared contracts, AssemblyScript handlers, fragmented data. Here is what changes when teams move to HyperIndex:</p>
<p><strong>Speed.</strong> HyperIndex is 143x faster than The Graph on independent benchmarks. For protocols with years of history like Polymarket, that directly translates to days versus months on historical sync.</p>
<p><strong>TypeScript, not AssemblyScript.</strong> Handlers are standard TypeScript with generated types from both the schema and ABIs. Any npm package works. No WebAssembly compilation. No AssemblyScript-specific constraints.</p>
<p><strong>One codebase.</strong> All domains, all contracts, all chains in a single indexer. One deployment to ship, one codebase to maintain, one endpoint to query.</p>
<p><strong>Single source of truth.</strong> Cross-domain queries happen at the database level, not at the application layer. No joining across APIs at runtime.</p>
<p><strong>Dynamic contract registration.</strong> Factory contracts that create new instances onchain register them automatically, without requiring a redeployment.</p>
<p>Envio offers white-glove migration support for teams moving from The Graph or any other indexer. The Polymarket indexer is an open-source reference for what a large-scale migration looks like end to end.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="frequently-asked-questions">Frequently Asked Questions<a class="hash-link" aria-label="Direct link to Frequently Asked Questions" title="Direct link to Frequently Asked Questions" href="https://docs.envio.dev/blog/polymarket-hyperindex-case-study#frequently-asked-questions">​</a></h2>
<p><strong>What is Polymarket?</strong>
Polymarket is the world's largest decentralized prediction market, built on Polygon. Users trade outcome shares on real-world events using USDC. All positions, trades, and settlements are handled entirely onchain via smart contracts with no central custodian.</p>
<p><strong>What is a blockchain indexer?</strong>
A blockchain indexer is a system that listens to onchain events and organises them into a structured, queryable database. Developers use blockchain indexers to build fast backends for DeFi protocols, trading interfaces, analytics tools, and onchain AI agents without querying slow RPC endpoints directly.</p>
<p><strong>What is the fastest blockchain indexer?</strong>
Envio HyperIndex is independently benchmarked as the fastest blockchain indexer available. In the Uniswap V2 Factory benchmark run by Sentio in May 2025, HyperIndex completed in 1 minute, 143x faster than The Graph and 15x faster than the nearest competitor (Subsquid).</p>
<p><strong>What is HyperIndex?</strong>
HyperIndex is a multichain blockchain indexing framework for EVM chains built by Envio. Developers write event handlers in TypeScript and deploy a single indexer covering multiple contracts, chains, and domains. It uses HyperSync, Envio's proprietary data engine, for historical sync speeds not achievable through standard RPC polling.</p>
<p><strong>What is HyperSync?</strong>
HyperSync is Envio's high-performance data engine. Instead of querying RPC endpoints block by block, HyperSync fetches filtered event data in bulk from a purpose-built data lake, delivering up to 2,000x faster data access than traditional RPC. 70+ EVM chains have native HyperSync coverage, with any EVM chain accessible via standard RPC.</p>
<p><strong>How do I index Polymarket data?</strong>
The fastest way to index Polymarket data on Polygon is with Envio HyperIndex and HyperSync. The full open-source reference implementation is available at <a href="https://github.com/enviodev/polymarket-indexer" target="_blank" rel="noopener noreferrer">github.com/enviodev/polymarket-indexer</a>. It covers all 8 domains of Polymarket's onchain activity and syncs the full history in 6 days.</p>
<p><strong>How long does it take to index Polymarket's full history on Polygon?</strong>
Using Envio HyperIndex with HyperSync, the full historical sync of Polymarket's onchain data on Polygon, over 4,000,000,000 events from block 3,764,531, completed in 6 days.</p>
<p><strong>How do I migrate from The Graph to HyperIndex?</strong>
Because HyperIndex handlers are written in TypeScript, and AssemblyScript is a subset of TypeScript, most handler logic can be carried across directly. Envio also provides a full <a href="https://docs.envio.dev/docs/HyperIndex/migration-guide" target="_blank" rel="noopener noreferrer">migration guide</a>, a CLI validation tool to compare output between both endpoints, and white-glove migration support. The Polymarket indexer is a concrete open-source reference for a large-scale migration from The Graph.</p>
<p><strong>Does HyperIndex support dynamic contract registration?</strong>
Yes. New contract instances created onchain, like Polymarket's FPMM pools, are registered dynamically by a factory handler without requiring a redeployment.</p>
<p><strong>What chains does Envio support?</strong>
Envio supports any EVM chain. 70+ EVM chains have native HyperSync coverage for maximum speed, including Polygon, Ethereum, Base, Arbitrum, Optimism, and more. Any EVM chain without native HyperSync support can be indexed via standard RPC.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="get-started">Get Started<a class="hash-link" aria-label="Direct link to Get Started" title="Direct link to Get Started" href="https://docs.envio.dev/blog/polymarket-hyperindex-case-study#get-started">​</a></h2>
<p>The Polymarket indexer is fully open source and available as a production reference for anyone building on Polygon or migrating from The Graph.</p>
<ul>
<li>Repo: <a href="https://github.com/enviodev/polymarket-indexer" target="_blank" rel="noopener noreferrer">https://github.com/enviodev/polymarket-indexer</a></li>
<li>Live deployment: <a href="https://envio.dev/app/moose-code/polymarket-indexer/7cad3ad" target="_blank" rel="noopener noreferrer">https://envio.dev/app/moose-code/polymarket-indexer/7cad3ad</a></li>
<li>Envio docs: <a href="https://docs.envio.dev/" target="_blank" rel="noopener noreferrer">https://docs.envio.dev/</a></li>
<li>Discord: <a href="https://discord.gg/envio" target="_blank" rel="noopener noreferrer">https://discord.gg/envio</a></li>
<li>Telegram: <a href="https://t.me/+kAIGElzPjApiMjI0" target="_blank" rel="noopener noreferrer">https://t.me/+kAIGElzPjApiMjI0</a></li>
<li>Follow us on X: <a href="https://x.com/envio_indexer" target="_blank" rel="noopener noreferrer">https://x.com/envio_indexer</a></li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="build-with-envio">Build With Envio<a class="hash-link" aria-label="Direct link to Build With Envio" title="Direct link to Build With Envio" href="https://docs.envio.dev/blog/polymarket-hyperindex-case-study#build-with-envio">​</a></h2>
<p>Envio HyperIndex is independently benchmarked as the fastest EVM blockchain indexer available. The Polymarket indexer is one example of what's possible. If you're building onchain, check out the <a href="https://docs.envio.dev/docs/HyperIndex/overview" target="_blank" rel="noopener noreferrer">docs</a>, run the benchmarks yourself, or talk to us about your data needs.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a></p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>
<hr>
<p>Co-authors: <a href="https://x.com/j_o_r_d_y_s" target="_blank" rel="noopener noreferrer">Jords</a> &amp; <a href="https://x.com/nikbhintade" target="_blank" rel="noopener noreferrer">Nikhil</a><br>
<!-- -->Head of Marketing &amp; Operations &amp; Growth Engineer at Envio</p>
<p>Built by <a href="https://x.com/jonjonclark" target="_blank" rel="noopener noreferrer">Jonjon</a>, Co-Founder at Envio.</p>]]></content:encoded>
            <category>case-studies</category>
        </item>
        <item>
            <title><![CDATA[How to Track Polymarket Trades Using Envio's HyperSync]]></title>
            <link>https://docs.envio.dev/blog/track-polymarket-trades-hypersync</link>
            <guid>https://docs.envio.dev/blog/track-polymarket-trades-hypersync</guid>
            <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn how to track Polymarket trades in real time using Envio's HyperSync. Stream OrderFilled events on Polygon, decode trade data, and filter by amount or wallet address using TypeScript and Bun.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/polymarket-trades-hypersync.png" alt="Cover Image: Track Polymarket Trades in Real-Time" width="100%">
<p>Since the rise of prediction markets like <a href="https://polymarket.com/" target="_blank" rel="noopener noreferrer">Polymarket</a> and <a href="https://kalshi.com/" target="_blank" rel="noopener noreferrer">Kalshi</a>, many people have been tracking activity on them to get a sense of where the money is going. If we try to track every trade on these prediction markets, you will see many people betting like $10 here, $15 there. If you want a stronger signal, then you should track trades with higher amounts, since those traders have more conviction in the outcome they are betting on.</p>
<p>In this article, we are going to build a tool with HyperSync where you can track Polymarket trades above a certain amount. We also have one feature where you can track trades from certain addresses. If you know some addresses from good traders, you can follow them too.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="prerequisites">Prerequisites<a class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites" href="https://docs.envio.dev/blog/track-polymarket-trades-hypersync#prerequisites">​</a></h2>
<p>We are going to use Bun for this article, so make sure you have it installed. If not, please check the <a href="https://bun.com/docs/installation" target="_blank" rel="noopener noreferrer">Bun documentation</a> for installation instructions. If you want to use some other runtime that supports TypeScript, you can do that too.</p>
<p>You will also need an Envio API token to access HyperSync. If you don’t have it already, go to <a href="https://envio.dev/app/api-tokens" target="_blank" rel="noopener noreferrer">https://envio.dev/app/api-tokens</a> and you can find your token there.</p>
<p>Here are step-by-step instructions for creating new API tokens: <a href="https://docs.envio.dev/docs/HyperSync/api-tokens#generating-api-tokens" target="_blank" rel="noopener noreferrer">https://docs.envio.dev/docs/HyperSync/api-tokens#generating-api-tokens</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-hypersync">What is HyperSync<a class="hash-link" aria-label="Direct link to What is HyperSync" title="Direct link to What is HyperSync" href="https://docs.envio.dev/blog/track-polymarket-trades-hypersync#what-is-hypersync">​</a></h2>
<p><a href="https://docs.envio.dev/docs/HyperSync/overview" target="_blank" rel="noopener noreferrer">HyperSync</a> is Envio's high-performance blockchain data retrieval layer, built as an alternative to traditional JSON-RPC endpoints. It gives developers direct access to onchain data up to 2000x faster than standard RPC methods.</p>
<p>For this article, we are using HyperSync to stream real-time block heights and query Polymarket trade events on Polygon as they happen. Client libraries are available for Python, Rust, Node.js, and Go. HyperSync supports 70+ EVM chains, so the same approach works across any supported network.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="orderfilled-event">OrderFilled Event<a class="hash-link" aria-label="Direct link to OrderFilled Event" title="Direct link to OrderFilled Event" href="https://docs.envio.dev/blog/track-polymarket-trades-hypersync#orderfilled-event">​</a></h2>
<p>Before we start writing the script, let’s talk about the <code>OrderFilled</code> event. This event is emitted when a trade has been filled, so these are confirmed trades where a user is buying or selling shares. Here is the event:</p>
<div class="language-solidity codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-solidity codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">    event OrderFilled(</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        bytes32 indexed orderHash,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        address indexed maker,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        address indexed taker,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        uint256 makerAssetId,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        uint256 takerAssetId,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        uint256 makerAmountFilled,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        uint256 takerAmountFilled,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        uint256 fee</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    );</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Most of the fields are self-explanatory, but we still haven’t answered one question: if this event is emitted for all orders, then how do we know which one is buy vs sell? If the value of <code>makerAssetId</code> is <code>0</code>, then that is a buy order where the user is buying shares, and vice versa.</p>
<p>To calculate price per share for a buy trade, we can use <code>makerAmountFilled</code> and <code>takerAmountFilled</code>.</p>
<p>Price per share in a buy trade = <code>makerAmountFilled / takerAmountFilled</code></p>
<p>To calculate per-share price in a sell trade, we just switch those values. Now that we have a basic understanding of what data to fetch and what that data tells us, we can start writing our script with Bun.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="using-hypersync-client">Using HyperSync Client<a class="hash-link" aria-label="Direct link to Using HyperSync Client" title="Direct link to Using HyperSync Client" href="https://docs.envio.dev/blog/track-polymarket-trades-hypersync#using-hypersync-client">​</a></h2>
<p>To create a Bun project and install the HyperSync client along with Viem for decoding events, you can use the following commands:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">mkdir</span><span class="token plain"> track-trades </span><span class="token operator">&amp;&amp;</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> track-trades</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">bun init </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-y</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">bun </span><span class="token function" style="color:rgb(80, 250, 123)">add</span><span class="token plain"> @envio-dev/hypersync-client viem</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If you’re new to HyperSync clients, please start by going through these examples: <a href="https://docs.envio.dev/docs/HyperSync/hypersync-clients" target="_blank" rel="noopener noreferrer">https://docs.envio.dev/docs/HyperSync/hypersync-clients</a>.</p>
<p>Let’s discuss how we are going to structure our script. Instead of streaming events directly, we are going to stream height. When we get a new height, we query HyperSync to fetch the data we need. Here is a visual representation of that:</p>
<p><img decoding="async" loading="lazy" alt="Visual representation of the script&amp;#39;s data flow" src="https://docs.envio.dev/assets/images/polymarket-data-flow-f286c84bfdd1ad66bc87dda1efd7d90a.png" width="3924" height="2802" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stream-height">Stream Height<a class="hash-link" aria-label="Direct link to Stream Height" title="Direct link to Stream Height" href="https://docs.envio.dev/blog/track-polymarket-trades-hypersync#stream-height">​</a></h2>
<p>We already have a height-streaming example in the HyperSync Node client, and we are going to use that here. Open <code>index.ts</code> and paste the following snippet, then we can go over it.</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  HypersyncClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">type</span><span class="token plain"> </span><span class="token class-name">Query</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// for later use</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">type</span><span class="token plain"> </span><span class="token class-name">QueryResponseData</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// for later use</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"@envio-dev/hypersync-client"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> decodeEventLog </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"viem"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// for later use</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">main</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Create hypersync client using the mainnet hypersync endpoint</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> client </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">HypersyncClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    url</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://polygon.hypersync.xyz"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    apiToken</span><span class="token operator">:</span><span class="token plain"> process</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">env</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token constant" style="color:rgb(189, 147, 249)">ENVIO_API_TOKEN</span><span class="token operator">!</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Create a height stream to monitor blockchain height changes</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> heightStream </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">streamHeight</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Height stream created. Listening for height updates..."</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Track the last known height to detect changes</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">try</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">while</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token comment" style="color:rgb(98, 114, 164)">// Receive the next event from the height stream</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> event </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> heightStream</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">recv</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">event </span><span class="token operator">===</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">null</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Height stream ended by server"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">break</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token comment" style="color:rgb(98, 114, 164)">// Handle different types of events</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">event</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Height"</span><span class="token operator">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetchOrderFilledEvents</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">client</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> event</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">height</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// will be explained later</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">break</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Connected"</span><span class="token operator">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">Connected to height stream</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">break</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Reconnecting"</span><span class="token operator">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">Reconnecting to height stream in </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">event</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation">delayMillis</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">ms due to error: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">event</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation">errorMsg</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">break</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">default</span><span class="token operator">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token comment" style="color:rgb(98, 114, 164)">// Tells the typescript compiler that we have covered all possible event types</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> _exhaustiveCheck</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">never</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> event</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Unhandled event type"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">catch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Error in height stream:"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">finally</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// Always close the stream to clean up resources</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> heightStream</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">close</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Height stream closed"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">main</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">catch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>The first thing we are doing in <code>main</code> is creating the HyperSync client with <code>url</code> and <code>apiToken</code> (which should be stored in a <code>.env</code> file, so create one and store your Envio API token there).</p>
<p>We have a <code>streamHeight</code> function on the client that emits 3 types of events: <code>Height</code>, <code>Connected</code>, and <code>Reconnecting</code>. When we get a new <code>Height</code> event with the latest block number, we call <code>fetchOrderFilledEvents</code>, where our parsing logic will live.</p>
<p>After creating the stream with <code>streamHeight</code>, we need to listen to those events, so we created a <code>while</code> loop that checks data from <code>.recv()</code> and a <code>switch</code> statement to act on the event type we get. The rest is mostly boilerplate error handling, so we don’t need to go too deep into that.</p>
<p>Now we have our streaming logic, so we can move to <code>fetchOrderFilledEvents</code>, which will handle the event parsing.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="fetchorderfilledevents-function">fetchOrderFilledEvents Function<a class="hash-link" aria-label="Direct link to fetchOrderFilledEvents Function" title="Direct link to fetchOrderFilledEvents Function" href="https://docs.envio.dev/blog/track-polymarket-trades-hypersync#fetchorderfilledevents-function">​</a></h2>
<p>This function will take the height we got from <code>streamHeight</code> and query blocks to get the events we want. Let’s start with a few basic things we need for fetching and decoding the data:</p>
<ul>
<li>Contract addresses</li>
<li>ABI of the event</li>
<li>Event signature hash (aka <code>Topic0</code>)</li>
</ul>
<p>Here they are, so add them somewhere at the top of the file.</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">EXCHANGE_ADDRESSES</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token string" style="color:rgb(255, 121, 198)">"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token string" style="color:rgb(255, 121, 198)">"0xc5d563a36ae78145c45a50134d48a1215220f80a"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">map</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">a</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">=&gt;</span><span class="token plain"> a</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">toLowerCase</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">ORDER_FILLED_TOPIC</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token string" style="color:rgb(255, 121, 198)">"0xd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f6"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">toLowerCase</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">ORDER_FILLED_ABI</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  anonymous</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  inputs</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      indexed</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      internalType</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"bytes32"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      name</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"orderHash"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      type</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"bytes32"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      indexed</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      internalType</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"address"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      name</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"maker"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      type</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"address"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      indexed</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      internalType</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"address"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      name</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"taker"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      type</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"address"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      indexed</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      internalType</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"uint256"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      name</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"makerAssetId"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      type</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"uint256"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      indexed</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      internalType</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"uint256"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      name</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"takerAssetId"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      type</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"uint256"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      indexed</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      internalType</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"uint256"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      name</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"makerAmountFilled"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      type</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"uint256"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      indexed</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      internalType</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"uint256"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      name</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"takerAmountFilled"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      type</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"uint256"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      indexed</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      internalType</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"uint256"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      name</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"fee"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      type</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"uint256"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  name</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"OrderFilled"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  type</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"event"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">ORDER_FILLED_ABI_ITEMS</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token constant" style="color:rgb(189, 147, 249)">ORDER_FILLED_ABI</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// we can push it to query directly as an array</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Let's define the function signature. We are going to pass the HyperSync client and block height to this function.</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetchOrderFilledEvents</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">client</span><span class="token operator">:</span><span class="token plain"> HypersyncClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> height</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>To fetch the data from HyperSync, we need to create a query. If you're not familiar with HyperSync queries, the query builder at <a href="https://builder.hypersync.xyz/" target="_blank" rel="noopener noreferrer">https://builder.hypersync.xyz/</a> is a good starting point. In short, in this query we define which event from which contracts we want to fetch, and what fields we want in the response.</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> query</span><span class="token operator">:</span><span class="token plain"> Query </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  fromBlock</span><span class="token operator">:</span><span class="token plain"> height</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  logs</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      address</span><span class="token operator">:</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">EXCHANGE_ADDRESSES</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      topics</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token constant" style="color:rgb(189, 147, 249)">ORDER_FILLED_TOPIC</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  fieldSelection</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    log</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token string" style="color:rgb(255, 121, 198)">"Data"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token string" style="color:rgb(255, 121, 198)">"Address"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token string" style="color:rgb(255, 121, 198)">"Topic0"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token string" style="color:rgb(255, 121, 198)">"Topic1"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token string" style="color:rgb(255, 121, 198)">"Topic2"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token string" style="color:rgb(255, 121, 198)">"Topic3"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token string" style="color:rgb(255, 121, 198)">"TransactionHash"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token string" style="color:rgb(255, 121, 198)">"BlockNumber"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Use the <code>get</code> function to fetch the data and store the logs/events in an array that we can loop over.</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> res </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">get</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">query</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> logs </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">data </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> QueryResponseData</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">logs </span><span class="token operator">??</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Let’s loop over that array and use <code>decodeEventLog</code> from Viem to decode the data so we can analyze it.</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> log </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">of</span><span class="token plain"> logs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> decoded </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">decodeEventLog</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    abi</span><span class="token operator">:</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">ORDER_FILLED_ABI_ITEMS</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    data</span><span class="token operator">:</span><span class="token plain"> log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">data </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    topics</span><span class="token operator">:</span><span class="token plain"> log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">topics </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token operator">...</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">decoded</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">eventName </span><span class="token operator">!==</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"OrderFilled"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">continue</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> makerAssetId</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> makerAmountFilled</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> takerAmountFilled</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> maker</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> taker </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    decoded</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">args </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      makerAssetId</span><span class="token operator">:</span><span class="token plain"> bigint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      makerAmountFilled</span><span class="token operator">:</span><span class="token plain"> bigint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      takerAmountFilled</span><span class="token operator">:</span><span class="token plain"> bigint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      maker</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      taker</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// TODO: Check if trade is Buy if yes, then log details along with price per share</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>The last part of this script is checking if the trade is a buy trade, which we can confirm when <code>makerAssetId</code> is <code>0</code>. We also need to calculate price per share. We already know the formula: <code>makerAmountFilled / takerAmountFilled</code>. That value should be formatted to 6 decimals, and then we have the price per share.</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">formatRatio</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  numerator</span><span class="token operator">:</span><span class="token plain"> bigint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  denominator</span><span class="token operator">:</span><span class="token plain"> bigint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  precision </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">6</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">denominator </span><span class="token operator">===</span><span class="token plain"> </span><span class="token number">0n</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> scale </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">10n</span><span class="token plain"> </span><span class="token operator">**</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">BigInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">precision</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> scaled </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">numerator </span><span class="token operator">*</span><span class="token plain"> scale</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">/</span><span class="token plain"> denominator</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> whole </span><span class="token operator">=</span><span class="token plain"> scaled </span><span class="token operator">/</span><span class="token plain"> scale</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> fraction </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">scaled </span><span class="token operator">%</span><span class="token plain"> scale</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">toString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">padStart</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">precision</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">whole</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">.</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">fraction</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><code>fetchOrderFilledEvents</code> should look like this at the end.</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetchOrderFilledEvents</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">client</span><span class="token operator">:</span><span class="token plain"> HypersyncClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> height</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Topic0: 0xd0a08e8c493f9c94f29311604c9de1b4e8c8d4c06bd0c789af57f2d65bfec0f6</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> query</span><span class="token operator">:</span><span class="token plain"> Query </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    fromBlock</span><span class="token operator">:</span><span class="token plain"> height</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    logs</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        address</span><span class="token operator">:</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">EXCHANGE_ADDRESSES</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        topics</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token constant" style="color:rgb(189, 147, 249)">ORDER_FILLED_TOPIC</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    fieldSelection</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      log</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"Data"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"Address"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"Topic0"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"Topic1"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"Topic2"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"Topic3"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"TransactionHash"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"BlockNumber"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> res </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">get</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">query</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> logs </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">data </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> QueryResponseData</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">logs </span><span class="token operator">??</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> log </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">of</span><span class="token plain"> logs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> decoded </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">decodeEventLog</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      abi</span><span class="token operator">:</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">ORDER_FILLED_ABI_ITEMS</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      data</span><span class="token operator">:</span><span class="token plain"> log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">data </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      topics</span><span class="token operator">:</span><span class="token plain"> log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">topics </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token operator">...</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">decoded</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">eventName </span><span class="token operator">!==</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"OrderFilled"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">continue</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> makerAssetId</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> makerAmountFilled</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> takerAmountFilled</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> maker</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> taker </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      decoded</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">args </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        makerAssetId</span><span class="token operator">:</span><span class="token plain"> bigint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        makerAmountFilled</span><span class="token operator">:</span><span class="token plain"> bigint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        takerAmountFilled</span><span class="token operator">:</span><span class="token plain"> bigint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        maker</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        taker</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// TODO: Check if trade is Buy if yes, then log details along with price per share</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">makerAssetId </span><span class="token operator">===</span><span class="token plain"> </span><span class="token number">0n</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> pricePerShare </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">formatRatio</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">makerAmountFilled</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> takerAmountFilled</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">[BUY] block=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">log</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation">blockNumber</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)"> tx=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">log</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation">transactionHash</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)"> maker=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">maker</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)"> taker=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">taker</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)"> pricePerShare=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">pricePerShare</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="complete-project">Complete Project<a class="hash-link" aria-label="Direct link to Complete Project" title="Direct link to Complete Project" href="https://docs.envio.dev/blog/track-polymarket-trades-hypersync#complete-project">​</a></h2>
<p>You can check the project code in this repo: <a href="https://github.com/enviodev/track-poly-trades" target="_blank" rel="noopener noreferrer">https://github.com/enviodev/track-poly-trades</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="next-steps">Next Steps<a class="hash-link" aria-label="Direct link to Next Steps" title="Direct link to Next Steps" href="https://docs.envio.dev/blog/track-polymarket-trades-hypersync#next-steps">​</a></h2>
<p>Our aim was to create a tracker that filters trades based on amount and addresses, but we haven’t completed that aim yet. This article gave you the main steps you need to create that tool, so your next step is to add filtering for amount and addresses.</p>
<p>Don’t forget to share it with us on socials or in our Discord. Looking forward to seeing what you build on top of this.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="poly-whales-tui">Poly-Whales TUI<a class="hash-link" aria-label="Direct link to Poly-Whales TUI" title="Direct link to Poly-Whales TUI" href="https://docs.envio.dev/blog/track-polymarket-trades-hypersync#poly-whales-tui">​</a></h2>
<p>Don’t want to set up the full project but still want to try it out? You can use the Poly-Whales TUI.</p>
<p>Run the following command in your terminal:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpx poly-whales</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><img decoding="async" loading="lazy" alt="poly-whales TUI screenshot" src="https://docs.envio.dev/assets/images/poly-whales-tui-ab4fc08e86382db675161b5dbeff658b.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="build-with-envio">Build With Envio<a class="hash-link" aria-label="Direct link to Build With Envio" title="Direct link to Build With Envio" href="https://docs.envio.dev/blog/track-polymarket-trades-hypersync#build-with-envio">​</a></h2>
<p>Envio is a multi-chain EVM blockchain indexer for querying real-time and historical data. If you’re working on a Web3 project and want a smoother development process, Envio’s got your back(end). Check out our docs, join the community, and let’s talk about your data needs.</p>
<p>Stay tuned for more monthly updates by subscribing to our newsletter, following us on X, or hopping into our Discord for more up-to-date information.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>
<p>—</p>
<p>Author: <a href="https://x.com/nikbhintade" target="_blank" rel="noopener noreferrer">Nikhil</a><br>
<!-- -->Growth Engineer at Envio</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Envio Developer Update March 2026]]></title>
            <link>https://docs.envio.dev/blog/envio-developer-update-march-2026</link>
            <guid>https://docs.envio.dev/blog/envio-developer-update-march-2026</guid>
            <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Envio Developer Update March 2026: HyperIndex alpha.15-20, including improved multiple data-sources support, agentic indexing workflows, subgraph hosting, ecosystem highlights, and upcoming events.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/dev-update-march-2026.png" alt="Cover Image Envio Developer Update March 2026" width="100%">
<p>March saw continued progress across HyperIndex, tooling, and the wider Envio ecosystem. We shipped multiple alpha releases focused on improving scale, flexibility, testing, and observability, alongside new workflows that make it easier to go from idea to production-ready indexers.
This includes the latest v3.0.0-alpha.20 release, which introduces improved multiple data-sources support and primary source recovery logic.
This month we also rebranded our Hosted Service to Envio Cloud. Alongside this, we introduced updates across subgraph hosting, agentic indexing workflows, and new ways to explore and interact with prediction market data. Across the ecosystem, we saw strong developer contributions, new projects being built with Envio, and continued momentum leading into upcoming events.</p>
<p>Let's dive in!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-alpha-releases-alpha15---alpha20">💻 Alpha Releases: Alpha.15 -&gt; Alpha.20<a class="hash-link" aria-label="Direct link to 💻 Alpha Releases: Alpha.15 -> Alpha.20" title="Direct link to 💻 Alpha Releases: Alpha.15 -> Alpha.20" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#-alpha-releases-alpha15---alpha20">​</a></h2>
<p>Loads of exciting progress landed across the latest alpha releases this month. This stretch focused on improving scale, flexibility, testing, and the overall developer experience across HyperIndex, with a mix of new features, internal improvements, and important updates to observability.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="alpha20">Alpha.20<a class="hash-link" aria-label="Direct link to Alpha.20" title="Direct link to Alpha.20" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#alpha20">​</a></h3>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="-improved-multiple-data-sources-support">🔁 Improved Multiple Data-Sources Support<a class="hash-link" aria-label="Direct link to 🔁 Improved Multiple Data-Sources Support" title="Direct link to 🔁 Improved Multiple Data-Sources Support" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#-improved-multiple-data-sources-support">​</a></h4>
<p>With this change, we are introducing primary source recovery logic: after switching to a fallback source, HyperIndex attempts to recover to the primary source 60 seconds later. Previously, it would stay at the fallback source until the fallback source was down or the indexer was restarted.</p>
<p>Additionally, we improved the logic for choosing which data source to use next, enabling much better indexing resilience and reducing vendor lock-in to a single source, as well as stricter enforcement of the source usage configured for <code>live</code> mode.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="alpha18">Alpha.18<a class="hash-link" aria-label="Direct link to Alpha.18" title="Direct link to Alpha.18" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#alpha18">​</a></h3>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="-support-indexers-with-21b-events-per-chain">⚡ Support indexers with 2.1B+ events per chain<a class="hash-link" aria-label="Direct link to ⚡ Support indexers with 2.1B+ events per chain" title="Direct link to ⚡ Support indexers with 2.1B+ events per chain" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#-support-indexers-with-21b-events-per-chain">​</a></h4>
<p>Scale indexers approaching int32 limits. Now you can build even larger, more performant indexers with HyperIndex.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="-breaking-official-metrics-endpoint">🚨 Breaking: Official <code>/metrics</code> endpoint<a class="hash-link" aria-label="Direct link to -breaking-official-metrics-endpoint" title="Direct link to -breaking-official-metrics-endpoint" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#-breaking-official-metrics-endpoint">​</a></h4>
<p>Existing Prometheus metrics just got a major upgrade.</p>
<p>We cleaned up metric names and measured data, switched time units to seconds instead of milliseconds, and started following Prometheus naming conventions more closely.</p>
<p>We also added metrics for data points previously covered by the <code>--bench</code> feature.</p>
<p>Starting with v3.0.0, Prometheus metrics are no longer experimental. The <code>/metrics</code> endpoint now follows semver and will be documented.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="alpha15">Alpha.15<a class="hash-link" aria-label="Direct link to Alpha.15" title="Direct link to Alpha.15" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#alpha15">​</a></h3>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="-new-getwhere-operators-_gte-_lte-_in">🔍 New getWhere operators: <code>_gte</code>, <code>_lte</code>, <code>_in</code><a class="hash-link" aria-label="Direct link to -new-getwhere-operators-_gte-_lte-_in" title="Direct link to -new-getwhere-operators-_gte-_lte-_in" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#-new-getwhere-operators-_gte-_lte-_in">​</a></h4>
<p>Three new filter operators have been added for getWhere queries, following Hasura-style conventions:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">context</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">Entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">getWhere</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> amount</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> _gte</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">100n</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">context</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">Entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">getWhere</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> amount</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> _lte</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">500n</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">context</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">Entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">getWhere</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> status</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> _in</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"active"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"pending"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="-support-double-handler-registration">👨‍🚒 Support double handler registration<a class="hash-link" aria-label="Direct link to 👨‍🚒 Support double handler registration" title="Direct link to 👨‍🚒 Support double handler registration" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#-support-double-handler-registration">​</a></h4>
<p>Allows double handler registration for the same event with similar filters:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">ERC20</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"generated"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token constant" style="color:rgb(189, 147, 249)">ERC20</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">Transfer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">handler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> event</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> context </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Your logic here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token constant" style="color:rgb(189, 147, 249)">ERC20</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">Transfer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">handler</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> event</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> context </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// And here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="-other-improvements">🤖 Other improvements<a class="hash-link" aria-label="Direct link to 🤖 Other improvements" title="Direct link to 🤖 Other improvements" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#-other-improvements">​</a></h4>
<p>We consistently improve HyperIndex to make it easier to contribute to for both humans and AI. Recent work includes:</p>
<ul>
<li>Restructuring HyperIndex into a pnpm workspace</li>
<li>Moving tests from mocha/chai to vitest</li>
<li>Reworking the CI pipeline to run faster and reuse the production artifact for both testing and publishing</li>
<li>Developing a highly customisable internal testing framework so AI can create reproduction tests for tricky edge cases</li>
</ul>
<p>For more information and to stay up to date with all current and past releases, be sure to check out our release notes below.</p>
<p>👉 See full <a href="https://github.com/enviodev/hyperindex/releases" target="_blank" rel="noopener noreferrer">release notes</a><br>
<!-- -->👉 Star us on <a href="https://github.com/enviodev/hyperindex" target="_blank" rel="noopener noreferrer">GitHub</a> ⭐</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="hosted-service-is-now-envio-cloud">Hosted Service is now Envio Cloud<a class="hash-link" aria-label="Direct link to Hosted Service is now Envio Cloud" title="Direct link to Hosted Service is now Envio Cloud" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#hosted-service-is-now-envio-cloud">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/envio-cloud-1.png" alt="Hosted Service renamed to Envio Cloud" width="100%">
<p>We've renamed the Hosted Service to Envio Cloud. Same product, same infrastructure, no changes required on your end.
For those new to it, Envio Cloud is a fully managed hosting solution for your indexers, taking care of all infrastructure, scaling, and monitoring so you can focus on building. Plans range from free dev environments through to enterprise-grade dedicated hosting, with static production endpoints, built-in alerts, and production-ready infrastructure across all tiers.</p>
<p>Learn more in our <a href="https://docs.envio.dev/docs/HyperIndex/hosted-service" target="_blank" rel="noopener noreferrer">docs</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="agentic-blockchain-indexing-with-envio">Agentic blockchain indexing with Envio<a class="hash-link" aria-label="Direct link to Agentic blockchain indexing with Envio" title="Direct link to Agentic blockchain indexing with Envio" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#agentic-blockchain-indexing-with-envio">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-march-2026-1.png" alt="Agentic blockchain indexing with Envio" width="100%">
<p>We explored what it looks like to go from prompt to production-ready indexers using Envio.</p>
<p>This walkthrough shows how to scaffold an indexer for any EVM-compatible chain, push it to GitHub, and deploy it to Envio's Cloud (previously Hosted Service) without manually touching a config file.</p>
<p>As an example, <strong>400,000+ wstETH events were indexed on Monad in ~20 seconds.</strong></p>
<p>Use the following command to scaffold your indexer:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpx envio@3.0.0-alpha.18 init template </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-t</span><span class="token plain"> erc20 </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-l</span><span class="token plain"> typescript </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"> ./my-indexer --api-token </span><span class="token string" style="color:rgb(255, 121, 198)">""</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Learn more in our blog and test it yourself here: <a href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex" target="_blank" rel="noopener noreferrer">https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="host-your-subgraphs-on-envio">Host your subgraphs on Envio<a class="hash-link" aria-label="Direct link to Host your subgraphs on Envio" title="Direct link to Host your subgraphs on Envio" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#host-your-subgraphs-on-envio">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-march-2026-2.png" alt="Host your subgraphs on Envio" width="100%">
<p>Deploy and host your subgraphs with HyperIndex, with a fully subgraph-compatible GraphQL endpoint and no client changes required.</p>
<p>Migrate your existing subgraphs and keep the same API, with faster sync, quicker backfills, and deployments live in less than a day.</p>
<p>The process is handled end-to-end, converting your subgraph to HyperIndex and getting it up and running without needing to manage infrastructure.</p>
<p>Learn more here: <a href="https://envio.dev/pricing/subgraphs" target="_blank" rel="noopener noreferrer">https://envio.dev/pricing/subgraphs</a><br>
<!-- -->Get started on Discord - open a support ticket: <a href="https://discord.com/invite/envio" target="_blank" rel="noopener noreferrer">https://discord.com/invite/envio</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="heatbook-polymarket-orderbooks-as-heatmaps">Heatbook: Polymarket Orderbooks as Heatmaps<a class="hash-link" aria-label="Direct link to Heatbook: Polymarket Orderbooks as Heatmaps" title="Direct link to Heatbook: Polymarket Orderbooks as Heatmaps" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#heatbook-polymarket-orderbooks-as-heatmaps">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-march-2026-3.png" alt="Heatbook" width="100%">
<p>An interface for visualising Polymarket orderbooks using historical heatmaps. Orderbook heatmaps for prediction markets, with 115M+ fills visualised. View any market and explore activity over time.</p>
<p>Supports <a href="https://polymarket.com/predictions/all" target="_blank" rel="noopener noreferrer">Polymarket</a>, <a href="https://limitless.exchange/markets" target="_blank" rel="noopener noreferrer">Limitless</a>, and more soon.</p>
<p>More here: <a href="https://heatbook.xyz/" target="_blank" rel="noopener noreferrer">https://heatbook.xyz/</a><br>
<!-- -->See original post: <a href="https://x.com/jonjonclark/status/2031016707309949042?s=20" target="_blank" rel="noopener noreferrer">https://x.com/jonjonclark/status/2031016707309949042?s=20</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="ethcc9-sapphire-sponsor">EthCC[9]: Sapphire Sponsor<a class="hash-link" aria-label="Direct link to EthCC[9]: Sapphire Sponsor" title="Direct link to EthCC[9]: Sapphire Sponsor" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#ethcc9-sapphire-sponsor">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-march-2026-4.png" alt="EthCC sponsorship" width="100%">
<p>Envio is a Sapphire sponsor of <a href="https://ethcc.io/" target="_blank" rel="noopener noreferrer">EthCC[9]</a>, taking place at Palais des Festivals in Cannes from March 30 to April 2, 2026.</p>
<p>EthCC is an annual Ethereum community conference bringing together developers, researchers, and teams from across the ecosystem.</p>
<p>The team will be there across the week. Catch our <a href="https://ethcc.io/speakers/jonjon-clark" target="_blank" rel="noopener noreferrer">talk</a> on the Monroe stage and swing by our booth - let's chat about your data needs.</p>
<p>P.S. be sure to get your hands on one of our snazzy Envio caps and stickers.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="developer-contributions-uniswap-cca-indexer">Developer contributions: Uniswap CCA indexer<a class="hash-link" aria-label="Direct link to Developer contributions: Uniswap CCA indexer" title="Direct link to Developer contributions: Uniswap CCA indexer" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#developer-contributions-uniswap-cca-indexer">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-march-2026-5.png" alt="Uniswap CCA indexer" width="100%">
<p>Check out this Uniswap CCA indexer built with HyperIndex to index continuous clearing auction contracts across Ethereum, Base, Arbitrum, and Unichain. It tracks auctions, bids, ticks, steps, and checkpoints, using HyperSync for logs and selective RPC reads for derived onchain state.</p>
<p>Shoutout to <a href="https://x.com/0xdivergence" target="_blank" rel="noopener noreferrer">@0xdivergence</a> for sharing this and building with Envio.</p>
<p>Check it out on GitHub: <a href="https://github.com/dzmbs/uniswap-cca-indexer" target="_blank" rel="noopener noreferrer">https://github.com/dzmbs/uniswap-cca-indexer</a><br>
<!-- -->Original post on X: <a href="https://x.com/0xdivergence/status/1769735600377133273" target="_blank" rel="noopener noreferrer">https://x.com/0xdivergence/status/1769735600377133273</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="open-indexer-benchmark">Open Indexer Benchmark<a class="hash-link" aria-label="Direct link to Open Indexer Benchmark" title="Direct link to Open Indexer Benchmark" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#open-indexer-benchmark">​</a></h2>
<p>We believe tech should speak for itself.</p>
<p>That's why we started working on and maintaining the Open Indexer Benchmark (originally forked from Sentio).</p>
<p>An honest, objective benchmark for blockchain indexers.</p>
<p>We're reopening it to benchmark new use cases and warmly welcome all contributions:<br>
<a href="https://github.com/enviodev/open-indexer-benchmark" target="_blank" rel="noopener noreferrer">https://github.com/enviodev/open-indexer-benchmark</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="wonderland-ctf">Wonderland CTF<a class="hash-link" aria-label="Direct link to Wonderland CTF" title="Direct link to Wonderland CTF" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#wonderland-ctf">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-march-2026-6.png" alt="Wonderland CTF" width="100%">
<p>Envio is a proud sponsor of the Wonderland CTF. The event takes place on April 1, 2026, in person at EthCC[9] in Cannes.</p>
<p>Wonderland CTF is a capture-the-flag event featuring Solidity and Aztec Noir challenges, with tracks ranging from beginner to advanced and teams of 1 to 5 members.</p>
<p>Create your team and learn more here: <a href="https://ctf.wonderland.xyz/" target="_blank" rel="noopener noreferrer">https://ctf.wonderland.xyz</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="polymarket-whale-tracker-tui">Polymarket Whale Tracker TUI<a class="hash-link" aria-label="Direct link to Polymarket Whale Tracker TUI" title="Direct link to Polymarket Whale Tracker TUI" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#polymarket-whale-tracker-tui">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-march-2026-7.png" alt="Polymarket Whale Tracker TUI" width="100%">
<p>We put together a simple whale tracker using HyperSync to track Polymarket whale activity in real time. It follows large traders on Polymarket and surfaces what they're doing as it happens, making it easier to monitor higher-conviction activity without sifting through smaller trades.</p>
<p>Clean, fast, and easy to plug into your workflows.</p>
<p>More here: <a href="https://github.com/enviodev/poly-whale-tracker" target="_blank" rel="noopener noreferrer">https://github.com/enviodev/poly-whale-tracker</a></p>
<p>Run:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">npx poly-whales</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>For a step-by-step guide on how to build your own, see: <a href="https://docs.envio.dev/blog/track-polymarket-trades-hypersync" target="_blank" rel="noopener noreferrer">https://docs.envio.dev/blog/track-polymarket-trades-hypersync</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="best-blockchain-indexers-in-2026">Best blockchain indexers in 2026<a class="hash-link" aria-label="Direct link to Best blockchain indexers in 2026" title="Direct link to Best blockchain indexers in 2026" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#best-blockchain-indexers-in-2026">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-march-2026-8.png" alt="Best blockchain indexers in 2026" width="100%">
<p>We put together a benchmark-driven comparison of blockchain indexers, looking at how different solutions perform in practice. The guide focuses on how indexers handle real workloads, comparing performance, sync speeds, and overall reliability across different approaches.</p>
<p>It's a practical breakdown of the trade-offs between tools and what to consider when choosing an indexer for your use case.</p>
<p>Learn and compare in our latest blog: <a href="https://docs.envio.dev/blog/best-blockchain-indexers-2026" target="_blank" rel="noopener noreferrer">https://docs.envio.dev/blog/best-blockchain-indexers-2026</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-current--upcoming-events--hackathons">🗓️ Current &amp; Upcoming Events &amp; Hackathons<a class="hash-link" aria-label="Direct link to 🗓️ Current &amp; Upcoming Events &amp; Hackathons" title="Direct link to 🗓️ Current &amp; Upcoming Events &amp; Hackathons" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#%EF%B8%8F-current--upcoming-events--hackathons">​</a></h2>
<ul>
<li><a href="https://ethcc.io/" target="_blank" rel="noopener noreferrer">EthCC - Cannes</a>: March 30th -&gt; April 2nd</li>
<li><a href="https://ethconf.com/" target="_blank" rel="noopener noreferrer">EthConf - New York</a>: June 8th -&gt; 10th</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-featured-developer-praveen-matheesha">🧑‍💻 Featured Developer: Praveen Matheesha<a class="hash-link" aria-label="Direct link to 🧑‍💻 Featured Developer: Praveen Matheesha" title="Direct link to 🧑‍💻 Featured Developer: Praveen Matheesha" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#-featured-developer-praveen-matheesha">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-march-2026-9.png" alt="Featured developer Praveen Matheesha" width="100%">
<p>This month's featured developer is Praveen Matheesha, a developer focused on building advanced onchain analytics infrastructure. He is currently working on <a href="https://x.com/paralensdotai" target="_blank" rel="noopener noreferrer">@paralensdotai</a>, a next-generation blockchain analytics engine designed to extract economic behavior and strategy-level insights from raw blockchain transactions. His focus is on turning complex onchain data into meaningful signals for traders, researchers, and analysts, with a particular interest in transaction-level intelligence, MEV analysis, and understanding the economic intent behind smart contract interactions.</p>
<p><strong>What Praveen had to say about Envio:</strong></p>
<blockquote>
<p><em><strong>"Before discovering Envio, I was building my own EVM indexer from scratch in Rust. I implemented support for chain reorg handling, historical backfilling, batched RPC ingestion, and WebSocket streams for real-time updates. While it worked, a significant amount of time went into building and maintaining the infrastructure layer itself. When I discovered Envio and HyperSync, it immediately stood out as a much more efficient approach. It solves many of the challenges around reliable, high-performance blockchain data access that developers often end up rebuilding from scratch. If I had found it earlier, I likely could have saved weeks of work and focused more on the actual analytics and business logic rather than the ingestion pipeline. I also wrote a detailed article about building a production-ready EVM indexer in Rust, where I mentioned Envio as a great option for developers who want to avoid spending weeks building indexing infrastructure themselves. Overall, HyperSync makes it significantly easier to work with large volumes of on-chain data and allows developers to focus on building insights and applications instead of reinventing core data infrastructure."</strong></em></p>
</blockquote>
<p>Well done, Praveen. Be sure to follow the team on <a href="https://x.com/hpmszk" target="_blank" rel="noopener noreferrer">X</a> and check out their <a href="https://github.com/matheeshame" target="_blank" rel="noopener noreferrer">GitHub</a> to stay up to date with their latest developments.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-playlist-of-the-month">🎧️ Playlist of the Month<a class="hash-link" aria-label="Direct link to 🎧️ Playlist of the Month" title="Direct link to 🎧️ Playlist of the Month" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#%EF%B8%8F-playlist-of-the-month">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-march-2026-10.png" alt="Playlist of the month" width="100%">
<p>▶️ <a href="https://open.spotify.com/playlist/240pHTCbwvf6kBMdfWGmw9?si=bb40d616e82a49f3" target="_blank" rel="noopener noreferrer">Open Spotify</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="build-with-envio">Build with Envio<a class="hash-link" aria-label="Direct link to Build with Envio" title="Direct link to Build with Envio" href="https://docs.envio.dev/blog/envio-developer-update-march-2026#build-with-envio">​</a></h2>
<p>Envio is a multi-chain EVM blockchain indexer for querying real-time and historical data. If you're working on a Web3 project and want a smoother development process, Envio's got your back(end). Check out our docs, join the community, and let's talk about your data needs.</p>
<p>Stay tuned for more monthly updates by subscribing to our newsletter, following us on X, or hopping into our Discord for more up-to-date information.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>
<hr>
<p>Author: <a href="https://x.com/j_o_r_d_y_s" target="_blank" rel="noopener noreferrer">Jords</a><br>
<!-- -->Head of Marketing &amp; Operations</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Agentic Blockchain Indexing: How to Deploy an EVM Indexer to Envio Cloud]]></title>
            <link>https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex</link>
            <guid>https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A step-by-step guide to agentic blockchain indexing with Envio HyperIndex. Learn how an AI agent can scaffold, configure, and deploy an EVM indexer to Envio Cloud in minutes using a fully CLI driven workflow.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/agentic-blockchain-indexing-updated.png" alt="Cover Image Agentic Blockchain Indexing" width="100%">
<p>Agentic development works best when an AI agent can take a single prompt and run with it, end-to-end, without handing back to a human at every step. For blockchain indexing, that's exactly what we've built at Envio.</p>
<p>With the Envio Cloud CLI (<code>envio-cloud</code>) and HyperIndex, an agent can scaffold a production-ready indexer, configure it for any EVM-compatible chain, push it to GitHub, and deploy it to Envio Cloud, without a human ever touching a config file.</p>
<p><strong>⚡ The result: 400,000 events indexed in ~20 seconds</strong></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-hyperindex">What is HyperIndex?<a class="hash-link" aria-label="Direct link to What is HyperIndex?" title="Direct link to What is HyperIndex?" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#what-is-hyperindex">​</a></h2>
<p><a href="https://docs.envio.dev/docs/HyperIndex/overview" target="_blank" rel="noopener noreferrer">HyperIndex</a> is Envio's high-performance blockchain indexing framework. It's designed to make indexing fast to build and even faster to run, with support for EVM-compatible networks and a developer experience built around real workflows.</p>
<p>HyperIndex is the default indexing framework for agentic development with the Envio Cloud CLI tool and comprehensive Claude skills. That means when an AI agent needs to spin up a blockchain data pipeline, HyperIndex is the go-to solution.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-envio-cloud-cli-envio-cloud">The Envio Cloud CLI: <code>envio-cloud</code><a class="hash-link" aria-label="Direct link to the-envio-cloud-cli-envio-cloud" title="Direct link to the-envio-cloud-cli-envio-cloud" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#the-envio-cloud-cli-envio-cloud">​</a></h2>
<p>The <a href="https://www.npmjs.com/package/envio-cloud" target="_blank" rel="noopener noreferrer">envio-cloud</a> CLI is the command-line interface for Envio Cloud, the managed infrastructure layer that runs your HyperIndex indexers in production.</p>
<p>With it you can:</p>
<ul>
<li>Authenticate via GitHub (<code>envio-cloud login</code>)</li>
<li>Register a new indexer pointing to your GitHub repo (<code>envio-cloud indexer add</code>)</li>
<li>Monitor sync progress and deployment status in real-time (<code>envio-cloud deployment status</code>, <code>envio-cloud deployment metrics</code>)</li>
<li>Promote deployments to production (<code>envio-cloud deployment promote</code>)</li>
<li>Pull JSON output for any command (<code>-o json</code>), making it fully scriptable and agent-friendly</li>
</ul>
<p><em>⭐ No dashboard required. Everything that matters is exposed through the CLI.</em></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="end-to-end-agentic-deployment-of-a-wsteth-indexer-on-monad">End-to-End: Agentic deployment of a wstETH indexer on Monad<a class="hash-link" aria-label="Direct link to End-to-End: Agentic deployment of a wstETH indexer on Monad" title="Direct link to End-to-End: Agentic deployment of a wstETH indexer on Monad" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#end-to-end-agentic-deployment-of-a-wsteth-indexer-on-monad">​</a></h2>
<p>Here's the full workflow an agent ran to deploy a live ERC20 indexer for wstETH on <a href="https://www.monad.xyz/" target="_blank" rel="noopener noreferrer">Monad</a> Mainnet, start to finish.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="step-1-scaffold-the-indexer">Step 1: Scaffold the indexer<a class="hash-link" aria-label="Direct link to Step 1: Scaffold the indexer" title="Direct link to Step 1: Scaffold the indexer" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#step-1-scaffold-the-indexer">​</a></h3>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpx envio@3.0.0-alpha.18 init template -t erc20 -l typescript -d ./my-indexer --api-token ""</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>The <code>envio</code> CLI scaffolds a TypeScript ERC20 indexer template. No API token is needed at this stage as authentication is handled through the hosted service at deployment time.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="step-2-configure-for-monad">Step 2: Configure for Monad<a class="hash-link" aria-label="Direct link to Step 2: Configure for Monad" title="Direct link to Step 2: Configure for Monad" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#step-2-configure-for-monad">​</a></h3>
<p>The agent edits <code>config.yaml</code> to target the wstETH contract on Monad Mainnet (chain ID 143, contract address <code>0x10Aeaf63194db8d453d4D85a06E5eFE1dd0b5417, start_block: 0</code>).</p>
<p>Then runs codegen and a type check to confirm everything is clean:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpm codegen</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpm tsc --noEmit</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><em>Note: the ERC20 template test file references a different contract address and network, so any resulting type errors need to be fixed before the type check passes.</em></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="step-3-push-to-github">Step 3: Push to GitHub<a class="hash-link" aria-label="Direct link to Step 3: Push to GitHub" title="Direct link to Step 3: Push to GitHub" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#step-3-push-to-github">​</a></h3>
<p>Create a public repo and push:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">gh repo create wsteth-monad-indexer-demo --public</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">git init &amp;&amp; git add . &amp;&amp; git commit -m "init"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">git push -u origin main</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If the push fails because your GitHub token lacks permission to push workflow files (like <code>.github/workflows/test.yaml</code>), refresh auth with workflow scope:
<code>gh auth refresh -s workflow</code></p>
<p>Envio Cloud deploys from the <code>envio</code> branch by default, so create and push it:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">git checkout -b envio &amp;&amp; git push -u origin envio</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="step-4-connect-the-envio-github-bot">Step 4: Connect the Envio GitHub Bot<a class="hash-link" aria-label="Direct link to Step 4: Connect the Envio GitHub Bot" title="Direct link to Step 4: Connect the Envio GitHub Bot" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#step-4-connect-the-envio-github-bot">​</a></h3>
<p>The Envio GitHub App must have access to the repo before deployments will trigger. If the repo is not already linked, visit:</p>
<p><a href="https://github.com/apps/envio-deployments/installations/select_target" target="_blank" rel="noopener noreferrer">https://github.com/apps/envio-deployments/installations/select_target</a></p>
<p>Then grant the bot access to the <code>wsteth-monad-indexer-demo</code> repository.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="step-5-deploy">Step 5: Deploy<a class="hash-link" aria-label="Direct link to Step 5: Deploy" title="Direct link to Step 5: Deploy" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#step-5-deploy">​</a></h3>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpx envio-cloud login</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpx envio-cloud indexer add</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --name wsteth-monad-indexer-demo</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --repo wsteth-monad-indexer-demo</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --description "wstETH ERC20 indexer on Monad"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --branch envio</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --skip-repo-check</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  --yes</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="step-6-verify">Step 6: Verify<a class="hash-link" aria-label="Direct link to Step 6: Verify" title="Direct link to Step 6: Verify" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#step-6-verify">​</a></h3>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpx envio-cloud indexer get wsteth-monad-indexer-demo {org}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpx envio-cloud deployment status wsteth-monad-indexer-demo &lt;commit-hash&gt; {org}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Once synced, the indexer is viewable in the browser at <code>https://envio.dev/app/{org}/{indexer-name}/{commit-hash}.</code></p>
<p>Check the live deployment from this demo here:
<a href="https://envio.dev/app/denhampreen/wsteth-monad-indexer-demo/5d55d35" target="_blank" rel="noopener noreferrer">https://envio.dev/app/denhampreen/wsteth-monad-indexer-demo/5d55d35</a></p>
<p><strong>⚡400,000 events indexed. ~20 seconds</strong></p>
<img src="https://docs.envio.dev/blog-assets/agentic-blockchain-indexing-1.png" alt="Cover Image Agentic Blockchain Indexing" width="100%">
<p>See the full walkthrough on <a href="https://www.loom.com/share/09cdac43b18f4143ad78b18c8c8a492b" target="_blank" rel="noopener noreferrer">Loom</a>, covering the complete agent driven workflow from scaffold to deployment.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-matters-for-agentic-development">Why this matters for agentic development<a class="hash-link" aria-label="Direct link to Why this matters for agentic development" title="Direct link to Why this matters for agentic development" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#why-this-matters-for-agentic-development">​</a></h2>
<p>The blockchain data layer has historically been one of the friction points in agentic workflows. Spinning up an indexer meant reading docs, manually editing configs, managing infrastructure, and waiting for sync.</p>
<p>HyperIndex and the <code>envio-cloud</code> CLI change that equation. Every step in the workflow above is scriptable, CLI-driven, and designed to be executed by an agent without human intervention. The JSON output flag (<code>-o json</code>) makes it straightforward to pipe deployment status into downstream logic. The GitHub-native deployment flow means agents that can commit code can deploy indexers.</p>
<p>This is what it looks like in practice for HyperIndex to be the default indexing framework for agentic development.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started">Getting started<a class="hash-link" aria-label="Direct link to Getting started" title="Direct link to Getting started" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#getting-started">​</a></h2>
<p>Install the Envio Cloud CLI:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">npm install -g envio-cloud</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Scaffold your first indexer:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpx envio@3.0.0-alpha.18 init template -t erc20 -l typescript -d ./my-indexer --api-token ""</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Whether you're building on Monad, Ethereum, or any other EVM compatible network, Envio enables agent driven indexing from first prompt to live deployment. The GitHub-native deployment flow means agents that can commit code can deploy indexers in minutes.</p>
<p>MCP loading.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="about-envio-cloud">About Envio Cloud<a class="hash-link" aria-label="Direct link to About Envio Cloud" title="Direct link to About Envio Cloud" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#about-envio-cloud">​</a></h2>
<p><a href="https://docs.envio.dev/docs/HyperIndex/hosted-service" target="_blank" rel="noopener noreferrer">Envio Cloud</a> is a managed environment for running HyperIndex indexers in production.</p>
<p>It handles infrastructure, scaling, and monitoring, so indexers can run reliably without managing operational overhead. Multiple plans are available, from free development environments to dedicated production deployments, each with features such as static endpoints, built in alerts, and production ready infrastructure.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="build-with-envio">Build With Envio<a class="hash-link" aria-label="Direct link to Build With Envio" title="Direct link to Build With Envio" href="https://docs.envio.dev/blog/agentic-blockchain-indexing-envio-hyperindex#build-with-envio">​</a></h2>
<p>Envio is the fastest independently benchmarked EVM blockchain indexer for querying real-time and historical data. If you are building onchain and need indexing that keeps up with your chain, check out the <a href="https://docs.envio.dev/docs/HyperIndex/overview" target="_blank" rel="noopener noreferrer">docs</a>, run the benchmarks yourself, and come talk to us about your data needs.</p>
<p>Stay tuned for more updates by subscribing to our newsletter, following us on X, or hopping into our Discord.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Best Blockchain Indexers in 2026: Real Benchmark Comparison]]></title>
            <link>https://docs.envio.dev/blog/best-blockchain-indexers-2026</link>
            <guid>https://docs.envio.dev/blog/best-blockchain-indexers-2026</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[An accurate, benchmark-backed comparison of the best blockchain indexers in 2026, including Envio HyperIndex, The Graph, Goldsky, SubQuery, Subsquid, Ormi, and Ponder. Every claim is sourced.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/best-blockchain-indexers.png" alt="Cover Image Best Blockchain Indexers" width="100%">
<p>Choosing a blockchain indexer should be straightforward, but most comparisons rely on self-reported metrics or product descriptions rather than independently benchmarked data and publicly verifiable sources.</p>
<p>This article takes a different approach. Every claim is backed by public documentation or third-party benchmarks, with clear notes where only self-reported data exists.</p>
<p>We cover seven blockchain indexers: Envio, <a href="https://thegraph.com/" target="_blank" rel="noopener noreferrer">The Graph</a> (Subgraphs), <a href="https://goldsky.com/" target="_blank" rel="noopener noreferrer">Goldsky</a>, <a href="https://subquery.network/" target="_blank" rel="noopener noreferrer">SubQuery</a>, <a href="https://www.sqd.ai/" target="_blank" rel="noopener noreferrer">Subsquid</a> (SQD), <a href="https://ormilabs.com/" target="_blank" rel="noopener noreferrer">Ormi</a> and <a href="https://ponder.sh/" target="_blank" rel="noopener noreferrer">Ponder</a>.</p>
<p>If you would like to review the raw benchmark data yourself, it is fully open:
<a href="https://github.com/enviodev/open-indexer-benchmark" target="_blank" rel="noopener noreferrer">https://github.com/enviodev/open-indexer-benchmark</a></p>
<p>An open, honest, and objective benchmark for blockchain indexers across EVM, Solana, and more. It compares historical backfill speed, latency, data storage, developer experience, and anything else that matters.</p>
<p>We welcome anyone to contribute, run it, test it, and explore the results. We encourage you to share what you find.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-a-blockchain-indexer">What is a blockchain indexer?<a class="hash-link" aria-label="Direct link to What is a blockchain indexer?" title="Direct link to What is a blockchain indexer?" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#what-is-a-blockchain-indexer">​</a></h2>
<p>A blockchain indexer is a system that listens to blockchain events, organises raw onchain data (transactions, logs, state changes, and blocks) into structured, queryable formats, and exposes that data via APIs. Without an indexer, developers would need to query raw RPC endpoints for every piece of data, which is slow, expensive, and impractical at scale.</p>
<p>Custom indexing frameworks (the focus of this article) let you define exactly what data to track, write handlers that transform onchain events into your own data model, and query the results via a GraphQL or SQL API. This is different from pre-built data APIs like Dune Analytics or Covalent, which expose pre-indexed, read-only data that you query but cannot customise.
Want a deeper breakdown? Check out our blog “<a href="https://docs.envio.dev/blog/what-is-a-blockchain-indexer" target="_blank" rel="noopener noreferrer">What is a Blockchain Indexer</a>”. Or watch our intro tutorial “<a href="https://www.youtube.com/watch?v=LNhaN-Cikis" target="_blank" rel="noopener noreferrer">How to set up a blockchain indexer</a>” on YouTube.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="tldr-quick-verdict">TL;DR: Quick verdict<a class="hash-link" aria-label="Direct link to TL;DR: Quick verdict" title="Direct link to TL;DR: Quick verdict" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#tldr-quick-verdict">​</a></h2>
<table><thead><tr><th>Indexer</th><th>Best For</th></tr></thead><tbody><tr><td>Envio</td><td>The fastest independently benchmarked EVM indexer. True wildcard indexing, multichain in a single indexer, TypeScript throughout. Fully managed or self-hosted.</td></tr><tr><td>The Graph</td><td>Ecosystem access, existing public subgraphs, decentralised network</td></tr><tr><td>Goldsky</td><td>Managed subgraphs plus real-time data streaming to your own database</td></tr><tr><td>SubQuery</td><td>Non-EVM chains, broadest network coverage</td></tr><tr><td>Subsquid (SQD)</td><td>Fast historical backfills, non-EVM</td></tr><tr><td>Ormi</td><td>Fully managed, Graph-compatible</td></tr><tr><td>Ponder</td><td>Self-hosted TypeScript stack, full control</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-we-evaluated">How we evaluated<a class="hash-link" aria-label="Direct link to How we evaluated" title="Direct link to How we evaluated" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#how-we-evaluated">​</a></h2>
<p>Feature lists rarely tell the full story. We evaluated each indexer on six criteria that matter in production:</p>
<ul>
<li>
<p><strong>Indexing speed</strong>: How fast can it sync historical data and stay at the chain head? We used the open benchmark results from Sentio (April 2025) as our primary reference, cross-checked against each indexer's own documentation.</p>
</li>
<li>
<p><strong>Feature completeness</strong>: Does it support event handlers, block handlers, wildcard indexing, and multichain from a single indexer? These are not nice-to-haves once you are building at scale.</p>
</li>
<li>
<p><strong>Developer experience</strong>: What language do you write handlers in? TypeScript is the standard. AssemblyScript adds friction.</p>
</li>
<li>
<p><strong>Chain support</strong>: EVM-only vs multi-ecosystem matters depending on what you are building.</p>
</li>
<li>
<p><strong>Operational model</strong>: Fully managed vs self-hosted vs decentralised. Each has real trade-offs.</p>
</li>
<li>
<p><strong>AI compatibility</strong>: Does the indexer have first-class support for AI-assisted development workflows? This includes Claude Code markdown, Claude skills, and tooling that integrates naturally into AI-native development environments.</p>
</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-rankings">The rankings<a class="hash-link" aria-label="Direct link to The rankings" title="Direct link to The rankings" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#the-rankings">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-envio-fastest-evm-indexer-with-one-of-the-most-complete-feature-sets">#1 Envio: Fastest EVM indexer with one of the most complete feature sets<a class="hash-link" aria-label="Direct link to #1 Envio: Fastest EVM indexer with one of the most complete feature sets" title="Direct link to #1 Envio: Fastest EVM indexer with one of the most complete feature sets" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#1-envio-fastest-evm-indexer-with-one-of-the-most-complete-feature-sets">​</a></h3>
<p><strong>Best for:</strong> Teams building on EVM chains who need the fastest possible indexing with minimal infrastructure overhead.</p>
<p>Envio is the only indexer in this list powered by a proprietary high-performance data engine. <a href="https://docs.envio.dev/docs/HyperSync/overview" target="_blank" rel="noopener noreferrer">HyperSync</a> delivers up to 2000x faster data access than traditional RPC. Two independent benchmarks run by Sentio confirm this: in the LBTC benchmark (April 2025), HyperIndex completed in 3 minutes versus 3 hours 9 minutes for The Graph. In the Uniswap V2 Factory benchmark (May 2025), HyperIndex completed in 1 minute, 15x faster than the nearest competitor (Subsquid), 143x faster than The Graph, and 158x faster than Ponder.</p>
<p>HyperSync's speed also makes HyperIndex the fastest data source for onchain AI agents, where query latency and data freshness directly impact decision quality.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-strengths">Key strengths:<a class="hash-link" aria-label="Direct link to Key strengths:" title="Direct link to Key strengths:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#key-strengths">​</a></h4>
<ul>
<li>Powered by HyperSync, up to 2000x faster than RPC</li>
<li>Independently benchmarked as fastest in class: 15x faster than nearest competitor, 158x faster than Ponder, 143x faster than The Graph (Sentio, May 2025, Uniswap V2 Factory benchmark)</li>
<li>Wildcard indexing (only indexer in this list with full support)</li>
<li>Single indexer across multiple chains with unordered multichain mode</li>
<li>Write handlers in TypeScript or ReScript (no AssemblyScript required)</li>
<li>Full block handler support</li>
<li>Fully managed hosted service available, no infrastructure management required</li>
<li>White glove migration support for teams moving from any stack</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="honest-caveats">Honest caveats:<a class="hash-link" aria-label="Direct link to Honest caveats:" title="Direct link to Honest caveats:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#honest-caveats">​</a></h4>
<p>HyperSync native support covers 70+ EVM chains and Fuel. For chains not supported by HyperSync, indexing falls back to standard RPC speed, which is subject to the RPS limits of the endpoint. If you need non-EVM chains like Polkadot or Cosmos, SubQuery or Subsquid are better options.</p>
<p><strong>Get started:</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpx envio init</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-the-graph-best-for-ecosystem-access-and-public-subgraphs">#2 The Graph: Best for ecosystem access and public subgraphs<a class="hash-link" aria-label="Direct link to #2 The Graph: Best for ecosystem access and public subgraphs" title="Direct link to #2 The Graph: Best for ecosystem access and public subgraphs" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#2-the-graph-best-for-ecosystem-access-and-public-subgraphs">​</a></h3>
<p><strong>Best for:</strong> Teams that need access to the existing ecosystem of public subgraphs, or who want a decentralised indexing network.</p>
<p>The Graph pioneered declarative blockchain indexing and remains the most established player in the space. Its decentralised network of indexers and curators provides a layer of resilience that no single managed service can replicate. If you need access to community-maintained subgraphs for major protocols such as Uniswap, Aave, and Compound, The Graph is where those live.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-strengths-1">Key strengths:<a class="hash-link" aria-label="Direct link to Key strengths:" title="Direct link to Key strengths:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#key-strengths-1">​</a></h4>
<ul>
<li>Largest ecosystem of existing public subgraphs</li>
<li>Decentralised network (not reliant on a single vendor's uptime)</li>
<li>40+ chains on The Graph Network, 90+ chains total</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="honest-caveats-1">Honest caveats:<a class="hash-link" aria-label="Direct link to Honest caveats:" title="Direct link to Honest caveats:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#honest-caveats-1">​</a></h4>
<p>Handlers are written in <a href="https://thegraph.com/docs/en/subgraphs/developing/creating/assemblyscript-mappings/" target="_blank" rel="noopener noreferrer">AssemblyScript</a>, a TypeScript subset compiled to WebAssembly. It is stricter than TypeScript and adds a learning curve. Subgraphs are deployed per chain. There is no native single-subgraph multichain indexing. Based on the April 2025 Sentio benchmarks, The Graph was over 63x slower than HyperIndex on the same workload.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-goldsky-best-for-data-streaming-to-your-own-database">#3 Goldsky: Best for data streaming to your own database<a class="hash-link" aria-label="Direct link to #3 Goldsky: Best for data streaming to your own database" title="Direct link to #3 Goldsky: Best for data streaming to your own database" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#3-goldsky-best-for-data-streaming-to-your-own-database">​</a></h3>
<p><strong>Best for:</strong> Teams that want to stream raw blockchain data directly into their own infrastructure alongside managed subgraph hosting.</p>
<p>Goldsky is the most infrastructure-oriented indexer in this list. Its two primary products are Subgraphs (instant GraphQL APIs, fully Graph-compatible, zero maintenance) and Mirror ( streaming of blockchain and some offchain data directly into your own database or data warehouse, no configuration needed). The Mirror product is particularly suited for data-heavy teams who want to own their entire downstream data pipeline.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-strengths-2">Key strengths:<a class="hash-link" aria-label="Direct link to Key strengths:" title="Direct link to Key strengths:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#key-strengths-2">​</a></h4>
<ul>
<li>150+ chains supported</li>
<li>Fully managed, no infrastructure to run</li>
<li>Mirror pipelines stream data directly to your own database automatically</li>
<li>Reorg handling is fully automatic for Mirror pipelines (no configuration needed). For Compose pipelines, reorg handling is built-in but requires configuration via a <strong><code>depth</code></strong> setting and a chosen behaviour such as <strong><code>replay</code></strong> or <code>log</code></li>
<li>Graph-compatible subgraphs for instant GraphQL APIs</li>
<li>Compose product for event-triggered onchain and offchain workflows</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="honest-caveats-2">Honest caveats:<a class="hash-link" aria-label="Direct link to Honest caveats:" title="Direct link to Honest caveats:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#honest-caveats-2">​</a></h4>
<p>Goldsky does not support traditional block handlers in the subgraph sense. Their docs do not cover this as a feature. For block-level data access, Goldsky provides pre-indexed Blocks Subgraphs. Block-triggered processing via Compose requires additional setup. Subgraph handlers are written in AssemblyScript (Graph-compatible), not TypeScript. Wildcard indexing is not documented as a feature.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="4-subquery-best-for-non-evm-chain-coverage">#4 SubQuery: Best for non-EVM chain coverage<a class="hash-link" aria-label="Direct link to #4 SubQuery: Best for non-EVM chain coverage" title="Direct link to #4 SubQuery: Best for non-EVM chain coverage" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#4-subquery-best-for-non-evm-chain-coverage">​</a></h3>
<p><strong>Best for:</strong> Teams building across EVM and non-EVM ecosystems, including Polkadot, Cosmos, Bitcoin, and more.</p>
<p>SubQuery stands out for its chain coverage. With support for <a href="https://subquery.network/networks" target="_blank" rel="noopener noreferrer">300+ chains</a> across EVM and non-EVM ecosystems,it is one of the most chain-inclusive indexers in this list. If your product lives on Polkadot or Cosmos and you also need EVM support, SubQuery is the most natural fit for now.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-strengths-3">Key strengths:<a class="hash-link" aria-label="Direct link to Key strengths:" title="Direct link to Key strengths:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#key-strengths-3">​</a></h4>
<ul>
<li>300+ chains, broadest coverage including non-EVM</li>
<li>Single project can index data across multiple chains</li>
<li>TypeScript handlers</li>
<li>Block handlers supported</li>
<li>Decentralised hosted service via SubQuery Network</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="honest-caveats-3">Honest caveats:<a class="hash-link" aria-label="Direct link to Honest caveats:" title="Direct link to Honest caveats:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#honest-caveats-3">​</a></h4>
<p>Data ingestion runs on standard RPC speed. Block handlers are noted in SubQuery's own documentation to slow indexing as they fire on every block.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="5-subsquid-sqd-best-option-with-fast-historical-backfills">#5 Subsquid (SQD): Best option with fast historical backfills<a class="hash-link" aria-label="Direct link to #5 Subsquid (SQD): Best option with fast historical backfills" title="Direct link to #5 Subsquid (SQD): Best option with fast historical backfills" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#5-subsquid-sqd-best-option-with-fast-historical-backfills">​</a></h3>
<p><strong>Best for:</strong> Teams who want fast historical data access, and non-EVM chain support.</p>
<p>Subsquid's decentralised data lake processes historical blockchain data at tens of thousands of blocks per second. SQD describes this approach as up to 1000x faster than traditional methods like subgraphs, based on their own published benchmarks (<a href="https://blog.sqd.dev/fastest-web3-indexer-explained/" target="_blank" rel="noopener noreferrer">source</a>).</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-strengths-4">Key strengths:<a class="hash-link" aria-label="Direct link to Key strengths:" title="Direct link to Key strengths:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#key-strengths-4">​</a></h4>
<ul>
<li>Decentralised data lake, significantly faster than RPC for historical data (SQD’s own claim: up to 1000x faster than traditional methods like subgraphs (<a href="https://blog.sqd.dev/fastest-web3-indexer-explained/" target="_blank" rel="noopener noreferrer">source</a>))</li>
<li>100+ chains including EVM and non-EVM</li>
<li>TypeScript handlers</li>
<li>Block handlers supported</li>
<li>Factory contract wildcard patterns supported</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="honest-caveats-4">Honest caveats:<a class="hash-link" aria-label="Direct link to Honest caveats:" title="Direct link to Honest caveats:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#honest-caveats-4">​</a></h4>
<p>The wildcard support is scoped to factory contract patterns and is not the same as Envio's fully address-free wildcard indexing. Live chain-head performance is not independently benchmarked against the other indexers in this list.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6-ormi-0xgraph-best-fully-managed-option-for-graph-compatible-subgraphs">#6 Ormi (0xGraph): Best fully managed option for Graph-compatible subgraphs<a class="hash-link" aria-label="Direct link to #6 Ormi (0xGraph): Best fully managed option for Graph-compatible subgraphs" title="Direct link to #6 Ormi (0xGraph): Best fully managed option for Graph-compatible subgraphs" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#6-ormi-0xgraph-best-fully-managed-option-for-graph-compatible-subgraphs">​</a></h3>
<p><strong>Best for:</strong> Teams already using The Graph's subgraph standard who want a managed, low-latency alternative without rebuilding their indexing logic.</p>
<p>Ormi's main pitch is a managed, high-performance layer on top of the subgraph standard. If you have existing subgraphs and want to migrate to a lower-latency managed service without rewriting your handlers, Ormi is a credible path. They also offer GraphQL, REST, and SQL query interfaces in a single platform, which is a genuine differentiator.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-strengths-5">Key strengths:<a class="hash-link" aria-label="Direct link to Key strengths:" title="Direct link to Key strengths:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#key-strengths-5">​</a></h4>
<ul>
<li>Fully managed service</li>
<li>GraphQL, REST, and SQL query interfaces</li>
<li>The Graph subgraph standard compatible</li>
<li>70+ EVM chains</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="honest-caveats-5">Honest caveats:<a class="hash-link" aria-label="Direct link to Honest caveats:" title="Direct link to Honest caveats:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#honest-caveats-5">​</a></h4>
<p>Ormi's performance claims (sub-30ms query latency at 4,000 RPS) are self-reported and have not been independently verified in third-party benchmarks. Handlers are written in AssemblyScript only, with no native TypeScript support. Wildcard indexing is not documented.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="7-ponder-best-for-self-hosted-typescript-stacks">#7 Ponder: Best for self-hosted TypeScript stacks<a class="hash-link" aria-label="Direct link to #7 Ponder: Best for self-hosted TypeScript stacks" title="Direct link to #7 Ponder: Best for self-hosted TypeScript stacks" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#7-ponder-best-for-self-hosted-typescript-stacks">​</a></h3>
<p><strong>Best for:</strong> Teams with strong DevOps capability who want full control over every layer of their indexing infrastructure.</p>
<p>Ponder is a TypeScript-native, self-hosted indexer designed for developers who want maximum flexibility and no managed dependency. It is clean, well-designed, and has a growing community. If you want to own your entire stack and have the engineering capacity to manage it, Ponder is worth evaluating.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-strengths-6">Key strengths:<a class="hash-link" aria-label="Direct link to Key strengths:" title="Direct link to Key strengths:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#key-strengths-6">​</a></h4>
<ul>
<li>TypeScript-native throughout</li>
<li>Full control over infrastructure</li>
<li>Block handlers via configurable block intervals</li>
<li>Multichain support</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="honest-caveats-6">Honest caveats:<a class="hash-link" aria-label="Direct link to Honest caveats:" title="Direct link to Honest caveats:" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#honest-caveats-6">​</a></h4>
<p>There is no official hosted service. You deploy and manage your own infrastructure. Data ingestion relies on standard RPC endpoints. Not suited for teams who want managed reliability out of the box.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feature-comparison">Feature comparison<a class="hash-link" aria-label="Direct link to Feature comparison" title="Direct link to Feature comparison" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#feature-comparison">​</a></h2>
<table><thead><tr><th>Feature</th><th>Envio</th><th>The Graph</th><th>Goldsky</th><th>SubQuery</th><th>Subsquid (SQD)</th><th>Ormi</th><th>Ponder</th></tr></thead><tbody><tr><td>Event handlers</td><td>Yes</td><td>Yes</td><td>Yes (subgraphs)</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td></tr><tr><td>Block handlers</td><td>Yes</td><td>Yes</td><td>No direct support. Pre-indexed Blocks Subgraphs available. Compose task triggers for event processing</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes (intervals)</td></tr><tr><td>Multichain single indexer</td><td>Yes</td><td>No</td><td>No (Mirror can stream multiple chains, but subgraphs are per-chain)</td><td>Yes</td><td>Yes</td><td>No (subgraphs are deployed per chain)</td><td>Yes</td></tr><tr><td>Reorg handling</td><td>Yes (automatic, configurable)</td><td>Yes</td><td>Yes (automatic for Mirror, configurable for Compose)</td><td>Yes</td><td>Yes</td><td>Yes (claimed)</td><td>Yes</td></tr><tr><td>Handler language</td><td>TypeScript, JavaScript, ReScript</td><td>AssemblyScript</td><td>AssemblyScript for subgraphs, TypeScript for Mirror transforms</td><td>TypeScript</td><td>TypeScript</td><td>AssemblyScript</td><td>TypeScript</td></tr><tr><td>GraphQL API</td><td>Yes (auto-generated). SQL access available on dedicated plans.</td><td>Yes (auto-generated)</td><td>Yes (subgraphs)</td><td>Yes</td><td>Yes</td><td>Yes, plus REST and SQL</td><td>Yes</td></tr><tr><td>Hosted service</td><td>Yes</td><td>Yes (decentralised network)</td><td>Yes (fully managed)</td><td>Yes (SubQuery Network)</td><td>Yes (SQD Network)</td><td>Yes (fully managed)</td><td>No</td></tr><tr><td>Wildcard indexing</td><td>Yes</td><td>No</td><td>Not documented</td><td>No</td><td>Factory patterns only</td><td>No</td><td>No</td></tr><tr><td>Supported networks</td><td>70+ EVM chains and Fuel via HyperSync, Solana (experimental) and any EVM via RPC</td><td>40+ on network, 90+ total</td><td>150+ chains</td><td>300+ (EVM and non-EVM)</td><td>100+ (EVM and non-EVM)</td><td>70+ EVM</td><td>Any EVM via RPC</td></tr><tr><td>Independently benchmarked speed</td><td>Fastest: 1 min (Sentio Uniswap V2 Factory benchmark, May 2025)</td><td>2h23m (Sentio Uniswap V2 Factory benchmark, May 2025)</td><td>Benchmarked (Goldsky_Subgraph, Sentio benchmarks)</td><td>Benchmarked (single-contract benchmark)</td><td>15 min (Sentio Uniswap V2 Factory benchmark, May 2025)</td><td>Not benchmarked</td><td>2h38m (Sentio Uniswap V2 Factory benchmark, May 2025)</td></tr><tr><td>White glove migration</td><td>Yes</td><td>No</td><td>No</td><td>No</td><td>No</td><td>Partial</td><td>No</td></tr><tr><td>AI-assisted development</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td><td>No</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-choose-the-right-blockchain-indexer">How to choose the right blockchain indexer<a class="hash-link" aria-label="Direct link to How to choose the right blockchain indexer" title="Direct link to How to choose the right blockchain indexer" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#how-to-choose-the-right-blockchain-indexer">​</a></h2>
<p>The right indexer depends on what you are building, which chains you need, and how much infrastructure you want to manage.</p>
<p><strong>If you need the fastest EVM indexing with the most complete feature set.</strong> Use Envio. It is the only indexer independently benchmarked as fastest in class, powered by HyperSync rather than standard RPC. It also has wildcard indexing, multichain in a single indexer, TypeScript throughout, a fully managed hosted service, and first-class support for AI-assisted development.</p>
<p><strong>If you need non-EVM chains (Polkadot, Cosmos, Bitcoin, etc.).</strong> Use SubQuery (300+ chains) or Subsquid (100+ chains). Both support EVM and non-EVM networks in a single framework.</p>
<p><strong>If you have existing Graph subgraphs and want a managed upgrade.</strong> Migrate to Envio for significantly faster indexing with white glove migration support. Or use Goldsky (149+ chains, Mirror streaming, fully managed) or Ormi (fully managed, GraphQL/REST/SQL) for a near-zero-rewrite migration. Both are Graph-compatible.</p>
<p><strong>If you want to stream raw blockchain data into your own database.</strong> Use Envio HyperSync for custom pipelines, up to 2000x faster than RPC with client libraries for Python, Rust, Node.js, and Go. Or use Goldsky Mirror for automatic streaming to Postgres and other sinks with no code required.</p>
<p><strong>If you need a self-hosted indexer with maximum performance</strong>. Use Envio. It is self-hostable via Docker, powered by HyperSync, and independently benchmarked as the fastest blockchain indexer available. 143x faster than The Graph on the Uniswap V2 Factory benchmark (Sentio, May 2025).</p>
<p><strong>If you need access to the broadest ecosystem of existing community subgraphs.</strong> Use The Graph. Its decentralised network has the largest collection of publicly maintained subgraphs for major protocols.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-honest-bottom-line">The honest bottom line<a class="hash-link" aria-label="Direct link to The honest bottom line" title="Direct link to The honest bottom line" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#the-honest-bottom-line">​</a></h2>
<p>For most teams building on EVM chains, Envio HyperIndex is the strongest choice. It is the only indexer in this list independently benchmarked as fastest in class, the only one with true wildcard indexing, and the only one powered by a purpose-built data engine rather than standard RPC. It supports multichain indexing from a single indexer, offers fully managed hosting or self-hosted via Docker, and has white glove migration support for teams moving from The Graph or any other indexer.</p>
<p>If you are not on EVM chains, SubQuery or Subsquid cover the broadest non-EVM network range. If you need access to existing community subgraphs for major protocols, The Graph remains the largest ecosystem for those. For every other use case, start with Envio.</p>
<p>Get started in under 5 minutes: <strong><code>pnpx envio init</code></strong></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="frequently-asked-questions">Frequently asked questions<a class="hash-link" aria-label="Direct link to Frequently asked questions" title="Direct link to Frequently asked questions" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#frequently-asked-questions">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-a-blockchain-indexer-1">What is a blockchain indexer?<a class="hash-link" aria-label="Direct link to What is a blockchain indexer?" title="Direct link to What is a blockchain indexer?" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#what-is-a-blockchain-indexer-1">​</a></h3>
<p>A blockchain indexer is a system that listens to onchain events (transactions, logs, state changes, blocks) and organises them into a structured, queryable database. Developers use indexers to build fast, reliable backends for dApps, DeFi protocols, NFT platforms, and analytics tools without querying slow RPC endpoints directly.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-the-fastest-blockchain-indexer-in-2026">What is the fastest blockchain indexer in 2026?<a class="hash-link" aria-label="Direct link to What is the fastest blockchain indexer in 2026?" title="Direct link to What is the fastest blockchain indexer in 2026?" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#what-is-the-fastest-blockchain-indexer-in-2026">​</a></h3>
<p>Based on two independent benchmarks run by Sentio, Envio HyperIndex is the fastest blockchain indexer in independent benchmarks. In the Uniswap V2 Factory benchmark (May 2025), HyperIndex completed in 1 minute, 15x faster than the nearest competitor (Subsquid), 143x faster than The Graph, and 158x faster than Ponder. In the LBTC benchmark (April 2025), the same task took 3 minutes with HyperIndex and 3 hours 9 minutes with The Graph. All benchmark data is publicly available.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="which-blockchain-indexer-supports-the-most-chains">Which blockchain indexer supports the most chains?<a class="hash-link" aria-label="Direct link to Which blockchain indexer supports the most chains?" title="Direct link to Which blockchain indexer supports the most chains?" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#which-blockchain-indexer-supports-the-most-chains">​</a></h3>
<p>SubQuery supports the most chains at 300+, including both EVM and non-EVM networks such as Polkadot, Cosmos, and Bitcoin. Subsquid supports 100+ chains. Goldsky supports 150+ chains. Envio supports 70+ EVM chains with native HyperSync support for maximum speed, plus any EVM chain via RPC.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-the-difference-between-a-blockchain-indexer-and-a-data-api-like-dune-or-covalent">What is the difference between a blockchain indexer and a data API like Dune or Covalent?<a class="hash-link" aria-label="Direct link to What is the difference between a blockchain indexer and a data API like Dune or Covalent?" title="Direct link to What is the difference between a blockchain indexer and a data API like Dune or Covalent?" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#what-is-the-difference-between-a-blockchain-indexer-and-a-data-api-like-dune-or-covalent">​</a></h3>
<p>A custom indexing framework (HyperIndex, The Graph, Ponder, etc.) lets you define exactly what data to track, write handler logic that transforms onchain events into your own schema, and query the results via a generated API. A pre-built data API like Dune Analytics or Covalent exposes pre-indexed, read-only data. You query what they have already indexed, but you cannot define custom indexing logic or schemas. Both are useful, but they solve different problems.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-do-i-migrate-from-the-graph-to-envio-hyperindex">How do I migrate from The Graph to Envio HyperIndex?<a class="hash-link" aria-label="Direct link to How do I migrate from The Graph to Envio HyperIndex?" title="Direct link to How do I migrate from The Graph to Envio HyperIndex?" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#how-do-i-migrate-from-the-graph-to-envio-hyperindex">​</a></h3>
<p>HyperIndex has a <a href="https://docs.envio.dev/docs/HyperIndex/migration-guide" target="_blank" rel="noopener noreferrer">dedicated migration guide</a> that walks you through it in 3 simple steps. Envio also offers white glove migration support for teams moving from any stack. Reach out to us via <a href="https://discord.com/invite/envio" target="_blank" rel="noopener noreferrer">Discord</a> for support.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-hypersync">What is HyperSync?<a class="hash-link" aria-label="Direct link to What is HyperSync?" title="Direct link to What is HyperSync?" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#what-is-hypersync">​</a></h3>
<p>HyperSync is Envio's high-performance blockchain data engine that powers HyperIndex. It provides a low-level data access layer that is up to 2000x faster than traditional JSON-RPC endpoints. HyperSync can also be used directly for custom data pipelines in Python, Rust, Node.js, and Go. It supports 70+ EVM chains and Fuel.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="build-with-envio">Build With Envio<a class="hash-link" aria-label="Direct link to Build With Envio" title="Direct link to Build With Envio" href="https://docs.envio.dev/blog/best-blockchain-indexers-2026#build-with-envio">​</a></h2>
<p>Envio is the fastest independently benchmarked EVM blockchain indexer for querying real-time and historical data. If you are building onchain and need indexing that keeps up with your chain, check out the <a href="https://docs.envio.dev/docs/HyperIndex/overview" target="_blank" rel="noopener noreferrer">docs</a>, run the benchmarks yourself, and come talk to us about your data needs.</p>
<p>Stay tuned for more updates by subscribing to our newsletter, following us on X, or hopping into our Discord.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Envio Developer Update February 2026]]></title>
            <link>https://docs.envio.dev/blog/envio-developer-update-february-2026</link>
            <guid>https://docs.envio.dev/blog/envio-developer-update-february-2026</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Envio Developer Update February 2026: HyperIndex v3 alpha.13 with 3x faster backfills, improved RPC support, MegaETH and Sei indexing, new builder series, and Uniswap v4 alert bots.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/dev-update-feb-26.png" alt="Cover Image Envio Developer Update Feb 2026" width="100%">
<p>February brings a couple new HyperIndex V3 alpha release along with expanded network support and feature updates. We shipped HyperIndex v3.0.0 alpha.13 &amp; alpha.14 with 3x faster historical backfills, support for DESC indices, improved RPC source support, experimental WebSocket support, and a breaking configuration change with <code>rpc_config</code> removed in favour of <code>rpc</code>, new getWhere API, removed ordered multichain mode support, big Cursor/Claude update and much more!</p>
<p>We expanded our indexing support to MegaETH mainnet and Sei. This month also includes a new multi-part YouTube series on building with HyperIndex and updates to our Uniswap v4 alert bots. Let’s dive in!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-new-release-hyperindex-v300---alpha13--alpha14">⚡ New release: HyperIndex v3.0.0 - alpha.13 &amp; alpha.14<a class="hash-link" aria-label="Direct link to ⚡ New release: HyperIndex v3.0.0 - alpha.13 &amp; alpha.14" title="Direct link to ⚡ New release: HyperIndex v3.0.0 - alpha.13 &amp; alpha.14" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#-new-release-hyperindex-v300---alpha13--alpha14">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="alpha14">Alpha.14<a class="hash-link" aria-label="Direct link to Alpha.14" title="Direct link to Alpha.14" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#alpha14">​</a></h3>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="breaking-new-getwhere-api">🚨&nbsp;Breaking: New getWhere API<a class="hash-link" aria-label="Direct link to 🚨&nbsp;Breaking: New getWhere API" title="Direct link to 🚨&nbsp;Breaking: New getWhere API" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#breaking-new-getwhere-api">​</a></h3>
<p>We updated our getWhere API to enable support for multiple filters at a time in future HyperIndex versions. Instead of chaining, it now uses a single function call with filters that match GraphQL style for familiarity.</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Old: context.Entity.getWhere.fieldName.eq(value)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">New: context.Entity.getWhere({ fieldName: { _eq: value } })</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="-breaking-removed-ordered-multichain-mode-support">🔄 Breaking: Removed Ordered Multichain Mode Support<a class="hash-link" aria-label="Direct link to 🔄 Breaking: Removed Ordered Multichain Mode Support" title="Direct link to 🔄 Breaking: Removed Ordered Multichain Mode Support" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#-breaking-removed-ordered-multichain-mode-support">​</a></h3>
<p>Ordered Multichain Mode forced events across all processed chains into global onchain order, causing significant latency and allowing one bad chain to freeze the entire indexing process.</p>
<p>Events are still processed in on-chain order per chain.
For cross-chain interactions, create a partial entity on one chain and finalize it when the related event arrives on another chain. This provides lower latency and a more reliable system.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="big-cursorclaude-skills-update">🤖&nbsp;Big Cursor/Claude Skills Update<a class="hash-link" aria-label="Direct link to 🤖&nbsp;Big Cursor/Claude Skills Update" title="Direct link to 🤖&nbsp;Big Cursor/Claude Skills Update" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#big-cursorclaude-skills-update">​</a></h3>
<p>We updated <code>envio init</code> to create projects with multiple skills to support agentic driven development.</p>
<p>The LLM landscape changes quickly, so we welcome feedback to improve the skills and the development experience with them.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="️chain-info-for-test-indexer">⛓️&nbsp;Chain Info for Test Indexer<a class="hash-link" aria-label="Direct link to ⛓️&nbsp;Chain Info for Test Indexer" title="Direct link to ⛓️&nbsp;Chain Info for Test Indexer" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#%EF%B8%8Fchain-info-for-test-indexer">​</a></h3>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">const indexer = createTestIndexer();</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">indexer.chainIds</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">indexer.chains</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">indexer.chains[1].id</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">indexer.chains[1].name</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">indexer.chains[1].startBlock</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">indexer.chains[1].endBlock</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">indexer.chains[1].ERC20.abi</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">indexer.chains[1].ERC20.addresses // Useful to test dynamic registrations</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="alpha13">Alpha.13<a class="hash-link" aria-label="Direct link to Alpha.13" title="Direct link to Alpha.13" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#alpha13">​</a></h3>
<p>This alpha release focused on performance improvements, expanded indexing capabilities, and RPC configuration changes as we continue iterating on V3.</p>
<p>Historical backfills are significantly faster, query flexibility has improved with support for descending indices, RPC sources now expose additional receipt level fields, and configuration has been streamlined with the removal of <code>rpc_config</code> in favour of a unified <strong><code>rpc</code></strong> structure.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="️-3x-historical-backfill-performance">🏎️ 3x Historical Backfill Performance<a class="hash-link" aria-label="Direct link to 🏎️ 3x Historical Backfill Performance" title="Direct link to 🏎️ 3x Historical Backfill Performance" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#%EF%B8%8F-3x-historical-backfill-performance">​</a></h3>
<p>We introduced chunking logic to request events across multiple ranges at once, fixed overfetching for contracts with much later <code>start_block</code> values, and sped up dynamic contract registration.</p>
<p>If data fetching was your bottleneck, this release helps.</p>
<p><strong><span style="text-decoration:underline">25k events per second is now standard</span></strong></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="-support-for-desc-indices">📉 Support for DESC Indices<a class="hash-link" aria-label="Direct link to 📉 Support for DESC Indices" title="Direct link to 📉 Support for DESC Indices" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#-support-for-desc-indices">​</a></h3>
<p>You can now define indices with descending order to improve query performance:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">type PoolDayData</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  @index(fields: ["poolId", ["date", "DESC"]]) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  id: ID!</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  poolId: String!</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  date: Timestamp!</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="-improved-rpc-source-support">⛽ Improved RPC Source Support<a class="hash-link" aria-label="Direct link to ⛽ Improved RPC Source Support" title="Direct link to ⛽ Improved RPC Source Support" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#-improved-rpc-source-support">​</a></h3>
<p>Added support for receipt-only fields:</p>
<p>• <strong><code>gasUsed</code></strong></p>
<p>• <strong><code>cumulativeGasUsed</code></strong></p>
<p>• <strong><code>effectiveGasPrice</code></strong></p>
<p>When one of these fields is added in <code>field_selection</code>, HyperIndex will automatically perform an additional <code>eth_getTransactionReceipt</code> request.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="-websocket-support-for-rpc-experimental">🔌 WebSocket Support for RPC (Experimental)<a class="hash-link" aria-label="Direct link to 🔌 WebSocket Support for RPC (Experimental)" title="Direct link to 🔌 WebSocket Support for RPC (Experimental)" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#-websocket-support-for-rpc-experimental">​</a></h3>
<p>Experimental WebSocket support for RPC sources to improve head latency.</p>
<p>If you run into issues, please open a GitHub issue. 🙏</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">chains:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  - id: 1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    rpc:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      url: ${ENVIO_RPC_ENDPOINT}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      ws: ${ENVIO_WS_ENDPOINT}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      for: live</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="breaking-rpc_config-removed">🚨Breaking: rpc_config Removed<a class="hash-link" aria-label="Direct link to 🚨Breaking: rpc_config Removed" title="Direct link to 🚨Breaking: rpc_config Removed" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#breaking-rpc_config-removed">​</a></h3>
<p><code>rpc_config</code> has been removed in favour of <strong><code>rpc</code></strong>.</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">- rpc_config</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+ rpc:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      url: ${ENVIO_RPC_ENDPOINT}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+     for: sync # Add to force RPC usage instead of HyperSync</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Additionally, you can specify multiple rpcs by providing a list:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">rpc:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  - url: ${ENVIO_RPC_ENDPOINT}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    for: sync</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  - url: ${ENVIO_RPC_FALLBACK_ENDPOINT}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    for: fallback</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If <strong><code>for</code></strong> is not provided, the RPC URL is used as a fallback for HyperSync or as the main source when HyperSync is not supported.</p>
<p>We recommend migrating to v3.0.0 alpha. 13 to take advantage of the performance improvements and configuration updates. Give it a test and let us know how it goes. We welcome any feedback as we continue refining V3.</p>
<p>For information, be sure to check out the full release notes. More updates coming soon.</p>
<p>👉 See full <a href="https://github.com/enviodev/hyperindex/releases" target="_blank" rel="noopener noreferrer">release notes</a></p>
<p>👉 Star us on <a href="https://github.com/enviodev/hyperindex" target="_blank" rel="noopener noreferrer">GitHub</a> ⭐</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="indexing-data-on-megaeth-mainnet">Indexing Data on MegaEth Mainnet<a class="hash-link" aria-label="Direct link to Indexing Data on MegaEth Mainnet" title="Direct link to Indexing Data on MegaEth Mainnet" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#indexing-data-on-megaeth-mainnet">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-feb-26-1.gif" alt="MegaEth Mainnet" width="100%">
<p><a href="https://rabbithole.megaeth.com/" target="_blank" rel="noopener noreferrer">MegaETH</a> launched its public Mainnet on February 9, 2026, marking the transition from testnet experimentation to a live production network. As a performance focused Ethereum Layer 2, MegaETH is built to support high throughput and low latency execution for onchain applications.</p>
<p>With mainnet now live, developers can deploy and operate applications directly on the network.</p>
<p>Envio proudly supports developers building on MegaETH Mainnet, providing efficient access to real-time and historical data for teams building in the ecosystem.</p>
<p>For more information, see the original <a href="https://x.com/envio_indexer/status/2020882703583727665?s=20" target="_blank" rel="noopener noreferrer">post</a> on X.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="building-indexers-with-hyperindex">Building Indexers with HyperIndex<a class="hash-link" aria-label="Direct link to Building Indexers with HyperIndex" title="Direct link to Building Indexers with HyperIndex" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#building-indexers-with-hyperindex">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-feb-26-2.png" alt="Building Indexers with HyperIndex" width="100%">
<p>Check out Decrypted Bytes’ new multi-part YouTube series that walks through how to build with HyperIndex. The series covers building an indexer using HyperIndex from scratch. It follows the full process in a live coding format, showing how to set up, iterate, and expand an indexer step by step.</p>
<p>If you want to learn how to build with HyperIndex in practice, this series is a great place to start.</p>
<p>Be sure to check out the series on <a href="https://www.youtube.com/@decryptedbytes/streams" target="_blank" rel="noopener noreferrer">YouTube</a> and subscribe to follow along as more parts are released.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="tyde-terminal-tide-visualiser">Tyde Terminal Tide Visualiser<a class="hash-link" aria-label="Direct link to Tyde Terminal Tide Visualiser" title="Direct link to Tyde Terminal Tide Visualiser" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#tyde-terminal-tide-visualiser">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-feb-26-3.gif" alt="Tyde" width="100%">
<p>Tyde is an open source terminal based tool that visualises real world tide levels directly in the command line. It renders an animated tide scene with waves, sand, and foam, alongside a 24-hour tide chart showing the current position in the cycle. Sunrise and sunset times are also displayed, with support for a day and night cycle.</p>
<p>Tide predictions are computed locally using harmonic analysis across more than 50 global stations, with no external APIs required.</p>
<p>You can run Tyde directly in your terminal on macOS or Linux, or build it from source.</p>
<p>For more information, see the <a href="https://github.com/moose-code/tyde" target="_blank" rel="noopener noreferrer">GitHub repo</a> or the original <a href="https://x.com/jonjonclark/status/2022313741593858297?s=20" target="_blank" rel="noopener noreferrer">post</a> on X.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="index-data-on-sei">Index Data on Sei<a class="hash-link" aria-label="Direct link to Index Data on Sei" title="Direct link to Index Data on Sei" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#index-data-on-sei">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-feb-26-4.png" alt="Index data on Sei" width="100%">
<p>Just Sei it.</p>
<p>Build, index &amp; scale high performance apps on <a href="https://www.sei.io/" target="_blank" rel="noopener noreferrer">Sei</a> using Envio.</p>
<p>Instantly access real-time &amp; historical data on one of the fastest L1 EVMs. Sync millions of events in minutes, 2000× faster than RPC.</p>
<p>Easy. Fast. Fully customizable.</p>
<p>For more information, see the original <a href="https://x.com/envio_indexer/status/2021981848557986255?s=20" target="_blank" rel="noopener noreferrer">post</a> on X.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-alerts-uniswap-v4-alert-bots">Envio Alerts: Uniswap v4 Alert Bots<a class="hash-link" aria-label="Direct link to Envio Alerts: Uniswap v4 Alert Bots" title="Direct link to Envio Alerts: Uniswap v4 Alert Bots" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#envio-alerts-uniswap-v4-alert-bots">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-feb-26-5.png" alt="Envio alert bots" width="100%">
<p>Get automated alerts when a Uniswap v4 pool crosses 1m in TVL, including when an MEV bot trade causes the threshold to be hit.</p>
<p>Each alert includes:</p>
<ul>
<li>Token pair</li>
<li>TVL threshold hit</li>
<li>Chain</li>
</ul>
<p>The <a href="https://t.me/+5uldwTve8ns3MDFk" target="_blank" rel="noopener noreferrer">MEV Alerts bot</a> highlights MEV driven TVL events, while the <a href="https://t.me/+0eUs4YO6HMJlNzBk" target="_blank" rel="noopener noreferrer">Liquid Token Alerts bot</a> tracks pools crossing the 1m TVL mark.</p>
<p>Be sure to join the bot groups on Telegram to receive alerts in real-time and stay up to date on Uniswap v4 pool activity.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-current--upcoming-events--hackathons">🗓️ Current &amp; Upcoming Events &amp; Hackathons<a class="hash-link" aria-label="Direct link to 🗓️ Current &amp; Upcoming Events &amp; Hackathons" title="Direct link to 🗓️ Current &amp; Upcoming Events &amp; Hackathons" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#%EF%B8%8F-current--upcoming-events--hackathons">​</a></h2>
<ul>
<li><a href="https://ethdenver.com/" target="_blank" rel="noopener noreferrer">EthDenver - Denver</a>: Feb 17th → 21st</li>
<li><a href="https://ethcc.io/" target="_blank" rel="noopener noreferrer">EthCC - Cannes</a>: March 30th → April 2nd</li>
<li><a href="https://ethconf.com/" target="_blank" rel="noopener noreferrer">EthConf - New York</a>: June 8th → 10th</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-playlist-of-the-month">🎧️ Playlist of the Month<a class="hash-link" aria-label="Direct link to 🎧️ Playlist of the Month" title="Direct link to 🎧️ Playlist of the Month" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#%EF%B8%8F-playlist-of-the-month">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-feb-26-7.png" alt="PLOTM Feb 2026" width="100%">
<p>▶️ <a href="https://open.spotify.com/playlist/0CNf2YeAWBGUii76h6xilv?si=575e6a3e76c844b5" target="_blank" rel="noopener noreferrer">Open Spotify</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="build-with-envio">Build with Envio<a class="hash-link" aria-label="Direct link to Build with Envio" title="Direct link to Build with Envio" href="https://docs.envio.dev/blog/envio-developer-update-february-2026#build-with-envio">​</a></h2>
<p>Envio is a multi-chain EVM blockchain indexer for querying real-time and historical data. If you’re working on a Web3 project and want a smoother development process, Envio’s got your back(end). Check out our docs, join the community, and let’s talk about your data needs.</p>
<p>Stay tuned for more monthly updates by subscribing to our newsletter, following us on X, or hopping into our Discord for more up-to-date information.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Blockchain Indexer For Application Backends]]></title>
            <link>https://docs.envio.dev/blog/blockchain-indexer-application-backends</link>
            <guid>https://docs.envio.dev/blog/blockchain-indexer-application-backends</guid>
            <pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[How blockchain indexers are used in practice to build reliable application backends and how Envio fits into that workflow.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/blockchain-indexer-backends.png" alt="Cover Image for Blockchain Indexer For Application Backends blog" width="100%">
<p>A blockchain indexer is rarely the end product. For most teams, it is a core part of the backend that sits between the blockchain and their application.</p>
<p>This blog focuses on how developers and analysts actually use a blockchain indexer in practice, the problems it solves at the backend layer, and how blockchain indexers like Envio fit into that workflow and streamline the overall development process.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-a-blockchain-indexer">What is a blockchain indexer<a class="hash-link" aria-label="Direct link to What is a blockchain indexer" title="Direct link to What is a blockchain indexer" href="https://docs.envio.dev/blog/blockchain-indexer-application-backends#what-is-a-blockchain-indexer">​</a></h2>
<p>A blockchain indexer is a specialised tool that ingests raw blockchain data and transforms it into structured data that application backends can query efficiently.</p>
<p>Rather than querying blocks, transactions, or logs directly through RPC on every request, developers define how blockchain events should be processed and stored. The indexer applies this logic consistently as new data is produced and as historical data is processed.</p>
<p>The result is a reliable, queryable data layer built from on-chain activity.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-blockchain-indexers-work">How blockchain indexers work<a class="hash-link" aria-label="Direct link to How blockchain indexers work" title="Direct link to How blockchain indexers work" href="https://docs.envio.dev/blog/blockchain-indexer-application-backends#how-blockchain-indexers-work">​</a></h2>
<p>In practice, a blockchain indexer follows a simple model:</p>
<ul>
<li>Read blockchain data such as blocks, transactions, and event logs</li>
<li>Apply developer-defined logic to the data</li>
<li>Store the results as structured entities</li>
</ul>
<p>This logic is deterministic and repeatable. Given the same inputs, the indexer produces the same outputs, which makes indexed data predictable and safe to depend on in application backends.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-backend-problem-blockchain-apps-run-into">The backend problem blockchain apps run into<a class="hash-link" aria-label="Direct link to The backend problem blockchain apps run into" title="Direct link to The backend problem blockchain apps run into" href="https://docs.envio.dev/blog/blockchain-indexer-application-backends#the-backend-problem-blockchain-apps-run-into">​</a></h2>
<p>Application backends need structured state. Blockchains expose raw data. When applications rely directly on RPC endpoints, backend logic quickly becomes responsible for:</p>
<ul>
<li>Reconstructing the state from historical events</li>
<li>Tracking contract changes over time</li>
<li>Handling retries, partial failures, and reorgs</li>
<li>Translating low-level logs into usable application data</li>
</ul>
<p>As your project scales, this logic becomes difficult to manage and expensive to maintain. Blockchain indexers like Envio exist to absorb this complexity by transforming on-chain events into structured, queryable data that your backend can depend on.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-role-a-blockchain-indexer-plays">What role a blockchain indexer plays<a class="hash-link" aria-label="Direct link to What role a blockchain indexer plays" title="Direct link to What role a blockchain indexer plays" href="https://docs.envio.dev/blog/blockchain-indexer-application-backends#what-role-a-blockchain-indexer-plays">​</a></h2>
<p>Rather than serving as an analytics layer, a blockchain indexer functions as backend infrastructure. It continuously processes blockchain data and maintains an up-to-date representation of application state that backends can query directly.</p>
<p>In practice, this means:</p>
<ul>
<li>Indexing contract events once instead of repeatedly</li>
<li>Converting raw logs into structured entities</li>
<li>Persisting derived state that applications can rely on</li>
<li>Keeping blockchain-specific logic out of application code</li>
</ul>
<p>This separation makes backends simpler, more predictable, and easier to scale.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="where-the-indexed-data-gets-used">Where the indexed data gets used<a class="hash-link" aria-label="Direct link to Where the indexed data gets used" title="Direct link to Where the indexed data gets used" href="https://docs.envio.dev/blog/blockchain-indexer-application-backends#where-the-indexed-data-gets-used">​</a></h2>
<p>Once data is indexed, application backends can:</p>
<ul>
<li>Serve APIs backed by indexed blockchain state</li>
<li>Power user interfaces with pre-processed data</li>
<li>Track contract state without rescanning history</li>
<li>Build features that depend on event-driven updates</li>
</ul>
<p>Because the indexing logic is deterministic and versioned, teams can evolve their schema and handlers without rewriting application logic.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="when-a-blockchain-indexer-becomes-necessary">When a blockchain indexer becomes necessary<a class="hash-link" aria-label="Direct link to When a blockchain indexer becomes necessary" title="Direct link to When a blockchain indexer becomes necessary" href="https://docs.envio.dev/blog/blockchain-indexer-application-backends#when-a-blockchain-indexer-becomes-necessary">​</a></h2>
<p>Most teams reach for a blockchain indexer when:</p>
<p>• Application logic depends on more than the latest block</p>
<p>• Application needs access to real-time &amp; historical on-chain data</p>
<p>• Data needs to be queried frequently or predictably</p>
<p>• Applications span multiple supported networks and need a unified data layer</p>
<p>• Backend reliability becomes a priority</p>
<p>At that point, indexing once and querying structured data becomes the simplest approach.</p>
<p>Envio supports this by allowing developers to configure indexers that process data from multiple supported networks within a single project, while exposing indexed data through a consistent query interface.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="building-a-blockchain-indexer-with-envio">Building a blockchain indexer with Envio<a class="hash-link" aria-label="Direct link to Building a blockchain indexer with Envio" title="Direct link to Building a blockchain indexer with Envio" href="https://docs.envio.dev/blog/blockchain-indexer-application-backends#building-a-blockchain-indexer-with-envio">​</a></h2>
<p>Envio is designed around a developer-first indexing workflow. With Envio, developers define the contracts and events relevant to their application, write deterministic event handlers that map blockchain data into entities, and run the indexer locally to develop and validate logic. The same indexing code can then be used in hosted environments without changes.</p>
<p>As projects scale, Envio provides a set of optional capabilities that support more advanced indexing and production requirements:</p>
<ul>
<li>
<p><strong>Flexible language support:</strong> Write event handling logic in supported languages such as JavaScript and TypeScript.</p>
</li>
<li>
<p><strong><a href="https://docs.envio.dev/docs/HyperSync/overview" target="_blank" rel="noopener noreferrer">HyperSync</a>:</strong> A high-performance data retrieval layer designed to dramatically speed up access to historical blockchain data and reduce reliance on standard RPC-based syncing. HyperSync's endpoint allows up to 2000x faster indexing than standard RPC (use of RPC is optional).</p>
</li>
<li>
<p><strong>No-code Quickstart</strong>: Autogenerate the key boilerplate for an entire Indexer project off single or multiple smart contracts. Deploy within minutes.</p>
</li>
<li>
<p><strong>Multichain indexing:</strong> Aggregate data across multiple networks into a single database. Query all your data with a unified GraphQL API.</p>
</li>
<li>
<p><strong>On-chain and off-chain data ingestion</strong>: Combine indexed on-chain data with data fetched from off-chain sources to build a flexible API for richer application logic. This includes indexing off-chain NFT metadata, pulling token prices from aggregators like CoinGecko, or reading current chain state via RPC calls alongside indexed events.</p>
</li>
<li>
<p><strong>Factory contract support:</strong> Automatically register and process events emitted from all child contracts that are created by a specified factory/dynamic contract.</p>
</li>
<li>
<p><strong><a href="https://docs.envio.dev/docs/HyperIndex/hosted-service" target="_blank" rel="noopener noreferrer">Hosted service</a>:</strong> An optional managed service platform for building, hosting, and querying Envio's Indexers with 99.99% guaranteed uptime and performance service level agreements.</p>
</li>
</ul>
<p>The result is a backend data layer that remains consistent and reliable across development and production, allowing teams to scale their indexing setup without rewriting application logic.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started">Getting started<a class="hash-link" aria-label="Direct link to Getting started" title="Direct link to Getting started" href="https://docs.envio.dev/blog/blockchain-indexer-application-backends#getting-started">​</a></h2>
<p>Envio allows developers to start small and scale as you build:</p>
<ul>
<li>Index single or multiple contracts</li>
<li>Map a small set of events into entities</li>
<li>Run the indexer locally during development</li>
<li>Expand the schema and handlers as application requirements grow</li>
</ul>
<p>And much more!</p>
<p>For many applications, a blockchain indexer becomes a core part of the backend. Envio is designed to support this workflow from early development through production, using the same indexing code and development model across environments.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" href="https://docs.envio.dev/blog/blockchain-indexer-application-backends#conclusion">​</a></h2>
<p>As your application grows, working directly with raw on-chain data becomes harder to maintain.</p>
<p>A blockchain indexer moves that complexity into a dedicated layer that backends can rely on.</p>
<p>Envio provides a consistent way to build and run that layer, from local development through production, without changing how indexers are defined as requirements evolve.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="about-envio">About Envio<a class="hash-link" aria-label="Direct link to About Envio" title="Direct link to About Envio" href="https://docs.envio.dev/blog/blockchain-indexer-application-backends#about-envio">​</a></h2>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Envio</a> is a fast, developer friendly multichain blockchain indexer that makes real-time data accessible for builders across Web3.</p>
<p>With Envio, developers can query and stream blockchain data efficiently without the complexity of running their own infrastructure. Envio's blockchain indexing solution natively supports any EVM network and is trusted by many teams building everything from DeFi platforms to analytics dashboards and production applications.</p>
<p>If you're a blockchain developer or analyst looking to enhance your workflow, look no further. Join our growing community of Web3 builders and explore our docs.</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://warpcast.com/envio" target="_blank" rel="noopener noreferrer">Farcaster</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Envio Developer Update January 2026]]></title>
            <link>https://docs.envio.dev/blog/envio-developer-update-january-2026</link>
            <guid>https://docs.envio.dev/blog/envio-developer-update-january-2026</guid>
            <pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Envio Developer Update January 2026 covers HyperIndex V3 alpha progress, including a new testing framework, Vitest support, init improvements, and recent ecosystem updates.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/dev-update-jan-26.png" alt="Cover Image Envio Developer Update Jan 2026" width="100%">
<p>Over the past month, we’ve continued making steady progress on HyperIndex V3, with a strong focus on improving how developers build, test, and operate indexers day to day.</p>
<p>This update covers the latest V3 alpha features including a new testing framework, Vitest adoption, improvements to envio init, configuration and state access updates, and several quality of life enhancements across the CLI and TUI. We’re also sharing recent ecosystem updates, production migration examples, and highlights from teams building with Envio.</p>
<p>As always, these changes are incremental building blocks toward a more reliable and flexible indexing workflow, from local development through to production.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="hyperindex-v3-alpha-exciting-feature-updates">HyperIndex V3 (alpha): Exciting Feature Updates<a class="hash-link" aria-label="Direct link to HyperIndex V3 (alpha): Exciting Feature Updates" title="Direct link to HyperIndex V3 (alpha): Exciting Feature Updates" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#hyperindex-v3-alpha-exciting-feature-updates">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="big-feature-alert-new-testing-framework-experimental">🚨BIG feature alert: New Testing Framework (experimental)<a class="hash-link" aria-label="Direct link to 🚨BIG feature alert: New Testing Framework (experimental)" title="Direct link to 🚨BIG feature alert: New Testing Framework (experimental)" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#big-feature-alert-new-testing-framework-experimental">​</a></h3>
<p>V3 supports testing handler logic using real blockchain data, programmatic debugging, &amp; testing block handlers together with event handlers.</p>
<p>The framework also enables LLM workflows using a TDD approach, supports snapshotting indexer behaviour, &amp; runs multiple tests in parallel using isolated worker threads.</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">import { describe, it, expect } from "vitest"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import { createTestIndexer } from "generated"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">describe("Indexer Testing", () =&gt; {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  it("Should create accounts from ERC20 Transfer events", async () =&gt; {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    const indexer = createTestIndexer();</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    expect(</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      await indexer.process({</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        chains: {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          1: {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            startBlock: 10_861_674,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            endBlock: 10_861_674,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }),</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "Should find the first mint at block 10_861_674"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ).toMatchInlineSnapshot(`</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "changes": [</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            "Account": {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              "sets": [</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  "balance": -1000000000000000000000000000n,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  "id": "0x0000000000000000000000000000000000000000",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  "balance": 1000000000000000000000000000n,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  "id": "0x41653c7d61609d856f29355e404f310ec4142cfb",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              ],</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            "block": 10861674,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            "blockHash": "0x32e4dd857b5b7e756551a00271e44b61dbda0a91db951cf79a3e58adb28f5c09",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            "chainId": 1,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            "eventsProcessed": 1,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        ],</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    `);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}   </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="vitest---recommended-testing-framework">Vitest - Recommended Testing Framework<a class="hash-link" aria-label="Direct link to Vitest - Recommended Testing Framework" title="Direct link to Vitest - Recommended Testing Framework" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#vitest---recommended-testing-framework">​</a></h3>
<p>V3 recommends Vitest as the testing framework for indexer projects.</p>
<p>It replaces <strong><code>mocha</code></strong>, <strong><code>chai</code></strong>, and <strong><code>tsx</code></strong> with a single package that works out of the box, and supports features like snapshot testing.</p>
<p>All envio init templates have been updated to use Vitest, with tests living directly in src and support for handler specific test files.</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">"scripts": {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- "mocha": "tsc --noEmit &amp;&amp; NODE_OPTIONS='--no-warnings --import tsx' mocha --exit test/**/*.ts",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- "test": "pnpm mocha",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+ "test": "vitest run"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">},</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">"devDependencies": {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- "@types/chai": "^4.3.11",    </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- "@types/mocha": "10.0.6",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- "chai": "4.3.10",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- "tsx": "4.21.0",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- "mocha": "10.2.0"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+ "vitest": "4.0.16"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="envio-init-improvements">Envio Init Improvements<a class="hash-link" aria-label="Direct link to Envio Init Improvements" title="Direct link to Envio Init Improvements" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#envio-init-improvements">​</a></h3>
<p>V3 improves the <strong><code>envio init</code></strong> flow to make project setup quicker and smoother.</p>
<p>The ERC20 template has been updated to be multichain and includes the new testing framework as a reference. New projects can also initialize git automatically.</p>
<p>The improved init flow can include additional setup options from upcoming releases, such as configured GitHub CI and an <a href="http://agents.md/" target="_blank" rel="noopener noreferrer">AGENTS.md</a> file to support LLM-based development.</p>
<img src="https://docs.envio.dev/blog-assets/dev-update-jan-26-1.png" alt="Envio init improvements" width="100%">
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="expose-indexer-config--state">Expose Indexer Config &amp; State<a class="hash-link" aria-label="Direct link to Expose Indexer Config &amp; State" title="Direct link to Expose Indexer Config &amp; State" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#expose-indexer-config--state">​</a></h3>
<p>V3 introduces the indexer value as a replacement for <strong><code>getGeneratedByChainId</code></strong>.</p>
<p>It provides typed chains and contract data from config, along with current indexing state such as <strong><code>isLive</code></strong> and <strong><code>addresses</code></strong>.</p>
<p>New official types are also introduced:</p>
<p><strong><code>Indexer</code></strong>, <strong><code>EvmChainId</code></strong>, <strong><code>FuelChainId</code></strong>, <strong><code>SvmChainId</code></strong>.</p>
<img src="https://docs.envio.dev/blog-assets/dev-update-jan-26-2.png" alt="Expose Indexer Config &amp; State" width="100%">
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="automatic-contract-configuration">Automatic Contract Configuration<a class="hash-link" aria-label="Direct link to Automatic Contract Configuration" title="Direct link to Automatic Contract Configuration" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#automatic-contract-configuration">​</a></h3>
<p>V3 automatically configures all globally defined contracts.</p>
<p>Globally defined contracts are handled automatically, even when they aren’t linked to a specific chain or address.</p>
<img src="https://docs.envio.dev/blog-assets/dev-update-jan-26-3.png" alt="Automatic Contract Configuration" width="100%">
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="conditional-event-handlers">Conditional Event Handlers<a class="hash-link" aria-label="Direct link to Conditional Event Handlers" title="Direct link to Conditional Event Handlers" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#conditional-event-handlers">​</a></h3>
<p>V3 allows event handlers to be enabled or disabled conditionally.</p>
<p>You can now return a boolean value from the eventFilters function to control whether a handler runs.</p>
<img src="https://docs.envio.dev/blog-assets/dev-update-jan-26-4.png" alt="Conditional Event Handlers" width="100%">
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="tui-love">TUI Love<a class="hash-link" aria-label="Direct link to TUI Love" title="Direct link to TUI Love" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#tui-love">​</a></h3>
<p>V3 brings updates to the TUI, making it even more beautiful &amp; compact.</p>
<p>It uses fewer resources, shares a link to the Hasura playground, and adjusts dynamically to the terminal width.</p>
<img src="https://docs.envio.dev/blog-assets/dev-update-jan-26-5.png" alt="TUI" width="100%">
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="envio-api-token-required">Envio API Token Required<a class="hash-link" aria-label="Direct link to Envio API Token Required" title="Direct link to Envio API Token Required" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#envio-api-token-required">​</a></h3>
<p>For indexers using HyperSync as a data source, setting an <code>ENVI0_API_TOKEN</code> is now required.</p>
<p>You can learn more about API tokens or create one for free at:</p>
<p><a href="https://envio.dev/app/api-tokens" target="_blank" rel="noopener noreferrer">https://envio.dev/app/api-tokens</a></p>
<p>Alongside this, HyperIndex V3 also supports using <a href="https://podman.io/" target="_blank" rel="noopener noreferrer">Podman</a> for local development, in addition to Docker.</p>
<p>This is just the beginning for V3. Many of these features are early building blocks, with loads more improvements, refinements, and additions already in underway.</p>
<p>For a deeper dive into everything included so far, be sure to check out the full release notes. More updates coming soon.</p>
<p>👉 See full <a href="https://github.com/enviodev/hyperindex/releases" target="_blank" rel="noopener noreferrer">release notes</a></p>
<p>👉 Star us on <a href="https://github.com/enviodev/hyperindex" target="_blank" rel="noopener noreferrer">GitHub</a> ⭐</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="indexing-data-on-injective">Indexing Data on Injective<a class="hash-link" aria-label="Direct link to Indexing Data on Injective" title="Direct link to Indexing Data on Injective" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#indexing-data-on-injective">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-jan-26-6.png" alt="Indexing Data on Injective" width="100%">
<p>Envio proudly supports developers and analysts building on <a href="https://injective.com/" target="_blank" rel="noopener noreferrer">Injective</a> by providing efficient access to real-time and historical on-chain data to help teams build robust apps on Injective.</p>
<p>With Envio, teams can sync and query Injective data and define fully customizable indexing logic based on their application needs, without managing indexing infrastructure themselves.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="migrating-production-subgraphs-polymarket-indexer">Migrating Production Subgraphs: Polymarket Indexer<a class="hash-link" aria-label="Direct link to Migrating Production Subgraphs: Polymarket Indexer" title="Direct link to Migrating Production Subgraphs: Polymarket Indexer" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#migrating-production-subgraphs-polymarket-indexer">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-jan-26-7.png" alt="Polymarket indexer" width="100%">
<p>A common question we hear is what migrating a real production subgraph setup actually looks like in practice.</p>
<p>This example shows every Polymarket subgraph migrated into a single Envio indexer, providing a concrete reference for teams looking to consolidate or migrate existing subgraph infrastructure.</p>
<p>The full implementation is available here:</p>
<p><a href="https://github.com/enviodev/polymarket-indexer" target="_blank" rel="noopener noreferrer">https://github.com/enviodev/polymarket-indexer</a></p>
<p><em><span style="text-decoration:underline">⚠️ Note: This example is still a work in progress and under active testing</span></em></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="blockchain-indexer-for-application-backends">Blockchain Indexer For Application Backends<a class="hash-link" aria-label="Direct link to Blockchain Indexer For Application Backends" title="Direct link to Blockchain Indexer For Application Backends" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#blockchain-indexer-for-application-backends">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/blockchain-indexer-backends.png" alt="Blockchain Indexer asset" width="100%">
<p>Indexers are a core part of most application backends, sitting between the blockchain and the app. By transforming raw on-chain data into structured, queryable state, indexing removes a lot of complexity from backend logic and makes applications easier to build and scale as they grow. Envio fits into this workflow by providing a consistent indexing layer teams can use from local development through production, without changing how their backend logic is defined.</p>
<p>For more details, read the full <a href="https://docs.envio.dev/blog/blockchain-indexer-application-backends" target="_blank" rel="noopener noreferrer">blog</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-powers-funnel-with-efficient-data-indexing">Envio Powers Funnel with Efficient Data Indexing<a class="hash-link" aria-label="Direct link to Envio Powers Funnel with Efficient Data Indexing" title="Direct link to Envio Powers Funnel with Efficient Data Indexing" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#envio-powers-funnel-with-efficient-data-indexing">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-jan-26-9.png" alt="Envio &amp; Funnel" width="100%">
<p><a href="https://funnel.markets/" target="_blank" rel="noopener noreferrer">Funnel</a> is back after completing a successful backend migration to Envio, which has improved the performance and reliability of the on-chain data powering their application heading into 2026.</p>
<p>Funnel uses Envio as its indexing layer to ingest and query on-chain data used across the app, including data supporting trading views and listings built on Hyperliquid.</p>
<p>The migration gives the Funnel team a more robust and maintainable data pipeline, allowing them to focus on shipping product without managing indexing infrastructure.</p>
<p>See this post on <a href="https://x.com/funnel_markets/status/2009670839940329711" target="_blank" rel="noopener noreferrer">X</a> for more info.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-current--upcoming-events--hackathons">🗓️ Current &amp; Upcoming Events &amp; Hackathons<a class="hash-link" aria-label="Direct link to 🗓️ Current &amp; Upcoming Events &amp; Hackathons" title="Direct link to 🗓️ Current &amp; Upcoming Events &amp; Hackathons" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#%EF%B8%8F-current--upcoming-events--hackathons">​</a></h2>
<ul>
<li><a href="https://ethdenver.com/" target="_blank" rel="noopener noreferrer">EthDenver - Denver</a>: Feb 17th → 21st</li>
<li><a href="https://ethcc.io/" target="_blank" rel="noopener noreferrer">EthCC - Cannes</a>: March 30th → April 2nd</li>
<li><a href="https://ethconf.com/" target="_blank" rel="noopener noreferrer">EthConf - New York</a>: June 8th → 10th</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-featured-developer-zod">🧑‍💻 Featured Developer: Zod<a class="hash-link" aria-label="Direct link to �🧑‍💻 Featured Developer: Zod" title="Direct link to 🧑‍💻 Featured Developer: Zod" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#-featured-developer-zod">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-jan-26-10.png" alt="DOTM Jan 2026" width="100%">
<p>This month’s featured developer is Zod. They’ve been building for a few decades and working on-chain since 2019. Over the past year, they’ve been actively using tools like Cursor and exploring in-the-loop agentic development.</p>
<p>In August 2024, Zod took over <a href="https://scale.farm/" target="_blank" rel="noopener noreferrer">Scale</a> from <a href="https://migrate.equalizer.exchange/" target="_blank" rel="noopener noreferrer">Equalizer</a> and began transforming it into what they describe as a MetaIndex. This concept focuses on generating revenue across DeFi, rather than limiting revenue to V2 pools, to reduce fresh emissions by earning treasury revenue through other protocols such as Aerodrome.</p>
<p>Scale continues to emit its own token and run liquidity, while integrating Manual CL as part of this evolution.</p>
<p><em><strong>“To power our instant-on, data-rich experience across millions of transactions, I need fast, real-time data and deep historical depth with tight latency. I run multiple Envio indexers in parallel with an orchestration layer, which gives us exactly that. Having the full source as a git submodule means I can do deep dives when facing issues, and the team has been super helpful. After previously unhappy experiences with other indexers, Envio has been a massive win.” - Zod, Co-Founder &amp; Lead Developer at Scale</strong></em></p>
<p>Well done, Zod. Be sure to check out Scale and follow the team on <a href="https://x.com/Scale_Farm" target="_blank" rel="noopener noreferrer">X</a> to stay up to date with their latest developments.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-playlist-of-the-month">🎧️ Playlist of the Month<a class="hash-link" aria-label="Direct link to 🎧️ Playlist of the Month" title="Direct link to 🎧️ Playlist of the Month" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#%EF%B8%8F-playlist-of-the-month">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-jan-26-11.png" alt="PLOTM Jan 2026" width="100%">
<p>▶️ <a href="https://open.spotify.com/playlist/3LismooWdej6nDxwY9486d?si=00ab83ef26874d81" target="_blank" rel="noopener noreferrer">Open Spotify</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-ship-with-us">🚢 Ship With Us<a class="hash-link" aria-label="Direct link to 🚢 Ship With Us" title="Direct link to 🚢 Ship With Us" href="https://docs.envio.dev/blog/envio-developer-update-january-2026#-ship-with-us">​</a></h2>
<p>Envio is a multi-chain EVM blockchain indexer for querying real-time and historical data. If you’re working on a Web3 project and want a smoother development process, Envio’s got your back(end). Check out our docs, join the community, and let’s talk about your data needs.</p>
<p>Stay tuned for more monthly updates by subscribing to our newsletter, following us on X, or hopping into our Discord for more up-to-date information.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Envio Developer Update December 2025]]></title>
            <link>https://docs.envio.dev/blog/envio-developer-update-december-2025</link>
            <guid>https://docs.envio.dev/blog/envio-developer-update-december-2025</guid>
            <pubDate>Tue, 16 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Envio Developer Update December 2025 covering an early look at HyperIndex v3.0.0, early Solana experimentation, Sonic support, Decypted Bytes streams, a USDT0 indexing example, and community updates.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/dev-update-dec-25.png" alt="Cover Image Envio Developer Update Dec 2025" width="100%">
<p>As we wrap up the end of the year, December’s developer update shares what’s next for Envio and what we’ve been working on across the product and community.</p>
<p>This month includes an early look at HyperIndex v3.0.0, early experimentation with Solana support, continued support for teams building on Sonic, updates from Decypted Bytes streams, a new USDT0 indexing example, and our featured developer for December, and much more.</p>
<p>Let’s dive in.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-hyperindex-v300-is-coming">🚨 HyperIndex v3.0.0 is Coming<a class="hash-link" aria-label="Direct link to 🚨 HyperIndex v3.0.0 is Coming" title="Direct link to 🚨 HyperIndex v3.0.0 is Coming" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#-hyperindex-v300-is-coming">​</a></h2>
<p>HyperIndex v3.0.0 is an alpha release introducing ESM support with top-level await and automatic handler registration, alongside lower HyperSync latency and faster queries. The release also includes an experimental ClickHouse Sink, cleaner configuration and defaults, and early experimental Solana support, and much more to come.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="commonjs--esm">CommonJS → ESM<a class="hash-link" aria-label="Direct link to CommonJS → ESM" title="Direct link to CommonJS → ESM" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#commonjs--esm">​</a></h3>
<p>HyperIndex now runs ESM-only.</p>
<p>This unlocks support for modern libraries and enables <strong>top-level await</strong> across handlers, and <code>envio init</code> now comes with new templates and an updated <code>tsconfig.json</code>.</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">{</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  /* For details: https://www.totaltypescript.com/tsconfig-cheat-sheet */</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  "compilerOptions": {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    /* Base Options: */</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "esModuleInterop": true,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "skipLibCheck": true,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "target": "es2022",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "allowJs": true,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "resolveJsonModule": true,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "moduleDetection": "force",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "isolatedModules": true,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "verbatimModuleSyntax": true,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    /* Strictness */</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "strict": true,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "noUncheckedIndexedAccess": true,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "noImplicitOverride": true,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    /* For running Envio: */</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "module": "ESNext",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "moduleResolution": "bundler",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "noEmit": true,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    /* Code doesn't run in the DOM: */</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    "lib": ["es2022"]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="top-level-await">Top-level await<a class="hash-link" aria-label="Direct link to Top-level await" title="Direct link to Top-level await" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#top-level-await">​</a></h3>
<p>You can now use top-level await directly in handlers files in HyperIndex V3.</p>
<p>This makes it easy to load things like whitelisted addresses or config from a server instead of hardcoding values into the codebase.</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">import { ERC20 } from "generated";</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// THIS IS NEW</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">const addressesFromServer = await loadWhitelistedAddresses();</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ERC20.Transfer.handler(</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  async ({ event, context }) =&gt; {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    //... your handler logic</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> wildcard: true,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> eventFilters: [</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      { from: ZERO_ADDRESS, to: addressesFromServer },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      { from: addressesFromServer, to: ZERO_ADDRESS },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ],</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="srchandlers-auto-registration">src/handlers auto registration<a class="hash-link" aria-label="Direct link to src/handlers auto registration" title="Direct link to src/handlers auto registration" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#srchandlers-auto-registration">​</a></h3>
<p>HyperIndex v3 automatically registers handler files from src/handlers. You no longer need to list explicit handler paths in <code>config.yaml</code>. Just place your files in src/handlers and they will be picked up automatically.</p>
<p>If you prefer a different structure, you can override this using the handlers option. Explicit handler paths still work as before.</p>
<p><em>⚠️ Deprecation: Explicit handler paths are still supported, so no changes are required.</em></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="block-handler-indexers">Block handler indexers<a class="hash-link" aria-label="Direct link to Block handler indexers" title="Direct link to Block handler indexers" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#block-handler-indexers">​</a></h3>
<p>It is now possible to create indexers using only block handlers. Event handlers are no longer required, and contracts are optional in config.yaml.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="flexible-entity-fields">Flexible entity fields<a class="hash-link" aria-label="Direct link to Flexible entity fields" title="Direct link to Flexible entity fields" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#flexible-entity-fields">​</a></h3>
<p>Restrictions on entity field names have been removed. Improvements have also been made to ensure database columns are generated in the same order as they are defined in schema.graphql.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="hypersync-source-improvements">HyperSync source improvements<a class="hash-link" aria-label="Direct link to HyperSync source improvements" title="Direct link to HyperSync source improvements" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#hypersync-source-improvements">​</a></h3>
<p>Several updates on the HyperSync side reduce latency and unnecessary traffic. These include using server sent events for block updates, more efficient query serialization, and caching for repetitive queries.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="experimental-clickhouse-sink-support">Experimental ClickHouse Sink support<a class="hash-link" aria-label="Direct link to Experimental ClickHouse Sink support" title="Direct link to Experimental ClickHouse Sink support" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#experimental-clickhouse-sink-support">​</a></h3>
<p>HyperIndex v3 adds experimental ClickHouse Sink support.Postgres remains the primary database. You can additionally sink entities to ClickHouse for restart and reorg resistant workloads.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="experimental-additions-solana-support">Experimental additions: Solana Support<a class="hash-link" aria-label="Direct link to Experimental additions: Solana Support" title="Direct link to Experimental additions: Solana Support" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#experimental-additions-solana-support">​</a></h3>
<p>V3 introduces experimental Solana support using RPC as a source. Be sure to check out our <a href="https://docs.envio.dev/docs/HyperIndex/solana" target="_blank" rel="noopener noreferrer">docs</a> for more information.</p>
<p>Try it out with:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpx envio@3.0.0-alpha.3 init solana</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="cleanups-and-defaults">Cleanups and defaults<a class="hash-link" aria-label="Direct link to Cleanups and defaults" title="Direct link to Cleanups and defaults" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#cleanups-and-defaults">​</a></h3>
<p>Deprecated APIs and legacy options have been removed, defaults have been updated, and Node.js 22 is now the minimum supported version. Internal naming and metrics have also been cleaned up for consistency.</p>
<p>This is just the start, with a lot more to come. Stay tuned!</p>
<p>👉 See full <a href="https://github.com/enviodev/hyperindex/releases" target="_blank" rel="noopener noreferrer">release notes</a></p>
<p>👉 Star us on <a href="https://github.com/enviodev/hyperindex" target="_blank" rel="noopener noreferrer">GitHub</a> ⭐</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-supports-developers-building-on-sonic">Envio Supports Developers Building on Sonic<a class="hash-link" aria-label="Direct link to Envio Supports Developers Building on Sonic" title="Direct link to Envio Supports Developers Building on Sonic" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#envio-supports-developers-building-on-sonic">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-dec-25-1.png" alt="Envio supports Sonic" width="100%">
<p>Envio supports developers and analysts building on Sonic by providing access to real-time and historical on-chain data through a reliable indexing layer designed for high-throughput environments.</p>
<p>With Sonic’s fast finality and high transaction volumes, teams need indexing infrastructure that can keep up without adding operational complexity. Envio is built to handle these conditions, allowing developers and analysts to query, monitor, and analyze Sonic data efficiently.</p>
<p>This support makes it easier for teams to build data-heavy applications, analytics dashboards, and monitoring tools on Sonic without having to manage indexing infrastructure themselves.</p>
<p>👉 <a href="https://docs.envio.dev/docs/HyperIndex/sonic" target="_blank" rel="noopener noreferrer">Start building on Sonic</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="monad-testnet-re-genesis-reindex-required-for-envio-users">Monad Testnet Re-Genesis: Reindex Required for Envio Users<a class="hash-link" aria-label="Direct link to Monad Testnet Re-Genesis: Reindex Required for Envio Users" title="Direct link to Monad Testnet Re-Genesis: Reindex Required for Envio Users" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#monad-testnet-re-genesis-reindex-required-for-envio-users">​</a></h2>
<p>The Monad testnet underwent a full re-genesis, restarting the network from block 1.</p>
<p>For Envio users indexing Monad, this means indexers need to reindex from block 1 now that the refreshed testnet is live. As part of the re-genesis, all existing on-chain state was reset and any deployed contracts needed to be redeployed.</p>
<p>This update removes legacy behaviours from early testnet phases and is expected to reduce state sync time going forward. Teams indexing Monad can continue building against the refreshed testnet.</p>
<p>If you need support reindexing or redeploying after the re-genesis, feel free to reach out to the Envio team in our <a href="https://discord.gg/RKPAjwUvRr" target="_blank" rel="noopener noreferrer">Discord</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-at-solana-breakpoint-2025-in-abu-dhabi">Envio at Solana Breakpoint 2025 in Abu Dhabi<a class="hash-link" aria-label="Direct link to Envio at Solana Breakpoint 2025 in Abu Dhabi" title="Direct link to Envio at Solana Breakpoint 2025 in Abu Dhabi" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#envio-at-solana-breakpoint-2025-in-abu-dhabi">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-dec-25-2.png" alt="Solana Breakpoint 2025" width="100%">
<p>The Envio team attended <a href="https://solana.com/breakpoint" target="_blank" rel="noopener noreferrer">Solana Breakpoint</a> in Abu Dhabi this month, spending time with teams across the Solana ecosystem and learning more about their data needs and how they’re building on Solana.</p>
<p>We had a great few days of conversations with builders, protocols, and infrastructure teams, getting a better sense of the tools, patterns, and challenges teams are working through as the ecosystem continues to grow.</p>
<p>Alongside the event, we’ve been experimenting with early, <a href="https://docs.envio.dev/docs/HyperIndex/solana" target="_blank" rel="noopener noreferrer">experimental Solana support</a> in Envio. These conversations were valuable in helping us better understand Solana use cases and how indexing infrastructure can support developers and analysts building on the network.</p>
<p>Big thanks to everyone we met and spoke with at Solana Breakpoint. We’re looking forward to continuing these conversations as our Solana support evolves. Watch this space.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-developer-workshops-decypted-bytes-is-back">Envio Developer Workshops: Decypted Bytes Is Back<a class="hash-link" aria-label="Direct link to Envio Developer Workshops: Decypted Bytes Is Back" title="Direct link to Envio Developer Workshops: Decypted Bytes Is Back" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#envio-developer-workshops-decypted-bytes-is-back">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-dec-25-3.png" alt="Decrypt Bytes" width="100%">
<p>Decypted Bytes streams are back and now running daily at 3:00pm UTC, focused on hands-on developer workflows using Envio.</p>
<p>Recent and upcoming sessions cover practical indexing patterns and data pipelines built with HyperIndex and HyperSync, walking through real examples end-to-end.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="recent-streams-include">Recent streams include:<a class="hash-link" aria-label="Direct link to Recent streams include:" title="Direct link to Recent streams include:" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#recent-streams-include">​</a></h4>
<ul>
<li>
<p><a href="https://www.youtube.com/watch?v=yWfw5gfTibI" target="_blank" rel="noopener noreferrer">Base–Solana Bridge Indexer with HyperIndex</a>, showing how to track cross-chain token transfers between Base and Solana</p>
</li>
<li>
<p><a href="https://www.youtube.com/watch?v=8wNprGmbN24" target="_blank" rel="noopener noreferrer">DuckDB Sink for HyperSyn</a>c, covering how to write indexed blockchain data into DuckDB for local analytics and querying</p>
</li>
</ul>
<p>All stream links, topics, and the full schedule are available via the <a href="https://decrypted-bytes.notion.site/2c30f730c03780d8a0a5dfba76689f96?v=2c30f730c03780b7b59b000c65b4467d" target="_blank" rel="noopener noreferrer">Decypted Bytes stream schedule</a>. Be sure to subscribe to stay up to date with upcoming sessions.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-adds-support-for-tempo">Envio Adds Support for Tempo<a class="hash-link" aria-label="Direct link to Envio Adds Support for Tempo" title="Direct link to Envio Adds Support for Tempo" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#envio-adds-support-for-tempo">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-dec-25-4.png" alt="Envio supports Tempo" width="100%">
<p>Envio now supports <a href="https://tempo.xyz/" target="_blank" rel="noopener noreferrer">Tempo</a>, giving teams an easier way to index and query data in real-time and build fully customizable data pipelines.</p>
<p>This support makes it simpler for developers to work with Tempo data using <a href="https://docs.envio.dev/docs/HyperIndex/overview" target="_blank" rel="noopener noreferrer">HyperIndex</a>, without needing to set up or maintain custom indexing infrastructure. Teams can define their own indexing logic and query patterns while keeping full control over how data flows through their pipelines.</p>
<p>To get started and learn how to index data on Tempo, check out the <a href="https://docs.envio.dev/docs/HyperIndex/tempo-testnet" target="_blank" rel="noopener noreferrer">setup guide</a> in the Envio docs.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-index-cross-chain-usdt0-transfers-with-envio">How to Index Cross-Chain USDT0 Transfers with Envio<a class="hash-link" aria-label="Direct link to How to Index Cross-Chain USDT0 Transfers with Envio" title="Direct link to How to Index Cross-Chain USDT0 Transfers with Envio" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#how-to-index-cross-chain-usdt0-transfers-with-envio">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-dec-25-5.png" alt="Index USDT0 with Envio" width="100%">
<p>Learn how to build a <a href="https://usdt0.to/" target="_blank" rel="noopener noreferrer">USDT0</a> Indexer using Envio by exploring this example repository, which demonstrates how to track USDT0 transfers across multiple chains.</p>
<p>The repository shows how to use Envio and HyperSync to index USDT0 activity across supported networks, providing a practical reference for teams working with cross-chain token flows.</p>
<p>You can explore the full example, code, and setup instructions in the <a href="https://github.com/enviodev/usdt0-indexer" target="_blank" rel="noopener noreferrer">GitHub repository</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-powers-slabcash-with-efficient-data-indexing">Envio Powers Slab.cash with Efficient Data Indexing<a class="hash-link" aria-label="Direct link to Envio Powers Slab.cash with Efficient Data Indexing" title="Direct link to Envio Powers Slab.cash with Efficient Data Indexing" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#envio-powers-slabcash-with-efficient-data-indexing">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-dec-25-6.png" alt="Slab Cash" width="100%">
<p><a href="https://slab.cash/" target="_blank" rel="noopener noreferrer">Slab.cash</a> recently went live, bringing on-chain collectibles to users.</p>
<p>Envio proudly powers Slab.cash with efficient data indexing, giving the team easy and reliable access to real-time and historical blockchain data so their app can run smoothly as usage grows.</p>
<p>Big congrats to the Slab.cash team on the launch. Be sure to check it out and see what they’ve shipped.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started-with-envio-for-the-metamask-advanced-permissions-hackathon">Getting Started with Envio for the MetaMask Advanced Permissions Hackathon<a class="hash-link" aria-label="Direct link to Getting Started with Envio for the MetaMask Advanced Permissions Hackathon" title="Direct link to Getting Started with Envio for the MetaMask Advanced Permissions Hackathon" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#getting-started-with-envio-for-the-metamask-advanced-permissions-hackathon">​</a></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/0CeEiNPQRh4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe>
<p>As part of the <a href="https://www.hackquest.io/hackathons/MetaMask-Advanced-Permissions-Dev-Cook-Off" target="_blank" rel="noopener noreferrer">MetaMask x Envio Advanced Permissions Hackathon</a>, we ran a workshop walking developers through how to get started with Envio and how it can be used during the hackathon.</p>
<p>The session covered setting up an indexer, exploring demos and examples, and understanding how Envio can support data needs while building.</p>
<p>The MetaMask Advanced Permissions Hackathon is live and runs until December 31, 2025. If you’re taking part and building with Envio, we’re happy to help support teams throughout the hack.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-current--upcoming-events">🗓️ Current &amp; Upcoming Events<a class="hash-link" aria-label="Direct link to 🗓️ Current &amp; Upcoming Events" title="Direct link to 🗓️ Current &amp; Upcoming Events" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#%EF%B8%8F-current--upcoming-events">​</a></h2>
<ul>
<li><a href="https://www.hackquest.io/hackathons/MetaMask-Advanced-Permissions-Dev-Cook-Off" target="_blank" rel="noopener noreferrer">MetaMask x Envio: Advanced Permissions Dev Cook-Off Hackathon</a>: 18th Nov → 31st Dec 2025</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-featured-developer-port">🧑‍💻 Featured Developer: Port<a class="hash-link" aria-label="Direct link to 🧑‍💻 Featured Developer: Port" title="Direct link to 🧑‍💻 Featured Developer: Port" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#-featured-developer-port">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-dec-25-7.png" alt="DOTM Dec 2025" width="100%">
<p>This month’s featured developer is Port, a builder who loves experimenting with ideas and shipping fast. His journey into development started a few years ago after a health scare, which pushed him to rethink how he wanted to spend his time. Coming from a non-technical background, he began learning web development through The Odin Project and quickly found his way into Web3.</p>
<p>After discovering Monad, Port became deeply involved in the ecosystem, moving on to Speedrun Ethereum and joining <a href="https://buidlguidl.com/" target="_blank" rel="noopener noreferrer">BuidlGuidl</a>. Along the way, he built and contributed to a wide range of open source and community projects, including the block explorer for <a href="https://scaffoldeth.io/" target="_blank" rel="noopener noreferrer">Scaffold ETH</a>, <a href="https://address.vision/" target="_blank" rel="noopener noreferrer">address.vision</a>, and contributions to <a href="https://abi.ninja/" target="_blank" rel="noopener noreferrer">abi.ninja</a>.</p>
<p>Today, Port is part of the Monad devrel team, where he continues to explore what the tech makes possible while building and experimenting whenever he gets the chance. Some of his recent and notable projects include <a href="https://nft-snapshot-beta.vercel.app/" target="_blank" rel="noopener noreferrer">NFT Snapshot</a>, <a href="https://github.com/portdeveloper/monad-monitor" target="_blank" rel="noopener noreferrer">Monad Monitor</a>, <a href="https://oracle-dashboard-seven.vercel.app/" target="_blank" rel="noopener noreferrer">Oracle Dashboard</a>, <a href="https://calculate-my-pnl.vercel.app/" target="_blank" rel="noopener noreferrer">Calculate My PnL</a>, <a href="https://monadclip.fun/" target="_blank" rel="noopener noreferrer">MonadClip</a>, <a href="https://github.com/portdeveloper/splait" target="_blank" rel="noopener noreferrer">Splait</a>, <a href="https://github.com/portdeveloper/gulltoppr" target="_blank" rel="noopener noreferrer">Gulltoppr</a>, <a href="https://github.com/portdeveloper/converteth" target="_blank" rel="noopener noreferrer">ConvertETH</a>, <a href="https://github.com/portdeveloper/anvuil" target="_blank" rel="noopener noreferrer">Anvuil</a>, and <a href="https://github.com/portdeveloper/vanitoor" target="_blank" rel="noopener noreferrer">Vanitoor</a>.</p>
<p><em><strong>“I had an idea, asked it to Claude, and Claude suggested and built the app with Envio without me interfering at any point. I just added the API key to the env file. It was very easy to build with Envio, and the founders are very responsive so you can just ask them questions about how you should be using it.” - Port, DevRel at Monad</strong></em></p>
<p>Be sure to follow them on <a href="https://x.com/port_dev" target="_blank" rel="noopener noreferrer">X</a> and check out their work on <a href="https://github.com/portdeveloper?tab=repositories" target="_blank" rel="noopener noreferrer">GitHub</a> to stay up to date with what they are building.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="merry-xmas-from-the-envio-team">Merry Xmas from the Envio Team<a class="hash-link" aria-label="Direct link to Merry Xmas from the Envio Team" title="Direct link to Merry Xmas from the Envio Team" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#merry-xmas-from-the-envio-team">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-dec-25-8.png" alt="Envio Xmas 2025" width="100%">
<p>As the year comes to a close, we want to say a big thank you to everyone building with Envio for your contributions, feedback, and continued support throughout the year.</p>
<p>We’re wishing many of you a fantastic time over the festive season. The Envio team will still be fully available throughout the Christmas period, so feel free to reach out if you need support or want to chat about what you’re building.</p>
<p>Merry Xmas from all of us at Envio 🎄</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-playlist-of-the-month">🎧️ Playlist of the Month<a class="hash-link" aria-label="Direct link to 🎧️ Playlist of the Month" title="Direct link to 🎧️ Playlist of the Month" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#%EF%B8%8F-playlist-of-the-month">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-dec-25-9.png" alt="PLOTM Dec 2025" width="100%">
<p>▶️ <a href="https://open.spotify.com/playlist/757HncfHabgU6rpMv9748b?si=94a19e83ccdc4f0d" target="_blank" rel="noopener noreferrer">Open Spotify</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-ship-with-us">🚢 Ship With Us<a class="hash-link" aria-label="Direct link to 🚢 Ship With Us" title="Direct link to 🚢 Ship With Us" href="https://docs.envio.dev/blog/envio-developer-update-december-2025#-ship-with-us">​</a></h2>
<p>Envio is a multi-chain EVM blockchain indexer for querying real-time and historical data. If you’re working on a Web3 project and want a smoother development process, Envio’s got your back(end). Check out our docs, join the community, and let’s talk about your data needs.</p>
<p>Stay tuned for more monthly updates by subscribing to our newsletter, following us on X, or hopping into our Discord for more up-to-date information.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Migrate Alchemy Subgraphs to Envio]]></title>
            <link>https://docs.envio.dev/blog/migrating-alchemy-subgraphs-to-envio</link>
            <guid>https://docs.envio.dev/blog/migrating-alchemy-subgraphs-to-envio</guid>
            <pubDate>Wed, 03 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Migrate your Alchemy Subgraphs to Envio’s HyperIndex with a clean four step flow. Keep your existing schema, avoid a full rebuild, and get fast real-time indexing.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/migrating-alchemy-subgraphs.png" alt="Migrating from Alchemy to Envio" width="100%">
<p>Alchemy is sunsetting their Subgraph support on the <strong>8th December 2025</strong>. If you are running production workloads or preparing for mainnet, you need a stable home for your data and a migration path that keeps most of your existing work intact.</p>
<p>Envio gives you a clean and fast way to easily migrate your existing Alchemy Subgraphs into Envio’s <a href="https://docs.envio.dev/docs/HyperIndex/overview" target="_blank" rel="noopener noreferrer">HyperIndex</a> so your data stays live, stable and real-time. This guide covers exactly how to migrate your Alchemy Subgraph, what changes you need to make and why Envio is the best place to migrate your Alchemy Subgraphs.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-teams-are-migrating-their-alchemy-subgraphs-to-envio">Why Teams are Migrating their Alchemy Subgraphs to Envio:<a class="hash-link" aria-label="Direct link to Why Teams are Migrating their Alchemy Subgraphs to Envio:" title="Direct link to Why Teams are Migrating their Alchemy Subgraphs to Envio:" href="https://docs.envio.dev/blog/migrating-alchemy-subgraphs-to-envio#why-teams-are-migrating-their-alchemy-subgraphs-to-envio">​</a></h2>
<p>With Alchemy sunsetting its Subgraph support, a lot of builders are in the same position. You still rely on your data, you still need your indexers, and rebuilding the entire stack is not realistic in the given timeframe. With Envio, you get:</p>
<p>• 143x faster backfills on HyperIndex</p>
<p>• Multichain indexing supported out of the box</p>
<p>• 2 months free hosting for all Alchemy users</p>
<p>• White-glove migration support tailored for Alchemy Subgraphs</p>
<p>• Support for your existing schema</p>
<p>• A migration flow that avoids a full rebuild</p>
<p>• Efficient access to real-time and historical data</p>
<p>• A seamless cutover to production-ready endpoints</p>
<p>• The option to run locally or fully hosted</p>
<p>And much more!</p>
<p>Most importantly, Envio lets you bring your current indexing logic across and run it on a much faster setup.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="before-you-migrate">Before you Migrate<a class="hash-link" aria-label="Direct link to Before you Migrate" title="Direct link to Before you Migrate" href="https://docs.envio.dev/blog/migrating-alchemy-subgraphs-to-envio#before-you-migrate">​</a></h2>
<p>Make sure you have:</p>
<p>• Your current Alchemy Subgraph</p>
<p>• Your ABI or contract addresses</p>
<p>• Node.js and pnpm installed</p>
<p>• Docker Desktop if you want to test locally (Windows Users:</p>
<p><a href="https://learn.microsoft.com/en-us/windows/wsl/install" target="_blank" rel="noopener noreferrer">WSL</a> Windows Subsystem for Linux)</p>
<p>Envio supports both HyperIndex and HyperSync. For migrations, you will be using HyperIndex.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-migrate-from-alchemy-to-envio-a-step-by-step-guide">How to Migrate from Alchemy to Envio: A Step-by-step Guide<a class="hash-link" aria-label="Direct link to How to Migrate from Alchemy to Envio: A Step-by-step Guide" title="Direct link to How to Migrate from Alchemy to Envio: A Step-by-step Guide" href="https://docs.envio.dev/blog/migrating-alchemy-subgraphs-to-envio#how-to-migrate-from-alchemy-to-envio-a-step-by-step-guide">​</a></h2>
<p>Here is the exact workflow to migrate an Alchemy Subgraph to Envio:</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-generate-a-new-hyperindex-project">1. Generate a new HyperIndex project<a class="hash-link" aria-label="Direct link to 1. Generate a new HyperIndex project" title="Direct link to 1. Generate a new HyperIndex project" href="https://docs.envio.dev/blog/migrating-alchemy-subgraphs-to-envio#1-generate-a-new-hyperindex-project">​</a></h3>
<p>Run:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">pnpx envio init template </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--name</span><span class="token plain"> alchemy-migration </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--directory</span><span class="token plain"> alchemy-migration </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--template</span><span class="token plain"> greeter --api-token </span><span class="token string" style="color:rgb(255, 121, 198)">"YOUR_ENVIO_API_KEY"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="2-bring-over-your-schema">2. Bring over your schema<a class="hash-link" aria-label="Direct link to 2. Bring over your schema" title="Direct link to 2. Bring over your schema" href="https://docs.envio.dev/blog/migrating-alchemy-subgraphs-to-envio#2-bring-over-your-schema">​</a></h4>
<p>Take your existing Alchemy Subgraph schema and drop it into your new Envio project under the schema directory. If you need help mapping fields, our migration team can do this for you.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="3-move-over-your-mapping-logic">3. Move over your mapping logic<a class="hash-link" aria-label="Direct link to 3. Move over your mapping logic" title="Direct link to 3. Move over your mapping logic" href="https://docs.envio.dev/blog/migrating-alchemy-subgraphs-to-envio#3-move-over-your-mapping-logic">​</a></h4>
<p>Copy your Subgraph mappings into Envio mapping files. The structure is familiar if you have used The Graph or Alchemy Subgraphs before. Events and handlers work the same way, so this step should feel straightforward.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="4-use-migration-cursors">4. Use migration cursors<a class="hash-link" aria-label="Direct link to 4. Use migration cursors" title="Direct link to 4. Use migration cursors" href="https://docs.envio.dev/blog/migrating-alchemy-subgraphs-to-envio#4-use-migration-cursors">​</a></h4>
<p>Envio has a dedicated migration cursor flow so you do not have to replay your entire chain from block zero. This saves hours for larger projects.</p>
<p>After this, you can run the indexer locally with Docker or deploy directly to <a href="https://docs.envio.dev/docs/HyperIndex/hosted-service" target="_blank" rel="noopener noreferrer">Envio’s hosted service</a>. Once deployed, your indexer will sync with HyperSync-level speed.</p>
<p>If you prefer hands-on help, or would like our team to check your setup, you can book a free migration call <a href="https://envio.dev/alchemy-migration" target="_blank" rel="noopener noreferrer">here</a>. Alternatively, feel free to reach out to us in our <a href="https://discord.gg/HTuf8Jf9xZ" target="_blank" rel="noopener noreferrer">Discord</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-changes-when-you-leave-alchemy">What changes when you leave Alchemy?<a class="hash-link" aria-label="Direct link to What changes when you leave Alchemy?" title="Direct link to What changes when you leave Alchemy?" href="https://docs.envio.dev/blog/migrating-alchemy-subgraphs-to-envio#what-changes-when-you-leave-alchemy">​</a></h2>
<p>Most of your stack stays the same. Here is what changes:</p>
<p>• You are no longer tied to a provider that is ending support</p>
<p>• You get faster indexing with real-time data</p>
<p>• You get an active team supporting your indexers</p>
<p>• You get a future-proof path that consistently scales with you</p>
<p>Your application code stays untouched. Queries stay close to what you already use. And you get more reliability as soon as you deploy.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" href="https://docs.envio.dev/blog/migrating-alchemy-subgraphs-to-envio#conclusion">​</a></h2>
<p>Migrate faster, not harder. Alchemy stepping away from Subgraphs does not mean your project has to stop. Migrating to Envio is fast, stable and gives you a more reliable long-term foundation for your data.</p>
<p>Book a <a href="https://envio.dev/alchemy-migration" target="_blank" rel="noopener noreferrer">migration call</a>, move your Subgraphs and keep shipping without interruption.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="about-envio">About Envio<a class="hash-link" aria-label="Direct link to About Envio" title="Direct link to About Envio" href="https://docs.envio.dev/blog/migrating-alchemy-subgraphs-to-envio#about-envio">​</a></h2>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Envio</a> is a fast, developer-friendly blockchain indexer that makes real-time data accessible for builders migrating their Subgraphs across from Alchemy and Web3.</p>
<p>With Envio, developers can query and stream blockchain data efficiently without the complexity of running their own infrastructure. Envio’s blockchain indexing solution supports any EVM network and is trusted by many teams building everything from DeFi platforms to analytics dashboards and production applications.</p>
<p>If you’re a blockchain developer or analyst looking to enhance your workflow, look no further. Join our growing community of Web3 builders and explore our docs.</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://warpcast.com/envio" target="_blank" rel="noopener noreferrer">Farcaster</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Envio Developer Update November 2025]]></title>
            <link>https://docs.envio.dev/blog/envio-developer-update-november-2025</link>
            <guid>https://docs.envio.dev/blog/envio-developer-update-november-2025</guid>
            <pubDate>Wed, 26 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[November brings Envio v2.32.0, Monad Mainnet indexing support, Alchemy Subgraphs migration guidance, HyperSync Sonic performance results, new Rootstock indexing tutorials, hackathon highlights and our latest featured developer.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25.png" alt="Cover Image Envio Developer Update Nov 2025" width="100%">
<p>November was a big month of product updates, mainnet support and ecosystem activity. We shipped v2.32.0 with new Effect API controls, rolled out full indexing support for Monad Mainnet, and published guidance for teams affected by the Alchemy Subgraphs shutdown to help them migrate their subgraphs to Envio. HyperSync delivered strong benchmarking results on Sonic, and we wrapped up multiple hackathons across MetaMask, Monad and Encode. We also spent time with builders across Edge City in Patagonia and Devconnect in Buenos Aires. Let’s dive in.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-exciting-release-version-2320-">🚨 Exciting Release: Version 2.32.0 🚨<a class="hash-link" aria-label="Direct link to 🚨 Exciting Release: Version 2.32.0 🚨" title="Direct link to 🚨 Exciting Release: Version 2.32.0 🚨" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#-exciting-release-version-2320-">​</a></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/yvUVzV1ifig" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="effect-api-goodbye-experimental-prefix">🧪Effect API: Goodbye Experimental Prefix<a class="hash-link" aria-label="Direct link to 🧪Effect API: Goodbye Experimental Prefix" title="Direct link to 🧪Effect API: Goodbye Experimental Prefix" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#effect-api-goodbye-experimental-prefix">​</a></h3>
<p>We’ve officially removed the <code>experimental_ <strong>prefix</strong></code> from the Effect API and introduced some major improvements to indexing visibility and query flexibility.</p>
<p><strong>This update comes with two new features:</strong></p>
<p>• <strong><code>RateLimit</code></strong> option lets you control how often Effects are called, with support for custom durations</p>
<p>• Disable cache for specific Effect calls using <code>context.<strong>cache</strong> = false</code></p>
<p>Effect API, released on May 8, served us well, and we officially removed the experimental_ prefix from createEffect.</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">export const getMetadata = createEffect(</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    name: "getMetadata",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    input: S.string,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    output: S.optional(S.schema({</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      description: S.string,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      value: S.bigint,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    })),</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    // Protect your API from burst Effect calls</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    rateLimit: {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      calls: 5,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      per: "second"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    cache: true,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  async ({ input, context }) =&gt; {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    try {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      const response = await fetch(`https://api.example.com/metadata/${input}`);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      const data = await response.json();</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      return {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        description: data.description,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        value: data.value,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      };</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    } catch(_) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      // Don't cache failed response</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      context.cache = false</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      return undefined;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="-development-console-insights">📺 Development Console Insights<a class="hash-link" aria-label="Direct link to 📺 Development Console Insights" title="Direct link to 📺 Development Console Insights" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#-development-console-insights">​</a></h3>
<p>The Development Console now shows detailed performance metrics for every Effect API execution. You can see execution time, rate limits, and caching behaviour at a glance, making it much easier to debug and fine tune performance. A simple way to get more visibility and improve your indexer.</p>
<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25-1.png" alt="Dev console" width="100%">
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="-new-getwherelt-query">🔎 New getWhere.lt Query<a class="hash-link" aria-label="Direct link to 🔎 New getWhere.lt Query" title="Direct link to 🔎 New getWhere.lt Query" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#-new-getwherelt-query">​</a></h3>
<p>You can now use <code>context.&lt;Entity&gt;.getWhere.&lt;FieldName&gt;.<strong>lt</strong></code> to filter entities where field values are lower than a given value. This adds more flexibility for granular queries and custom data filtering directly within your indexers.</p>
<p>👉 See full <a href="https://github.com/enviodev/hyperindex/releases" target="_blank" rel="noopener noreferrer">release notes</a></p>
<p>👉 Star us on <a href="https://github.com/enviodev/hyperindex" target="_blank" rel="noopener noreferrer">GitHub</a> ⭐</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="monad-mainnet-is-live-learn-how-to-index-data-on-monad">Monad Mainnet Is Live: Learn How to Index Data on Monad<a class="hash-link" aria-label="Direct link to Monad Mainnet Is Live: Learn How to Index Data on Monad" title="Direct link to Monad Mainnet Is Live: Learn How to Index Data on Monad" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#monad-mainnet-is-live-learn-how-to-index-data-on-monad">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25-2.png" alt="Envio supports Monad Mainnet" width="100%">
<p>Envio is live on <a href="https://www.monad.xyz/" target="_blank" rel="noopener noreferrer">Monad</a> Mainnet. Get easy access to real-time and historical data on Monad through performant syncing and a smooth, high performance indexing experience from day one. We supported teams throughout testnet and continue to provide the same fast, reliable indexing setup for a growing ecosystem on Mainnet.</p>
<p>If you are live or going live on Monad and need help getting set up, chat to us about your data needs in <a href="https://discord.gg/S5RUC6jAv6" target="_blank" rel="noopener noreferrer">Discord</a>. For more on how to index data on Monad, read our <a href="https://docs.envio.dev/blog/how-to-index-monad-data-using-envio" target="_blank" rel="noopener noreferrer">blog article</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-migrate-alchemy-subgraphs-to-envio">How to Migrate Alchemy Subgraphs to Envio<a class="hash-link" aria-label="Direct link to How to Migrate Alchemy Subgraphs to Envio" title="Direct link to How to Migrate Alchemy Subgraphs to Envio" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#how-to-migrate-alchemy-subgraphs-to-envio">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25-3.png" alt="How to migrate Alchemy Subgraphs to Envio" width="100%">
<p>Alchemy Subgraphs are officially sunsetting on <strong>December 8, 2025</strong>. Many teams relying on their subgraph service will need a new solution before that date to avoid downtime.</p>
<p>Envio is supporting affected teams with <strong>2 months of free hosting</strong>, faster backfills, multichain indexing, and full white-glove migration support to help you move over smoothly. HyperIndex gives you a modern indexing setup with real-time syncing and production ready deployments, making the transition quick and reliable.</p>
<p>If your subgraphs are affected and you need to migrate, chat to our team or check out this <a href="https://envio.dev/alchemy-migration" target="_blank" rel="noopener noreferrer">page</a> for more information and we will help you get set up.</p>
<p>For a full walkthrough on how to migrate, read our guide on <a href="https://docs.envio.dev/docs/HyperIndex/migrate-from-alchemy" target="_blank" rel="noopener noreferrer">How to Migrate Alchemy Subgraphs to Envio</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="metamask-x-envio-advanced-permissions-hackathon-is-live">MetaMask x Envio Advanced Permissions Hackathon is Live<a class="hash-link" aria-label="Direct link to MetaMask x Envio Advanced Permissions Hackathon is Live" title="Direct link to MetaMask x Envio Advanced Permissions Hackathon is Live" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#metamask-x-envio-advanced-permissions-hackathon-is-live">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25-4.png" alt="MetaMask x Envio hackathon" width="100%">
<p>We have partnered with MetaMask for the Advanced Permissions Dev Cook-Off hackathon, inviting developers to build with ERC-7715 and ship new agent and automation ideas. The hack is now live with $10,000 in total prizes available.</p>
<p>For full details and registration, check the event page on <a href="https://www.hackquest.io/hackathons/MetaMask-Advanced-Permissions-Dev-Cook-Off" target="_blank" rel="noopener noreferrer">HackQuest</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stable-radar-monitoring-usdc-transactions-in-real-time">Stable Radar: Monitoring USDC Transactions in Real-Time<a class="hash-link" aria-label="Direct link to Stable Radar: Monitoring USDC Transactions in Real-Time" title="Direct link to Stable Radar: Monitoring USDC Transactions in Real-Time" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#stable-radar-monitoring-usdc-transactions-in-real-time">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25-5.gif" alt="Stable Radar" width="100%">
<p><a href="https://www.stable-radar.com/" target="_blank" rel="noopener noreferrer">Stable Radar</a> is a new live visualisation that tracks USDC transfers per second across multiple chains including Ethereum, Base, Monad, Sonic, HyperEVM, Worldchain, XDC and many more. It gives a clear view of stablecoin activity as it happens and makes it easy to watch real usage and adoption play out in real-time across different networks. Be sure to check out our <a href="https://docs.envio.dev/showcase" target="_blank" rel="noopener noreferrer">showcase</a> for more examples of Envio in action.</p>
<p>Check the original post on <a href="https://x.com/DenhamPreen/status/1988980819629863208?s=20" target="_blank" rel="noopener noreferrer">X</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-monetize-hypersync-queries-using-x402">How to Monetize HyperSync Queries using x402<a class="hash-link" aria-label="Direct link to How to Monetize HyperSync Queries using x402" title="Direct link to How to Monetize HyperSync Queries using x402" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#how-to-monetize-hypersync-queries-using-x402">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25-6.png" alt="Monetize HyperSync Queries using x402" width="100%">
<p>A new demo went live this month showing how analysts and builders can monetize their HyperSync queries using <a href="https://www.x402.org/" target="_blank" rel="noopener noreferrer">x402</a>. The project combines HyperSync’s fast querying and filtering across multiple networks with x402’s pay per request model to create simple monetizable blockchain APIs. The example lets users fetch token transfer history for any address across all HyperSync supported networks, with optional filtering by token.</p>
<p>Explore the demo or try it yourself on <a href="https://github.com/nikbhintade/x402-hypersync" target="_blank" rel="noopener noreferrer">GitHub</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="devconnect-and-edge-city--argentina">Devconnect and Edge City | Argentina<a class="hash-link" aria-label="Direct link to Devconnect and Edge City | Argentina" title="Direct link to Devconnect and Edge City | Argentina" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#devconnect-and-edge-city--argentina">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25-7.png" alt="Envio at Devconnect &amp; Edge City" width="100%">
<p>The team recently attended <a href="https://www.edgecity.live/patagonia" target="_blank" rel="noopener noreferrer">Edge City</a> in Patagonia, spending time with builders and getting a closer look at what teams are working on across the ecosystem. It was a good mix of conversations, working sessions and meeting new faces.</p>
<p>From there we headed to Buenos Aires for <a href="https://devconnect.org/" target="_blank" rel="noopener noreferrer">Devconnect</a>, catching up with teams throughout the week. We also partnered with Sonic, Pyth and Gelato for an evening <a href="https://luma.com/pghidhv5" target="_blank" rel="noopener noreferrer">event</a> in the city that brought all of our communities together in one venue.</p>
<p>We wrapped up the month at Devconnect Buenos Aires, taking part in the sessions and connecting with builders across the ecosystem. Big thanks to all the partners, organisers and teams we met along the way. Next stop? Stay tuned.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="encode-hackathon-envios-winners">Encode Hackathon: Envio’s Winners<a class="hash-link" aria-label="Direct link to Encode Hackathon: Envio’s Winners" title="Direct link to Encode Hackathon: Envio’s Winners" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#encode-hackathon-envios-winners">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25-8.png" alt="Encode x Envio hackathon" width="100%">
<p>Envio partnered with Encode Club at Encode London 2025 and awarded $3,000 in bounties for builders using HyperIndex and HyperSync. The winners included:</p>
<ul>
<li>
<p>Best Use of HyperIndex ($1,000) → VeriLoan</p>
</li>
<li>
<p>Best Use of HyperSync ($1,000) → Sniffer</p>
</li>
<li>
<p>HyperIndex Runner-Up ($500) → TradeTrackr</p>
</li>
</ul>
<p>Congratulations to all the builders who took part and big thanks to the Encode team. For the full breakdown of winners and what they built, check our <a href="https://docs.envio.dev/blog/encode-london-2025" target="_blank" rel="noopener noreferrer">blog post</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="high-performance-indexing-on-sonic-with-hypersync">High Performance Indexing on Sonic with HyperSync<a class="hash-link" aria-label="Direct link to High Performance Indexing on Sonic with HyperSync" title="Direct link to High Performance Indexing on Sonic with HyperSync" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#high-performance-indexing-on-sonic-with-hypersync">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25-9.png" alt="ComparNodes HyperSync Sonic benchmark" width="100%">
<p>Building on Sonic? Envio keeps up.</p>
<p><a href="https://www.comparenodes.com/providers/envio/" target="_blank" rel="noopener noreferrer">Compare Nodes</a> recently benchmarked Envio’s HyperSync on <a href="https://www.soniclabs.com/" target="_blank" rel="noopener noreferrer">Sonic</a> Mainnet and shared the results publicly. HyperSync provides one of the strongest high performance indexing solutions for Sonic data, backed by real benchmarking results. Their tests scaled from 0 to 1,000 RPC requests per second with full success, and later pushed up to 5,000 requests per second across ten methods. Across two runs they processed around 3.3 million requests in just over thirty minutes!</p>
<p>For the full performance benchmark and breakdown, check Compare Nodes’ original post on <a href="https://x.com/CompareNodes/status/1991114058771128655?s=20" target="_blank" rel="noopener noreferrer">X</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="tutorial-how-to-index-rootstock-data-with-envio">Tutorial: How to Index Rootstock Data with Envio<a class="hash-link" aria-label="Direct link to Tutorial: How to Index Rootstock Data with Envio" title="Direct link to Tutorial: How to Index Rootstock Data with Envio" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#tutorial-how-to-index-rootstock-data-with-envio">​</a></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/72ZO0I4hthU" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe>
<p><a href="https://rootstock.io/" target="_blank" rel="noopener noreferrer">Rootstock</a> released a new tutorial walking developers through how to use Envio to capture and organize on-chain events from smart contracts deployed on Rootstock. The session covers everything from setting up a local environment to writing mappings, generating entities and querying indexed data. It is part of the Hacktivator program and gives builders a full walkthrough of how to index Rootstock data using Envio.</p>
<p>See Rootstock’s original post on <a href="https://x.com/rootstock_io/status/1991446212256624989?s=20" target="_blank" rel="noopener noreferrer">X</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="metamask-smart-accounts-x-monad-x-envio-hackathon-winners">MetaMask Smart Accounts x Monad x Envio Hackathon Winners<a class="hash-link" aria-label="Direct link to MetaMask Smart Accounts x Monad x Envio Hackathon Winners" title="Direct link to MetaMask Smart Accounts x Monad x Envio Hackathon Winners" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#metamask-smart-accounts-x-monad-x-envio-hackathon-winners">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25-10.png" alt="MetaMask x Envio hack winners #1" width="100%">
<p>We partnered with <a href="https://metamask.io/en-GB/developer" target="_blank" rel="noopener noreferrer">MetaMask</a> and <a href="https://www.monad.xyz/brand-and-media-kit" target="_blank" rel="noopener noreferrer">Monad</a> for the Smart Accounts hackathon, which featured a total prize pool of $15,000. This hackathon focused on the next generation of wallet and smart account experiences. Builders explored account abstraction, modular execution, AI driven automation and real-time blockchain indexing using Envio.</p>
<p>For the full list of winners and a detailed breakdown of their projects, read our <a href="https://docs.envio.dev/blog/metamask-smart-accounts-hackathon-winners" target="_blank" rel="noopener noreferrer">blog</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-current--upcoming-events">🗓️ Current &amp; Upcoming Events<a class="hash-link" aria-label="Direct link to 🗓️ Current &amp; Upcoming Events" title="Direct link to 🗓️ Current &amp; Upcoming Events" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#%EF%B8%8F-current--upcoming-events">​</a></h2>
<ul>
<li><a href="https://www.hackquest.io/hackathons/MetaMask-Advanced-Permissions-Dev-Cook-Off" target="_blank" rel="noopener noreferrer">MetaMask x Envio: Advanced Permissions Dev Cook-Off Hackathon</a>: 18th Nov → 31st Dec 2025</li>
<li><a href="https://solana.com/breakpoint" target="_blank" rel="noopener noreferrer">Solana Breakpoint</a>: 11th → 13th Dec 2025</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-featured-developer-kevin-lin">🧑‍💻 Featured Developer: Kevin Lin<a class="hash-link" aria-label="Direct link to 🧑‍💻 Featured Developer: Kevin Lin" title="Direct link to 🧑‍💻 Featured Developer: Kevin Lin" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#-featured-developer-kevin-lin">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25-11.png" alt="Featured Dev Kevin Lin" width="100%">
<p>This month’s featured dev is Kevin Lin, a Web3 engineer from Taiwan who has been building dashboards and analytics tools across identity, x402 community activity and prediction markets. Kevin uses Envio as the indexing layer across several of his projects.</p>
<p>For <a href="https://self.xyz/" target="_blank" rel="noopener noreferrer">Self Protocol</a>, he indexes real-time registration and disclosure actions to help the team track user growth and protocol health. In the x402 ecosystem, he built this epic <a href="https://ping-analytics-web.vercel.app/" target="_blank" rel="noopener noreferrer">PING dashboard</a>, which tracks community engagement around the first major x402-era meme, including new addresses, interaction patterns and Uniswap V3 and V4 liquidity pools.</p>
<p>His latest project, <a href="https://polypilot.vercel.app/" target="_blank" rel="noopener noreferrer">PolyPilot</a>, is a Polymarket analytics tool that pulls candlestick charts from on-chain trades and includes a Market Explorer and Trader Explorer, with more smart money analysis on the way.</p>
<p>Big thanks to Kevin for all his amazing contributions, for being an outstanding member of our community and for everything he continues to build with Envio.</p>
<p><em><strong>“What I really like about Envio is that the DX is super smooth. The documentation is excellent, with solid templates and multiple examples, so it’s very friendly for vibe coders working on side projects. It also scales nicely from internal dashboards to public products, and lets me focus on what the user sees instead of worrying about indexing infra.” – Kevin Lin, Integration Engineer at Self Protocol</strong></em></p>
<p>Be sure to follow them on <a href="https://x.com/Slutsky___" target="_blank" rel="noopener noreferrer">X</a> and check out their work on <a href="https://github.com/kevinsslin" target="_blank" rel="noopener noreferrer">GitHub</a> to stay up to date with what they are building.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-playlist-of-the-month">🎧️ Playlist of the Month<a class="hash-link" aria-label="Direct link to 🎧️ Playlist of the Month" title="Direct link to 🎧️ Playlist of the Month" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#%EF%B8%8F-playlist-of-the-month">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-nov-25-12.png" alt="PLOTM Nov 2025" width="100%">
<p>▶️ <a href="https://open.spotify.com/playlist/5soTYYQq62La4bssYRdwzH?si=d1e1faa2d3bf44bd" target="_blank" rel="noopener noreferrer">Open Spotify</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-ship-with-us">🚢 Ship With Us<a class="hash-link" aria-label="Direct link to 🚢 Ship With Us" title="Direct link to 🚢 Ship With Us" href="https://docs.envio.dev/blog/envio-developer-update-november-2025#-ship-with-us">​</a></h2>
<p>Envio is a multi-chain EVM blockchain indexer for querying real-time and historical data. If you’re working on a Web3 project and want a smoother development process, Envio’s got your back(end). Check out our docs, join the community, and let’s talk about your data needs.</p>
<p>Stay tuned for more monthly updates by subscribing to our newsletter, following us on X, or hopping into our Discord for more up-to-date information.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[MetaMask Smart Accounts x Monad Hackathon Winners]]></title>
            <link>https://docs.envio.dev/blog/metamask-smart-accounts-hackathon-winners</link>
            <guid>https://docs.envio.dev/blog/metamask-smart-accounts-hackathon-winners</guid>
            <pubDate>Thu, 13 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the standout projects from the MetaMask Smart Accounts x Monad Dev Cook Off. Builders pushed smart account innovation forward using MetaMask SDKs, Monad’s high performance chain, and Envio’s real time indexing.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/metamask-hackathon-2025.png" alt="Metamask Dev-cook off 2025 Hackathon Winners" width="100%">
<p>Envio joined <a href="https://metamask.io/en-GB/developer" target="_blank" rel="noopener noreferrer">MetaMask</a> Developers and <a href="https://www.monad.xyz/" target="_blank" rel="noopener noreferrer">Monad</a> for the MetaMask Smart Accounts Dev Cook-Off, a global hackathon focused on the next generation of wallet and smart account experiences. Over three weeks, builders explored account abstraction, modular execution, AI driven automation, and real-time blockchain data indexing using Envio.</p>
<p>The projects below stood out across innovation, execution quality, and use of Envio’s indexing stack. Let’s take a look at our winners.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="best-use-of-envio-2000-last-monad">Best use of Envio ($2,000): Last Monad<a class="hash-link" aria-label="Direct link to Best use of Envio ($2,000): Last Monad" title="Direct link to Best use of Envio ($2,000): Last Monad" href="https://docs.envio.dev/blog/metamask-smart-accounts-hackathon-winners#best-use-of-envio-2000-last-monad">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/metamask-hackathon-2025-1.png" alt="Last monad" width="100%">
<p>Last Monad built a live network dashboard that showcases activity across Monad in real-time. Using Envio to index contract events with high speed and accuracy, the team delivered an always up to date view of the chain.</p>
<p>The project shows how real-time blockchain indexers like Envio unlock transparent analytics for high performance networks, giving developers a clear way to explore and understand on-chain behaviour as it happens.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="best-onchain-automation-1000-tradeclub">Best Onchain Automation ($1,000): TradeClub<a class="hash-link" aria-label="Direct link to Best Onchain Automation ($1,000): TradeClub" title="Direct link to Best Onchain Automation ($1,000): TradeClub" href="https://docs.envio.dev/blog/metamask-smart-accounts-hackathon-winners#best-onchain-automation-1000-tradeclub">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/metamask-hackathon-2025-2.png" alt="tradeclub" width="100%">
<p>TradeClub introduced automated on-chain execution powered by smart accounts. The project used Envio to index their data to power intent based triggers and automated flows, allowing users to run actions without managing complex backend logic.</p>
<p>It highlights how real-time data from Envio’s blockchain indexing solution can support consumer friendly automation and smarter on-chain behaviour.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="best-ai-agent-1000-shieldai">Best AI Agent ($1,000): ShieldAI<a class="hash-link" aria-label="Direct link to Best AI Agent ($1,000): ShieldAI" title="Direct link to Best AI Agent ($1,000): ShieldAI" href="https://docs.envio.dev/blog/metamask-smart-accounts-hackathon-winners#best-ai-agent-1000-shieldai">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/metamask-hackathon-2025-3.png" alt="ShieldAi" width="100%">
<p>ShieldAI built an on-chain monitoring agent that reacts to blockchain events on Monad in real-time. With Envio providing reliable, indexed data, the agent could track contract interactions, detect anomalies, and surface insights efficiently.</p>
<p>It shows how AI agents become significantly more powerful when they can rely on clean, real-time blockchain data from indexing solutions like Envio.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="best-consumer-app-1000-smart-account-explorer">Best Consumer App ($1,000): Smart Account Explorer<a class="hash-link" aria-label="Direct link to Best Consumer App ($1,000): Smart Account Explorer" title="Direct link to Best Consumer App ($1,000): Smart Account Explorer" href="https://docs.envio.dev/blog/metamask-smart-accounts-hackathon-winners#best-consumer-app-1000-smart-account-explorer">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/metamask-hackathon-2025-4.png" alt="Smart account explorer" width="100%">
<p>Smart Account Explorer created a clear interface for viewing and understanding smart account activity. With Envio’s real-time blockchain indexing layer handling the heavy lifting, the app delivered fast lookups of permissions, transactions, and account behaviour without any lag. It made smart accounts feel accessible and transparent for everyday users.</p>
<p>The project shows how consumer apps can improve usability by pairing smart accounts with fast, structured on-chain data from indexing solutions like Envio.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" href="https://docs.envio.dev/blog/metamask-smart-accounts-hackathon-winners#conclusion">​</a></h2>
<p>The MetaMask Smart Accounts x Monad Dev Cook Off highlighted what happens when wallet innovation meets real-time data performance. From onboarding to gaming and DeFi UX, each project showed what’s possible when you mix smart accounts and efficient blockchain tools like Envio.</p>
<p>Envio’s multichain blockchain indexer remains a cornerstone for teams indexing Monad data. Developers can use it to access efficient, real-time data on Monad and any other EVM chain. It gives them a simple way to query and understand Monad activity in real-time without dealing with the overhead of running or scaling their own indexing infrastructure.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="about-envio">About Envio<a class="hash-link" aria-label="Direct link to About Envio" title="Direct link to About Envio" href="https://docs.envio.dev/blog/metamask-smart-accounts-hackathon-winners#about-envio">​</a></h2>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Envio</a> is a fast, developer friendly blockchain indexer that makes real-time data accessible for builders on Monad and across Web3.</p>
<p>With Envio, developers can query and stream blockchain data efficiently without the complexity of running their own infrastructure. Envio’s blockchain indexing tools support Monad and any EVM network and are trusted by many teams building everything from DeFi platforms to analytics dashboards and production applications.</p>
<p>If you’re a blockchain developer or analyst looking to enhance your workflow, look no further. Join our growing community of Web3 builders and explore our docs.</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://warpcast.com/envio" target="_blank" rel="noopener noreferrer">Farcaster</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://medium.com/@Envio_Indexer" target="_blank" rel="noopener noreferrer">Medium</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Encode London 2025: Envio Hackathon Winners]]></title>
            <link>https://docs.envio.dev/blog/encode-london-2025</link>
            <guid>https://docs.envio.dev/blog/encode-london-2025</guid>
            <pubDate>Wed, 12 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover the Encode London 2025 hackathon winners who built real-time Web3 applications using Envio's blockchain indexing tools.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/encode-london-2025.png" alt="Encode London 2025 Hackathon Winners" width="100%">
<p>Envio proudly partnered with Encode Club at the London 2025 hackathon, offering $3,000 in bounties for builders using <a href="https://docs.envio.dev/docs/HyperIndex/overview" target="_blank" rel="noopener noreferrer">HyperIndex</a> and <a href="https://docs.envio.dev/docs/HyperSync/overview" target="_blank" rel="noopener noreferrer">HyperSync</a>. Over one weekend, developers explored how Envio’s fast blockchain indexing stack helps power real-time applications in Web3.</p>
<p>The results spoke for themselves.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="best-use-of-hyperindex-1000-veriloan">Best use of HyperIndex ($1,000): VeriLoan<a class="hash-link" aria-label="Direct link to Best use of HyperIndex ($1,000): VeriLoan" title="Direct link to Best use of HyperIndex ($1,000): VeriLoan" href="https://docs.envio.dev/blog/encode-london-2025#best-use-of-hyperindex-1000-veriloan">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/encode-london-2025-1.png" alt="VeriLoan - Best use of HyperIndex" width="100%">
<p><strong>Team:</strong> Myo Myat</p>
<p><strong>GitHub:</strong> <a href="https://github.com/LuLuKar05/VeriLoan" target="_blank" rel="noopener noreferrer">LuLuKar05/VeriLoan</a></p>
<p><strong>Demo:</strong> <a href="https://youtu.be/3t525_GDlCM" target="_blank" rel="noopener noreferrer">YouTube</a></p>
<p>VeriLoan solves one of DeFi’s biggest problems, trust. It connects <a href="https://www.concordium.com/" target="_blank" rel="noopener noreferrer">Concordium</a>’s privacy preserving identity proofs with EVM wallets to enable verified borrower profiles. Using Envio HyperIndex, the team aggregated lending data from <a href="https://aave.com/" target="_blank" rel="noopener noreferrer">Aave</a>, <a href="https://compound.finance/" target="_blank" rel="noopener noreferrer">Compound</a>, and <a href="https://spark.fi/" target="_blank" rel="noopener noreferrer">Spark</a> to generate real-time DeFi credit reports. The project shows how Envio’s blockchain indexer can power private, compliant, and capital efficient lending systems built on trust rather than collateral.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="best-use-of-hypersync-1000-sniffer">Best use of HyperSync ($1,000): Sniffer<a class="hash-link" aria-label="Direct link to Best use of HyperSync ($1,000): Sniffer" title="Direct link to Best use of HyperSync ($1,000): Sniffer" href="https://docs.envio.dev/blog/encode-london-2025#best-use-of-hypersync-1000-sniffer">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/encode-london-2025-2.png" alt="Sniffer - Best use of HyperSync" width="100%">
<p><strong>Team:</strong> Abdul Aaqib Ali</p>
<p><strong>GitHub:</strong> <a href="https://github.com/Junaid2005/encode-hack-nov" target="_blank" rel="noopener noreferrer">Junaid2005/encode-hack-nov</a></p>
<p><strong>Demo:</strong> <a href="https://youtu.be/HXjyv-ngJis" target="_blank" rel="noopener noreferrer">YouTube</a></p>
<p>Sniffer uses Envio HyperSync and GPT 5 to make blockchain forensics conversational. Investigators can ask natural language questions and receive instant fraud reports with charts, alerts, and insights. HyperSync’s real-time data access, up to 2000 times faster than RPC, allows Sniffer to detect suspicious patterns almost immediately in real-time. It is a perfect example of how powerful blockchain indexing tools like Envio can bring AI and on-chain analytics together.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="best-use-of-hyperindex-runner-up-500-tradetrackr">Best use of HyperIndex Runner Up ($500): TradeTrackr<a class="hash-link" aria-label="Direct link to Best use of HyperIndex Runner Up ($500): TradeTrackr" title="Direct link to Best use of HyperIndex Runner Up ($500): TradeTrackr" href="https://docs.envio.dev/blog/encode-london-2025#best-use-of-hyperindex-runner-up-500-tradetrackr">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/encode-london-2025-3.png" alt="TradeTrackr - Best use of HyperIndex Runner Up" width="100%">
<p><strong>Team:</strong> Xferno GT</p>
<p><strong>GitHub:</strong> <a href="https://github.com/Cozkou/portfi" target="_blank" rel="noopener noreferrer">Cozkou/portfi</a></p>
<p><strong>Demo:</strong> <a href="https://youtu.be/uhtsKPt45oE" target="_blank" rel="noopener noreferrer">YouTube</a></p>
<p>TradeTrackr turns crypto trading into a social experience. Users can track their portfolios, join groups, and compete in trading leagues with real-time data indexed by Envio HyperIndex. Built with React, Tailwind, and shadcn UI, it supports Ethereum, Polygon, Base, and Arbitrum. The app uses Concordium for optional identity verification, creating fair competitions and trusted leaderboards. It shows how modern blockchain indexers like Envio make multichain analytics accessible for any Web3 project.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" href="https://docs.envio.dev/blog/encode-london-2025#conclusion">​</a></h2>
<p>From AI powered fraud detection to privacy aware lending and social trading apps, these teams proved that real-time data is the foundation of the next generation of decentralized applications.</p>
<p>Envio continues to push the boundaries of performance and reliability for developers who need a fast, scalable, and developer friendly Web3 indexer. Big thanks to the Encode team for having us, all the organizers and partners. Congratulations to all the winners and to every builder who participated.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="about-encode-london">About Encode London<a class="hash-link" aria-label="Direct link to About Encode London" title="Direct link to About Encode London" href="https://docs.envio.dev/blog/encode-london-2025#about-encode-london">​</a></h2>
<p>Encode London is part of the global <a href="https://www.encodeclub.com/" target="_blank" rel="noopener noreferrer">Encode Club</a> hackathon series, which brings together developers, founders, and students to build new Web3 applications and infrastructure. The event connects builders with technical partners like Envio, helping them explore blockchain indexing, data analytics, and real-time Web3 tools.</p>
<p>Each Encode Club hackathon fosters collaboration, education, and growth within the Web3 community, showcasing how open innovation continues to push blockchain development forward.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="about-envio">About Envio<a class="hash-link" aria-label="Direct link to About Envio" title="Direct link to About Envio" href="https://docs.envio.dev/blog/encode-london-2025#about-envio">​</a></h2>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Envio</a> is a fast, developer friendly blockchain indexer that makes real-time data accessible for builders across Web3.</p>
<p>With HyperIndex and HyperSync, developers can query and stream blockchain data efficiently without the complexity of running their own infrastructure. Envio’s blockchain indexing tools support any EVM network and are trusted by teams building everything from DeFi platforms to analytics dashboards and production applications.</p>
<p>If you’re a blockchain developer or analyst looking to enhance your workflow, look no further. Join our growing community of Web3 builders and explore our docs.</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://warpcast.com/envio" target="_blank" rel="noopener noreferrer">Farcaster</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://medium.com/@Envio_Indexer" target="_blank" rel="noopener noreferrer">Medium</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Envio Developer Update October 2025]]></title>
            <link>https://docs.envio.dev/blog/envio-developer-update-october-2025</link>
            <guid>https://docs.envio.dev/blog/envio-developer-update-october-2025</guid>
            <pubDate>Tue, 28 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Get the full October 2025 update from Envio including v2.31.0 release focused on rollback and database performance, the new Scaffold ETH 2 extension for quicker indexer setup, and insights from our work at ETHOnline and Encode London.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/dev-update-oct-25.png" alt="Cover Image Envio Developer Community Update October 2025" width="100%">
<p>Reliability and performance were the big themes this month, with a focus on making indexing even smoother across the board. We rolled out v2.31.0, shipped key upgrades to rollback handling and database performance, and saw some great contributions from the community.</p>
<p>We dive into how a Uniswap alert system uncovered a MEV bot making millions, introduced a new Scaffold ETH 2 extension for faster indexer setup, and shared a look at the team’s involvement across ETHOnline, Encode London and much more. Let’s dive in!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-major-releases-v2300--v2310">⚡ MAJOR Releases: v2.30.0 → v2.31.0<a class="hash-link" aria-label="Direct link to ⚡ MAJOR Releases: v2.30.0 → v2.31.0" title="Direct link to ⚡ MAJOR Releases: v2.30.0 → v2.31.0" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#-major-releases-v2300--v2310">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="v2300-speed-consistency-and-migration-friendly-improvements">V2.30.0: Speed, consistency, and migration-friendly improvements<a class="hash-link" aria-label="Direct link to V2.30.0: Speed, consistency, and migration-friendly improvements" title="Direct link to V2.30.0: Speed, consistency, and migration-friendly improvements" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#v2300-speed-consistency-and-migration-friendly-improvements">​</a></h3>
<p>Version 2.30.0 introduced key performance and compatibility updates focused on reliability at scale.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="address-format-configuration">Address Format Configuration<a class="hash-link" aria-label="Direct link to Address Format Configuration" title="Direct link to Address Format Configuration" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#address-format-configuration">​</a></h4>
<p>You can now choose between <strong><code>checksum</code></strong> (default) and <strong><code> lowercase</code></strong> addresses directly in your config.yaml. The lowercase option makes it easier to migrate existing SubGraphs and can improve performance in some cases.</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"># config.yaml</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">address_format: lowercase</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="faster-event-decoder-for-rpc-source">Faster Event Decoder for RPC Source<a class="hash-link" aria-label="Direct link to Faster Event Decoder for RPC Source" title="Direct link to Faster Event Decoder for RPC Source" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#faster-event-decoder-for-rpc-source">​</a></h4>
<p>The RPC source now uses the HyperSync event decoder, offering a significant speed boost compared to the previous Viem decoder.</p>
<p><strong><span style="text-decoration:underline">Fixes:
</span></strong></p>
<ul>
<li>Resolved a regression in 2.29 that affected indexing at the head Prometheus metric.</li>
<li>Fixed a race condition during Hasura configuration that occasionally prevented certain GraphQL entities from having read permissions.</li>
</ul>
<p><strong><span style="text-decoration:underline">Internal Improvements:
</span></strong></p>
<ul>
<li>Ensured all events from a single block are processed together for stronger data consistency.</li>
<li>Optimized JS batch creation logic, improving handling for high-volume indexers (100k+ events/sec).</li>
<li>Adjusted dynamic address persistence to only store processed events.</li>
</ul>
<p>These updates laid the groundwork for the reorg refactoring work and further system optimizations in 2.31.0 and upcoming releases.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="v2310-big-reliability-release"><span style="text-decoration:underline">V2.31.0: Big Reliability Release</span><a class="hash-link" aria-label="Direct link to v2310-big-reliability-release" title="Direct link to v2310-big-reliability-release" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#v2310-big-reliability-release">​</a></h3>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="rollback-on-reorg-refactoring">Rollback On Reorg Refactoring<a class="hash-link" aria-label="Direct link to Rollback On Reorg Refactoring" title="Direct link to Rollback On Reorg Refactoring" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#rollback-on-reorg-refactoring">​</a></h4>
<p>We completely rebuilt our rollback on reorg logic to make indexing more robust, predictable, and faster. This update introduces a range of performance and stability improvements across indexing and database handling.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="highlights">Highlights<a class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#highlights">​</a></h4>
<ul>
<li>Fixed all known indexing and rollback on reorg issues</li>
<li>Optimised database writing logic to reduce latency by dozens of milliseconds</li>
<li>Reduced internal table size for managing reorg and rollback</li>
<li>Improved Events Processed counter accuracy for verifying data consistency</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="nice-additions">Nice Additions<a class="hash-link" aria-label="Direct link to Nice Additions" title="Direct link to Nice Additions" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#nice-additions">​</a></h4>
<ul>
<li>Added subgraph migration cursor rule initialisation support</li>
<li>Exposed chain readiness status through context.chains</li>
<li>Expanded supported entity name length up to 63 characters</li>
</ul>
<p>👉 See full <a href="https://github.com/enviodev/hyperindex/releases" target="_blank" rel="noopener noreferrer">release notes</a></p>
<p>👉 Star us on <a href="https://github.com/enviodev/hyperindex" target="_blank" rel="noopener noreferrer">GitHub</a> ⭐</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-uniswap-alert-system-that-uncovered-a-mev-bot-making-millions">The Uniswap Alert System That Uncovered a MEV Bot Making Millions<a class="hash-link" aria-label="Direct link to The Uniswap Alert System That Uncovered a MEV Bot Making Millions" title="Direct link to The Uniswap Alert System That Uncovered a MEV Bot Making Millions" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#the-uniswap-alert-system-that-uncovered-a-mev-bot-making-millions">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-oct-25-1.png" alt="mev bot" width="100%">
<p>While testing a Uniswap alert system, the team accidentally uncovered an active MEV bot that has been making millions every week on mainnet!</p>
<p>The Telegram bot was meant to ping whenever a Uniswap v4 pool hit $1M TVL. The goal was simple: catch hot new tokens early. Instead, the alerts started firing on pools that barely held any TVL at all.</p>
<p>A closer look revealed flash liquidity spikes driven by an MEV bot executing sandwich attacks across v3 and v4 pools. With over 11 million transactions on mainnet, the on-chain data paints a wild picture of just how active these bots are.</p>
<p>Read the original thread on <a href="https://x.com/DenhamPreen/status/1976565715940307345" target="_blank" rel="noopener noreferrer">X</a> and join the <a href="https://t.me/+n7KoVuOoOPAzNTJk" target="_blank" rel="noopener noreferrer">Telegram group</a> to see the alerts in action.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started-with-envios-scaffold-eth-2-extension">Getting Started with Envio’s Scaffold ETH 2 Extension<a class="hash-link" aria-label="Direct link to Getting Started with Envio’s Scaffold ETH 2 Extension" title="Direct link to Getting Started with Envio’s Scaffold ETH 2 Extension" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#getting-started-with-envios-scaffold-eth-2-extension">​</a></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/IXfGmc7iCI0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe>
<p>You can now build <a href="https://scaffoldeth.io/extensions" target="_blank" rel="noopener noreferrer">Scaffold ETH 2</a> apps that stream real-time data into your frontend without writing any code.</p>
<p>Our curated Envio extension adds automatic indexer generation to your project, making it simple to index all deployed contracts and query their data through a GraphQL API. Your frontend can subscribe to events as they happen, power live dashboards, and stay in sync with the chain with minimal setup.</p>
<p>Check out the <a href="https://docs.envio.dev/docs/HyperIndex/scaffold-eth-2-extension-tutorial" target="_blank" rel="noopener noreferrer">full tutorial</a> in our documentation.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="ethglobals-ethonline-hackathon">ETHGlobal’s ETHOnline Hackathon<a class="hash-link" aria-label="Direct link to ETHGlobal’s ETHOnline Hackathon" title="Direct link to ETHGlobal’s ETHOnline Hackathon" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#ethglobals-ethonline-hackathon">​</a></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/24oDMNgZ-so" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe>
<p>ETHGlobal’s <a href="https://ethglobal.com/events/ethonline2025/info/start" target="_blank" rel="noopener noreferrer">ETHOnline</a> returned this month, bringing together builders from around the world for one of the largest virtual hackathons of the year.</p>
<p>Envio joined as a proud partner with <a href="https://ethglobal.com/events/ethonline2025/prizes#envio" target="_blank" rel="noopener noreferrer">$5K in bounties</a> up for grabs. If you’re participating, check out our ETHOnline workshop for an introduction to HyperIndex and HyperSync, how to scaffold, deploy, and stream real-time data, plus past winning hacks, tips, and starter repos to help you ship faster. We look forward to seeing what everyone builds!</p>
<p>P.S. Our bounties can double as a bonus on top of whatever you’re already building, since our tooling plugs right in if you’re deploying contracts or working with on-chain data. 😎</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="understanding-stablecoin-flows-in-real-time">Understanding Stablecoin Flows in Real-time<a class="hash-link" aria-label="Direct link to Understanding Stablecoin Flows in Real-time" title="Direct link to Understanding Stablecoin Flows in Real-time" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#understanding-stablecoin-flows-in-real-time">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-oct-25-2.gif" alt="stablecoin flows" width="100%">
<p>Stablecoins move faster than ever, and understanding that flow in real-time opens up new layers of insight, from transaction velocity to how close we are to Visa or Mastercard throughput.</p>
<p>Co-Founder Jonjon Clark shared an early look at a live dashboard powered by Envio, which tracks stablecoin transfers across chains in real-time. It highlights what’s possible when real-time data meets transparent on-chain finance.</p>
<p>Check out the original post on <a href="https://x.com/jonjonclark/status/1973431528228045193" target="_blank" rel="noopener noreferrer">X</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="scaling-indexing-for-the-next-generation-of-blockchains--pragma-new-delhi-workshop">Scaling Indexing for the Next Generation of Blockchains | Pragma New Delhi Workshop<a class="hash-link" aria-label="Direct link to Scaling Indexing for the Next Generation of Blockchains | Pragma New Delhi Workshop" title="Direct link to Scaling Indexing for the Next Generation of Blockchains | Pragma New Delhi Workshop" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#scaling-indexing-for-the-next-generation-of-blockchains--pragma-new-delhi-workshop">​</a></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/sXqditdZix4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe>
<p>Blockchain throughput has grown from 15 TPS in early networks to over 400K TPS on chains like Monad, Sonic, and MegaETH. As networks scale execution, Envio focuses on scaling indexing so developers can keep up with real-time data at that speed.</p>
<p>Co-Founder, <a href="https://x.com/DenhamPreen" target="_blank" rel="noopener noreferrer">Denham Preen</a>, led a workshop at ETHGlobal Pragma New Delhi, sharing how Envio approaches modern blockchain indexing at scale and what it takes to stay in sync with high-performance chains.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-showcase">Envio Showcase<a class="hash-link" aria-label="Direct link to Envio Showcase" title="Direct link to Envio Showcase" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#envio-showcase">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-oct-25-3.gif" alt="showcase" width="100%">
<p>We launched a new showcase page highlighting live demos built with HyperIndex and HyperSync. From real-time dashboards to on-chain visualizations, it’s a growing collection of projects built by the community and team to show what’s possible with Envio.</p>
<p>Explore the <a href="https://docs.envio.dev/showcase" target="_blank" rel="noopener noreferrer">Showcase</a> in our documentation.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="empowering-builders-with-real-time-indexing--encode-london-2025">Empowering Builders with Real-Time Indexing | Encode London 2025<a class="hash-link" aria-label="Direct link to Empowering Builders with Real-Time Indexing | Encode London 2025" title="Direct link to Empowering Builders with Real-Time Indexing | Encode London 2025" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#empowering-builders-with-real-time-indexing--encode-london-2025">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-oct-25-4.png" alt="encode london 2025" width="100%">
<p>Envio joined <a href="https://luma.com/Encode-London-25" target="_blank" rel="noopener noreferrer">Encode London</a> 2025 as a partner, offering $3K in bounties to support builders throughout the weekend hackathon.</p>
<p>The event brought together developers, founders, and innovators from across the ecosystem for a full weekend of hacking, talks, and late nights at the Hub.</p>
<p>Our Co-Founder, Jonjon Clark, hosted a <a href="https://x.com/encodeclub/status/1976293549663715658" target="_blank" rel="noopener noreferrer">workshop</a> on real-time blockchain indexing, sharing how developers can move from indexing to streaming data in real-time using Envio’s suite of tools.</p>
<p>Well done to all the builders and a big shoutout to the Encode team and organizers for an incredible event!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-currentupcoming-conferences-events--hackathons">🗓️ Current/Upcoming Conferences, Events &amp; Hackathons<a class="hash-link" aria-label="Direct link to 🗓️ Current/Upcoming Conferences, Events &amp; Hackathons" title="Direct link to 🗓️ Current/Upcoming Conferences, Events &amp; Hackathons" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#%EF%B8%8F-currentupcoming-conferences-events--hackathons">​</a></h2>
<ul>
<li><a href="https://ethglobal.com/events/ethonline2025/info/start" target="_blank" rel="noopener noreferrer">EthOnline Hackathon</a>: 10th → 31st October 2025</li>
<li><a href="https://www.edgecity.live/patagonia" target="_blank" rel="noopener noreferrer">Edge City Patagonia</a>: 18th October → 15th November, 2025</li>
<li><a href="https://devconnect.org/" target="_blank" rel="noopener noreferrer">Devconnect Buenos Aires</a>: 17th → 22nd November 2025</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-featured-developer">🧑‍💻 Featured Developer<a class="hash-link" aria-label="Direct link to 🧑‍💻 Featured Developer" title="Direct link to 🧑‍💻 Featured Developer" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#-featured-developer">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-oct-25-5.png" alt="DOTM 2025" width="100%">
<p>This month’s featured developer is Enguerrand, a builder with a strong focus on low level tech and decentralized solutions to real world problems.</p>
<p>As CTO at <a href="https://long.xyz/" target="_blank" rel="noopener noreferrer">LONG()</a>, he’s building plug and play monetization rails for platforms. With a few API calls, LONG() lets teams integrate markets for crowdfunding, fair launches, and rewards, powered by transparent and open market mechanics that make Web3 monetization seamless.</p>
<p>Before LONG(), Enguerrand operated one of Ethereum’s earliest mining setups and led engineering at <a href="https://lum.network/" target="_blank" rel="noopener noreferrer">Lum Network</a>, contributing to multiple Cosmos based stacks. He’s also worked with Ubisoft on community made multiplayer mods for Watch Dogs Legion and created mods for the Mafia series.</p>
<p>He recently contributed to our latest release by adding the ability to access chain readiness status through context.chains, helping improve transparency and reliability across indexing operations.</p>
<p>Always great seeing developers like Enguerrand push performance and developer experience even further with Envio.</p>
<p><em><strong>“What I really appreciated at Envio is 1. the DX is great and super easy to move to, 2. it works flawlessly, 3. its SUPER performant compared to competitors and 4. The team is great, super professional and easy to reach.” - Enguerrand CTO at LONG()</strong></em></p>
<p>Be sure to follow them on <a href="https://x.com/enguerrandpp" target="_blank" rel="noopener noreferrer">X</a> and check out their work on <a href="https://github.com/Segfaultd" target="_blank" rel="noopener noreferrer">GitHub</a> to stay up to date with what they’re building.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-playlist-of-the-month">🎧️ Playlist of the Month<a class="hash-link" aria-label="Direct link to 🎧️ Playlist of the Month" title="Direct link to 🎧️ Playlist of the Month" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#%EF%B8%8F-playlist-of-the-month">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-update-oct-25-6.png" alt="PLOTM Oct 2025" width="100%">
<p>▶️ <a href="https://open.spotify.com/playlist/01eyMwoIMDEmcDjuFJsuhm?si=0319312d9a2d4499" target="_blank" rel="noopener noreferrer">Open Spotify</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-ship-with-us">🚢 Ship With Us<a class="hash-link" aria-label="Direct link to 🚢 Ship With Us" title="Direct link to 🚢 Ship With Us" href="https://docs.envio.dev/blog/envio-developer-update-october-2025#-ship-with-us">​</a></h2>
<p>Envio is a multichain EVM blockchain indexing solution for querying real-time and historical data. If you’re working on a Web3 project and want a smoother development process, Envio’s got your back(end). Check out our docs, join the community, and let’s talk about your data needs.</p>
<p>Stay tuned for more monthly updates by subscribing to our newsletter, following us on X, or hopping into our Discord for more up-to-date information.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Envio Developer Update September 2025]]></title>
            <link>https://docs.envio.dev/blog/envio-developer-update-september-2025</link>
            <guid>https://docs.envio.dev/blog/envio-developer-update-september-2025</guid>
            <pubDate>Tue, 30 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Catch the highlights from Envio’s September 2025 developer update including product improvements, new network integrations, and community builder milestones.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/sep-update-2025-0.png" alt="Cover Image Envio Developer Community Update September 2025" width="100%">
<p>Welcome to our September Developer Update.</p>
<p>This month, we shipped major new features in v2.28.0 and v2.29.0, introduced Block Handlers and the new <code>_meta</code> query, and rolled out significant performance improvements that make indexing even faster and more efficient. We were on the ground at Pragma, ETHGlobal New Delhi, and Sonic Summit in Singapore, explored how AI is shaping blockchain data, and showcased Envio’s indexing support for MegaETH along with how we power tools like Liqo, a liquidations leaderboard.</p>
<p>We also kicked off new hackathons with MetaMask and Monad and confirmed our partnership for Encode London next month. Let’s dive in!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-big-releases-v2280--v2290">⚡ Big Releases: v2.28.0 → v2.29.0<a class="hash-link" aria-label="Direct link to ⚡ Big Releases: v2.28.0 → v2.29.0" title="Direct link to ⚡ Big Releases: v2.28.0 → v2.29.0" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#-big-releases-v2280--v2290">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="v2280">V2.28.0<a class="hash-link" aria-label="Direct link to V2.28.0" title="Direct link to V2.28.0" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#v2280">​</a></h3>
<p>For a visual walkthrough, check out our Shipper Log v2.28.0 on <a href="https://www.youtube.com/watch?v=qnYX59jWx_k" target="_blank" rel="noopener noreferrer">YouTube</a>.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="official-_meta-query">Official _meta query<a class="hash-link" aria-label="Direct link to Official _meta query" title="Direct link to Official _meta query" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#official-_meta-query">​</a></h4>
<p>HyperIndex now exposes an official <code>_meta</code> query that returns indexing metadata per chain, making it simple to monitor progress and track sync status.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="2-faster-and-cheaper-historical-sync">2× faster and cheaper historical sync<a class="hash-link" aria-label="Direct link to 2× faster and cheaper historical sync" title="Direct link to 2× faster and cheaper historical sync" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#2-faster-and-cheaper-historical-sync">​</a></h4>
<p>Block range selection for log queries has been improved, cutting the number of required requests for some RPC providers in half, making historical sync up to 2x faster. HyperSync responses are now smaller, faster, and simpler, reducing ingress costs while improving performance.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="big-performance-boost-for-large-factories">Big performance boost for large factories<a class="hash-link" aria-label="Direct link to Big performance boost for large factories" title="Direct link to Big performance boost for large factories" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#big-performance-boost-for-large-factories">​</a></h4>
<p>Indexers handling large numbers of addresses now sync significantly faster. In testing, an indexer with over 2 million addresses synced in about two days instead of four.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="subgraph-migration-cursor-rules-cheatsheet">Subgraph migration Cursor rules cheatsheet<a class="hash-link" aria-label="Direct link to Subgraph migration Cursor rules cheatsheet" title="Direct link to Subgraph migration Cursor rules cheatsheet" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#subgraph-migration-cursor-rules-cheatsheet">​</a></h4>
<p>A new Cursor rule example in our repo helps you quickly migrate existing Subgraphs to HyperIndex.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="️potential-breaking-change">⚠️Potential breaking change<a class="hash-link" aria-label="Direct link to ⚠️Potential breaking change" title="Direct link to ⚠️Potential breaking change" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#%EF%B8%8Fpotential-breaking-change">​</a></h4>
<p>We’ve refactored internal tables to focus on a single public entry point: <code>_meta</code>. Internal tables such as <code>chain_metadata</code>, <code>event_sync_state</code>, <code>persisted_state</code>, <code>end_<strong>of</strong>_block_range_scanned_data</code>, and <strong><code>dynamic_contract_registry</code></strong> are now hidden from Hasura, and their internal representations have changed.</p>
<p>If this impacts your setup, reach out, and we’ll help you migrate smoothly.</p>
<img src="https://docs.envio.dev/blog-assets/sep-update-2025-1.png" alt="query" width="100%">
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="v2290">V2.29.0<a class="hash-link" aria-label="Direct link to V2.29.0" title="Direct link to V2.29.0" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#v2290">​</a></h3>
<p>View Shipper Log on <a href="https://www.youtube.com/watch?v=q2CNXIxtVjQ" target="_blank" rel="noopener noreferrer">YouTube</a></p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="block-handlers">🆕Block Handlers<a class="hash-link" aria-label="Direct link to 🆕Block Handlers" title="Direct link to 🆕Block Handlers" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#block-handlers">​</a></h4>
<p>You can now run logic on every block or at defined intervals, unlocking new use cases like aggregations, time-series data, and bulk updates using raw SQL.</p>
<p>Example:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">import { onBlock } from "generated";</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">onBlock(</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    name: "MyBlockHandler",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    chain: 1,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    interval: 10,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    startBlock: 10_000_000,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  async ({ block, context }) =&gt; {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    context.log.info(`Processing block ${block.number}`);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Read our <a href="https://docs.envio.dev/docs/HyperIndex/block-handlers" target="_blank" rel="noopener noreferrer">docs</a> to learn more about block handlers and the powerful use cases they enable, like:</p>
<ul>
<li>Time intervals</li>
<li>Preset handlers</li>
<li>Multichain mode</li>
<li>Different intervals for historical vs. real-time sync</li>
</ul>
<p>Be sure to check out our <a href="https://github.com/enviodev/all-contracts-indexer/blob/main/src/EventHandlers.ts" target="_blank" rel="noopener noreferrer">Example Indexer</a> to see Block Handlers combined with Preload Optimization, Effect API queries, and Traces indexing to track all contracts deployed on Mainnet.</p>
<p>👉 See full <a href="https://github.com/enviodev/hyperindex/releases" target="_blank" rel="noopener noreferrer">release notes</a></p>
<p>👉 Star us on <a href="https://github.com/enviodev/hyperindex" target="_blank" rel="noopener noreferrer">GitHub</a> ⭐</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="liqo-brings-real-time-liquidation-insights-across-major-defi-protocols">Liqo Brings Real-Time Liquidation Insights Across Major DeFi Protocols<a class="hash-link" aria-label="Direct link to Liqo Brings Real-Time Liquidation Insights Across Major DeFi Protocols" title="Direct link to Liqo Brings Real-Time Liquidation Insights Across Major DeFi Protocols" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#liqo-brings-real-time-liquidation-insights-across-major-defi-protocols">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/sep-update-2025-2.png" alt="liqo" width="100%">
<p>Track major real-time liquidations in style with <a href="https://www.liqo.xyz/" target="_blank" rel="noopener noreferrer">Liqo</a>, a powerful liquidation leaderboard tool powered by Envio. The new leaderboard gives you a clear view of the most active liquidators across top protocols like <a href="https://aave.com/" target="_blank" rel="noopener noreferrer">Aave</a>, <a href="https://morpho.org/" target="_blank" rel="noopener noreferrer">Morpho</a>, and <a href="https://euler.finance/" target="_blank" rel="noopener noreferrer">Euler</a>, with support for <a href="https://twyne.xyz/" target="_blank" rel="noopener noreferrer">Twyne</a> coming soon.</p>
<p>It makes exploring liquidation activity across multiple chains and protocols easier than ever, all from one place.</p>
<p>Shoutout to <a href="https://x.com/the_truthseekah" target="_blank" rel="noopener noreferrer">Saurav</a> for their contributions to the sleek UI upgrade.</p>
<p>Check out the original post on <a href="https://x.com/jonjonclark/status/1970164446480695754" target="_blank" rel="noopener noreferrer">X</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="metamask-smart-accounts-hackathon-with-monad-and-envio">MetaMask Smart Accounts Hackathon with Monad and Envio<a class="hash-link" aria-label="Direct link to MetaMask Smart Accounts Hackathon with Monad and Envio" title="Direct link to MetaMask Smart Accounts Hackathon with Monad and Envio" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#metamask-smart-accounts-hackathon-with-monad-and-envio">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/sep-update-2025-3.png" alt="metamask hackathon" width="100%">
<p>The MetaMask Smart Accounts Hackathon, in collaboration with Monad and Envio, is now live and will run from September 19 to October 20. Builders are invited to create next-level applications on Monad with a focus on account abstraction and user experience.</p>
<p>Envio is putting up $5,000 for builders:</p>
<p>• $2,000 for Best Use of Envio</p>
<p>• $3,000 in bonuses</p>
<p>In total, $15,000 in prizes are up for grabs.</p>
<p>More details on <a href="https://www.hackquest.io/hackathons/MetaMask-Smart-Accounts-x-Monad-Dev-Cook-Off" target="_blank" rel="noopener noreferrer">Hackquest</a>.</p>
<p>Missed our kickoff call and want to learn more? Check out the broadcast on <a href="https://x.com/i/broadcasts/1OwxWemMopDGQ" target="_blank" rel="noopener noreferrer">X</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-at-pragma-and-ethglobal-new-delhi">Envio at Pragma and ETHGlobal New Delhi<a class="hash-link" aria-label="Direct link to Envio at Pragma and ETHGlobal New Delhi" title="Direct link to Envio at Pragma and ETHGlobal New Delhi" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#envio-at-pragma-and-ethglobal-new-delhi">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/sep-update-2025-4.png" alt="ethglobal new dehli" width="100%">
<p>The team was in New Delhi for Pragma and ETHGlobal, spending the week with builders, founders, and partners across the ecosystem. Every dapp relies on indexing, but most existing solutions are slow, siloed, and unreliable.</p>
<p>We shared how HyperIndex and HyperSync change that, bringing high performance, multi-chain infrastructure that scales with the modular ecosystem. The result is faster dapps, richer analytics, and a reliable data backbone developers can build on with confidence.</p>
<p>Big thanks to ETHGlobal, the organisers, partners, and everyone who stopped by to chat with us in New Delhi.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-supports-megaeth-builders-with-lightning-fast-on-chain-data-access">Envio Supports MegaETH Builders with Lightning-Fast On-Chain Data Access<a class="hash-link" aria-label="Direct link to Envio Supports MegaETH Builders with Lightning-Fast On-Chain Data Access" title="Direct link to Envio Supports MegaETH Builders with Lightning-Fast On-Chain Data Access" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#envio-supports-megaeth-builders-with-lightning-fast-on-chain-data-access">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/sep-update-2025-5.png" alt="megaeth support" width="100%">
<p>100k+ TPS, 10+ ggas p/s &amp; &lt;10ms blocks? Envio is built for it. Our indexing framework supports developers building on MegaETH with efficient access to both real-time and historical data.</p>
<p>With Envio, you can sync millions of events up to 2000x faster than RPC, making data access easy, fast, and fully customizable even at massive scale. Our performance and mainnet readiness make Envio the ideal choice for builders looking to ship real-time and performant applications on MegaETH.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-state-of-ai-in-blockchain-data-neon-x-envio">The State of AI in Blockchain Data: Neon x Envio<a class="hash-link" aria-label="Direct link to The State of AI in Blockchain Data: Neon x Envio" title="Direct link to The State of AI in Blockchain Data: Neon x Envio" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#the-state-of-ai-in-blockchain-data-neon-x-envio">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/sep-update-2025-6.png" alt="neonevm ama" width="100%">
<p>Blockchain generates endless streams of data, and powerful indexers like Envio make it usable. But what happens when AI steps into the picture?</p>
<p>We joined Neon and Subsquid for a live panel to dig into how AI is reshaping the way data is accessed, organized, and understood in Web3. The conversation explored how intelligence layers can boost indexing workflows, change how developers build with on-chain data, and what the future looks like as AI becomes part of the core data stack.</p>
<p>Missed it live? Catch the full recording of the broadcast on <a href="https://x.com/i/broadcasts/1BRJjgOnEMjxw" target="_blank" rel="noopener noreferrer">X</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="join-envio-at-encode-london-this-october">Join Envio at Encode London This October<a class="hash-link" aria-label="Direct link to Join Envio at Encode London This October" title="Direct link to Join Envio at Encode London This October" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#join-envio-at-encode-london-this-october">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/sep-update-2025-7.png" alt="encode london 2025" width="100%">
<p>We’re excited to be partners at the Encode London Hackathon and Conference, taking place from 24–26 October at the <a href="https://hub.encode.club/" target="_blank" rel="noopener noreferrer">Encode Hub</a> in Shoreditch, London. This three-day event brings together builders, researchers, and industry leaders for hands-on hacking, talks, and workshops focused on AI and Web3. Our team will be on the ground all weekend supporting builders, so keep an eye out for us throughout the event.</p>
<p>Plus, we’ll be hosting a speaking slot and putting up a couple of bounties with prizes, more details coming soon!</p>
<p>See full event details and get tickets in <a href="https://luma.com/Encode-London-25" target="_blank" rel="noopener noreferrer">Luma</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="developer-workshop-series-exploring-aave-with-envio">Developer Workshop Series: Exploring Aave with Envio<a class="hash-link" aria-label="Direct link to Developer Workshop Series: Exploring Aave with Envio" title="Direct link to Developer Workshop Series: Exploring Aave with Envio" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#developer-workshop-series-exploring-aave-with-envio">​</a></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/pVk7-0T_A_g?list=PLV4hxy8ztIJLP4MSpYUXvzoJWY9wMe2L6" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe>
<p>We’ve kicked off a 16-part developer workshop series, starting with a session focused on exploring Aave data using Envio. The series is designed to help developers get hands-on with real on-chain data, showing how to query, index, and build with Aave using Envio.</p>
<p>More workshops are on the way, so be sure to subscribe this YouTube <a href="https://www.youtube.com/@decryptedbytes/playlists" target="_blank" rel="noopener noreferrer">channel</a></p>
<p>to follow along and catch every session.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-upcoming-events">🗓️ Upcoming Events<a class="hash-link" aria-label="Direct link to 🗓️ Upcoming Events" title="Direct link to 🗓️ Upcoming Events" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#%EF%B8%8F-upcoming-events">​</a></h2>
<ul>
<li><a href="https://luma.com/Encode-London-25" target="_blank" rel="noopener noreferrer">Encode London</a>: 24th → 26th October 2025</li>
<li><a href="https://devconnect.org/" target="_blank" rel="noopener noreferrer">Devconnect Buenos Aires</a>: 17th → 22nd November 2025</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-featured-developer">🧑‍💻 Featured Developer<a class="hash-link" aria-label="Direct link to 🧑‍💻 Featured Developer" title="Direct link to 🧑‍💻 Featured Developer" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#-featured-developer">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/sep-update-2025-8.png" alt="DOTM Sep 2025" width="100%">
<p>This month’s featured developer is <a href="https://www.linkedin.com/in/ryan-holanda/" target="_blank" rel="noopener noreferrer">Ryan Holanda</a>, Co-founder and CTO of <a href="https://zupprotocol.xyz/" target="_blank" rel="noopener noreferrer">Zup Protocol</a>. A software engineer since the age of 16, Ryan brings advanced expertise across front-end, mobile, blockchain, and design. Driven by a deep passion for DeFi and the Web3 ecosystem, he has dedicated his career to building innovative solutions that empower users and promote financial freedom.</p>
<p>At just 20 years old, Ryan has already won multiple hackathons, contributed to several open source projects, and founded Zup Protocol. He is known for his quick problem-solving skills across a wide range of domains, from Figma design to complex blockchain engineering.</p>
<p><em><strong>“Envio is by far the best indexer on the market today. Their innovative approach to indexing blockchain data helped Zup Protocol reduce the sync time for historical liquidity pools data from 3 months with Subgraphs to just 2 days using their hosted service. The Envio team is amazing and always ready to help whenever you need support. If you like great products and cool teams, you should definitely give it a try (pro tip: the migration from Subgraphs is veeeery easy ).”</strong></em> - <em>Ryan Holanda, Co-Founder &amp; CTO of Zup Protocol</em></p>
<p>Be sure to follow them on <a href="https://x.com/moo9000" target="_blank" rel="noopener noreferrer">X</a> and check out their work on <a href="https://github.com/RyanHolanda" target="_blank" rel="noopener noreferrer">GitHub</a> to stay up to date with what they are building.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-playlist-of-the-month">🎧️ Playlist of the Month<a class="hash-link" aria-label="Direct link to 🎧️ Playlist of the Month" title="Direct link to 🎧️ Playlist of the Month" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#%EF%B8%8F-playlist-of-the-month">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/sep-update-2025-9.png" alt="PLOTM Sep 2025" width="100%">
<p>▶️<a href="https://open.spotify.com/playlist/2lOYVNjlopciZGOUGdPED1?si=34ee9820a0db4494" target="_blank" rel="noopener noreferrer"> Open Spotify</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-ship-with-us">🚢 Ship With Us<a class="hash-link" aria-label="Direct link to 🚢 Ship With Us" title="Direct link to 🚢 Ship With Us" href="https://docs.envio.dev/blog/envio-developer-update-september-2025#-ship-with-us">​</a></h2>
<p>Envio is a multichain EVM blockchain indexing solution for querying real-time and historical data. If you’re working on a Web3 project and want a smoother development process, Envio’s got your back(end). Check out our docs, join the community, and let’s talk about your data needs.</p>
<p>Stay tuned for more monthly updates by subscribing to our newsletter, following us on X, or hopping into our Discord for more up-to-date information.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Envio Developer Update August 2025]]></title>
            <link>https://docs.envio.dev/blog/envio-developer-update-august-2025</link>
            <guid>https://docs.envio.dev/blog/envio-developer-update-august-2025</guid>
            <pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[See what Envio shipped in August 2025 including key product updates, internal hackathon projects, new integrations, and expanded network support for builders.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/dev-update-august-2025.png" alt="Cover Image Envio Developer Community Update August 2025" width="100%">
<p>Welcome to our August Developer Update.</p>
<p>This month, we shipped preload optimization in v2.27.0, added contract-specific start blocks, and rolled out improved contributing guidelines with built-in Cursor rules. HyperSync also went global, we joined the Mobil3 hackathon in Mexico City, and we built a Telegram-to-Notion sync utility to make CRM management easier. Let’s dive in!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-big-releases-v2270">⚡ BIG Releases: v2.27.0<a class="hash-link" aria-label="Direct link to ⚡ BIG Releases: v2.27.0" title="Direct link to ⚡ BIG Releases: v2.27.0" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#-big-releases-v2270">​</a></h2>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="preload-optimization">Preload Optimization<a class="hash-link" aria-label="Direct link to Preload Optimization" title="Direct link to Preload Optimization" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#preload-optimization">​</a></h4>
<p>HyperIndex now preloads entities used by handlers via batched database queries, maintaining the original order of event processing. Paired with the Effect API for external calls, this gives big performance gains over other indexing solutions.</p>
<p>Set a single line in your config and make your handlers run multiple times faster without changing a single line of code:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">preload_handlers: true</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><em>⚠️ Note: Preload optimization runs your handlers twice. From <strong><code>envio@2.27</code></strong>, all new indexers include it by default.</em></p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="contract-specific-start-block">Contract-specific start block<a class="hash-link" aria-label="Direct link to Contract-specific start block" title="Direct link to Contract-specific start block" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#contract-specific-start-block">​</a></h4>
<p>HyperIndex now supports indexing with start blocks on a per-contract basis (previously, start blocks were only per-network), a highly requested feature contributed by one of our community members, <a href="https://github.com/rori4" target="_blank" rel="noopener noreferrer">Rangel Stoilov</a>.</p>
<p><strong>Example</strong>: register NFT contracts from a factory but start processing Transfers only from block 30,000,000:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">name: nft-indexer</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">description: NFT Factory</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">networks:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  - id: 1337</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    start_block: 0</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    contracts:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      - name: NftFactory</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        address: 0x4675a6B115329294e0518A2B7cC12B70987895C4</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        handler: src/EventHandlers.ts</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        events:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          - event: SimpleNftCreated(string name, string symbol, uint256 maxSupply, address contractAddress)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      - name: Nft</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        # No address field - we'll discover these addresses from SimpleNftCreated events</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        start_block: </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        handler: src/EventHandlers.ts</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        start_block: 30000000 # Overwrite the network start block</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        events:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          - event: Transfer(address from, address to, uint256 tokenId)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="️️-contributing-improvements">👷‍♀️👷‍♂️ Contributing Improvements<a class="hash-link" aria-label="Direct link to 👷‍♀️👷‍♂️ Contributing Improvements" title="Direct link to 👷‍♀️👷‍♂️ Contributing Improvements" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#%EF%B8%8F%EF%B8%8F-contributing-improvements">​</a></h4>
<p>We’ve updated our <strong><code>CONTRIBUTING.md</code></strong> with a detailed guide to navigating the HyperIndex codebase and examples of changes in action. We’ve also added <code>.cursor</code> rules to make developing new HyperIndex features easier.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="embrace-vibe-coding">Embrace Vibe-Coding<a class="hash-link" aria-label="Direct link to Embrace Vibe-Coding" title="Direct link to Embrace Vibe-Coding" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#embrace-vibe-coding">​</a></h4>
<p>All new projects now include initial <code>.cursor</code> rules to help you build indexers with agent support. Got ideas? Send a PR with rule suggestions to improve the experience for everyone. 😉</p>
<p>👉 See full <a href="https://github.com/enviodev/hyperindex/releases" target="_blank" rel="noopener noreferrer">release notes</a></p>
<p>👉 Star us on <a href="https://github.com/enviodev/hyperindex" target="_blank" rel="noopener noreferrer">GitHub</a> ⭐</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="introducing-shipper-logs">Introducing Shipper Logs<a class="hash-link" aria-label="Direct link to Introducing Shipper Logs" title="Direct link to Introducing Shipper Logs" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#introducing-shipper-logs">​</a></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/QqbH78CEid8" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe>
<p>Our new <a href="https://www.youtube.com/@envio_indexer/playlists" target="_blank" rel="noopener noreferrer">YouTube series</a> covers release updates, new features, and optimizations. Episode 1 covers preload optimization in the v2.27.0 release and how it speeds up indexing.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="introducing-chain-pulse">Introducing Chain Pulse<a class="hash-link" aria-label="Direct link to Introducing Chain Pulse" title="Direct link to Introducing Chain Pulse" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#introducing-chain-pulse">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/chain-pulse.png" alt="chain pulse" width="100%">
<p>A simple yet powerful tool to quickly check the pulse of multiple blockchains in real time.</p>
<p>With a single command, you can instantly see:</p>
<ul>
<li>📊 Throughput</li>
<li>🔄 Transaction activity</li>
<li>👥 Address activity</li>
<li>📑 Logs &amp; other key metrics</li>
</ul>
<p>Chains already cooking include: BNB, MegaETH, Taraxa, Monad, Base, Unichain (Sepolia), and Polygon, with more on the way.</p>
<p>Just run:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">npx chainpulse</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>👉 Check out the original post on <a href="https://x.com/jonjonclark/status/1958497121293787146" target="_blank" rel="noopener noreferrer">X</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-powers-zup-protocol">Envio Powers Zup Protocol<a class="hash-link" aria-label="Direct link to Envio Powers Zup Protocol" title="Direct link to Envio Powers Zup Protocol" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#envio-powers-zup-protocol">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/zup-integration.png" alt="zup" width="100%">
<p>Easily search millions of pools across multiple DEXs and chains for the best yield per pair. Really cool tech.</p>
<p>Zup Protocol now connects you to 1M+ pools and 16 protocols across 5 blockchains.</p>
<p>Powered by Envio, you can compare 1,000+ combos in just 10 seconds.</p>
<p>👉 Check out Zup Protocol:<a href="https://app.zupprotocol.xyz/" target="_blank" rel="noopener noreferrer"> app.zupprotocol.xyz</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="hypersync-is-now-globally-distributed">HyperSync is now Globally Distributed<a class="hash-link" aria-label="Direct link to HyperSync is now Globally Distributed" title="Direct link to HyperSync is now Globally Distributed" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#hypersync-is-now-globally-distributed">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/k8gb.png" alt="k8gb" width="100%">
<p>We’ve joined the official list of  <a href="https://k8gb.io/ADOPTERS/" target="_blank" rel="noopener noreferrer">K8GB adopters</a>. HyperSync is now served from multiple regions, giving builders faster and more reliable access wherever they are.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-mobil3-hackathon---mexico-city">🇲🇽 Mobil3 Hackathon - Mexico City<a class="hash-link" aria-label="Direct link to 🇲🇽 Mobil3 Hackathon - Mexico City" title="Direct link to 🇲🇽 Mobil3 Hackathon - Mexico City" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#-mobil3-hackathon---mexico-city">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/mobil3-hackathon.png" alt="mobil3 hackathon" width="100%">
<p>We had a great time at the <a href="https://mobil3.xyz/" target="_blank" rel="noopener noreferrer">Mobil3</a> Hackathon in CDMX!</p>
<p>Envio put up a <a href="https://x.com/mobil3_xyz/status/1956083421018833267" target="_blank" rel="noopener noreferrer">$2,000 USD bounty</a> for the best real-time payments or consumer fintech dashboards built using Envio.</p>
<p>Co-founder Denham Preen was on-site, leading a workshop on HyperIndex + HyperSync and offering 1:1 mentoring to teams throughout the hackathon.</p>
<p>Big thanks to the Mobil3 organizers, the Monaa Foundation, and all the builders who made it an incredible event!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-943m-frozen">💸 $943M Frozen<a class="hash-link" aria-label="Direct link to 💸 $943M Frozen" title="Direct link to 💸 $943M Frozen" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#-943m-frozen">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/banned-list.png" alt="banned list" width="100%">
<p>Say hello to the only list you don’t want to be on → <a href="https://thebannedlist.xyz/" target="_blank" rel="noopener noreferrer">The Banned List</a></p>
<p>This dashboard tracks funds frozen across USDT and USDC on Ethereum mainnet. Right now, over $943M is locked in blacklisted wallets. USDT accounts for $833.78M and USDC makes up $109.73M.</p>
<p>Some of the top wallets hold tens of millions, with one blocked from moving $50.25M. New addresses continue to be blacklisted, including one with $1.37M that keeps trying to move funds out. It’s still not clear why these wallets have been targeted, but the dashboard makes it easy to explore and investigate what’s happening in real time.</p>
<p>👉 Check out the original post on <a href="https://x.com/DenhamPreen/status/1956037853927846261" target="_blank" rel="noopener noreferrer">X</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-introducing-liquidator">💧 Introducing Liquidator<a class="hash-link" aria-label="Direct link to 💧 Introducing Liquidator" title="Direct link to 💧 Introducing Liquidator" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#-introducing-liquidator">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/liquidator.png" alt="liquidator" width="100%">
<p>Say hello to Liquidator, a new tool that lets you watch liquidation events unfold live in your terminal.</p>
<p>Powered by Envio, it can cut through more than 10 chains in seconds and surface hundreds of thousands of liquidation events, raw, unfiltered, and in real time.</p>
<p>Liquidator is currently live for Aave, with more protocols coming soon. Which one should we add next? 👀</p>
<p>👉 See the original post on <a href="https://x.com/jonjonclark/status/1950609313719783846" target="_blank" rel="noopener noreferrer">X</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-telegram-to-notion-sync-crm-tool">📦 Telegram to Notion Sync CRM Tool<a class="hash-link" aria-label="Direct link to 📦 Telegram to Notion Sync CRM Tool" title="Direct link to 📦 Telegram to Notion Sync CRM Tool" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#-telegram-to-notion-sync-crm-tool">​</a></h2>
<p>Managing endless Telegram groups is a hassle, so we built an open-source CLI tool that syncs your Telegram chats into a Notion database.</p>
<p>It finds all chats with a specific substring, adds new ones automatically, and lets you manage them with Kanban, labels, and reminders.</p>
<p>Credits to <a href="https://x.com/KenauVith32" target="_blank" rel="noopener noreferrer">Kenau Vith</a></p>
<p>👉 Check it out on <a href="https://github.com/enviodev/telegram-to-notiondb" target="_blank" rel="noopener noreferrer">GitHub</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-upcoming-events">🗓️ Upcoming Events<a class="hash-link" aria-label="Direct link to 🗓️ Upcoming Events" title="Direct link to 🗓️ Upcoming Events" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#%EF%B8%8F-upcoming-events">​</a></h2>
<ul>
<li><a href="https://luma.com/Encode-London-25" target="_blank" rel="noopener noreferrer">Encode London</a>: 24th → 26th October 2025</li>
<li><a href="https://devconnect.org/" target="_blank" rel="noopener noreferrer">Devconnect Buenos Aires</a>: 17th → 22nd November 2025</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-featured-developer">🧑‍💻 Featured Developer<a class="hash-link" aria-label="Direct link to 🧑‍💻 Featured Developer" title="Direct link to 🧑‍💻 Featured Developer" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#-featured-developer">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/aug-2025-DOTM.png" alt="Aug 2025 DOTM" width="100%">
<p>This month’s featured developer is Mikko Ohtamaa, CEO and Co-Founder of <a href="https://tradingstrategy.ai/" target="_blank" rel="noopener noreferrer">Trading Strategy</a>, a Web3 algorithmic trading protocol. Over the past decade, Mikko has served as CTO at leading blockchain companies like LocalBitcoins (one of the first Bitcoin exchanges) and TokenMarket (one of the first ICO platforms), where he helped build infrastructure for more than $1B in digital assets. He’s also an active voice in digital rights and open-source communities.</p>
<p>Thanks for being an awesome member of our community, Mikko!</p>
<p><em><strong>“We use Envio because it's the first indexer that works. Envio is easy to integrate with modern data research and trading pipelines based in Python. This allows us to integrate more chains, faster, go deeper in data, and finally have a developer experience blockchain programmers have craved for.”</strong></em> - <em>Mikko Ohtamaa, CEO &amp; Co-Founder at Trading Strategy</em></p>
<p>Be sure to follow them on <a href="https://x.com/moo9000" target="_blank" rel="noopener noreferrer">X</a> and check out their work on <a href="https://github.com/miohtama/" target="_blank" rel="noopener noreferrer">GitHub</a> to stay up to date with what they are building.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="️-playlist-of-the-month">🎧️ Playlist of the Month<a class="hash-link" aria-label="Direct link to 🎧️ Playlist of the Month" title="Direct link to 🎧️ Playlist of the Month" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#%EF%B8%8F-playlist-of-the-month">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/aug-playlist-2025.png" alt="Aug 2025 Playlist" width="100%">
<p>▶️ <a href="https://open.spotify.com/playlist/3n3qReuChMo6SEgl0Bso3Z?si=23e45edbfde34be1" target="_blank" rel="noopener noreferrer">Open Spotify</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-ship-with-us">🚢 Ship With Us<a class="hash-link" aria-label="Direct link to 🚢 Ship With Us" title="Direct link to 🚢 Ship With Us" href="https://docs.envio.dev/blog/envio-developer-update-august-2025#-ship-with-us">​</a></h2>
<p>Envio is a multichain EVM blockchain indexing solution for querying real-time and historical data. If you’re working on a Web3 project and want a smoother development process, Envio’s got your back(end). Check out our docs, join the community, and let’s talk about your data needs.</p>
<p>Stay tuned for more monthly updates by subscribing to our newsletter, following us on X, or hopping into our Discord for more up-to-date information.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Envio Developer Update July 2025]]></title>
            <link>https://docs.envio.dev/blog/envio-developer-update-july-2025</link>
            <guid>https://docs.envio.dev/blog/envio-developer-update-july-2025</guid>
            <pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover what Envio released in July 2025 including built in cache for effect calls, a one-click indexer generator, internal hackathon highlights, and our Base and Ethereum ecosystem integrations.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/dev-update-july-2025.png" alt="Cover Image Envio Developer Community Update July 2025" width="100%">
<p>Welcome to our July Developer Update.</p>
<p>This month, we embraced built-in cache for effect calls, improved loaders, added new testing utilities, and introduced more control over output configuration. We also launched a one-click indexer generator, shipped fresh hacks from our internal hackathon, and kept refining the overall developer experience.</p>
<p>We made stops at EthCC and Pragma Cannes too, catching up with builders from across the space. Let’s dive in!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="latest-releases-v2230--v2260">Latest Releases: v2.23.0 → v2.26.0<a class="hash-link" aria-label="Direct link to Latest Releases: v2.23.0 → v2.26.0" title="Direct link to Latest Releases: v2.23.0 → v2.26.0" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#latest-releases-v2230--v2260">​</a></h2>
<p><em>⚠️Note: Current Release is v2.26.0</em></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="built-in-cache-for-effect-calls">Built-in Cache for Effect Calls<a class="hash-link" aria-label="Direct link to Built-in Cache for Effect Calls" title="Direct link to Built-in Cache for Effect Calls" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#built-in-cache-for-effect-calls">​</a></h3>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">import { experimental_createEffect, S } from "envio";</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export const getMetadata = experimental_createEffect(</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    name: "getMetadata",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    input: S.string,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    output: {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      description: S.string,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      value: S.bigint,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    cache: true, // Simply set cache to true</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  async ({ input, context }) =&gt; {}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">})</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Learn more in our <a href="https://docs.envio.dev/docs/HyperIndex/effect-api#persistence" target="_blank" rel="noopener noreferrer">docs</a> about how to persist the cache on reruns and share it with Hosted Service (alpha).</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="v2230">V2.23.0<a class="hash-link" aria-label="Direct link to V2.23.0" title="Direct link to V2.23.0" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#v2230">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="embracing-loaders">Embracing loaders<a class="hash-link" aria-label="Direct link to Embracing loaders" title="Direct link to Embracing loaders" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#embracing-loaders">​</a></h3>
<p>In v2.23.0, we added <code>context.set</code>, <strong><code>context.unsafeDelete</code></strong>, and <strong><code>context.getOrCreate</code></strong> to loaders.</p>
<p>Add <strong><code>context.isPreload</code></strong> to distinguish between the first and second loader run. If you are a power user, from now on we recommend going all-in with loaders and keeping your handlers empty.</p>
<p>Learn more in our dedicated loaders <a href="https://docs.envio.dev/docs/HyperIndex/loaders#going-all-in-with-loaders" target="_blank" rel="noopener noreferrer">guide</a>.</p>
<p>For a full list of changes and more information about current and past releases, view the release notes on our <a href="https://github.com/enviodev/hyperindex/releases" target="_blank" rel="noopener noreferrer">GitHub</a>.</p>
<p>Love what we’re building as much as we do and want to stay updated on our latest releases and developments? Give us a star on <a href="https://github.com/enviodev/hyperindex" target="_blank" rel="noopener noreferrer">GitHub</a>! Your support means the world to us! ⭐</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="new-feature-instantly-generate-an-indexer-from-your-contract-address">New Feature: Instantly Generate an Indexer from Your Contract Address<a class="hash-link" aria-label="Direct link to New Feature: Instantly Generate an Indexer from Your Contract Address" title="Direct link to New Feature: Instantly Generate an Indexer from Your Contract Address" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#new-feature-instantly-generate-an-indexer-from-your-contract-address">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/generate-indexer-contract-address.gif" alt="contract address" width="100%">
<p>We’ve refreshed our landing page with a handy new tool. Simply paste your contract address to:</p>
<ul>
<li>Get an estimated indexing time</li>
<li>Receive one command to autogenerate your indexer</li>
<li>No config files. No guesswork. Just paste and go.</li>
</ul>
<p>Try it out now by visiting our landing <a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">page</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="envio-supports-base-with-lightning-fast-data-retrieval">Envio Supports Base with Lightning Fast Data Retrieval<a class="hash-link" aria-label="Direct link to Envio Supports Base with Lightning Fast Data Retrieval" title="Direct link to Envio Supports Base with Lightning Fast Data Retrieval" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#envio-supports-base-with-lightning-fast-data-retrieval">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/base-support.png" alt="base support" width="100%">
<p><a href="https://www.base.org/" target="_blank" rel="noopener noreferrer">Base</a> is booming. Your data should too. Envio’s HyperSync supports Base with the most advanced indexing on the market. Sync historical data in minutes, access it up to 2000x faster than RPC, and query structured logs, traces, events, and functions.</p>
<p>Learn how to index millions of events in Seconds on Base using Envio in this <a href="https://x.com/envio_indexer/status/1943657401506304443" target="_blank" rel="noopener noreferrer">thread</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="internal-hackathon-july-2025">Internal Hackathon July 2025<a class="hash-link" aria-label="Direct link to Internal Hackathon July 2025" title="Direct link to Internal Hackathon July 2025" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#internal-hackathon-july-2025">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/internal-hack-turkey.png" alt="internal hack turkey" width="100%">
<p>We wrapped up another successful internal hackathon during our team offsite this month. The goal? Build tools that push Envio forward. Some are already live.</p>
<p>We run these every last Thursday of the month, so keep an eye out for more builds. Let us know which one’s your favourite.</p>
<p>Check out this <a href="https://x.com/envio_indexer/status/1950145932516880605" target="_blank" rel="noopener noreferrer">thread</a> to see what we built in under 24 hours.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="supercharge-your-ethereum-data-with-envios-hypersync">Supercharge Your Ethereum Data With Envio’s HyperSync<a class="hash-link" aria-label="Direct link to Supercharge Your Ethereum Data With Envio’s HyperSync" title="Direct link to Supercharge Your Ethereum Data With Envio’s HyperSync" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#supercharge-your-ethereum-data-with-envios-hypersync">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/eth-support.png" alt="eth support" width="100%">
<p><a href="https://ethereum.org/en/" target="_blank" rel="noopener noreferrer">Ethereum</a> is on fire. ETF inflows are climbing, regulatory clarity is coming, and price action is picking up. The network’s heating up, but can your infrastructure keep up? Envio’s HyperSync lets you index millions of events on Ethereum in seconds. No delays. Just fast, structured access to the data that matters.</p>
<p>Learn how in this <a href="https://x.com/envio_indexer/status/1945849077746327639" target="_blank" rel="noopener noreferrer">thread</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="ethcc--pragma-cannes-2025-recap">EthCC &amp; Pragma Cannes 2025 Recap<a class="hash-link" aria-label="Direct link to EthCC &amp; Pragma Cannes 2025 Recap" title="Direct link to EthCC &amp; Pragma Cannes 2025 Recap" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#ethcc--pragma-cannes-2025-recap">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/ethcc-pragma.png" alt="ethcc &amp; pragma" width="100%">
<p>Yes, we Cannes!</p>
<p>Big shoutout to the <a href="https://ethcc.io/" target="_blank" rel="noopener noreferrer">EthCC</a> team for an incredible event, and to <a href="https://ethglobal.com/" target="_blank" rel="noopener noreferrer">ETHGlobal</a> for hosting a packed Pragma. Non-stop energy, great convos, and a stacked builder crowd.</p>
<p>We’re proud to be building alongside some of the sharpest devs and innovators in the space. Huge thanks to everyone who made it happen. Until next time.</p>
<p>Missed our workshop on lightning-fast multi-chain indexing? Catch the replay on <a href="https://www.youtube.com/watch?v=-sFCbIVVeRw&amp;list=PLXzKMXK2aHh6jZYPY5-YIBzvMtUT3ajjI" target="_blank" rel="noopener noreferrer">YouTube</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="upcoming-events-️">Upcoming Events 🗓️<a class="hash-link" aria-label="Direct link to Upcoming Events 🗓️" title="Direct link to Upcoming Events 🗓️" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#upcoming-events-%EF%B8%8F">​</a></h2>
<ul>
<li><a href="https://lu.ma/ethereum-10y-capetown" target="_blank" rel="noopener noreferrer">Ethereum 10th Anniversary Cape Town</a>: → 30th July 2025</li>
<li><a href="https://devconnect.org/" target="_blank" rel="noopener noreferrer">Devconnect Buenos Aires</a>: 17th → 22nd November 2025</li>
<li><a href="https://mobil3.xyz/" target="_blank" rel="noopener noreferrer">Mobil3 Hackathon Mexico</a>: 20th → 24th August 2025</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="featured-developer-">Featured Developer 🧑‍💻<a class="hash-link" aria-label="Direct link to Featured Developer 🧑‍💻" title="Direct link to Featured Developer 🧑‍💻" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#featured-developer-">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-of-the-month-july-2025.png" alt="july 2025 DOTM" width="100%">
<p>This month’s featured developer is Nikhil, a software developer and technical content creator who’s been sharing practical insights with Web3 devs for years. He’s worked with teams like Figment, Celo, and Bitquery, crafting developer-facing content. Nikhil has also contributed as a Solidity developer on smaller DeFi projects and is now focusing on personal projects while exploring new opportunities.</p>
<p>He recently got hands-on with Envio, using our tools live on stream to build a custom database for <a href="https://x.com/AcrossProtocol" target="_blank" rel="noopener noreferrer">Across Protocol</a>. His clear walkthroughs on his YouTube <a href="http://youtube.com/@decryptedbytes" target="_blank" rel="noopener noreferrer">channel</a> and detailed feedback have helped surface valuable insights and made our tooling more accessible to the wider community.</p>
<p><em><strong>“I came across Envio through some of the content Jonjon had shared, his projects like <a href="https://www.npmjs.com/package/logtui" target="_blank" rel="noopener noreferrer">Logtui</a> and <a href="https://www.v4.xyz/" target="_blank" rel="noopener noreferrer">V4</a>, really caught my attention and pushed me to try it out. What I was looking for was a framework that gave me full control and flexibility, and Envio delivers exactly that.</strong></em></p>
<p><em><strong>I’m currently working on a personal project to build an explorer and analytics platform for Across Protocol, so it felt like a good time to dive into Envio. So far, the experience has exceeded expectations. The documentation is solid, it answers almost every question I’ve had while working with it.”</strong></em> - <em>Nikhil, Developer &amp; Web3 Educator</em></p>
<p>Be sure to follow Nikhil on <a href="https://x.com/nikbhintade" target="_blank" rel="noopener noreferrer">X</a> and check out their work on <a href="https://github.com/nikbhintade" target="_blank" rel="noopener noreferrer">GitHub</a> to see what they’re building next.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="playlist-of-the-month-️">Playlist of the Month 🎧️<a class="hash-link" aria-label="Direct link to Playlist of the Month 🎧️" title="Direct link to Playlist of the Month 🎧️" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#playlist-of-the-month-%EF%B8%8F">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/july-2025-playlist.png" alt="july 2025 playlist" width="100%">
<p>▶️ <a href="https://open.spotify.com/playlist/1vyctkfc1CrmnVv2dMCrUo?si=84f39e6a4b1d436e" target="_blank" rel="noopener noreferrer">Open Spotify</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="ship-with-us-">Ship With Us 🚢<a class="hash-link" aria-label="Direct link to Ship With Us 🚢" title="Direct link to Ship With Us 🚢" href="https://docs.envio.dev/blog/envio-developer-update-july-2025#ship-with-us-">​</a></h2>
<p>Envio is a multichain EVM blockchain indexing solution for querying real-time and historical data. If you’re working on a Web3 project and want a smoother development process, Envio’s got your back(end). Check out our docs, join the community, and let’s talk about your data needs.</p>
<p>Stay tuned for more monthly updates by subscribing to our newsletter, following us on X, or hopping into our Discord for more up-to-date information.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building Visualizers & Dashboards on Monad using Envio]]></title>
            <link>https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio</link>
            <guid>https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio</guid>
            <pubDate>Tue, 24 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn how to build visual dashboards on Monad using Envio to stream real-time and historical data and create interactive analytics experiences with ease.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/building-visualizers-and-dash-monad.png" alt="Cover Image Building Visualizers and Dashboards on Monad" width="100%">
<p>As part of Mission 4 from the <a href="https://discord.gg/monaddev" target="_blank" rel="noopener noreferrer">Monad Developers</a> community, we challenged builders to create the most innovative real-time dashboards and visualizers on <a href="https://www.monad.xyz/" target="_blank" rel="noopener noreferrer">Monad</a> using Envio. The results were exceptional. The developers delivered powerful tools that showcased not only creative visualizers and dashboards but also the power of Envio’s indexing stack.</p>
<p>Monad’s rapid growth has created a strong need for scalable, real-time data infrastructure. Whether tracking protocol activity, analyzing transaction flows, or building live analytics dashboards, a high-performance indexer is critical.</p>
<p>Envio is helping developers meet this demand with a robust suite of indexing tools that are purpose-built for high-throughput chains like Monad. These submissions highlight how Envio simplifies data indexing on Monad, enabling rich, real-time applications with speed, accuracy, and ease.</p>
<p>Let’s dive into some of the submissions built during Mission 4.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="monad-super-visualizer">Monad Super Visualizer<a class="hash-link" aria-label="Direct link to Monad Super Visualizer" title="Direct link to Monad Super Visualizer" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#monad-super-visualizer">​</a></h2>
<p>By <a href="https://x.com/monadicoo" target="_blank" rel="noopener noreferrer">@monadicoo</a></p>
<img src="https://docs.envio.dev/blog-assets/monad-visualizer.gif" alt="monad visualizer" width="100%">
<p>This immersive dashboard allows users to explore live activity across the entire Monad chain. It provides deep visibility into data from specific protocols, contracts, or addresses. Envio powers two core functionalities: streaming live, chain-wide activity to the homepage, and offering a filtered data feed for targeted protocol analysis.</p>
<p>Check it out <a href="https://monadviewer.vercel.app/" target="_blank" rel="noopener noreferrer">here</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="monad-genki-dama">Monad Genki Dama<a class="hash-link" aria-label="Direct link to Monad Genki Dama" title="Direct link to Monad Genki Dama" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#monad-genki-dama">​</a></h2>
<p>By <a href="https://x.com/sifu_lam" target="_blank" rel="noopener noreferrer">@sifu_lam</a></p>
<img src="https://docs.envio.dev/blog-assets/monad-genki.gif" alt="monad genki" width="100%">
<p>A unique Dragon Ball Z-inspired visual experience that depicts each Monad testnet block as energy contributing to a Genki Dama. Monanimals generate power balls representing transaction types, visually charging the Monad mainnet. Envio’s HyperSync ensures real-time accuracy and high throughput with minimal latency.</p>
<p>Check it out <a href="https://monad-genki-dama.vercel.app/" target="_blank" rel="noopener noreferrer">here</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="lendhub-stats-page">LendHub Stats Page<a class="hash-link" aria-label="Direct link to LendHub Stats Page" title="Direct link to LendHub Stats Page" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#lendhub-stats-page">​</a></h2>
<p>By <a href="https://x.com/bossonormal1" target="_blank" rel="noopener noreferrer">@bossonormal1</a></p>
<img src="https://docs.envio.dev/blog-assets/lendhub.png" alt="lendhub" width="100%">
<p>LendHub’s dashboard presents real-time analytics for a peer-to-peer NFT lending protocol. It tracks metrics such as loans listed, funded, repaid, claimed, and withdrawn. Custom-built with Envio’s config.yaml, schema.graphql, and event handlers, this tool uses a GraphQL endpoint to update dynamically based on key smart contract events.</p>
<p>Check it out <a href="https://www.lendhub.xyz/stats" target="_blank" rel="noopener noreferrer">here</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="miris">Miris<a class="hash-link" aria-label="Direct link to Miris" title="Direct link to Miris" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#miris">​</a></h2>
<p>By <a href="https://x.com/velkan_gst" target="_blank" rel="noopener noreferrer">@velkan_gst</a></p>
<img src="https://docs.envio.dev/blog-assets/miris.gif" alt="miris" width="100%">
<p>Miris is a fully featured chain visualizer offering insights into blocks, transactions, and overall network health. Envio handles the indexing of core protocols like Wormhole and Apr Labs, and the Explorer page also uncovers activity from additional Monad projects. Built using Apollo Client and Next.js.</p>
<p>Check it out <a href="https://miris.vercel.app/" target="_blank" rel="noopener noreferrer">here</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="monad-frens">Monad Frens<a class="hash-link" aria-label="Direct link to Monad Frens" title="Direct link to Monad Frens" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#monad-frens">​</a></h2>
<p>By <a href="https://x.com/WagmiArc" target="_blank" rel="noopener noreferrer">@WagmiArc</a></p>
<img src="https://docs.envio.dev/blog-assets/monad-frens.gif" alt="monad frens" width="100%">
<p>Monad Frens delivers real-time and historical chain insights in a visually engaging format, including a pizza-themed chain status display. Envio’s HyperSync feeds accurate block and transaction data, while a custom API calculates cumulative transactions since Block 0. The dashboard filters transactions by timestamp, ensuring comprehensive tracking.</p>
<p>Check it out <a href="https://dashboard.monadfrens.fun/" target="_blank" rel="noopener noreferrer">here</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="monlake">MonLake<a class="hash-link" aria-label="Direct link to MonLake" title="Direct link to MonLake" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#monlake">​</a></h2>
<p>By <a href="https://x.com/YOUZYPOOR" target="_blank" rel="noopener noreferrer">@YOUZYPOOR</a></p>
<img src="https://docs.envio.dev/blog-assets/monlake.gif" alt="monlake" width="100%">
<p>An aquarium-themed visualization of the Monad testnet, where Monanimals represent blocks and treasure chests symbolize various transaction types. Failed transactions appear as jellyfish. Real-time metrics like gas price and transaction distribution are updated using Envio, which indexes all relevant data without stressing RPC endpoints.</p>
<p>Check it out <a href="https://monlake.vercel.app/" target="_blank" rel="noopener noreferrer">here</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="animonad">Animonad<a class="hash-link" aria-label="Direct link to Animonad" title="Direct link to Animonad" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#animonad">​</a></h2>
<p>By <a href="https://x.com/Samruddhi_Krnr" target="_blank" rel="noopener noreferrer">@Samruddhi_Krnr</a></p>
<img src="https://docs.envio.dev/blog-assets/animonad.gif" alt="animonad" width="100%">
<p>Animonad tracks live transactions per second across Monad-based dApps like Magma, PancakeSwap, and Narwhal Finance. Each transaction is categorized by address and function signature. Envio’s HyperSync facilitates rapid data retrieval to update the UI every second, powering dynamic graphs and protocol rankings.</p>
<p>Check it out <a href="https://animonad.vercel.app/" target="_blank" rel="noopener noreferrer">here</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="nadmetrics">NadMetrics<a class="hash-link" aria-label="Direct link to NadMetrics" title="Direct link to NadMetrics" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#nadmetrics">​</a></h2>
<p>By <a href="https://x.com/yomax75" target="_blank" rel="noopener noreferrer">@yomax75</a></p>
<img src="https://docs.envio.dev/blog-assets/nadmetrics.gif" alt="nadmetrics" width="100%">
<p>Built with React, TypeScript, Node.js, and WebSockets, NadMetrics is a robust analytics platform offering real-time and historical data for Monad. The dashboard is ideal for developers and analysts monitoring chain volume, transaction flow, and usage trends. Envio serves as the foundation for its high-speed data ingestion.</p>
<p>Check it out <a href="https://nadmetrics.com/live" target="_blank" rel="noopener noreferrer">here</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="monalytics">Monalytics<a class="hash-link" aria-label="Direct link to Monalytics" title="Direct link to Monalytics" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#monalytics">​</a></h2>
<p>By <a href="https://x.com/gabriell_santi" target="_blank" rel="noopener noreferrer">@gabriell_santi</a></p>
<img src="https://docs.envio.dev/blog-assets/monalytics.gif" alt="monalytics" width="100%">
<p>An interactive dashboard for real-time visualization of activity on the Monad testnet. It leverages Envio for continuous on-chain event streaming and HyperRPC for fast, low-latency data access. The platform delivers both a global view of the network, including metrics like TPS, gas usage, and block entropy, and protocol-specific panels for apps like MonTools, Castora, Ambient, and more.</p>
<p>Check it out <a href="https://analytics.montools.xyz/chain" target="_blank" rel="noopener noreferrer">here</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="monanimals-blast-mayhem">Monanimals Blast Mayhem<a class="hash-link" aria-label="Direct link to Monanimals Blast Mayhem" title="Direct link to Monanimals Blast Mayhem" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#monanimals-blast-mayhem">​</a></h2>
<p>By <a href="https://x.com/Pradeeppilot2k5" target="_blank" rel="noopener noreferrer">@Pradeeppilot2k5</a> &amp; <a href="https://x.com/vidit_0" target="_blank" rel="noopener noreferrer">@vidit_0</a></p>
<img src="https://docs.envio.dev/blog-assets/monanimals-blast.gif" alt="monanimals blast" width="100%">
<p>A gamified dashboard transforming real-time blockchain stats into interactive graphics. Monanimals symbolize block numbers, and animated graphs display key metrics such as gas usage, TPS, and block peers. Envio’s HyperRPC ensures seamless data delivery for a high-performance user experience.</p>
<p>Check it out <a href="https://monanimalblastmayhem.vercel.app/" target="_blank" rel="noopener noreferrer">here</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="indexing-monad-data-using-envio">Indexing Monad Data Using Envio<a class="hash-link" aria-label="Direct link to Indexing Monad Data Using Envio" title="Direct link to Indexing Monad Data Using Envio" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#indexing-monad-data-using-envio">​</a></h2>
<p>Envio offers a modular indexing solution for developers and analysts seeking to build scalable, real-time applications on Monad. Whether you’re building visual dashboards or analytics platforms, Envio’s indexing stack provides the essential building blocks to transform raw blockchain data into accessible, actionable insights. Here's how each component supports efficient and high-speed indexing on Monad:</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="hyperindex">HyperIndex<a class="hash-link" aria-label="Direct link to HyperIndex" title="Direct link to HyperIndex" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#hyperindex">​</a></h3>
<p>A full-featured blockchain indexing framework that transforms on-chain events into structured, queryable databases with GraphQL APIs. It offers Monad developers a complete indexing solution with schema management and event handling, making data on Monad easily accessible and developer-friendly.</p>
<p><a href="https://docs.envio.dev/docs/HyperIndex/overview" target="_blank" rel="noopener noreferrer">Learn more</a></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="hypersync">HyperSync<a class="hash-link" aria-label="Direct link to HyperSync" title="Direct link to HyperSync" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#hypersync">​</a></h3>
<p>A high-performance data retrieval layer that gives developers unprecedented access to data on Monad. It directly replaces traditional RPC endpoints, delivering up to 10,000x faster data access. HyperSync enables rapid and cost-effective retrieval of both real-time and historical blockchain data and can be used directly for custom data pipelines and specialized applications.</p>
<p><a href="https://docs.envio.dev/docs/HyperSync/overview" target="_blank" rel="noopener noreferrer">Learn more</a></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="hyperrpc">HyperRPC<a class="hash-link" aria-label="Direct link to HyperRPC" title="Direct link to HyperRPC" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#hyperrpc">​</a></h3>
<p>A local RPC proxy that supercharges blockchain data access by mapping standard RPC requests to HyperSync’s ultra-fast data engine. HyperRPC accepts typical RPC calls and translates them into HyperSync queries, dramatically reducing latency and eliminating the bottlenecks of traditional RPC endpoints.</p>
<p><a href="https://docs.envio.dev/docs/HyperRPC/overview-hyperrpc" target="_blank" rel="noopener noreferrer">Learn more</a></p>
<p>Envio makes it easy to define events, build handlers, and deploy powerful indexers that power dashboards, data tools, analytics platforms, and more at scale.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-support">Getting Support<a class="hash-link" aria-label="Direct link to Getting Support" title="Direct link to Getting Support" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#getting-support">​</a></h2>
<p>Data indexing can be challenging, especially for complex use cases. Our engineers are always ready to assist you with your data availability needs. Join our growing community of elite builders and experience peace of mind with Envio. Feel free to reach out to us on Discord or email us at <a href="mailto:hello@envio.dev" target="_blank" rel="noopener noreferrer">hello@envio.dev</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="about-envio">About Envio<a class="hash-link" aria-label="Direct link to About Envio" title="Direct link to About Envio" href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio#about-envio">​</a></h2>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Envio</a> is a modern, multichain EVM blockchain indexer designed for real-time and historical data access. If you’re building on Monad or any other EVM-compatible network, Envio is here to make your development process faster and more efficient. Explore our <a href="https://docs.envio.dev/docs/HyperIndex/overview" target="_blank" rel="noopener noreferrer">documentation</a>, join the community, and let’s connect about your data needs.</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Envio Developer Update June 2025]]></title>
            <link>https://docs.envio.dev/blog/envio-developer-update-june-2025</link>
            <guid>https://docs.envio.dev/blog/envio-developer-update-june-2025</guid>
            <pubDate>Tue, 24 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Catch up on what Envio delivered in June 2025 including new indexer tools, upgraded data pipelines, and expanded network support that simplify multichain development.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/dev-update-june-2025.png" alt="Cover Image Envio Developer Community Update June 2025" width="100%">
<p>From refining core DX with new helpers and project structure improvements to smarter multichain batching and smoother loader behavior, we shipped updates that made indexing with Envio faster, cleaner, and easier to work with.</p>
<p>We also wrapped up Mission 4 with the Monad community, ran another internal hackathon, hit DappCon Berlin, and plenty more. Let’s jump in.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="latest-releases-v2220--v2240">Latest Releases: v2.22.0 → v2.24.0<a class="hash-link" aria-label="Direct link to Latest Releases: v2.22.0 → v2.24.0" title="Direct link to Latest Releases: v2.22.0 → v2.24.0" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#latest-releases-v2220--v2240">​</a></h2>
<p><em>⚠️Note: Current Release is v2.24.0</em></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="v2220">V2.220<a class="hash-link" aria-label="Direct link to V2.220" title="Direct link to V2.220" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#v2220">​</a></h3>
<p>Added <code>context.Entity.getOrCreate</code> and <code>context.Entity.getOrThrow</code> API</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">// Before:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// let pool = await context.Pool.get(poolId);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// if (!pool) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">//  pool = {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">//    id: poolId,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">//    totalValueLockedETH: 0n</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">//  }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">//  context.Pool.set(pool);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">const pool = await context.Pool.getOrCreate({</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  id: poolId,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  totalValueLockedETH: 0n</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">})</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// Before:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// const pool = await context.Pool.get(poolId);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// if (!pool) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">//  throw new Error(`Pool with ID ${poolId} is expected.`)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">const pool = await context.Pool.getOrThrow(poolId)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// Will throw: Entity 'Pool' with ID '...' is expected to exist.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// Or you can pass a custom message as a second argument:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">const pool = await context.Pool.getOrThrow(poolId, `Pool with ID ${poolId} is expected.`)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>These are additional helpers for DX improvements. Accessible from both handlers and loaders.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="loaders-consistency">Loaders Consistency<a class="hash-link" aria-label="Direct link to Loaders Consistency" title="Direct link to Loaders Consistency" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#loaders-consistency">​</a></h3>
<p>Loaders optimize indexer performance by running twice: first in parallel for all events in the batch, and then just before handler execution to fetch the latest data. While this process remains unchanged, we've made a few improvements:</p>
<ul>
<li>
<p>If the loader fails on the first run, the error is silently ignored. This can happen if the entity is only available on the second run, so we continue indexing without interruption.</p>
</li>
<li>
<p>The HyperIndex test framework now runs the loaders twice to match the actual indexer logic.</p>
</li>
</ul>
<p>Learn more about optimizing database access with loaders in our <a href="https://docs.envio.dev/docs/HyperIndex/loaders" target="_blank" rel="noopener noreferrer">docs</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="clever-batch-creation-for-unordered-multichain-mode">Clever Batch Creation for Unordered Multichain Mode<a class="hash-link" aria-label="Direct link to Clever Batch Creation for Unordered Multichain Mode" title="Direct link to Clever Batch Creation for Unordered Multichain Mode" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#clever-batch-creation-for-unordered-multichain-mode">​</a></h3>
<p>In previous versions, events for Unordered Multichain Mode were batched based on their order on-chain, pulling from all available chains. While this approach worked, it's more efficient for larger indexers relying on loader optimization to batch events from a single chain. This increases the chances of deduplication and batch optimization.</p>
<p>In the latest version, we now prioritize creating processing batches with events from one chain, and only rotate to another chain for the next batch.</p>
<p>Learn more about multi-chain event ordering in our <a href="https://docs.envio.dev/docs/HyperIndex/multichain-indexing#multichain-event-ordering" target="_blank" rel="noopener noreferrer">docs</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="flexible-project-structure">Flexible Project Structure<a class="hash-link" aria-label="Direct link to Flexible Project Structure" title="Direct link to Flexible Project Structure" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#flexible-project-structure">​</a></h3>
<p>Previously, to get HyperIndex running, we had a few requirements that limited flexibility and could be confusing:</p>
<ul>
<li>It required <strong><code>pnpm-workspaces.yaml</code></strong> file</li>
<li>It required <strong><code>.npmrc</code></strong> file with shamefully hoisting dependencies</li>
<li>It required to have the start script in your <strong><code>package.json</code></strong> with <code>ts-<strong>node</strong> <strong>generated</strong>/src/Index.bs.js</code></li>
</ul>
<p>With the latest update, none of these are necessary. Feel free to remove them, and instead of using <code>ts-<strong>node</strong> <strong>generated</strong>/src/Index.bs.js</code>, simply replace it with <code>envio start</code>.</p>
<p>For more information, view <a href="https://github.com/enviodev/hyperindex/releases" target="_blank" rel="noopener noreferrer">all past and current release notes</a> on our GitHub.</p>
<p>If you love what we’re building as much as we do and want to stay updated on our latest releases and developments, give us a star on <a href="https://github.com/enviodev/hyperindex" target="_blank" rel="noopener noreferrer">GitHub</a>! Your support means the world to us! ⭐</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="mission-4-building-visualizers--dashboards-on-monad">Mission 4: Building Visualizers &amp; Dashboards on Monad<a class="hash-link" aria-label="Direct link to Mission 4: Building Visualizers &amp; Dashboards on Monad" title="Direct link to Mission 4: Building Visualizers &amp; Dashboards on Monad" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#mission-4-building-visualizers--dashboards-on-monad">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/visualizers-and-dash-monad.png" alt="mission 4" width="100%">
<p>As part of Mission 4 with the Monad Developer community, we invited builders to push the limits of real-time dashboards and visualizers on Monad, powered by Envio. The outcome? A wave of standout projects that combined sharp design with serious indexing performance.</p>
<p>Catch the highlights in our <a href="https://docs.envio.dev/blog/how-to-build-visualizers-and-dashboards-on-monad-using-envio" target="_blank" rel="noopener noreferrer">blog</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="exploring-cross-chain-arbitrage-on-uniswap-v4">Exploring Cross-Chain Arbitrage on Uniswap V4<a class="hash-link" aria-label="Direct link to Exploring Cross-Chain Arbitrage on Uniswap V4" title="Direct link to Exploring Cross-Chain Arbitrage on Uniswap V4" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#exploring-cross-chain-arbitrage-on-uniswap-v4">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/arbitrage-v4.png" alt="v4 arbitrage" width="100%">
<p>Curious how much prices diverge across the same Uniswap V4 pools deployed on different chains? One builder tracked ETH/USDC across Ethereum, Base, Arbitrum, and Unichain, building a real-time dashboard that surfaces price discrepancies, trade sizes, and cross-chain spread opportunities as they appear.</p>
<p><a href="https://www.v4.xyz/" target="_blank" rel="noopener noreferrer">V4</a> digs into how often mispricings occur, how significant they get, and how quickly they're arbitraged, highlighting the unique challenges of cross-chain arbitrage.</p>
<p>Read more on <a href="https://x.com/jonjonclark/status/1936066826149994585" target="_blank" rel="noopener noreferrer">X</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="internal-hackathon">Internal Hackathon<a class="hash-link" aria-label="Direct link to Internal Hackathon" title="Direct link to Internal Hackathon" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#internal-hackathon">​</a></h2>
<p>This month, we wrapped up another internal hackathon. 24 hours, 7 hackers, and a stack of ideas. The goal? Build fast, test new concepts, and push Envio’s tech in new directions.</p>
<p>Take a look at what we shipped by reading this <a href="https://x.com/envio_indexer/status/1929907328163213409" target="_blank" rel="noopener noreferrer">thread</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-index-data-on-megaeth-using-envio">How to Index Data on MegaEth Using Envio<a class="hash-link" aria-label="Direct link to How to Index Data on MegaEth Using Envio" title="Direct link to How to Index Data on MegaEth Using Envio" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#how-to-index-data-on-megaeth-using-envio">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/megaeth.png" alt="index megaeth data" width="100%">
<p>When speed is the baseline, precision becomes the edge. Envio proudly supports developers and data analysts building on MegaEth with the most performant real-time indexing stack designed for high-throughput environments. Get fast, reliable access to both real-time and historical data without the usual bottlenecks.</p>
<p>Learn more about how to efficiently index data on MegaEth in our <a href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio" target="_blank" rel="noopener noreferrer">blog</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="join-us-at-pragma-cannes">Join Us at Pragma Cannes<a class="hash-link" aria-label="Direct link to Join Us at Pragma Cannes" title="Direct link to Join Us at Pragma Cannes" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#join-us-at-pragma-cannes">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/pragma-jonjon.png" alt="pragma jonjon" width="100%">
<p>We’re heading to EthGlobal’s Pragma in Cannes and running a hands-on workshop built for developers. Learn how to easily access, index, and query multi-chain data with Envio.</p>
<p>Still need a ticket? Grab $70 off with our <a href="https://ethglobal.com/events/pragma-cannes?ref=JONJONNCE" target="_blank" rel="noopener noreferrer">referral link</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="analyzing-safe-data-in-real-time-using-hyperindex">Analyzing Safe Data in Real-time Using HyperIndex<a class="hash-link" aria-label="Direct link to Analyzing Safe Data in Real-time Using HyperIndex" title="Direct link to Analyzing Safe Data in Real-time Using HyperIndex" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#analyzing-safe-data-in-real-time-using-hyperindex">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/analyzing-safe-data.png" alt="safe data" width="100%">
<p>Missed our speaking slot at DappCon? We got you boo! Learn how Envio’s HyperIndex unlocks instant visibility into <a href="https://safe.global/" target="_blank" rel="noopener noreferrer">Safe</a> transactions, from multisig behavior to governance and fund flows in our <a href="https://www.youtube.com/live/3_5__fpQjKM?t=18381s" target="_blank" rel="noopener noreferrer">developer workshop</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-index-data-on-monad-using-envio">How to Index Data on Monad Using Envio<a class="hash-link" aria-label="Direct link to How to Index Data on Monad Using Envio" title="Direct link to How to Index Data on Monad Using Envio" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#how-to-index-data-on-monad-using-envio">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/index-data-on-monad.png" alt="indexing monad" width="100%">
<p>Envio is proud to support developers and data analysts building on <a href="https://www.monad.xyz/" target="_blank" rel="noopener noreferrer">Monad</a> by providing the most efficient and reliable access to real-time and historical data on the Monad network through our modular indexing stack.</p>
<p>Learn more about how to efficiently index data on Monad in our <a href="https://docs.envio.dev/blog/how-to-index-monad-data-using-envio" target="_blank" rel="noopener noreferrer">blog</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="upcoming-events-️">Upcoming Events 🗓️<a class="hash-link" aria-label="Direct link to Upcoming Events 🗓️" title="Direct link to Upcoming Events 🗓️" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#upcoming-events-%EF%B8%8F">​</a></h2>
<ul>
<li>WAGMI Sponsors at <a href="https://ethcc.io/" target="_blank" rel="noopener noreferrer">EthCC</a> Cannes: 30th June → 3rd July 2025</li>
<li><a href="https://ethglobal.com/events/pragma-cannes" target="_blank" rel="noopener noreferrer">Pragma</a> Cannes: July 3rd, 2025</li>
<li>Devconnect Buenos Aires: 17th → 22nd November 2025</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="featured-developer-">Featured Developer 🧑‍💻<a class="hash-link" aria-label="Direct link to Featured Developer 🧑‍💻" title="Direct link to Featured Developer 🧑‍💻" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#featured-developer-">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/dev-of-the-month-june-2025.png" alt="DOTM June" width="100%">
<p>This month’s featured developer is Thalles Passos. He’s a full-stack developer from Brazil who started building professionally at just 17. Thalles began his journey with <a href="https://notus.team/" target="_blank" rel="noopener noreferrer">Notus Labs</a> and is now working on <a href="https://docs.notus.team/docs/guides" target="_blank" rel="noopener noreferrer">Notus API</a>, where the team is creating a complete suite for account abstraction.</p>
<p>He’s also been an active part of the Envio community, giving thoughtful feedback and pushing our indexing tools in real use cases.</p>
<p><em><strong>“Initially, I found Envio's developer experience a bit unusual and wasn't convinced it was the right fit. However, once I gave it a real try, I was absolutely blown away by its speed. What other indexers might take weeks to accomplish, Envio completed in mere days, and that instantly hooked me.</strong></em></p>
<p><em><strong>Their support also truly impressed me. As anyone in web3 knows, getting effective support can be an impossible feat, but Envio completely changed that for me, guiding me through various issues. And as a Brazilian company, where the dollar exchange rate is always a consideration, their pricing structure was incredibly appealing and genuinely surprised us.”</strong></em> - <em>Thalles Passos Full-stack Developer At Notus Labs</em></p>
<p>Be sure to follow Thalles on <a href="https://x.com/thallescomumh" target="_blank" rel="noopener noreferrer">X</a> and check out his work on <a href="https://github.com/thallesp" target="_blank" rel="noopener noreferrer">GitHub</a> to see what he’s building next.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="playlist-of-the-month-️">Playlist of the Month 🎧️<a class="hash-link" aria-label="Direct link to Playlist of the Month 🎧️" title="Direct link to Playlist of the Month 🎧️" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#playlist-of-the-month-%EF%B8%8F">​</a></h2>
<img src="https://docs.envio.dev/blog-assets/june-playlist.png" alt="hjune playlist" width="100%">
<p>▶️ <a href="https://open.spotify.com/playlist/0YkXxUDzOrUSh2h0eznxu6?si=192e7f80b18e478a" target="_blank" rel="noopener noreferrer">Open Spotify</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="ship-with-us-">Ship With Us 🚢<a class="hash-link" aria-label="Direct link to Ship With Us 🚢" title="Direct link to Ship With Us 🚢" href="https://docs.envio.dev/blog/envio-developer-update-june-2025#ship-with-us-">​</a></h2>
<p>Envio is a multichain EVM blockchain indexing solution for querying real-time and historical data. If you’re working on a Web3 project and want a smoother development process, Envio’s got your back(end). Check out our docs, join the community, and let’s talk about your data needs.</p>
<p>Stay tuned for more monthly updates by subscribing to our newsletter, following us on X, or hopping into our Discord for more up-to-date information.</p>
<p><a href="https://envio.beehiiv.com/subscribe?utm_source=envio.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=new-post" target="_blank" rel="noopener noreferrer">Subscribe to our newsletter</a> 💌</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Index MegaEth Data Using Envio]]></title>
            <link>https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio</link>
            <guid>https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio</guid>
            <pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn how to index data on the MegaEth using Envio with a step-by-step guide to project setup contract mapping and real-time data querying.]]></description>
            <content:encoded><![CDATA[<img src="https://docs.envio.dev/blog-assets/indexing-megaeth-data.png" alt="Cover Image How to Index MegaEth Data Using Envio" width="100%">
<p>When speed is the baseline, precision becomes the edge. Envio proudly supports developers and data analysts building on MegaEth with the most performant real-time indexing stack designed for high-throughput environments. Get fast, reliable access to both real-time and historical data without the usual bottlenecks.</p>
<p>MegaEth is reshaping what real-time looks like on the EVM. With sub-millisecond block times and support for over 100,000 transactions per second, built for next-gen applications that demand scale, speed, and reliability.</p>
<p>In this blog, we’ll walk through how to easily index, sync, and query millions of events on MegaEth in minutes using Envio. From setup to production, learn how to get the most out of one of the fastest chains in the ecosystem.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-megaeth">What is MegaEth?<a class="hash-link" aria-label="Direct link to What is MegaEth?" title="Direct link to What is MegaEth?" href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio#what-is-megaeth">​</a></h2>
<p><a href="https://www.megaeth.com/" target="_blank" rel="noopener noreferrer">MegaEth</a> is a high-performance EVM chain purpose-built for real-time applications. It combines sub-millisecond block times with over 100,000 transactions per second, giving developers a foundation to build real-time, responsive, production-grade apps.</p>
<p>Unlike other chains that trade off EVM compatibility for speed, MegaEth keeps your Solidity code, dev tools, and mental models intact. You get Ethereum’s programming experience with none of the latency. Whether you’re powering data analytics, an on-chain game, or a reactive dashboard, MegaEth makes sure your stack never lags behind your users.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-features">Key Features:<a class="hash-link" aria-label="Direct link to Key Features:" title="Direct link to Key Features:" href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio#key-features">​</a></h4>
<ul>
<li>
<p><a href="https://docs.megaeth.com/mini-blocks" target="_blank" rel="noopener noreferrer">Mini Blocks + EVM Blocks</a>: Fast mini-blocks (~10 ms) combined with full EVM block finality offer real-time latency and standard blockchain guarantees.</p>
</li>
<li>
<p><a href="https://docs.megaeth.com/architecture" target="_blank" rel="noopener noreferrer">High-Throughput Sequencing + Parallel Execution</a>: MegaEth achieves high TPS through a centralized sequencer architecture and parallel execution across node types.</p>
</li>
<li>
<p><a href="https://docs.megaeth.com/realtime-api" target="_blank" rel="noopener noreferrer">Realtime API Access</a>: The Realtime API surfaces mini-block data via standard JSON-RPC methods, allowing near-instant visibility into state and transaction outcomes.</p>
</li>
<li>
<p><strong>EigenDA-Powered Data Availability</strong>: By integrating EigenDA, MegaEth enables scalable, secure data access without burdening Ethereum’s on-chain storage.</p>
</li>
<li>
<p><strong>Full EVM Support</strong>: MegaEth supports Solidity, EIP‑1559, EIP‑7702, large contract sizes, and existing Ethereum tooling out of the box.</p>
</li>
</ul>
<p>These core building blocks make MegaEth a robust environment for building everything from real-time DeFi and high-frequency trading bots to streaming on-chain gaming and on-demand NFT mints, all at warp speed.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-index-data-on-megaeth">How to Index Data on MegaEth<a class="hash-link" aria-label="Direct link to How to Index Data on MegaEth" title="Direct link to How to Index Data on MegaEth" href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio#how-to-index-data-on-megaeth">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="hyperindex">HyperIndex<a class="hash-link" aria-label="Direct link to HyperIndex" title="Direct link to HyperIndex" href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio#hyperindex">​</a></h3>
<p>A full-featured blockchain indexing framework that transforms on-chain events into structured, queryable databases with GraphQL APIs. It offers MegaEth developers a complete indexing solution with schema management and event handling, making data on MegaEth easily accessible and developer-friendly.</p>
<p><a href="https://docs.envio.dev/docs/HyperIndex/overview" target="_blank" rel="noopener noreferrer">Learn more</a></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="hypersync">HyperSync<a class="hash-link" aria-label="Direct link to HyperSync" title="Direct link to HyperSync" href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio#hypersync">​</a></h3>
<p>A high-performance data retrieval layer that gives developers unprecedented access to data on MegaEth. It directly replaces traditional RPC endpoints for raw block data, delivering up to 10,000x faster data access. HyperSync enables rapid and cost-effective retrieval of both real-time and historical blockchain data and can be used directly for custom data pipelines and specialized applications.</p>
<p><a href="https://docs.envio.dev/docs/HyperSync/overview" target="_blank" rel="noopener noreferrer">Learn more</a></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="hyperrpc">HyperRPC<a class="hash-link" aria-label="Direct link to HyperRPC" title="Direct link to HyperRPC" href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio#hyperrpc">​</a></h3>
<p>A local RPC proxy that supercharges blockchain data access by mapping standard RPC requests to HyperSync’s ultra-fast data engine. HyperRPC accepts typical RPC calls and translates them into HyperSync queries, dramatically reducing query time and eliminating the bottlenecks of traditional RPC endpoints.</p>
<p><a href="https://docs.envio.dev/docs/HyperRPC/overview-hyperrpc" target="_blank" rel="noopener noreferrer">Learn more</a></p>
<p>MegaEth moves fast, and your indexing stack should too. Envio gives you the infrastructure to match that speed, so you can build applications that are responsive, reliable, and ready for scale.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="additional-features-for-megaeth-indexers-built-using-envio">Additional Features for MegaEth Indexers Built Using Envio<a class="hash-link" aria-label="Direct link to Additional Features for MegaEth Indexers Built Using Envio" title="Direct link to Additional Features for MegaEth Indexers Built Using Envio" href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio#additional-features-for-megaeth-indexers-built-using-envio">​</a></h3>
<p>Envio offers a range of advanced capabilities that make it easy to build rich, flexible data pipelines on MegaEth:</p>
<ul>
<li><strong>Flexible Language Suppor</strong>t: Configure your event handling in familiar and widely supported languages such as JavaScript, TypeScript, or ReScript.</li>
<li><strong>No-Code Quickstart</strong>: Autogenerate the key boilerplate for an entire indexer project based on single or multiple smart contracts. Deploy within minutes.</li>
<li><strong>Multichain Support</strong>: Aggregate data across multiple networks into a single database and query everything through a unified GraphQL API.</li>
<li><strong>Join On-Chain and Off-Chain Data</strong>: Connect indexed blockchain data with off-chain data to create a flexible API that goes beyond simple on-chain event logs, such as integrating external NFT metadata.</li>
<li><strong>Factory Contracts</strong>: Automatically register and process events emitted by all child contracts created by a specified factory or dynamic contract.</li>
<li><strong>Hosted Service</strong>: The simplest way to deploy production-ready indexers on MegaEth. A managed service platform for building, hosting, and querying Envio's Indexers with guaranteed uptime and performance service level agreements.</li>
</ul>
<p>These additional features make Envio the ideal choice for building next-generation data-driven applications on MegaEth and beyond.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="existing-use-cases-on-megaeth-utilizing-envio">Existing Use Cases on MegaEth Utilizing Envio<a class="hash-link" aria-label="Direct link to Existing Use Cases on MegaEth Utilizing Envio" title="Direct link to Existing Use Cases on MegaEth Utilizing Envio" href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio#existing-use-cases-on-megaeth-utilizing-envio">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="oracle-wars">Oracle Wars<a class="hash-link" aria-label="Direct link to Oracle Wars" title="Direct link to Oracle Wars" href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio#oracle-wars">​</a></h3>
<img src="https://docs.envio.dev/blog-assets/megaeth-oracle-wars.png" alt="orcale wars megaeth" width="100%">
<p><a href="https://www.oraclewars.xyz/" target="_blank" rel="noopener noreferrer">Oracle Wars</a> is an experimental dashboard built with Envio’s HyperIndex that visualizes real-time oracle behavior on MegaEth. It showcases how push-based oracles like <a href="https://blog.redstone.finance/2025/04/08/introducing-redstone-bolt-the-fastest-blockchain-oracle-to-date/" target="_blank" rel="noopener noreferrer">RedStone Bolt</a> behave under live market conditions by tracking heartbeat intervals, deviation thresholds, and latency patterns. The project helps developers understand how oracles operate in volatile environments and the potential risks of delayed or unexpected updates. Built in under two hours, Oracle Wars demonstrates how Envio enables rapid development of real-time monitoring tools on high-throughput chains like MegaEth.</p>
<p>Take a deeper dive in our full <a href="https://docs.envio.dev/blog/oracle-wars" target="_blank" rel="noopener noreferrer">Oracle Wars blog</a>.</p>
<p>This is just one of many great examples of what Envio is powering in the MegaEth ecosystem. For more, explore our <a href="https://envio.dev/explorer" target="_blank" rel="noopener noreferrer">Envio Explorer</a> and see what developers are building.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="relevant-resources">Relevant Resources<a class="hash-link" aria-label="Direct link to Relevant Resources" title="Direct link to Relevant Resources" href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio#relevant-resources">​</a></h2>
<ul>
<li><a href="https://docs.envio.dev/docs/HyperIndex/getting-started" target="_blank" rel="noopener noreferrer">Getting Started</a></li>
<li><a href="https://docs.envio.dev/docs/HyperSync/overview" target="_blank" rel="noopener noreferrer">Envio’s HyperSync</a></li>
<li><a href="https://docs.envio.dev/docs/HyperIndex/hosted-service" target="_blank" rel="noopener noreferrer">Envio’s Hosted Service</a></li>
<li><a href="https://docs.envio.dev/docs/HyperIndex/megaeth-testnet#indexing-megaeth-testnet-data-with-envio" target="_blank" rel="noopener noreferrer">Indexing MegaEth Data with Envio</a></li>
<li><a href="https://docs.megaeth.com/infra" target="_blank" rel="noopener noreferrer">Indexers on MegaEth</a></li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-support">Getting Support<a class="hash-link" aria-label="Direct link to Getting Support" title="Direct link to Getting Support" href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio#getting-support">​</a></h2>
<p>Data indexing can be challenging, especially for complex use cases. Our engineers are always ready to assist you with your data needs. Join our growing community of elite builders and experience peace of mind with Envio. Feel free to reach out to us on Discord or email us at <a href="mailto:hello@envio.dev" target="_blank" rel="noopener noreferrer">hello@envio.dev</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="about-envio">About Envio<a class="hash-link" aria-label="Direct link to About Envio" title="Direct link to About Envio" href="https://docs.envio.dev/blog/how-to-index-megaeth-data-using-envio#about-envio">​</a></h2>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Envio</a> is a modern, multichain EVM blockchain indexing toolkit designed for real-time and historical data access. If you’re building on MegaEth or any other EVM-compatible network, Envio is here to make your development process faster and more efficient. Explore our <a href="https://docs.envio.dev/docs/HyperIndex/overview" target="_blank" rel="noopener noreferrer">documentation</a>, join the community, and let’s connect about your data needs.</p>
<p><a href="https://envio.dev/" target="_blank" rel="noopener noreferrer">Website</a> | <a href="https://twitter.com/envio_indexer" target="_blank" rel="noopener noreferrer">X</a> | <a href="https://discord.com/invite/gt7yEUZKeB" target="_blank" rel="noopener noreferrer">Discord</a> | <a href="https://t.me/+5mI61oZibEM5OGQ8" target="_blank" rel="noopener noreferrer">Telegram</a> | <a href="https://github.com/enviodev" target="_blank" rel="noopener noreferrer">GitHub</a> | <a href="https://www.youtube.com/channel/UCR7nZ2yzEtc5SZNM0dhrkhA" target="_blank" rel="noopener noreferrer">YouTube</a> | <a href="https://www.reddit.com/user/Envio_indexer" target="_blank" rel="noopener noreferrer">Reddit</a></p>]]></content:encoded>
        </item>
    </channel>
</rss>